{
  "version": 3,
  "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/dot/doT.js", "../../../node_modules/debounce/index.js", "../../../node_modules/@uppy/utils/lib/Translator.js", "../../../node_modules/@uppy/core/lib/BasePlugin.js", "../../../node_modules/@uppy/utils/lib/getTimeStamp.js", "../../../node_modules/@uppy/core/lib/loggers.js", "../../../node_modules/@uppy/utils/lib/isDOMElement.js", "../../../node_modules/@uppy/utils/lib/findDOMElement.js", "../../../node_modules/@uppy/utils/lib/getTextDirection.js", "../../../node_modules/preact/src/constants.js", "../../../node_modules/preact/src/util.js", "../../../node_modules/preact/src/options.js", "../../../node_modules/preact/src/create-element.js", "../../../node_modules/preact/src/component.js", "../../../node_modules/preact/src/diff/props.js", "../../../node_modules/preact/src/create-context.js", "../../../node_modules/preact/src/diff/children.js", "../../../node_modules/preact/src/diff/index.js", "../../../node_modules/preact/src/render.js", "../../../node_modules/preact/src/clone-element.js", "../../../node_modules/preact/src/diff/catch-error.js", "../../../node_modules/preact/hooks/src/index.js", "../../../node_modules/preact/compat/src/util.js", "../../../node_modules/preact/compat/src/hooks.js", "../../../node_modules/preact/compat/src/PureComponent.js", "../../../node_modules/preact/compat/src/memo.js", "../../../node_modules/preact/compat/src/forwardRef.js", "../../../node_modules/preact/compat/src/Children.js", "../../../node_modules/preact/compat/src/suspense.js", "../../../node_modules/preact/compat/src/suspense-list.js", "../../../node_modules/preact/src/constants.js", "../../../node_modules/preact/compat/src/portals.js", "../../../node_modules/preact/compat/src/render.js", "../../../node_modules/preact/compat/src/index.js", "../../../node_modules/@uppy/core/lib/UIPlugin.js", "../../../node_modules/@uppy/store-default/package.json", "../../../node_modules/@uppy/store-default/lib/index.js", "../../../node_modules/@uppy/utils/lib/getFileNameAndExtension.js", "../../../node_modules/@uppy/utils/lib/mimeTypes.js", "../../../node_modules/@uppy/utils/lib/getFileType.js", "../../../node_modules/@uppy/utils/lib/generateFileID.js", "../../../node_modules/lodash/isObject.js", "../../../node_modules/lodash/_freeGlobal.js", "../../../node_modules/lodash/_root.js", "../../../node_modules/lodash/now.js", "../../../node_modules/lodash/_trimmedEndIndex.js", "../../../node_modules/lodash/_baseTrim.js", "../../../node_modules/lodash/_Symbol.js", "../../../node_modules/lodash/_getRawTag.js", "../../../node_modules/lodash/_objectToString.js", "../../../node_modules/lodash/_baseGetTag.js", "../../../node_modules/lodash/isObjectLike.js", "../../../node_modules/lodash/isSymbol.js", "../../../node_modules/lodash/toNumber.js", "../../../node_modules/lodash/debounce.js", "../../../node_modules/lodash/throttle.js", "../../../node_modules/namespace-emitter/index.js", "../../../node_modules/nanoid/non-secure/index.js", "../../../node_modules/@uppy/core/package.json", "../../../node_modules/@uppy/core/lib/getFileName.js", "../../../node_modules/@uppy/core/lib/locale.js", "../../../node_modules/@transloadit/prettier-bytes/src/prettierBytes.ts", "../../../node_modules/wildcard/index.js", "../../../node_modules/mime-match/index.js", "../../../node_modules/@uppy/core/lib/Restricter.js", "../../../node_modules/@uppy/core/lib/supportsUploadProgress.js", "../../../node_modules/@uppy/core/lib/Uppy.js", "../../../node_modules/@uppy/core/lib/index.js", "../../../node_modules/classnames/index.js", "../../../node_modules/@uppy/utils/lib/isDragDropSupported.js", "../../../node_modules/@uppy/utils/lib/toArray.js", "../../../node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js", "../../../node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js", "../../../node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js", "../../../node_modules/@uppy/utils/lib/getDroppedFiles/index.js", "../../javascript/components/uppy/tut-drag-drop/index.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/webpack/universalModuleDefinition", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/webpack/runtime/create%20fake%20namespace%20object", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/color-convert/conversions.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/color-convert/index.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/color-convert/route.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/color-name/index.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/webpack/bootstrap", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/webpack/runtime/define%20property%20getters", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/webpack/runtime/hasOwnProperty%20shorthand", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/webpack/runtime/make%20namespace%20object", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/default_config.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/global.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/env.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/fastdiff.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/diff.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/mix.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/spy.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/eventinfo.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/uid.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/priorities.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/inserttopriorityarray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/ckeditorerror.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/version.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/emittermixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isObject.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/observablemixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/elementreplacer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/count.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/comparearrays.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/isiterable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_freeGlobal.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_root.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_Symbol.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getRawTag.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_objectToString.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseGetTag.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isObjectLike.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isString.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/createelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_overArg.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getPrototype.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isPlainObject.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_listCacheClear.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/eq.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_assocIndexOf.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_listCacheDelete.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_listCacheGet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_listCacheHas.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_listCacheSet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_ListCache.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_stackClear.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_stackDelete.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_stackGet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_stackHas.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isFunction.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_coreJsData.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_isMasked.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_toSource.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsNative.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getValue.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getNative.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_Map.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_nativeCreate.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_hashClear.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_hashDelete.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_hashGet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_hashHas.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_hashSet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_Hash.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_mapCacheClear.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_isKeyable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getMapData.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_mapCacheDelete.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_mapCacheGet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_mapCacheHas.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_mapCacheSet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_MapCache.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_stackSet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_Stack.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_arrayEach.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_defineProperty.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseAssignValue.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_assignValue.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_copyObject.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseTimes.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsArguments.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isArguments.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/stubFalse.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isBuffer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_isIndex.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isLength.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsTypedArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseUnary.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_nodeUtil.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isTypedArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_arrayLikeKeys.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_isPrototype.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_nativeKeys.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseKeys.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isArrayLike.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/keys.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseAssign.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_nativeKeysIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseKeysIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/keysIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseAssignIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_cloneBuffer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_copyArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_arrayFilter.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/stubArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getSymbols.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_copySymbols.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_arrayPush.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getSymbolsIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_copySymbolsIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseGetAllKeys.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getAllKeys.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getAllKeysIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_DataView.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_Promise.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_Set.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_WeakMap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getTag.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_initCloneArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_Uint8Array.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_cloneArrayBuffer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_cloneDataView.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_cloneRegExp.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_cloneSymbol.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_cloneTypedArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_initCloneByTag.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseCreate.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_initCloneObject.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsMap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isMap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsSet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isSet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseClone.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/cloneDeepWith.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isElement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/config.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/isnode.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/iswindow.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/emittermixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/getancestors.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/getborderwidths.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/getrangefrommouseevent.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/istext.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/isrange.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/getpositionedancestor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/rect.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/resizeobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/setdatainelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/tounit.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/indexof.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/insertat.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/iscomment.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/isvisible.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/position.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/remove.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/scroll.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/keyboard.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/toarray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_assignMergeValue.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseFor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_createBaseFor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isArrayLikeObject.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_safeGet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/toPlainObject.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseMergeDeep.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseMerge.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/identity.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_apply.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_overRest.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/constant.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseSetToString.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_shortOut.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_setToString.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseRest.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_isIterateeCall.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_createAssigner.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/merge.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/translation-service.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/language.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/locale.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/collection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/first.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/focustracker.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/keystrokehandler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/tomap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/objecttomap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/splicearray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/delay.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/unicode.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/plugin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/command.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/multicommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/plugincollection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/context.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/contextplugin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/placeholder.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/typecheckable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/clone.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/node.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/text.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/textproxy.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/matcher.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isSymbol.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_isKey.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/memoize.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_memoizeCapped.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_stringToPath.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_arrayMap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseToString.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/toString.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_castPath.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/last.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_toKey.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseGet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseSlice.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_parent.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseUnset.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/unset.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/get.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseSet.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/set.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/stylesmap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/element.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/containerelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/editableelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/rooteditableelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/treewalker.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/position.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/range.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/selection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/documentselection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/bubblingeventinfo.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/bubblingemittermixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/document.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/attributeelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/emptyelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/uielement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/rawelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/documentfragment.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/downcastwriter.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/filler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/renderer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/domconverter.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/isvalidattributename.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/observer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/assignIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/domeventdata.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/domeventobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/keyobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/now.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_trimmedEndIndex.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseTrim.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/toNumber.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/debounce.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/fakeselectionobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_setCacheAdd.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_setCacheHas.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_SetCache.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_arraySome.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_cacheHas.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_equalArrays.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_mapToArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_setToArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_equalByTag.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_equalObjects.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsEqualDeep.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsEqual.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isEqualWith.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/mutationobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/focusobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/selectionobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/compositionobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/datatransfer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/inputobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/arrowkeysobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/tabobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/cloneDeep.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/view.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/typecheckable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/node.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/nodelist.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/text.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/textproxy.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/element.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/treewalker.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/position.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/range.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/mapper.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/modelconsumable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/downcastdispatcher.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/selection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/liverange.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/documentselection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/conversionhelpers.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/downcasthelpers.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/utils/autoparagraphing.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/upcasthelpers.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/utils/selection-post-fixer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/controller/editingcontroller.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/viewconsumable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/schema.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/upcastdispatcher.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/dataprocessor/basichtmlwriter.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/controller/datacontroller.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/conversion/conversion.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/operation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/moveoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/insertoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/splitoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/mergeoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/markeroperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/isEqual.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/attributeoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/nooperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/renameoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/rootattributeoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/rootoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/operationfactory.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/transform.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/liveposition.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/batch.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/differ.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/history.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/rootelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/document.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/markercollection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/operation/detachoperation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/documentfragment.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/writer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/utils/deletecontent.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/utils/getselectedcontent.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/utils/insertcontent.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/utils/insertobject.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/utils/modifyselection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/model/model.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/clickobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/upcastwriter.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/styles/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/styles/background.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/styles/border.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/styles/margin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-engine/src/view/styles/padding.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-watchdog/src/watchdog.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-watchdog/src/utils/getsubnodes.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-watchdog/src/utils/areconnectedthroughproperties.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/throttle.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-watchdog/src/editorwatchdog.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-watchdog/src/contextwatchdog.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/commandcollection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/editingkeystrokehandler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/accessibility.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/editor/editor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/editor/utils/elementapimixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/pendingactions.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/cancel.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/index.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/bold.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/caption.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/check.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/color-palette.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/eraser.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/image.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/image-upload.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/text-alternative.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/loupe.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/previous-arrow.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/next-arrow.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/importexport.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/paragraph.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/plus.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/text.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-bottom.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-middle.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-top.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-left.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-center.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-right.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-justify.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-inline-left.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-center.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-inline-right.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-full-width.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-inline.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-left.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-right.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-custom.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-full.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-large.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-small.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-medium.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/pencil.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/pilcrow.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/three-vertical-dots.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/drag-indicator.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/redo.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/undo.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/bulletedlist.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/numberedlist.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/indent.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/outdent.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/theme/icons/table.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-alignment/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-alignment/src/alignmentcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-alignment/src/alignmentediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/viewcollection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/template.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/view.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/bindings/clickoutsidehandler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/bindings/csstransitiondisablermixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/bindings/submithandler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/bindings/addkeyboardhandlingforgrid.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/icon/iconview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/button/buttonlabelview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/button/buttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/formheader/formheaderview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/focuscycler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/bindings/draggableviewmixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dialog/dialogactionsview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dialog/dialogcontentview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dialog/dialogview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dialog/dialog.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/button/listitembuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/menubarmenulistitembuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/label/labelview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editorui/accessibilityhelp/accessibilityhelpcontentview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/theme/icons/accessibility.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editorui/accessibilityhelp/accessibilityhelp.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editorui/bodycollection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/button/switchbuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/button/filedialogbuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/theme/icons/dropdown-arrow.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/collapsible/collapsibleview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorgrid/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorgrid/colortileview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/theme/icons/color-tile-check.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorgrid/colorgridview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/color-parse/index.mjs", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorpicker/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/labeledfield/labeledfieldview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/input/inputbase.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/input/inputview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/inputtext/inputtextview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/inputnumber/inputnumberview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/dropdownpanelview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/dropdownview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/button/dropdownbuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/menu/dropdownmenubuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/list/listitemview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/list/listseparatorview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/list/listitemgroupview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/list/listview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/menu/dropdownmenulistview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/menu/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/menu/dropdownmenubehaviors.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/panel/balloon/balloonpanelview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/menu/dropdownmenunestedmenupanelview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/menu/dropdownmenunestedmenuview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarseparatorview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarlinebreakview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/toolbar/normalizetoolbarconfig.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/bindings/preventdefault.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/button/splitbuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/dropdown/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/labeledfield/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/utils/math.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/utils/convert.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/utils/compare.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/utils/dom.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/components/slider.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/components/hue.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/components/saturation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/styles/color-picker.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/components/color-picker.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/styles/hue.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/styles/saturation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/vanilla-colorful/lib/entrypoints/hex.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorpicker/colorpickerview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorselector/documentcolorcollection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorselector/colorgridsfragmentview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorselector/colorpickerfragmentview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/colorselector/colorselectorview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/componentfactory.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/tooltipmanager.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editorui/poweredby.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/verifylicense.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/theme/icons/project-logo.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/arialiveannouncer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/menubarmenulistitemview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editorui/editorui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editorui/editoruiview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editableui/editableuiview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/editableui/inline/inlineeditableuiview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/notification/notification.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/model.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/panel/balloon/contextualballoon.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/panel/sticky/stickypanelview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/search/text/searchtextqueryview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/search/searchinfoview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/search/searchresultsview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/escapeRegExp.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/search/text/searchtextview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/autocomplete/autocompleteview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_basePropertyOf.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_escapeHtmlChar.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/escape.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/menubarmenubuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/menubarmenupanelview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/menubarmenuview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/menubarmenulistview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-ui/src/menubar/menubarmenulistitemfiledialogbuttonview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-alignment/src/alignmentui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/attributecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/bold/boldediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/bold/boldui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/clipboardobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/utils/viewtoplaintext.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseForOwn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIsMatch.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_isStrictComparable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_getMatchData.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_matchesStrictComparable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseMatches.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseHasIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_hasPath.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/hasIn.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseMatchesProperty.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseProperty.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_basePropertyDeep.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/property.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseIteratee.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/mapValues.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/clipboardmarkersutils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/clipboardpipeline.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/utils/normalizeclipboarddata.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/utils/plaintexttohtml.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/utils/changebuffer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/inserttextcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/inserttextobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/input.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/deletecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/deleteobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/delete.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/typing.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/utils/getlasttextline.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/textwatcher.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/twostepcaretmovement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/texttransformation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/utils/findattributerange.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-enter/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-enter/src/entercommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-enter/src/enterobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-enter/src/enter.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-enter/src/shiftentercommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-enter/src/shiftenter.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/highlightstack.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/theme/icons/drag-handle.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widgettypearound/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/theme/icons/return-arrow.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widgettypearound/widgettypearound.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/verticalnavigation.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widget.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widgettoolbarrepository.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widgetresize/resizerstate.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widgetresize/sizeview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widgetresize/resizer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-widget/src/widgetresize.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/lineview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/dragdroptarget.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/dragdropblocktoolbar.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/dragdrop.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/pasteplaintext.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-clipboard/src/clipboard.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-select-all/src/selectallcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-select-all/src/selectallediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-select-all/src/selectallui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-select-all/theme/icons/select-all.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-select-all/src/selectall.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-undo/src/basecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-undo/src/undocommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-undo/src/redocommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-undo/src/undoediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-undo/src/undoui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-undo/src/undo.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontfamily/fontfamilycommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontfamily/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontfamily/fontfamilyediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-family.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontfamily/fontfamilyui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontfamily.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontsize/fontsizecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontsize/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontsize/fontsizeediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-size.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontsize/fontsizeui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontsize.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontcolor/fontcolorcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontcolor/fontcolorediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/ui/colorui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontcolor/fontcolorui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-color.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontcolor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-background.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paragraph/src/paragraphcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paragraph/src/insertparagraphcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paragraph/src/paragraph.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-heading/src/headingcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-heading/src/headingediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-heading/src/headingui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-heading/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageutils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativeediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/ui/textalternativeformview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/ui/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativeui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/converters.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/imageloadobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/insertimagecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/replaceimagesourcecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/imageediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagesizeattributes.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/imagetypecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/imageplaceholder.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/imageblockediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageinsert/ui/imageinsertformview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageinsert/imageinsertui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageblock.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image/imageinlineediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageinline.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagecaption/toggleimagecaptioncommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionutils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseEach.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_createBaseEach.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_baseMap.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/map.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/resizeimagecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/imageresizeediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/imageresizebuttons.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/imageresizehandles.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/utils/tryparsedimensionwithunit.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/utils/getselectedimageeditornodes.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/ui/imagecustomresizeformview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/imagecustomresizeui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/utils/getselectedimagewidthinunits.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize/utils/getselectedimagepossibleresizerange.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagestyle/imagestylecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagestyle/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagestyle/converters.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagestyle/imagestyleediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagestyle/imagestyleui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageupload/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageupload/imageuploadui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-upload/src/filereader.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-upload/src/filerepository.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageupload/imageuploadprogress.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageupload/uploadimagecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageupload/imageuploadediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-indent/src/indentediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-indent/src/indentui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-indent/src/indentblockcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-indent/src/indentcommandbehavior/indentusingoffset.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-indent/src/indentcommandbehavior/indentusingclasses.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-indent/src/indentblock.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/italic/italicediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/theme/icons/italic.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/italic/italicui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/utils/automaticdecorators.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_castSlice.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_hasUnicode.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_asciiToArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_unicodeToArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_stringToArray.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/upperFirst.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/lodash-es/_createCaseFirst.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/linkcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/unlinkcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/utils/manualdecorator.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/linkediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-typing/src/utils/inlinehighlight.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/ui/linkformview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/ui/linkactionsview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/theme/icons/unlink.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/theme/icons/link.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/linkui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/autolink.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/utils/listwalker.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/utils/model.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/listindentcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/listcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/listmergecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/listsplitcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/listutils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/utils/view.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/utils/postfixers.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/converters.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/listediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list/listui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/converters.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembedcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/mediaregistry.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/theme/icons/media-placeholder.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembedediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/automediaembed.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/ui/mediaformview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembedui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/theme/icons/media.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-mention/src/mentioncommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-mention/src/mentionediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-mention/src/ui/mentionsview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-mention/src/ui/domwrapperview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-mention/src/ui/mentionlistitemview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-mention/src/mentionui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/list.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/image.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/normalizers/mswordnormalizer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/removemsattributes.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/br.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/normalizers/googledocsnormalizer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/removeboldwrapper.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/normalizers/googlesheetsnormalizer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/removegooglesheetstag.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/removexmlns.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/removeinvalidtablewidth.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/removestyleblock.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/space.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/filters/parse.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-remove-format/theme/icons/remove-format.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-remove-format/src/removeformatui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-remove-format/src/removeformatcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-remove-format/src/removeformatediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/strikethrough/strikethroughediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/theme/icons/strikethrough.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/strikethrough/strikethroughui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/converters/tableproperties.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/utils/common.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/converters/upcasttable.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablewalker.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/converters/downcast.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/inserttablecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/insertrowcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/insertcolumncommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/splitcellcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/utils/structure.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/mergecellcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/removerowcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/removecolumncommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/setheaderrowcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/setheadercolumncommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecolumnresize/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableutils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/mergecellscommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/selectrowcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/commands/selectcolumncommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/converters/table-layout-post-fixer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/converters/table-cell-paragraph-post-fixer.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/converters/table-cell-refresh-handler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/converters/table-headings-refresh-handler.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/ui/inserttableview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/theme/icons/table-column.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/theme/icons/table-row.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/theme/icons/table-merge-cell.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableselection.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableclipboard.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablekeyboard.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablemouse/mouseeventsobserver.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablemouse.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/ui/colorinputview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/utils/ui/table-properties.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/ui/formrowview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/ui/tablecellpropertiesview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/utils/ui/widget.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/utils/ui/contextualballoon.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/utils/table-properties.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/tablecellpropertiesui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/theme/icons/table-cell-properties.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellpropertycommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellwidth/commands/tablecellwidthcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellwidth/tablecellwidthediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellpaddingcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellheightcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellborderstylecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellbordercolorcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/commands/tablecellborderwidthcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties/tablecellpropertiesediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tablepropertycommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tablebackgroundcolorcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tablebordercolorcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tableborderstylecommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tableborderwidthcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tablewidthcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tableheightcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/commands/tablealignmentcommand.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/tablepropertiesediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/ui/tablepropertiesview.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/theme/icons/table-properties.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties/tablepropertiesui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/tutorize-media-upload/src/mediauploadui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/tutorize-media-upload/theme/icons/media.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/tutorize-media-file-embed/src/mediafileembed.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/underline/underlineediting.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/theme/icons/underline.svg", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/underline/underlineui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-word-count/src/utils.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/default_plugins.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-alignment/src/alignment.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/bold.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-essentials/src/essentials.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-font/src/font.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-heading/src/heading.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/image.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagecaption.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageresize.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagestyle.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imagetoolbar.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-image/src/imageupload.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-indent/src/indent.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/italic.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-link/src/link.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-list/src/list.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembed.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-mention/src/mention.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-paste-from-office/src/pastefromoffice.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-remove-format/src/removeformat.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/strikethrough.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/table.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tablecellproperties.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tableproperties.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-table/src/tabletoolbar.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/tutorize-media-upload/src/mediaupload.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-basic-styles/src/underline.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-word-count/src/wordcount.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-editor-classic/src/classiceditorui.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/tutorize_classic_editor_ui_view.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/tutorize_classic_editor.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-utils/src/dom/getdatafromelement.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/editor/utils/attachtoform.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/node_modules/@ckeditor/ckeditor5-core/src/editor/utils/dataapimixin.js", "webpack://@ckeditor/tutorize-ckeditor5-build-classic/src/main.js", "../../../node_modules/mediaelement/build/mediaelement-and-player.js", "../../../node_modules/mediaelement/full.js", "../../../node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js", "../../javascript/channels/index.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.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/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/assignment_controller.js", "../../../node_modules/async-pick/src/async-pick/async-pick-markup.js", "../../../node_modules/async-pick/src/async-pick/i18n/de.js", "../../../node_modules/async-pick/src/async-pick/i18n/en.js", "../../../node_modules/async-pick/src/async-pick/i18n/es.js", "../../../node_modules/async-pick/src/async-pick/i18n/fr.js", "../../../node_modules/async-pick/src/async-pick.js", "../../javascript/controllers/async_pick_controller.js", "../../../node_modules/@popperjs/core/lib/index.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/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-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/util/config.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/util/swipe.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../javascript/controllers/auto_redirect_controller.js", "../../javascript/controllers/autosave_controller.js", "../../../node_modules/chart.js/dist/chunks/helpers.segment.mjs", "../../../node_modules/chart.js/dist/chart.mjs", "../../../node_modules/chart.js/auto/auto.mjs", "../../../node_modules/stimulus-chartjs/dist/stimulus-chartjs.es.js", "../../javascript/controllers/chartjs_controller.js", "../../../node_modules/stimulus-checkbox-select-all/dist/stimulus-checkbox-select-all.mjs", "../../javascript/controllers/checkbox_select_all_controller.js", "../../javascript/controllers/checkbox_to_form_controller.js", "../../javascript/controllers/clipboard_controller.js", "../../javascript/controllers/collapse_all_controller.js", "../../javascript/controllers/collapse_controller.js", "../../javascript/controllers/countdown_controller.js", "../../javascript/controllers/datatable_controller.js", "../../javascript/controllers/direct_upload_controller.js", "../../../node_modules/@uppy/xhr-upload/lib/index.js", "../../../node_modules/@uppy/core/lib/EventManager.js", "../../../node_modules/@uppy/utils/lib/NetworkError.js", "../../../node_modules/@uppy/utils/lib/ProgressTimeout.js", "../../../node_modules/@uppy/utils/lib/fetcher.js", "../../../node_modules/@uppy/utils/lib/fileFilters.js", "../../../node_modules/@uppy/utils/lib/getAllowedMetaFields.js", "../../../node_modules/@uppy/utils/lib/isNetworkError.js", "../../../node_modules/@uppy/utils/lib/RateLimitedQueue.js", "../../../node_modules/@uppy/xhr-upload/package.json", "../../../node_modules/@uppy/xhr-upload/lib/locale.js", "../../../node_modules/@uppy/status-bar/lib/StatusBar.js", "../../../node_modules/@uppy/utils/lib/emaFilter.js", "../../../node_modules/@uppy/status-bar/package.json", "../../../node_modules/@uppy/status-bar/lib/locale.js", "../../../node_modules/@uppy/status-bar/lib/StatusBarStates.js", "../../../node_modules/preact/jsx-runtime/src/utils.js", "../../../node_modules/preact/src/constants.js", "../../../node_modules/preact/jsx-runtime/src/index.js", "../../../node_modules/@uppy/status-bar/lib/StatusBarUI.js", "../../../node_modules/@uppy/status-bar/lib/Components.js", "../../../node_modules/@uppy/utils/lib/secondsToTime.js", "../../../node_modules/@uppy/utils/lib/prettyETA.js", "../../../node_modules/@uppy/status-bar/lib/calculateProcessingProgress.js", "../../javascript/components/uppy/locales/de_DE.js", "../../javascript/components/uppy/locales/en_US.js", "../../javascript/components/uppy/locales/es_ES.js", "../../javascript/components/uppy/locales/fr_FR.js", "../../javascript/components/utility/toast.js", "../../javascript/controllers/display_with_button_controller.js", "../../javascript/controllers/display_with_radio_button_controller.js", "../../../node_modules/sortablejs/modular/sortable.esm.js", "../../javascript/controllers/drag_drop_controller.js", "../../javascript/controllers/dropdown_controller.js", "../../javascript/controllers/editor_controller.js", "../../../node_modules/ckeditor5/build/translations/de.js", "../../../node_modules/ckeditor5/build/translations/es.js", "../../../node_modules/ckeditor5/build/translations/fr.js", "../../javascript/components/utility/handle_unauthorized.js", "../../javascript/components/ckeditor/upload_adapter.js", "../../javascript/components/ckeditor/mentions.js", "../../javascript/controllers/editor_media_file_embed_controller.js", "../../../node_modules/mediaelement/build/lang/de.js", "../../../node_modules/mediaelement/build/lang/fr.js", "../../../node_modules/mediaelement/build/lang/es.js", "../../../node_modules/mediaelement/build/renderers/vimeo.js", "../../javascript/controllers/element_statistics_controller.js", "../../javascript/components/utility/dom_parser_support.js", "../../javascript/components/utility/support_checker.js", "../../javascript/components/utility/load_scripts.js", "../../javascript/controllers/fetch_html_controller.js", "../../javascript/controllers/filterable_controller.js", "../../javascript/controllers/form_leave_controller.js", "../../javascript/controllers/heartbeat_controller.js", "../../javascript/controllers/infinite_scroll_controller.js", "../../javascript/controllers/leave_page_controller.js", "../../javascript/controllers/lock_timeout_controller.js", "../../javascript/controllers/media_element_controller.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/modal_link_controller.js", "../../javascript/controllers/nav_tabs_scrollable_controller.js", "../../../node_modules/stimulus-rails-nested-form/dist/stimulus-rails-nested-form.mjs", "../../javascript/controllers/nested_form_controller.js", "../../javascript/controllers/no_paste_controller.js", "../../javascript/controllers/notification_controller.js", "../../javascript/controllers/password_show_toggle_controller.js", "../../javascript/controllers/pdf_summary_confirmation_controller.js", "../../javascript/controllers/popover_controller.js", "../../javascript/controllers/radio_check_controller.js", "../../../node_modules/readmore-js/dist/readmore.es6.js", "../../javascript/controllers/readmore_controller.js", "../../javascript/controllers/resize_controller.js", "../../javascript/controllers/resource_lock_channel_controller.js", "../../javascript/controllers/sidebar_toggle_controller.js", "../../javascript/controllers/submit_on_enter_controller.js", "../../javascript/controllers/submit_other_form_controller.js", "../../javascript/controllers/sum_point_controller.js", "../../../node_modules/sync-pick/src/sync-pick/sync-pick-markup.js", "../../../node_modules/sync-pick/src/sync-pick/i18n/en.js", "../../../node_modules/sync-pick/src/sync-pick/i18n/de.js", "../../../node_modules/sync-pick/src/sync-pick/i18n/es.js", "../../../node_modules/sync-pick/src/sync-pick/i18n/fr.js", "../../../node_modules/sync-pick/src/sync-pick.js", "../../javascript/controllers/sync_pick_controller.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/constants.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/helpers.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/defaults.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/dropdown.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/suggestions.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/persist.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/texts.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/templates.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/events.js", "../../../node_modules/@yaireo/tagify/dist/src/tagify.js", "../../../node_modules/@yaireo/tagify/dist/src/parts/EventDispatcher.js", "../../javascript/controllers/tag_input_controller.js", "../../javascript/controllers/toast_controller.js", "../../javascript/controllers/toggle_controller.js", "../../javascript/controllers/toggle_radio_group_controller.js", "../../javascript/controllers/tutorial_series_course_controller.js", "../../javascript/controllers/tutorial_time_settings_controller.js", "../../../node_modules/stimulus-autocomplete/src/autocomplete.js", "../../javascript/controllers/typeahead_controller.js", "../../javascript/controllers/validation_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/@fortawesome/fontawesome-svg-core/index.mjs", "../../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs", "../../../node_modules/@fortawesome/free-regular-svg-icons/index.mjs", "../../../node_modules/@fortawesome/free-brands-svg-icons/index.mjs", "../../javascript/components/font_awesome/index.js", "../../javascript/components/utility/print_iframe.js", "../../javascript/application.js"],
  "sourcesContent": ["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\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  recordMessage() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\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    this.monitor.recordMessage()\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 null\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", "\"use strict\"\n\n// doT.js\n// 2011-2014, Laura Doktorova, https://github.com/olado/doT\n// Licensed under the MIT license.\n\nconst doT = {\n  templateSettings: {\n    argName: \"it\",\n    encoders: {},\n    selfContained: false,\n    strip: true,\n    internalPrefix: \"_val\",\n    encodersPrefix: \"_enc\",\n    delimiters: {\n      start: \"{{\",\n      end: \"}}\",\n    },\n  },\n  template,\n  compile,\n  setDelimiters,\n}\n\nmodule.exports = doT\n\n// depends on selfContained mode\nconst encoderType = {\n  false: \"function\",\n  true: \"string\",\n}\n\nconst defaultSyntax = {\n  evaluate: /\\{\\{([\\s\\S]+?(\\}?)+)\\}\\}/g,\n  interpolate: /\\{\\{=([\\s\\S]+?)\\}\\}/g,\n  typeInterpolate: /\\{\\{%([nsb])=([\\s\\S]+?)\\}\\}/g,\n  encode: /\\{\\{([a-z_$]+[\\w$]*)?!([\\s\\S]+?)\\}\\}/g,\n  use: /\\{\\{#([\\s\\S]+?)\\}\\}/g,\n  useParams: /(^|[^\\w$])def(?:\\.|\\[[\\'\\\"])([\\w$\\.]+)(?:[\\'\\\"]\\])?\\s*\\:\\s*([\\w$]+(?:\\.[\\w$]+|\\[[^\\]]+\\])*|\\\"[^\\\"]+\\\"|\\'[^\\']+\\'|\\{[^\\}]+\\})/g,\n  define: /\\{\\{##\\s*([\\w\\.$]+)\\s*(\\:|=)([\\s\\S]+?)#\\}\\}/g,\n  defineParams: /^\\s*([\\w$]+):([\\s\\S]+)/,\n  conditional: /\\{\\{\\?(\\?)?\\s*([\\s\\S]*?)\\s*\\}\\}/g,\n  iterate: /\\{\\{~\\s*(?:\\}\\}|([\\s\\S]+?)\\s*\\:\\s*([\\w$]+)\\s*(?:\\:\\s*([\\w$]+))?\\s*\\}\\})/g,\n}\n\nlet currentSyntax = {...defaultSyntax}\n\nconst TYPES = {\n  n: \"number\",\n  s: \"string\",\n  b: \"boolean\",\n}\n\nfunction resolveDefs(c, syn, block, def) {\n  return (typeof block === \"string\" ? block : block.toString())\n    .replace(syn.define, (_, code, assign, value) => {\n      if (code.indexOf(\"def.\") === 0) {\n        code = code.substring(4)\n      }\n      if (!(code in def)) {\n        if (assign === \":\") {\n          value.replace(syn.defineParams, (_, param, v) => {\n            def[code] = {arg: param, text: v}\n          })\n          if (!(code in def)) def[code] = value\n        } else {\n          new Function(\"def\", `def['${code}']=${value}`)(def)\n        }\n      }\n      return \"\"\n    })\n    .replace(syn.use, (_, code) => {\n      code = code.replace(syn.useParams, (_, s, d, param) => {\n        if (def[d] && def[d].arg && param) {\n          const rw = unescape((d + \":\" + param).replace(/'|\\\\/g, \"_\"))\n          def.__exp = def.__exp || {}\n          def.__exp[rw] = def[d].text.replace(\n            new RegExp(`(^|[^\\\\w$])${def[d].arg}([^\\\\w$])`, \"g\"),\n            `$1${param}$2`\n          )\n          return s + `def.__exp['${rw}']`\n        }\n      })\n      const v = new Function(\"def\", \"return \" + code)(def)\n      return v ? resolveDefs(c, syn, v, def) : v\n    })\n}\n\nfunction unescape(code) {\n  return code.replace(/\\\\('|\\\\)/g, \"$1\").replace(/[\\r\\t\\n]/g, \" \")\n}\n\nfunction template(tmpl, c, def) {\n  const ds = c && c.delimiters\n  const syn = ds && !sameDelimiters(ds) ? getSyntax(ds) : currentSyntax\n  c = c ? {...doT.templateSettings, ...c} : doT.templateSettings\n  let sid = 0\n  let str = resolveDefs(c, syn, tmpl, def || {})\n  const needEncoders = {}\n\n  str = (\n    \"let out='\" +\n    (c.strip\n      ? str\n          .trim()\n          .replace(/[\\t ]+(\\r|\\n)/g, \"\\n\") // remove trailing spaces\n          .replace(/(\\r|\\n)[\\t ]+/g, \" \") // leading spaces reduced to \" \"\n          .replace(/\\r|\\n|\\t|\\/\\*[\\s\\S]*?\\*\\//g, \"\") // remove breaks, tabs and JS comments\n      : str\n    )\n      .replace(/'|\\\\/g, \"\\\\$&\")\n      .replace(syn.interpolate, (_, code) => `'+(${unescape(code)})+'`)\n      .replace(syn.typeInterpolate, (_, typ, code) => {\n        sid++\n        const val = c.internalPrefix + sid\n        const error = `throw new Error(\"expected ${TYPES[typ]}, got \"+ (typeof ${val}))`\n        return `';const ${val}=(${unescape(code)});if(typeof ${val}!==\"${\n          TYPES[typ]\n        }\") ${error};out+=${val}+'`\n      })\n      .replace(syn.encode, (_, enc = \"\", code) => {\n        needEncoders[enc] = true\n        code = unescape(code)\n        const e = c.selfContained ? enc : enc ? \".\" + enc : '[\"\"]'\n        return `'+${c.encodersPrefix}${e}(${code})+'`\n      })\n      .replace(syn.conditional, (_, elseCase, code) => {\n        if (code) {\n          code = unescape(code)\n          return elseCase ? `';}else if(${code}){out+='` : `';if(${code}){out+='`\n        }\n        return elseCase ? \"';}else{out+='\" : \"';}out+='\"\n      })\n      .replace(syn.iterate, (_, arr, vName, iName) => {\n        if (!arr) return \"';} } out+='\"\n        sid++\n        const defI = iName ? `let ${iName}=-1;` : \"\"\n        const incI = iName ? `${iName}++;` : \"\"\n        const val = c.internalPrefix + sid\n        return `';const ${val}=${unescape(\n          arr\n        )};if(${val}){${defI}for (const ${vName} of ${val}){${incI}out+='`\n      })\n      .replace(syn.evaluate, (_, code) => `';${unescape(code)}out+='`) +\n    \"';return out;\"\n  )\n    .replace(/\\n/g, \"\\\\n\")\n    .replace(/\\t/g, \"\\\\t\")\n    .replace(/\\r/g, \"\\\\r\")\n    .replace(/(\\s|;|\\}|^|\\{)out\\+='';/g, \"$1\")\n    .replace(/\\+''/g, \"\")\n\n  const args = Array.isArray(c.argName) ? properties(c.argName) : c.argName\n\n  if (Object.keys(needEncoders).length === 0) {\n    return try_(() => new Function(args, str))\n  }\n  checkEncoders(c, needEncoders)\n  str = `return function(${args}){${str}};`\n  return try_(() =>\n    c.selfContained\n      ? new Function((str = addEncoders(c, needEncoders) + str))()\n      : new Function(c.encodersPrefix, str)(c.encoders)\n  )\n\n  function try_(f) {\n    try {\n      return f()\n    } catch (e) {\n      console.log(\"Could not create a template function: \" + str)\n      throw e\n    }\n  }\n}\n\nfunction compile(tmpl, def) {\n  return template(tmpl, null, def)\n}\n\nfunction sameDelimiters({start, end}) {\n  const d = doT.templateSettings.delimiters\n  return d.start === start && d.end === end\n}\n\nfunction setDelimiters(delimiters) {\n  if (sameDelimiters(delimiters)) {\n    console.log(\"delimiters did not change\")\n    return\n  }\n  currentSyntax = getSyntax(delimiters)\n  doT.templateSettings.delimiters = delimiters\n}\n\nfunction getSyntax({start, end}) {\n  start = escape(start)\n  end = escape(end)\n  const syntax = {}\n  for (const syn in defaultSyntax) {\n    const s = defaultSyntax[syn]\n      .toString()\n      .replace(/\\\\\\{\\\\\\{/g, start)\n      .replace(/\\\\\\}\\\\\\}/g, end)\n    syntax[syn] = strToRegExp(s)\n  }\n  return syntax\n}\n\nconst escapeCharacters = /([{}[\\]()<>\\\\\\/^$\\-.+*?!=|&:])/g\n\nfunction escape(str) {\n  return str.replace(escapeCharacters, \"\\\\$1\")\n}\n\nconst regexpPattern = /^\\/(.*)\\/([\\w]*)$/\n\nfunction strToRegExp(str) {\n  const [, rx, flags] = str.match(regexpPattern)\n  return new RegExp(rx, flags)\n}\n\nfunction properties(args) {\n  return args.reduce((s, a, i) => s + (i ? \",\" : \"\") + a, \"{\") + \"}\"\n}\n\nfunction checkEncoders(c, encoders) {\n  const typ = encoderType[c.selfContained]\n  for (const enc in encoders) {\n    const e = c.encoders[enc]\n    if (!e) throw new Error(`unknown encoder \"${enc}\"`)\n    if (typeof e !== typ)\n      throw new Error(`selfContained ${c.selfContained}: encoder type must be \"${typ}\"`)\n  }\n}\n\nfunction addEncoders(c, encoders) {\n  let s = \"\"\n  for (const enc in encoders) s += `const ${c.encodersPrefix}${enc}=${c.encoders[enc]};`\n  return s\n}\n", "/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n  var timeout, args, context, timestamp, result;\n  if (null == wait) wait = 100;\n\n  function later() {\n    var last = Date.now() - timestamp;\n\n    if (last < wait && last >= 0) {\n      timeout = setTimeout(later, wait - last);\n    } else {\n      timeout = null;\n      if (!immediate) {\n        result = func.apply(context, args);\n        context = args = null;\n      }\n    }\n  };\n\n  var debounced = function(){\n    context = this;\n    args = arguments;\n    timestamp = Date.now();\n    var callNow = immediate && !timeout;\n    if (!timeout) timeout = setTimeout(later, wait);\n    if (callNow) {\n      result = func.apply(context, args);\n      context = args = null;\n    }\n\n    return result;\n  };\n\n  debounced.clear = function() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n  \n  debounced.flush = function() {\n    if (timeout) {\n      result = func.apply(context, args);\n      context = args = null;\n      \n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n\n  return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n", "function insertReplacement(source, rx, replacement) {\n    const newParts = [];\n    source.forEach((chunk) => {\n        // When the source contains multiple placeholders for interpolation,\n        // we should ignore chunks that are not strings, because those\n        // can be JSX objects and will be otherwise incorrectly turned into strings.\n        // Without this condition we\u2019d get this: [object Object] hello [object Object] my <button>\n        if (typeof chunk !== 'string') {\n            return newParts.push(chunk);\n        }\n        return rx[Symbol.split](chunk).forEach((raw, i, list) => {\n            if (raw !== '') {\n                newParts.push(raw);\n            }\n            // Interlace with the `replacement` value\n            if (i < list.length - 1) {\n                newParts.push(replacement);\n            }\n        });\n    });\n    return newParts;\n}\n/**\n * Takes a string with placeholder variables like `%{smart_count} file selected`\n * and replaces it with values from options `{smart_count: 5}`\n *\n * @license https://github.com/airbnb/polyglot.js/blob/master/LICENSE\n * taken from https://github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299\n *\n * @param phrase that needs interpolation, with placeholders\n * @param options with values that will be used to replace placeholders\n */\nfunction interpolate(phrase, options) {\n    const dollarRegex = /\\$/g;\n    const dollarBillsYall = '$$$$';\n    let interpolated = [phrase];\n    if (options == null)\n        return interpolated;\n    for (const arg of Object.keys(options)) {\n        if (arg !== '_') {\n            // Ensure replacement value is escaped to prevent special $-prefixed\n            // regex replace tokens. the \"$$$$\" is needed because each \"$\" needs to\n            // be escaped with \"$\" itself, and we need two in the resulting output.\n            let replacement = options[arg];\n            if (typeof replacement === 'string') {\n                replacement = dollarRegex[Symbol.replace](replacement, dollarBillsYall);\n            }\n            // We create a new `RegExp` each time instead of using a more-efficient\n            // string replace so that the same argument can be replaced multiple times\n            // in the same phrase.\n            interpolated = insertReplacement(interpolated, new RegExp(`%\\\\{${arg}\\\\}`, 'g'), replacement);\n        }\n    }\n    return interpolated;\n}\nconst defaultOnMissingKey = (key) => {\n    throw new Error(`missing string: ${key}`);\n};\n/**\n * Translates strings with interpolation & pluralization support.\n * Extensible with custom dictionaries and pluralization functions.\n *\n * Borrows heavily from and inspired by Polyglot https://github.com/airbnb/polyglot.js,\n * basically a stripped-down version of it. Differences: pluralization functions are not hardcoded\n * and can be easily added among with dictionaries, nested objects are used for pluralization\n * as opposed to `||||` delimeter\n *\n * Usage example: `translator.translate('files_chosen', {smart_count: 3})`\n */\nexport default class Translator {\n    locale;\n    constructor(locales, { onMissingKey = defaultOnMissingKey } = {}) {\n        this.locale = {\n            strings: {},\n            pluralize(n) {\n                if (n === 1) {\n                    return 0;\n                }\n                return 1;\n            },\n        };\n        if (Array.isArray(locales)) {\n            locales.forEach(this.#apply, this);\n        }\n        else {\n            this.#apply(locales);\n        }\n        this.#onMissingKey = onMissingKey;\n    }\n    #onMissingKey;\n    #apply(locale) {\n        if (!locale?.strings) {\n            return;\n        }\n        const prevLocale = this.locale;\n        Object.assign(this.locale, {\n            strings: { ...prevLocale.strings, ...locale.strings },\n            pluralize: locale.pluralize || prevLocale.pluralize,\n        });\n    }\n    /**\n     * Public translate method\n     *\n     * @param key\n     * @param options with values that will be used later to replace placeholders in string\n     * @returns string translated (and interpolated)\n     */\n    translate(key, options) {\n        return this.translateArray(key, options).join('');\n    }\n    /**\n     * Get a translation and return the translated and interpolated parts as an array.\n     *\n     * @returns The translated and interpolated parts, in order.\n     */\n    translateArray(key, options) {\n        let string = this.locale.strings[key];\n        if (string == null) {\n            this.#onMissingKey(key);\n            string = key;\n        }\n        const hasPluralForms = typeof string === 'object';\n        if (hasPluralForms) {\n            if (options && typeof options.smart_count !== 'undefined') {\n                const plural = this.locale.pluralize(options.smart_count);\n                return interpolate(string[plural], options);\n            }\n            throw new Error('Attempted to use a string with plural forms, but no value was given for %{smart_count}');\n        }\n        if (typeof string !== 'string') {\n            throw new Error(`string was not a string`);\n        }\n        return interpolate(string, options);\n    }\n}\n", "/**\n * Core plugin logic that all plugins share.\n *\n * BasePlugin does not contain DOM rendering so it can be used for plugins\n * without a user interface.\n *\n * See `Plugin` for the extended version with Preact rendering for interfaces.\n */\nimport Translator from '@uppy/utils/lib/Translator';\nexport default class BasePlugin {\n    uppy;\n    opts;\n    id;\n    defaultLocale;\n    i18n;\n    i18nArray;\n    type;\n    VERSION;\n    constructor(uppy, opts) {\n        this.uppy = uppy;\n        this.opts = opts ?? {};\n    }\n    getPluginState() {\n        const { plugins } = this.uppy.getState();\n        return (plugins?.[this.id] || {});\n    }\n    setPluginState(update) {\n        const { plugins } = this.uppy.getState();\n        this.uppy.setState({\n            plugins: {\n                ...plugins,\n                [this.id]: {\n                    ...plugins[this.id],\n                    ...update,\n                },\n            },\n        });\n    }\n    setOptions(newOpts) {\n        this.opts = { ...this.opts, ...newOpts };\n        this.setPluginState(undefined); // so that UI re-renders with new options\n        this.i18nInit();\n    }\n    i18nInit() {\n        const translator = new Translator([\n            this.defaultLocale,\n            this.uppy.locale,\n            this.opts.locale,\n        ]);\n        this.i18n = translator.translate.bind(translator);\n        this.i18nArray = translator.translateArray.bind(translator);\n        this.setPluginState(undefined); // so that UI re-renders and we see the updated locale\n    }\n    /**\n     * Extendable methods\n     * ==================\n     * These methods are here to serve as an overview of the extendable methods as well as\n     * making them not conditional in use, such as `if (this.afterUpdate)`.\n     */\n    addTarget(plugin) {\n        throw new Error(\"Extend the addTarget method to add your plugin to another plugin's target\");\n    }\n    install() { }\n    uninstall() { }\n    update(state) { }\n    // Called after every state update, after everything's mounted. Debounced.\n    afterUpdate() { }\n}\n", "/**\n * Adds zero to strings shorter than two characters.\n */\nfunction pad(number) {\n    return number < 10 ? `0${number}` : number.toString();\n}\n/**\n * Returns a timestamp in the format of `hours:minutes:seconds`\n */\nexport default function getTimeStamp() {\n    const date = new Date();\n    const hours = pad(date.getHours());\n    const minutes = pad(date.getMinutes());\n    const seconds = pad(date.getSeconds());\n    return `${hours}:${minutes}:${seconds}`;\n}\n", "import getTimeStamp from '@uppy/utils/lib/getTimeStamp';\n// Swallow all logs, except errors.\n// default if logger is not set or debug: false\nconst justErrorsLogger = {\n    debug: () => { },\n    warn: () => { },\n    error: (...args) => console.error(`[Uppy] [${getTimeStamp()}]`, ...args),\n};\n// Print logs to console with namespace + timestamp,\n// set by logger: Uppy.debugLogger or debug: true\nconst debugLogger = {\n    debug: (...args) => console.debug(`[Uppy] [${getTimeStamp()}]`, ...args),\n    warn: (...args) => console.warn(`[Uppy] [${getTimeStamp()}]`, ...args),\n    error: (...args) => console.error(`[Uppy] [${getTimeStamp()}]`, ...args),\n};\nexport { justErrorsLogger, debugLogger };\n", "/**\n * Check if an object is a DOM element. Duck-typing based on `nodeType`.\n */\nexport default function isDOMElement(obj) {\n    if (typeof obj !== 'object' || obj === null)\n        return false;\n    if (!('nodeType' in obj))\n        return false;\n    return obj.nodeType === Node.ELEMENT_NODE;\n}\n", "import isDOMElement from './isDOMElement.js';\nfunction findDOMElement(element, context = document) {\n    if (typeof element === 'string') {\n        return context.querySelector(element);\n    }\n    if (isDOMElement(element)) {\n        return element;\n    }\n    return null;\n}\nexport default findDOMElement;\n", "/**\n * Get the declared text direction for an element.\n */\nfunction getTextDirection(element) {\n    // There is another way to determine text direction using getComputedStyle(), as done here:\n    // https://github.com/pencil-js/text-direction/blob/2a235ce95089b3185acec3b51313cbba921b3811/text-direction.js\n    //\n    // We do not use that approach because we are interested specifically in the _declared_ text direction.\n    // If no text direction is declared, we have to provide our own explicit text direction so our\n    // bidirectional CSS style sheets work.\n    while (element && !element.dir) {\n        element = element.parentNode;\n    }\n    return element?.dir;\n}\nexport default getTextDirection;\n", "/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 2;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 1;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nexport const XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nexport const MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n\nexport const NULL = null;\nexport const UNDEFINED = undefined;\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { EMPTY_ARR } from './constants';\n\nexport const isArray = Array.isArray;\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-expect-error We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {import('./index').ContainerNode} node The node to remove\n */\nexport function removeNode(node) {\n\tif (node && node.parentNode) node.parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n", "import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n", "import { slice } from './util';\nimport options from './options';\nimport { NULL, UNDEFINED } from './constants';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor for this\n * virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the\n * virtual node\n * @returns {import('./internal').VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != NULL) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === UNDEFINED) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, NULL);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {import('./internal').VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\t/** @type {import('./internal').VNode} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: NULL,\n\t\t_parent: NULL,\n\t\t_depth: 0,\n\t\t_dom: NULL,\n\t\t_component: NULL,\n\t\tconstructor: UNDEFINED,\n\t\t_original: original == NULL ? ++vnodeId : original,\n\t\t_index: -1,\n\t\t_flags: 0\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == NULL && options.vnode != NULL) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: NULL };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != NULL && vnode.constructor === UNDEFINED;\n", "import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { MODE_HYDRATE, NULL } from './constants';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function BaseComponent(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nBaseComponent.prototype.setState = function (update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != NULL && this._nextState != this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == NULL) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nBaseComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](https://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {ComponentChildren | void}\n */\nBaseComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == NULL) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._index + 1)\n\t\t\t: NULL;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != NULL && sibling._dom != NULL) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : NULL;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tif (component._parentDom && component._dirty) {\n\t\tlet oldVNode = component._vnode,\n\t\t\toldDom = oldVNode._dom,\n\t\t\tcommitQueue = [],\n\t\t\trefQueue = [],\n\t\t\tnewVNode = assign({}, oldVNode);\n\t\tnewVNode._original = oldVNode._original + 1;\n\t\tif (options.vnode) options.vnode(newVNode);\n\n\t\tdiff(\n\t\t\tcomponent._parentDom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tcomponent._parentDom.namespaceURI,\n\t\t\toldVNode._flags & MODE_HYDRATE ? [oldDom] : NULL,\n\t\t\tcommitQueue,\n\t\t\toldDom == NULL ? getDomSibling(oldVNode) : oldDom,\n\t\t\t!!(oldVNode._flags & MODE_HYDRATE),\n\t\t\trefQueue\n\t\t);\n\n\t\tnewVNode._original = oldVNode._original;\n\t\tnewVNode._parent._children[newVNode._index] = newVNode;\n\t\tcommitRoot(commitQueue, newVNode, refQueue);\n\t\toldVNode._dom = oldVNode._parent = null;\n\n\t\tif (newVNode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(newVNode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != NULL && vnode._component != NULL) {\n\t\tvnode._dom = vnode._component.base = NULL;\n\t\tvnode._children.some(child => {\n\t\t\tif (child != NULL && child._dom != NULL) {\n\t\t\t\treturn (vnode._dom = vnode._component.base = child._dom);\n\t\t\t}\n\t\t});\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<import('./internal').Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce != options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/**\n * @param {import('./internal').Component} a\n * @param {import('./internal').Component} b\n */\nconst depthSort = (a, b) => a._vnode._depth - b._vnode._depth;\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\ttry {\n\t\tlet c,\n\t\t\tl = 1;\n\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\n\t\twhile (rerenderQueue.length) {\n\t\t\t// Keep the rerender queue sorted by (depth, insertion order). The queue\n\t\t\t// will initially be sorted on the first iteration only if it has more than 1 item.\n\t\t\t//\n\t\t\t// New items can be added to the queue e.g. when rerendering a provider, so we want to\n\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t// single pass\n\t\t\tif (rerenderQueue.length > l) {\n\t\t\t\trerenderQueue.sort(depthSort);\n\t\t\t}\n\n\t\t\tc = rerenderQueue.shift();\n\t\t\tl = rerenderQueue.length;\n\n\t\t\trenderComponent(c);\n\t\t}\n\t} finally {\n\t\trerenderQueue.length = process._rerenderCount = 0;\n\t}\n}\n\nprocess._rerenderCount = 0;\n", "import { IS_NON_DIMENSIONAL, NULL, SVG_NAMESPACE } from '../constants';\nimport options from '../options';\n\nfunction setStyle(style, key, value) {\n\tif (key[0] == '-') {\n\t\tstyle.setProperty(key, value == NULL ? '' : value);\n\t} else if (value == NULL) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\nconst CAPTURE_REGEX = /(PointerCapture)$|Capture$/i;\n\n// A logical clock to solve issues like https://github.com/preactjs/preact/issues/3927.\n// When the DOM performs an event it leaves micro-ticks in between bubbling up which means that\n// an event can trigger on a newly reated DOM-node while the event bubbles up.\n//\n// Originally inspired by Vue\n// (https://github.com/vuejs/core/blob/caeb8a68811a1b0f79/packages/runtime-dom/src/modules/events.ts#L90-L101),\n// but modified to use a logical clock instead of Date.now() in case event handlers get attached\n// and events get dispatched during the same millisecond.\n//\n// The clock is incremented after each new event dispatch. This allows 1 000 000 new events\n// per second for over 280 years before the value reaches Number.MAX_SAFE_INTEGER (2**53 - 1).\nlet eventClock = 0;\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {string} namespace Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, namespace) {\n\tlet useCapture;\n\n\to: if (name == 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] != oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] == 'o' && name[1] == 'n') {\n\t\tuseCapture = name != (name = name.replace(CAPTURE_REGEX, '$1'));\n\t\tconst lowerCaseName = name.toLowerCase();\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (lowerCaseName in dom || name == 'onFocusOut' || name == 'onFocusIn')\n\t\t\tname = lowerCaseName.slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tvalue._attached = eventClock;\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\tname,\n\t\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\t\tuseCapture\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tvalue._attached = oldValue._attached;\n\t\t\t}\n\t\t} else {\n\t\t\tdom.removeEventListener(\n\t\t\t\tname,\n\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\tuseCapture\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (namespace == SVG_NAMESPACE) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname != 'width' &&\n\t\t\tname != 'height' &&\n\t\t\tname != 'href' &&\n\t\t\tname != 'list' &&\n\t\t\tname != 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname != 'tabIndex' &&\n\t\t\tname != 'download' &&\n\t\t\tname != 'rowSpan' &&\n\t\t\tname != 'colSpan' &&\n\t\t\tname != 'role' &&\n\t\t\tname != 'popover' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == NULL ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// aria- and data- attributes have no boolean representation.\n\t\t// A `false` value is different from the attribute not being\n\t\t// present, so we can't remove it. For non-boolean aria\n\t\t// attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost too many bytes. On top of\n\t\t// that other frameworks generally stringify `false`.\n\n\t\tif (typeof value == 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != NULL && (value !== false || name[4] == '-')) {\n\t\t\tdom.setAttribute(name, name == 'popover' && value == true ? '' : value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Create an event proxy function.\n * @param {boolean} useCapture Is the event handler for the capture phase.\n * @private\n */\nfunction createEventProxy(useCapture) {\n\t/**\n\t * Proxy an event to hooked event handlers\n\t * @param {import('../internal').PreactEvent} e The event object from the browser\n\t * @private\n\t */\n\treturn function (e) {\n\t\tif (this._listeners) {\n\t\t\tconst eventHandler = this._listeners[e.type + useCapture];\n\t\t\tif (e._dispatched == NULL) {\n\t\t\t\te._dispatched = eventClock++;\n\n\t\t\t\t// When `e._dispatched` is smaller than the time when the targeted event\n\t\t\t\t// handler was attached we know we have bubbled up to an element that was added\n\t\t\t\t// during patching the DOM.\n\t\t\t} else if (e._dispatched < eventHandler._attached) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn eventHandler(options.event ? options.event(e) : e);\n\t\t}\n\t};\n}\n\nconst eventProxy = createEventProxy(false);\nconst eventProxyCapture = createEventProxy(true);\n", "import { enqueueRender } from './component';\nimport { NULL } from './constants';\n\nexport let i = 0;\n\nexport function createContext(defaultValue) {\n\tfunction Context(props) {\n\t\tif (!this.getChildContext) {\n\t\t\t/** @type {Set<import('./internal').Component> | null} */\n\t\t\tlet subs = new Set();\n\t\t\tlet ctx = {};\n\t\t\tctx[Context._id] = this;\n\n\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\tthis.componentWillUnmount = () => {\n\t\t\t\tsubs = NULL;\n\t\t\t};\n\n\t\t\tthis.shouldComponentUpdate = function (_props) {\n\t\t\t\t// @ts-expect-error even\n\t\t\t\tif (this.props.value != _props.value) {\n\t\t\t\t\tsubs.forEach(c => {\n\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.sub = c => {\n\t\t\t\tsubs.add(c);\n\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\tif (subs) {\n\t\t\t\t\t\tsubs.delete(c);\n\t\t\t\t\t}\n\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\treturn props.children;\n\t}\n\n\tContext._id = '__cC' + i++;\n\tContext._defaultValue = defaultValue;\n\n\t/** @type {import('./internal').FunctionComponent} */\n\tContext.Consumer = (props, contextValue) => {\n\t\treturn props.children(contextValue);\n\t};\n\n\t// we could also get rid of _contextRef entirely\n\tContext.Provider =\n\t\tContext._contextRef =\n\t\tContext.Consumer.contextType =\n\t\t\tContext;\n\n\treturn Context;\n}\n", "import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport {\n\tEMPTY_OBJ,\n\tEMPTY_ARR,\n\tINSERT_VNODE,\n\tMATCHED,\n\tUNDEFINED,\n\tNULL\n} from '../constants';\nimport { isArray } from '../util';\nimport { getDomSibling } from '../component';\n\n/**\n * @typedef {import('../internal').ComponentChildren} ComponentChildren\n * @typedef {import('../internal').Component} Component\n * @typedef {import('../internal').PreactElement} PreactElement\n * @typedef {import('../internal').VNode} VNode\n */\n\n/**\n * Diff the children of a virtual node\n * @param {PreactElement} parentDom The DOM element whose children are being\n * diffed\n * @param {ComponentChildren[]} renderResult\n * @param {VNode} newParentVNode The new virtual node whose children should be\n * diff'ed against oldParentVNode\n * @param {VNode} oldParentVNode The old virtual node whose children should be\n * diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\tlet i,\n\t\t/** @type {VNode} */\n\t\toldVNode,\n\t\t/** @type {VNode} */\n\t\tchildVNode,\n\t\t/** @type {PreactElement} */\n\t\tnewDom,\n\t\t/** @type {PreactElement} */\n\t\tfirstChildDom;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\t/** @type {VNode[]} */\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet newChildrenLength = renderResult.length;\n\n\toldDom = constructNewChildrenArray(\n\t\tnewParentVNode,\n\t\trenderResult,\n\t\toldChildren,\n\t\toldDom,\n\t\tnewChildrenLength\n\t);\n\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\tchildVNode = newParentVNode._children[i];\n\t\tif (childVNode == NULL) continue;\n\n\t\t// At this point, constructNewChildrenArray has assigned _index to be the\n\t\t// matchingIndex for this VNode's oldVNode (or -1 if there is no oldVNode).\n\t\toldVNode =\n\t\t\t(childVNode._index != -1 && oldChildren[childVNode._index]) || EMPTY_OBJ;\n\n\t\t// Update childVNode._index to its final index\n\t\tchildVNode._index = i;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tlet result = diff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\n\t\t// Adjust DOM nodes\n\t\tnewDom = childVNode._dom;\n\t\tif (childVNode.ref && oldVNode.ref != childVNode.ref) {\n\t\t\tif (oldVNode.ref) {\n\t\t\t\tapplyRef(oldVNode.ref, NULL, childVNode);\n\t\t\t}\n\t\t\trefQueue.push(\n\t\t\t\tchildVNode.ref,\n\t\t\t\tchildVNode._component || newDom,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t}\n\n\t\tif (firstChildDom == NULL && newDom != NULL) {\n\t\t\tfirstChildDom = newDom;\n\t\t}\n\n\t\tlet shouldPlace = !!(childVNode._flags & INSERT_VNODE);\n\t\tif (shouldPlace || oldVNode._children === childVNode._children) {\n\t\t\toldDom = insert(childVNode, oldDom, parentDom, shouldPlace);\n\t\t} else if (typeof childVNode.type == 'function' && result !== UNDEFINED) {\n\t\t\toldDom = result;\n\t\t} else if (newDom) {\n\t\t\toldDom = newDom.nextSibling;\n\t\t}\n\n\t\t// Unset diffing flags\n\t\tchildVNode._flags &= ~(INSERT_VNODE | MATCHED);\n\t}\n\n\tnewParentVNode._dom = firstChildDom;\n\n\treturn oldDom;\n}\n\n/**\n * @param {VNode} newParentVNode\n * @param {ComponentChildren[]} renderResult\n * @param {VNode[]} oldChildren\n */\nfunction constructNewChildrenArray(\n\tnewParentVNode,\n\trenderResult,\n\toldChildren,\n\toldDom,\n\tnewChildrenLength\n) {\n\t/** @type {number} */\n\tlet i;\n\t/** @type {VNode} */\n\tlet childVNode;\n\t/** @type {VNode} */\n\tlet oldVNode;\n\n\tlet oldChildrenLength = oldChildren.length,\n\t\tremainingOldChildren = oldChildrenLength;\n\n\tlet skew = 0;\n\n\tnewParentVNode._children = new Array(newChildrenLength);\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\t// @ts-expect-error We are reusing the childVNode variable to hold both the\n\t\t// pre and post normalized childVNode\n\t\tchildVNode = renderResult[i];\n\n\t\tif (\n\t\t\tchildVNode == NULL ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tnewParentVNode._children[i] = NULL;\n\t\t\tcontinue;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint' ||\n\t\t\tchildVNode.constructor == String\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tNULL,\n\t\t\t\tchildVNode,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL\n\t\t\t);\n\t\t} else if (isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL\n\t\t\t);\n\t\t} else if (childVNode.constructor === UNDEFINED && childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t//   const reuse = <div />\n\t\t\t//   <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : NULL,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tnewParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\tconst skewedIndex = i + skew;\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\t// Temporarily store the matchingIndex on the _index property so we can pull\n\t\t// out the oldVNode in diffChildren. We'll override this to the VNode's\n\t\t// final index after using this property to get the oldVNode\n\t\tconst matchingIndex = (childVNode._index = findMatchingIndex(\n\t\t\tchildVNode,\n\t\t\toldChildren,\n\t\t\tskewedIndex,\n\t\t\tremainingOldChildren\n\t\t));\n\n\t\toldVNode = NULL;\n\t\tif (matchingIndex != -1) {\n\t\t\toldVNode = oldChildren[matchingIndex];\n\t\t\tremainingOldChildren--;\n\t\t\tif (oldVNode) {\n\t\t\t\toldVNode._flags |= MATCHED;\n\t\t\t}\n\t\t}\n\n\t\t// Here, we define isMounting for the purposes of the skew diffing\n\t\t// algorithm. Nodes that are unsuspending are considered mounting and we detect\n\t\t// this by checking if oldVNode._original == null\n\t\tconst isMounting = oldVNode == NULL || oldVNode._original == NULL;\n\n\t\tif (isMounting) {\n\t\t\tif (matchingIndex == -1) {\n\t\t\t\t// When the array of children is growing we need to decrease the skew\n\t\t\t\t// as we are adding a new element to the array.\n\t\t\t\t// Example:\n\t\t\t\t// [1, 2, 3] --> [0, 1, 2, 3]\n\t\t\t\t// oldChildren   newChildren\n\t\t\t\t//\n\t\t\t\t// The new element is at index 0, so our skew is 0,\n\t\t\t\t// we need to decrease the skew as we are adding a new element.\n\t\t\t\t// The decrease will cause us to compare the element at position 1\n\t\t\t\t// with value 1 with the element at position 0 with value 0.\n\t\t\t\t//\n\t\t\t\t// A linear concept is applied when the array is shrinking,\n\t\t\t\t// if the length is unchanged we can assume that no skew\n\t\t\t\t// changes are needed.\n\t\t\t\tif (newChildrenLength > oldChildrenLength) {\n\t\t\t\t\tskew--;\n\t\t\t\t} else if (newChildrenLength < oldChildrenLength) {\n\t\t\t\t\tskew++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we are mounting a DOM VNode, mark it for insertion\n\t\t\tif (typeof childVNode.type != 'function') {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t} else if (matchingIndex != skewedIndex) {\n\t\t\t// When we move elements around i.e. [0, 1, 2] --> [1, 0, 2]\n\t\t\t// --> we diff 1, we find it at position 1 while our skewed index is 0 and our skew is 0\n\t\t\t//     we set the skew to 1 as we found an offset.\n\t\t\t// --> we diff 0, we find it at position 0 while our skewed index is at 2 and our skew is 1\n\t\t\t//     this makes us increase the skew again.\n\t\t\t// --> we diff 2, we find it at position 2 while our skewed index is at 4 and our skew is 2\n\t\t\t//\n\t\t\t// this becomes an optimization question where currently we see a 1 element offset as an insertion\n\t\t\t// or deletion i.e. we optimize for [0, 1, 2] --> [9, 0, 1, 2]\n\t\t\t// while a more than 1 offset we see as a swap.\n\t\t\t// We could probably build heuristics for having an optimized course of action here as well, but\n\t\t\t// might go at the cost of some bytes.\n\t\t\t//\n\t\t\t// If we wanted to optimize for i.e. only swaps we'd just do the last two code-branches and have\n\t\t\t// only the first item be a re-scouting and all the others fall in their skewed counter-part.\n\t\t\t// We could also further optimize for swaps\n\t\t\tif (matchingIndex == skewedIndex - 1) {\n\t\t\t\tskew--;\n\t\t\t} else if (matchingIndex == skewedIndex + 1) {\n\t\t\t\tskew++;\n\t\t\t} else {\n\t\t\t\tif (matchingIndex > skewedIndex) {\n\t\t\t\t\tskew--;\n\t\t\t\t} else {\n\t\t\t\t\tskew++;\n\t\t\t\t}\n\n\t\t\t\t// Move this VNode's DOM if the original index (matchingIndex) doesn't\n\t\t\t\t// match the new skew index (i + new skew)\n\t\t\t\t// In the former two branches we know that it matches after skewing\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove remaining oldChildren if there are any. Loop forwards so that as we\n\t// unmount DOM from the beginning of the oldChildren, we can adjust oldDom to\n\t// point to the next child, which needs to be the first DOM node that won't be\n\t// unmounted.\n\tif (remainingOldChildren) {\n\t\tfor (i = 0; i < oldChildrenLength; i++) {\n\t\t\toldVNode = oldChildren[i];\n\t\t\tif (oldVNode != NULL && (oldVNode._flags & MATCHED) == 0) {\n\t\t\t\tif (oldVNode._dom == oldDom) {\n\t\t\t\t\toldDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * @param {VNode} parentVNode\n * @param {PreactElement} oldDom\n * @param {PreactElement} parentDom\n * @param {boolean} shouldPlace\n * @returns {PreactElement}\n */\nfunction insert(parentVNode, oldDom, parentDom, shouldPlace) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\n\tif (typeof parentVNode.type == 'function') {\n\t\tlet children = parentVNode._children;\n\t\tfor (let i = 0; children && i < children.length; i++) {\n\t\t\tif (children[i]) {\n\t\t\t\t// If we enter this code path on sCU bailout, where we copy\n\t\t\t\t// oldVNode._children to newVNode._children, we need to update the old\n\t\t\t\t// children's _parent pointer to point to the newVNode (parentVNode\n\t\t\t\t// here).\n\t\t\t\tchildren[i]._parent = parentVNode;\n\t\t\t\toldDom = insert(children[i], oldDom, parentDom, shouldPlace);\n\t\t\t}\n\t\t}\n\n\t\treturn oldDom;\n\t} else if (parentVNode._dom != oldDom) {\n\t\tif (shouldPlace) {\n\t\t\tif (oldDom && parentVNode.type && !oldDom.parentNode) {\n\t\t\t\toldDom = getDomSibling(parentVNode);\n\t\t\t}\n\t\t\tparentDom.insertBefore(parentVNode._dom, oldDom || NULL);\n\t\t}\n\t\toldDom = parentVNode._dom;\n\t}\n\n\tdo {\n\t\toldDom = oldDom && oldDom.nextSibling;\n\t} while (oldDom != NULL && oldDom.nodeType == 8);\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {ComponentChildren} children The unflattened children of a virtual\n * node\n * @returns {VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == NULL || typeof children == 'boolean') {\n\t} else if (isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\n/**\n * @param {VNode} childVNode\n * @param {VNode[]} oldChildren\n * @param {number} skewedIndex\n * @param {number} remainingOldChildren\n * @returns {number}\n */\nfunction findMatchingIndex(\n\tchildVNode,\n\toldChildren,\n\tskewedIndex,\n\tremainingOldChildren\n) {\n\tconst key = childVNode.key;\n\tconst type = childVNode.type;\n\tlet oldVNode = oldChildren[skewedIndex];\n\tconst matched = oldVNode != NULL && (oldVNode._flags & MATCHED) == 0;\n\n\t// We only need to perform a search if there are more children\n\t// (remainingOldChildren) to search. However, if the oldVNode we just looked\n\t// at skewedIndex was not already used in this diff, then there must be at\n\t// least 1 other (so greater than 1) remainingOldChildren to attempt to match\n\t// against. So the following condition checks that ensuring\n\t// remainingOldChildren > 1 if the oldVNode is not already used/matched. Else\n\t// if the oldVNode was null or matched, then there could needs to be at least\n\t// 1 (aka `remainingOldChildren > 0`) children to find and compare against.\n\t//\n\t// If there is an unkeyed functional VNode, that isn't a built-in like our Fragment,\n\t// we should not search as we risk re-using state of an unrelated VNode. (reverted for now)\n\tlet shouldSearch =\n\t\t// (typeof type != 'function' || type === Fragment || key) &&\n\t\tremainingOldChildren > (matched ? 1 : 0);\n\n\tif (\n\t\t(oldVNode === NULL && key == null) ||\n\t\t(matched && key == oldVNode.key && type == oldVNode.type)\n\t) {\n\t\treturn skewedIndex;\n\t} else if (shouldSearch) {\n\t\tlet x = skewedIndex - 1;\n\t\tlet y = skewedIndex + 1;\n\t\twhile (x >= 0 || y < oldChildren.length) {\n\t\t\tconst childIndex = x >= 0 ? x-- : y++;\n\t\t\toldVNode = oldChildren[childIndex];\n\t\t\tif (\n\t\t\t\toldVNode != NULL &&\n\t\t\t\t(oldVNode._flags & MATCHED) == 0 &&\n\t\t\t\tkey == oldVNode.key &&\n\t\t\t\ttype == oldVNode.type\n\t\t\t) {\n\t\t\t\treturn childIndex;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn -1;\n}\n", "import {\n\tEMPTY_ARR,\n\tEMPTY_OBJ,\n\tMATH_NAMESPACE,\n\tMODE_HYDRATE,\n\tMODE_SUSPENDED,\n\tNULL,\n\tRESET_MODE,\n\tSVG_NAMESPACE,\n\tUNDEFINED,\n\tXHTML_NAMESPACE\n} from '../constants';\nimport { BaseComponent, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { setProperty } from './props';\nimport { assign, isArray, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * @typedef {import('../internal').ComponentChildren} ComponentChildren\n * @typedef {import('../internal').Component} Component\n * @typedef {import('../internal').PreactElement} PreactElement\n * @typedef {import('../internal').VNode} VNode\n */\n\n/**\n * @template {any} T\n * @typedef {import('../internal').Ref<T>} Ref<T>\n */\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {PreactElement} parentDom The parent of the DOM element\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\t/** @type {any} */\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== UNDEFINED) return NULL;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._flags & MODE_SUSPENDED) {\n\t\tisHydrating = !!(oldVNode._flags & MODE_HYDRATE);\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\touter: if (typeof newType == 'function') {\n\t\ttry {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\t\t\tconst isClassComponent = newType.prototype && newType.prototype.render;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif (isClassComponent) {\n\t\t\t\t\t// @ts-expect-error The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-expect-error Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new BaseComponent(\n\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (isClassComponent && c._nextState == NULL) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (isClassComponent && newType.getDerivedStateFromProps != NULL) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\t\t\tc._vnode = newVNode;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tisClassComponent &&\n\t\t\t\t\tnewType.getDerivedStateFromProps == NULL &&\n\t\t\t\t\tc.componentWillMount != NULL\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (isClassComponent && c.componentDidMount != NULL) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tisClassComponent &&\n\t\t\t\t\tnewType.getDerivedStateFromProps == NULL &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != NULL\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tnewVNode._original == oldVNode._original ||\n\t\t\t\t\t(!c._force &&\n\t\t\t\t\t\tc.shouldComponentUpdate != NULL &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false)\n\t\t\t\t) {\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original != oldVNode._original) {\n\t\t\t\t\t\t// When we are dealing with a bail because of sCU we have to update\n\t\t\t\t\t\t// the props, state and dirty-state.\n\t\t\t\t\t\t// when we are dealing with strict-equality we don't as the child could still\n\t\t\t\t\t\t// be dirtied see #3883\n\t\t\t\t\t\tc.props = newProps;\n\t\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t\tc._dirty = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.some(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tEMPTY_ARR.push.apply(c._renderCallbacks, c._stateCallbacks);\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != NULL) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (isClassComponent && c.componentDidUpdate != NULL) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._parentDom = parentDom;\n\t\t\tc._force = false;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif (isClassComponent) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tEMPTY_ARR.push.apply(c._renderCallbacks, c._stateCallbacks);\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != NULL) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (isClassComponent && !isNew && c.getSnapshotBeforeUpdate != NULL) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet renderResult =\n\t\t\t\ttmp != NULL && tmp.type === Fragment && tmp.key == NULL\n\t\t\t\t\t? cloneNode(tmp.props.children)\n\t\t\t\t\t: tmp;\n\n\t\t\toldDom = diffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tisArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnamespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._flags &= RESET_MODE;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = NULL;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnewVNode._original = NULL;\n\t\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\t\tif (isHydrating || excessDomChildren != NULL) {\n\t\t\t\tif (e.then) {\n\t\t\t\t\tnewVNode._flags |= isHydrating\n\t\t\t\t\t\t? MODE_HYDRATE | MODE_SUSPENDED\n\t\t\t\t\t\t: MODE_SUSPENDED;\n\n\t\t\t\t\twhile (oldDom && oldDom.nodeType == 8 && oldDom.nextSibling) {\n\t\t\t\t\t\toldDom = oldDom.nextSibling;\n\t\t\t\t\t}\n\n\t\t\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = NULL;\n\t\t\t\t\tnewVNode._dom = oldDom;\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = excessDomChildren.length; i--; ) {\n\t\t\t\t\t\tremoveNode(excessDomChildren[i]);\n\t\t\t\t\t}\n\t\t\t\t\tmarkAsForce(newVNode);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\tif (!e.then) markAsForce(newVNode);\n\t\t\t}\n\t\t\toptions._catchError(e, newVNode, oldVNode);\n\t\t}\n\t} else if (\n\t\texcessDomChildren == NULL &&\n\t\tnewVNode._original == oldVNode._original\n\t) {\n\t\tnewVNode._children = oldVNode._children;\n\t\tnewVNode._dom = oldVNode._dom;\n\t} else {\n\t\toldDom = newVNode._dom = diffElementNodes(\n\t\t\toldVNode._dom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\t}\n\n\tif ((tmp = options.diffed)) tmp(newVNode);\n\n\treturn newVNode._flags & MODE_SUSPENDED ? undefined : oldDom;\n}\n\nfunction markAsForce(vnode) {\n\tif (vnode) {\n\t\tif (vnode._component) vnode._component._force = true;\n\t\tif (vnode._children) vnode._children.some(markAsForce);\n\t}\n}\n\n/**\n * @param {Array<Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {VNode} root\n */\nexport function commitRoot(commitQueue, root, refQueue) {\n\tfor (let i = 0; i < refQueue.length; i++) {\n\t\tapplyRef(refQueue[i], refQueue[++i], refQueue[++i]);\n\t}\n\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-expect-error Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-expect-error See above comment on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\nfunction cloneNode(node) {\n\tif (typeof node != 'object' || node == NULL || node._depth > 0) {\n\t\treturn node;\n\t}\n\n\tif (isArray(node)) {\n\t\treturn node.map(cloneNode);\n\t}\n\n\treturn assign({}, node);\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {PreactElement} dom The DOM element representing the virtual nodes\n * being diffed\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n * @returns {PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating,\n\trefQueue\n) {\n\tlet oldProps = oldVNode.props || EMPTY_OBJ;\n\tlet newProps = newVNode.props;\n\tlet nodeType = /** @type {string} */ (newVNode.type);\n\t/** @type {any} */\n\tlet i;\n\t/** @type {{ __html?: string }} */\n\tlet newHtml;\n\t/** @type {{ __html?: string }} */\n\tlet oldHtml;\n\t/** @type {ComponentChildren} */\n\tlet newChildren;\n\tlet value;\n\tlet inputValue;\n\tlet checked;\n\n\t// Tracks entering and exiting namespaces when descending through the tree.\n\tif (nodeType == 'svg') namespace = SVG_NAMESPACE;\n\telse if (nodeType == 'math') namespace = MATH_NAMESPACE;\n\telse if (!namespace) namespace = XHTML_NAMESPACE;\n\n\tif (excessDomChildren != NULL) {\n\t\tfor (i = 0; i < excessDomChildren.length; i++) {\n\t\t\tvalue = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tvalue &&\n\t\t\t\t'setAttribute' in value == !!nodeType &&\n\t\t\t\t(nodeType ? value.localName == nodeType : value.nodeType == 3)\n\t\t\t) {\n\t\t\t\tdom = value;\n\t\t\t\texcessDomChildren[i] = NULL;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == NULL) {\n\t\tif (nodeType == NULL) {\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tdom = document.createElementNS(\n\t\t\tnamespace,\n\t\t\tnodeType,\n\t\t\tnewProps.is && newProps\n\t\t);\n\n\t\t// we are creating a new node, so we can assume this is a new subtree (in\n\t\t// case we are hydrating), this deopts the hydrate\n\t\tif (isHydrating) {\n\t\t\tif (options._hydrationMismatch)\n\t\t\t\toptions._hydrationMismatch(newVNode, excessDomChildren);\n\t\t\tisHydrating = false;\n\t\t}\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = NULL;\n\t}\n\n\tif (nodeType == NULL) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data != newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\t// If we are in a situation where we are not hydrating but are using\n\t\t// existing DOM (e.g. replaceNode) we should read the existing DOM\n\t\t// attributes to diff them\n\t\tif (!isHydrating && excessDomChildren != NULL) {\n\t\t\toldProps = {};\n\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\tvalue = dom.attributes[i];\n\t\t\t\toldProps[value.name] = value.value;\n\t\t\t}\n\t\t}\n\n\t\tfor (i in oldProps) {\n\t\t\tvalue = oldProps[i];\n\t\t\tif (i == 'dangerouslySetInnerHTML') {\n\t\t\t\toldHtml = value;\n\t\t\t} else if (\n\t\t\t\ti != 'children' &&\n\t\t\t\t!(i in newProps) &&\n\t\t\t\t!(i == 'value' && 'defaultValue' in newProps) &&\n\t\t\t\t!(i == 'checked' && 'defaultChecked' in newProps)\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, NULL, value, namespace);\n\t\t\t}\n\t\t}\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tfor (i in newProps) {\n\t\t\tvalue = newProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t\tnewChildren = value;\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\tnewHtml = value;\n\t\t\t} else if (i == 'value') {\n\t\t\t\tinputValue = value;\n\t\t\t} else if (i == 'checked') {\n\t\t\t\tchecked = value;\n\t\t\t} else if (\n\t\t\t\t(!isHydrating || typeof value == 'function') &&\n\t\t\t\toldProps[i] !== value\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, value, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\tif (\n\t\t\t\t!isHydrating &&\n\t\t\t\t(!oldHtml ||\n\t\t\t\t\t(newHtml.__html != oldHtml.__html && newHtml.__html != dom.innerHTML))\n\t\t\t) {\n\t\t\t\tdom.innerHTML = newHtml.__html;\n\t\t\t}\n\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\tif (oldHtml) dom.innerHTML = '';\n\n\t\t\tdiffChildren(\n\t\t\t\t// @ts-expect-error\n\t\t\t\tnewVNode.type == 'template' ? dom.content : dom,\n\t\t\t\tisArray(newChildren) ? newChildren : [newChildren],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnodeType == 'foreignObject' ? XHTML_NAMESPACE : namespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != NULL) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tremoveNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// As above, don't diff props during hydration\n\t\tif (!isHydrating) {\n\t\t\ti = 'value';\n\t\t\tif (nodeType == 'progress' && inputValue == NULL) {\n\t\t\t\tdom.removeAttribute('value');\n\t\t\t} else if (\n\t\t\t\tinputValue != UNDEFINED &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(inputValue !== dom[i] ||\n\t\t\t\t\t(nodeType == 'progress' && !inputValue) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType == 'option' && inputValue != oldProps[i]))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, inputValue, oldProps[i], namespace);\n\t\t\t}\n\n\t\t\ti = 'checked';\n\t\t\tif (checked != UNDEFINED && checked != dom[i]) {\n\t\t\t\tsetProperty(dom, i, checked, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {Ref<any> & { _unmount?: unknown }} ref\n * @param {any} value\n * @param {VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') {\n\t\t\tlet hasRefUnmount = typeof ref._unmount == 'function';\n\t\t\tif (hasRefUnmount) {\n\t\t\t\t// @ts-ignore TS doesn't like moving narrowing checks into variables\n\t\t\t\tref._unmount();\n\t\t\t}\n\n\t\t\tif (!hasRefUnmount || value != NULL) {\n\t\t\t\t// Store the cleanup function on the function\n\t\t\t\t// instance object itself to avoid shape\n\t\t\t\t// transitioning vnode\n\t\t\t\tref._unmount = ref(value);\n\t\t\t}\n\t\t} else ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {VNode} vnode The virtual node to unmount\n * @param {VNode} parentVNode The parent of the VNode that initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current == vnode._dom) {\n\t\t\tapplyRef(r, NULL, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != NULL) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = NULL;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type != 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\tvnode._component = vnode._parent = vnode._dom = UNDEFINED;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n", "import { EMPTY_OBJ, NULL } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to render into\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\t// https://github.com/preactjs/preact/issues/3794\n\tif (parentDom == document) {\n\t\tparentDom = document.documentElement;\n\t}\n\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode == 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? NULL\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = ((!isHydrating && replaceNode) || parentDom)._children =\n\t\tcreateElement(Fragment, NULL, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [],\n\t\trefQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.namespaceURI,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t\t? NULL\n\t\t\t\t: parentDom.firstChild\n\t\t\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t\t\t: NULL,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t\t? oldVNode._dom\n\t\t\t\t: parentDom.firstChild,\n\t\tisHydrating,\n\t\trefQueue\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode, refQueue);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n", "import { assign, slice } from './util';\nimport { createVNode } from './create-element';\nimport { NULL, UNDEFINED } from './constants';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its\n * children.\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used\n * as replacement children.\n * @returns {import('./internal').VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\n\tlet defaultProps;\n\n\tif (vnode.type && vnode.type.defaultProps) {\n\t\tdefaultProps = vnode.type.defaultProps;\n\t}\n\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse if (props[i] === UNDEFINED && defaultProps != UNDEFINED) {\n\t\t\tnormalizedProps[i] = defaultProps[i];\n\t\t} else {\n\t\t\tnormalizedProps[i] = props[i];\n\t\t}\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tNULL\n\t);\n}\n", "import { NULL } from '../constants';\n\n/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw the error that was caught (except\n * for unmounting when this parameter is the highest parent that was being\n * unmounted)\n * @param {import('../internal').VNode} [oldVNode]\n * @param {import('../internal').ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {import('../internal').Component} */\n\tlet component,\n\t\t/** @type {import('../internal').ComponentType} */\n\t\tctor,\n\t\t/** @type {boolean} */\n\t\thandled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != NULL) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != NULL) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n", "import { options as _options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {import('./internal').Component} */\nlet previousComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array<import('./internal').Component>} */\nlet afterPaintEffects = [];\n\n// Cast to use internal Options type\nconst options = /** @type {import('./internal').Options} */ (_options);\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\nlet oldRoot = options._root;\n\n// We take the minimum timeout for requestAnimationFrame to ensure that\n// the callback is invoked after the next frame. 35ms is based on a 30hz\n// refresh rate, which is the minimum rate for a smooth user experience.\nconst RAF_TIMEOUT = 35;\nlet prevRaf;\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._root = (vnode, parentDom) => {\n\tif (vnode && parentDom._children && parentDom._children._mask) {\n\t\tvnode._mask = parentDom._children._mask;\n\t}\n\n\tif (oldRoot) oldRoot(vnode, parentDom);\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\tif (previousComponent === currentComponent) {\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentComponent._renderCallbacks = [];\n\t\t\thooks._list.some(hookItem => {\n\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t}\n\t\t\t\thookItem._pendingArgs = hookItem._nextValue = undefined;\n\t\t\t});\n\t\t} else {\n\t\t\thooks._pendingEffects.some(invokeCleanup);\n\t\t\thooks._pendingEffects.some(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentIndex = 0;\n\t\t}\n\t}\n\tpreviousComponent = currentComponent;\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tif (c.__hooks._pendingEffects.length) afterPaint(afterPaintEffects.push(c));\n\t\tc.__hooks._list.some(hookItem => {\n\t\t\tif (hookItem._pendingArgs) {\n\t\t\t\thookItem._args = hookItem._pendingArgs;\n\t\t\t}\n\t\t\thookItem._pendingArgs = undefined;\n\t\t});\n\t}\n\tpreviousComponent = currentComponent = null;\n};\n\n// TODO: Improve typing of commitQueue parameter\n/** @type {(vnode: import('./internal').VNode, commitQueue: any) => void} */\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.some(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.some(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tc.__hooks = undefined;\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({});\n\t}\n\n\treturn hooks._list[index];\n}\n\n/**\n * @template {unknown} S\n * @param {import('./index').Dispatch<import('./index').StateUpdater<S>>} [initialState]\n * @returns {[S, (state: S) => void]}\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @template {unknown} S\n * @template {unknown} A\n * @param {import('./index').Reducer<S, A>} reducer\n * @param {import('./index').Dispatch<import('./index').StateUpdater<S>>} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ S, (state: S) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst currentValue = hookState._nextValue\n\t\t\t\t\t? hookState._nextValue[0]\n\t\t\t\t\t: hookState._value[0];\n\t\t\t\tconst nextValue = hookState._reducer(currentValue, action);\n\n\t\t\t\tif (currentValue !== nextValue) {\n\t\t\t\t\thookState._nextValue = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\n\t\tif (!currentComponent._hasScuFromHooks) {\n\t\t\tcurrentComponent._hasScuFromHooks = true;\n\t\t\tlet prevScu = currentComponent.shouldComponentUpdate;\n\t\t\tconst prevCWU = currentComponent.componentWillUpdate;\n\n\t\t\t// If we're dealing with a forced update `shouldComponentUpdate` will\n\t\t\t// not be called. But we use that to update the hook values, so we\n\t\t\t// need to call it.\n\t\t\tcurrentComponent.componentWillUpdate = function (p, s, c) {\n\t\t\t\tif (this._force) {\n\t\t\t\t\tlet tmp = prevScu;\n\t\t\t\t\t// Clear to avoid other sCU hooks from being called\n\t\t\t\t\tprevScu = undefined;\n\t\t\t\t\tupdateHookState(p, s, c);\n\t\t\t\t\tprevScu = tmp;\n\t\t\t\t}\n\n\t\t\t\tif (prevCWU) prevCWU.call(this, p, s, c);\n\t\t\t};\n\n\t\t\t// This SCU has the purpose of bailing out after repeated updates\n\t\t\t// to stateful hooks.\n\t\t\t// we store the next value in _nextValue[0] and keep doing that for all\n\t\t\t// state setters, if we have next states and\n\t\t\t// all next states within a component end up being equal to their original state\n\t\t\t// we are safe to bail out for this specific component.\n\t\t\t/**\n\t\t\t *\n\t\t\t * @type {import('./internal').Component[\"shouldComponentUpdate\"]}\n\t\t\t */\n\t\t\t// @ts-ignore - We don't use TS to downtranspile\n\t\t\t// eslint-disable-next-line no-inner-declarations\n\t\t\tfunction updateHookState(p, s, c) {\n\t\t\t\tif (!hookState._component.__hooks) return true;\n\n\t\t\t\tconst stateHooks = hookState._component.__hooks._list.filter(\n\t\t\t\t\tx => x._component\n\t\t\t\t);\n\n\t\t\t\tconst allHooksEmpty = stateHooks.every(x => !x._nextValue);\n\t\t\t\t// When we have no updated hooks in the component we invoke the previous SCU or\n\t\t\t\t// traverse the VDOM tree further.\n\t\t\t\tif (allHooksEmpty) {\n\t\t\t\t\treturn prevScu ? prevScu.call(this, p, s, c) : true;\n\t\t\t\t}\n\n\t\t\t\t// We check whether we have components with a nextValue set that\n\t\t\t\t// have values that aren't equal to one another this pushes\n\t\t\t\t// us to update further down the tree\n\t\t\t\tlet shouldUpdate = hookState._component.props !== p;\n\t\t\t\tstateHooks.some(hookItem => {\n\t\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\t\tconst currentValue = hookItem._value[0];\n\t\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t\t\thookItem._nextValue = undefined;\n\t\t\t\t\t\tif (currentValue !== hookItem._value[0]) shouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn prevScu\n\t\t\t\t\t? prevScu.call(this, p, s, c) || shouldUpdate\n\t\t\t\t\t: shouldUpdate;\n\t\t\t}\n\n\t\t\tcurrentComponent.shouldComponentUpdate = updateHookState;\n\t\t}\n\t}\n\n\treturn hookState._nextValue || hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\n/** @type {(initialValue: unknown) => unknown} */\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') {\n\t\t\t\tconst result = ref(createHandle());\n\t\t\t\treturn () => {\n\t\t\t\t\tref(null);\n\t\t\t\t\tif (result && typeof result == 'function') result();\n\t\t\t\t};\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = createHandle();\n\t\t\t\treturn () => (ref.current = null);\n\t\t\t}\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @template {unknown} T\n * @param {() => T} factory\n * @param {unknown[]} args\n * @returns {T}\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState<T>} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._value = factory();\n\t\tstate._args = args;\n\t\tstate._factory = factory;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {unknown[]} args\n * @returns {() => void}\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(\n\t\t\tformatter ? formatter(value) : /** @type {any}*/ (value)\n\t\t);\n\t}\n}\n\n/**\n * @param {(error: unknown, errorInfo: import('preact').ErrorInfo) => void} cb\n * @returns {[unknown, () => void]}\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = (err, errorInfo) => {\n\t\t\tif (state._value) state._value(err, errorInfo);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\n/** @type {() => string} */\nexport function useId() {\n\t/** @type {import('./internal').IdHookState} */\n\tconst state = getHookState(currentIndex++, 11);\n\tif (!state._value) {\n\t\t// Grab either the root node or the nearest async boundary node.\n\t\t/** @type {import('./internal').VNode} */\n\t\tlet root = currentComponent._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\tlet mask = root._mask || (root._mask = [0, 0]);\n\t\tstate._value = 'P' + mask[0] + '-' + mask[1]++;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tconst hooks = component.__hooks;\n\t\tif (!component._parentDom || !hooks) continue;\n\t\ttry {\n\t\t\thooks._pendingEffects.some(invokeCleanup);\n\t\t\thooks._pendingEffects.some(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\thooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n * @returns {void}\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').HookState} hook\n * @returns {void}\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n * @returns {void}\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {unknown[]} oldArgs\n * @param {unknown[]} newArgs\n * @returns {boolean}\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\n/**\n * @template Arg\n * @param {Arg} arg\n * @param {(arg: Arg) => any} f\n * @returns {any}\n */\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n", "/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Check if two objects have a different shape\n * @param {object} a\n * @param {object} b\n * @returns {boolean}\n */\nexport function shallowDiffers(a, b) {\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\n\treturn false;\n}\n\n/**\n * Check if two values are the same value\n * @param {*} x\n * @param {*} y\n * @returns {boolean}\n */\nexport function is(x, y) {\n\treturn (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\n", "import { useState, useLayoutEffect, useEffect } from 'preact/hooks';\nimport { is } from './util';\n\n/**\n * This is taken from https://github.com/facebook/react/blob/main/packages/use-sync-external-store/src/useSyncExternalStoreShimClient.js#L84\n * on a high level this cuts out the warnings, ... and attempts a smaller implementation\n * @typedef {{ _value: any; _getSnapshot: () => any }} Store\n */\nexport function useSyncExternalStore(subscribe, getSnapshot) {\n\tconst value = getSnapshot();\n\n\t/**\n\t * @typedef {{ _instance: Store }} StoreRef\n\t * @type {[StoreRef, (store: StoreRef) => void]}\n\t */\n\tconst [{ _instance }, forceUpdate] = useState({\n\t\t_instance: { _value: value, _getSnapshot: getSnapshot }\n\t});\n\n\tuseLayoutEffect(() => {\n\t\t_instance._value = value;\n\t\t_instance._getSnapshot = getSnapshot;\n\n\t\tif (didSnapshotChange(_instance)) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\t}, [subscribe, value, getSnapshot]);\n\n\tuseEffect(() => {\n\t\tif (didSnapshotChange(_instance)) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\n\t\treturn subscribe(() => {\n\t\t\tif (didSnapshotChange(_instance)) {\n\t\t\t\tforceUpdate({ _instance });\n\t\t\t}\n\t\t});\n\t}, [subscribe]);\n\n\treturn value;\n}\n\n/** @type {(inst: Store) => boolean} */\nfunction didSnapshotChange(inst) {\n\ttry {\n\t\treturn !is(inst._value, inst._getSnapshot());\n\t} catch (error) {\n\t\treturn true;\n\t}\n}\n\nexport function startTransition(cb) {\n\tcb();\n}\n\nexport function useDeferredValue(val) {\n\treturn val;\n}\n\nexport function useTransition() {\n\treturn [false, startTransition];\n}\n\n// TODO: in theory this should be done after a VNode is diffed as we want to insert\n// styles/... before it attaches\nexport const useInsertionEffect = useLayoutEffect;\n", "import { Component } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Component class with a predefined `shouldComponentUpdate` implementation\n */\nexport function PureComponent(p, c) {\n\tthis.props = p;\n\tthis.context = c;\n}\nPureComponent.prototype = new Component();\n// Some third-party libraries check if this property is present\nPureComponent.prototype.isPureReactComponent = true;\nPureComponent.prototype.shouldComponentUpdate = function (props, state) {\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\n};\n", "import { createElement } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Memoize a component, so that it only updates when the props actually have\n * changed. This was previously known as `React.pure`.\n * @param {import('./internal').FunctionComponent} c functional component\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\n * @returns {import('./internal').FunctionComponent}\n */\nexport function memo(c, comparer) {\n\tfunction shouldUpdate(nextProps) {\n\t\tlet ref = this.props.ref;\n\t\tif (ref != nextProps.ref && ref) {\n\t\t\ttypeof ref == 'function' ? ref(null) : (ref.current = null);\n\t\t}\n\n\t\treturn comparer\n\t\t\t? !comparer(this.props, nextProps) || ref != nextProps.ref\n\t\t\t: shallowDiffers(this.props, nextProps);\n\t}\n\n\tfunction Memoed(props) {\n\t\tthis.shouldComponentUpdate = shouldUpdate;\n\t\treturn createElement(c, props);\n\t}\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\n\tMemoed._forwarded = Memoed.prototype.isReactComponent = true;\n\tMemoed.type = c;\n\treturn Memoed;\n}\n", "import { options } from 'preact';\nimport { assign } from './util';\n\nlet oldDiffHook = options._diff;\noptions._diff = vnode => {\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\n\t\tvnode.props.ref = vnode.ref;\n\t\tvnode.ref = null;\n\t}\n\tif (oldDiffHook) oldDiffHook(vnode);\n};\n\nexport const REACT_FORWARD_SYMBOL =\n\t(typeof Symbol != 'undefined' &&\n\t\tSymbol.for &&\n\t\tSymbol.for('react.forward_ref')) ||\n\t0xf47;\n\n/**\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\n * wrap components. Using `forwardRef` there is an easy way to get a reference\n * of the wrapped component instead of one of the wrapper itself.\n * @param {import('./index').ForwardFn} fn\n * @returns {import('./internal').FunctionComponent}\n */\nexport function forwardRef(fn) {\n\tfunction Forwarded(props) {\n\t\tlet clone = assign({}, props);\n\t\tdelete clone.ref;\n\t\treturn fn(clone, props.ref || null);\n\t}\n\n\t// mobx-react checks for this being present\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\n\t// mobx-react heavily relies on implementation details.\n\t// It expects an object here with a `render` property,\n\t// and prototype.render will fail. Without this\n\t// mobx-react throws.\n\tForwarded.render = fn;\n\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\n\treturn Forwarded;\n}\n", "import { toChildArray } from 'preact';\n\nconst mapFn = (children, fn) => {\n\tif (children == null) return null;\n\treturn toChildArray(toChildArray(children).map(fn));\n};\n\n// This API is completely unnecessary for Preact, so it's basically passthrough.\nexport const Children = {\n\tmap: mapFn,\n\tforEach: mapFn,\n\tcount(children) {\n\t\treturn children ? toChildArray(children).length : 0;\n\t},\n\tonly(children) {\n\t\tconst normalized = toChildArray(children);\n\t\tif (normalized.length !== 1) throw 'Children.only';\n\t\treturn normalized[0];\n\t},\n\ttoArray: toChildArray\n};\n", "import { Component, createElement, options, Fragment } from 'preact';\nimport { MODE_HYDRATE } from '../../src/constants';\nimport { assign } from './util';\n\nconst oldCatchError = options._catchError;\noptions._catchError = function (error, newVNode, oldVNode, errorInfo) {\n\tif (error.then) {\n\t\t/** @type {import('./internal').Component} */\n\t\tlet component;\n\t\tlet vnode = newVNode;\n\n\t\tfor (; (vnode = vnode._parent); ) {\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\n\t\t\t\tif (newVNode._dom == null) {\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t}\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\n\t\t\t}\n\t\t}\n\t}\n\toldCatchError(error, newVNode, oldVNode, errorInfo);\n};\n\nconst oldUnmount = options.unmount;\noptions.unmount = function (vnode) {\n\t/** @type {import('./internal').Component} */\n\tconst component = vnode._component;\n\tif (component) component._unmounted = true;\n\tif (component && component._onResolve) {\n\t\tcomponent._onResolve();\n\t}\n\n\t// if the component is still hydrating\n\t// most likely it is because the component is suspended\n\t// we set the vnode.type as `null` so that it is not a typeof function\n\t// so the unmount will remove the vnode._dom\n\tif (component && vnode._flags & MODE_HYDRATE) {\n\t\tvnode.type = null;\n\t}\n\n\tif (oldUnmount) oldUnmount(vnode);\n};\n\nfunction detachedClone(vnode, detachedParent, parentDom) {\n\tif (vnode) {\n\t\tif (vnode._component && vnode._component.__hooks) {\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\n\t\t\t});\n\n\t\t\tvnode._component.__hooks = null;\n\t\t}\n\n\t\tvnode = assign({}, vnode);\n\t\tif (vnode._component != null) {\n\t\t\tif (vnode._component._parentDom === parentDom) {\n\t\t\t\tvnode._component._parentDom = detachedParent;\n\t\t\t}\n\n\t\t\tvnode._component._force = true;\n\n\t\t\tvnode._component = null;\n\t\t}\n\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\n\t\t\t);\n\t}\n\n\treturn vnode;\n}\n\nfunction removeOriginal(vnode, detachedParent, originalParent) {\n\tif (vnode && originalParent) {\n\t\tvnode._original = null;\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\n\t\t\t);\n\n\t\tif (vnode._component) {\n\t\t\tif (vnode._component._parentDom === detachedParent) {\n\t\t\t\tif (vnode._dom) {\n\t\t\t\t\toriginalParent.appendChild(vnode._dom);\n\t\t\t\t}\n\t\t\t\tvnode._component._force = true;\n\t\t\t\tvnode._component._parentDom = originalParent;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vnode;\n}\n\n// having custom inheritance instead of a class here saves a lot of bytes\nexport function Suspense() {\n\t// we do not call super here to golf some bytes...\n\tthis._pendingSuspensionCount = 0;\n\tthis._suspenders = null;\n\tthis._detachOnNextRender = null;\n}\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspense.prototype = new Component();\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {Promise} promise The thrown promise\n * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component\n */\nSuspense.prototype._childDidSuspend = function (promise, suspendingVNode) {\n\tconst suspendingComponent = suspendingVNode._component;\n\n\t/** @type {import('./internal').SuspenseComponent} */\n\tconst c = this;\n\n\tif (c._suspenders == null) {\n\t\tc._suspenders = [];\n\t}\n\tc._suspenders.push(suspendingComponent);\n\n\tconst resolve = suspended(c._vnode);\n\n\tlet resolved = false;\n\tconst onResolved = () => {\n\t\tif (resolved || c._unmounted) return;\n\n\t\tresolved = true;\n\t\tsuspendingComponent._onResolve = null;\n\n\t\tif (resolve) {\n\t\t\tresolve(onSuspensionComplete);\n\t\t} else {\n\t\t\tonSuspensionComplete();\n\t\t}\n\t};\n\n\tsuspendingComponent._onResolve = onResolved;\n\n\t// Store and null _parentDom to prevent setState/forceUpdate from\n\t// scheduling renders while suspended. Render would be a no-op anyway\n\t// since renderComponent checks _parentDom, but this avoids queue churn.\n\tconst originalParentDom = suspendingComponent._parentDom;\n\tsuspendingComponent._parentDom = null;\n\n\tconst onSuspensionComplete = () => {\n\t\tif (!--c._pendingSuspensionCount) {\n\t\t\t// If the suspension was during hydration we don't need to restore the\n\t\t\t// suspended children into the _children array\n\t\t\tif (c.state._suspended) {\n\t\t\t\tconst suspendedVNode = c.state._suspended;\n\t\t\t\tc._vnode._children[0] = removeOriginal(\n\t\t\t\t\tsuspendedVNode,\n\t\t\t\t\tsuspendedVNode._component._parentDom,\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\n\n\t\t\tlet suspended;\n\t\t\twhile ((suspended = c._suspenders.pop())) {\n\t\t\t\t// Restore _parentDom before forceUpdate so render can proceed\n\t\t\t\tsuspended._parentDom = originalParentDom;\n\t\t\t\tsuspended.forceUpdate();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * We do not set `suspended: true` during hydration because we want the actual markup\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\n\t */\n\tif (\n\t\t!c._pendingSuspensionCount++ &&\n\t\t!(suspendingVNode._flags & MODE_HYDRATE)\n\t) {\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\n\t}\n\tpromise.then(onResolved, onResolved);\n};\n\nSuspense.prototype.componentWillUnmount = function () {\n\tthis._suspenders = [];\n};\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\n * @param {import('./internal').SuspenseState} state\n */\nSuspense.prototype.render = function (props, state) {\n\tif (this._detachOnNextRender) {\n\t\t// When the Suspense's _vnode was created by a call to createVNode\n\t\t// (i.e. due to a setState further up in the tree)\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\n\t\tif (this._vnode._children) {\n\t\t\tconst detachedParent = document.createElement('div');\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\n\t\t\tthis._vnode._children[0] = detachedClone(\n\t\t\t\tthis._detachOnNextRender,\n\t\t\t\tdetachedParent,\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\n\t\t\t);\n\t\t}\n\n\t\tthis._detachOnNextRender = null;\n\t}\n\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\n\t/** @type {import('./internal').VNode} */\n\tconst fallback =\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\n\tif (fallback) fallback._flags &= ~MODE_HYDRATE;\n\n\treturn [\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\n\t\tfallback\n\t];\n};\n\n/**\n * Checks and calls the parent component's _suspended method, passing in the\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\n * that one of its children/descendants suspended.\n *\n * The parent MAY return a callback. The callback will get called when the\n * suspension resolves, notifying the parent of the fact.\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\n * This is a way for the parent to delay unsuspending.\n *\n * If the parent does not return a callback then the resolved vnode\n * gets unsuspended immediately when it resolves.\n *\n * @param {import('./internal').VNode} vnode\n * @returns {((unsuspend: () => void) => void)?}\n */\nexport function suspended(vnode) {\n\tlet component = vnode._parent && vnode._parent._component;\n\treturn component && component._suspended && component._suspended(vnode);\n}\n\nexport function lazy(loader) {\n\tlet prom;\n\tlet component = null;\n\tlet error;\n\tlet resolved;\n\n\tfunction Lazy(props) {\n\t\tif (!prom) {\n\t\t\tprom = loader();\n\t\t\tprom.then(\n\t\t\t\texports => {\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\tcomponent = exports.default || exports;\n\t\t\t\t\t}\n\t\t\t\t\tresolved = true;\n\t\t\t\t},\n\t\t\t\te => {\n\t\t\t\t\terror = e;\n\t\t\t\t\tresolved = true;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!resolved) {\n\t\t\tthrow prom;\n\t\t}\n\n\t\treturn component ? createElement(component, props) : null;\n\t}\n\n\tLazy.displayName = 'Lazy';\n\tLazy._forwarded = true;\n\treturn Lazy;\n}\n", "import { Component, toChildArray } from 'preact';\nimport { suspended } from './suspense.js';\n\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\nconst SUSPENDED_COUNT = 0;\nconst RESOLVED_COUNT = 1;\nconst NEXT_NODE = 2;\n\n// Having custom inheritance instead of a class here saves a lot of bytes.\nexport function SuspenseList() {\n\tthis._next = null;\n\tthis._map = null;\n}\n\n// Mark one of child's earlier suspensions as resolved.\n// Some pending callbacks may become callable due to this\n// (e.g. the last suspended descendant gets resolved when\n// revealOrder === 'together'). Process those callbacks as well.\nconst resolve = (list, child, node) => {\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\n\t\t// The number a child (or any of its descendants) has been suspended\n\t\t// matches the number of times it's been resolved. Therefore we\n\t\t// mark the child as completely resolved by deleting it from ._map.\n\t\t// This is used to figure out when *all* children have been completely\n\t\t// resolved when revealOrder is 'together'.\n\t\tlist._map.delete(child);\n\t}\n\n\t// If revealOrder is falsy then we can do an early exit, as the\n\t// callbacks won't get queued in the node anyway.\n\t// If revealOrder is 'together' then also do an early exit\n\t// if all suspended descendants have not yet been resolved.\n\tif (\n\t\t!list.props.revealOrder ||\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\n\t) {\n\t\treturn;\n\t}\n\n\t// Walk the currently suspended children in order, calling their\n\t// stored callbacks on the way. Stop if we encounter a child that\n\t// has not been completely resolved yet.\n\tnode = list._next;\n\twhile (node) {\n\t\twhile (node.length > 3) {\n\t\t\tnode.pop()();\n\t\t}\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\n\t\t\tbreak;\n\t\t}\n\t\tlist._next = node = node[NEXT_NODE];\n\t}\n};\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspenseList.prototype = new Component();\n\nSuspenseList.prototype._suspended = function (child) {\n\tconst list = this;\n\tconst delegated = suspended(list._vnode);\n\n\tlet node = list._map.get(child);\n\tnode[SUSPENDED_COUNT]++;\n\n\treturn unsuspend => {\n\t\tconst wrappedUnsuspend = () => {\n\t\t\tif (!list.props.revealOrder) {\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\n\t\t\t\tunsuspend();\n\t\t\t} else {\n\t\t\t\tnode.push(unsuspend);\n\t\t\t\tresolve(list, child, node);\n\t\t\t}\n\t\t};\n\t\tif (delegated) {\n\t\t\tdelegated(wrappedUnsuspend);\n\t\t} else {\n\t\t\twrappedUnsuspend();\n\t\t}\n\t};\n};\n\nSuspenseList.prototype.render = function (props) {\n\tthis._next = null;\n\tthis._map = new Map();\n\n\tconst children = toChildArray(props.children);\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\n\t\t// then flip the child list around so that the last child will be\n\t\t// the first in the linked list.\n\t\tchildren.reverse();\n\t}\n\t// Build the linked list. Iterate through the children in reverse order\n\t// so that `_next` points to the first linked list node to be resolved.\n\tfor (let i = children.length; i--; ) {\n\t\t// Create a new linked list node as an array of form:\n\t\t// \t[suspended_count, resolved_count, next_node]\n\t\t// where suspended_count and resolved_count are numeric counters for\n\t\t// keeping track how many times a node has been suspended and resolved.\n\t\t//\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\n\t\t// processing callbacks until componentDidMount has been called. In a sense\n\t\t// node is suspended at least until componentDidMount gets called!\n\t\t//\n\t\t// Pending callbacks are added to the end of the node:\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\n\t}\n\treturn props.children;\n};\n\nSuspenseList.prototype.componentDidUpdate =\n\tSuspenseList.prototype.componentDidMount = function () {\n\t\t// Iterate through all children after mounting for two reasons:\n\t\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\n\t\t//    each node[RELEASED_COUNT] by 1, therefore balancing the counters.\n\t\t//    The nodes can now be completely consumed from the linked list.\n\t\t// 2. Handle nodes that might have gotten resolved between render and\n\t\t//    componentDidMount.\n\t\tthis._map.forEach((node, child) => {\n\t\t\tresolve(this, child, node);\n\t\t});\n\t};\n", "/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 2;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 1;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nexport const XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nexport const MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n\nexport const NULL = null;\nexport const UNDEFINED = undefined;\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { createElement, render } from 'preact';\n\n/**\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\n */\nfunction ContextProvider(props) {\n\tthis.getChildContext = () => props.context;\n\treturn props.children;\n}\n\n/**\n * Portal component\n * @this {import('./internal').Component}\n * @param {object | null | undefined} props\n *\n * TODO: use createRoot() instead of fake root\n */\nfunction Portal(props) {\n\tconst _this = this;\n\tlet container = props._container;\n\n\t_this.componentWillUnmount = function () {\n\t\trender(null, _this._temp);\n\t\t_this._temp = null;\n\t\t_this._container = null;\n\t};\n\n\t// When we change container we should clear our old container and\n\t// indicate a new mount.\n\tif (_this._container && _this._container !== container) {\n\t\t_this.componentWillUnmount();\n\t}\n\n\tif (!_this._temp) {\n\t\t// Ensure the element has a mask for useId invocations\n\t\tlet root = _this._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\t_this._container = container;\n\n\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\n\t\t_this._temp = {\n\t\t\tnodeType: 1,\n\t\t\tparentNode: container,\n\t\t\tchildNodes: [],\n\t\t\t_children: { _mask: root._mask },\n\t\t\tcontains: () => true,\n\t\t\tnamespaceURI: container.namespaceURI,\n\t\t\tinsertBefore(child, before) {\n\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t_this._container.insertBefore(child, before);\n\t\t\t},\n\t\t\tremoveChild(child) {\n\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\n\t\t\t\t_this._container.removeChild(child);\n\t\t\t}\n\t\t};\n\t}\n\n\t// Render our wrapping element into temp.\n\trender(\n\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\n\t\t_this._temp\n\t);\n}\n\n/**\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\n * @param {import('./internal').VNode} vnode The vnode to render\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\n */\nexport function createPortal(vnode, container) {\n\tconst el = createElement(Portal, { _vnode: vnode, _container: container });\n\tel.containerInfo = container;\n\treturn el;\n}\n", "import {\n\trender as preactRender,\n\thydrate as preactHydrate,\n\toptions,\n\ttoChildArray,\n\tComponent\n} from 'preact';\nimport {\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue,\n\tuseEffect,\n\tuseId,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseReducer,\n\tuseRef,\n\tuseState\n} from 'preact/hooks';\nimport {\n\tuseDeferredValue,\n\tuseInsertionEffect,\n\tuseSyncExternalStore,\n\tuseTransition\n} from './index';\n\nexport const REACT_ELEMENT_TYPE =\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\n\t0xeac7;\n\nconst CAMEL_PROPS =\n\t/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\nconst ON_ANI = /^on(Ani|Tra|Tou|BeforeInp|Compo)/;\nconst CAMEL_REPLACE = /[A-Z0-9]/g;\nconst IS_DOM = typeof document !== 'undefined';\n\n// Input types for which onchange should not be converted to oninput.\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\nconst onChangeInputType = type =>\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\n\t\t? /fil|che|rad/\n\t\t: /fil|che|ra/\n\t).test(type);\n\n// Some libraries like `react-virtualized` explicitly check for this.\nComponent.prototype.isReactComponent = true;\n\n// `UNSAFE_*` lifecycle hooks\n// Preact only ever invokes the unprefixed methods.\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\n// See https://github.com/preactjs/preact/issues/1941\n[\n\t'componentWillMount',\n\t'componentWillReceiveProps',\n\t'componentWillUpdate'\n].forEach(key => {\n\tObject.defineProperty(Component.prototype, key, {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn this['UNSAFE_' + key];\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: v\n\t\t\t});\n\t\t}\n\t});\n});\n\n/**\n * Proxy render() since React returns a Component reference.\n * @param {import('./internal').VNode} vnode VNode tree to render\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\n * @param {() => void} [callback] Optional callback that will be called after rendering\n * @returns {import('./internal').Component | null} The root component reference or null\n */\nexport function render(vnode, parent, callback) {\n\t// React destroys any existing DOM nodes, see #1727\n\t// ...but only on the first render, see #1828\n\tif (parent._children == null) {\n\t\tparent.textContent = '';\n\t}\n\n\tpreactRender(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nexport function hydrate(vnode, parent, callback) {\n\tpreactHydrate(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nlet oldEventHook = options.event;\noptions.event = e => {\n\tif (oldEventHook) e = oldEventHook(e);\n\n\te.persist = () => {};\n\te.isPropagationStopped = function isPropagationStopped() {\n\t\treturn this.cancelBubble;\n\t};\n\te.isDefaultPrevented = function isDefaultPrevented() {\n\t\treturn this.defaultPrevented;\n\t};\n\treturn (e.nativeEvent = e);\n};\n\nconst classNameDescriptorNonEnumberable = {\n\tconfigurable: true,\n\tget() {\n\t\treturn this.class;\n\t}\n};\n\nfunction handleDomVNode(vnode) {\n\tlet props = vnode.props,\n\t\ttype = vnode.type,\n\t\tnormalizedProps = {},\n\t\tisNonDashedType = type.indexOf('-') == -1;\n\n\tfor (let i in props) {\n\t\tlet value = props[i];\n\n\t\tif (\n\t\t\t(i === 'value' && 'defaultValue' in props && value == null) ||\n\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\n\t\t\t(IS_DOM && i === 'children' && type === 'noscript') ||\n\t\t\ti === 'class' ||\n\t\t\ti === 'className'\n\t\t) {\n\t\t\t// Skip applying value if it is null/undefined and we already set\n\t\t\t// a default value\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet lowerCased = i.toLowerCase();\n\t\tif (i === 'defaultValue' && 'value' in props && props.value == null) {\n\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\n\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\n\t\t\ti = 'value';\n\t\t} else if (i === 'download' && value === true) {\n\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\n\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\n\t\t\t// converts it to an empty string instead, otherwise the attribute\n\t\t\t// value will be used as the file name and the file will be called\n\t\t\t// \"true\" upon downloading it.\n\t\t\tvalue = '';\n\t\t} else if (lowerCased === 'translate' && value === 'no') {\n\t\t\tvalue = false;\n\t\t} else if (lowerCased[0] === 'o' && lowerCased[1] === 'n') {\n\t\t\tif (lowerCased === 'ondoubleclick') {\n\t\t\t\ti = 'ondblclick';\n\t\t\t} else if (\n\t\t\t\tlowerCased === 'onchange' &&\n\t\t\t\t(type === 'input' || type === 'textarea') &&\n\t\t\t\t!onChangeInputType(props.type)\n\t\t\t) {\n\t\t\t\tlowerCased = i = 'oninput';\n\t\t\t} else if (lowerCased === 'onfocus') {\n\t\t\t\ti = 'onfocusin';\n\t\t\t} else if (lowerCased === 'onblur') {\n\t\t\t\ti = 'onfocusout';\n\t\t\t} else if (ON_ANI.test(i)) {\n\t\t\t\ti = lowerCased;\n\t\t\t}\n\t\t} else if (isNonDashedType && CAMEL_PROPS.test(i)) {\n\t\t\ti = i.replace(CAMEL_REPLACE, '-$&').toLowerCase();\n\t\t} else if (value === null) {\n\t\t\tvalue = undefined;\n\t\t}\n\n\t\t// Add support for onInput and onChange, see #3561\n\t\t// if we have an oninput prop already change it to oninputCapture\n\t\tif (lowerCased === 'oninput') {\n\t\t\ti = lowerCased;\n\t\t\tif (normalizedProps[i]) {\n\t\t\t\ti = 'oninputCapture';\n\t\t\t}\n\t\t}\n\n\t\tnormalizedProps[i] = value;\n\t}\n\n\tif (type == 'select') {\n\t\t// Add support for array select values: <select multiple value={[]} />\n\t\tif (normalizedProps.multiple && Array.isArray(normalizedProps.value)) {\n\t\t\t// forEach() always returns undefined, which we abuse here to unset the value prop.\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tchild.props.selected =\n\t\t\t\t\tnormalizedProps.value.indexOf(child.props.value) != -1;\n\t\t\t});\n\t\t}\n\n\t\t// Adding support for defaultValue in select tag\n\t\tif (normalizedProps.defaultValue != null) {\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tif (normalizedProps.multiple) {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue.indexOf(child.props.value) != -1;\n\t\t\t\t} else {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue == child.props.value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (props.class && !props.className) {\n\t\tnormalizedProps.class = props.class;\n\t\tObject.defineProperty(\n\t\t\tnormalizedProps,\n\t\t\t'className',\n\t\t\tclassNameDescriptorNonEnumberable\n\t\t);\n\t} else if (props.className) {\n\t\tnormalizedProps.class = normalizedProps.className = props.className;\n\t}\n\n\tvnode.props = normalizedProps;\n}\n\nlet oldVNodeHook = options.vnode;\noptions.vnode = vnode => {\n\t// only normalize props on Element nodes\n\tif (typeof vnode.type === 'string') {\n\t\thandleDomVNode(vnode);\n\t}\n\n\tvnode.$$typeof = REACT_ELEMENT_TYPE;\n\n\tif (oldVNodeHook) oldVNodeHook(vnode);\n};\n\n// Only needed for react-relay\nlet currentComponent;\nconst oldBeforeRender = options._render;\noptions._render = function (vnode) {\n\tif (oldBeforeRender) {\n\t\toldBeforeRender(vnode);\n\t}\n\tcurrentComponent = vnode._component;\n};\n\nconst oldDiffed = options.diffed;\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions.diffed = function (vnode) {\n\tif (oldDiffed) {\n\t\toldDiffed(vnode);\n\t}\n\n\tconst props = vnode.props;\n\tconst dom = vnode._dom;\n\n\tif (\n\t\tdom != null &&\n\t\tvnode.type === 'textarea' &&\n\t\t'value' in props &&\n\t\tprops.value !== dom.value\n\t) {\n\t\tdom.value = props.value == null ? '' : props.value;\n\t}\n\n\tcurrentComponent = null;\n};\n\n// This is a very very private internal function for React it\n// is used to sort-of do runtime dependency injection.\nexport const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\n\tReactCurrentDispatcher: {\n\t\tcurrent: {\n\t\t\treadContext(context) {\n\t\t\t\treturn currentComponent._globalContext[context._id].props.value;\n\t\t\t},\n\t\t\tuseCallback,\n\t\t\tuseContext,\n\t\t\tuseDebugValue,\n\t\t\tuseDeferredValue,\n\t\t\tuseEffect,\n\t\t\tuseId,\n\t\t\tuseImperativeHandle,\n\t\t\tuseInsertionEffect,\n\t\t\tuseLayoutEffect,\n\t\t\tuseMemo,\n\t\t\t// useMutableSource, // experimental-only and replaced by uSES, likely not worth supporting\n\t\t\tuseReducer,\n\t\t\tuseRef,\n\t\t\tuseState,\n\t\t\tuseSyncExternalStore,\n\t\t\tuseTransition\n\t\t}\n\t}\n};\n", "import {\n\tcreateElement,\n\trender as preactRender,\n\tcloneElement as preactCloneElement,\n\tcreateRef,\n\tComponent,\n\tcreateContext,\n\tFragment,\n\toptions\n} from 'preact';\nimport {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue\n} from 'preact/hooks';\nimport {\n\tuseInsertionEffect,\n\tstartTransition,\n\tuseDeferredValue,\n\tuseSyncExternalStore,\n\tuseTransition\n} from './hooks';\nimport { PureComponent } from './PureComponent';\nimport { memo } from './memo';\nimport { forwardRef } from './forwardRef';\nimport { Children } from './Children';\nimport { Suspense, lazy } from './suspense';\nimport { SuspenseList } from './suspense-list';\nimport { createPortal } from './portals';\nimport {\n\thydrate,\n\trender,\n\tREACT_ELEMENT_TYPE,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n} from './render';\n\nconst version = '18.3.1'; // trick libraries to think we are react\n\n/**\n * Legacy version of createElement.\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor\n */\nfunction createFactory(type) {\n\treturn createElement.bind(null, type);\n}\n\n/**\n * Check if the passed element is a valid (p)react node.\n * @param {*} element The element to check\n * @returns {boolean}\n */\nfunction isValidElement(element) {\n\treturn !!element && element.$$typeof === REACT_ELEMENT_TYPE;\n}\n\n/**\n * Check if the passed element is a Fragment node.\n * @param {*} element The element to check\n * @returns {boolean}\n */\nfunction isFragment(element) {\n\treturn isValidElement(element) && element.type === Fragment;\n}\n\n/**\n * Check if the passed element is a Memo node.\n * @param {*} element The element to check\n * @returns {boolean}\n */\nfunction isMemo(element) {\n\treturn (\n\t\t!!element &&\n\t\ttypeof element.displayName == 'string' &&\n\t\telement.displayName.indexOf('Memo(') == 0\n\t);\n}\n\n/**\n * Wrap `cloneElement` to abort if the passed element is not a valid element and apply\n * all vnode normalizations.\n * @param {import('./internal').VNode} element The vnode to clone\n * @param {object} props Props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Optional component children\n */\nfunction cloneElement(element) {\n\tif (!isValidElement(element)) return element;\n\treturn preactCloneElement.apply(null, arguments);\n}\n\n/**\n * Remove a component tree from the DOM, including state and event handlers.\n * @param {import('./internal').PreactElement} container\n * @returns {boolean}\n */\nfunction unmountComponentAtNode(container) {\n\tif (container._children) {\n\t\tpreactRender(null, container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * Get the matching DOM node for a component\n * @param {import('./internal').Component} component\n * @returns {import('./internal').PreactElement | null}\n */\nfunction findDOMNode(component) {\n\treturn (\n\t\t(component &&\n\t\t\t(component.base || (component.nodeType === 1 && component))) ||\n\t\tnull\n\t);\n}\n\n/**\n * Deprecated way to control batched rendering inside the reconciler, but we\n * already schedule in batches inside our rendering code\n * @template Arg\n * @param {(arg: Arg) => void} callback function that triggers the updated\n * @param {Arg} [arg] Optional argument that can be passed to the callback\n */\n// eslint-disable-next-line camelcase\nconst unstable_batchedUpdates = (callback, arg) => callback(arg);\n\n/**\n * In React, `flushSync` flushes the entire tree and forces a rerender.\n * @template Arg\n * @template Result\n * @param {(arg: Arg) => Result} callback function that runs before the flush\n * @param {Arg} [arg] Optional argument that can be passed to the callback\n * @returns\n */\nconst flushSync = (callback, arg) => {\n\tconst prevDebounce = options.debounceRendering;\n\toptions.debounceRendering = cb => cb();\n\tconst res = callback(arg);\n\toptions.debounceRendering = prevDebounce;\n\treturn res;\n};\n\n// compat to react-is\nexport const isElement = isValidElement;\n\nexport * from 'preact/hooks';\nexport {\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tisFragment,\n\tisMemo,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\tuseInsertionEffect,\n\tstartTransition,\n\tuseDeferredValue,\n\tuseSyncExternalStore,\n\tuseTransition,\n\t// eslint-disable-next-line camelcase\n\tunstable_batchedUpdates,\n\tFragment as StrictMode,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n\n// React copies the named exports to the default one.\nexport default {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseInsertionEffect,\n\tuseTransition,\n\tuseDeferredValue,\n\tuseSyncExternalStore,\n\tstartTransition,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue,\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tisElement,\n\tisFragment,\n\tisMemo,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\tunstable_batchedUpdates,\n\tStrictMode: Fragment,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n", "import findDOMElement from '@uppy/utils/lib/findDOMElement';\nimport getTextDirection from '@uppy/utils/lib/getTextDirection';\nimport { render } from 'preact/compat';\nimport BasePlugin from './BasePlugin.js';\n/**\n * Defer a frequent call to the microtask queue.\n */\nfunction debounce(fn) {\n    let calling = null;\n    let latestArgs;\n    return (...args) => {\n        latestArgs = args;\n        if (!calling) {\n            calling = Promise.resolve().then(() => {\n                calling = null;\n                // At this point `args` may be different from the most\n                // recent state, if multiple calls happened since this task\n                // was queued. So we use the `latestArgs`, which definitely\n                // is the most recent call.\n                return fn(...latestArgs);\n            });\n        }\n        return calling;\n    };\n}\n/**\n * UIPlugin is the extended version of BasePlugin to incorporate rendering with Preact.\n * Use this for plugins that need a user interface.\n *\n * For plugins without an user interface, see BasePlugin.\n */\nclass UIPlugin extends BasePlugin {\n    #updateUI;\n    isTargetDOMEl;\n    el;\n    parent;\n    title;\n    getTargetPlugin(target) {\n        let targetPlugin;\n        if (typeof target?.addTarget === 'function') {\n            // Targeting a plugin *instance*\n            targetPlugin = target;\n            if (!(targetPlugin instanceof UIPlugin)) {\n                console.warn(new Error('The provided plugin is not an instance of UIPlugin. This is an indication of a bug with the way Uppy is bundled.', { cause: { targetPlugin, UIPlugin } }));\n            }\n        }\n        else if (typeof target === 'function') {\n            // Targeting a plugin type\n            const Target = target;\n            // Find the target plugin instance.\n            this.uppy.iteratePlugins((p) => {\n                if (p instanceof Target) {\n                    targetPlugin = p;\n                }\n            });\n        }\n        return targetPlugin;\n    }\n    /**\n     * Check if supplied `target` is a DOM element or an `object`.\n     * If it\u2019s an object \u2014 target is a plugin, and we search `plugins`\n     * for a plugin with same name and return its target.\n     */\n    mount(target, plugin) {\n        const callerPluginName = plugin.id;\n        const targetElement = findDOMElement(target);\n        if (targetElement) {\n            this.isTargetDOMEl = true;\n            // When target is <body> with a single <div> element,\n            // Preact thinks it\u2019s the Uppy root element in there when doing a diff,\n            // and destroys it. So we are creating a fragment (could be empty div)\n            const uppyRootElement = document.createElement('div');\n            uppyRootElement.classList.add('uppy-Root');\n            // API for plugins that require a synchronous rerender.\n            this.#updateUI = debounce((state) => {\n                // plugin could be removed, but this.rerender is debounced below,\n                // so it could still be called even after uppy.removePlugin or uppy.destroy\n                // hence the check\n                if (!this.uppy.getPlugin(this.id))\n                    return;\n                render(this.render(state, uppyRootElement), uppyRootElement);\n                this.afterUpdate();\n            });\n            this.uppy.log(`Installing ${callerPluginName} to a DOM element '${target}'`);\n            if (this.opts.replaceTargetContent) {\n                // Doing render(h(null), targetElement), which should have been\n                // a better way, since because the component might need to do additional cleanup when it is removed,\n                // stopped working \u2014 Preact just adds null into target, not replacing\n                targetElement.innerHTML = '';\n            }\n            render(this.render(this.uppy.getState(), uppyRootElement), uppyRootElement);\n            this.el = uppyRootElement;\n            targetElement.appendChild(uppyRootElement);\n            // Set the text direction if the page has not defined one.\n            uppyRootElement.dir =\n                this.opts.direction || getTextDirection(uppyRootElement) || 'ltr';\n            this.onMount();\n            return this.el;\n        }\n        const targetPlugin = this.getTargetPlugin(target);\n        if (targetPlugin) {\n            this.uppy.log(`Installing ${callerPluginName} to ${targetPlugin.id}`);\n            this.parent = targetPlugin;\n            this.el = targetPlugin.addTarget(plugin);\n            this.onMount();\n            return this.el;\n        }\n        this.uppy.log(`Not installing ${callerPluginName}`);\n        let message = `Invalid target option given to ${callerPluginName}.`;\n        if (typeof target === 'function') {\n            message +=\n                ' The given target is not a Plugin class. ' +\n                    \"Please check that you're not specifying a React Component instead of a plugin. \" +\n                    'If you are using @uppy/* packages directly, make sure you have only 1 version of @uppy/core installed: ' +\n                    'run `npm ls @uppy/core` on the command line and verify that all the versions match and are deduped correctly.';\n        }\n        else {\n            message +=\n                'If you meant to target an HTML element, please make sure that the element exists. ' +\n                    'Check that the <script> tag initializing Uppy is right before the closing </body> tag at the end of the page. ' +\n                    '(see https://github.com/transloadit/uppy/issues/1042)\\n\\n' +\n                    'If you meant to target a plugin, please confirm that your `import` statements or `require` calls are correct.';\n        }\n        throw new Error(message);\n    }\n    /**\n     * Called when plugin is mounted, whether in DOM or into another plugin.\n     * Needed because sometimes plugins are mounted separately/after `install`,\n     * so this.el and this.parent might not be available in `install`.\n     * This is the case with @uppy/react plugins, for example.\n     */\n    render(state, container) {\n        throw new Error('Extend the render method to add your plugin to a DOM element');\n    }\n    update(state) {\n        if (this.el != null) {\n            this.#updateUI?.(state);\n        }\n    }\n    unmount() {\n        if (this.isTargetDOMEl) {\n            this.el?.remove();\n        }\n        this.onUnmount();\n    }\n    onMount() { }\n    onUnmount() { }\n}\nexport default UIPlugin;\n", "{\n  \"name\": \"@uppy/store-default\",\n  \"description\": \"The default simple object-based store for Uppy.\",\n  \"version\": \"4.3.2\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index.js\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\",\n    \"test\": \"vitest run --environment=jsdom --silent='passed-only'\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-store\"\n  ],\n  \"homepage\": \"https://uppy.io\",\n  \"bugs\": {\n    \"url\": \"https://github.com/transloadit/uppy/issues\"\n  },\n  \"devDependencies\": {\n    \"jsdom\": \"^26.1.0\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/transloadit/uppy.git\"\n  },\n  \"files\": [\n    \"src\",\n    \"lib\",\n    \"dist\",\n    \"CHANGELOG.md\"\n  ]\n}", "import packageJson from '../package.json' with { type: 'json' };\n/**\n * Default store that keeps state in a simple object.\n */\nclass DefaultStore {\n    static VERSION = packageJson.version;\n    state = {};\n    #callbacks = new Set();\n    getState() {\n        return this.state;\n    }\n    setState(patch) {\n        const prevState = { ...this.state };\n        const nextState = { ...this.state, ...patch };\n        this.state = nextState;\n        this.#publish(prevState, nextState, patch);\n    }\n    subscribe(listener) {\n        this.#callbacks.add(listener);\n        return () => {\n            this.#callbacks.delete(listener);\n        };\n    }\n    #publish(...args) {\n        this.#callbacks.forEach((listener) => {\n            listener(...args);\n        });\n    }\n}\nexport default DefaultStore;\n", "/**\n * Takes a full filename string and returns an object {name, extension}\n */\nexport default function getFileNameAndExtension(fullFileName) {\n    const lastDot = fullFileName.lastIndexOf('.');\n    // these count as no extension: \"no-dot\", \"trailing-dot.\"\n    if (lastDot === -1 || lastDot === fullFileName.length - 1) {\n        return {\n            name: fullFileName,\n            extension: undefined,\n        };\n    }\n    return {\n        name: fullFileName.slice(0, lastDot),\n        extension: fullFileName.slice(lastDot + 1),\n    };\n}\n", "// ___Why not add the mime-types package?\n//    It's 19.7kB gzipped, and we only need mime types for well-known extensions (for file previews).\n// ___Where to take new extensions from?\n//    https://github.com/jshttp/mime-db/blob/master/db.json\nexport default {\n    __proto__: null,\n    md: 'text/markdown',\n    markdown: 'text/markdown',\n    mp4: 'video/mp4',\n    mp3: 'audio/mp3',\n    svg: 'image/svg+xml',\n    jpg: 'image/jpeg',\n    png: 'image/png',\n    webp: 'image/webp',\n    gif: 'image/gif',\n    heic: 'image/heic',\n    heif: 'image/heif',\n    yaml: 'text/yaml',\n    yml: 'text/yaml',\n    csv: 'text/csv',\n    tsv: 'text/tab-separated-values',\n    tab: 'text/tab-separated-values',\n    avi: 'video/x-msvideo',\n    mks: 'video/x-matroska',\n    mkv: 'video/x-matroska',\n    mov: 'video/quicktime',\n    dicom: 'application/dicom',\n    doc: 'application/msword',\n    msg: 'application/vnd.ms-outlook',\n    docm: 'application/vnd.ms-word.document.macroenabled.12',\n    docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n    dot: 'application/msword',\n    dotm: 'application/vnd.ms-word.template.macroenabled.12',\n    dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n    xla: 'application/vnd.ms-excel',\n    xlam: 'application/vnd.ms-excel.addin.macroenabled.12',\n    xlc: 'application/vnd.ms-excel',\n    xlf: 'application/x-xliff+xml',\n    xlm: 'application/vnd.ms-excel',\n    xls: 'application/vnd.ms-excel',\n    xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n    xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',\n    xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n    xlt: 'application/vnd.ms-excel',\n    xltm: 'application/vnd.ms-excel.template.macroenabled.12',\n    xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n    xlw: 'application/vnd.ms-excel',\n    txt: 'text/plain',\n    text: 'text/plain',\n    conf: 'text/plain',\n    log: 'text/plain',\n    pdf: 'application/pdf',\n    zip: 'application/zip',\n    '7z': 'application/x-7z-compressed',\n    rar: 'application/x-rar-compressed',\n    tar: 'application/x-tar',\n    gz: 'application/gzip',\n    dmg: 'application/x-apple-diskimage',\n};\n", "import getFileNameAndExtension from './getFileNameAndExtension.js';\nimport mimeTypes from './mimeTypes.js';\nexport default function getFileType(file) {\n    if (file.type)\n        return file.type;\n    const fileExtension = file.name\n        ? getFileNameAndExtension(file.name).extension?.toLowerCase()\n        : null;\n    if (fileExtension && fileExtension in mimeTypes) {\n        // else, see if we can map extension to a mime type\n        return mimeTypes[fileExtension];\n    }\n    // if all fails, fall back to a generic byte stream type\n    return 'application/octet-stream';\n}\n", "import getFileType from './getFileType.js';\nfunction encodeCharacter(character) {\n    return character.charCodeAt(0).toString(32);\n}\nfunction encodeFilename(name) {\n    let suffix = '';\n    return (name.replace(/[^A-Z0-9]/gi, (character) => {\n        suffix += `-${encodeCharacter(character)}`;\n        return '/';\n    }) + suffix);\n}\n/**\n * Takes a file object and turns it into fileID, by converting file.name to lowercase,\n * removing extra characters and adding type, size and lastModified\n */\nexport default function generateFileID(file, instanceId) {\n    // It's tempting to do `[items].filter(Boolean).join('-')` here, but that\n    // is slower! simple string concatenation is fast\n    let id = instanceId || 'uppy';\n    if (typeof file.name === 'string') {\n        id += `-${encodeFilename(file.name.toLowerCase())}`;\n    }\n    if (file.type !== undefined) {\n        id += `-${file.type}`;\n    }\n    if (file.meta && typeof file.meta.relativePath === 'string') {\n        id += `-${encodeFilename(file.meta.relativePath.toLowerCase())}`;\n    }\n    if (file.data.size !== undefined) {\n        id += `-${file.data.size}`;\n    }\n    if (file.data.lastModified !== undefined) {\n        id += `-${file.data.lastModified}`;\n    }\n    return id;\n}\n// If the provider has a stable, unique ID, then we can use that to identify the file.\n// Then we don't have to generate our own ID, and we can add the same file many times if needed (different path)\nfunction hasFileStableId(file) {\n    if (!file.isRemote || !file.remote)\n        return false;\n    // These are the providers that it seems like have stable IDs for their files. The other's I haven't checked yet.\n    const stableIdProviders = new Set([\n        'box',\n        'dropbox',\n        'drive',\n        'facebook',\n        'unsplash',\n    ]);\n    return stableIdProviders.has(file.remote.provider);\n}\nexport function getSafeFileId(file, instanceId) {\n    if (hasFileStableId(file))\n        return file.id;\n    const fileType = getFileType(file);\n    return generateFileID({\n        ...file,\n        type: fileType,\n    }, instanceId);\n}\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n", "var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", "var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n", "var debounce = require('./debounce'),\n    isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nmodule.exports = throttle;\n", "/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n*   console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n*   console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n  var emitter = {}\n  var _fns = emitter._fns = {}\n\n  /**\n  * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`\n  * @name emit\n  * @param {String} event \u2013 the name of the event, with optional namespace\n  * @param {...*} data \u2013 up to 6 arguments that are passed to the event listener\n  * @example\n  * emitter.emit('example')\n  * emitter.emit('demo:test')\n  * emitter.emit('data', { example: true}, 'a string', 1)\n  */\n  emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {\n    var toEmit = getListeners(event)\n\n    if (toEmit.length) {\n      emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])\n    }\n  }\n\n  /**\n  * Create en event listener.\n  * @name on\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.on('example', function () {})\n  * emitter.on('demo', function () {})\n  */\n  emitter.on = function on (event, fn) {\n    if (!_fns[event]) {\n      _fns[event] = []\n    }\n\n    _fns[event].push(fn)\n  }\n\n  /**\n  * Create en event listener that fires once.\n  * @name once\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.once('example', function () {})\n  * emitter.once('demo', function () {})\n  */\n  emitter.once = function once (event, fn) {\n    function one () {\n      fn.apply(this, arguments)\n      emitter.off(event, one)\n    }\n    this.on(event, one)\n  }\n\n  /**\n  * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n  * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,\n  * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n  * @name off\n  * @param {String} event\n  * @param {Function} [fn] \u2013 the specific handler\n  * @example\n  * emitter.off('example')\n  * emitter.off('demo', function () {})\n  */\n  emitter.off = function off (event, fn) {\n    var keep = []\n\n    if (event && fn) {\n      var fns = this._fns[event]\n      var i = 0\n      var l = fns ? fns.length : 0\n\n      for (i; i < l; i++) {\n        if (fns[i] !== fn) {\n          keep.push(fns[i])\n        }\n      }\n    }\n\n    keep.length ? this._fns[event] = keep : delete this._fns[event]\n  }\n\n  function getListeners (e) {\n    var out = _fns[e] ? _fns[e] : []\n    var idx = e.indexOf(':')\n    var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]\n\n    var keys = Object.keys(_fns)\n    var i = 0\n    var l = keys.length\n\n    for (i; i < l; i++) {\n      var key = keys[i]\n      if (key === '*') {\n        out = out.concat(_fns[key])\n      }\n\n      if (args.length === 2 && args[0] === key) {\n        out = out.concat(_fns[key])\n        break\n      }\n    }\n\n    return out\n  }\n\n  function emitAll (e, fns, args) {\n    var i = 0\n    var l = fns.length\n\n    for (i; i < l; i++) {\n      if (!fns[i]) break\n      fns[i].event = e\n      fns[i].apply(fns[i], args)\n    }\n  }\n\n  return emitter\n}\n", "/* @ts-self-types=\"./index.d.ts\" */\nlet urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport let customAlphabet = (alphabet, defaultSize = 21) => {\n  return (size = defaultSize) => {\n    let id = ''\n    let i = size | 0\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\nexport let nanoid = (size = 21) => {\n  let id = ''\n  let i = size | 0\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\n", "{\n  \"name\": \"@uppy/core\",\n  \"description\": \"Core module for the extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:\",\n  \"version\": \"4.5.3\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index.js\",\n  \"style\": \"dist/style.min.css\",\n  \"type\": \"module\",\n  \"sideEffects\": [\n    \"*.css\"\n  ],\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"build:css\": \"sass --load-path=../../ src/style.scss dist/style.css && postcss dist/style.css -u cssnano -o dist/style.min.css\",\n    \"typecheck\": \"tsc --build\",\n    \"test\": \"vitest run --environment=jsdom --silent='passed-only'\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\"\n  ],\n  \"homepage\": \"https://uppy.io\",\n  \"bugs\": {\n    \"url\": \"https://github.com/transloadit/uppy/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/transloadit/uppy.git\"\n  },\n  \"files\": [\n    \"src\",\n    \"lib\",\n    \"dist\",\n    \"CHANGELOG.md\"\n  ],\n  \"dependencies\": {\n    \"@transloadit/prettier-bytes\": \"^0.3.4\",\n    \"@uppy/store-default\": \"^4.3.2\",\n    \"@uppy/utils\": \"^6.2.2\",\n    \"lodash\": \"^4.17.21\",\n    \"mime-match\": \"^1.0.2\",\n    \"namespace-emitter\": \"^2.0.1\",\n    \"nanoid\": \"^5.0.9\",\n    \"preact\": \"^10.5.13\"\n  },\n  \"devDependencies\": {\n    \"@types/deep-freeze\": \"^0\",\n    \"cssnano\": \"^7.0.7\",\n    \"deep-freeze\": \"^0.0.1\",\n    \"jsdom\": \"^26.1.0\",\n    \"postcss\": \"^8.5.6\",\n    \"postcss-cli\": \"^11.0.1\",\n    \"sass\": \"^1.89.2\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  }\n}", "export default function getFileName(fileType, fileDescriptor) {\n    if (fileDescriptor.name) {\n        return fileDescriptor.name;\n    }\n    if (fileType.split('/')[0] === 'image') {\n        return `${fileType.split('/')[0]}.${fileType.split('/')[1]}`;\n    }\n    return 'noname';\n}\n", "export default {\n    strings: {\n        addBulkFilesFailed: {\n            0: 'Failed to add %{smart_count} file due to an internal error',\n            1: 'Failed to add %{smart_count} files due to internal errors',\n        },\n        youCanOnlyUploadX: {\n            0: 'You can only upload %{smart_count} file',\n            1: 'You can only upload %{smart_count} files',\n        },\n        youHaveToAtLeastSelectX: {\n            0: 'You have to select at least %{smart_count} file',\n            1: 'You have to select at least %{smart_count} files',\n        },\n        aggregateExceedsSize: 'You selected %{size} of files, but maximum allowed size is %{sizeAllowed}',\n        exceedsSize: '%{file} exceeds maximum allowed size of %{size}',\n        missingRequiredMetaField: 'Missing required meta fields',\n        missingRequiredMetaFieldOnFile: 'Missing required meta fields in %{fileName}',\n        inferiorSize: 'This file is smaller than the allowed size of %{size}',\n        youCanOnlyUploadFileTypes: 'You can only upload: %{types}',\n        noMoreFilesAllowed: 'Cannot add more files',\n        noDuplicates: \"Cannot add the duplicate file '%{fileName}', it already exists\",\n        companionError: 'Connection with Companion failed',\n        authAborted: 'Authentication aborted',\n        companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',\n        failedToUpload: 'Failed to upload %{file}',\n        noInternetConnection: 'No Internet connection',\n        connectedToInternet: 'Connected to the Internet',\n        // Strings for remote providers\n        noFilesFound: 'You have no files or folders here',\n        noSearchResults: 'Unfortunately, there are no results for this search',\n        selectX: {\n            0: 'Select %{smart_count}',\n            1: 'Select %{smart_count}',\n        },\n        allFilesFromFolderNamed: 'All files from folder %{name}',\n        openFolderNamed: 'Open folder %{name}',\n        cancel: 'Cancel',\n        logOut: 'Log out',\n        logIn: 'Log in',\n        pickFiles: 'Pick files',\n        pickPhotos: 'Pick photos',\n        filter: 'Filter',\n        resetFilter: 'Reset filter',\n        loading: 'Loading...',\n        loadedXFiles: 'Loaded %{numFiles} files',\n        authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',\n        authenticateWith: 'Connect to %{pluginName}',\n        signInWithGoogle: 'Sign in with Google',\n        searchImages: 'Search for images',\n        enterTextToSearch: 'Enter text to search for images',\n        search: 'Search',\n        resetSearch: 'Reset search',\n        emptyFolderAdded: 'No files were added from empty folder',\n        addedNumFiles: 'Added %{numFiles} file(s)',\n        folderAlreadyAdded: 'The folder \"%{folder}\" was already added',\n        folderAdded: {\n            0: 'Added %{smart_count} file from %{folder}',\n            1: 'Added %{smart_count} files from %{folder}',\n        },\n        additionalRestrictionsFailed: '%{count} additional restrictions were not fulfilled',\n        unnamed: 'Unnamed',\n        pleaseWait: 'Please wait',\n    },\n};\n", "// Adapted from https://github.com/Flet/prettier-bytes/\n// Changing 1000 bytes to 1024, so we can keep uppercase KB vs kB\n// ISC License (c) Dan Flettre https://github.com/Flet/prettier-bytes/blob/master/LICENSE\nexport = function prettierBytes(input: number): string {\n  if (typeof input !== 'number' || Number.isNaN(input)) {\n    throw new TypeError(`Expected a number, got ${typeof input}`)\n  }\n\n  const neg = input < 0\n  let num = Math.abs(input)\n\n  if (neg) {\n    num = -num\n  }\n\n  if (num === 0) {\n    return '0 B'\n  }\n\n  const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n  const exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n  const value = Number(num / 1024 ** exponent)\n  const unit = units[exponent]\n\n  return `${value >= 10 || value % 1 === 0 ? Math.round(value) : value.toFixed(1)} ${unit}`\n}\n", "/* jshint node: true */\n'use strict';\n\n/**\n  # wildcard\n\n  Very simple wildcard matching, which is designed to provide the same\n  functionality that is found in the\n  [eve](https://github.com/adobe-webplatform/eve) eventing library.\n\n  ## Usage\n\n  It works with strings:\n\n  <<< examples/strings.js\n\n  Arrays:\n\n  <<< examples/arrays.js\n\n  Objects (matching against keys):\n\n  <<< examples/objects.js\n\n  While the library works in Node, if you are are looking for file-based\n  wildcard matching then you should have a look at:\n\n  <https://github.com/isaacs/node-glob>\n**/\n\nfunction WildcardMatcher(text, separator) {\n  this.text = text = text || '';\n  this.hasWild = ~text.indexOf('*');\n  this.separator = separator;\n  this.parts = text.split(separator);\n}\n\nWildcardMatcher.prototype.match = function(input) {\n  var matches = true;\n  var parts = this.parts;\n  var ii;\n  var partsCount = parts.length;\n  var testParts;\n\n  if (typeof input == 'string' || input instanceof String) {\n    if (!this.hasWild && this.text != input) {\n      matches = false;\n    } else {\n      testParts = (input || '').split(this.separator);\n      for (ii = 0; matches && ii < partsCount; ii++) {\n        if (parts[ii] === '*')  {\n          continue;\n        } else if (ii < testParts.length) {\n          matches = parts[ii] === testParts[ii];\n        } else {\n          matches = false;\n        }\n      }\n\n      // If matches, then return the component parts\n      matches = matches && testParts;\n    }\n  }\n  else if (typeof input.splice == 'function') {\n    matches = [];\n\n    for (ii = input.length; ii--; ) {\n      if (this.match(input[ii])) {\n        matches[matches.length] = input[ii];\n      }\n    }\n  }\n  else if (typeof input == 'object') {\n    matches = {};\n\n    for (var key in input) {\n      if (this.match(key)) {\n        matches[key] = input[key];\n      }\n    }\n  }\n\n  return matches;\n};\n\nmodule.exports = function(text, test, separator) {\n  var matcher = new WildcardMatcher(text, separator || /[\\/\\.]/);\n  if (typeof test != 'undefined') {\n    return matcher.match(test);\n  }\n\n  return matcher;\n};\n", "var wildcard = require('wildcard');\nvar reMimePartSplit = /[\\/\\+\\.]/;\n\n/**\n  # mime-match\n\n  A simple function to checker whether a target mime type matches a mime-type\n  pattern (e.g. image/jpeg matches image/jpeg OR image/*).\n\n  ## Example Usage\n\n  <<< example.js\n\n**/\nmodule.exports = function(target, pattern) {\n  function test(pattern) {\n    var result = wildcard(pattern, target, reMimePartSplit);\n\n    // ensure that we have a valid mime type (should have two parts)\n    return result && result.length >= 2;\n  }\n\n  return pattern ? test(pattern.split(';')[0]) : test;\n};\n", "import prettierBytes from '@transloadit/prettier-bytes';\n// @ts-ignore untyped\nimport match from 'mime-match';\nconst defaultOptions = {\n    maxFileSize: null,\n    minFileSize: null,\n    maxTotalFileSize: null,\n    maxNumberOfFiles: null,\n    minNumberOfFiles: null,\n    allowedFileTypes: null,\n    requiredMetaFields: [],\n};\nclass RestrictionError extends Error {\n    isUserFacing;\n    file;\n    constructor(message, opts) {\n        super(message);\n        this.isUserFacing = opts?.isUserFacing ?? true;\n        if (opts?.file) {\n            this.file = opts.file; // only some restriction errors are related to a particular file\n        }\n    }\n    isRestriction = true;\n}\nclass Restricter {\n    getI18n;\n    getOpts;\n    constructor(getOpts, getI18n) {\n        this.getI18n = getI18n;\n        this.getOpts = () => {\n            const opts = getOpts();\n            if (opts.restrictions?.allowedFileTypes != null &&\n                !Array.isArray(opts.restrictions.allowedFileTypes)) {\n                throw new TypeError('`restrictions.allowedFileTypes` must be an array');\n            }\n            return opts;\n        };\n    }\n    // Because these operations are slow, we cannot run them for every file (if we are adding multiple files)\n    validateAggregateRestrictions(existingFiles, addingFiles) {\n        const { maxTotalFileSize, maxNumberOfFiles } = this.getOpts().restrictions;\n        if (maxNumberOfFiles) {\n            const nonGhostFiles = existingFiles.filter((f) => !f.isGhost);\n            if (nonGhostFiles.length + addingFiles.length > maxNumberOfFiles) {\n                throw new RestrictionError(`${this.getI18n()('youCanOnlyUploadX', {\n                    smart_count: maxNumberOfFiles,\n                })}`);\n            }\n        }\n        if (maxTotalFileSize) {\n            const totalFilesSize = [...existingFiles, ...addingFiles].reduce((total, f) => total + (f.size ?? 0), 0);\n            if (totalFilesSize > maxTotalFileSize) {\n                throw new RestrictionError(this.getI18n()('aggregateExceedsSize', {\n                    sizeAllowed: prettierBytes(maxTotalFileSize),\n                    size: prettierBytes(totalFilesSize),\n                }));\n            }\n        }\n    }\n    validateSingleFile(file) {\n        const { maxFileSize, minFileSize, allowedFileTypes } = this.getOpts().restrictions;\n        if (allowedFileTypes) {\n            const isCorrectFileType = allowedFileTypes.some((type) => {\n                // check if this is a mime-type\n                if (type.includes('/')) {\n                    if (!file.type)\n                        return false;\n                    return match(file.type.replace(/;.*?$/, ''), type);\n                }\n                // otherwise this is likely an extension\n                if (type[0] === '.' && file.extension) {\n                    return file.extension.toLowerCase() === type.slice(1).toLowerCase();\n                }\n                return false;\n            });\n            if (!isCorrectFileType) {\n                const allowedFileTypesString = allowedFileTypes.join(', ');\n                throw new RestrictionError(this.getI18n()('youCanOnlyUploadFileTypes', {\n                    types: allowedFileTypesString,\n                }), { file });\n            }\n        }\n        // We can't check maxFileSize if the size is unknown.\n        if (maxFileSize && file.size != null && file.size > maxFileSize) {\n            throw new RestrictionError(this.getI18n()('exceedsSize', {\n                size: prettierBytes(maxFileSize),\n                file: file.name ?? this.getI18n()('unnamed'),\n            }), { file });\n        }\n        // We can't check minFileSize if the size is unknown.\n        if (minFileSize && file.size != null && file.size < minFileSize) {\n            throw new RestrictionError(this.getI18n()('inferiorSize', {\n                size: prettierBytes(minFileSize),\n            }), { file });\n        }\n    }\n    validate(existingFiles, addingFiles) {\n        addingFiles.forEach((addingFile) => {\n            this.validateSingleFile(addingFile);\n        });\n        this.validateAggregateRestrictions(existingFiles, addingFiles);\n    }\n    validateMinNumberOfFiles(files) {\n        const { minNumberOfFiles } = this.getOpts().restrictions;\n        if (minNumberOfFiles && Object.keys(files).length < minNumberOfFiles) {\n            throw new RestrictionError(this.getI18n()('youHaveToAtLeastSelectX', {\n                smart_count: minNumberOfFiles,\n            }));\n        }\n    }\n    getMissingRequiredMetaFields(file) {\n        const error = new RestrictionError(this.getI18n()('missingRequiredMetaFieldOnFile', {\n            fileName: file.name ?? this.getI18n()('unnamed'),\n        }));\n        const { requiredMetaFields } = this.getOpts().restrictions;\n        const missingFields = [];\n        for (const field of requiredMetaFields) {\n            if (!Object.hasOwn(file.meta, field) || file.meta[field] === '') {\n                missingFields.push(field);\n            }\n        }\n        return { missingFields, error };\n    }\n}\nexport { Restricter, defaultOptions, RestrictionError };\n", "// Edge 15.x does not fire 'progress' events on uploads.\n// See https://github.com/transloadit/uppy/issues/945\n// And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/\nexport default function supportsUploadProgress(userAgent) {\n    // Allow passing in userAgent for tests\n    if (userAgent == null && typeof navigator !== 'undefined') {\n        userAgent = navigator.userAgent;\n    }\n    // Assume it works because basically everything supports progress events.\n    if (!userAgent)\n        return true;\n    const m = /Edge\\/(\\d+\\.\\d+)/.exec(userAgent);\n    if (!m)\n        return true;\n    const edgeVersion = m[1];\n    const version = edgeVersion.split('.', 2);\n    const major = parseInt(version[0], 10);\n    const minor = parseInt(version[1], 10);\n    // Worked before:\n    // Edge 40.15063.0.0\n    // Microsoft EdgeHTML 15.15063\n    if (major < 15 || (major === 15 && minor < 15063)) {\n        return true;\n    }\n    // Fixed in:\n    // Microsoft EdgeHTML 18.18218\n    if (major > 18 || (major === 18 && minor >= 18218)) {\n        return true;\n    }\n    // other versions don't work.\n    return false;\n}\n", "/* global AggregateError */\nimport DefaultStore, {} from '@uppy/store-default';\nimport { getSafeFileId } from '@uppy/utils/lib/generateFileID';\nimport getFileNameAndExtension from '@uppy/utils/lib/getFileNameAndExtension';\nimport getFileType from '@uppy/utils/lib/getFileType';\nimport Translator from '@uppy/utils/lib/Translator';\nimport throttle from 'lodash/throttle.js';\n// @ts-ignore untyped\nimport ee from 'namespace-emitter';\nimport { nanoid } from 'nanoid/non-secure';\nimport packageJson from '../package.json' with { type: 'json' };\nimport getFileName from './getFileName.js';\nimport locale from './locale.js';\nimport { debugLogger, justErrorsLogger } from './loggers.js';\nimport { defaultOptions as defaultRestrictionOptions, Restricter, RestrictionError, } from './Restricter.js';\nimport supportsUploadProgress from './supportsUploadProgress.js';\nconst defaultUploadState = {\n    totalProgress: 0,\n    allowNewUpload: true,\n    error: null,\n    recoveredState: null,\n};\n/**\n * Uppy Core module.\n * Manages plugins, state updates, acts as an event bus,\n * adds/removes files and metadata.\n */\nexport class Uppy {\n    static VERSION = packageJson.version;\n    #plugins = Object.create(null);\n    #restricter;\n    #storeUnsubscribe;\n    #emitter = ee();\n    #preProcessors = new Set();\n    #uploaders = new Set();\n    #postProcessors = new Set();\n    defaultLocale;\n    locale;\n    // The user optionally passes in options, but we set defaults for missing options.\n    // We consider all options present after the contructor has run.\n    opts;\n    store;\n    // Warning: do not use this from a plugin, as it will cause the plugins' translations to be missing\n    i18n;\n    i18nArray;\n    scheduledAutoProceed = null;\n    wasOffline = false;\n    /**\n     * Instantiate Uppy\n     */\n    constructor(opts) {\n        this.defaultLocale = locale;\n        const defaultOptions = {\n            id: 'uppy',\n            autoProceed: false,\n            allowMultipleUploadBatches: true,\n            debug: false,\n            restrictions: defaultRestrictionOptions,\n            meta: {},\n            onBeforeFileAdded: (file, files) => !Object.hasOwn(files, file.id),\n            onBeforeUpload: (files) => files,\n            store: new DefaultStore(),\n            logger: justErrorsLogger,\n            infoTimeout: 5000,\n        };\n        const merged = { ...defaultOptions, ...opts };\n        // Merge default options with the ones set by user,\n        // making sure to merge restrictions too\n        this.opts = {\n            ...merged,\n            restrictions: {\n                ...defaultOptions.restrictions,\n                ...opts?.restrictions,\n            },\n        };\n        // Support debug: true for backwards-compatability, unless logger is set in opts\n        // opts instead of this.opts to avoid comparing objects \u2014 we set logger: justErrorsLogger in defaultOptions\n        if (opts?.logger && opts.debug) {\n            this.log('You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.', 'warning');\n        }\n        else if (opts?.debug) {\n            this.opts.logger = debugLogger;\n        }\n        this.log(`Using Core v${Uppy.VERSION}`);\n        this.i18nInit();\n        this.store = this.opts.store;\n        this.setState({\n            ...defaultUploadState,\n            plugins: {},\n            files: {},\n            currentUploads: {},\n            capabilities: {\n                uploadProgress: supportsUploadProgress(),\n                individualCancellation: true,\n                resumableUploads: false,\n            },\n            meta: { ...this.opts.meta },\n            info: [],\n        });\n        this.#restricter = new Restricter(() => this.opts, () => this.i18n);\n        this.#storeUnsubscribe = this.store.subscribe((prevState, nextState, patch) => {\n            this.emit('state-update', prevState, nextState, patch);\n            this.updateAll(nextState);\n        });\n        // Exposing uppy object on window for debugging and testing\n        if (this.opts.debug && typeof window !== 'undefined') {\n            // @ts-ignore Mutating the global object for debug purposes\n            window[this.opts.id] = this;\n        }\n        this.#addListeners();\n    }\n    emit(event, ...args) {\n        this.#emitter.emit(event, ...args);\n    }\n    on(event, callback) {\n        this.#emitter.on(event, callback);\n        return this;\n    }\n    once(event, callback) {\n        this.#emitter.once(event, callback);\n        return this;\n    }\n    off(event, callback) {\n        this.#emitter.off(event, callback);\n        return this;\n    }\n    /**\n     * Iterate on all plugins and run `update` on them.\n     * Called each time state changes.\n     *\n     */\n    updateAll(state) {\n        this.iteratePlugins((plugin) => {\n            plugin.update(state);\n        });\n    }\n    /**\n     * Updates state with a patch\n     */\n    setState(patch) {\n        this.store.setState(patch);\n    }\n    /**\n     * Returns current state.\n     */\n    getState() {\n        return this.store.getState();\n    }\n    patchFilesState(filesWithNewState) {\n        const existingFilesState = this.getState().files;\n        this.setState({\n            files: {\n                ...existingFilesState,\n                ...Object.fromEntries(Object.entries(filesWithNewState).map(([fileID, newFileState]) => [\n                    fileID,\n                    {\n                        ...existingFilesState[fileID],\n                        ...newFileState,\n                    },\n                ])),\n            },\n        });\n    }\n    /**\n     * Shorthand to set state for a specific file.\n     */\n    setFileState(fileID, state) {\n        if (!this.getState().files[fileID]) {\n            throw new Error(`Can\u2019t set state for ${fileID} (the file could have been removed)`);\n        }\n        this.patchFilesState({ [fileID]: state });\n    }\n    i18nInit() {\n        const onMissingKey = (key) => this.log(`Missing i18n string: ${key}`, 'error');\n        const translator = new Translator([this.defaultLocale, this.opts.locale], {\n            onMissingKey,\n        });\n        this.i18n = translator.translate.bind(translator);\n        this.i18nArray = translator.translateArray.bind(translator);\n        this.locale = translator.locale;\n    }\n    setOptions(newOpts) {\n        this.opts = {\n            ...this.opts,\n            ...newOpts,\n            restrictions: {\n                ...this.opts.restrictions,\n                ...newOpts?.restrictions,\n            },\n        };\n        if (newOpts.meta) {\n            this.setMeta(newOpts.meta);\n        }\n        this.i18nInit();\n        if (newOpts.locale) {\n            this.iteratePlugins((plugin) => {\n                plugin.setOptions(newOpts);\n            });\n        }\n        // Note: this is not the preact `setState`, it's an internal function that has the same name.\n        this.setState(undefined); // so that UI re-renders with new options\n    }\n    resetProgress() {\n        const defaultProgress = {\n            percentage: 0,\n            bytesUploaded: false,\n            uploadComplete: false,\n            uploadStarted: null,\n        };\n        const files = { ...this.getState().files };\n        const updatedFiles = Object.create(null);\n        Object.keys(files).forEach((fileID) => {\n            updatedFiles[fileID] = {\n                ...files[fileID],\n                progress: {\n                    ...files[fileID].progress,\n                    ...defaultProgress,\n                },\n                // @ts-expect-error these typed are inserted\n                // into the namespace in their respective packages\n                // but core isn't ware of those\n                tus: undefined,\n                transloadit: undefined,\n            };\n        });\n        this.setState({ files: updatedFiles, ...defaultUploadState });\n    }\n    clear() {\n        const { capabilities, currentUploads } = this.getState();\n        if (Object.keys(currentUploads).length > 0 &&\n            !capabilities.individualCancellation) {\n            throw new Error('The installed uploader plugin does not allow removing files during an upload.');\n        }\n        this.setState({ ...defaultUploadState, files: {} });\n    }\n    addPreProcessor(fn) {\n        this.#preProcessors.add(fn);\n    }\n    removePreProcessor(fn) {\n        return this.#preProcessors.delete(fn);\n    }\n    addPostProcessor(fn) {\n        this.#postProcessors.add(fn);\n    }\n    removePostProcessor(fn) {\n        return this.#postProcessors.delete(fn);\n    }\n    addUploader(fn) {\n        this.#uploaders.add(fn);\n    }\n    removeUploader(fn) {\n        return this.#uploaders.delete(fn);\n    }\n    setMeta(data) {\n        const updatedMeta = { ...this.getState().meta, ...data };\n        const updatedFiles = { ...this.getState().files };\n        Object.keys(updatedFiles).forEach((fileID) => {\n            updatedFiles[fileID] = {\n                ...updatedFiles[fileID],\n                meta: { ...updatedFiles[fileID].meta, ...data },\n            };\n        });\n        this.log('Adding metadata:');\n        this.log(data);\n        this.setState({\n            meta: updatedMeta,\n            files: updatedFiles,\n        });\n    }\n    setFileMeta(fileID, data) {\n        const updatedFiles = { ...this.getState().files };\n        if (!updatedFiles[fileID]) {\n            this.log(`Was trying to set metadata for a file that has been removed: ${fileID}`);\n            return;\n        }\n        const newMeta = { ...updatedFiles[fileID].meta, ...data };\n        updatedFiles[fileID] = { ...updatedFiles[fileID], meta: newMeta };\n        this.setState({ files: updatedFiles });\n    }\n    /**\n     * Get a file object.\n     */\n    getFile(fileID) {\n        return this.getState().files[fileID];\n    }\n    /**\n     * Get all files in an array.\n     */\n    getFiles() {\n        const { files } = this.getState();\n        return Object.values(files);\n    }\n    getFilesByIds(ids) {\n        return ids.map((id) => this.getFile(id));\n    }\n    getObjectOfFilesPerState() {\n        const { files: filesObject, totalProgress, error } = this.getState();\n        const files = Object.values(filesObject);\n        const inProgressFiles = [];\n        const newFiles = [];\n        const startedFiles = [];\n        const uploadStartedFiles = [];\n        const pausedFiles = [];\n        const completeFiles = [];\n        const erroredFiles = [];\n        const inProgressNotPausedFiles = [];\n        const processingFiles = [];\n        for (const file of files) {\n            const { progress } = file;\n            if (!progress.uploadComplete && progress.uploadStarted) {\n                inProgressFiles.push(file);\n                if (!file.isPaused) {\n                    inProgressNotPausedFiles.push(file);\n                }\n            }\n            if (!progress.uploadStarted) {\n                newFiles.push(file);\n            }\n            if (progress.uploadStarted ||\n                progress.preprocess ||\n                progress.postprocess) {\n                startedFiles.push(file);\n            }\n            if (progress.uploadStarted) {\n                uploadStartedFiles.push(file);\n            }\n            if (file.isPaused) {\n                pausedFiles.push(file);\n            }\n            if (progress.uploadComplete) {\n                completeFiles.push(file);\n            }\n            if (file.error) {\n                erroredFiles.push(file);\n            }\n            if (progress.preprocess || progress.postprocess) {\n                processingFiles.push(file);\n            }\n        }\n        return {\n            newFiles,\n            startedFiles,\n            uploadStartedFiles,\n            pausedFiles,\n            completeFiles,\n            erroredFiles,\n            inProgressFiles,\n            inProgressNotPausedFiles,\n            processingFiles,\n            isUploadStarted: uploadStartedFiles.length > 0,\n            isAllComplete: totalProgress === 100 &&\n                completeFiles.length === files.length &&\n                processingFiles.length === 0,\n            isAllErrored: !!error && erroredFiles.length === files.length,\n            isAllPaused: inProgressFiles.length !== 0 &&\n                pausedFiles.length === inProgressFiles.length,\n            isUploadInProgress: inProgressFiles.length > 0,\n            isSomeGhost: files.some((file) => file.isGhost),\n        };\n    }\n    #informAndEmit(errors) {\n        for (const error of errors) {\n            if (error.isRestriction) {\n                this.emit('restriction-failed', error.file, error);\n            }\n            else {\n                this.emit('error', error, error.file);\n            }\n            this.log(error, 'warning');\n        }\n        const userFacingErrors = errors.filter((error) => error.isUserFacing);\n        // don't flood the user: only show the first 4 toasts\n        const maxNumToShow = 4;\n        const firstErrors = userFacingErrors.slice(0, maxNumToShow);\n        const additionalErrors = userFacingErrors.slice(maxNumToShow);\n        firstErrors.forEach(({ message, details = '' }) => {\n            this.info({ message, details }, 'error', this.opts.infoTimeout);\n        });\n        if (additionalErrors.length > 0) {\n            this.info({\n                message: this.i18n('additionalRestrictionsFailed', {\n                    count: additionalErrors.length,\n                }),\n            });\n        }\n    }\n    validateRestrictions(file, files = this.getFiles()) {\n        try {\n            this.#restricter.validate(files, [file]);\n        }\n        catch (err) {\n            return err;\n        }\n        return null;\n    }\n    validateSingleFile(file) {\n        try {\n            this.#restricter.validateSingleFile(file);\n        }\n        catch (err) {\n            return err.message;\n        }\n        return null;\n    }\n    validateAggregateRestrictions(files) {\n        const existingFiles = this.getFiles();\n        try {\n            this.#restricter.validateAggregateRestrictions(existingFiles, files);\n        }\n        catch (err) {\n            return err.message;\n        }\n        return null;\n    }\n    #checkRequiredMetaFieldsOnFile(file) {\n        const { missingFields, error } = this.#restricter.getMissingRequiredMetaFields(file);\n        if (missingFields.length > 0) {\n            this.setFileState(file.id, {\n                missingRequiredMetaFields: missingFields,\n                error: error.message,\n            });\n            this.log(error.message);\n            this.emit('restriction-failed', file, error);\n            return false;\n        }\n        if (missingFields.length === 0 && file.missingRequiredMetaFields) {\n            this.setFileState(file.id, {\n                missingRequiredMetaFields: [],\n            });\n        }\n        return true;\n    }\n    #checkRequiredMetaFields(files) {\n        let success = true;\n        for (const file of Object.values(files)) {\n            if (!this.#checkRequiredMetaFieldsOnFile(file)) {\n                success = false;\n            }\n        }\n        return success;\n    }\n    #assertNewUploadAllowed(file) {\n        const { allowNewUpload } = this.getState();\n        if (allowNewUpload === false) {\n            const error = new RestrictionError(this.i18n('noMoreFilesAllowed'), {\n                file,\n            });\n            this.#informAndEmit([error]);\n            throw error;\n        }\n    }\n    checkIfFileAlreadyExists(fileID) {\n        const { files } = this.getState();\n        if (files[fileID] && !files[fileID].isGhost) {\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Create a file state object based on user-provided `addFile()` options.\n     */\n    #transformFile(fileDescriptorOrFile) {\n        // Uppy expects files in { name, type, size, data } format.\n        // If the actual File object is passed from input[type=file] or drag-drop,\n        // we normalize it to match Uppy file object\n        const file = (fileDescriptorOrFile instanceof File\n            ? {\n                name: fileDescriptorOrFile.name,\n                type: fileDescriptorOrFile.type,\n                size: fileDescriptorOrFile.size,\n                data: fileDescriptorOrFile,\n            }\n            : fileDescriptorOrFile);\n        const fileType = getFileType(file);\n        const fileName = getFileName(fileType, file);\n        const fileExtension = getFileNameAndExtension(fileName).extension;\n        const id = getSafeFileId(file, this.getID());\n        const meta = file.meta || {};\n        meta.name = fileName;\n        meta.type = fileType;\n        // `null` means the size is unknown.\n        const size = Number.isFinite(file.data.size)\n            ? file.data.size\n            : null;\n        return {\n            source: file.source || '',\n            id,\n            name: fileName,\n            extension: fileExtension || '',\n            meta: {\n                ...this.getState().meta,\n                ...meta,\n            },\n            type: fileType,\n            data: file.data,\n            progress: {\n                percentage: 0,\n                bytesUploaded: false,\n                bytesTotal: size,\n                uploadComplete: false,\n                uploadStarted: null,\n            },\n            size,\n            isGhost: false,\n            isRemote: file.isRemote || false,\n            remote: file.remote,\n            preview: file.preview,\n        };\n    }\n    // Schedule an upload if `autoProceed` is enabled.\n    #startIfAutoProceed() {\n        if (this.opts.autoProceed && !this.scheduledAutoProceed) {\n            this.scheduledAutoProceed = setTimeout(() => {\n                this.scheduledAutoProceed = null;\n                this.upload().catch((err) => {\n                    if (!err.isRestriction) {\n                        this.log(err.stack || err.message || err);\n                    }\n                });\n            }, 4);\n        }\n    }\n    #checkAndUpdateFileState(filesToAdd) {\n        let { files: existingFiles } = this.getState();\n        // create a copy of the files object only once\n        let nextFilesState = { ...existingFiles };\n        const validFilesToAdd = [];\n        const errors = [];\n        for (const fileToAdd of filesToAdd) {\n            try {\n                let newFile = this.#transformFile(fileToAdd);\n                // If a file has been recovered (Golden Retriever), but we were unable to recover its data (probably too large),\n                // users are asked to re-select these half-recovered files and then this method will be called again.\n                // In order to keep the progress, meta and everything else, we keep the existing file,\n                // but we replace `data`, and we remove `isGhost`, because the file is no longer a ghost now\n                const isGhost = existingFiles[newFile.id]?.isGhost;\n                if (isGhost) {\n                    const existingFileState = existingFiles[newFile.id];\n                    newFile = {\n                        ...existingFileState,\n                        isGhost: false,\n                        data: fileToAdd.data,\n                    };\n                    this.log(`Replaced the blob in the restored ghost file: ${newFile.name}, ${newFile.id}`);\n                }\n                const onBeforeFileAddedResult = this.opts.onBeforeFileAdded(newFile, nextFilesState);\n                // update state after onBeforeFileAdded\n                existingFiles = this.getState().files;\n                nextFilesState = { ...existingFiles, ...nextFilesState };\n                if (!onBeforeFileAddedResult &&\n                    this.checkIfFileAlreadyExists(newFile.id)) {\n                    throw new RestrictionError(this.i18n('noDuplicates', {\n                        fileName: newFile.name ?? this.i18n('unnamed'),\n                    }), { file: fileToAdd });\n                }\n                // Pass through reselected files from Golden Retriever\n                if (onBeforeFileAddedResult === false && !isGhost) {\n                    // Don\u2019t show UI info for this error, as it should be done by the developer\n                    throw new RestrictionError('Cannot add the file because onBeforeFileAdded returned false.', { isUserFacing: false, file: fileToAdd });\n                }\n                else if (typeof onBeforeFileAddedResult === 'object' &&\n                    onBeforeFileAddedResult !== null) {\n                    newFile = onBeforeFileAddedResult;\n                }\n                this.#restricter.validateSingleFile(newFile);\n                // need to add it to the new local state immediately, so we can use the state to validate the next files too\n                nextFilesState[newFile.id] = newFile;\n                validFilesToAdd.push(newFile);\n            }\n            catch (err) {\n                errors.push(err);\n            }\n        }\n        try {\n            // need to run this separately because it's much more slow, so if we run it inside the for-loop it will be very slow\n            // when many files are added\n            this.#restricter.validateAggregateRestrictions(Object.values(existingFiles), validFilesToAdd);\n        }\n        catch (err) {\n            errors.push(err);\n            // If we have any aggregate error, don't allow adding this batch\n            return {\n                nextFilesState: existingFiles,\n                validFilesToAdd: [],\n                errors,\n            };\n        }\n        return {\n            nextFilesState,\n            validFilesToAdd,\n            errors,\n        };\n    }\n    /**\n     * Add a new file to `state.files`. This will run `onBeforeFileAdded`,\n     * try to guess file type in a clever way, check file against restrictions,\n     * and start an upload if `autoProceed === true`.\n     */\n    addFile(file) {\n        this.#assertNewUploadAllowed(file);\n        const { nextFilesState, validFilesToAdd, errors } = this.#checkAndUpdateFileState([file]);\n        const restrictionErrors = errors.filter((error) => error.isRestriction);\n        this.#informAndEmit(restrictionErrors);\n        if (errors.length > 0)\n            throw errors[0];\n        this.setState({ files: nextFilesState });\n        const [firstValidFileToAdd] = validFilesToAdd;\n        this.emit('file-added', firstValidFileToAdd);\n        this.emit('files-added', validFilesToAdd);\n        this.log(`Added file: ${firstValidFileToAdd.name}, ${firstValidFileToAdd.id}, mime type: ${firstValidFileToAdd.type}`);\n        this.#startIfAutoProceed();\n        return firstValidFileToAdd.id;\n    }\n    /**\n     * Add multiple files to `state.files`. See the `addFile()` documentation.\n     *\n     * If an error occurs while adding a file, it is logged and the user is notified.\n     * This is good for UI plugins, but not for programmatic use.\n     * Programmatic users should usually still use `addFile()` on individual files.\n     */\n    addFiles(fileDescriptors) {\n        this.#assertNewUploadAllowed();\n        const { nextFilesState, validFilesToAdd, errors } = this.#checkAndUpdateFileState(fileDescriptors);\n        const restrictionErrors = errors.filter((error) => error.isRestriction);\n        this.#informAndEmit(restrictionErrors);\n        const nonRestrictionErrors = errors.filter((error) => !error.isRestriction);\n        if (nonRestrictionErrors.length > 0) {\n            let message = 'Multiple errors occurred while adding files:\\n';\n            nonRestrictionErrors.forEach((subError) => {\n                message += `\\n * ${subError.message}`;\n            });\n            this.info({\n                message: this.i18n('addBulkFilesFailed', {\n                    smart_count: nonRestrictionErrors.length,\n                }),\n                details: message,\n            }, 'error', this.opts.infoTimeout);\n            if (typeof AggregateError === 'function') {\n                throw new AggregateError(nonRestrictionErrors, message);\n            }\n            else {\n                const err = new Error(message);\n                // @ts-expect-error fallback when AggregateError is not available\n                err.errors = nonRestrictionErrors;\n                throw err;\n            }\n        }\n        // OK, we haven't thrown an error, we can start updating state and emitting events now:\n        this.setState({ files: nextFilesState });\n        validFilesToAdd.forEach((file) => {\n            this.emit('file-added', file);\n        });\n        this.emit('files-added', validFilesToAdd);\n        if (validFilesToAdd.length > 5) {\n            this.log(`Added batch of ${validFilesToAdd.length} files`);\n        }\n        else {\n            Object.values(validFilesToAdd).forEach((file) => {\n                this.log(`Added file: ${file.name}\\n id: ${file.id}\\n type: ${file.type}`);\n            });\n        }\n        if (validFilesToAdd.length > 0) {\n            this.#startIfAutoProceed();\n        }\n    }\n    removeFiles(fileIDs) {\n        const { files, currentUploads } = this.getState();\n        const updatedFiles = { ...files };\n        const updatedUploads = { ...currentUploads };\n        const removedFiles = Object.create(null);\n        fileIDs.forEach((fileID) => {\n            if (files[fileID]) {\n                removedFiles[fileID] = files[fileID];\n                delete updatedFiles[fileID];\n            }\n        });\n        // Remove files from the `fileIDs` list in each upload.\n        function fileIsNotRemoved(uploadFileID) {\n            return removedFiles[uploadFileID] === undefined;\n        }\n        Object.keys(updatedUploads).forEach((uploadID) => {\n            const newFileIDs = currentUploads[uploadID].fileIDs.filter(fileIsNotRemoved);\n            // Remove the upload if no files are associated with it anymore.\n            if (newFileIDs.length === 0) {\n                delete updatedUploads[uploadID];\n                return;\n            }\n            const { capabilities } = this.getState();\n            if (newFileIDs.length !== currentUploads[uploadID].fileIDs.length &&\n                !capabilities.individualCancellation) {\n                throw new Error('The installed uploader plugin does not allow removing files during an upload.');\n            }\n            updatedUploads[uploadID] = {\n                ...currentUploads[uploadID],\n                fileIDs: newFileIDs,\n            };\n        });\n        const stateUpdate = {\n            currentUploads: updatedUploads,\n            files: updatedFiles,\n        };\n        // If all files were removed - allow new uploads,\n        // and clear recoveredState\n        if (Object.keys(updatedFiles).length === 0) {\n            stateUpdate.allowNewUpload = true;\n            stateUpdate.error = null;\n            stateUpdate.recoveredState = null;\n        }\n        this.setState(stateUpdate);\n        this.#updateTotalProgressThrottled();\n        const removedFileIDs = Object.keys(removedFiles);\n        removedFileIDs.forEach((fileID) => {\n            this.emit('file-removed', removedFiles[fileID]);\n        });\n        if (removedFileIDs.length > 5) {\n            this.log(`Removed ${removedFileIDs.length} files`);\n        }\n        else {\n            this.log(`Removed files: ${removedFileIDs.join(', ')}`);\n        }\n    }\n    removeFile(fileID) {\n        this.removeFiles([fileID]);\n    }\n    pauseResume(fileID) {\n        if (!this.getState().capabilities.resumableUploads ||\n            this.getFile(fileID).progress.uploadComplete) {\n            return undefined;\n        }\n        const file = this.getFile(fileID);\n        const wasPaused = file.isPaused || false;\n        const isPaused = !wasPaused;\n        this.setFileState(fileID, {\n            isPaused,\n        });\n        this.emit('upload-pause', file, isPaused);\n        return isPaused;\n    }\n    pauseAll() {\n        const updatedFiles = { ...this.getState().files };\n        const inProgressUpdatedFiles = Object.keys(updatedFiles).filter((file) => {\n            return (!updatedFiles[file].progress.uploadComplete &&\n                updatedFiles[file].progress.uploadStarted);\n        });\n        inProgressUpdatedFiles.forEach((file) => {\n            const updatedFile = { ...updatedFiles[file], isPaused: true };\n            updatedFiles[file] = updatedFile;\n        });\n        this.setState({ files: updatedFiles });\n        this.emit('pause-all');\n    }\n    resumeAll() {\n        const updatedFiles = { ...this.getState().files };\n        const inProgressUpdatedFiles = Object.keys(updatedFiles).filter((file) => {\n            return (!updatedFiles[file].progress.uploadComplete &&\n                updatedFiles[file].progress.uploadStarted);\n        });\n        inProgressUpdatedFiles.forEach((file) => {\n            const updatedFile = {\n                ...updatedFiles[file],\n                isPaused: false,\n                error: null,\n            };\n            updatedFiles[file] = updatedFile;\n        });\n        this.setState({ files: updatedFiles });\n        this.emit('resume-all');\n    }\n    #getFilesToRetry() {\n        const { files } = this.getState();\n        return Object.keys(files).filter((fileId) => {\n            const file = files[fileId];\n            // Only retry files that have errors AND don't have missing required metadata\n            return (file.error &&\n                (!file.missingRequiredMetaFields ||\n                    file.missingRequiredMetaFields.length === 0));\n        });\n    }\n    async #doRetryAll() {\n        const filesToRetry = this.#getFilesToRetry();\n        const updatedFiles = { ...this.getState().files };\n        filesToRetry.forEach((fileID) => {\n            updatedFiles[fileID] = {\n                ...updatedFiles[fileID],\n                isPaused: false,\n                error: null,\n            };\n        });\n        this.setState({\n            files: updatedFiles,\n            error: null,\n        });\n        this.emit('retry-all', this.getFilesByIds(filesToRetry));\n        if (filesToRetry.length === 0) {\n            return {\n                successful: [],\n                failed: [],\n            };\n        }\n        const uploadID = this.#createUpload(filesToRetry, {\n            forceAllowNewUpload: true, // create new upload even if allowNewUpload: false\n        });\n        return this.#runUpload(uploadID);\n    }\n    async retryAll() {\n        const result = await this.#doRetryAll();\n        this.emit('complete', result);\n        return result;\n    }\n    cancelAll() {\n        this.emit('cancel-all');\n        const { files } = this.getState();\n        const fileIDs = Object.keys(files);\n        if (fileIDs.length) {\n            this.removeFiles(fileIDs);\n        }\n        this.setState(defaultUploadState);\n    }\n    retryUpload(fileID) {\n        this.setFileState(fileID, {\n            error: null,\n            isPaused: false,\n        });\n        this.emit('upload-retry', this.getFile(fileID));\n        const uploadID = this.#createUpload([fileID], {\n            forceAllowNewUpload: true, // create new upload even if allowNewUpload: false\n        });\n        return this.#runUpload(uploadID);\n    }\n    logout() {\n        this.iteratePlugins((plugin) => {\n            ;\n            plugin.provider?.logout?.();\n        });\n    }\n    #handleUploadProgress = (file, progress) => {\n        const fileInState = file ? this.getFile(file.id) : undefined;\n        if (file == null || !fileInState) {\n            this.log(`Not setting progress for a file that has been removed: ${file?.id}`);\n            return;\n        }\n        if (fileInState.progress.percentage === 100) {\n            this.log(`Not setting progress for a file that has been already uploaded: ${file.id}`);\n            return;\n        }\n        const newProgress = {\n            bytesTotal: progress.bytesTotal,\n            // bytesTotal may be null or zero; in that case we can't divide by it\n            percentage: progress.bytesTotal != null &&\n                Number.isFinite(progress.bytesTotal) &&\n                progress.bytesTotal > 0\n                ? Math.round((progress.bytesUploaded / progress.bytesTotal) * 100)\n                : undefined,\n        };\n        if (fileInState.progress.uploadStarted != null) {\n            this.setFileState(file.id, {\n                progress: {\n                    ...fileInState.progress,\n                    ...newProgress,\n                    bytesUploaded: progress.bytesUploaded,\n                },\n            });\n        }\n        else {\n            this.setFileState(file.id, {\n                progress: {\n                    ...fileInState.progress,\n                    ...newProgress,\n                },\n            });\n        }\n        this.#updateTotalProgressThrottled();\n    };\n    #updateTotalProgress() {\n        const totalProgress = this.#calculateTotalProgress();\n        let totalProgressPercent = null;\n        if (totalProgress != null) {\n            totalProgressPercent = Math.round(totalProgress * 100);\n            if (totalProgressPercent > 100)\n                totalProgressPercent = 100;\n            else if (totalProgressPercent < 0)\n                totalProgressPercent = 0;\n        }\n        this.emit('progress', totalProgressPercent ?? 0);\n        this.setState({\n            totalProgress: totalProgressPercent ?? 0,\n        });\n    }\n    // ___Why throttle at 500ms?\n    //    - We must throttle at >250ms for superfocus in Dashboard to work well\n    //    (because animation takes 0.25s, and we want to wait for all animations to be over before refocusing).\n    //    [Practical Check]: if thottle is at 100ms, then if you are uploading a file,\n    //    and click 'ADD MORE FILES', - focus won't activate in Firefox.\n    //    - We must throttle at around >500ms to avoid performance lags.\n    //    [Practical Check] Firefox, try to upload a big file for a prolonged period of time. Laptop will start to heat up.\n    #updateTotalProgressThrottled = throttle(() => this.#updateTotalProgress(), 500, { leading: true, trailing: true });\n    [Symbol.for('uppy test: updateTotalProgress')]() {\n        return this.#updateTotalProgress();\n    }\n    #calculateTotalProgress() {\n        // calculate total progress, using the number of files currently uploading,\n        // between 0 and 1 and sum of individual progress of each file\n        const files = this.getFiles();\n        // note: also includes files that have completed uploading:\n        const filesInProgress = files.filter((file) => {\n            return (file.progress.uploadStarted ||\n                file.progress.preprocess ||\n                file.progress.postprocess);\n        });\n        if (filesInProgress.length === 0) {\n            return 0;\n        }\n        if (filesInProgress.every((file) => file.progress.uploadComplete)) {\n            // If every uploading file is complete, and we're still getting progress, it probably means\n            // there's a bug somewhere in some progress reporting code (maybe not even our code)\n            // and we're still getting progress, so let's just assume it means a 100% progress\n            return 1;\n        }\n        const isSizedFile = (file) => file.progress.bytesTotal != null && file.progress.bytesTotal !== 0;\n        const sizedFilesInProgress = filesInProgress.filter(isSizedFile);\n        const unsizedFilesInProgress = filesInProgress.filter((file) => !isSizedFile(file));\n        if (sizedFilesInProgress.every((file) => file.progress.uploadComplete) &&\n            unsizedFilesInProgress.length > 0 &&\n            !unsizedFilesInProgress.every((file) => file.progress.uploadComplete)) {\n            // we are done with uploading all files of known size, however\n            // there is at least one file with unknown size still uploading,\n            // and we cannot say anything about their progress\n            // In any case, return null because it doesn't make any sense to show a progress\n            return null;\n        }\n        const totalFilesSize = sizedFilesInProgress.reduce((acc, file) => acc + (file.progress.bytesTotal ?? 0), 0);\n        const totalUploadedSize = sizedFilesInProgress.reduce((acc, file) => acc + (file.progress.bytesUploaded || 0), 0);\n        return totalFilesSize === 0 ? 0 : totalUploadedSize / totalFilesSize;\n    }\n    /**\n     * Registers listeners for all global actions, like:\n     * `error`, `file-removed`, `upload-progress`\n     */\n    #addListeners() {\n        // Type inference only works for inline functions so we have to type it again\n        const errorHandler = (error, file, response) => {\n            let errorMsg = error.message || 'Unknown error';\n            if (error.details) {\n                errorMsg += ` ${error.details}`;\n            }\n            this.setState({ error: errorMsg });\n            if (file != null && file.id in this.getState().files) {\n                this.setFileState(file.id, {\n                    error: errorMsg,\n                    response,\n                });\n            }\n        };\n        this.on('error', errorHandler);\n        this.on('upload-error', (file, error, response) => {\n            errorHandler(error, file, response);\n            if (typeof error === 'object' && error.message) {\n                this.log(error.message, 'error');\n                const newError = new Error(this.i18n('failedToUpload', { file: file?.name ?? '' })); // we may want a new custom error here\n                newError.isUserFacing = true; // todo maybe don't do this with all errors?\n                newError.details = error.message;\n                if (error.details) {\n                    newError.details += ` ${error.details}`;\n                }\n                this.#informAndEmit([newError]);\n            }\n            else {\n                this.#informAndEmit([error]);\n            }\n        });\n        let uploadStalledWarningRecentlyEmitted = null;\n        this.on('upload-stalled', (error, files) => {\n            const { message } = error;\n            const details = files.map((file) => file.meta.name).join(', ');\n            if (!uploadStalledWarningRecentlyEmitted) {\n                this.info({ message, details }, 'warning', this.opts.infoTimeout);\n                uploadStalledWarningRecentlyEmitted = setTimeout(() => {\n                    uploadStalledWarningRecentlyEmitted = null;\n                }, this.opts.infoTimeout);\n            }\n            this.log(`${message} ${details}`.trim(), 'warning');\n        });\n        this.on('upload', () => {\n            this.setState({ error: null });\n        });\n        const onUploadStarted = (files) => {\n            const filesFiltered = files.filter((file) => {\n                const exists = file != null && this.getFile(file.id);\n                if (!exists)\n                    this.log(`Not setting progress for a file that has been removed: ${file?.id}`);\n                return exists;\n            });\n            const filesState = Object.fromEntries(filesFiltered.map((file) => [\n                file.id,\n                {\n                    progress: {\n                        uploadStarted: Date.now(),\n                        uploadComplete: false,\n                        bytesUploaded: 0,\n                        bytesTotal: file.size,\n                    },\n                },\n            ]));\n            this.patchFilesState(filesState);\n        };\n        this.on('upload-start', onUploadStarted);\n        this.on('upload-progress', this.#handleUploadProgress);\n        this.on('upload-success', (file, uploadResp) => {\n            if (file == null || !this.getFile(file.id)) {\n                this.log(`Not setting progress for a file that has been removed: ${file?.id}`);\n                return;\n            }\n            const currentProgress = this.getFile(file.id).progress;\n            this.setFileState(file.id, {\n                progress: {\n                    ...currentProgress,\n                    postprocess: this.#postProcessors.size > 0\n                        ? {\n                            mode: 'indeterminate',\n                        }\n                        : undefined,\n                    uploadComplete: true,\n                    percentage: 100,\n                    bytesUploaded: currentProgress.bytesTotal,\n                },\n                response: uploadResp,\n                uploadURL: uploadResp.uploadURL,\n                isPaused: false,\n            });\n            // Remote providers sometimes don't tell us the file size,\n            // but we can know how many bytes we uploaded once the upload is complete.\n            if (file.size == null) {\n                this.setFileState(file.id, {\n                    size: uploadResp.bytesUploaded || currentProgress.bytesTotal,\n                });\n            }\n            this.#updateTotalProgressThrottled();\n        });\n        this.on('preprocess-progress', (file, progress) => {\n            if (file == null || !this.getFile(file.id)) {\n                this.log(`Not setting progress for a file that has been removed: ${file?.id}`);\n                return;\n            }\n            this.setFileState(file.id, {\n                progress: { ...this.getFile(file.id).progress, preprocess: progress },\n            });\n        });\n        this.on('preprocess-complete', (file) => {\n            if (file == null || !this.getFile(file.id)) {\n                this.log(`Not setting progress for a file that has been removed: ${file?.id}`);\n                return;\n            }\n            const files = { ...this.getState().files };\n            files[file.id] = {\n                ...files[file.id],\n                progress: { ...files[file.id].progress },\n            };\n            delete files[file.id].progress.preprocess;\n            this.setState({ files });\n        });\n        this.on('postprocess-progress', (file, progress) => {\n            if (file == null || !this.getFile(file.id)) {\n                this.log(`Not setting progress for a file that has been removed: ${file?.id}`);\n                return;\n            }\n            this.setFileState(file.id, {\n                progress: {\n                    ...this.getState().files[file.id].progress,\n                    postprocess: progress,\n                },\n            });\n        });\n        this.on('postprocess-complete', (file) => {\n            if (file == null || !this.getFile(file.id)) {\n                this.log(`Not setting progress for a file that has been removed: ${file?.id}`);\n                return;\n            }\n            const files = {\n                ...this.getState().files,\n            };\n            files[file.id] = {\n                ...files[file.id],\n                progress: {\n                    ...files[file.id].progress,\n                },\n            };\n            delete files[file.id].progress.postprocess;\n            this.setState({ files });\n        });\n        this.on('restored', () => {\n            // Files may have changed--ensure progress is still accurate.\n            this.#updateTotalProgressThrottled();\n        });\n        // @ts-expect-error should fix itself when dashboard it typed (also this doesn't belong here)\n        this.on('dashboard:file-edit-complete', (file) => {\n            if (file) {\n                this.#checkRequiredMetaFieldsOnFile(file);\n            }\n        });\n        // show informer if offline\n        if (typeof window !== 'undefined' && window.addEventListener) {\n            window.addEventListener('online', this.#updateOnlineStatus);\n            window.addEventListener('offline', this.#updateOnlineStatus);\n            setTimeout(this.#updateOnlineStatus, 3000);\n        }\n    }\n    updateOnlineStatus() {\n        const online = window.navigator.onLine ?? true;\n        if (!online) {\n            this.emit('is-offline');\n            this.info(this.i18n('noInternetConnection'), 'error', 0);\n            this.wasOffline = true;\n        }\n        else {\n            this.emit('is-online');\n            if (this.wasOffline) {\n                this.emit('back-online');\n                this.info(this.i18n('connectedToInternet'), 'success', 3000);\n                this.wasOffline = false;\n            }\n        }\n    }\n    #updateOnlineStatus = this.updateOnlineStatus.bind(this);\n    getID() {\n        return this.opts.id;\n    }\n    /**\n     * Registers a plugin with Core.\n     */\n    use(Plugin, \n    // We want to let the plugin decide whether `opts` is optional or not\n    // so we spread the argument rather than defining `opts:` ourselves.\n    ...args) {\n        if (typeof Plugin !== 'function') {\n            const msg = `Expected a plugin class, but got ${Plugin === null ? 'null' : typeof Plugin}.` +\n                ' Please verify that the plugin was imported and spelled correctly.';\n            throw new TypeError(msg);\n        }\n        // Instantiate\n        const plugin = new Plugin(this, ...args);\n        const pluginId = plugin.id;\n        if (!pluginId) {\n            throw new Error('Your plugin must have an id');\n        }\n        if (!plugin.type) {\n            throw new Error('Your plugin must have a type');\n        }\n        const existsPluginAlready = this.getPlugin(pluginId);\n        if (existsPluginAlready) {\n            const msg = `Already found a plugin named '${existsPluginAlready.id}'. ` +\n                `Tried to use: '${pluginId}'.\\n` +\n                'Uppy plugins must have unique `id` options.';\n            throw new Error(msg);\n        }\n        // @ts-expect-error does exist\n        if (Plugin.VERSION) {\n            // @ts-expect-error does exist\n            this.log(`Using ${pluginId} v${Plugin.VERSION}`);\n        }\n        if (plugin.type in this.#plugins) {\n            this.#plugins[plugin.type].push(plugin);\n        }\n        else {\n            this.#plugins[plugin.type] = [plugin];\n        }\n        plugin.install();\n        this.emit('plugin-added', plugin);\n        return this;\n    }\n    /**\n     * Find one Plugin by name.\n     */\n    getPlugin(id) {\n        for (const plugins of Object.values(this.#plugins)) {\n            const foundPlugin = plugins.find((plugin) => plugin.id === id);\n            if (foundPlugin != null)\n                return foundPlugin;\n        }\n        return undefined;\n    }\n    [Symbol.for('uppy test: getPlugins')](type) {\n        return this.#plugins[type];\n    }\n    /**\n     * Iterate through all `use`d plugins.\n     *\n     */\n    iteratePlugins(method) {\n        Object.values(this.#plugins).flat(1).forEach(method);\n    }\n    /**\n     * Uninstall and remove a plugin.\n     *\n     * @param {object} instance The plugin instance to remove.\n     */\n    removePlugin(instance) {\n        this.log(`Removing plugin ${instance.id}`);\n        this.emit('plugin-remove', instance);\n        if (instance.uninstall) {\n            instance.uninstall();\n        }\n        const list = this.#plugins[instance.type];\n        // list.indexOf failed here, because Vue3 converted the plugin instance\n        // to a Proxy object, which failed the strict comparison test:\n        // obj !== objProxy\n        const index = list.findIndex((item) => item.id === instance.id);\n        if (index !== -1) {\n            list.splice(index, 1);\n        }\n        const state = this.getState();\n        const updatedState = {\n            plugins: {\n                ...state.plugins,\n                [instance.id]: undefined,\n            },\n        };\n        this.setState(updatedState);\n    }\n    /**\n     * Uninstall all plugins and close down this Uppy instance.\n     */\n    destroy() {\n        this.log(`Closing Uppy instance ${this.opts.id}: removing all files and uninstalling plugins`);\n        this.cancelAll();\n        this.#storeUnsubscribe();\n        this.iteratePlugins((plugin) => {\n            this.removePlugin(plugin);\n        });\n        if (typeof window !== 'undefined' && window.removeEventListener) {\n            window.removeEventListener('online', this.#updateOnlineStatus);\n            window.removeEventListener('offline', this.#updateOnlineStatus);\n        }\n    }\n    hideInfo() {\n        const { info } = this.getState();\n        this.setState({ info: info.slice(1) });\n        this.emit('info-hidden');\n    }\n    /**\n     * Set info message in `state.info`, so that UI plugins like `Informer`\n     * can display the message.\n     */\n    info(message, type = 'info', duration = 3000) {\n        const isComplexMessage = typeof message === 'object';\n        this.setState({\n            info: [\n                ...this.getState().info,\n                {\n                    type,\n                    message: isComplexMessage ? message.message : message,\n                    details: isComplexMessage ? message.details : null,\n                },\n            ],\n        });\n        setTimeout(() => this.hideInfo(), duration);\n        this.emit('info-visible');\n    }\n    /**\n     * Passes messages to a function, provided in `opts.logger`.\n     * If `opts.logger: Uppy.debugLogger` or `opts.debug: true`, logs to the browser console.\n     */\n    log(message, type) {\n        const { logger } = this.opts;\n        switch (type) {\n            case 'error':\n                logger.error(message);\n                break;\n            case 'warning':\n                logger.warn(message);\n                break;\n            default:\n                logger.debug(message);\n                break;\n        }\n    }\n    // We need to store request clients by a unique ID, so we can share RequestClient instances across files\n    // this allows us to do rate limiting and synchronous operations like refreshing provider tokens\n    // example: refreshing tokens: if each file has their own requestclient,\n    // we don't have any way to synchronize all requests in order to\n    // - block all requests\n    // - refresh the token\n    // - unblock all requests and allow them to run with a the new access token\n    // back when we had a requestclient per file, once an access token expired,\n    // all 6 files would go ahead and refresh the token at the same time\n    // (calling /refresh-token up to 6 times), which will probably fail for some providers\n    #requestClientById = new Map();\n    registerRequestClient(id, client) {\n        this.#requestClientById.set(id, client);\n    }\n    /** @protected */\n    getRequestClientForFile(file) {\n        if (!file.remote)\n            throw new Error(`Tried to get RequestClient for a non-remote file ${file.id}`);\n        const requestClient = this.#requestClientById.get(file.remote.requestClientId);\n        if (requestClient == null)\n            throw new Error(`requestClientId \"${file.remote.requestClientId}\" not registered for file \"${file.id}\"`);\n        return requestClient;\n    }\n    /**\n     * Restore an upload by its ID.\n     */\n    restore(uploadID) {\n        this.log(`Core: attempting to restore upload \"${uploadID}\"`);\n        if (!this.getState().currentUploads[uploadID]) {\n            this.#removeUpload(uploadID);\n            return Promise.reject(new Error('Nonexistent upload'));\n        }\n        return this.#runUpload(uploadID);\n    }\n    /**\n     * Create an upload for a bunch of files.\n     *\n     */\n    #createUpload(fileIDs, opts = {}) {\n        // uppy.retryAll sets this to true \u2014 when retrying we want to ignore `allowNewUpload: false`\n        const { forceAllowNewUpload = false } = opts;\n        const { allowNewUpload, currentUploads } = this.getState();\n        if (!allowNewUpload && !forceAllowNewUpload) {\n            throw new Error('Cannot create a new upload: already uploading.');\n        }\n        const uploadID = nanoid();\n        this.emit('upload', uploadID, this.getFilesByIds(fileIDs));\n        this.setState({\n            allowNewUpload: this.opts.allowMultipleUploadBatches !== false &&\n                this.opts.allowMultipleUploads !== false,\n            currentUploads: {\n                ...currentUploads,\n                [uploadID]: {\n                    fileIDs,\n                    step: 0,\n                    result: {},\n                },\n            },\n        });\n        return uploadID;\n    }\n    [Symbol.for('uppy test: createUpload')](...args) {\n        // @ts-expect-error https://github.com/microsoft/TypeScript/issues/47595\n        return this.#createUpload(...args);\n    }\n    #getUpload(uploadID) {\n        const { currentUploads } = this.getState();\n        return currentUploads[uploadID];\n    }\n    /**\n     * Add data to an upload's result object.\n     */\n    addResultData(uploadID, data) {\n        if (!this.#getUpload(uploadID)) {\n            this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n            return;\n        }\n        const { currentUploads } = this.getState();\n        const currentUpload = {\n            ...currentUploads[uploadID],\n            result: { ...currentUploads[uploadID].result, ...data },\n        };\n        this.setState({\n            currentUploads: { ...currentUploads, [uploadID]: currentUpload },\n        });\n    }\n    /**\n     * Remove an upload, eg. if it has been canceled or completed.\n     *\n     */\n    #removeUpload(uploadID) {\n        const currentUploads = { ...this.getState().currentUploads };\n        delete currentUploads[uploadID];\n        this.setState({\n            currentUploads,\n        });\n    }\n    /**\n     * Run an upload. This picks up where it left off in case the upload is being restored.\n     */\n    async #runUpload(uploadID) {\n        const getCurrentUpload = () => {\n            const { currentUploads } = this.getState();\n            return currentUploads[uploadID];\n        };\n        let currentUpload = getCurrentUpload();\n        const steps = [\n            ...this.#preProcessors,\n            ...this.#uploaders,\n            ...this.#postProcessors,\n        ];\n        try {\n            for (let step = currentUpload.step || 0; step < steps.length; step++) {\n                if (!currentUpload) {\n                    break;\n                }\n                const fn = steps[step];\n                this.setState({\n                    currentUploads: {\n                        ...this.getState().currentUploads,\n                        [uploadID]: {\n                            ...currentUpload,\n                            step,\n                        },\n                    },\n                });\n                const { fileIDs } = currentUpload;\n                // TODO give this the `updatedUpload` object as its only parameter maybe?\n                // Otherwise when more metadata may be added to the upload this would keep getting more parameters\n                await fn(fileIDs, uploadID);\n                // Update currentUpload value in case it was modified asynchronously.\n                currentUpload = getCurrentUpload();\n            }\n        }\n        catch (err) {\n            this.#removeUpload(uploadID);\n            throw err;\n        }\n        // Set result data.\n        if (currentUpload) {\n            // Mark postprocessing step as complete if necessary; this addresses a case where we might get\n            // stuck in the postprocessing UI while the upload is fully complete.\n            // If the postprocessing steps do not do any work, they may not emit postprocessing events at\n            // all, and never mark the postprocessing as complete. This is fine on its own but we\n            // introduced code in the @uppy/core upload-success handler to prepare postprocessing progress\n            // state if any postprocessors are registered. That is to avoid a \"flash of completed state\"\n            // before the postprocessing plugins can emit events.\n            //\n            // So, just in case an upload with postprocessing plugins *has* completed *without* emitting\n            // postprocessing completion, we do it instead.\n            currentUpload.fileIDs.forEach((fileID) => {\n                const file = this.getFile(fileID);\n                if (file?.progress.postprocess) {\n                    this.emit('postprocess-complete', file);\n                }\n            });\n            const files = currentUpload.fileIDs.map((fileID) => this.getFile(fileID));\n            const successful = files.filter((file) => !file.error);\n            const failed = files.filter((file) => file.error);\n            this.addResultData(uploadID, { successful, failed, uploadID });\n            // Update currentUpload value in case it was modified asynchronously.\n            currentUpload = getCurrentUpload();\n        }\n        // Emit completion events.\n        // This is in a separate function so that the `currentUploads` variable\n        // always refers to the latest state. In the handler right above it refers\n        // to an outdated object without the `.result` property.\n        let result;\n        if (currentUpload) {\n            result = currentUpload.result;\n            this.#removeUpload(uploadID);\n        }\n        if (result == null) {\n            this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n            result = {\n                successful: [],\n                failed: [],\n                uploadID,\n            };\n        }\n        return result;\n    }\n    /**\n     * Start an upload for all the files that are not currently being uploaded.\n     */\n    async upload() {\n        if (!this.#plugins.uploader?.length) {\n            this.log('No uploader type plugins are used', 'warning');\n        }\n        let { files } = this.getState();\n        // retry any failed files from a previous upload() call\n        const filesToRetry = this.#getFilesToRetry();\n        if (filesToRetry.length > 0) {\n            const retryResult = await this.#doRetryAll(); // we don't want the complete event to fire\n            const hasNewFiles = this.getFiles().filter((file) => file.progress.uploadStarted == null)\n                .length > 0;\n            // if no new files, make it idempotent and return\n            if (!hasNewFiles) {\n                this.emit('complete', retryResult);\n                return retryResult;\n            }\n            // reload files which might have  changed after retry\n            ;\n            ({ files } = this.getState());\n        }\n        // If no files to retry, proceed with original upload() behavior for new files\n        const onBeforeUploadResult = this.opts.onBeforeUpload(files);\n        if (onBeforeUploadResult === false) {\n            return Promise.reject(new Error('Not starting the upload because onBeforeUpload returned false'));\n        }\n        if (onBeforeUploadResult && typeof onBeforeUploadResult === 'object') {\n            files = onBeforeUploadResult;\n            // Updating files in state, because uploader plugins receive file IDs,\n            // and then fetch the actual file object from state\n            this.setState({\n                files,\n            });\n        }\n        return Promise.resolve()\n            .then(() => this.#restricter.validateMinNumberOfFiles(files))\n            .catch((err) => {\n            this.#informAndEmit([err]);\n            throw err;\n        })\n            .then(() => {\n            if (!this.#checkRequiredMetaFields(files)) {\n                throw new RestrictionError(this.i18n('missingRequiredMetaField'));\n            }\n        })\n            .catch((err) => {\n            // Doing this in a separate catch because we already emited and logged\n            // all the errors in `checkRequiredMetaFields` so we only throw a generic\n            // missing fields error here.\n            throw err;\n        })\n            .then(async () => {\n            const { currentUploads } = this.getState();\n            // get a list of files that are currently assigned to uploads\n            const currentlyUploadingFiles = Object.values(currentUploads).flatMap((curr) => curr.fileIDs);\n            const waitingFileIDs = [];\n            Object.keys(files).forEach((fileID) => {\n                const file = this.getFile(fileID);\n                // if the file hasn't started uploading and hasn't already been assigned to an upload..\n                if (!file.progress.uploadStarted &&\n                    currentlyUploadingFiles.indexOf(fileID) === -1) {\n                    waitingFileIDs.push(file.id);\n                }\n            });\n            const uploadID = this.#createUpload(waitingFileIDs);\n            const result = await this.#runUpload(uploadID);\n            this.emit('complete', result);\n            return result;\n        })\n            .catch((err) => {\n            this.emit('error', err);\n            this.log(err, 'error');\n            throw err;\n        });\n    }\n}\nexport default Uppy;\n", "export { default as BasePlugin } from './BasePlugin.js';\nexport { debugLogger } from './loggers.js';\nexport { default as UIPlugin } from './UIPlugin.js';\nexport { default, default as Uppy } from './Uppy.js';\n", "/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n", "/**\n * Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).\n */\nexport default function isDragDropSupported() {\n    const div = document.body;\n    if (!('draggable' in div) || !('ondragstart' in div && 'ondrop' in div)) {\n        return false;\n    }\n    if (!('FormData' in window)) {\n        return false;\n    }\n    if (!('FileReader' in window)) {\n        return false;\n    }\n    return true;\n}\n", "/**\n * Converts list into array\n */\nexport default Array.from;\n", "import toArray from '../../toArray.js';\n// .files fallback, should be implemented in any browser\nexport default function fallbackApi(dataTransfer) {\n    const files = toArray(dataTransfer.files);\n    return Promise.resolve(files);\n}\n", "/**\n * Recursive function, calls the original callback() when the directory is entirely parsed.\n */\nexport default function getFilesAndDirectoriesFromDirectory(directoryReader, oldEntries, logDropError, { onSuccess }) {\n    directoryReader.readEntries((entries) => {\n        const newEntries = [...oldEntries, ...entries];\n        // According to the FileSystem API spec, getFilesAndDirectoriesFromDirectory()\n        // must be called until it calls the onSuccess with an empty array.\n        if (entries.length) {\n            queueMicrotask(() => {\n                getFilesAndDirectoriesFromDirectory(directoryReader, newEntries, logDropError, { onSuccess });\n            });\n            // Done iterating this particular directory\n        }\n        else {\n            onSuccess(newEntries);\n        }\n    }, \n    // Make sure we resolve on error anyway, it's fine if only one directory couldn't be parsed!\n    (error) => {\n        logDropError(error);\n        onSuccess(oldEntries);\n    });\n}\n", "import getFilesAndDirectoriesFromDirectory from './getFilesAndDirectoriesFromDirectory.js';\n/**\n * Polyfill for the new (experimental) getAsFileSystemHandle API (using the popular webkitGetAsEntry behind the scenes)\n * so that we can switch to the getAsFileSystemHandle API once it (hopefully) becomes standard\n */\nfunction getAsFileSystemHandleFromEntry(entry, logDropError) {\n    if (entry == null)\n        return entry;\n    return {\n        kind: entry.isFile\n            ? 'file'\n            : entry.isDirectory\n                ? 'directory'\n                : undefined,\n        name: entry.name,\n        getFile() {\n            return new Promise((resolve, reject) => entry.file(resolve, reject));\n        },\n        async *values() {\n            // If the file is a directory.\n            const directoryReader = entry.createReader();\n            const entries = await new Promise((resolve) => {\n                getFilesAndDirectoriesFromDirectory(directoryReader, [], logDropError, {\n                    onSuccess: (dirEntries) => resolve(dirEntries.map((file) => getAsFileSystemHandleFromEntry(file, logDropError))),\n                });\n            });\n            yield* entries;\n        },\n        isSameEntry: undefined,\n    };\n}\nasync function* createPromiseToAddFileOrParseDirectory(entry, relativePath, lastResortFile = undefined) {\n    const getNextRelativePath = () => `${relativePath}/${entry.name}`;\n    // For each dropped item, - make sure it's a file/directory, and start deepening in!\n    if (entry.kind === 'file') {\n        const file = await entry.getFile();\n        if (file != null) {\n            ;\n            file.relativePath = relativePath ? getNextRelativePath() : null;\n            yield file;\n        }\n        else if (lastResortFile != null)\n            yield lastResortFile;\n    }\n    else if (entry.kind === 'directory') {\n        for await (const handle of entry.values()) {\n            // Recurse on the directory, appending the dir name to the relative path\n            yield* createPromiseToAddFileOrParseDirectory(handle, relativePath ? getNextRelativePath() : entry.name);\n        }\n    }\n    else if (lastResortFile != null)\n        yield lastResortFile;\n}\n/**\n * Load all files from data transfer, and recursively read any directories.\n * Note that IE is not supported for drag-drop, because IE doesn't support Data Transfers\n *\n * @param {DataTransfer} dataTransfer\n * @param {*} logDropError on error\n */\nexport default async function* getFilesFromDataTransfer(dataTransfer, logDropError) {\n    // Retrieving the dropped items must happen synchronously\n    // otherwise only the first item gets treated and the other ones are garbage collected.\n    // https://github.com/transloadit/uppy/pull/3998\n    const fileSystemHandles = await Promise.all(Array.from(dataTransfer.items, async (item) => {\n        // biome-ignore lint/style/useConst: ...\n        let fileSystemHandle;\n        // TODO enable getAsFileSystemHandle API once we can get it working with subdirectories\n        // IMPORTANT: Need to check isSecureContext *before* calling getAsFileSystemHandle\n        // or else Chrome will crash when running in HTTP: https://github.com/transloadit/uppy/issues/4133\n        // if (window.isSecureContext && item.getAsFileSystemHandle != null)\n        // fileSystemHandle = await item.getAsFileSystemHandle()\n        // `webkitGetAsEntry` exists in all popular browsers (including non-WebKit browsers),\n        // however it may be renamed to getAsEntry() in the future, so you should code defensively, looking for both.\n        // from https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry\n        const getAsEntry = () => typeof item.getAsEntry === 'function'\n            ? item.getAsEntry()\n            : item.webkitGetAsEntry();\n        fileSystemHandle ??= getAsFileSystemHandleFromEntry(getAsEntry(), logDropError);\n        return {\n            fileSystemHandle,\n            lastResortFile: item.getAsFile(), // can be used as a fallback in case other methods fail\n        };\n    }));\n    for (const { lastResortFile, fileSystemHandle } of fileSystemHandles) {\n        // fileSystemHandle and lastResortFile can be null when we drop an url.\n        if (fileSystemHandle != null) {\n            try {\n                yield* createPromiseToAddFileOrParseDirectory(fileSystemHandle, '', lastResortFile);\n            }\n            catch (err) {\n                // Example: If dropping a symbolic link, Chromium will throw:\n                // \"DOMException: A requested file or directory could not be found at the time an operation was processed.\",\n                // So we will use lastResortFile instead. See https://github.com/transloadit/uppy/issues/3505.\n                if (lastResortFile != null) {\n                    yield lastResortFile;\n                }\n                else {\n                    logDropError(err);\n                }\n            }\n        }\n        else if (lastResortFile != null)\n            yield lastResortFile;\n    }\n}\n", "import fallbackApi from './utils/fallbackApi.js';\nimport webkitGetAsEntryApi from './utils/webkitGetAsEntryApi/index.js';\n/**\n * Returns a promise that resolves to the array of dropped files (if a folder is\n * dropped, and browser supports folder parsing - promise resolves to the flat\n * array of all files in all directories).\n * Each file has .relativePath prop appended to it (e.g. \"/docs/Prague/ticket_from_prague_to_ufa.pdf\")\n * if browser supports it. Otherwise it's undefined.\n *\n * @param dataTransfer\n * @param options\n * @param options.logDropError - a function that's called every time some\n * folder or some file error out (e.g. because of the folder name being too long\n * on Windows). Notice that resulting promise will always be resolved anyway.\n *\n * @returns {Promise} - Array<File>\n */\nexport default async function getDroppedFiles(dataTransfer, options) {\n    // Get all files from all subdirs. Works (at least) in Chrome, Mozilla, and Safari\n    const logDropError = options?.logDropError ?? Function.prototype;\n    try {\n        const accumulator = [];\n        for await (const file of webkitGetAsEntryApi(dataTransfer, logDropError)) {\n            accumulator.push(file);\n        }\n        return accumulator;\n        // Otherwise just return all first-order files\n    }\n    catch {\n        return fallbackApi(dataTransfer);\n    }\n}\n", "import {BasePlugin} from '@uppy/core'\n\nimport Translator from '@uppy/utils/lib/Translator'\nimport isDragDropSupported from '@uppy/utils/lib/isDragDropSupported'\nimport getDroppedFiles from '@uppy/utils/lib/getDroppedFiles'\n\nclass TutDragDrop extends BasePlugin {\n    static VERSION = '0.1.0'\n\n    constructor(uppy, opts) {\n        super(uppy, opts)\n        this.id = this.opts.id || 'TutDragDrop'\n        this.type = 'acquirer'\n        this.title = 'Uppy Drag & Drop for TUTORize'\n\n        const defaultOptions = {\n            target: null,\n            inputFieldTarget: null,\n            inputName: 'files[]',\n            tooltipText: null,\n            mediaPoolUrl: null\n        }\n\n        this.opts = Object.assign({}, defaultOptions, opts)\n\n        this.isDragDropSupported = isDragDropSupported()\n        this.removeDragOverClassTimeout = null\n\n        this.i18nInit()\n\n        this.handleDragEnter = this.handleDragEnter.bind(this)\n        this.handleDragOver = this.handleDragOver.bind(this)\n        this.handleDragLeave = this.handleDragLeave.bind(this)\n        this.handleDrop = this.handleDrop.bind(this)\n        this.handleInputChange = this.handleInputChange.bind(this)\n        this.addFiles = this.addFiles.bind(this)\n    }\n\n    setOptions(newOpts) {\n        super.setOptions(newOpts)\n    }\n\n    i18nInit() {\n        this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale])\n        this.i18n = this.translator.translate.bind(this.translator)\n        this.i18nArray = this.translator.translateArray.bind(this.translator)\n    }\n\n    addFiles(files) {\n        const descriptors = files.map((file) => ({\n            source: this.id,\n            name: file.name,\n            type: file.type,\n            data: file,\n            meta: {\n                // path of the file relative to the ancestor directory the user selected.\n                // e.g. 'docs/Old Prague/airbnb.pdf'\n                relativePath: file.relativePath || null\n            }\n        }))\n\n        try {\n            this.uppy.addFiles(descriptors)\n        } catch (error) {\n            this.uppy.log(error)\n        }\n    }\n\n    handleDragEnter(event) {\n        event.preventDefault()\n        event.stopPropagation()\n\n        this.opts.target.classList.add('uppy-DragDrop--dragEnter')\n    }\n\n    handleDragOver(event) {\n        event.preventDefault()\n        event.stopPropagation()\n\n        // 1. Add a small (+) icon on drop\n        // (and prevent browsers from interpreting this as files being _moved_ into the browser,\n        // https://github.com/transloadit/uppy/issues/1978)\n        event.dataTransfer.dropEffect = 'copy'\n\n        clearTimeout(this.removeDragOverClassTimeout)\n        // this.setPluginState({isDraggingOver: true})\n\n        this.opts.target.classList.add('uppy-DragDrop--isDraggingOver')\n    }\n\n    handleDragLeave(event) {\n        event.preventDefault()\n        event.stopPropagation()\n\n        clearTimeout(this.removeDragOverClassTimeout)\n        // Timeout against flickering, this solution is taken from drag-drop library.\n        // Solution with 'pointer-events: none' didn't work across browsers.\n        this.removeDragOverClassTimeout = setTimeout(() => {\n            // this.setPluginState({isDraggingOver: false})\n            this.opts.target.classList.remove('uppy-DragDrop--isDraggingOver')\n            this.opts.target.classList.remove('uppy-DragDrop--dragEnter')\n        }, 50)\n    }\n\n    handleDrop(event) {\n        event.preventDefault()\n        event.stopPropagation()\n        clearTimeout(this.removeDragOverClassTimeout)\n\n        // 2. Remove dragover class\n        // this.setPluginState({isDraggingOver: false})\n\n        // 3. Add all dropped files\n        this.uppy.log('[TutDragDrop] Files were dropped')\n        const logDropError = (error) => {\n            this.uppy.log(error, 'error')\n        }\n        getDroppedFiles(event.dataTransfer, {logDropError}).then((files) => this.addFiles(files))\n\n        this.opts.target.classList.remove('uppy-DragDrop--isDraggingOver')\n        this.opts.target.classList.remove('uppy-DragDrop--dragEnter')\n    }\n\n    handleInputChange(event) {\n        const files = Array.from(event.target.files)\n        this.addFiles(files)\n        // Clears out the event target input field to not submit the file after initial upload.\n        event.target.value = ''\n    }\n\n    renderFileInput() {\n        const randomId = Date.now()\n        const restrictions = this.uppy.opts.restrictions\n        let inputText\n        let tooltip\n\n        if (this.opts.mediaPoolUrl) {\n            inputText = this.i18nArray('dropHereOrMediaPool', {\n                mediaPool: `<a href=\"${this.opts.mediaPoolUrl}\" data-controller=\"modal-link\" data-action=\"click->modal-link#openModal\" role=\"buton\">${this.i18n('mediaPool')}</a>`,\n                browse: `<label for=\"${randomId}\" tabindex=\"0\" onkeyup=\"if (event.keyCode === 13) { event.preventDefault(); document.getElementById('${randomId}').click(); }\">${this.i18n('browse')}</label>`\n            })\n        } else {\n            inputText = this.i18nArray('dropHereOr', {browse: `<label for=\"${randomId}\" tabindex=\"0\" onkeyup=\"if (event.keyCode === 13) { event.preventDefault(); document.getElementById('${randomId}').click(); }\">${this.i18n('browse')}</label>`})\n        }\n\n        if (this.opts.tooltipText) {\n            tooltip = `<span class=\"uppy-DragDrop-inputTextTooltip\" data-controller=\"popover\" data-bs-content=\"${this.opts.tooltipText}\"><i class=\"fas fa-question-circle\"></i></span>`\n        } else {\n            tooltip = ''\n        }\n\n        this.opts.inputFieldTarget.innerHTML = `\n            <div class=\"uppy-DragDrop-fileInput\">\n                <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"cloud-upload-alt\" class=\"uppy-DragDrop-icon fa-cloud-upload-alt\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\"><path fill=\"currentColor\" d=\"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\"></path></svg>\n                <span class=\"uppy-DragDrop-inputText\">${inputText.join('')}</span>\n                ${tooltip}\n                <input hidden=\"hidden\" type=\"file\" name=\"${this.opts.inputName}\" id=\"${randomId}\"\n                    tabindex=\"${-1}\" focusable=\"false\" multiple=\"${restrictions.maxNumberOfFiles !== 1}\" \n                    accept=\"${restrictions.allowedFileTypes}\" class=\"uppy-DragDrop-input\">\n            </div>\n        `\n    }\n\n    //\n    // render(state) {\n    //     const dragDropClass = `\n    //         uppy-Root\n    //         uppy-u-reset\n    //         uppy-DragDrop-container\n    //         ${this.isDragDropSupported ? 'uppy-DragDrop--is-dragdrop-supported' : ''}\n    //         ${this.getPluginState().isDraggingOver ? 'uppy-DragDrop--isDraggingOver' : ''}\n    //        `\n    //\n    //     return this.renderFileInput()\n    // }\n\n    install() {\n        // this.setPluginState({isDraggingOver: false})\n        // const target = this.opts.target\n        // if (target) {\n        //     this.mount(target, this)\n        // }\n        this.opts.target.addEventListener('dragenter', this.handleDragEnter)\n        this.opts.target.addEventListener('dragover', this.handleDragOver)\n        this.opts.target.addEventListener('dragleave', this.handleDragLeave)\n        this.opts.target.addEventListener('drop', this.handleDrop)\n        if (this.opts.inputFieldTarget) {\n            this.renderFileInput()\n            this.opts.inputFieldTarget.querySelector('input[type=\"file\"]')\n                .addEventListener('change', this.handleInputChange)\n        }\n        this.opts.target.classList.add('uppy-DragDrop-container')\n        if (this.isDragDropSupported) this.opts.target.classList.add('uppy-DragDrop--is-dragdrop-supported')\n    }\n\n    uninstall() {\n        // this.unmount()\n        this.opts.target.removeEventListener('dragenter', this.handleDragEnter)\n        this.opts.target.removeEventListener('dragover', this.handleDragOver)\n        this.opts.target.removeEventListener('dragleave', this.handleDragLeave)\n        this.opts.target.removeEventListener('drop', this.handleDrop)\n        if (this.opts.inputFieldTarget)\n            this.opts.inputFieldTarget.querySelector('input[type=\"file\"]')\n                .removeEventListener('change', this.handleInputChange)\n    }\n}\n\nmodule.exports = TutDragDrop\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 {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ", "var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};", "/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v;  g = n;  b = wh; break;\n\t\tcase 1: r = n;  g = v;  b = wh; break;\n\t\tcase 2: r = wh; g = v;  b = n; break;\n\t\tcase 3: r = wh; g = n;  b = v; break;\n\t\tcase 4: r = n;  g = wh; b = v; break;\n\t\tcase 5: r = v;  g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n", "const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n", "const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n", "'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n", "// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\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};", "const colors = [\n  {\n    color: '#000000',\n    label: 'Black'\n  },\n  {\n    color: '#4d4d4d',\n    label: 'Dim grey'\n  },\n  {\n    color: '#999999',\n    label: 'Grey'\n  },\n  {\n    color: '#e6e6e6',\n    label: 'Light grey'\n  },\n  {\n    color: '#ffffff',\n    label: 'White',\n    hasBorder: true\n  },\n  {\n    color: '#e64d4d',\n    label: 'Red'\n  },\n  {\n    color: '#e6994d',\n    label: 'Orange'\n  },\n  {\n    color: '#e6e64d',\n    label: 'Yellow'\n  },\n  {\n    color: '#99e64d',\n    label: 'Light green'\n  },\n  {\n    color: '#4de64d',\n    label: 'Green'\n  },\n  {\n    color: '#4de699',\n    label: 'Aquamarine'\n  },\n  {\n    color: '#4de6e6',\n    label: 'Turquoise'\n  },\n  {\n    color: '#4d99e6',\n    label: 'Light blue'\n  },\n  {\n    color: '#4d4de6',\n    label: 'Blue'\n  },\n  {\n    color: '#994de6',\n    label: 'Purple'\n  }\n]\n\nexport const defaultConfig = {\n  toolbar: {\n    shouldNotGroupWhenFull: true,\n    items: [\n      'heading',\n      'fontSize',\n      'fontColor',\n      'fontBackgroundColor',\n      '|',\n      'bold',\n      'italic',\n      'underline',\n      'strikethrough',\n      '|',\n      'alignment',\n      'outdent',\n      'indent',\n      'bulletedList',\n      'numberedList',\n      '|',\n      'link',\n      'insertTable',\n      'tutorizeMediaUpload',\n      'removeFormat',\n      'undo',\n      'redo'\n    ]\n  },\n  fontSize: {\n    options: [12, 'default', 16, 18, 20, 22, 24, 26, 28, 36, 48]\n  },\n  fontColor: {\n    colors\n  },\n  fontBackgroundColor: {\n    colors\n  },\n  image: {\n    toolbar: [\n      'toggleImageCaption',\n      'imageTextAlternative',\n      '|', 'imageStyle:block', 'imageStyle:alignLeft', 'imageStyle:alignRight'\n    ],\n    styles: ['alignLeft', 'alignRight']\n  },\n  table: {\n    contentToolbar: [\n      'tableColumn',\n      'tableRow',\n      'mergeTableCells',\n      'tableProperties',\n      'tableCellProperties'\n    ]\n  },\n  // This value must be kept in sync with the language defined in webpack.config.js.\n  language: 'en'\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * A helper (module) giving an access to the global DOM objects such as `window` and\n * `document`. Accessing these objects using this helper allows easy and bulletproof\n * testing, i.e. stubbing native properties:\n *\n * ```ts\n * import { global } from 'ckeditor5/utils';\n *\n * // This stub will work for any code using global module.\n * testUtils.sinon.stub( global, 'window', {\n * \tinnerWidth: 10000\n * } );\n *\n * console.log( global.window.innerWidth );\n * ```\n */\nlet globalVar; // named globalVar instead of global: https://github.com/ckeditor/ckeditor5/issues/12971\n// In some environments window and document API might not be available.\ntry {\n    globalVar = { window, document };\n}\ncatch (e) {\n    // It's not possible to mock a window object to simulate lack of a window object without writing extremely convoluted code.\n    /* istanbul ignore next -- @preserve */\n    // Let's cast it to not change module's API.\n    // We only handle this so loading editor in environments without window and document doesn't fail.\n    // For better DX we shouldn't introduce mixed types and require developers to check the type manually.\n    // This module should not be used on purpose in any environment outside browser.\n    globalVar = { window: {}, document: {} };\n}\nexport default globalVar;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* globals navigator:false */\n/**\n * @module utils/env\n */\nimport global from './dom/global.js';\n/**\n * Safely returns `userAgent` from browser's navigator API in a lower case.\n * If navigator API is not available it will return an empty string.\n */\nexport function getUserAgent() {\n    // In some environments navigator API might not be available.\n    try {\n        return navigator.userAgent.toLowerCase();\n    }\n    catch (e) {\n        return '';\n    }\n}\nconst userAgent = /* #__PURE__ */ getUserAgent();\n/**\n * A namespace containing environment and browser information.\n */\nconst env = {\n    isMac: /* #__PURE__ */ isMac(userAgent),\n    isWindows: /* #__PURE__ */ isWindows(userAgent),\n    isGecko: /* #__PURE__ */ isGecko(userAgent),\n    isSafari: /* #__PURE__ */ isSafari(userAgent),\n    isiOS: /* #__PURE__ */ isiOS(userAgent),\n    isAndroid: /* #__PURE__ */ isAndroid(userAgent),\n    isBlink: /* #__PURE__ */ isBlink(userAgent),\n    get isMediaForcedColors() {\n        return isMediaForcedColors();\n    },\n    get isMotionReduced() {\n        return isMotionReduced();\n    },\n    features: {\n        isRegExpUnicodePropertySupported: /* #__PURE__ */ isRegExpUnicodePropertySupported()\n    }\n};\nexport default env;\n/**\n * Checks if User Agent represented by the string is running on Macintosh.\n *\n * @param userAgent **Lowercase** `navigator.userAgent` string.\n * @returns Whether User Agent is running on Macintosh or not.\n */\nexport function isMac(userAgent) {\n    return userAgent.indexOf('macintosh') > -1;\n}\n/**\n * Checks if User Agent represented by the string is running on Windows.\n *\n * @param userAgent **Lowercase** `navigator.userAgent` string.\n * @returns Whether User Agent is running on Windows or not.\n */\nexport function isWindows(userAgent) {\n    return userAgent.indexOf('windows') > -1;\n}\n/**\n * Checks if User Agent represented by the string is Firefox (Gecko).\n *\n * @param userAgent **Lowercase** `navigator.userAgent` string.\n * @returns Whether User Agent is Firefox or not.\n */\nexport function isGecko(userAgent) {\n    return !!userAgent.match(/gecko\\/\\d+/);\n}\n/**\n * Checks if User Agent represented by the string is Safari.\n *\n * @param userAgent **Lowercase** `navigator.userAgent` string.\n * @returns Whether User Agent is Safari or not.\n */\nexport function isSafari(userAgent) {\n    return userAgent.indexOf(' applewebkit/') > -1 && userAgent.indexOf('chrome') === -1;\n}\n/**\n * Checks if User Agent represented by the string is running in iOS.\n *\n * @param userAgent **Lowercase** `navigator.userAgent` string.\n * @returns Whether User Agent is running in iOS or not.\n */\nexport function isiOS(userAgent) {\n    // \"Request mobile site\" || \"Request desktop site\".\n    return !!userAgent.match(/iphone|ipad/i) || (isMac(userAgent) && navigator.maxTouchPoints > 0);\n}\n/**\n * Checks if User Agent represented by the string is Android mobile device.\n *\n * @param userAgent **Lowercase** `navigator.userAgent` string.\n * @returns Whether User Agent is Safari or not.\n */\nexport function isAndroid(userAgent) {\n    return userAgent.indexOf('android') > -1;\n}\n/**\n * Checks if User Agent represented by the string is Blink engine.\n *\n * @param userAgent **Lowercase** `navigator.userAgent` string.\n * @returns Whether User Agent is Blink engine or not.\n */\nexport function isBlink(userAgent) {\n    // The Edge browser before switching to the Blink engine used to report itself as Chrome (and \"Edge/\")\n    // but after switching to the Blink it replaced \"Edge/\" with \"Edg/\".\n    return userAgent.indexOf('chrome/') > -1 && userAgent.indexOf('edge/') < 0;\n}\n/**\n * Checks if the current environment supports ES2018 Unicode properties like `\\p{P}` or `\\p{L}`.\n * More information about unicode properties might be found\n * [in Unicode Standard Annex #44](https://www.unicode.org/reports/tr44/#GC_Values_Table).\n */\nexport function isRegExpUnicodePropertySupported() {\n    let isSupported = false;\n    // Feature detection for Unicode properties. Added in ES2018. Currently Firefox does not support it.\n    // See https://github.com/ckeditor/ckeditor5-mention/issues/44#issuecomment-487002174.\n    try {\n        // Usage of regular expression literal cause error during build (ckeditor/ckeditor5-dev#534).\n        isSupported = 'ć'.search(new RegExp('[\\\\p{L}]', 'u')) === 0;\n    }\n    catch (error) {\n        // Firefox throws a SyntaxError when the group is unsupported.\n    }\n    return isSupported;\n}\n/**\n * Checks if the user agent has enabled a forced colors mode (e.g. Windows High Contrast mode).\n *\n * Returns `false` in environments where `window` global object is not available.\n */\nexport function isMediaForcedColors() {\n    return global.window.matchMedia ? global.window.matchMedia('(forced-colors: active)').matches : false;\n}\n/**\n * Checks if the user enabled \"prefers reduced motion\" setting in browser.\n *\n * Returns `false` in environments where `window` global object is not available.\n */\nexport function isMotionReduced() {\n    return global.window.matchMedia ? global.window.matchMedia('(prefers-reduced-motion)').matches : false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/fastdiff\n */\n/**\n * Finds positions of the first and last change in the given string/array and generates a set of changes:\n *\n * ```ts\n * fastDiff( '12a', '12xyza' );\n * // [ { index: 2, type: 'insert', values: [ 'x', 'y', 'z' ] } ]\n *\n * fastDiff( '12a', '12aa' );\n * // [ { index: 3, type: 'insert', values: [ 'a' ] } ]\n *\n * fastDiff( '12xyza', '12a' );\n * // [ { index: 2, type: 'delete', howMany: 3 } ]\n *\n * fastDiff( [ '1', '2', 'a', 'a' ], [ '1', '2', 'a' ] );\n * // [ { index: 3, type: 'delete', howMany: 1 } ]\n *\n * fastDiff( [ '1', '2', 'a', 'b', 'c', '3' ], [ '2', 'a', 'b' ] );\n * // [ { index: 0, type: 'insert', values: [ '2', 'a', 'b' ] }, { index: 3, type: 'delete', howMany: 6 } ]\n * ```\n *\n * Passed arrays can contain any type of data, however to compare them correctly custom comparator function\n * should be passed as a third parameter:\n *\n * ```ts\n * fastDiff( [ { value: 1 }, { value: 2 } ], [ { value: 1 }, { value: 3 } ], ( a, b ) => {\n * \treturn a.value === b.value;\n * } );\n * // [ { index: 1, type: 'insert', values: [ { value: 3 } ] }, { index: 2, type: 'delete', howMany: 1 } ]\n * ```\n *\n * The resulted set of changes can be applied to the input in order to transform it into the output, for example:\n *\n * ```ts\n * let input = '12abc3';\n * const output = '2ab';\n * const changes = fastDiff( input, output );\n *\n * changes.forEach( change => {\n * \tif ( change.type == 'insert' ) {\n * \t\tinput = input.substring( 0, change.index ) + change.values.join( '' ) + input.substring( change.index );\n * \t} else if ( change.type == 'delete' ) {\n * \t\tinput = input.substring( 0, change.index ) + input.substring( change.index + change.howMany );\n * \t}\n * } );\n *\n * // input equals output now\n * ```\n *\n * or in case of arrays:\n *\n * ```ts\n * let input = [ '1', '2', 'a', 'b', 'c', '3' ];\n * const output = [ '2', 'a', 'b' ];\n * const changes = fastDiff( input, output );\n *\n * changes.forEach( change => {\n * \tif ( change.type == 'insert' ) {\n * \t\tinput = input.slice( 0, change.index ).concat( change.values, input.slice( change.index ) );\n * \t} else if ( change.type == 'delete' ) {\n * \t\tinput = input.slice( 0, change.index ).concat( input.slice( change.index + change.howMany ) );\n * \t}\n * } );\n *\n * // input equals output now\n * ```\n *\n * By passing `true` as the fourth parameter (`atomicChanges`) the output of this function will become compatible with\n * the {@link module:utils/diff~diff `diff()`} function:\n *\n * ```ts\n * fastDiff( '12a', '12xyza', undefined, true );\n * // [ 'equal', 'equal', 'insert', 'insert', 'insert', 'equal' ]\n * ```\n *\n * The default output format of this function is compatible with the output format of\n * {@link module:utils/difftochanges~diffToChanges `diffToChanges()`}. The `diffToChanges()` input format is, in turn,\n * compatible with the output of {@link module:utils/diff~diff `diff()`}:\n *\n * ```ts\n * const a = '1234';\n * const b = '12xyz34';\n *\n * // Both calls will return the same results (grouped changes format).\n * fastDiff( a, b );\n * diffToChanges( diff( a, b ) );\n *\n * // Again, both calls will return the same results (atomic changes format).\n * fastDiff( a, b, undefined, true );\n * diff( a, b );\n * ```\n *\n * @typeParam T The type of array elements.\n * @typeParam AtomicChanges The type of `atomicChanges` parameter (selects the result type).\n * @param a Input array or string.\n * @param b Input array or string.\n * @param cmp Optional function used to compare array values, by default `===` (strict equal operator) is used.\n * @param atomicChanges Whether an array of `inset|delete|equal` operations should\n * be returned instead of changes set. This makes this function compatible with {@link module:utils/diff~diff `diff()`}.\n * Defaults to `false`.\n * @returns Array of changes. The elements are either {@link module:utils/diff~DiffResult} or {@link module:utils/difftochanges~Change},\n * depending on `atomicChanges` parameter.\n */\nexport default function fastDiff(a, b, cmp, atomicChanges) {\n    // Set the comparator function.\n    cmp = cmp || function (a, b) {\n        return a === b;\n    };\n    // Convert the string (or any array-like object - eg. NodeList) to an array by using the slice() method because,\n    // unlike Array.from(), it returns array of UTF-16 code units instead of the code points of a string.\n    // One code point might be a surrogate pair of two code units. All text offsets are expected to be in code units.\n    // See ckeditor/ckeditor5#3147.\n    //\n    // We need to make sure here that fastDiff() works identical to diff().\n    const arrayA = Array.isArray(a) ? a : Array.prototype.slice.call(a);\n    const arrayB = Array.isArray(b) ? b : Array.prototype.slice.call(b);\n    // Find first and last change.\n    const changeIndexes = findChangeBoundaryIndexes(arrayA, arrayB, cmp);\n    // Transform into changes array.\n    const result = atomicChanges ?\n        changeIndexesToAtomicChanges(changeIndexes, arrayB.length) :\n        changeIndexesToChanges(arrayB, changeIndexes);\n    return result;\n}\n/**\n * Finds position of the first and last change in the given arrays. For example:\n *\n * ```ts\n * const indexes = findChangeBoundaryIndexes( [ '1', '2', '3', '4' ], [ '1', '3', '4', '2', '4' ] );\n * console.log( indexes ); // { firstIndex: 1, lastIndexOld: 3, lastIndexNew: 4 }\n * ```\n *\n * The above indexes means that in the first array the modified part is `1[23]4` and in the second array it is `1[342]4`.\n * Based on such indexes, array with `insert`/`delete` operations which allows transforming first value into the second one\n * can be generated.\n */\nfunction findChangeBoundaryIndexes(arr1, arr2, cmp) {\n    // Find the first difference between passed values.\n    const firstIndex = findFirstDifferenceIndex(arr1, arr2, cmp);\n    // If arrays are equal return -1 indexes object.\n    if (firstIndex === -1) {\n        return { firstIndex: -1, lastIndexOld: -1, lastIndexNew: -1 };\n    }\n    // Remove the common part of each value and reverse them to make it simpler to find the last difference between them.\n    const oldArrayReversed = cutAndReverse(arr1, firstIndex);\n    const newArrayReversed = cutAndReverse(arr2, firstIndex);\n    // Find the first difference between reversed values.\n    // It should be treated as \"how many elements from the end the last difference occurred\".\n    //\n    // For example:\n    //\n    // \t\t\t\tinitial\t->\tafter cut\t-> reversed:\n    // oldValue:\t'321ba'\t->\t'21ba'\t\t-> 'ab12'\n    // newValue:\t'31xba'\t->\t'1xba'\t\t-> 'abx1'\n    // lastIndex:\t\t\t\t\t\t\t-> 2\n    //\n    // So the last change occurred two characters from the end of the arrays.\n    const lastIndex = findFirstDifferenceIndex(oldArrayReversed, newArrayReversed, cmp);\n    // Use `lastIndex` to calculate proper offset, starting from the beginning (`lastIndex` kind of starts from the end).\n    const lastIndexOld = arr1.length - lastIndex;\n    const lastIndexNew = arr2.length - lastIndex;\n    return { firstIndex, lastIndexOld, lastIndexNew };\n}\n/**\n * Returns a first index on which given arrays differ. If both arrays are the same, -1 is returned.\n */\nfunction findFirstDifferenceIndex(arr1, arr2, cmp) {\n    for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) {\n        if (arr1[i] === undefined || arr2[i] === undefined || !cmp(arr1[i], arr2[i])) {\n            return i;\n        }\n    }\n    return -1; // Return -1 if arrays are equal.\n}\n/**\n * Returns a copy of the given array with `howMany` elements removed starting from the beginning and in reversed order.\n *\n * @param arr Array to be processed.\n * @param howMany How many elements from array beginning to remove.\n * @returns Shortened and reversed array.\n */\nfunction cutAndReverse(arr, howMany) {\n    return arr.slice(howMany).reverse();\n}\n/**\n * Generates changes array based on change indexes from `findChangeBoundaryIndexes` function. This function will\n * generate array with 0 (no changes), 1 (deletion or insertion) or 2 records (insertion and deletion).\n *\n * @param newArray New array for which change indexes were calculated.\n * @param changeIndexes Change indexes object from `findChangeBoundaryIndexes` function.\n * @returns Array of changes compatible with {@link module:utils/difftochanges~diffToChanges} format.\n */\nfunction changeIndexesToChanges(newArray, changeIndexes) {\n    const result = [];\n    const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes;\n    // Order operations as 'insert', 'delete' array to keep compatibility with {@link module:utils/difftochanges~diffToChanges}\n    // in most cases. However, 'diffToChanges' does not stick to any order so in some cases\n    // (for example replacing '12345' with 'abcd') it will generate 'delete', 'insert' order.\n    if (lastIndexNew - firstIndex > 0) {\n        result.push({\n            index: firstIndex,\n            type: 'insert',\n            values: newArray.slice(firstIndex, lastIndexNew)\n        });\n    }\n    if (lastIndexOld - firstIndex > 0) {\n        result.push({\n            index: firstIndex + (lastIndexNew - firstIndex),\n            type: 'delete',\n            howMany: lastIndexOld - firstIndex\n        });\n    }\n    return result;\n}\n/**\n * Generates array with set `equal|insert|delete` operations based on change indexes from `findChangeBoundaryIndexes` function.\n *\n * @param changeIndexes Change indexes object from `findChangeBoundaryIndexes` function.\n * @param newLength Length of the new array on which `findChangeBoundaryIndexes` calculated change indexes.\n * @returns Array of changes compatible with {@link module:utils/diff~diff} format.\n */\nfunction changeIndexesToAtomicChanges(changeIndexes, newLength) {\n    const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes;\n    // No changes.\n    if (firstIndex === -1) {\n        return Array(newLength).fill('equal');\n    }\n    let result = [];\n    if (firstIndex > 0) {\n        result = result.concat(Array(firstIndex).fill('equal'));\n    }\n    if (lastIndexNew - firstIndex > 0) {\n        result = result.concat(Array(lastIndexNew - firstIndex).fill('insert'));\n    }\n    if (lastIndexOld - firstIndex > 0) {\n        result = result.concat(Array(lastIndexOld - firstIndex).fill('delete'));\n    }\n    if (lastIndexNew < newLength) {\n        result = result.concat(Array(newLength - lastIndexNew).fill('equal'));\n    }\n    return result;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/diff\n */\nimport fastDiff from './fastdiff.js';\n// The following code is based on the \"O(NP) Sequence Comparison Algorithm\"\n// by Sun Wu, Udi Manber, Gene Myers, Webb Miller.\n/**\n * Calculates the difference between two arrays or strings producing an array containing a list of changes\n * necessary to transform input into output.\n *\n * ```ts\n * diff( 'aba', 'acca' ); // [ 'equal', 'insert', 'insert', 'delete', 'equal' ]\n * ```\n *\n * This function is based on the \"O(NP) Sequence Comparison Algorithm\" by Sun Wu, Udi Manber, Gene Myers, Webb Miller.\n * Unfortunately, while it gives the most precise results, its to complex for longer strings/arrow (above 200 items).\n * Therefore, `diff()` automatically switches to {@link module:utils/fastdiff~fastDiff `fastDiff()`} when detecting\n * such a scenario. The return formats of both functions are identical.\n *\n * @param a Input array or string.\n * @param b Output array or string.\n * @param cmp Optional function used to compare array values, by default === is used.\n * @returns Array of changes.\n */\nexport default function diff(a, b, cmp) {\n    // Set the comparator function.\n    cmp = cmp || function (a, b) {\n        return a === b;\n    };\n    const aLength = a.length;\n    const bLength = b.length;\n    // Perform `fastDiff` for longer strings/arrays (see #269).\n    if (aLength > 200 || bLength > 200 || aLength + bLength > 300) {\n        return diff.fastDiff(a, b, cmp, true);\n    }\n    // Temporary action type statics.\n    let _insert, _delete;\n    // Swapped the arrays to use the shorter one as the first one.\n    if (bLength < aLength) {\n        const tmp = a;\n        a = b;\n        b = tmp;\n        // We swap the action types as well.\n        _insert = 'delete';\n        _delete = 'insert';\n    }\n    else {\n        _insert = 'insert';\n        _delete = 'delete';\n    }\n    const m = a.length;\n    const n = b.length;\n    const delta = n - m;\n    // Edit scripts, for each diagonal.\n    const es = {};\n    // Furthest points, the furthest y we can get on each diagonal.\n    const fp = {};\n    function snake(k) {\n        // We use -1 as an alternative below to handle initial values ( instead of filling the fp with -1 first ).\n        // Furthest points (y) on the diagonal below k.\n        const y1 = (fp[k - 1] !== undefined ? fp[k - 1] : -1) + 1;\n        // Furthest points (y) on the diagonal above k.\n        const y2 = fp[k + 1] !== undefined ? fp[k + 1] : -1;\n        // The way we should go to get further.\n        const dir = y1 > y2 ? -1 : 1;\n        // Clone previous changes array (if any).\n        if (es[k + dir]) {\n            es[k] = es[k + dir].slice(0);\n        }\n        // Create changes array.\n        if (!es[k]) {\n            es[k] = [];\n        }\n        // Push the action.\n        es[k].push(y1 > y2 ? _insert : _delete);\n        // Set the beginning coordinates.\n        let y = Math.max(y1, y2);\n        let x = y - k;\n        // Traverse the diagonal as long as the values match.\n        while (x < m && y < n && cmp(a[x], b[y])) {\n            x++;\n            y++;\n            // Push no change action.\n            es[k].push('equal');\n        }\n        return y;\n    }\n    let p = 0;\n    let k;\n    // Traverse the graph until we reach the end of the longer string.\n    do {\n        // Updates furthest points and edit scripts for diagonals below delta.\n        for (k = -p; k < delta; k++) {\n            fp[k] = snake(k);\n        }\n        // Updates furthest points and edit scripts for diagonals above delta.\n        for (k = delta + p; k > delta; k--) {\n            fp[k] = snake(k);\n        }\n        // Updates furthest point and edit script for the delta diagonal.\n        // note that the delta diagonal is the one which goes through the sink (m, n).\n        fp[delta] = snake(delta);\n        p++;\n    } while (fp[delta] !== n);\n    // Return the final list of edit changes.\n    // We remove the first item that represents the action for the injected nulls.\n    return es[delta].slice(1);\n}\n// Store the API in static property to easily overwrite it in tests.\n// Too bad dependency injection does not work in Webpack + ES 6 (const) + Babel.\ndiff.fastDiff = fastDiff;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/mix\n */\n/**\n * Copies enumerable properties and symbols from the objects given as 2nd+ parameters to the\n * prototype of first object (a constructor).\n *\n * ```\n * class Editor {\n * \t...\n * }\n *\n * const SomeMixin = {\n * \ta() {\n * \t\treturn 'a';\n * \t}\n * };\n *\n * mix( Editor, SomeMixin, ... );\n *\n * new Editor().a(); // -> 'a'\n * ```\n *\n * Note: Properties which already exist in the base class will not be overriden.\n *\n * @deprecated Use mixin pattern, see: https://www.typescriptlang.org/docs/handbook/mixins.html.\n * @param baseClass Class which prototype will be extended.\n * @param mixins Objects from which to get properties.\n */\nexport default function mix(baseClass, ...mixins) {\n    mixins.forEach(mixin => {\n        const propertyNames = Object.getOwnPropertyNames(mixin);\n        const propertySymbols = Object.getOwnPropertySymbols(mixin);\n        propertyNames.concat(propertySymbols).forEach(key => {\n            if (key in baseClass.prototype) {\n                return;\n            }\n            if (typeof mixin == 'function' && (key == 'length' || key == 'name' || key == 'prototype')) {\n                return;\n            }\n            const sourceDescriptor = Object.getOwnPropertyDescriptor(mixin, key);\n            sourceDescriptor.enumerable = false;\n            Object.defineProperty(baseClass.prototype, key, sourceDescriptor);\n        });\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/spy\n */\n/**\n * Creates a spy function (ala Sinon.js) that can be used to inspect call to it.\n *\n * The following are the present features:\n *\n * * spy.called: property set to `true` if the function has been called at least once.\n *\n * @returns The spy function.\n */\nfunction spy() {\n    return function spy() {\n        spy.called = true;\n    };\n}\nexport default spy;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/eventinfo\n */\nimport spy from './spy.js';\n/**\n * The event object passed to event callbacks. It is used to provide information about the event as well as a tool to\n * manipulate it.\n */\nexport default class EventInfo {\n    /**\n     * @param source The emitter.\n     * @param name The event name.\n     */\n    constructor(source, name) {\n        this.source = source;\n        this.name = name;\n        this.path = [];\n        // The following methods are defined in the constructor because they must be re-created per instance.\n        this.stop = spy();\n        this.off = spy();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/uid\n */\n/**\n * A hash table of hex numbers to avoid using toString() in uid() which is costly.\n * [ '00', '01', '02', ..., 'fe', 'ff' ]\n */\nconst HEX_NUMBERS = new Array(256).fill('')\n    .map((_, index) => ('0' + (index).toString(16)).slice(-2));\n/**\n * Returns a unique id. The id starts with an \"e\" character and a randomly generated string of\n * 32 alphanumeric characters.\n *\n * **Note**: The characters the unique id is built from correspond to the hex number notation\n * (from \"0\" to \"9\", from \"a\" to \"f\"). In other words, each id corresponds to an \"e\" followed\n * by 16 8-bit numbers next to each other.\n *\n * @returns An unique id string.\n */\nexport default function uid() {\n    // Let's create some positive random 32bit integers first.\n    const [r1, r2, r3, r4] = crypto.getRandomValues(new Uint32Array(4));\n    // Make sure that id does not start with number.\n    return 'e' +\n        HEX_NUMBERS[r1 >> 0 & 0xFF] +\n        HEX_NUMBERS[r1 >> 8 & 0xFF] +\n        HEX_NUMBERS[r1 >> 16 & 0xFF] +\n        HEX_NUMBERS[r1 >> 24 & 0xFF] +\n        HEX_NUMBERS[r2 >> 0 & 0xFF] +\n        HEX_NUMBERS[r2 >> 8 & 0xFF] +\n        HEX_NUMBERS[r2 >> 16 & 0xFF] +\n        HEX_NUMBERS[r2 >> 24 & 0xFF] +\n        HEX_NUMBERS[r3 >> 0 & 0xFF] +\n        HEX_NUMBERS[r3 >> 8 & 0xFF] +\n        HEX_NUMBERS[r3 >> 16 & 0xFF] +\n        HEX_NUMBERS[r3 >> 24 & 0xFF] +\n        HEX_NUMBERS[r4 >> 0 & 0xFF] +\n        HEX_NUMBERS[r4 >> 8 & 0xFF] +\n        HEX_NUMBERS[r4 >> 16 & 0xFF] +\n        HEX_NUMBERS[r4 >> 24 & 0xFF];\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Provides group of constants to use instead of hardcoding numeric priority values.\n */\nconst priorities = {\n    get(priority = 'normal') {\n        if (typeof priority != 'number') {\n            return this[priority] || this.normal;\n        }\n        else {\n            return priority;\n        }\n    },\n    highest: 100000,\n    high: 1000,\n    normal: 0,\n    low: -1000,\n    lowest: -100000\n};\nexport default priorities;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport priorities from './priorities.js';\n/**\n * Inserts any object with priority at correct index by priority so registered objects are always sorted from highest to lowest priority.\n *\n * @param objects Array of objects with priority to insert object to.\n * @param objectToInsert Object with `priority` property.\n */\nexport default function insertToPriorityArray(objects, objectToInsert) {\n    const priority = priorities.get(objectToInsert.priority);\n    for (let i = 0; i < objects.length; i++) {\n        if (priorities.get(objects[i].priority) < priority) {\n            objects.splice(i, 0, objectToInsert);\n            return;\n        }\n    }\n    objects.push(objectToInsert);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/ckeditorerror\n */\n/* globals console */\n/**\n * URL to the documentation with error codes.\n */\nexport const DOCUMENTATION_URL = 'https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html';\n/**\n * The CKEditor error class.\n *\n * You should throw `CKEditorError` when:\n *\n * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled\n * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated),\n * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give\n * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not\n * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use\n * {@link module:utils/ckeditorerror~logWarning `logWarning()`} and\n * {@link module:utils/ckeditorerror~logError `logError()`}\n * to improve developers experience and let them see the a working editor as soon as possible.\n *\n * ```ts\n * /**\n *  * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc.\n *  *\n *  * @error plugin-load\n *  * @param pluginName The name of the plugin that could not be loaded.\n *  * @param moduleName The name of the module which tried to load this plugin.\n *  *\\/\n * throw new CKEditorError( 'plugin-load', {\n * \tpluginName: 'foo',\n * \tmoduleName: 'bar'\n * } );\n * ```\n */\nexport default class CKEditorError extends Error {\n    /**\n     * Creates an instance of the CKEditorError class.\n     *\n     * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added\n     * to the thrown error's `message`.\n     * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog}\n     * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also\n     * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization).\n     * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility\n     * to check if the object works as the context.\n     * @param data Additional data describing the error. A stringified version of this object\n     * will be appended to the error message, so the data are quickly visible in the console. The original\n     * data object will also be later available under the {@link #data} property.\n     */\n    constructor(errorName, context, data) {\n        super(getErrorMessage(errorName, data));\n        this.name = 'CKEditorError';\n        this.context = context;\n        this.data = data;\n    }\n    /**\n     * Checks if the error is of the `CKEditorError` type.\n     */\n    is(type) {\n        return type === 'CKEditorError';\n    }\n    /**\n     * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one.\n     * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case\n     * of a {@link module:utils/ckeditorerror~CKEditorError} error.\n     *\n     * @param err The error to rethrow.\n     * @param context An object connected through properties with the editor instance. This context will be used\n     * by the watchdog to verify which editor should be restarted.\n     */\n    static rethrowUnexpectedError(err, context) {\n        if (err.is && err.is('CKEditorError')) {\n            throw err;\n        }\n        /**\n         * An unexpected error occurred inside the CKEditor 5 codebase. This error will look like the original one\n         * to make the debugging easier.\n         *\n         * This error is only useful when the editor is initialized using the {@link module:watchdog/watchdog~Watchdog} feature.\n         * In case of such error (or any {@link module:utils/ckeditorerror~CKEditorError} error) the watchdog should restart the editor.\n         *\n         * @error unexpected-error\n         */\n        const error = new CKEditorError(err.message, context);\n        // Restore the original stack trace to make the error look like the original one.\n        // See https://github.com/ckeditor/ckeditor5/issues/5595 for more details.\n        error.stack = err.stack;\n        throw error;\n    }\n}\n/**\n * Logs a warning to the console with a properly formatted message and adds a link to the documentation.\n * Use whenever you want to log a warning to the console.\n *\n * ```ts\n * /**\n *  * There was a problem processing the configuration of the toolbar. The item with the given\n *  * name does not exist, so it was omitted when rendering the toolbar.\n *  *\n *  * @error toolbarview-item-unavailable\n *  * @param {String} name The name of the component.\n *  *\\/\n * logWarning( 'toolbarview-item-unavailable', { name } );\n * ```\n *\n * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to throw an error and when to log\n * a warning or an error to the console.\n *\n * @param errorName The error name to be logged.\n * @param data Additional data to be logged.\n */\nexport function logWarning(errorName, data) {\n    console.warn(...formatConsoleArguments(errorName, data));\n}\n/**\n * Logs an error to the console with a properly formatted message and adds a link to the documentation.\n * Use whenever you want to log an error to the console.\n *\n * ```ts\n * /**\n *  * There was a problem processing the configuration of the toolbar. The item with the given\n *  * name does not exist, so it was omitted when rendering the toolbar.\n *  *\n *  * @error toolbarview-item-unavailable\n *  * @param {String} name The name of the component.\n *  *\\/\n *  logError( 'toolbarview-item-unavailable', { name } );\n * ```\n *\n * **Note**: In most cases logging a warning using {@link module:utils/ckeditorerror~logWarning} is enough.\n *\n * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to use each method.\n *\n * @param errorName The error name to be logged.\n * @param data Additional data to be logged.\n */\nexport function logError(errorName, data) {\n    console.error(...formatConsoleArguments(errorName, data));\n}\n/**\n * Returns formatted link to documentation message.\n */\nfunction getLinkToDocumentationMessage(errorName) {\n    return `\\nRead more: ${DOCUMENTATION_URL}#error-${errorName}`;\n}\n/**\n * Returns formatted error message.\n */\nfunction getErrorMessage(errorName, data) {\n    const processedObjects = new WeakSet();\n    const circularReferencesReplacer = (key, value) => {\n        if (typeof value === 'object' && value !== null) {\n            if (processedObjects.has(value)) {\n                return `[object ${value.constructor.name}]`;\n            }\n            processedObjects.add(value);\n        }\n        return value;\n    };\n    const stringifiedData = data ? ` ${JSON.stringify(data, circularReferencesReplacer)}` : '';\n    const documentationLink = getLinkToDocumentationMessage(errorName);\n    return errorName + stringifiedData + documentationLink;\n}\n/**\n * Returns formatted console error arguments.\n */\nfunction formatConsoleArguments(errorName, data) {\n    const documentationMessage = getLinkToDocumentationMessage(errorName);\n    return data ? [errorName, data, documentationMessage] : [errorName, documentationMessage];\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/version\n */\nimport CKEditorError from './ckeditorerror.js';\nconst version = '43.3.0';\nexport default version;\n// The second argument is not a month. It is `monthIndex` and starts from `0`.\nexport const releaseDate = new Date(2024, 9, 29);\n/* istanbul ignore next -- @preserve */\nif (globalThis.CKEDITOR_VERSION) {\n    /**\n     * This error is thrown when, due to a mistake in the way CKEditor&nbsp;5 was installed,\n     * imported, or initialized, some of its modules were evaluated and executed twice.\n     * Duplicate modules inevitably lead to runtime errors and increased bundle size.\n     *\n     * # Check dependency versions\n     *\n     * First, make sure that you use the latest version of all CKEditor&nbsp;5 dependencies.\n     * Depending on the installation method, you should check the versions of the `ckeditor5`,\n     * `ckeditor5-premium-features`, or `@ckeditor/ckeditor5-<NAME>` packages. If you cannot update\n     * to the latest version, ensure that all the CKEditor&nbsp;5 packages are\n     * in the same version.\n     *\n     * If you use third-party plugins, make sure to update them, too. If they are incompatible\n     * with the version of CKEditor&nbsp;5 you use, you may need to downgrade the CKEditor&nbsp;5 packages\n     * (which we do not recommend). Ask the plugin's author to upgrade the dependencies,\n     * or fork their project and update it yourself.\n     *\n     * # Check imports\n     *\n     * The next step is to look at how you import CKEditor&nbsp;5 into your project.\n     *\n     * **The {@glink updating/nim-migration/migration-to-new-installation-methods new installation methods}\n     * are designed to prevent module duplication, so if you are not using them yet, you should consider\n     * updating your project**. However, several legacy installation methods are still supported for backward\n     * compatibility, and mixing them may result in module duplication.\n     *\n     * These are the most common import methods of the CKEditor&nbsp;5 packages.\n     *\n     * - **New installation methods (NIM)** &ndash; Imports from the `ckeditor5` and `ckeditor5-premium-features` packages.\n     * - **Optimized build** for the new installation methods &ndash; Imports from the `@ckeditor/ckeditor5-<NAME>/dist/index.js`.\n     * - **Predefined builds** (legacy) &ndash; Imports from the `@ckeditor/ckeditor5-build-<NAME>` packages.\n     * - **Default imports** (legacy) &ndash; Imports from the `@ckeditor/ckeditor5-<NAME>` packages (default export).\n     * - **`src`** (legacy) &ndash; Imports from the `@ckeditor/ckeditor5-<NAME>/src/*`.\n     * - **DLL builds** (legacy) &ndash; Imports from the `ckeditor5/build/<NAME>` and `@ckeditor/ckeditor5-<NAME>/build/*`.\n     *\n     * The best way to avoid duplicate modules is to avoid mixing these installation methods. For example, if you use imports\n     * specific to the optimized build, you should use them for all CKEditor&nbsp;5 packages. In addition, since\n     * the Predefined and DLL builds already include the core of the editor, they cannot be used with other types of imports.\n     *\n     * Here is a matrix showing which installation methods are compatible with each other:\n     *\n     * |                  | NIM | Optimized build | Predefined builds | Default imports | `src` | DLL builds |\n     * |------------------|-----|-----------------|-------------------|-----------------|-------|------------|\n     * | NIM              | ✅  | ✅              | ❌                | ❌              | ❌    | ❌         |\n     * | Optimized builds | ✅  | ✅              | ❌                | ❌              | ❌    | ❌         |\n     * | Predefined build | ❌  | ❌              | ✅                | ❌              | ❌    | ❌         |\n     * | Default imports  | ❌  | ❌              | ❌                | ✅              | ✅    | ❌         |\n     * | `src`            | ❌  | ❌              | ❌                | ✅              | ✅    | ❌         |\n     * | DLL builds       | ❌  | ❌              | ❌                | ❌              | ❌    | ✅         |\n     *\n     * If you use any third-party plugins, make sure the way you import them is compatible with\n     * the way you import CKEditor&nbsp;5.\n     *\n     * <details>\n     * <summary>New installation methods and optimized builds</summary>\n     *\n     * If you use the {@glink updating/nim-migration/migration-to-new-installation-methods new installation methods},\n     * you should only import code from the `ckeditor5` and `ckeditor5-premium-features` packages.\n     * Do not import code from the `@ckeditor/ckeditor5-<NAME>` packages unless you follow\n     * the {@glink getting-started/setup/optimizing-build-size Optimizing build size} guide and the imports from\n     * the `@ckeditor/ckeditor5-<NAME>` packages end with `/dist/index.js`.\n     *\n     * If you use a CDN, ensure that some files are not included twice in your project.\n     *\n     * Examples of valid and invalid import paths:\n     *\n     * ```js\n     * import { ClassicEditor, Highlight } from 'ckeditor5'; // ✅\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ✅\n     * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight.js'; // ❌\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ❌\n     * import '@ckeditor/ckeditor5-highlight/build/highlight.js'; // ❌\n     * ```\n     * </details>\n     *\n     * <details>\n     * <summary>(Legacy) Predefined builds</summary>\n     *\n     * If you use the {@glink getting-started/legacy/installation-methods/predefined-builds Predefined builds},\n     * you cannot import any additional plugins. These builds already include the editor's core\n     * and selected plugins and importing additional ones will cause some modules to be bundled and loaded twice.\n     *\n     * Examples of valid and invalid import paths:\n     *\n     * ```js\n     * import ClassicEditor from '@ckeditor/ckeditor5-build-classic'; // ✅\n     * import { Highlight } from 'ckeditor5'; // ❌\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ❌\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ❌\n     * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight'; // ❌\n     * import '@ckeditor/ckeditor5-highlight/build/highlight'; // ❌\n     * ```\n     *\n     * If you are missing some features from the\n     * {@glink getting-started/legacy/installation-methods/predefined-builds#plugins-included-in-the-predefined-builds list of plugins},\n     * you should switch to the {@glink updating/nim-migration/migration-to-new-installation-methods new installation methods}\n     * which do not have this limitation.\n     * If you cannot migrate to the new installation methods, try the\n     * {@glink getting-started/legacy/installation-methods/predefined-builds#superbuild superbuild} instead.\n     * This build contains all the editor features.\n     * </details>\n     *\n     * <details>\n     * <summary>(Legacy) Default imports and `src` imports</summary>\n     *\n     * If you use the {@glink getting-started/legacy/installation-methods/quick-start-other legacy customized installation}\n     * method, you should only import code from the `@ckeditor/ckeditor5-<NAME>` packages. While you can import code from\n     * the `@ckeditor/ckeditor5-<NAME>/src/*` files, it is not recommended as it can make migration to the new installation\n     * methods more difficult.\n     *\n     * If you use this installation method, you should not import code from the `ckeditor5`, `ckeditor5-premium-features`,\n     * or `@ckeditor/ckeditor5-build-<NAME>` packages.\n     *\n     * Examples of valid and invalid import paths:\n     *\n     * ```js\n     * import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic'; // ✅\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ✅\n     * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight.js'; // ✅ (not recommended)\n     * import { Highlight } from 'ckeditor5'; // ❌\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ❌\n     * import '@ckeditor/ckeditor5-highlight/build/highlight'; // ❌\n     * ```\n     * </details>\n     *\n     * <details>\n     * <summary>(Legacy) DLL builds</summary>\n     *\n     * If you are using the {@glink getting-started/legacy/advanced/alternative-setups/dll-builds legacy DLL builds},\n     * you should not import any non-DLL modules.\n     *\n     * Examples of valid and invalid import paths:\n     *\n     * ```js\n     * import 'ckeditor5/build/ckeditor5-dll.js';// ✅\n     * import '@ckeditor/ckeditor5-editor-classic/build/editor-classic.js';// ✅\n     * import '@ckeditor/ckeditor5-highlight/build/highlight.js';// ✅\n     * import { Highlight } from 'ckeditor5'; // ❌\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ❌\n     * import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ❌\n     * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight.js'; // ❌\n     * ```\n     * </details>\n     *\n     * # Reinstall `node_modules`\n     *\n     * Usually, npm and other package managers deduplicate all packages - for example, `ckeditor5` is only installed once\n     * in `node_modules/`. However, it is known to fail to do so occasionally.\n     *\n     * To rule out this possibility, you can try the following:\n     *\n     * 1. Remove the `node_modules` directory.\n     * 2. Remove the `package-lock.json`, `yarn.lock`, or `pnpm-lock.yaml` files (depending on the package manager used).\n     * 3. Run `npm install` to reinstall all packages.\n     * 4. Run `npm ls` to check how many times packages like `@ckeditor/ckeditor5-core` are installed.\n     * If they are installed more than once, verify which package causes that.\n     *\n     * @error ckeditor-duplicated-modules\n     */\n    throw new CKEditorError('ckeditor-duplicated-modules', null);\n}\nelse {\n    globalThis.CKEDITOR_VERSION = version;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/emittermixin\n */\nimport EventInfo from './eventinfo.js';\nimport uid from './uid.js';\nimport priorities from './priorities.js';\nimport insertToPriorityArray from './inserttopriorityarray.js';\n// To check if component is loaded more than once.\nimport './version.js';\nimport CKEditorError from './ckeditorerror.js';\nconst _listeningTo = Symbol('listeningTo');\nconst _emitterId = Symbol('emitterId');\nconst _delegations = Symbol('delegations');\nconst defaultEmitterClass = /* #__PURE__ */ EmitterMixin(Object);\nexport default function EmitterMixin(base) {\n    if (!base) {\n        return defaultEmitterClass;\n    }\n    class Mixin extends base {\n        on(event, callback, options) {\n            this.listenTo(this, event, callback, options);\n        }\n        once(event, callback, options) {\n            let wasFired = false;\n            const onceCallback = (event, ...args) => {\n                // Ensure the callback is called only once even if the callback itself leads to re-firing the event\n                // (which would call the callback again).\n                if (!wasFired) {\n                    wasFired = true;\n                    // Go off() at the first call.\n                    event.off();\n                    // Go with the original callback.\n                    callback.call(this, event, ...args);\n                }\n            };\n            // Make a similar on() call, simply replacing the callback.\n            this.listenTo(this, event, onceCallback, options);\n        }\n        off(event, callback) {\n            this.stopListening(this, event, callback);\n        }\n        listenTo(emitter, event, callback, options = {}) {\n            let emitterInfo, eventCallbacks;\n            // _listeningTo contains a list of emitters that this object is listening to.\n            // This list has the following format:\n            //\n            // _listeningTo: {\n            //     emitterId: {\n            //         emitter: emitter,\n            //         callbacks: {\n            //             event1: [ callback1, callback2, ... ]\n            //             ....\n            //         }\n            //     },\n            //     ...\n            // }\n            if (!this[_listeningTo]) {\n                this[_listeningTo] = {};\n            }\n            const emitters = this[_listeningTo];\n            if (!_getEmitterId(emitter)) {\n                _setEmitterId(emitter);\n            }\n            const emitterId = _getEmitterId(emitter);\n            if (!(emitterInfo = emitters[emitterId])) {\n                emitterInfo = emitters[emitterId] = {\n                    emitter,\n                    callbacks: {}\n                };\n            }\n            if (!(eventCallbacks = emitterInfo.callbacks[event])) {\n                eventCallbacks = emitterInfo.callbacks[event] = [];\n            }\n            eventCallbacks.push(callback);\n            // Finally register the callback to the event.\n            addEventListener(this, emitter, event, callback, options);\n        }\n        stopListening(emitter, event, callback) {\n            const emitters = this[_listeningTo];\n            let emitterId = emitter && _getEmitterId(emitter);\n            const emitterInfo = (emitters && emitterId) ? emitters[emitterId] : undefined;\n            const eventCallbacks = (emitterInfo && event) ? emitterInfo.callbacks[event] : undefined;\n            // Stop if nothing has been listened.\n            if (!emitters || (emitter && !emitterInfo) || (event && !eventCallbacks)) {\n                return;\n            }\n            // All params provided. off() that single callback.\n            if (callback) {\n                removeEventListener(this, emitter, event, callback);\n                // We must remove callbacks as well in order to prevent memory leaks.\n                // See https://github.com/ckeditor/ckeditor5/pull/8480\n                const index = eventCallbacks.indexOf(callback);\n                if (index !== -1) {\n                    if (eventCallbacks.length === 1) {\n                        delete emitterInfo.callbacks[event];\n                    }\n                    else {\n                        removeEventListener(this, emitter, event, callback);\n                    }\n                }\n            }\n            // Only `emitter` and `event` provided. off() all callbacks for that event.\n            else if (eventCallbacks) {\n                while ((callback = eventCallbacks.pop())) {\n                    removeEventListener(this, emitter, event, callback);\n                }\n                delete emitterInfo.callbacks[event];\n            }\n            // Only `emitter` provided. off() all events for that emitter.\n            else if (emitterInfo) {\n                for (event in emitterInfo.callbacks) {\n                    this.stopListening(emitter, event);\n                }\n                delete emitters[emitterId];\n            }\n            // No params provided. off() all emitters.\n            else {\n                for (emitterId in emitters) {\n                    this.stopListening(emitters[emitterId].emitter);\n                }\n                delete this[_listeningTo];\n            }\n        }\n        fire(eventOrInfo, ...args) {\n            try {\n                const eventInfo = eventOrInfo instanceof EventInfo ? eventOrInfo : new EventInfo(this, eventOrInfo);\n                const event = eventInfo.name;\n                let callbacks = getCallbacksForEvent(this, event);\n                // Record that the event passed this emitter on its path.\n                eventInfo.path.push(this);\n                // Handle event listener callbacks first.\n                if (callbacks) {\n                    // Arguments passed to each callback.\n                    const callbackArgs = [eventInfo, ...args];\n                    // Copying callbacks array is the easiest and most secure way of preventing infinite loops, when event callbacks\n                    // are added while processing other callbacks. Previous solution involved adding counters (unique ids) but\n                    // failed if callbacks were added to the queue before currently processed callback.\n                    // If this proves to be too inefficient, another method is to change `.on()` so callbacks are stored if same\n                    // event is currently processed. Then, `.fire()` at the end, would have to add all stored events.\n                    callbacks = Array.from(callbacks);\n                    for (let i = 0; i < callbacks.length; i++) {\n                        callbacks[i].callback.apply(this, callbackArgs);\n                        // Remove the callback from future requests if off() has been called.\n                        if (eventInfo.off.called) {\n                            // Remove the called mark for the next calls.\n                            delete eventInfo.off.called;\n                            this._removeEventListener(event, callbacks[i].callback);\n                        }\n                        // Do not execute next callbacks if stop() was called.\n                        if (eventInfo.stop.called) {\n                            break;\n                        }\n                    }\n                }\n                // Delegate event to other emitters if needed.\n                const delegations = this[_delegations];\n                if (delegations) {\n                    const destinations = delegations.get(event);\n                    const passAllDestinations = delegations.get('*');\n                    if (destinations) {\n                        fireDelegatedEvents(destinations, eventInfo, args);\n                    }\n                    if (passAllDestinations) {\n                        fireDelegatedEvents(passAllDestinations, eventInfo, args);\n                    }\n                }\n                return eventInfo.return;\n            }\n            catch (err) {\n                // @if CK_DEBUG // throw err;\n                /* istanbul ignore next -- @preserve */\n                CKEditorError.rethrowUnexpectedError(err, this);\n            }\n        }\n        delegate(...events) {\n            return {\n                to: (emitter, nameOrFunction) => {\n                    if (!this[_delegations]) {\n                        this[_delegations] = new Map();\n                    }\n                    // Originally there was a for..of loop which unfortunately caused an error in Babel that didn't allow\n                    // build an application. See: https://github.com/ckeditor/ckeditor5-react/issues/40.\n                    events.forEach(eventName => {\n                        const destinations = this[_delegations].get(eventName);\n                        if (!destinations) {\n                            this[_delegations].set(eventName, new Map([[emitter, nameOrFunction]]));\n                        }\n                        else {\n                            destinations.set(emitter, nameOrFunction);\n                        }\n                    });\n                }\n            };\n        }\n        stopDelegating(event, emitter) {\n            if (!this[_delegations]) {\n                return;\n            }\n            if (!event) {\n                this[_delegations].clear();\n            }\n            else if (!emitter) {\n                this[_delegations].delete(event);\n            }\n            else {\n                const destinations = this[_delegations].get(event);\n                if (destinations) {\n                    destinations.delete(emitter);\n                }\n            }\n        }\n        _addEventListener(event, callback, options) {\n            createEventNamespace(this, event);\n            const lists = getCallbacksListsForNamespace(this, event);\n            const priority = priorities.get(options.priority);\n            const callbackDefinition = {\n                callback,\n                priority\n            };\n            // Add the callback to all callbacks list.\n            for (const callbacks of lists) {\n                // Add the callback to the list in the right priority position.\n                insertToPriorityArray(callbacks, callbackDefinition);\n            }\n        }\n        _removeEventListener(event, callback) {\n            const lists = getCallbacksListsForNamespace(this, event);\n            for (const callbacks of lists) {\n                for (let i = 0; i < callbacks.length; i++) {\n                    if (callbacks[i].callback == callback) {\n                        // Remove the callback from the list (fixing the next index).\n                        callbacks.splice(i, 1);\n                        i--;\n                    }\n                }\n            }\n        }\n    }\n    return Mixin;\n}\n// Backward compatibility with `mix`\n([\n    'on', 'once', 'off', 'listenTo',\n    'stopListening', 'fire', 'delegate', 'stopDelegating',\n    '_addEventListener', '_removeEventListener'\n]).forEach(key => {\n    EmitterMixin[key] = defaultEmitterClass.prototype[key];\n});\n/**\n * Checks if `listeningEmitter` listens to an emitter with given `listenedToEmitterId` and if so, returns that emitter.\n * If not, returns `null`.\n *\n * @internal\n * @param listeningEmitter An emitter that listens.\n * @param listenedToEmitterId Unique emitter id of emitter listened to.\n */\nexport function _getEmitterListenedTo(listeningEmitter, listenedToEmitterId) {\n    const listeningTo = listeningEmitter[_listeningTo];\n    if (listeningTo && listeningTo[listenedToEmitterId]) {\n        return listeningTo[listenedToEmitterId].emitter;\n    }\n    return null;\n}\n/**\n * Sets emitter's unique id.\n *\n * **Note:** `_emitterId` can be set only once.\n *\n * @internal\n * @param emitter An emitter for which id will be set.\n * @param id Unique id to set. If not passed, random unique id will be set.\n */\nexport function _setEmitterId(emitter, id) {\n    if (!emitter[_emitterId]) {\n        emitter[_emitterId] = id || uid();\n    }\n}\n/**\n * Returns emitter's unique id.\n *\n * @internal\n * @param emitter An emitter which id will be returned.\n */\nexport function _getEmitterId(emitter) {\n    return emitter[_emitterId];\n}\n/**\n * Gets the internal `_events` property of the given object.\n * `_events` property store all lists with callbacks for registered event names.\n * If there were no events registered on the object, empty `_events` object is created.\n */\nfunction getEvents(source) {\n    if (!source._events) {\n        Object.defineProperty(source, '_events', {\n            value: {}\n        });\n    }\n    return source._events;\n}\n/**\n * Creates event node for generic-specific events relation architecture.\n */\nfunction makeEventNode() {\n    return {\n        callbacks: [],\n        childEvents: []\n    };\n}\n/**\n * Creates an architecture for generic-specific events relation.\n * If needed, creates all events for given eventName, i.e. if the first registered event\n * is foo:bar:abc, it will create foo:bar:abc, foo:bar and foo event and tie them together.\n * It also copies callbacks from more generic events to more specific events when\n * specific events are created.\n */\nfunction createEventNamespace(source, eventName) {\n    const events = getEvents(source);\n    // First, check if the event we want to add to the structure already exists.\n    if (events[eventName]) {\n        // If it exists, we don't have to do anything.\n        return;\n    }\n    // In other case, we have to create the structure for the event.\n    // Note, that we might need to create intermediate events too.\n    // I.e. if foo:bar:abc is being registered and we only have foo in the structure,\n    // we need to also register foo:bar.\n    // Currently processed event name.\n    let name = eventName;\n    // Name of the event that is a child event for currently processed event.\n    let childEventName = null;\n    // Array containing all newly created specific events.\n    const newEventNodes = [];\n    // While loop can't check for ':' index because we have to handle generic events too.\n    // In each loop, we truncate event name, going from the most specific name to the generic one.\n    // I.e. foo:bar:abc -> foo:bar -> foo.\n    while (name !== '') {\n        if (events[name]) {\n            // If the currently processed event name is already registered, we can be sure\n            // that it already has all the structure created, so we can break the loop here\n            // as no more events need to be registered.\n            break;\n        }\n        // If this event is not yet registered, create a new object for it.\n        events[name] = makeEventNode();\n        // Add it to the array with newly created events.\n        newEventNodes.push(events[name]);\n        // Add previously processed event name as a child of this event.\n        if (childEventName) {\n            events[name].childEvents.push(childEventName);\n        }\n        childEventName = name;\n        // If `.lastIndexOf()` returns -1, `.substr()` will return '' which will break the loop.\n        name = name.substr(0, name.lastIndexOf(':'));\n    }\n    if (name !== '') {\n        // If name is not empty, we found an already registered event that was a parent of the\n        // event we wanted to register.\n        // Copy that event's callbacks to newly registered events.\n        for (const node of newEventNodes) {\n            node.callbacks = events[name].callbacks.slice();\n        }\n        // Add last newly created event to the already registered event.\n        events[name].childEvents.push(childEventName);\n    }\n}\n/**\n * Gets an array containing callbacks list for a given event and it's more specific events.\n * I.e. if given event is foo:bar and there is also foo:bar:abc event registered, this will\n * return callback list of foo:bar and foo:bar:abc (but not foo).\n */\nfunction getCallbacksListsForNamespace(source, eventName) {\n    const eventNode = getEvents(source)[eventName];\n    if (!eventNode) {\n        return [];\n    }\n    let callbacksLists = [eventNode.callbacks];\n    for (let i = 0; i < eventNode.childEvents.length; i++) {\n        const childCallbacksLists = getCallbacksListsForNamespace(source, eventNode.childEvents[i]);\n        callbacksLists = callbacksLists.concat(childCallbacksLists);\n    }\n    return callbacksLists;\n}\n/**\n * Get the list of callbacks for a given event, but only if there any callbacks have been registered.\n * If there are no callbacks registered for given event, it checks if this is a specific event and looks\n * for callbacks for it's more generic version.\n */\nfunction getCallbacksForEvent(source, eventName) {\n    let event;\n    if (!source._events || !(event = source._events[eventName]) || !event.callbacks.length) {\n        // There are no callbacks registered for specified eventName.\n        // But this could be a specific-type event that is in a namespace.\n        if (eventName.indexOf(':') > -1) {\n            // If the eventName is specific, try to find callback lists for more generic event.\n            return getCallbacksForEvent(source, eventName.substr(0, eventName.lastIndexOf(':')));\n        }\n        else {\n            // If this is a top-level generic event, return null;\n            return null;\n        }\n    }\n    return event.callbacks;\n}\n/**\n * Fires delegated events for given map of destinations.\n *\n * @param destinations A map containing `[ {@link module:utils/emittermixin~Emitter}, \"event name\" ]` pair destinations.\n * @param eventInfo The original event info object.\n * @param fireArgs Arguments the original event was fired with.\n */\nfunction fireDelegatedEvents(destinations, eventInfo, fireArgs) {\n    for (let [emitter, name] of destinations) {\n        if (!name) {\n            name = eventInfo.name;\n        }\n        else if (typeof name == 'function') {\n            name = name(eventInfo.name);\n        }\n        const delegatedInfo = new EventInfo(eventInfo.source, name);\n        delegatedInfo.path = [...eventInfo.path];\n        emitter.fire(delegatedInfo, ...fireArgs);\n    }\n}\n/**\n * Helper for registering event callback on the emitter.\n */\nfunction addEventListener(listener, emitter, event, callback, options) {\n    if (emitter._addEventListener) {\n        emitter._addEventListener(event, callback, options);\n    }\n    else {\n        // Allow listening on objects that do not implement Emitter interface.\n        // This is needed in some tests that are using mocks instead of the real objects with EmitterMixin mixed.\n        (listener._addEventListener).call(emitter, event, callback, options);\n    }\n}\n/**\n * Helper for removing event callback from the emitter.\n */\nfunction removeEventListener(listener, emitter, event, callback) {\n    if (emitter._removeEventListener) {\n        emitter._removeEventListener(event, callback);\n    }\n    else {\n        // Allow listening on objects that do not implement Emitter interface.\n        // This is needed in some tests that are using mocks instead of the real objects with EmitterMixin mixed.\n        listener._removeEventListener.call(emitter, event, callback);\n    }\n}\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* eslint-disable @typescript-eslint/unified-signatures */\n/**\n * @module utils/observablemixin\n */\nimport EmitterMixin from './emittermixin.js';\nimport CKEditorError from './ckeditorerror.js';\nimport { isObject } from 'lodash-es';\nconst observablePropertiesSymbol = Symbol('observableProperties');\nconst boundObservablesSymbol = Symbol('boundObservables');\nconst boundPropertiesSymbol = Symbol('boundProperties');\nconst decoratedMethods = Symbol('decoratedMethods');\nconst decoratedOriginal = Symbol('decoratedOriginal');\nconst defaultObservableClass = /* #__PURE__ */ ObservableMixin(/* #__PURE__ */ EmitterMixin());\nexport default function ObservableMixin(base) {\n    if (!base) {\n        return defaultObservableClass;\n    }\n    class Mixin extends base {\n        set(name, value) {\n            // If the first parameter is an Object, iterate over its properties.\n            if (isObject(name)) {\n                Object.keys(name).forEach(property => {\n                    this.set(property, name[property]);\n                }, this);\n                return;\n            }\n            initObservable(this);\n            const properties = this[observablePropertiesSymbol];\n            if ((name in this) && !properties.has(name)) {\n                /**\n                 * Cannot override an existing property.\n                 *\n                 * This error is thrown when trying to {@link module:utils/observablemixin~Observable#set set} a property with\n                 * a name of an already existing property. For example:\n                 *\n                 * ```ts\n                 * let observable = new Model();\n                 * observable.property = 1;\n                 * observable.set( 'property', 2 );\t\t\t// throws\n                 *\n                 * observable.set( 'property', 1 );\n                 * observable.set( 'property', 2 );\t\t\t// ok, because this is an existing property.\n                 * ```\n                 *\n                 * @error observable-set-cannot-override\n                 */\n                throw new CKEditorError('observable-set-cannot-override', this);\n            }\n            Object.defineProperty(this, name, {\n                enumerable: true,\n                configurable: true,\n                get() {\n                    return properties.get(name);\n                },\n                set(value) {\n                    const oldValue = properties.get(name);\n                    // Fire `set` event before the new value will be set to make it possible\n                    // to override observable property without affecting `change` event.\n                    // See https://github.com/ckeditor/ckeditor5-utils/issues/171.\n                    let newValue = this.fire(`set:${name}`, name, value, oldValue);\n                    if (newValue === undefined) {\n                        newValue = value;\n                    }\n                    // Allow undefined as an initial value like A.define( 'x', undefined ) (#132).\n                    // Note: When properties map has no such own property, then its value is undefined.\n                    if (oldValue !== newValue || !properties.has(name)) {\n                        properties.set(name, newValue);\n                        this.fire(`change:${name}`, name, newValue, oldValue);\n                    }\n                }\n            });\n            this[name] = value;\n        }\n        bind(...bindProperties) {\n            if (!bindProperties.length || !isStringArray(bindProperties)) {\n                /**\n                 * All properties must be strings.\n                 *\n                 * @error observable-bind-wrong-properties\n                 */\n                throw new CKEditorError('observable-bind-wrong-properties', this);\n            }\n            if ((new Set(bindProperties)).size !== bindProperties.length) {\n                /**\n                 * Properties must be unique.\n                 *\n                 * @error observable-bind-duplicate-properties\n                 */\n                throw new CKEditorError('observable-bind-duplicate-properties', this);\n            }\n            initObservable(this);\n            const boundProperties = this[boundPropertiesSymbol];\n            bindProperties.forEach(propertyName => {\n                if (boundProperties.has(propertyName)) {\n                    /**\n                     * Cannot bind the same property more than once.\n                     *\n                     * @error observable-bind-rebind\n                     */\n                    throw new CKEditorError('observable-bind-rebind', this);\n                }\n            });\n            const bindings = new Map();\n            bindProperties.forEach(a => {\n                const binding = { property: a, to: [] };\n                boundProperties.set(a, binding);\n                bindings.set(a, binding);\n            });\n            return {\n                to: bindTo,\n                toMany: bindToMany,\n                _observable: this,\n                _bindProperties: bindProperties,\n                _to: [],\n                _bindings: bindings\n            };\n        }\n        unbind(...unbindProperties) {\n            // Nothing to do here if not inited yet.\n            if (!(this[observablePropertiesSymbol])) {\n                return;\n            }\n            const boundProperties = this[boundPropertiesSymbol];\n            const boundObservables = this[boundObservablesSymbol];\n            if (unbindProperties.length) {\n                if (!isStringArray(unbindProperties)) {\n                    /**\n                     * Properties must be strings.\n                     *\n                     * @error observable-unbind-wrong-properties\n                     */\n                    throw new CKEditorError('observable-unbind-wrong-properties', this);\n                }\n                unbindProperties.forEach(propertyName => {\n                    const binding = boundProperties.get(propertyName);\n                    // Nothing to do if the binding is not defined\n                    if (!binding) {\n                        return;\n                    }\n                    binding.to.forEach(([toObservable, toProperty]) => {\n                        const toProperties = boundObservables.get(toObservable);\n                        const toPropertyBindings = toProperties[toProperty];\n                        toPropertyBindings.delete(binding);\n                        if (!toPropertyBindings.size) {\n                            delete toProperties[toProperty];\n                        }\n                        if (!Object.keys(toProperties).length) {\n                            boundObservables.delete(toObservable);\n                            this.stopListening(toObservable, 'change');\n                        }\n                    });\n                    boundProperties.delete(propertyName);\n                });\n            }\n            else {\n                boundObservables.forEach((bindings, boundObservable) => {\n                    this.stopListening(boundObservable, 'change');\n                });\n                boundObservables.clear();\n                boundProperties.clear();\n            }\n        }\n        decorate(methodName) {\n            initObservable(this);\n            const originalMethod = this[methodName];\n            if (!originalMethod) {\n                /**\n                 * Cannot decorate an undefined method.\n                 *\n                 * @error observablemixin-cannot-decorate-undefined\n                 * @param {Object} object The object which method should be decorated.\n                 * @param {String} methodName Name of the method which does not exist.\n                 */\n                throw new CKEditorError('observablemixin-cannot-decorate-undefined', this, { object: this, methodName });\n            }\n            this.on(methodName, (evt, args) => {\n                evt.return = originalMethod.apply(this, args);\n            });\n            this[methodName] = function (...args) {\n                return this.fire(methodName, args);\n            };\n            this[methodName][decoratedOriginal] = originalMethod;\n            if (!this[decoratedMethods]) {\n                this[decoratedMethods] = [];\n            }\n            this[decoratedMethods].push(methodName);\n        }\n        // Override the EmitterMixin stopListening method to be able to clean (and restore) decorated methods.\n        // This is needed in case of:\n        //  1. Have x.foo() decorated.\n        //  2. Call x.stopListening()\n        //  3. Call x.foo(). Problem: nothing happens (the original foo() method is not executed)\n        stopListening(emitter, event, callback) {\n            // Removing all listeners so let's clean the decorated methods to the original state.\n            if (!emitter && this[decoratedMethods]) {\n                for (const methodName of this[decoratedMethods]) {\n                    this[methodName] = this[methodName][decoratedOriginal];\n                }\n                delete this[decoratedMethods];\n            }\n            super.stopListening(emitter, event, callback);\n        }\n    }\n    return Mixin;\n}\n// Backward compatibility with `mix`\n([\n    'set', 'bind', 'unbind', 'decorate',\n    'on', 'once', 'off', 'listenTo',\n    'stopListening', 'fire', 'delegate', 'stopDelegating',\n    '_addEventListener', '_removeEventListener'\n]).forEach(key => {\n    ObservableMixin[key] = defaultObservableClass.prototype[key];\n});\n// Init symbol properties needed for the observable mechanism to work.\nfunction initObservable(observable) {\n    // Do nothing if already inited.\n    if (observable[observablePropertiesSymbol]) {\n        return;\n    }\n    // The internal hash containing the observable's state.\n    Object.defineProperty(observable, observablePropertiesSymbol, {\n        value: new Map()\n    });\n    // Map containing bindings to external observables. It shares the binding objects\n    // (`{ observable: A, property: 'a', to: ... }`) with {@link module:utils/observablemixin~Observable#_boundProperties} and\n    // it is used to observe external observables to update own properties accordingly.\n    // See {@link module:utils/observablemixin~Observable#bind}.\n    //\n    //\t\tA.bind( 'a', 'b', 'c' ).to( B, 'x', 'y', 'x' );\n    //\t\tconsole.log( A._boundObservables );\n    //\n    //\t\t\tMap( {\n    //\t\t\t\tB: {\n    //\t\t\t\t\tx: Set( [\n    //\t\t\t\t\t\t{ observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n    //\t\t\t\t\t\t{ observable: A, property: 'c', to: [ [ B, 'x' ] ] }\n    //\t\t\t\t\t] ),\n    //\t\t\t\t\ty: Set( [\n    //\t\t\t\t\t\t{ observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n    //\t\t\t\t\t] )\n    //\t\t\t\t}\n    //\t\t\t} )\n    //\n    //\t\tA.bind( 'd' ).to( B, 'z' ).to( C, 'w' ).as( callback );\n    //\t\tconsole.log( A._boundObservables );\n    //\n    //\t\t\tMap( {\n    //\t\t\t\tB: {\n    //\t\t\t\t\tx: Set( [\n    //\t\t\t\t\t\t{ observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n    //\t\t\t\t\t\t{ observable: A, property: 'c', to: [ [ B, 'x' ] ] }\n    //\t\t\t\t\t] ),\n    //\t\t\t\t\ty: Set( [\n    //\t\t\t\t\t\t{ observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n    //\t\t\t\t\t] ),\n    //\t\t\t\t\tz: Set( [\n    //\t\t\t\t\t\t{ observable: A, property: 'd', to: [ [ B, 'z' ], [ C, 'w' ] ], callback: callback }\n    //\t\t\t\t\t] )\n    //\t\t\t\t},\n    //\t\t\t\tC: {\n    //\t\t\t\t\tw: Set( [\n    //\t\t\t\t\t\t{ observable: A, property: 'd', to: [ [ B, 'z' ], [ C, 'w' ] ], callback: callback }\n    //\t\t\t\t\t] )\n    //\t\t\t\t}\n    //\t\t\t} )\n    //\n    Object.defineProperty(observable, boundObservablesSymbol, {\n        value: new Map()\n    });\n    // Object that stores which properties of this observable are bound and how. It shares\n    // the binding objects (`{ observable: A, property: 'a', to: ... }`) with\n    // {@link module:utils/observablemixin~Observable#_boundObservables}. This data structure is\n    // a reverse of {@link module:utils/observablemixin~Observable#_boundObservables} and it is helpful for\n    // {@link module:utils/observablemixin~Observable#unbind}.\n    //\n    // See {@link module:utils/observablemixin~Observable#bind}.\n    //\n    //\t\tA.bind( 'a', 'b', 'c' ).to( B, 'x', 'y', 'x' );\n    //\t\tconsole.log( A._boundProperties );\n    //\n    //\t\t\tMap( {\n    //\t\t\t\ta: { observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n    //\t\t\t\tb: { observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n    //\t\t\t\tc: { observable: A, property: 'c', to: [ [ B, 'x' ] ] }\n    //\t\t\t} )\n    //\n    //\t\tA.bind( 'd' ).to( B, 'z' ).to( C, 'w' ).as( callback );\n    //\t\tconsole.log( A._boundProperties );\n    //\n    //\t\t\tMap( {\n    //\t\t\t\ta: { observable: A, property: 'a', to: [ [ B, 'x' ] ] },\n    //\t\t\t\tb: { observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n    //\t\t\t\tc: { observable: A, property: 'c', to: [ [ B, 'x' ] ] },\n    //\t\t\t\td: { observable: A, property: 'd', to: [ [ B, 'z' ], [ C, 'w' ] ], callback: callback }\n    //\t\t\t} )\n    Object.defineProperty(observable, boundPropertiesSymbol, {\n        value: new Map()\n    });\n}\n/**\n * A chaining for {@link module:utils/observablemixin~Observable#bind} providing `.to()` interface.\n *\n * @param args Arguments of the `.to( args )` binding.\n */\nfunction bindTo(...args) {\n    const parsedArgs = parseBindToArgs(...args);\n    const bindingsKeys = Array.from(this._bindings.keys());\n    const numberOfBindings = bindingsKeys.length;\n    // Eliminate A.bind( 'x' ).to( B, C )\n    if (!parsedArgs.callback && parsedArgs.to.length > 1) {\n        /**\n         * Binding multiple observables only possible with callback.\n         *\n         * @error observable-bind-to-no-callback\n         */\n        throw new CKEditorError('observable-bind-to-no-callback', this);\n    }\n    // Eliminate A.bind( 'x', 'y' ).to( B, callback )\n    if (numberOfBindings > 1 && parsedArgs.callback) {\n        /**\n         * Cannot bind multiple properties and use a callback in one binding.\n         *\n         * @error observable-bind-to-extra-callback\n         */\n        throw new CKEditorError('observable-bind-to-extra-callback', this);\n    }\n    parsedArgs.to.forEach(to => {\n        // Eliminate A.bind( 'x', 'y' ).to( B, 'a' )\n        if (to.properties.length && to.properties.length !== numberOfBindings) {\n            /**\n             * The number of properties must match.\n             *\n             * @error observable-bind-to-properties-length\n             */\n            throw new CKEditorError('observable-bind-to-properties-length', this);\n        }\n        // When no to.properties specified, observing source properties instead i.e.\n        // A.bind( 'x', 'y' ).to( B ) -> Observe B.x and B.y\n        if (!to.properties.length) {\n            to.properties = this._bindProperties;\n        }\n    });\n    this._to = parsedArgs.to;\n    // Fill {@link BindChain#_bindings} with callback. When the callback is set there's only one binding.\n    if (parsedArgs.callback) {\n        this._bindings.get(bindingsKeys[0]).callback = parsedArgs.callback;\n    }\n    attachBindToListeners(this._observable, this._to);\n    // Update observable._boundProperties and observable._boundObservables.\n    updateBindToBound(this);\n    // Set initial values of bound properties.\n    this._bindProperties.forEach(propertyName => {\n        updateBoundObservableProperty(this._observable, propertyName);\n    });\n}\n/**\n * Binds to an attribute in a set of iterable observables.\n */\nfunction bindToMany(observables, attribute, callback) {\n    if (this._bindings.size > 1) {\n        /**\n         * Binding one attribute to many observables only possible with one attribute.\n         *\n         * @error observable-bind-to-many-not-one-binding\n         */\n        throw new CKEditorError('observable-bind-to-many-not-one-binding', this);\n    }\n    this.to(\n    // Bind to #attribute of each observable...\n    ...getBindingTargets(observables, attribute), \n    // ...using given callback to parse attribute values.\n    callback);\n}\n/**\n * Returns an array of binding components for\n * {@link Observable#bind} from a set of iterable observables.\n */\nfunction getBindingTargets(observables, attribute) {\n    const observableAndAttributePairs = observables.map(observable => [observable, attribute]);\n    // Merge pairs to one-dimension array of observables and attributes.\n    return Array.prototype.concat.apply([], observableAndAttributePairs);\n}\n/**\n * Check if all entries of the array are of `String` type.\n */\nfunction isStringArray(arr) {\n    return arr.every(a => typeof a == 'string');\n}\n/**\n * Parses and validates {@link Observable#bind}`.to( args )` arguments and returns\n * an object with a parsed structure. For example\n *\n * ```ts\n * A.bind( 'x' ).to( B, 'a', C, 'b', call );\n * ```\n *\n * becomes\n *\n * ```ts\n * {\n * \tto: [\n * \t\t{ observable: B, properties: [ 'a' ] },\n * \t\t{ observable: C, properties: [ 'b' ] },\n * \t],\n * \tcallback: call\n * }\n *\n * @param args Arguments of {@link Observable#bind}`.to( args )`.\n */\nfunction parseBindToArgs(...args) {\n    // Eliminate A.bind( 'x' ).to()\n    if (!args.length) {\n        /**\n         * Invalid argument syntax in `to()`.\n         *\n         * @error observable-bind-to-parse-error\n         */\n        throw new CKEditorError('observable-bind-to-parse-error', null);\n    }\n    const parsed = { to: [] };\n    let lastObservable;\n    if (typeof args[args.length - 1] == 'function') {\n        parsed.callback = args.pop();\n    }\n    args.forEach(a => {\n        if (typeof a == 'string') {\n            lastObservable.properties.push(a);\n        }\n        else if (typeof a == 'object') {\n            lastObservable = { observable: a, properties: [] };\n            parsed.to.push(lastObservable);\n        }\n        else {\n            throw new CKEditorError('observable-bind-to-parse-error', null);\n        }\n    });\n    return parsed;\n}\n/**\n * Synchronizes {@link module:utils/observable#_boundObservables} with {@link Binding}.\n *\n * @param binding A binding to store in {@link Observable#_boundObservables}.\n * @param toObservable A observable, which is a new component of `binding`.\n * @param toPropertyName A name of `toObservable`'s property, a new component of the `binding`.\n */\nfunction updateBoundObservables(observable, binding, toObservable, toPropertyName) {\n    const boundObservables = observable[boundObservablesSymbol];\n    const bindingsToObservable = boundObservables.get(toObservable);\n    const bindings = bindingsToObservable || {};\n    if (!bindings[toPropertyName]) {\n        bindings[toPropertyName] = new Set();\n    }\n    // Pass the binding to a corresponding Set in `observable._boundObservables`.\n    bindings[toPropertyName].add(binding);\n    if (!bindingsToObservable) {\n        boundObservables.set(toObservable, bindings);\n    }\n}\n/**\n * Synchronizes {@link Observable#_boundProperties} and {@link Observable#_boundObservables}\n * with {@link BindChain}.\n *\n * Assuming the following binding being created\n *\n * ```ts\n * A.bind( 'a', 'b' ).to( B, 'x', 'y' );\n * ```\n *\n * the following bindings were initialized by {@link Observable#bind} in {@link BindChain#_bindings}:\n *\n * ```ts\n * {\n * \ta: { observable: A, property: 'a', to: [] },\n * \tb: { observable: A, property: 'b', to: [] },\n * }\n * ```\n *\n * Iterate over all bindings in this chain and fill their `to` properties with\n * corresponding to( ... ) arguments (components of the binding), so\n *\n * ```ts\n * {\n * \ta: { observable: A, property: 'a', to: [ B, 'x' ] },\n * \tb: { observable: A, property: 'b', to: [ B, 'y' ] },\n * }\n * ```\n *\n * Then update the structure of {@link Observable#_boundObservables} with updated\n * binding, so it becomes:\n *\n * ```ts\n * Map( {\n * \tB: {\n * \t\tx: Set( [\n * \t\t\t{ observable: A, property: 'a', to: [ [ B, 'x' ] ] }\n * \t\t] ),\n * \t\ty: Set( [\n * \t\t\t{ observable: A, property: 'b', to: [ [ B, 'y' ] ] },\n * \t\t] )\n * \t}\n * } )\n * ```\n *\n * @param chain The binding initialized by {@link Observable#bind}.\n */\nfunction updateBindToBound(chain) {\n    let toProperty;\n    chain._bindings.forEach((binding, propertyName) => {\n        // Note: For a binding without a callback, this will run only once\n        // like in A.bind( 'x', 'y' ).to( B, 'a', 'b' )\n        // TODO: ES6 destructuring.\n        chain._to.forEach(to => {\n            toProperty = to.properties[binding.callback ? 0 : chain._bindProperties.indexOf(propertyName)];\n            binding.to.push([to.observable, toProperty]);\n            updateBoundObservables(chain._observable, binding, to.observable, toProperty);\n        });\n    });\n}\n/**\n * Updates an property of a {@link Observable} with a value\n * determined by an entry in {@link Observable#_boundProperties}.\n *\n * @param observable A observable which property is to be updated.\n * @param propertyName An property to be updated.\n */\nfunction updateBoundObservableProperty(observable, propertyName) {\n    const boundProperties = observable[boundPropertiesSymbol];\n    const binding = boundProperties.get(propertyName);\n    let propertyValue;\n    // When a binding with callback is created like\n    //\n    // \t\tA.bind( 'a' ).to( B, 'b', C, 'c', callback );\n    //\n    // collect B.b and C.c, then pass them to callback to set A.a.\n    if (binding.callback) {\n        propertyValue = binding.callback.apply(observable, binding.to.map(to => to[0][to[1]]));\n    }\n    else {\n        propertyValue = binding.to[0];\n        propertyValue = propertyValue[0][propertyValue[1]];\n    }\n    if (Object.prototype.hasOwnProperty.call(observable, propertyName)) {\n        observable[propertyName] = propertyValue;\n    }\n    else {\n        observable.set(propertyName, propertyValue);\n    }\n}\n/**\n * Starts listening to changes in {@link BindChain._to} observables to update\n * {@link BindChain._observable} {@link BindChain._bindProperties}. Also sets the\n * initial state of {@link BindChain._observable}.\n *\n * @param chain The chain initialized by {@link Observable#bind}.\n */\nfunction attachBindToListeners(observable, toBindings) {\n    toBindings.forEach(to => {\n        const boundObservables = observable[boundObservablesSymbol];\n        let bindings;\n        // If there's already a chain between the observables (`observable` listens to\n        // `to.observable`), there's no need to create another `change` event listener.\n        if (!boundObservables.get(to.observable)) {\n            observable.listenTo(to.observable, 'change', (evt, propertyName) => {\n                bindings = boundObservables.get(to.observable)[propertyName];\n                // Note: to.observable will fire for any property change, react\n                // to changes of properties which are bound only.\n                if (bindings) {\n                    bindings.forEach(binding => {\n                        updateBoundObservableProperty(observable, binding.property);\n                    });\n                }\n            });\n        }\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/elementreplacer\n */\n/**\n * Utility class allowing to hide existing HTML elements or replace them with given ones in a way that doesn't remove\n * the original elements from the DOM.\n */\nexport default class ElementReplacer {\n    constructor() {\n        this._replacedElements = [];\n    }\n    /**\n     * Hides the `element` and, if specified, inserts the the given element next to it.\n     *\n     * The effect of this method can be reverted by {@link #restore}.\n     *\n     * @param element The element to replace.\n     * @param newElement The replacement element. If not passed, then the `element` will just be hidden.\n     */\n    replace(element, newElement) {\n        this._replacedElements.push({ element, newElement });\n        element.style.display = 'none';\n        if (newElement) {\n            element.parentNode.insertBefore(newElement, element.nextSibling);\n        }\n    }\n    /**\n     * Restores what {@link #replace} did.\n     */\n    restore() {\n        this._replacedElements.forEach(({ element, newElement }) => {\n            element.style.display = '';\n            if (newElement) {\n                newElement.remove();\n            }\n        });\n        this._replacedElements = [];\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/count\n */\n/**\n * Returns the number of items return by the iterator.\n *\n * ```ts\n * count( [ 1, 2, 3, 4, 5 ] ); // 5;\n * ```\n *\n * @param iterable Any iterable.\n * @returns Number of items returned by that iterable.\n */\nexport default function count(iterable) {\n    let count = 0;\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    for (const _ of iterable) {\n        count++;\n    }\n    return count;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/comparearrays\n */\n/**\n * Compares how given arrays relate to each other. One array can be: same as another array, prefix of another array\n * or completely different. If arrays are different, first index at which they differ is returned. Otherwise,\n * a flag specifying the relation is returned. Flags are negative numbers, so whenever a number >= 0 is returned\n * it means that arrays differ.\n *\n * ```ts\n * compareArrays( [ 0, 2 ], [ 0, 2 ] );\t\t// 'same'\n * compareArrays( [ 0, 2 ], [ 0, 2, 1 ] );\t\t// 'prefix'\n * compareArrays( [ 0, 2 ], [ 0 ] );\t\t\t// 'extension'\n * compareArrays( [ 0, 2 ], [ 1, 2 ] );\t\t// 0\n * compareArrays( [ 0, 2 ], [ 0, 1 ] );\t\t// 1\n * ```\n *\n * @param a Array that is compared.\n * @param b Array to compare with.\n * @returns How array `a` is related to `b`.\n */\nexport default function compareArrays(a, b) {\n    const minLen = Math.min(a.length, b.length);\n    for (let i = 0; i < minLen; i++) {\n        if (a[i] != b[i]) {\n            // The arrays are different.\n            return i;\n        }\n    }\n    // Both arrays were same at all points.\n    if (a.length == b.length) {\n        // If their length is also same, they are the same.\n        return 'same';\n    }\n    else if (a.length < b.length) {\n        // Compared array is shorter so it is a prefix of the other array.\n        return 'prefix';\n    }\n    else {\n        // Compared array is longer so it is an extension of the other array.\n        return 'extension';\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/isiterable\n */\n/**\n * Checks if value implements iterator interface.\n *\n * @param value The value to check.\n * @returns True if value implements iterator interface.\n */\nexport default function isIterable(value) {\n    return !!(value && value[Symbol.iterator]);\n}\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n", "import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n", "import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n", "import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/createelement\n */\nimport isIterable from '../isiterable.js';\nimport { isString } from 'lodash-es';\n/**\n * Creates an HTML or SVG element with attributes and children elements.\n *\n * ```ts\n * createElement( document, 'p' ); // <p>\n * createElement( document, 'mask', { xmlns: 'http://www.w3.org/2000/svg' } ); // <mask>\n * ```\n *\n * @param doc Document used to create the element.\n * @param name Name of the element.\n * @param attributes Object where keys represent attribute keys and values represent attribute values.\n * @param children Child or any iterable of children. Strings will be automatically turned into Text nodes.\n * @returns HTML or SVG element.\n */\nexport default function createElement(doc, name, attributes = {}, children = []) {\n    const namespace = attributes && attributes.xmlns;\n    const element = namespace ? doc.createElementNS(namespace, name) : doc.createElement(name);\n    for (const key in attributes) {\n        element.setAttribute(key, attributes[key]);\n    }\n    if (isString(children) || !isIterable(children)) {\n        children = [children];\n    }\n    for (let child of children) {\n        if (isString(child)) {\n            child = doc.createTextNode(child);\n        }\n        element.appendChild(child);\n    }\n    return element;\n}\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n", "import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n", "import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n", "import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n", "import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n", "import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n", "import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n", "import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n", "import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n", "import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n", "import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n", "import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n", "import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n", "import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n", "import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n", "import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n", "import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n", "import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n", "import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n", "import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n", "import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n", "import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n", "import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n", "import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n", "import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n", "import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n", "import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n", "import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n", "import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n", "import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n", "import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n", "import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n", "import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n", "import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n", "import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n", "import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n", "import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n", "import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n", "import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n", "import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n", "import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n", "import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n", "import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n", "import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n", "import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n *   if (_.isElement(value)) {\n *     return value.cloneNode(true);\n *   }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\nfunction cloneDeepWith(value, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n}\n\nexport default cloneDeepWith;\n", "import isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\n\n/**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\nfunction isElement(value) {\n  return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n}\n\nexport default isElement;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/config\n */\nimport { isPlainObject, isElement, cloneDeepWith } from 'lodash-es';\n/**\n * Handles a configuration dictionary.\n *\n * @typeParam Cfg A type of the configuration dictionary.\n */\nexport default class Config {\n    /**\n     * Creates an instance of the {@link ~Config} class.\n     *\n     * @param configurations The initial configurations to be set. Usually, provided by the user.\n     * @param defaultConfigurations The default configurations. Usually, provided by the system.\n     */\n    constructor(configurations, defaultConfigurations) {\n        this._config = Object.create(null);\n        // Set default configuration.\n        if (defaultConfigurations) {\n            // Clone the configuration to make sure that the properties will not be shared\n            // between editors and make the watchdog feature work correctly.\n            this.define(cloneConfig(defaultConfigurations));\n        }\n        // Set initial configuration.\n        if (configurations) {\n            this._setObjectToTarget(this._config, configurations);\n        }\n    }\n    set(name, value) {\n        this._setToTarget(this._config, name, value);\n    }\n    define(name, value) {\n        const isDefine = true;\n        this._setToTarget(this._config, name, value, isDefine);\n    }\n    /**\n     * Gets the value for a configuration entry.\n     *\n     * ```ts\n     * config.get( 'name' );\n     * ```\n     *\n     * Deep configurations can be retrieved by separating each part with a dot.\n     *\n     * ```ts\n     * config.get( 'toolbar.collapsed' );\n     * ```\n     *\n     * @param name The configuration name. Configuration names are case-sensitive.\n     * @returns The configuration value or `undefined` if the configuration entry was not found.\n     */\n    get(name) {\n        return this._getFromSource(this._config, name);\n    }\n    /**\n     * Iterates over all top level configuration names.\n     */\n    *names() {\n        for (const name of Object.keys(this._config)) {\n            yield name;\n        }\n    }\n    /**\n     * Saves passed configuration to the specified target (nested object).\n     *\n     * @param target Nested config object.\n     * @param name The configuration name or an object from which take properties as\n     * configuration entries. Configuration names are case-sensitive.\n     * @param value The configuration value. Used if a name is passed.\n     * @param isDefine Define if passed configuration should overwrite existing one.\n     */\n    _setToTarget(target, name, value, isDefine = false) {\n        // In case of an object, iterate through it and call `_setToTarget` again for each property.\n        if (isPlainObject(name)) {\n            this._setObjectToTarget(target, name, isDefine);\n            return;\n        }\n        // The configuration name should be split into parts if it has dots. E.g. `resize.width` -> [`resize`, `width`].\n        const parts = name.split('.');\n        // Take the name of the configuration out of the parts. E.g. `resize.width` -> `width`.\n        name = parts.pop();\n        // Iterate over parts to check if currently stored configuration has proper structure.\n        for (const part of parts) {\n            // If there is no object for specified part then create one.\n            if (!isPlainObject(target[part])) {\n                target[part] = Object.create(null);\n            }\n            // Nested object becomes a target.\n            target = target[part];\n        }\n        // In case of value is an object.\n        if (isPlainObject(value)) {\n            // We take care of proper config structure.\n            if (!isPlainObject(target[name])) {\n                target[name] = Object.create(null);\n            }\n            target = target[name];\n            // And iterate through this object calling `_setToTarget` again for each property.\n            this._setObjectToTarget(target, value, isDefine);\n            return;\n        }\n        // Do nothing if we are defining configuration for non empty name.\n        if (isDefine && typeof target[name] != 'undefined') {\n            return;\n        }\n        target[name] = value;\n    }\n    /**\n     * Get specified configuration from specified source (nested object).\n     *\n     * @param source level of nested object.\n     * @param name The configuration name. Configuration names are case-sensitive.\n     * @returns The configuration value or `undefined` if the configuration entry was not found.\n     */\n    _getFromSource(source, name) {\n        // The configuration name should be split into parts if it has dots. E.g. `resize.width` -> [`resize`, `width`].\n        const parts = name.split('.');\n        // Take the name of the configuration out of the parts. E.g. `resize.width` -> `width`.\n        name = parts.pop();\n        // Iterate over parts to check if currently stored configuration has proper structure.\n        for (const part of parts) {\n            if (!isPlainObject(source[part])) {\n                source = null;\n                break;\n            }\n            // Nested object becomes a source.\n            source = source[part];\n        }\n        // Always returns undefined for non existing configuration.\n        return source ? cloneConfig(source[name]) : undefined;\n    }\n    /**\n     * Iterates through passed object and calls {@link #_setToTarget} method with object key and value for each property.\n     *\n     * @param target Nested config object.\n     * @param configuration Configuration data set\n     * @param isDefine Defines if passed configuration is default configuration or not.\n     */\n    _setObjectToTarget(target, configuration, isDefine) {\n        Object.keys(configuration).forEach(key => {\n            this._setToTarget(target, key, configuration[key], isDefine);\n        });\n    }\n}\n/**\n * Clones configuration object or value.\n */\nfunction cloneConfig(source) {\n    return cloneDeepWith(source, leaveItemReferences);\n}\n/**\n * A customized function for cloneDeepWith.\n * In case if it's a DOM Element it will leave references to DOM Elements instead of cloning them.\n * If it's a function it will leave reference to actuall function.\n */\nfunction leaveItemReferences(value) {\n    return isElement(value) || typeof value === 'function' ? value : undefined;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/isnode\n */\n/**\n * Checks if the object is a native DOM Node.\n */\nexport default function isNode(obj) {\n    if (obj) {\n        if (obj.defaultView) {\n            return obj instanceof obj.defaultView.Document;\n        }\n        else if (obj.ownerDocument && obj.ownerDocument.defaultView) {\n            return obj instanceof obj.ownerDocument.defaultView.Node;\n        }\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/iswindow\n */\n/**\n * Checks if the object is a native DOM Window.\n */\nexport default function isWindow(obj) {\n    const stringifiedObject = Object.prototype.toString.apply(obj);\n    // Returns `true` for the `window` object in browser environments.\n    if (stringifiedObject == '[object Window]') {\n        return true;\n    }\n    // Returns `true` for the `window` object in the Electron environment.\n    if (stringifiedObject == '[object global]') {\n        return true;\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/emittermixin\n */\nimport EmitterMixin, { _getEmitterListenedTo, _setEmitterId } from '../emittermixin.js';\nimport uid from '../uid.js';\nimport isNode from './isnode.js';\nimport isWindow from './iswindow.js';\nconst defaultEmitterClass = /* #__PURE__ */ DomEmitterMixin(/* #__PURE__ */ EmitterMixin());\nexport default function DomEmitterMixin(base) {\n    if (!base) {\n        return defaultEmitterClass;\n    }\n    class Mixin extends base {\n        listenTo(emitter, event, callback, options = {}) {\n            // Check if emitter is an instance of DOM Node. If so, use corresponding ProxyEmitter (or create one if not existing).\n            if (isNode(emitter) || isWindow(emitter)) {\n                const proxyOptions = {\n                    capture: !!options.useCapture,\n                    passive: !!options.usePassive\n                };\n                const proxyEmitter = this._getProxyEmitter(emitter, proxyOptions) || new ProxyEmitter(emitter, proxyOptions);\n                this.listenTo(proxyEmitter, event, callback, options);\n            }\n            else {\n                // Execute parent class method with Emitter (or ProxyEmitter) instance.\n                super.listenTo(emitter, event, callback, options);\n            }\n        }\n        stopListening(emitter, event, callback) {\n            // Check if the emitter is an instance of DOM Node. If so, forward the call to the corresponding ProxyEmitters.\n            if (isNode(emitter) || isWindow(emitter)) {\n                const proxyEmitters = this._getAllProxyEmitters(emitter);\n                for (const proxy of proxyEmitters) {\n                    this.stopListening(proxy, event, callback);\n                }\n            }\n            else {\n                // Execute parent class method with Emitter (or ProxyEmitter) instance.\n                super.stopListening(emitter, event, callback);\n            }\n        }\n        /**\n         * Retrieves ProxyEmitter instance for given DOM Node residing in this Host and given options.\n         *\n         * @param node DOM Node of the ProxyEmitter.\n         * @param options Additional options.\n         * @param options.useCapture Indicates that events of this type will be dispatched to the registered\n         * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n         * @param options.usePassive Indicates that the function specified by listener will never call preventDefault()\n         * and prevents blocking browser's main thread by this event handler.\n         * @returns ProxyEmitter instance bound to the DOM Node.\n         */\n        _getProxyEmitter(node, options) {\n            return _getEmitterListenedTo(this, getProxyEmitterId(node, options));\n        }\n        /**\n         * Retrieves all the ProxyEmitter instances for given DOM Node residing in this Host.\n         *\n         * @param node DOM Node of the ProxyEmitter.\n         */\n        _getAllProxyEmitters(node) {\n            return [\n                { capture: false, passive: false },\n                { capture: false, passive: true },\n                { capture: true, passive: false },\n                { capture: true, passive: true }\n            ].map(options => this._getProxyEmitter(node, options)).filter(proxy => !!proxy);\n        }\n    }\n    return Mixin;\n}\n// Backward compatibility with `mix`\n([\n    '_getProxyEmitter', '_getAllProxyEmitters',\n    'on', 'once', 'off', 'listenTo',\n    'stopListening', 'fire', 'delegate', 'stopDelegating',\n    '_addEventListener', '_removeEventListener'\n]).forEach(key => {\n    DomEmitterMixin[key] = defaultEmitterClass.prototype[key];\n});\n/**\n * Creates a ProxyEmitter instance. Such an instance is a bridge between a DOM Node firing events\n * and any Host listening to them. It is backwards compatible with {@link module:utils/emittermixin~Emitter#on}.\n * There is a separate instance for each combination of modes (useCapture & usePassive). The mode is concatenated with\n * UID stored in HTMLElement to give each instance unique identifier.\n *\n *                                  listenTo( click, ... )\n *                    +-----------------------------------------+\n *                    |              stopListening( ... )       |\n *     +----------------------------+                           |             addEventListener( click, ... )\n *     | Host                       |                           |   +---------------------------------------------+\n *     +----------------------------+                           |   |       removeEventListener( click, ... )     |\n *     | _listeningTo: {            |                +----------v-------------+                                   |\n *     |   UID+mode: {              |                | ProxyEmitter           |                                   |\n *     |     emitter: ProxyEmitter, |                +------------------------+                      +------------v----------+\n *     |     callbacks: {           |                | events: {              |                      | Node (HTMLElement)    |\n *     |       click: [ callbacks ] |                |   click: [ callbacks ] |                      +-----------------------+\n *     |     }                      |                | },                     |                      | data-ck-expando: UID  |\n *     |   }                        |                | _domNode: Node,        |                      +-----------------------+\n *     | }                          |                | _domListeners: {},     |                                   |\n *     | +------------------------+ |                | _emitterId: UID+mode   |                                   |\n *     | | DomEmitterMixin        | |                +--------------^---------+                                   |\n *     | +------------------------+ |                           |   |                                             |\n *     +--------------^-------------+                           |   +---------------------------------------------+\n *                    |                                         |                  click (DOM Event)\n *                    +-----------------------------------------+\n *                                fire( click, DOM Event )\n */\nclass ProxyEmitter extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * @param node DOM Node that fires events.\n     * @param options Additional options.\n     * @param options.useCapture Indicates that events of this type will be dispatched to the registered\n     * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n     * @param options.usePassive Indicates that the function specified by listener will never call preventDefault()\n     * and prevents blocking browser's main thread by this event handler.\n     */\n    constructor(node, options) {\n        super();\n        // Set emitter ID to match DOM Node \"expando\" property.\n        _setEmitterId(this, getProxyEmitterId(node, options));\n        // Remember the DOM Node this ProxyEmitter is bound to.\n        this._domNode = node;\n        // And given options.\n        this._options = options;\n    }\n    /**\n     * Registers a callback function to be executed when an event is fired.\n     *\n     * It attaches a native DOM listener to the DOM Node. When fired,\n     * a corresponding Emitter event will also fire with DOM Event object as an argument.\n     *\n     * **Note**: This is automatically called by the\n     * {@link module:utils/emittermixin~Emitter#listenTo `Emitter#listenTo()`}.\n     *\n     * @param event The name of the event.\n     */\n    attach(event) {\n        // If the DOM Listener for given event already exist it is pointless\n        // to attach another one.\n        if (this._domListeners && this._domListeners[event]) {\n            return;\n        }\n        const domListener = this._createDomListener(event);\n        // Attach the native DOM listener to DOM Node.\n        this._domNode.addEventListener(event, domListener, this._options);\n        if (!this._domListeners) {\n            this._domListeners = {};\n        }\n        // Store the native DOM listener in this ProxyEmitter. It will be helpful\n        // when stopping listening to the event.\n        this._domListeners[event] = domListener;\n    }\n    /**\n     * Stops executing the callback on the given event.\n     *\n     * **Note**: This is automatically called by the\n     * {@link module:utils/emittermixin~Emitter#stopListening `Emitter#stopListening()`}.\n     *\n     * @param event The name of the event.\n     */\n    detach(event) {\n        let events;\n        // Remove native DOM listeners which are orphans. If no callbacks\n        // are awaiting given event, detach native DOM listener from DOM Node.\n        // See: {@link attach}.\n        if (this._domListeners[event] && (!(events = this._events[event]) || !events.callbacks.length)) {\n            this._domListeners[event].removeListener();\n        }\n    }\n    /**\n     * Adds callback to emitter for given event.\n     *\n     * @internal\n     * @param event The name of the event.\n     * @param callback The function to be called on event.\n     * @param options Additional options.\n     */\n    _addEventListener(event, callback, options) {\n        this.attach(event);\n        EmitterMixin().prototype._addEventListener.call(this, event, callback, options);\n    }\n    /**\n     * Removes callback from emitter for given event.\n     *\n     * @internal\n     * @param event The name of the event.\n     * @param callback The function to stop being called.\n     */\n    _removeEventListener(event, callback) {\n        EmitterMixin().prototype._removeEventListener.call(this, event, callback);\n        this.detach(event);\n    }\n    /**\n     * Creates a native DOM listener callback. When the native DOM event\n     * is fired it will fire corresponding event on this ProxyEmitter.\n     * Note: A native DOM Event is passed as an argument.\n     *\n     * @param event The name of the event.\n     * @returns The DOM listener callback.\n     */\n    _createDomListener(event) {\n        const domListener = (domEvt) => {\n            this.fire(event, domEvt);\n        };\n        // Supply the DOM listener callback with a function that will help\n        // detach it from the DOM Node, when it is no longer necessary.\n        // See: {@link detach}.\n        domListener.removeListener = () => {\n            this._domNode.removeEventListener(event, domListener, this._options);\n            delete this._domListeners[event];\n        };\n        return domListener;\n    }\n}\n/**\n * Gets an unique DOM Node identifier. The identifier will be set if not defined.\n *\n * @returns UID for given DOM Node.\n */\nfunction getNodeUID(node) {\n    return node['data-ck-expando'] || (node['data-ck-expando'] = uid());\n}\n/**\n * Gets id of the ProxyEmitter for the given node.\n */\nfunction getProxyEmitterId(node, options) {\n    let id = getNodeUID(node);\n    for (const option of Object.keys(options).sort()) {\n        if (options[option]) {\n            id += '-' + option;\n        }\n    }\n    return id;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* globals Node */\n/**\n * @module utils/dom/getancestors\n */\n/**\n * Returns all ancestors of given DOM node, starting from the top-most (root). Includes the given node itself. If the\n * node is a part of `DocumentFragment` that `DocumentFragment` will be returned. In contrary, if the node is\n * appended to a `Document`, that `Document` will not be returned (algorithms operating on DOM tree care for `Document#documentElement`\n * at most, which will be returned).\n *\n * @param node DOM node.\n * @returns Array of given `node` parents.\n */\nexport default function getAncestors(node) {\n    const nodes = [];\n    let currentNode = node;\n    // We are interested in `Node`s `DocumentFragment`s only.\n    while (currentNode && currentNode.nodeType != Node.DOCUMENT_NODE) {\n        nodes.unshift(currentNode);\n        currentNode = currentNode.parentNode;\n    }\n    return nodes;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/getborderwidths\n */\n/**\n * Returns an object containing CSS border widths of a specified HTML element.\n *\n * @param element An element which has CSS borders.\n * @returns An object containing `top`, `left`, `right` and `bottom` properties\n * with numerical values of the `border-[top,left,right,bottom]-width` CSS styles.\n */\nexport default function getBorderWidths(element) {\n    // Call getComputedStyle on the window the element document belongs to.\n    const style = element.ownerDocument.defaultView.getComputedStyle(element);\n    return {\n        top: parseInt(style.borderTopWidth, 10),\n        right: parseInt(style.borderRightWidth, 10),\n        bottom: parseInt(style.borderBottomWidth, 10),\n        left: parseInt(style.borderLeftWidth, 10)\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/getrangefrommouseevent\n */\n/**\n * Returns a DOM range from a given point specified by a mouse event.\n *\n * @param domEvent The mouse event.\n * @returns The DOM range.\n */\nexport default function getRangeFromMouseEvent(domEvent) {\n    if (!domEvent.target) {\n        return null;\n    }\n    const domDoc = domEvent.target.ownerDocument;\n    const x = domEvent.clientX;\n    const y = domEvent.clientY;\n    let domRange = null;\n    // Webkit & Blink.\n    if (domDoc.caretRangeFromPoint && domDoc.caretRangeFromPoint(x, y)) {\n        domRange = domDoc.caretRangeFromPoint(x, y);\n    }\n    // FF.\n    else if (domEvent.rangeParent) {\n        domRange = domDoc.createRange();\n        domRange.setStart(domEvent.rangeParent, domEvent.rangeOffset);\n        domRange.collapse(true);\n    }\n    return domRange;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/istext\n */\n/**\n * Checks if the object is a native DOM Text node.\n */\nexport default function isText(obj) {\n    return Object.prototype.toString.call(obj) == '[object Text]';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/isrange\n */\n/**\n * Checks if the object is a native DOM Range.\n */\nexport default function isRange(obj) {\n    return Object.prototype.toString.apply(obj) == '[object Range]';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/getpositionedancestor\n */\nimport global from './global.js';\n/**\n * For a given element, returns the nearest ancestor element which CSS position is not \"static\".\n *\n * @param element The native DOM element to be checked.\n */\nexport default function getPositionedAncestor(element) {\n    if (!element || !element.parentNode) {\n        return null;\n    }\n    if (element.offsetParent === global.document.body) {\n        return null;\n    }\n    return element.offsetParent;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/rect\n */\nimport isRange from './isrange.js';\nimport isWindow from './iswindow.js';\nimport getBorderWidths from './getborderwidths.js';\nimport isText from './istext.js';\nimport getPositionedAncestor from './getpositionedancestor.js';\nimport global from './global.js';\nconst rectProperties = ['top', 'right', 'bottom', 'left', 'width', 'height'];\n/**\n * A helper class representing a `ClientRect` object, e.g. value returned by\n * the native `object.getBoundingClientRect()` method. Provides a set of methods\n * to manipulate the rect and compare it against other rect instances.\n */\nexport default class Rect {\n    /**\n     * Creates an instance of rect.\n     *\n     * ```ts\n     * // Rect of an HTMLElement.\n     * const rectA = new Rect( document.body );\n     *\n     * // Rect of a DOM Range.\n     * const rectB = new Rect( document.getSelection().getRangeAt( 0 ) );\n     *\n     * // Rect of a window (web browser viewport).\n     * const rectC = new Rect( window );\n     *\n     * // Rect out of an object.\n     * const rectD = new Rect( { top: 0, right: 10, bottom: 10, left: 0, width: 10, height: 10 } );\n     *\n     * // Rect out of another Rect instance.\n     * const rectE = new Rect( rectD );\n     *\n     * // Rect out of a ClientRect.\n     * const rectF = new Rect( document.body.getClientRects().item( 0 ) );\n     * ```\n     *\n     * **Note**: By default a rect of an HTML element includes its CSS borders and scrollbars (if any)\n     * ant the rect of a `window` includes scrollbars too. Use {@link #excludeScrollbarsAndBorders}\n     * to get the inner part of the rect.\n     *\n     * @param source A source object to create the rect.\n     */\n    constructor(source) {\n        const isSourceRange = isRange(source);\n        Object.defineProperty(this, '_source', {\n            // If the source is a Rect instance, copy it's #_source.\n            value: source._source || source,\n            writable: true,\n            enumerable: false\n        });\n        if (isDomElement(source) || isSourceRange) {\n            // The `Rect` class depends on `getBoundingClientRect` and `getClientRects` DOM methods. If the source\n            // of a rect in an HTML element or a DOM range but it does not belong to any rendered DOM tree, these methods\n            // will fail to obtain the geometry and the rect instance makes little sense to the features using it.\n            // To get rid of this warning make sure the source passed to the constructor is a descendant of `window.document.body`.\n            // @if CK_DEBUG // const sourceNode = isSourceRange ? source.startContainer : source;\n            // @if CK_DEBUG // if ( !sourceNode.ownerDocument || !sourceNode.ownerDocument.body.contains( sourceNode ) ) {\n            // @if CK_DEBUG // \tconsole.warn(\n            // @if CK_DEBUG // \t\t'rect-source-not-in-dom: The source of this rect does not belong to any rendered DOM tree.',\n            // @if CK_DEBUG // \t\t{ source } );\n            // @if CK_DEBUG // }\n            if (isSourceRange) {\n                const rangeRects = Rect.getDomRangeRects(source);\n                copyRectProperties(this, Rect.getBoundingRect(rangeRects));\n            }\n            else {\n                copyRectProperties(this, source.getBoundingClientRect());\n            }\n        }\n        else if (isWindow(source)) {\n            const { innerWidth, innerHeight } = source;\n            copyRectProperties(this, {\n                top: 0,\n                right: innerWidth,\n                bottom: innerHeight,\n                left: 0,\n                width: innerWidth,\n                height: innerHeight\n            });\n        }\n        else {\n            copyRectProperties(this, source);\n        }\n    }\n    /**\n     * Returns a clone of the rect.\n     *\n     * @returns A cloned rect.\n     */\n    clone() {\n        return new Rect(this);\n    }\n    /**\n     * Moves the rect so that its upper–left corner lands in desired `[ x, y ]` location.\n     *\n     * @param x Desired horizontal location.\n     * @param y Desired vertical location.\n     * @returns A rect which has been moved.\n     */\n    moveTo(x, y) {\n        this.top = y;\n        this.right = x + this.width;\n        this.bottom = y + this.height;\n        this.left = x;\n        return this;\n    }\n    /**\n     * Moves the rect in–place by a dedicated offset.\n     *\n     * @param x A horizontal offset.\n     * @param y A vertical offset\n     * @returns A rect which has been moved.\n     */\n    moveBy(x, y) {\n        this.top += y;\n        this.right += x;\n        this.left += x;\n        this.bottom += y;\n        return this;\n    }\n    /**\n     * Returns a new rect a a result of intersection with another rect.\n     */\n    getIntersection(anotherRect) {\n        const rect = {\n            top: Math.max(this.top, anotherRect.top),\n            right: Math.min(this.right, anotherRect.right),\n            bottom: Math.min(this.bottom, anotherRect.bottom),\n            left: Math.max(this.left, anotherRect.left),\n            width: 0,\n            height: 0\n        };\n        rect.width = rect.right - rect.left;\n        rect.height = rect.bottom - rect.top;\n        if (rect.width < 0 || rect.height < 0) {\n            return null;\n        }\n        else {\n            const newRect = new Rect(rect);\n            newRect._source = this._source;\n            return newRect;\n        }\n    }\n    /**\n     * Returns the area of intersection with another rect.\n     *\n     * @returns Area of intersection.\n     */\n    getIntersectionArea(anotherRect) {\n        const rect = this.getIntersection(anotherRect);\n        if (rect) {\n            return rect.getArea();\n        }\n        else {\n            return 0;\n        }\n    }\n    /**\n     * Returns the area of the rect.\n     */\n    getArea() {\n        return this.width * this.height;\n    }\n    /**\n     * Returns a new rect, a part of the original rect, which is actually visible to the user and is relative to the,`body`,\n     * e.g. an original rect cropped by parent element rects which have `overflow` set in CSS\n     * other than `\"visible\"`.\n     *\n     * If there's no such visible rect, which is when the rect is limited by one or many of\n     * the ancestors, `null` is returned.\n     *\n     * **Note**: This method does not consider the boundaries of the viewport (window).\n     * To get a rect cropped by all ancestors and the viewport, use an intersection such as:\n     *\n     * ```ts\n     * const visibleInViewportRect = new Rect( window ).getIntersection( new Rect( source ).getVisible() );\n     * ```\n     *\n     * @returns A visible rect instance or `null`, if there's none.\n     */\n    getVisible() {\n        const source = this._source;\n        let visibleRect = this.clone();\n        // There's no ancestor to crop <body> with the overflow.\n        if (isBody(source)) {\n            return visibleRect;\n        }\n        let child = source;\n        let parent = source.parentNode || source.commonAncestorContainer;\n        let absolutelyPositionedChildElement;\n        // Check the ancestors all the way up to the <body>.\n        while (parent && !isBody(parent)) {\n            const isParentOverflowVisible = getElementOverflow(parent) === 'visible';\n            if (child instanceof HTMLElement && getElementPosition(child) === 'absolute') {\n                absolutelyPositionedChildElement = child;\n            }\n            const parentElementPosition = getElementPosition(parent);\n            // The child will be cropped only if it has `position: absolute` and the parent has `position: relative` + some overflow.\n            // Otherwise there's no chance of visual clipping and the parent can be skipped\n            // https://github.com/ckeditor/ckeditor5/issues/14107.\n            //\n            // condition: isParentOverflowVisible\n            // \t\t+---------------------------+\n            //\t\t| #parent\t\t\t\t\t|\n            //\t\t| (overflow: visible)\t\t|\n            //\t\t|\t\t\t\t+-----------+---------------+\n            //\t\t|\t\t\t\t| child\t\t\t\t\t\t|\n            //\t\t|\t\t\t\t+-----------+---------------+\n            //\t\t+---------------------------+\n            //\n            // condition: absolutelyPositionedChildElement && parentElementPosition === 'relative' && isParentOverflowVisible\n            // \t\t+---------------------------+\n            //\t\t| parent\t\t\t\t\t|\n            //\t\t| (position: relative;)\t\t|\n            //\t\t| (overflow: visible;)\t\t|\n            //\t\t|\t\t\t\t+-----------+---------------+\n            //\t\t|\t\t\t\t| child  \t\t\t\t\t|\n            //\t\t|\t\t\t\t| (position: absolute;)\t\t|\n            //\t\t|\t\t\t\t+-----------+---------------+\n            //\t\t+---------------------------+\n            //\n            // condition: absolutelyPositionedChildElement && parentElementPosition !== 'relative'\n            // \t\t+---------------------------+\n            //\t\t| parent\t\t\t\t\t|\n            //\t\t| (position: static;)\t\t|\n            //\t\t|\t\t\t\t+-----------+---------------+\n            //\t\t|\t\t\t\t| child  \t\t\t\t\t|\n            //\t\t|\t\t\t\t| (position: absolute;)\t\t|\n            //\t\t|\t\t\t\t+-----------+---------------+\n            //\t\t+---------------------------+\n            if (isParentOverflowVisible ||\n                absolutelyPositionedChildElement && ((parentElementPosition === 'relative' && isParentOverflowVisible) ||\n                    parentElementPosition !== 'relative')) {\n                child = parent;\n                parent = parent.parentNode;\n                continue;\n            }\n            const parentRect = new Rect(parent);\n            const intersectionRect = visibleRect.getIntersection(parentRect);\n            if (intersectionRect) {\n                if (intersectionRect.getArea() < visibleRect.getArea()) {\n                    // Reduce the visible rect to the intersection.\n                    visibleRect = intersectionRect;\n                }\n            }\n            else {\n                // There's no intersection, the rect is completely invisible.\n                return null;\n            }\n            child = parent;\n            parent = parent.parentNode;\n        }\n        return visibleRect;\n    }\n    /**\n     * Checks if all property values ({@link #top}, {@link #left}, {@link #right},\n     * {@link #bottom}, {@link #width} and {@link #height}) are the equal in both rect\n     * instances.\n     *\n     * @param anotherRect A rect instance to compare with.\n     * @returns `true` when Rects are equal. `false` otherwise.\n     */\n    isEqual(anotherRect) {\n        for (const prop of rectProperties) {\n            if (this[prop] !== anotherRect[prop]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Checks whether a rect fully contains another rect instance.\n     *\n     * @param anotherRect\n     * @returns `true` if contains, `false` otherwise.\n     */\n    contains(anotherRect) {\n        const intersectRect = this.getIntersection(anotherRect);\n        return !!(intersectRect && intersectRect.isEqual(anotherRect));\n    }\n    /**\n     * Recalculates screen coordinates to coordinates relative to the positioned ancestor offset.\n     */\n    toAbsoluteRect() {\n        const { scrollX, scrollY } = global.window;\n        const absoluteRect = this.clone().moveBy(scrollX, scrollY);\n        if (isDomElement(absoluteRect._source)) {\n            const positionedAncestor = getPositionedAncestor(absoluteRect._source);\n            if (positionedAncestor) {\n                shiftRectToCompensatePositionedAncestor(absoluteRect, positionedAncestor);\n            }\n        }\n        return absoluteRect;\n    }\n    /**\n     * Excludes scrollbars and CSS borders from the rect.\n     *\n     * * Borders are removed when {@link #_source} is an HTML element.\n     * * Scrollbars are excluded from HTML elements and the `window`.\n     *\n     * @returns A rect which has been updated.\n     */\n    excludeScrollbarsAndBorders() {\n        const source = this._source;\n        let scrollBarWidth, scrollBarHeight, direction;\n        if (isWindow(source)) {\n            scrollBarWidth = source.innerWidth - source.document.documentElement.clientWidth;\n            scrollBarHeight = source.innerHeight - source.document.documentElement.clientHeight;\n            direction = source.getComputedStyle(source.document.documentElement).direction;\n        }\n        else {\n            const borderWidths = getBorderWidths(source);\n            scrollBarWidth = source.offsetWidth - source.clientWidth - borderWidths.left - borderWidths.right;\n            scrollBarHeight = source.offsetHeight - source.clientHeight - borderWidths.top - borderWidths.bottom;\n            direction = source.ownerDocument.defaultView.getComputedStyle(source).direction;\n            this.left += borderWidths.left;\n            this.top += borderWidths.top;\n            this.right -= borderWidths.right;\n            this.bottom -= borderWidths.bottom;\n            this.width = this.right - this.left;\n            this.height = this.bottom - this.top;\n        }\n        this.width -= scrollBarWidth;\n        if (direction === 'ltr') {\n            this.right -= scrollBarWidth;\n        }\n        else {\n            this.left += scrollBarWidth;\n        }\n        this.height -= scrollBarHeight;\n        this.bottom -= scrollBarHeight;\n        return this;\n    }\n    /**\n     * Returns an array of rects of the given native DOM Range.\n     *\n     * @param range A native DOM range.\n     * @returns DOM Range rects.\n     */\n    static getDomRangeRects(range) {\n        const rects = [];\n        // Safari does not iterate over ClientRectList using for...of loop.\n        const clientRects = Array.from(range.getClientRects());\n        if (clientRects.length) {\n            for (const rect of clientRects) {\n                rects.push(new Rect(rect));\n            }\n        }\n        // If there's no client rects for the Range, use parent container's bounding rect\n        // instead and adjust rect's width to simulate the actual geometry of such range.\n        // https://github.com/ckeditor/ckeditor5-utils/issues/153\n        // https://github.com/ckeditor/ckeditor5-ui/issues/317\n        else {\n            let startContainer = range.startContainer;\n            if (isText(startContainer)) {\n                startContainer = startContainer.parentNode;\n            }\n            const rect = new Rect(startContainer.getBoundingClientRect());\n            rect.right = rect.left;\n            rect.width = 0;\n            rects.push(rect);\n        }\n        return rects;\n    }\n    /**\n     * Returns a bounding rectangle that contains all the given `rects`.\n     *\n     * @param rects A list of rectangles that should be contained in the result rectangle.\n     * @returns Bounding rectangle or `null` if no `rects` were given.\n     */\n    static getBoundingRect(rects) {\n        const boundingRectData = {\n            left: Number.POSITIVE_INFINITY,\n            top: Number.POSITIVE_INFINITY,\n            right: Number.NEGATIVE_INFINITY,\n            bottom: Number.NEGATIVE_INFINITY,\n            width: 0,\n            height: 0\n        };\n        let rectangleCount = 0;\n        for (const rect of rects) {\n            rectangleCount++;\n            boundingRectData.left = Math.min(boundingRectData.left, rect.left);\n            boundingRectData.top = Math.min(boundingRectData.top, rect.top);\n            boundingRectData.right = Math.max(boundingRectData.right, rect.right);\n            boundingRectData.bottom = Math.max(boundingRectData.bottom, rect.bottom);\n        }\n        if (rectangleCount == 0) {\n            return null;\n        }\n        boundingRectData.width = boundingRectData.right - boundingRectData.left;\n        boundingRectData.height = boundingRectData.bottom - boundingRectData.top;\n        return new Rect(boundingRectData);\n    }\n}\n/**\n * Acquires all the rect properties from the passed source.\n */\nfunction copyRectProperties(rect, source) {\n    for (const p of rectProperties) {\n        rect[p] = source[p];\n    }\n}\n/**\n * Checks if provided object is a <body> HTML element.\n */\nfunction isBody(value) {\n    if (!isDomElement(value)) {\n        return false;\n    }\n    return value === value.ownerDocument.body;\n}\n/**\n * Checks if provided object \"looks like\" a DOM Element and has API required by `Rect` class.\n */\nfunction isDomElement(value) {\n    // Note: earlier we used `isElement()` from lodash library, however that function is less performant because\n    // it makes complicated checks to make sure that given value is a DOM element.\n    return value !== null && typeof value === 'object' && value.nodeType === 1 && typeof value.getBoundingClientRect === 'function';\n}\n/**\n * Returns the value of the `position` style of an `HTMLElement`.\n */\nfunction getElementPosition(element) {\n    return element instanceof HTMLElement ? element.ownerDocument.defaultView.getComputedStyle(element).position : 'static';\n}\n/**\n * Returns the value of the `overflow` style of an `HTMLElement` or a `Range`.\n */\nfunction getElementOverflow(element) {\n    return element instanceof HTMLElement ? element.ownerDocument.defaultView.getComputedStyle(element).overflow : 'visible';\n}\n/**\n * For a given absolute Rect coordinates object and a positioned element ancestor, it updates its\n * coordinates that make up for the position and the scroll of the ancestor.\n *\n * This is necessary because while Rects (and DOMRects) are relative to the browser's viewport, their coordinates\n * are used in real–life to position elements with `position: absolute`, which are scoped by any positioned\n * (and scrollable) ancestors.\n */\nfunction shiftRectToCompensatePositionedAncestor(rect, positionedElementAncestor) {\n    const ancestorPosition = new Rect(positionedElementAncestor);\n    const ancestorBorderWidths = getBorderWidths(positionedElementAncestor);\n    let moveX = 0;\n    let moveY = 0;\n    // (https://github.com/ckeditor/ckeditor5-ui-default/issues/126)\n    // If there's some positioned ancestor of the panel, then its `Rect` must be taken into\n    // consideration. `Rect` is always relative to the viewport while `position: absolute` works\n    // with respect to that positioned ancestor.\n    moveX -= ancestorPosition.left;\n    moveY -= ancestorPosition.top;\n    // (https://github.com/ckeditor/ckeditor5-utils/issues/139)\n    // If there's some positioned ancestor of the panel, not only its position must be taken into\n    // consideration (see above) but also its internal scrolls. Scroll have an impact here because `Rect`\n    // is relative to the viewport (it doesn't care about scrolling), while `position: absolute`\n    // must compensate that scrolling.\n    moveX += positionedElementAncestor.scrollLeft;\n    moveY += positionedElementAncestor.scrollTop;\n    // (https://github.com/ckeditor/ckeditor5-utils/issues/139)\n    // If there's some positioned ancestor of the panel, then its `Rect` includes its CSS `borderWidth`\n    // while `position: absolute` positioning does not consider it.\n    // E.g. `{ position: absolute, top: 0, left: 0 }` means upper left corner of the element,\n    // not upper-left corner of its border.\n    moveX -= ancestorBorderWidths.left;\n    moveY -= ancestorBorderWidths.top;\n    rect.moveBy(moveX, moveY);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/resizeobserver\n */\nimport global from './global.js';\n/**\n * A helper class which instances allow performing custom actions when native DOM elements are resized.\n *\n * ```ts\n * const editableElement = editor.editing.view.getDomRoot();\n *\n * const observer = new ResizeObserver( editableElement, entry => {\n * \tconsole.log( 'The editable element has been resized in DOM.' );\n * \tconsole.log( entry.target ); // -> editableElement\n * \tconsole.log( entry.contentRect.width ); // -> e.g. '423px'\n * } );\n * ```\n *\n * It uses the [native DOM resize observer](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver)\n * under the hood.\n */\nclass ResizeObserver {\n    /**\n     * Creates an instance of the `ResizeObserver` class.\n     *\n     * @param element A DOM element that is to be observed for resizing. Note that\n     * the element must be visible (i.e. not detached from DOM) for the observer to work.\n     * @param callback A function called when the observed element was resized. It passes\n     * the [`ResizeObserverEntry`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry)\n     * object with information about the resize event.\n     */\n    constructor(element, callback) {\n        // **Note**: For the maximum performance, this class ensures only a single instance of the native\n        // observer is used no matter how many instances of this class were created.\n        if (!ResizeObserver._observerInstance) {\n            ResizeObserver._createObserver();\n        }\n        this._element = element;\n        this._callback = callback;\n        ResizeObserver._addElementCallback(element, callback);\n        ResizeObserver._observerInstance.observe(element);\n    }\n    /**\n     * The element observed by this observer.\n     */\n    get element() {\n        return this._element;\n    }\n    /**\n     * Destroys the observer which disables the `callback` passed to the {@link #constructor}.\n     */\n    destroy() {\n        ResizeObserver._deleteElementCallback(this._element, this._callback);\n    }\n    /**\n     * Registers a new resize callback for the DOM element.\n     */\n    static _addElementCallback(element, callback) {\n        if (!ResizeObserver._elementCallbacks) {\n            ResizeObserver._elementCallbacks = new Map();\n        }\n        let callbacks = ResizeObserver._elementCallbacks.get(element);\n        if (!callbacks) {\n            callbacks = new Set();\n            ResizeObserver._elementCallbacks.set(element, callbacks);\n        }\n        callbacks.add(callback);\n    }\n    /**\n     * Removes a resize callback from the DOM element. If no callbacks are left\n     * for the element, it removes the element from the native observer.\n     */\n    static _deleteElementCallback(element, callback) {\n        const callbacks = ResizeObserver._getElementCallbacks(element);\n        // Remove the element callback. Check if exist first in case someone\n        // called destroy() twice.\n        if (callbacks) {\n            callbacks.delete(callback);\n            // If no callbacks left for the element, also remove the element.\n            if (!callbacks.size) {\n                ResizeObserver._elementCallbacks.delete(element);\n                ResizeObserver._observerInstance.unobserve(element);\n            }\n        }\n        if (ResizeObserver._elementCallbacks && !ResizeObserver._elementCallbacks.size) {\n            ResizeObserver._observerInstance = null;\n            ResizeObserver._elementCallbacks = null;\n        }\n    }\n    /**\n     * Returns are registered resize callbacks for the DOM element.\n     */\n    static _getElementCallbacks(element) {\n        if (!ResizeObserver._elementCallbacks) {\n            return null;\n        }\n        return ResizeObserver._elementCallbacks.get(element);\n    }\n    /**\n     * Creates the single native observer shared across all `ResizeObserver` instances.\n     */\n    static _createObserver() {\n        ResizeObserver._observerInstance = new global.window.ResizeObserver(entries => {\n            for (const entry of entries) {\n                const callbacks = ResizeObserver._getElementCallbacks(entry.target);\n                if (callbacks) {\n                    for (const callback of callbacks) {\n                        callback(entry);\n                    }\n                }\n            }\n        });\n    }\n}\n/**\n * The single native observer instance shared across all {@link module:utils/dom/resizeobserver~ResizeObserver} instances.\n */\nResizeObserver._observerInstance = null;\n/**\n * A mapping of native DOM elements and their callbacks shared across all\n * {@link module:utils/dom/resizeobserver~ResizeObserver} instances.\n */\nResizeObserver._elementCallbacks = null;\nexport default ResizeObserver;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/setdatainelement\n */\n/* globals HTMLTextAreaElement */\n/**\n * Sets data in a given element.\n *\n * @param el The element in which the data will be set.\n * @param data The data string.\n */\nexport default function setDataInElement(el, data) {\n    if (el instanceof HTMLTextAreaElement) {\n        el.value = data;\n    }\n    el.innerHTML = data;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/tounit\n */\n/**\n * Returns a helper function, which adds a desired trailing\n * `unit` to the passed value.\n *\n * @param unit An unit like \"px\" or \"em\".\n */\nexport default function toUnit(unit) {\n    return value => value + unit;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/indexof\n */\n/**\n * Returns index of the node in the parent element.\n *\n * @param node Node which index is tested.\n * @returns Index of the node in the parent element. Returns 0 if node has no parent.\n */\nexport default function indexOf(node) {\n    let index = 0;\n    while (node.previousSibling) {\n        node = node.previousSibling;\n        index++;\n    }\n    return index;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/insertat\n */\n/**\n * Inserts node to the parent at given index.\n *\n * @param parentElement Parent element.\n * @param index Insertions index.\n * @param nodeToInsert Node to insert.\n */\nexport default function insertAt(parentElement, index, nodeToInsert) {\n    parentElement.insertBefore(nodeToInsert, parentElement.childNodes[index] || null);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* globals Node */\n/**\n * @module utils/dom/iscomment\n */\n/**\n * Checks whether the object is a native DOM Comment node.\n */\nexport default function isComment(obj) {\n    return obj && obj.nodeType === Node.COMMENT_NODE;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/isvisible\n */\nimport isText from './istext.js';\n/**\n * Checks whether the element is visible to the user in DOM:\n *\n * * connected to the root of the document,\n * * has no `display: none`,\n * * has no ancestors with `display: none`.\n *\n * **Note**: This helper does not check whether the element is hidden by cropping, overflow, etc..\n * To check that, use {@link module:utils/dom/rect~Rect} instead.\n */\nexport default function isVisible(element) {\n    if (!element) {\n        return false;\n    }\n    if (isText(element)) {\n        return isVisible(element.parentElement);\n    }\n    if (element.getClientRects) {\n        return !!(element.getClientRects().length);\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/position\n */\nimport global from './global.js';\nimport Rect from './rect.js';\nimport getPositionedAncestor from './getpositionedancestor.js';\nimport { isFunction } from 'lodash-es';\n// @if CK_DEBUG_POSITION // const {\n// @if CK_DEBUG_POSITION // \tdefault: RectDrawer,\n// @if CK_DEBUG_POSITION // \tdiagonalStylesBlack,\n// @if CK_DEBUG_POSITION // \tdiagonalStylesGreen,\n// @if CK_DEBUG_POSITION // \tdiagonalStylesRed\n// @if CK_DEBUG_POSITION // } = require( '@ckeditor/ckeditor5-utils/tests/_utils/rectdrawer' );\n// @if CK_DEBUG_POSITION // const TARGET_RECT_STYLE = {\n// @if CK_DEBUG_POSITION // \toutlineWidth: '2px', outlineStyle: 'dashed', outlineColor: 'blue', outlineOffset: '2px'\n// @if CK_DEBUG_POSITION // };\n// @if CK_DEBUG_POSITION // const VISIBLE_TARGET_RECT_STYLE = {\n// @if CK_DEBUG_POSITION //\t\t...diagonalStylesBlack,\n// @if CK_DEBUG_POSITION //\t\topacity: '1',\n// @if CK_DEBUG_POSITION //\t\tbackgroundColor: '#00000033',\n// @if CK_DEBUG_POSITION //\t\toutlineWidth: '2px'\n// @if CK_DEBUG_POSITION // };\n// @if CK_DEBUG_POSITION // const VIEWPORT_RECT_STYLE = {\n// @if CK_DEBUG_POSITION // \toutlineWidth: '2px',\n// @if CK_DEBUG_POSITION // \toutlineOffset: '-2px',\n// @if CK_DEBUG_POSITION // \toutlineStyle: 'solid',\n// @if CK_DEBUG_POSITION // \toutlineColor: 'red'\n// @if CK_DEBUG_POSITION // };\n// @if CK_DEBUG_POSITION // const VISIBLE_LIMITER_RECT_STYLE = {\n// @if CK_DEBUG_POSITION // \t...diagonalStylesGreen,\n// @if CK_DEBUG_POSITION // \toutlineWidth: '2px',\n// @if CK_DEBUG_POSITION // \toutlineOffset: '-2px'\n// @if CK_DEBUG_POSITION // };\n// @if CK_DEBUG_POSITION // const ELEMENT_RECT_STYLE = {\n// @if CK_DEBUG_POSITION // \toutlineWidth: '2px', outlineColor: 'orange', outlineOffset: '-2px'\n// @if CK_DEBUG_POSITION // };\n// @if CK_DEBUG_POSITION // const CHOSEN_POSITION_RECT_STYLE = {\n// @if CK_DEBUG_POSITION // \topacity: .5, outlineColor: 'magenta', backgroundColor: 'magenta'\n// @if CK_DEBUG_POSITION // };\n/**\n * Calculates the `position: absolute` coordinates of a given element so it can be positioned with respect to the\n * target in the visually most efficient way, taking various restrictions like viewport or limiter geometry\n * into consideration.\n *\n * **Note**: If there are no position coordinates found that meet the requirements (arguments of this helper),\n * `null` is returned.\n *\n * ```ts\n * // The element which is to be positioned.\n * const element = document.body.querySelector( '#toolbar' );\n *\n * // A target to which the element is positioned relatively.\n * const target = document.body.querySelector( '#container' );\n *\n * // Finding the optimal coordinates for the positioning.\n * const { left, top, name } = getOptimalPosition( {\n * \telement: element,\n * \ttarget: target,\n *\n * \t// The algorithm will chose among these positions to meet the requirements such\n * \t// as \"limiter\" element or \"fitInViewport\", set below. The positions are considered\n * \t// in the order of the array.\n * \tpositions: [\n * \t\t//\n * \t \t//\t[ Target ]\n * \t\t//\t+-----------------+\n * \t\t//\t|     Element     |\n * \t\t//\t+-----------------+\n * \t\t//\n * \t\ttargetRect => ( {\n * \t\t\ttop: targetRect.bottom,\n * \t\t\tleft: targetRect.left,\n * \t\t\tname: 'mySouthEastPosition'\n * \t\t} ),\n *\n * \t\t//\n * \t\t//\t+-----------------+\n * \t\t//\t|     Element     |\n * \t\t//\t+-----------------+\n * \t\t//\t[ Target ]\n * \t\t//\n * \t\t( targetRect, elementRect ) => ( {\n * \t\t\ttop: targetRect.top - elementRect.height,\n * \t\t\tleft: targetRect.left,\n * \t\t\tname: 'myNorthEastPosition'\n * \t\t} )\n * \t],\n *\n * \t// Find a position such guarantees the element remains within visible boundaries of <body>.\n * \tlimiter: document.body,\n *\n * \t// Find a position such guarantees the element remains within visible boundaries of the browser viewport.\n * \tfitInViewport: true\n * } );\n *\n * // The best position which fits into document.body and the viewport. May be useful\n * // to set proper class on the `element`.\n * console.log( name ); // -> \"myNorthEastPosition\"\n *\n * // Using the absolute coordinates which has been found to position the element\n * // as in the diagram depicting the \"myNorthEastPosition\" position.\n * element.style.top = top;\n * element.style.left = left;\n * ```\n *\n * @param options The input data and configuration of the helper.\n */\nexport function getOptimalPosition({ element, target, positions, limiter, fitInViewport, viewportOffsetConfig }) {\n    // If the {@link module:utils/dom/position~Options#target} is a function, use what it returns.\n    // https://github.com/ckeditor/ckeditor5-utils/issues/157\n    if (isFunction(target)) {\n        target = target();\n    }\n    // If the {@link module:utils/dom/position~Options#limiter} is a function, use what it returns.\n    // https://github.com/ckeditor/ckeditor5-ui/issues/260\n    if (isFunction(limiter)) {\n        limiter = limiter();\n    }\n    const positionedElementAncestor = getPositionedAncestor(element);\n    const constrainedViewportRect = getConstrainedViewportRect(viewportOffsetConfig);\n    const elementRect = new Rect(element);\n    const visibleTargetRect = getVisibleViewportIntersectionRect(target, constrainedViewportRect);\n    let bestPosition;\n    // @if CK_DEBUG_POSITION // const targetRect = new Rect( target );\n    // @if CK_DEBUG_POSITION // RectDrawer.clear();\n    // @if CK_DEBUG_POSITION // RectDrawer.draw( targetRect, TARGET_RECT_STYLE, 'Target' );\n    // @if CK_DEBUG_POSITION // if ( constrainedViewportRect ) {\n    // @if CK_DEBUG_POSITION //\t\tRectDrawer.draw( constrainedViewportRect, VIEWPORT_RECT_STYLE, 'Viewport' );\n    // @if CK_DEBUG_POSITION // }\n    // If the target got cropped by ancestors or went off the screen, positioning does not make any sense.\n    if (!visibleTargetRect || !constrainedViewportRect.getIntersection(visibleTargetRect)) {\n        return null;\n    }\n    // @if CK_DEBUG_POSITION //\tRectDrawer.draw( visibleTargetRect, VISIBLE_TARGET_RECT_STYLE, 'VisTgt' );\n    const positionOptions = {\n        targetRect: visibleTargetRect,\n        elementRect,\n        positionedElementAncestor,\n        viewportRect: constrainedViewportRect\n    };\n    // If there are no limits, just grab the very first position and be done with that drama.\n    if (!limiter && !fitInViewport) {\n        bestPosition = new PositionObject(positions[0], positionOptions);\n    }\n    else {\n        if (limiter) {\n            const visibleLimiterRect = getVisibleViewportIntersectionRect(limiter, constrainedViewportRect);\n            if (visibleLimiterRect) {\n                positionOptions.limiterRect = visibleLimiterRect;\n                // @if CK_DEBUG_POSITION // RectDrawer.draw( visibleLimiterRect, VISIBLE_LIMITER_RECT_STYLE, 'VisLim' );\n            }\n        }\n        // If there's no best position found, i.e. when all intersections have no area because\n        // rects have no width or height, then just return `null`\n        bestPosition = getBestPosition(positions, positionOptions);\n    }\n    return bestPosition;\n}\n/**\n * Returns intersection of visible source `Rect` with Viewport `Rect`. In case when source `Rect` is not visible\n * or there is no intersection between source `Rect` and Viewport `Rect`, `null` will be returned.\n */\nfunction getVisibleViewportIntersectionRect(source, viewportRect) {\n    const visibleSourceRect = new Rect(source).getVisible();\n    if (!visibleSourceRect) {\n        return null;\n    }\n    return visibleSourceRect.getIntersection(viewportRect);\n}\n/**\n * Returns a viewport `Rect` shrunk by the viewport offset config from all sides.\n */\nfunction getConstrainedViewportRect(viewportOffsetConfig) {\n    viewportOffsetConfig = Object.assign({ top: 0, bottom: 0, left: 0, right: 0 }, viewportOffsetConfig);\n    const viewportRect = new Rect(global.window);\n    viewportRect.top += viewportOffsetConfig.top;\n    viewportRect.height -= viewportOffsetConfig.top;\n    viewportRect.bottom -= viewportOffsetConfig.bottom;\n    viewportRect.height -= viewportOffsetConfig.bottom;\n    return viewportRect;\n}\n/**\n * For a given array of positioning functions, returns such that provides the best\n * fit of the `elementRect` into the `limiterRect` and `viewportRect`.\n */\nfunction getBestPosition(positions, options) {\n    const { elementRect } = options;\n    // This is when element is fully visible.\n    const elementRectArea = elementRect.getArea();\n    const positionInstances = positions\n        .map(positioningFunction => new PositionObject(positioningFunction, options))\n        // Some positioning functions may return `null` if they don't want to participate.\n        .filter(position => !!position.name);\n    let maxFitFactor = 0;\n    let bestPosition = null;\n    for (const position of positionInstances) {\n        const { limiterIntersectionArea, viewportIntersectionArea } = position;\n        // If a such position is found that element is fully contained by the limiter then, obviously,\n        // there will be no better one, so finishing.\n        if (limiterIntersectionArea === elementRectArea) {\n            // @if CK_DEBUG_POSITION //\tRectDrawer.draw( position._rect, CHOSEN_POSITION_RECT_STYLE, [\n            // @if CK_DEBUG_POSITION //\t\tposition.name,\n            // @if CK_DEBUG_POSITION //\t\t'100% fit',\n            // @if CK_DEBUG_POSITION //\t].join( '\\n' ) );\n            return position;\n        }\n        // To maximize both viewport and limiter intersection areas we use distance on _viewportIntersectionArea\n        // and _limiterIntersectionArea plane (without sqrt because we are looking for max value).\n        const fitFactor = viewportIntersectionArea ** 2 + limiterIntersectionArea ** 2;\n        // @if CK_DEBUG_POSITION //\tRectDrawer.draw( position._rect, { opacity: .4 }, [\n        // @if CK_DEBUG_POSITION //\t\tposition.name,\n        // @if CK_DEBUG_POSITION //\t\t'Vi=' +  Math.round( viewportIntersectionArea ),\n        // @if CK_DEBUG_POSITION //\t\t'Li=' + Math.round( limiterIntersectionArea )\n        // @if CK_DEBUG_POSITION //\t].join( '\\n' ) );\n        if (fitFactor > maxFitFactor) {\n            maxFitFactor = fitFactor;\n            bestPosition = position;\n        }\n    }\n    // @if CK_DEBUG_POSITION // if ( bestPosition ) {\n    // @if CK_DEBUG_POSITION // \tRectDrawer.draw( bestPosition._rect, CHOSEN_POSITION_RECT_STYLE );\n    // @if CK_DEBUG_POSITION // }\n    return bestPosition;\n}\n/**\n * A position class which instances are created and used by the {@link module:utils/dom/position~getOptimalPosition} helper.\n *\n * {@link module:utils/dom/position~Position#top} and {@link module:utils/dom/position~Position#left} properties of the position instance\n * translate directly to the `top` and `left` properties in CSS \"`position: absolute` coordinate system\". If set on the positioned element\n * in DOM, they will make it display it in the right place in the viewport.\n */\nclass PositionObject {\n    /**\n     * Creates an instance of the {@link module:utils/dom/position~PositionObject} class.\n     *\n     * @param positioningFunction function The function that defines the expected\n     * coordinates the positioned element should move to.\n     * @param options options object.\n     * @param options.elementRect The positioned element rect.\n     * @param options.targetRect The target element rect.\n     * @param options.viewportRect The viewport rect.\n     * @param options.limiterRect The limiter rect.\n     * @param options.positionedElementAncestor Nearest element ancestor element which CSS position is not \"static\".\n     */\n    constructor(positioningFunction, options) {\n        const positioningFunctionOutput = positioningFunction(options.targetRect, options.elementRect, options.viewportRect, options.limiterRect);\n        // Nameless position for a function that didn't participate.\n        if (!positioningFunctionOutput) {\n            return;\n        }\n        const { left, top, name, config } = positioningFunctionOutput;\n        this.name = name;\n        this.config = config;\n        this._positioningFunctionCoordinates = { left, top };\n        this._options = options;\n    }\n    /**\n     * The left value in pixels in the CSS `position: absolute` coordinate system.\n     * Set it on the positioned element in DOM to move it to the position.\n     */\n    get left() {\n        return this._absoluteRect.left;\n    }\n    /**\n     * The top value in pixels in the CSS `position: absolute` coordinate system.\n     * Set it on the positioned element in DOM to move it to the position.\n     */\n    get top() {\n        return this._absoluteRect.top;\n    }\n    /**\n     * An intersection area between positioned element and limiter within viewport constraints.\n     */\n    get limiterIntersectionArea() {\n        const limiterRect = this._options.limiterRect;\n        if (limiterRect) {\n            return limiterRect.getIntersectionArea(this._rect);\n        }\n        return 0;\n    }\n    /**\n     * An intersection area between positioned element and viewport.\n     */\n    get viewportIntersectionArea() {\n        const viewportRect = this._options.viewportRect;\n        return viewportRect.getIntersectionArea(this._rect);\n    }\n    /**\n     * An already positioned element rect. A clone of the element rect passed to the constructor\n     * but placed in the viewport according to the positioning function.\n     */\n    get _rect() {\n        if (this._cachedRect) {\n            return this._cachedRect;\n        }\n        this._cachedRect = this._options.elementRect.clone().moveTo(this._positioningFunctionCoordinates.left, this._positioningFunctionCoordinates.top);\n        return this._cachedRect;\n    }\n    /**\n     * An already absolutely positioned element rect. See ({@link #_rect}).\n     */\n    get _absoluteRect() {\n        if (this._cachedAbsoluteRect) {\n            return this._cachedAbsoluteRect;\n        }\n        this._cachedAbsoluteRect = this._rect.toAbsoluteRect();\n        return this._cachedAbsoluteRect;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/remove\n */\n/**\n * Removes given node from parent.\n *\n * @param node Node to remove.\n */\nexport default function remove(node) {\n    const parent = node.parentNode;\n    if (parent) {\n        parent.removeChild(node);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/scroll\n */\nimport isRange from './isrange.js';\nimport Rect from './rect.js';\nimport isText from './istext.js';\n/**\n * Makes any page `HTMLElement` or `Range` (`target`) visible inside the browser viewport.\n * This helper will scroll all `target` ancestors and the web browser viewport to reveal the target to\n * the user. If the `target` is already visible, nothing will happen.\n *\n * @param options Additional configuration of the scrolling behavior.\n * @param options.target A target, which supposed to become visible to the user.\n * @param options.viewportOffset An offset from the edge of the viewport (in pixels)\n * the `target` will be moved by if the viewport is scrolled. It enhances the user experience\n * by keeping the `target` some distance from the edge of the viewport and thus making it easier to\n * read or edit by the user.\n * @param options.ancestorOffset An offset from the boundary of scrollable ancestors (if any)\n * the `target` will be moved by if the viewport is scrolled. It enhances the user experience\n * by keeping the `target` some distance from the edge of the ancestors and thus making it easier to\n * read or edit by the user.\n * @param options.alignToTop When set `true`, the helper will make sure the `target` is scrolled up\n * to the top boundary of the viewport and/or scrollable ancestors if scrolled up. When not set\n * (default), the `target` will be revealed by scrolling as little as possible. This option will\n * not affect `targets` that must be scrolled down because they will appear at the top of the boundary\n * anyway.\n *\n * ```\n *                                             scrollViewportToShowTarget() with            scrollViewportToShowTarget() with\n *          Initial state                        alignToTop unset (default)                        alignToTop = true\n *\n * ┌────────────────────────────────┬─┐       ┌────────────────────────────────┬─┐        ┌────────────────────────────────┬─┐\n * │                                │▲│       │                                │▲│        │   [ Target to be revealed ]    │▲│\n * │                                │ │       │                                │ │        │                                │ │\n * │                                │█│       │                                │ │        │                                │ │\n * │                                │█│       │                                │ │        │                                │ │\n * │                                │ │       │                                │█│        │                                │ │\n * │                                │ │       │                                │█│        │                                │█│\n * │                                │ │       │                                │ │        │                                │█│\n * │                                │▼│       │   [ Target to be revealed ]    │▼│        │                                │▼│\n * └────────────────────────────────┴─┘       └────────────────────────────────┴─┘        └────────────────────────────────┴─┘\n *\n *\n *     [ Target to be revealed ]\n *```\n *\n * @param options.forceScroll When set `true`, the `target` will be aligned to the top of the viewport\n * and scrollable ancestors whether it is already visible or not. This option will only work when `alignToTop`\n * is `true`\n */\nexport function scrollViewportToShowTarget({ target, viewportOffset = 0, ancestorOffset = 0, alignToTop, forceScroll }) {\n    const targetWindow = getWindow(target);\n    let currentWindow = targetWindow;\n    let currentFrame = null;\n    viewportOffset = normalizeViewportOffset(viewportOffset);\n    // Iterate over all windows, starting from target's parent window up to window#top.\n    while (currentWindow) {\n        let firstAncestorToScroll;\n        // Let's scroll target's ancestors first to reveal it. Then, once the ancestor scrolls\n        // settled down, the algorithm can eventually scroll the viewport of the current window.\n        //\n        // Note: If the current window is target's **original** window (e.g. the first one),\n        // start scrolling the closest parent of the target. If not, scroll the closest parent\n        // of an iframe that resides in the current window.\n        if (currentWindow == targetWindow) {\n            firstAncestorToScroll = getParentElement(target);\n        }\n        else {\n            firstAncestorToScroll = getParentElement(currentFrame);\n        }\n        // Scroll the target's ancestors first. Once done, scrolling the viewport is easy.\n        scrollAncestorsToShowRect({\n            parent: firstAncestorToScroll,\n            getRect: () => {\n                // Note: If the target does not belong to the current window **directly**,\n                // i.e. it resides in an iframe belonging to the window, obtain the target's rect\n                // in the coordinates of the current window. By default, a Rect returns geometry\n                // relative to the current window's viewport. To make it work in a parent window,\n                // it must be shifted.\n                return getRectRelativeToWindow(target, currentWindow);\n            },\n            alignToTop,\n            ancestorOffset,\n            forceScroll\n        });\n        // Obtain the rect of the target after it has been scrolled within its ancestors.\n        // It's time to scroll the viewport.\n        const targetRect = getRectRelativeToWindow(target, currentWindow);\n        scrollWindowToShowRect({\n            window: currentWindow,\n            rect: targetRect,\n            viewportOffset,\n            alignToTop,\n            forceScroll\n        });\n        if (currentWindow.parent != currentWindow) {\n            // Keep the reference to the <iframe> element the \"previous current window\" was\n            // rendered within. It will be useful to re–calculate the rect of the target\n            // in the parent window's relative geometry. The target's rect must be shifted\n            // by it's iframe's position.\n            currentFrame = currentWindow.frameElement;\n            currentWindow = currentWindow.parent;\n            // If the current window has some parent but frameElement is inaccessible, then they have\n            // different domains/ports and, due to security reasons, accessing and scrolling\n            // the parent window won't be possible.\n            // See https://github.com/ckeditor/ckeditor5/issues/930.\n            if (!currentFrame) {\n                return;\n            }\n        }\n        else {\n            currentWindow = null;\n        }\n    }\n}\n/**\n * Makes any page `HTMLElement` or `Range` (target) visible within its scrollable ancestors,\n * e.g. if they have `overflow: scroll` CSS style.\n *\n * @param target A target, which supposed to become visible to the user.\n * @param ancestorOffset An offset between the target and the boundary of scrollable ancestors\n * to be maintained while scrolling.\n * @param limiterElement The outermost ancestor that should be scrolled. If specified, it can prevent\n * scrolling the whole page.\n */\nexport function scrollAncestorsToShowTarget(target, ancestorOffset, limiterElement) {\n    const targetParent = getParentElement(target);\n    scrollAncestorsToShowRect({\n        parent: targetParent,\n        getRect: () => new Rect(target),\n        ancestorOffset,\n        limiterElement\n    });\n}\n/**\n * Makes a given rect visible within its parent window.\n *\n * Note: Avoid the situation where the caret is still in the viewport, but totally\n * at the edge of it. In such situation, if it moved beyond the viewport in the next\n * action e.g. after paste, the scrolling would move it to the viewportOffset level\n * and it all would look like the caret visually moved up/down:\n *\n * 1.\n * ```\n * | foo[]\n * |                                    <--- N px of space below the caret\n * +---------------------------------...\n * ```\n *\n * 2. *paste*\n * 3.\n * ```\n * |\n * |\n * +-foo-----------------------------...\n *   bar[]                              <--- caret below viewport, scrolling...\n * ```\n *\n * 4. *scrolling*\n * 5.\n * ```\n * |\n * | foo\n * | bar[]                              <--- caret precisely at the edge\n * +---------------------------------...\n * ```\n *\n * To prevent this, this method checks the rects moved by the viewportOffset to cover\n * the upper/lower edge of the viewport. It makes sure if the action repeats, there's\n * no twitching – it's a purely visual improvement:\n *\n * 5. (after fix)\n * ```\n * |\n * | foo\n * | bar[]\n * |                                    <--- N px of space below the caret\n * +---------------------------------...\n * ```\n *\n * @param options Additional configuration of the scrolling behavior.\n * @param options.window A window which is scrolled to reveal the rect.\n * @param options.rect A rect which is to be revealed.\n * @param options.viewportOffset An offset from the edge of the viewport (in pixels) the `rect` will be\n * moved by if the viewport is scrolled.\n * @param options.alignToTop When set `true`, the helper will make sure the `rect` is scrolled up\n * to the top boundary of the viewport if scrolled up. When not set (default), the `rect` will be\n * revealed by scrolling as little as possible. This option will not affect rects that must be scrolled\n * down because they will appear at the top of the boundary anyway.\n * @param options.forceScroll When set `true`, the `rect` will be aligned to the top of the viewport\n * whether it is already visible or not. This option will only work when `alignToTop` is `true`\n */\nfunction scrollWindowToShowRect({ window, rect, alignToTop, forceScroll, viewportOffset }) {\n    const targetShiftedDownRect = rect.clone().moveBy(0, viewportOffset.bottom);\n    const targetShiftedUpRect = rect.clone().moveBy(0, -viewportOffset.top);\n    const viewportRect = new Rect(window).excludeScrollbarsAndBorders();\n    const rects = [targetShiftedUpRect, targetShiftedDownRect];\n    const forceScrollToTop = alignToTop && forceScroll;\n    const allRectsFitInViewport = rects.every(rect => viewportRect.contains(rect));\n    let { scrollX, scrollY } = window;\n    const initialScrollX = scrollX;\n    const initialScrollY = scrollY;\n    if (forceScrollToTop) {\n        scrollY -= (viewportRect.top - rect.top) + viewportOffset.top;\n    }\n    else if (!allRectsFitInViewport) {\n        if (isAbove(targetShiftedUpRect, viewportRect)) {\n            scrollY -= viewportRect.top - rect.top + viewportOffset.top;\n        }\n        else if (isBelow(targetShiftedDownRect, viewportRect)) {\n            if (alignToTop) {\n                scrollY += rect.top - viewportRect.top - viewportOffset.top;\n            }\n            else {\n                scrollY += rect.bottom - viewportRect.bottom + viewportOffset.bottom;\n            }\n        }\n    }\n    if (!allRectsFitInViewport) {\n        // TODO: Web browsers scroll natively to place the target in the middle\n        // of the viewport. It's not a very popular case, though.\n        if (isLeftOf(rect, viewportRect)) {\n            scrollX -= viewportRect.left - rect.left + viewportOffset.left;\n        }\n        else if (isRightOf(rect, viewportRect)) {\n            scrollX += rect.right - viewportRect.right + viewportOffset.right;\n        }\n    }\n    if (scrollX != initialScrollX || scrollY !== initialScrollY) {\n        window.scrollTo(scrollX, scrollY);\n    }\n}\n/**\n * Recursively scrolls element ancestors to visually reveal a rect.\n *\n * @param options Additional configuration of the scrolling behavior.\n * @param options.parent The first parent ancestor to start scrolling.\n * @param options.getRect A function which returns the Rect, which is to be revealed.\n * @param options.ancestorOffset An offset from the boundary of scrollable ancestors (if any)\n * the `Rect` instance will be moved by if the viewport is scrolled.\n * @param options.alignToTop When set `true`, the helper will make sure the `Rect` instance is scrolled up\n * to the top boundary of the scrollable ancestors if scrolled up. When not set (default), the `rect`\n * will be revealed by scrolling as little as possible. This option will not affect rects that must be\n * scrolled down because they will appear at the top of the boundary\n * anyway.\n * @param options.forceScroll When set `true`, the `rect` will be aligned to the top of scrollable ancestors\n * whether it is already visible or not. This option will only work when `alignToTop` is `true`\n * @param options.limiterElement The outermost ancestor that should be scrolled. Defaults to the `<body>` element.\n */\nfunction scrollAncestorsToShowRect({ parent, getRect, alignToTop, forceScroll, ancestorOffset = 0, limiterElement }) {\n    const parentWindow = getWindow(parent);\n    const forceScrollToTop = alignToTop && forceScroll;\n    let parentRect, targetRect, targetFitsInTarget;\n    const limiter = limiterElement || parentWindow.document.body;\n    while (parent != limiter) {\n        targetRect = getRect();\n        parentRect = new Rect(parent).excludeScrollbarsAndBorders();\n        targetFitsInTarget = parentRect.contains(targetRect);\n        if (forceScrollToTop) {\n            parent.scrollTop -= (parentRect.top - targetRect.top) + ancestorOffset;\n        }\n        else if (!targetFitsInTarget) {\n            if (isAbove(targetRect, parentRect)) {\n                parent.scrollTop -= parentRect.top - targetRect.top + ancestorOffset;\n            }\n            else if (isBelow(targetRect, parentRect)) {\n                if (alignToTop) {\n                    parent.scrollTop += targetRect.top - parentRect.top - ancestorOffset;\n                }\n                else {\n                    parent.scrollTop += targetRect.bottom - parentRect.bottom + ancestorOffset;\n                }\n            }\n        }\n        if (!targetFitsInTarget) {\n            if (isLeftOf(targetRect, parentRect)) {\n                parent.scrollLeft -= parentRect.left - targetRect.left + ancestorOffset;\n            }\n            else if (isRightOf(targetRect, parentRect)) {\n                parent.scrollLeft += targetRect.right - parentRect.right + ancestorOffset;\n            }\n        }\n        parent = parent.parentNode;\n    }\n}\n/**\n * Determines if a given `Rect` extends beyond the bottom edge of the second `Rect`.\n */\nfunction isBelow(firstRect, secondRect) {\n    return firstRect.bottom > secondRect.bottom;\n}\n/**\n * Determines if a given `Rect` extends beyond the top edge of the second `Rect`.\n */\nfunction isAbove(firstRect, secondRect) {\n    return firstRect.top < secondRect.top;\n}\n/**\n * Determines if a given `Rect` extends beyond the left edge of the second `Rect`.\n */\nfunction isLeftOf(firstRect, secondRect) {\n    return firstRect.left < secondRect.left;\n}\n/**\n * Determines if a given `Rect` extends beyond the right edge of the second `Rect`.\n */\nfunction isRightOf(firstRect, secondRect) {\n    return firstRect.right > secondRect.right;\n}\n/**\n * Returns the closest window of an element or range.\n */\nfunction getWindow(elementOrRange) {\n    if (isRange(elementOrRange)) {\n        return elementOrRange.startContainer.ownerDocument.defaultView;\n    }\n    else {\n        return elementOrRange.ownerDocument.defaultView;\n    }\n}\n/**\n * Returns the closest parent of an element or DOM range.\n */\nfunction getParentElement(elementOrRange) {\n    if (isRange(elementOrRange)) {\n        let parent = elementOrRange.commonAncestorContainer;\n        // If a Range is attached to the Text, use the closest element ancestor.\n        if (isText(parent)) {\n            parent = parent.parentNode;\n        }\n        return parent;\n    }\n    else {\n        return elementOrRange.parentNode;\n    }\n}\n/**\n * Returns the rect of an element or range residing in an iframe.\n * The result rect is relative to the geometry of the passed window instance.\n *\n * @param target Element or range which rect should be returned.\n * @param relativeWindow A window the rect should be relative to.\n */\nfunction getRectRelativeToWindow(target, relativeWindow) {\n    const targetWindow = getWindow(target);\n    const rect = new Rect(target);\n    if (targetWindow === relativeWindow) {\n        return rect;\n    }\n    else {\n        let currentWindow = targetWindow;\n        while (currentWindow != relativeWindow) {\n            const frame = currentWindow.frameElement;\n            const frameRect = new Rect(frame).excludeScrollbarsAndBorders();\n            rect.moveBy(frameRect.left, frameRect.top);\n            currentWindow = currentWindow.parent;\n        }\n    }\n    return rect;\n}\n/**\n * A helper that explodes the `viewportOffset` configuration if defined as a plain number into an object\n * with `top`, `bottom`, `left`, and `right` properties.\n *\n * If an object value is passed, this helper will pass it through.\n *\n * @param viewportOffset Viewport offset to be normalized.\n */\nfunction normalizeViewportOffset(viewportOffset) {\n    if (typeof viewportOffset === 'number') {\n        return {\n            top: viewportOffset,\n            bottom: viewportOffset,\n            left: viewportOffset,\n            right: viewportOffset\n        };\n    }\n    return viewportOffset;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport CKEditorError from './ckeditorerror.js';\nimport env from './env.js';\nconst modifiersToGlyphsMac = {\n    ctrl: '⌃',\n    cmd: '⌘',\n    alt: '⌥',\n    shift: '⇧'\n};\nconst modifiersToGlyphsNonMac = {\n    ctrl: 'Ctrl+',\n    alt: 'Alt+',\n    shift: 'Shift+'\n};\nconst keyCodesToGlyphs = {\n    37: '←',\n    38: '↑',\n    39: '→',\n    40: '↓',\n    9: '⇥',\n    33: 'Page Up',\n    34: 'Page Down'\n};\n/**\n * An object with `keyName => keyCode` pairs for a set of known keys.\n *\n * Contains:\n *\n * * `a-z`,\n * * `0-9`,\n * * `f1-f12`,\n * * `` ` ``, `-`, `=`, `[`, `]`, `;`, `'`, `,`, `.`, `/`, `\\`,\n * * `arrow(left|up|right|bottom)`,\n * * `backspace`, `delete`, `enter`, `esc`, `tab`,\n * * `ctrl`, `cmd`, `shift`, `alt`.\n */\nexport const keyCodes = /* #__PURE__ */ generateKnownKeyCodes();\nconst keyCodeNames = /* #__PURE__ */ Object.fromEntries(\n/* #__PURE__ */ Object.entries(keyCodes).map(([name, code]) => {\n    let prettyKeyName;\n    if (code in keyCodesToGlyphs) {\n        prettyKeyName = keyCodesToGlyphs[code];\n    }\n    else {\n        prettyKeyName = name.charAt(0).toUpperCase() + name.slice(1);\n    }\n    return [code, prettyKeyName];\n}));\n/**\n * Converts a key name or {@link module:utils/keyboard~KeystrokeInfo keystroke info} into a key code.\n *\n * Note: Key names are matched with {@link module:utils/keyboard#keyCodes} in a case-insensitive way.\n *\n * @param key A key name (see {@link module:utils/keyboard#keyCodes}) or a keystroke data object.\n * @returns Key or keystroke code.\n */\nexport function getCode(key) {\n    let keyCode;\n    if (typeof key == 'string') {\n        keyCode = keyCodes[key.toLowerCase()];\n        if (!keyCode) {\n            /**\n             * Unknown key name. Only key names included in the {@link module:utils/keyboard#keyCodes} can be used.\n             *\n             * @error keyboard-unknown-key\n             * @param {String} key\n             */\n            throw new CKEditorError('keyboard-unknown-key', null, { key });\n        }\n    }\n    else {\n        keyCode = key.keyCode +\n            (key.altKey ? keyCodes.alt : 0) +\n            (key.ctrlKey ? keyCodes.ctrl : 0) +\n            (key.shiftKey ? keyCodes.shift : 0) +\n            (key.metaKey ? keyCodes.cmd : 0);\n    }\n    return keyCode;\n}\n/**\n * Parses the keystroke and returns a keystroke code that will match the code returned by\n * {@link module:utils/keyboard~getCode} for the corresponding {@link module:utils/keyboard~KeystrokeInfo keystroke info}.\n *\n * The keystroke can be passed in two formats:\n *\n * * as a single string – e.g. `ctrl + A`,\n * * as an array of {@link module:utils/keyboard~keyCodes known key names} and key codes – e.g.:\n *   * `[ 'ctrl', 32 ]` (ctrl + space),\n *   * `[ 'ctrl', 'a' ]` (ctrl + A).\n *\n * Note: Key names are matched with {@link module:utils/keyboard#keyCodes} in a case-insensitive way.\n *\n * Note: Only keystrokes with a single non-modifier key are supported (e.g. `ctrl+A` is OK, but `ctrl+A+B` is not).\n *\n * Note: On macOS, keystroke handling is translating the `Ctrl` key to the `Cmd` key and handling only that keystroke.\n * For example, a registered keystroke `Ctrl+A` will be translated to `Cmd+A` on macOS. To disable the translation of some keystroke,\n * use the forced modifier: `Ctrl!+A` (note the exclamation mark).\n *\n * @param keystroke The keystroke definition.\n * @returns Keystroke code.\n */\nexport function parseKeystroke(keystroke) {\n    if (typeof keystroke == 'string') {\n        keystroke = splitKeystrokeText(keystroke);\n    }\n    return keystroke\n        .map(key => (typeof key == 'string') ? getEnvKeyCode(key) : key)\n        .reduce((key, sum) => sum + key, 0);\n}\n/**\n * Translates any keystroke string text like `\"Ctrl+A\"` to an\n * environment–specific keystroke, i.e. `\"⌘A\"` on macOS.\n *\n * @param keystroke The keystroke text.\n * @returns The keystroke text specific for the environment.\n */\nexport function getEnvKeystrokeText(keystroke) {\n    let keystrokeCode = parseKeystroke(keystroke);\n    const modifiersToGlyphs = Object.entries((env.isMac || env.isiOS) ? modifiersToGlyphsMac : modifiersToGlyphsNonMac);\n    const modifiers = modifiersToGlyphs.reduce((modifiers, [name, glyph]) => {\n        // Modifier keys are stored as a bit mask so extract those from the keystroke code.\n        if ((keystrokeCode & keyCodes[name]) != 0) {\n            keystrokeCode &= ~keyCodes[name];\n            modifiers += glyph;\n        }\n        return modifiers;\n    }, '');\n    return modifiers + (keystrokeCode ? keyCodeNames[keystrokeCode] : '');\n}\n/**\n * Returns `true` if the provided key code represents one of the arrow keys.\n *\n * @param keyCode A key code as in {@link module:utils/keyboard~KeystrokeInfo#keyCode}.\n */\nexport function isArrowKeyCode(keyCode) {\n    return keyCode == keyCodes.arrowright ||\n        keyCode == keyCodes.arrowleft ||\n        keyCode == keyCodes.arrowup ||\n        keyCode == keyCodes.arrowdown;\n}\n/**\n * Returns the direction in which the {@link module:engine/model/documentselection~DocumentSelection selection}\n * will move when the provided arrow key code is pressed considering the language direction of the editor content.\n *\n * For instance, in right–to–left (RTL) content languages, pressing the left arrow means moving the selection right (forward)\n * in the model structure. Similarly, pressing the right arrow moves the selection left (backward).\n *\n * @param keyCode A key code as in {@link module:utils/keyboard~KeystrokeInfo#keyCode}.\n * @param contentLanguageDirection The content language direction, corresponding to\n * {@link module:utils/locale~Locale#contentLanguageDirection}.\n * @returns Localized arrow direction or `undefined` for non-arrow key codes.\n */\nexport function getLocalizedArrowKeyCodeDirection(keyCode, contentLanguageDirection) {\n    const isLtrContent = contentLanguageDirection === 'ltr';\n    switch (keyCode) {\n        case keyCodes.arrowleft:\n            return isLtrContent ? 'left' : 'right';\n        case keyCodes.arrowright:\n            return isLtrContent ? 'right' : 'left';\n        case keyCodes.arrowup:\n            return 'up';\n        case keyCodes.arrowdown:\n            return 'down';\n    }\n}\n/**\n * Converts a key name to the key code with mapping based on the env.\n *\n * See: {@link module:utils/keyboard~getCode}.\n *\n * @param key The key name (see {@link module:utils/keyboard#keyCodes}).\n * @returns Key code.\n */\nfunction getEnvKeyCode(key) {\n    // Don't remap modifier key for forced modifiers.\n    if (key.endsWith('!')) {\n        return getCode(key.slice(0, -1));\n    }\n    const code = getCode(key);\n    return (env.isMac || env.isiOS) && code == keyCodes.ctrl ? keyCodes.cmd : code;\n}\n/**\n * Determines if the provided key code moves the {@link module:engine/model/documentselection~DocumentSelection selection}\n * forward or backward considering the language direction of the editor content.\n *\n * For instance, in right–to–left (RTL) languages, pressing the left arrow means moving forward\n * in the model structure. Similarly, pressing the right arrow moves the selection backward.\n *\n * @param keyCode A key code as in {@link module:utils/keyboard~KeystrokeInfo#keyCode}.\n * @param contentLanguageDirection The content language direction, corresponding to\n * {@link module:utils/locale~Locale#contentLanguageDirection}.\n */\nexport function isForwardArrowKeyCode(keyCode, contentLanguageDirection) {\n    const localizedKeyCodeDirection = getLocalizedArrowKeyCodeDirection(keyCode, contentLanguageDirection);\n    return localizedKeyCodeDirection === 'down' || localizedKeyCodeDirection === 'right';\n}\nfunction generateKnownKeyCodes() {\n    const keyCodes = {\n        pageup: 33,\n        pagedown: 34,\n        arrowleft: 37,\n        arrowup: 38,\n        arrowright: 39,\n        arrowdown: 40,\n        backspace: 8,\n        delete: 46,\n        enter: 13,\n        space: 32,\n        esc: 27,\n        tab: 9,\n        // The idea about these numbers is that they do not collide with any real key codes, so we can use them\n        // like bit masks.\n        ctrl: 0x110000,\n        shift: 0x220000,\n        alt: 0x440000,\n        cmd: 0x880000\n    };\n    // a-z\n    for (let code = 65; code <= 90; code++) {\n        const letter = String.fromCharCode(code);\n        keyCodes[letter.toLowerCase()] = code;\n    }\n    // 0-9\n    for (let code = 48; code <= 57; code++) {\n        keyCodes[code - 48] = code;\n    }\n    // F1-F12\n    for (let code = 112; code <= 123; code++) {\n        keyCodes['f' + (code - 111)] = code;\n    }\n    // other characters\n    Object.assign(keyCodes, {\n        '\\'': 222,\n        ',': 108,\n        '-': 109,\n        '.': 110,\n        '/': 111,\n        ';': 186,\n        '=': 187,\n        '[': 219,\n        '\\\\': 220,\n        ']': 221,\n        '`': 223\n    });\n    return keyCodes;\n}\nfunction splitKeystrokeText(keystroke) {\n    return keystroke.split('+').map(key => key.trim());\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nexport default function toArray(data) {\n    return Array.isArray(data) ? data : [data];\n}\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignMergeValue;\n", "import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n", "import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n", "/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nexport default safeGet;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n", "import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n", "import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nexport default baseMerge;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nexport default identity;\n", "/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nexport default apply;\n", "import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nexport default overRest;\n", "/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nexport default constant;\n", "import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nexport default baseSetToString;\n", "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nexport default shortOut;\n", "import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n", "import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n", "import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nexport default isIterateeCall;\n", "import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nexport default createAssigner;\n", "import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport CKEditorError from './ckeditorerror.js';\nimport global from './dom/global.js';\nimport { merge } from 'lodash-es';\n/* istanbul ignore else -- @preserve */\nif (!global.window.CKEDITOR_TRANSLATIONS) {\n    global.window.CKEDITOR_TRANSLATIONS = {};\n}\n/**\n * Adds translations to existing ones or overrides the existing translations. These translations will later\n * be available for the {@link module:utils/locale~Locale#t `t()`} function.\n *\n * The `translations` is an object which consists of `messageId: translation` pairs. Note that the message ID can be\n * either constructed from the message string or from the message ID if it was passed\n * (this happens rarely and mostly for short messages or messages with placeholders).\n * Since the editor displays only the message string, the message ID can be found either in the source code or in the\n * built translations for another language.\n *\n * ```ts\n * add( 'pl', {\n * \t'Cancel': 'Anuluj',\n * \t'IMAGE': 'obraz', // Note that the `IMAGE` comes from the message ID, while the string can be `image`.\n * } );\n * ```\n *\n * If the message is supposed to support various plural forms, make sure to provide an array with the singular form and all plural forms:\n *\n * ```ts\n * add( 'pl', {\n * \t'Add space': [ 'Dodaj spację', 'Dodaj %0 spacje', 'Dodaj %0 spacji' ]\n * } );\n * ```\n *\n * You should also specify the third argument (the `getPluralForm()` function) that will be used to determine the plural form if no\n * language file was loaded for that language. All language files coming from CKEditor 5 sources will have this option set, so\n * these plural form rules will be reused by other translations added to the registered languages. The `getPluralForm()` function\n * can return either a Boolean or a number.\n *\n * ```ts\n * add( 'en', {\n * \t// ... Translations.\n * }, n => n !== 1 );\n * add( 'pl', {\n * \t// ... Translations.\n * }, n => n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 );\n * ```\n *\n * All translations extend the global `window.CKEDITOR_TRANSLATIONS` object. An example of this object can be found below:\n *\n * ```ts\n * {\n * \tpl: {\n * \t\tdictionary: {\n * \t\t\t'Cancel': 'Anuluj',\n * \t\t\t'Add space': [ 'Dodaj spację', 'Dodaj %0 spacje', 'Dodaj %0 spacji' ]\n * \t\t},\n * \t\t// A function that returns the plural form index.\n * \t\tgetPluralForm: n => n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 ) ? 1 : 2 );\n * \t}\n * \t// Other languages.\n * \t}\n * ```\n *\n * If you cannot import this function from this module (e.g. because you use a CKEditor 5 build), you can\n * still add translations by extending the global `window.CKEDITOR_TRANSLATIONS` object by using a function like\n * the one below:\n *\n * ```ts\n * function addTranslations( language, translations, getPluralForm ) {\n * \tif ( !global.window.CKEDITOR_TRANSLATIONS ) {\n * \t\tglobal.window.CKEDITOR_TRANSLATIONS = {};\n * \t}\n\n * \tif ( !global.window.CKEDITOR_TRANSLATIONS[ language ] ) {\n * \t\tglobal.window.CKEDITOR_TRANSLATIONS[ language ] = {};\n * \t}\n *\n * \tconst languageTranslations = global.window.CKEDITOR_TRANSLATIONS[ language ];\n *\n * \tlanguageTranslations.dictionary = languageTranslations.dictionary || {};\n * \tlanguageTranslations.getPluralForm = getPluralForm || languageTranslations.getPluralForm;\n *\n * \t// Extend the dictionary for the given language.\n * \tObject.assign( languageTranslations.dictionary, translations );\n * }\n * ```\n *\n * @param language Target language.\n * @param translations An object with translations which will be added to the dictionary.\n * For each message ID the value should be either a translation or an array of translations if the message\n * should support plural forms.\n * @param getPluralForm A function that returns the plural form index (a number).\n */\nexport function add(language, translations, getPluralForm) {\n    if (!global.window.CKEDITOR_TRANSLATIONS[language]) {\n        global.window.CKEDITOR_TRANSLATIONS[language] = {};\n    }\n    const languageTranslations = global.window.CKEDITOR_TRANSLATIONS[language];\n    languageTranslations.dictionary = languageTranslations.dictionary || {};\n    languageTranslations.getPluralForm = getPluralForm || languageTranslations.getPluralForm;\n    Object.assign(languageTranslations.dictionary, translations);\n}\n/**\n * **Note:** This method is internal, use {@link module:utils/locale~Locale#t the `t()` function} instead to translate\n * the editor UI parts.\n *\n * This function is responsible for translating messages to the specified language. It uses translations added perviously\n * by {@link module:utils/translation-service~add} (a translations dictionary and the `getPluralForm()` function\n * to provide accurate translations of plural forms).\n *\n * When no translation is defined in the dictionary or the dictionary does not exist, this function returns\n * the original message string or the message plural depending on the number of elements.\n *\n * ```ts\n * translate( 'pl', { string: 'Cancel' } ); // 'Cancel'\n * ```\n *\n * The third optional argument is the number of elements, based on which the single form or one of the plural forms\n * should be picked when the message is supposed to support various plural forms.\n *\n * ```ts\n * translate( 'en', { string: 'Add a space', plural: 'Add %0 spaces' }, 1 ); // 'Add a space'\n * translate( 'en', { string: 'Add a space', plural: 'Add %0 spaces' }, 3 ); // 'Add %0 spaces'\n * ```\n *\n * The message should provide an ID using the `id` property when the message strings are not unique and their\n * translations should be different.\n *\n * ```ts\n * translate( 'en', { string: 'image', id: 'ADD_IMAGE' } );\n * translate( 'en', { string: 'image', id: 'AN_IMAGE' } );\n * ```\n *\n * @internal\n * @param language Target language.\n * @param message A message that will be translated.\n * @param quantity The number of elements for which a plural form should be picked from the target language dictionary.\n * @param translations Translations passed in editor config, if not provided use the global `window.CKEDITOR_TRANSLATIONS`.\n * @returns Translated sentence.\n */\nexport function _translate(language, message, quantity = 1, translations) {\n    if (typeof quantity !== 'number') {\n        /**\n         * An incorrect value was passed to the translation function. This was probably caused\n         * by an incorrect message interpolation of a plural form. Note that for messages supporting plural forms\n         * the second argument of the `t()` function should always be a number or an array with a number as the first element.\n         *\n         * @error translation-service-quantity-not-a-number\n         */\n        throw new CKEditorError('translation-service-quantity-not-a-number', null, { quantity });\n    }\n    const normalizedTranslations = translations || global.window.CKEDITOR_TRANSLATIONS;\n    const numberOfLanguages = getNumberOfLanguages(normalizedTranslations);\n    if (numberOfLanguages === 1) {\n        // Override the language to the only supported one.\n        // This can't be done in the `Locale` class, because the translations comes after the `Locale` class initialization.\n        language = Object.keys(normalizedTranslations)[0];\n    }\n    const messageId = message.id || message.string;\n    if (numberOfLanguages === 0 || !hasTranslation(language, messageId, normalizedTranslations)) {\n        if (quantity !== 1) {\n            // Return the default plural form that was passed in the `message.plural` parameter.\n            return message.plural;\n        }\n        return message.string;\n    }\n    const dictionary = normalizedTranslations[language].dictionary;\n    const getPluralForm = normalizedTranslations[language].getPluralForm || (n => n === 1 ? 0 : 1);\n    const translation = dictionary[messageId];\n    if (typeof translation === 'string') {\n        return translation;\n    }\n    const pluralFormIndex = Number(getPluralForm(quantity));\n    // Note: The `translate` function is not responsible for replacing `%0, %1, ...` with values.\n    return translation[pluralFormIndex];\n}\n/**\n * Clears dictionaries for test purposes.\n *\n * @internal\n */\nexport function _clear() {\n    if (global.window.CKEDITOR_TRANSLATIONS) {\n        global.window.CKEDITOR_TRANSLATIONS = {};\n    }\n}\n/**\n * If array then merge objects which are inside otherwise return given object.\n *\n * @internal\n * @param translations Translations passed in editor config.\n */\nexport function _unifyTranslations(translations) {\n    return Array.isArray(translations) ?\n        translations.reduce((acc, translation) => merge(acc, translation)) :\n        translations;\n}\n/**\n * Checks whether the dictionary exists and translation in that dictionary exists.\n */\nfunction hasTranslation(language, messageId, translations) {\n    return !!translations[language] && !!translations[language].dictionary[messageId];\n}\nfunction getNumberOfLanguages(translations) {\n    return Object.keys(translations).length;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nconst RTL_LANGUAGE_CODES = [\n    'ar', 'ara',\n    'dv', 'div',\n    'fa', 'per', 'fas',\n    'he', 'heb',\n    'ku', 'kur',\n    'ug', 'uig' // Uighur, Uyghur\n];\n/**\n * Helps determine whether a language text direction is LTR or RTL.\n *\n * @param languageCode The ISO 639-1 or ISO 639-2 language code.\n */\nexport function getLanguageDirection(languageCode) {\n    return RTL_LANGUAGE_CODES.includes(languageCode) ? 'rtl' : 'ltr';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/locale\n */\n/* globals console */\nimport toArray from './toarray.js';\nimport { _translate, _unifyTranslations } from './translation-service.js';\nimport { getLanguageDirection } from './language.js';\n/**\n * Represents the localization services.\n */\nexport default class Locale {\n    /**\n     * Creates a new instance of the locale class. Learn more about\n     * {@glink getting-started/setup/ui-language configuring the language of the editor}.\n     *\n     * @param options Locale configuration.\n     * @param options.uiLanguage The editor UI language code in the\n     * [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format. See {@link #uiLanguage}.\n     * @param options.contentLanguage The editor content language code in the\n     * [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format. If not specified, the same as `options.language`.\n     * See {@link #contentLanguage}.\n     * @param translations Translations passed as a editor config parameter.\n     */\n    constructor({ uiLanguage = 'en', contentLanguage, translations } = {}) {\n        this.uiLanguage = uiLanguage;\n        this.contentLanguage = contentLanguage || this.uiLanguage;\n        this.uiLanguageDirection = getLanguageDirection(this.uiLanguage);\n        this.contentLanguageDirection = getLanguageDirection(this.contentLanguage);\n        this.translations = _unifyTranslations(translations);\n        this.t = (message, values) => this._t(message, values);\n    }\n    /**\n     * The editor UI language code in the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format.\n     *\n     * **Note**: This property was deprecated. Please use {@link #uiLanguage} and {@link #contentLanguage}\n     * properties instead.\n     *\n     * @deprecated\n     */\n    get language() {\n        /**\n         * The {@link module:utils/locale~Locale#language `Locale#language`} property was deprecated and will\n         * be removed in the near future. Please use the {@link module:utils/locale~Locale#uiLanguage `Locale#uiLanguage`} and\n         * {@link module:utils/locale~Locale#contentLanguage `Locale#contentLanguage`} properties instead.\n         *\n         * @error locale-deprecated-language-property\n         */\n        console.warn('locale-deprecated-language-property: ' +\n            'The Locale#language property has been deprecated and will be removed in the near future. ' +\n            'Please use #uiLanguage and #contentLanguage properties instead.');\n        return this.uiLanguage;\n    }\n    /**\n     * An unbound version of the {@link #t} method.\n     */\n    _t(message, values = []) {\n        values = toArray(values);\n        if (typeof message === 'string') {\n            message = { string: message };\n        }\n        const hasPluralForm = !!message.plural;\n        const quantity = hasPluralForm ? values[0] : 1;\n        const translatedString = _translate(this.uiLanguage, message, quantity, this.translations);\n        return interpolateString(translatedString, values);\n    }\n}\n/**\n * Fills the `%0, %1, ...` string placeholders with values.\n */\nfunction interpolateString(string, values) {\n    return string.replace(/%(\\d+)/g, (match, index) => {\n        return (index < values.length) ? values[index] : match;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/collection\n */\nimport EmitterMixin from './emittermixin.js';\nimport CKEditorError from './ckeditorerror.js';\nimport uid from './uid.js';\nimport isIterable from './isiterable.js';\n/**\n * Collections are ordered sets of objects. Items in the collection can be retrieved by their indexes\n * in the collection (like in an array) or by their ids.\n *\n * If an object without an `id` property is being added to the collection, the `id` property will be generated\n * automatically. Note that the automatically generated id is unique only within this single collection instance.\n *\n * By default an item in the collection is identified by its `id` property. The name of the identifier can be\n * configured through the constructor of the collection.\n *\n * @typeParam T The type of the collection element.\n */\nexport default class Collection extends /* #__PURE__ */ EmitterMixin() {\n    constructor(initialItemsOrOptions = {}, options = {}) {\n        super();\n        const hasInitialItems = isIterable(initialItemsOrOptions);\n        if (!hasInitialItems) {\n            options = initialItemsOrOptions;\n        }\n        this._items = [];\n        this._itemMap = new Map();\n        this._idProperty = options.idProperty || 'id';\n        this._bindToExternalToInternalMap = new WeakMap();\n        this._bindToInternalToExternalMap = new WeakMap();\n        this._skippedIndexesFromExternal = [];\n        // Set the initial content of the collection (if provided in the constructor).\n        if (hasInitialItems) {\n            for (const item of initialItemsOrOptions) {\n                this._items.push(item);\n                this._itemMap.set(this._getItemIdBeforeAdding(item), item);\n            }\n        }\n    }\n    /**\n     * The number of items available in the collection.\n     */\n    get length() {\n        return this._items.length;\n    }\n    /**\n     * Returns the first item from the collection or null when collection is empty.\n     */\n    get first() {\n        return this._items[0] || null;\n    }\n    /**\n     * Returns the last item from the collection or null when collection is empty.\n     */\n    get last() {\n        return this._items[this.length - 1] || null;\n    }\n    /**\n     * Adds an item into the collection.\n     *\n     * If the item does not have an id, then it will be automatically generated and set on the item.\n     *\n     * @param item\n     * @param index The position of the item in the collection. The item\n     * is pushed to the collection when `index` not specified.\n     * @fires add\n     * @fires change\n     */\n    add(item, index) {\n        return this.addMany([item], index);\n    }\n    /**\n     * Adds multiple items into the collection.\n     *\n     * Any item not containing an id will get an automatically generated one.\n     *\n     * @param items\n     * @param index The position of the insertion. Items will be appended if no `index` is specified.\n     * @fires add\n     * @fires change\n     */\n    addMany(items, index) {\n        if (index === undefined) {\n            index = this._items.length;\n        }\n        else if (index > this._items.length || index < 0) {\n            /**\n             * The `index` passed to {@link module:utils/collection~Collection#addMany `Collection#addMany()`}\n             * is invalid. It must be a number between 0 and the collection's length.\n             *\n             * @error collection-add-item-invalid-index\n             */\n            throw new CKEditorError('collection-add-item-invalid-index', this);\n        }\n        let offset = 0;\n        for (const item of items) {\n            const itemId = this._getItemIdBeforeAdding(item);\n            const currentItemIndex = index + offset;\n            this._items.splice(currentItemIndex, 0, item);\n            this._itemMap.set(itemId, item);\n            this.fire('add', item, currentItemIndex);\n            offset++;\n        }\n        this.fire('change', {\n            added: items,\n            removed: [],\n            index\n        });\n        return this;\n    }\n    /**\n     * Gets an item by its ID or index.\n     *\n     * @param idOrIndex The item ID or index in the collection.\n     * @returns The requested item or `null` if such item does not exist.\n     */\n    get(idOrIndex) {\n        let item;\n        if (typeof idOrIndex == 'string') {\n            item = this._itemMap.get(idOrIndex);\n        }\n        else if (typeof idOrIndex == 'number') {\n            item = this._items[idOrIndex];\n        }\n        else {\n            /**\n             * An index or ID must be given.\n             *\n             * @error collection-get-invalid-arg\n             */\n            throw new CKEditorError('collection-get-invalid-arg', this);\n        }\n        return item || null;\n    }\n    /**\n     * Returns a Boolean indicating whether the collection contains an item.\n     *\n     * @param itemOrId The item or its ID in the collection.\n     * @returns `true` if the collection contains the item, `false` otherwise.\n     */\n    has(itemOrId) {\n        if (typeof itemOrId == 'string') {\n            return this._itemMap.has(itemOrId);\n        }\n        else { // Object\n            const idProperty = this._idProperty;\n            const id = itemOrId[idProperty];\n            return id && this._itemMap.has(id);\n        }\n    }\n    /**\n     * Gets an index of an item in the collection.\n     * When an item is not defined in the collection, the index will equal -1.\n     *\n     * @param itemOrId The item or its ID in the collection.\n     * @returns The index of a given item.\n     */\n    getIndex(itemOrId) {\n        let item;\n        if (typeof itemOrId == 'string') {\n            item = this._itemMap.get(itemOrId);\n        }\n        else {\n            item = itemOrId;\n        }\n        return item ? this._items.indexOf(item) : -1;\n    }\n    /**\n     * Removes an item from the collection.\n     *\n     * @param subject The item to remove, its ID or index in the collection.\n     * @returns The removed item.\n     * @fires remove\n     * @fires change\n     */\n    remove(subject) {\n        const [item, index] = this._remove(subject);\n        this.fire('change', {\n            added: [],\n            removed: [item],\n            index\n        });\n        return item;\n    }\n    /**\n     * Executes the callback for each item in the collection and composes an array or values returned by this callback.\n     *\n     * @typeParam U The result type of the callback.\n     * @param callback\n     * @param ctx Context in which the `callback` will be called.\n     * @returns The result of mapping.\n     */\n    map(callback, ctx) {\n        return this._items.map(callback, ctx);\n    }\n    /**\n     * Performs the specified action for each item in the collection.\n     *\n     * @param ctx Context in which the `callback` will be called.\n     */\n    forEach(callback, ctx) {\n        this._items.forEach(callback, ctx);\n    }\n    /**\n     * Finds the first item in the collection for which the `callback` returns a true value.\n     *\n     * @param callback\n     * @param ctx Context in which the `callback` will be called.\n     * @returns The item for which `callback` returned a true value.\n     */\n    find(callback, ctx) {\n        return this._items.find(callback, ctx);\n    }\n    /**\n     * Returns an array with items for which the `callback` returned a true value.\n     *\n     * @param callback\n     * @param ctx Context in which the `callback` will be called.\n     * @returns The array with matching items.\n     */\n    filter(callback, ctx) {\n        return this._items.filter(callback, ctx);\n    }\n    /**\n     * Removes all items from the collection and destroys the binding created using\n     * {@link #bindTo}.\n     *\n     * @fires remove\n     * @fires change\n     */\n    clear() {\n        if (this._bindToCollection) {\n            this.stopListening(this._bindToCollection);\n            this._bindToCollection = null;\n        }\n        const removedItems = Array.from(this._items);\n        while (this.length) {\n            this._remove(0);\n        }\n        this.fire('change', {\n            added: [],\n            removed: removedItems,\n            index: 0\n        });\n    }\n    /**\n     * Binds and synchronizes the collection with another one.\n     *\n     * The binding can be a simple factory:\n     *\n     * ```ts\n     * class FactoryClass {\n     * \tpublic label: string;\n     *\n     * \tconstructor( data: { label: string } ) {\n     * \t\tthis.label = data.label;\n     * \t}\n     * }\n     *\n     * const source = new Collection<{ label: string }>( { idProperty: 'label' } );\n     * const target = new Collection<FactoryClass>();\n     *\n     * target.bindTo( source ).as( FactoryClass );\n     *\n     * source.add( { label: 'foo' } );\n     * source.add( { label: 'bar' } );\n     *\n     * console.log( target.length ); // 2\n     * console.log( target.get( 1 ).label ); // 'bar'\n     *\n     * source.remove( 0 );\n     * console.log( target.length ); // 1\n     * console.log( target.get( 0 ).label ); // 'bar'\n     * ```\n     *\n     * or the factory driven by a custom callback:\n     *\n     * ```ts\n     * class FooClass {\n     * \tpublic label: string;\n     *\n     * \tconstructor( data: { label: string } ) {\n     * \t\tthis.label = data.label;\n     * \t}\n     * }\n     *\n     * class BarClass {\n     * \tpublic label: string;\n     *\n     * \tconstructor( data: { label: string } ) {\n     * \t\tthis.label = data.label;\n     * \t}\n     * }\n     *\n     * const source = new Collection<{ label: string }>( { idProperty: 'label' } );\n     * const target = new Collection<FooClass | BarClass>();\n     *\n     * target.bindTo( source ).using( ( item ) => {\n     * \tif ( item.label == 'foo' ) {\n     * \t\treturn new FooClass( item );\n     * \t} else {\n     * \t\treturn new BarClass( item );\n     * \t}\n     * } );\n     *\n     * source.add( { label: 'foo' } );\n     * source.add( { label: 'bar' } );\n     *\n     * console.log( target.length ); // 2\n     * console.log( target.get( 0 ) instanceof FooClass ); // true\n     * console.log( target.get( 1 ) instanceof BarClass ); // true\n     * ```\n     *\n     * or the factory out of property name:\n     *\n     * ```ts\n     * const source = new Collection<{ nested: { value: string } }>();\n     * const target = new Collection<{ value: string }>();\n     *\n     * target.bindTo( source ).using( 'nested' );\n     *\n     * source.add( { nested: { value: 'foo' } } );\n     * source.add( { nested: { value: 'bar' } } );\n     *\n     * console.log( target.length ); // 2\n     * console.log( target.get( 0 ).value ); // 'foo'\n     * console.log( target.get( 1 ).value ); // 'bar'\n     * ```\n     *\n     * It's possible to skip specified items by returning null value:\n     *\n     * ```ts\n     * const source = new Collection<{ hidden: boolean }>();\n     * const target = new Collection<{ hidden: boolean }>();\n     *\n     * target.bindTo( source ).using( item => {\n     * \tif ( item.hidden ) {\n     * \t\treturn null;\n     * \t}\n     *\n     * \treturn item;\n     * } );\n     *\n     * source.add( { hidden: true } );\n     * source.add( { hidden: false } );\n     *\n     * console.log( source.length ); // 2\n     * console.log( target.length ); // 1\n     * ```\n     *\n     * **Note**: {@link #clear} can be used to break the binding.\n     *\n     * @typeParam S The type of `externalCollection` element.\n     * @param externalCollection A collection to be bound.\n     * @returns The binding chain object.\n     */\n    bindTo(externalCollection) {\n        if (this._bindToCollection) {\n            /**\n             * The collection cannot be bound more than once.\n             *\n             * @error collection-bind-to-rebind\n             */\n            throw new CKEditorError('collection-bind-to-rebind', this);\n        }\n        this._bindToCollection = externalCollection;\n        return {\n            as: Class => {\n                this._setUpBindToBinding(item => new Class(item));\n            },\n            using: callbackOrProperty => {\n                if (typeof callbackOrProperty == 'function') {\n                    this._setUpBindToBinding(callbackOrProperty);\n                }\n                else {\n                    this._setUpBindToBinding(item => item[callbackOrProperty]);\n                }\n            }\n        };\n    }\n    /**\n     * Finalizes and activates a binding initiated by {@link #bindTo}.\n     *\n     * @param factory A function which produces collection items.\n     */\n    _setUpBindToBinding(factory) {\n        const externalCollection = this._bindToCollection;\n        // Adds the item to the collection once a change has been done to the external collection.\n        const addItem = (evt, externalItem, index) => {\n            const isExternalBoundToThis = externalCollection._bindToCollection == this;\n            const externalItemBound = externalCollection._bindToInternalToExternalMap.get(externalItem);\n            // If an external collection is bound to this collection, which makes it a 2–way binding,\n            // and the particular external collection item is already bound, don't add it here.\n            // The external item has been created **out of this collection's item** and (re)adding it will\n            // cause a loop.\n            if (isExternalBoundToThis && externalItemBound) {\n                this._bindToExternalToInternalMap.set(externalItem, externalItemBound);\n                this._bindToInternalToExternalMap.set(externalItemBound, externalItem);\n            }\n            else {\n                const item = factory(externalItem);\n                // When there is no item we need to remember skipped index first and then we can skip this item.\n                if (!item) {\n                    this._skippedIndexesFromExternal.push(index);\n                    return;\n                }\n                // Lets try to put item at the same index as index in external collection\n                // but when there are a skipped items in one or both collections we need to recalculate this index.\n                let finalIndex = index;\n                // When we try to insert item after some skipped items from external collection we need\n                // to include this skipped items and decrease index.\n                //\n                // For the following example:\n                // external -> [ 'A', 'B - skipped for internal', 'C - skipped for internal' ]\n                // internal -> [ A ]\n                //\n                // Another item is been added at the end of external collection:\n                // external.add( 'D' )\n                // external -> [ 'A', 'B - skipped for internal', 'C - skipped for internal', 'D' ]\n                //\n                // We can't just add 'D' to internal at the same index as index in external because\n                // this will produce empty indexes what is invalid:\n                // internal -> [ 'A', empty, empty, 'D' ]\n                //\n                // So we need to include skipped items and decrease index\n                // internal -> [ 'A', 'D' ]\n                for (const skipped of this._skippedIndexesFromExternal) {\n                    if (index > skipped) {\n                        finalIndex--;\n                    }\n                }\n                // We need to take into consideration that external collection could skip some items from\n                // internal collection.\n                //\n                // For the following example:\n                // internal -> [ 'A', 'B - skipped for external', 'C - skipped for external' ]\n                // external -> [ A ]\n                //\n                // Another item is been added at the end of external collection:\n                // external.add( 'D' )\n                // external -> [ 'A', 'D' ]\n                //\n                // We need to include skipped items and place new item after them:\n                // internal -> [ 'A', 'B - skipped for external', 'C - skipped for external', 'D' ]\n                for (const skipped of externalCollection._skippedIndexesFromExternal) {\n                    if (finalIndex >= skipped) {\n                        finalIndex++;\n                    }\n                }\n                this._bindToExternalToInternalMap.set(externalItem, item);\n                this._bindToInternalToExternalMap.set(item, externalItem);\n                this.add(item, finalIndex);\n                // After adding new element to internal collection we need update indexes\n                // of skipped items in external collection.\n                for (let i = 0; i < externalCollection._skippedIndexesFromExternal.length; i++) {\n                    if (finalIndex <= externalCollection._skippedIndexesFromExternal[i]) {\n                        externalCollection._skippedIndexesFromExternal[i]++;\n                    }\n                }\n            }\n        };\n        // Load the initial content of the collection.\n        for (const externalItem of externalCollection) {\n            addItem(null, externalItem, externalCollection.getIndex(externalItem));\n        }\n        // Synchronize the with collection as new items are added.\n        this.listenTo(externalCollection, 'add', addItem);\n        // Synchronize the with collection as new items are removed.\n        this.listenTo(externalCollection, 'remove', (evt, externalItem, index) => {\n            const item = this._bindToExternalToInternalMap.get(externalItem);\n            if (item) {\n                this.remove(item);\n            }\n            // After removing element from external collection we need update/remove indexes\n            // of skipped items in internal collection.\n            this._skippedIndexesFromExternal = this._skippedIndexesFromExternal.reduce((result, skipped) => {\n                if (index < skipped) {\n                    result.push(skipped - 1);\n                }\n                if (index > skipped) {\n                    result.push(skipped);\n                }\n                return result;\n            }, []);\n        });\n    }\n    /**\n     * Returns an unique id property for a given `item`.\n     *\n     * The method will generate new id and assign it to the `item` if it doesn't have any.\n     *\n     * @param item Item to be added.\n     */\n    _getItemIdBeforeAdding(item) {\n        const idProperty = this._idProperty;\n        let itemId;\n        if ((idProperty in item)) {\n            itemId = item[idProperty];\n            if (typeof itemId != 'string') {\n                /**\n                 * This item's ID should be a string.\n                 *\n                 * @error collection-add-invalid-id\n                 */\n                throw new CKEditorError('collection-add-invalid-id', this);\n            }\n            if (this.get(itemId)) {\n                /**\n                 * This item already exists in the collection.\n                 *\n                 * @error collection-add-item-already-exists\n                 */\n                throw new CKEditorError('collection-add-item-already-exists', this);\n            }\n        }\n        else {\n            item[idProperty] = itemId = uid();\n        }\n        return itemId;\n    }\n    /**\n     * Core {@link #remove} method implementation shared in other functions.\n     *\n     * In contrast this method **does not** fire the {@link #event:change} event.\n     *\n     * @param subject The item to remove, its id or index in the collection.\n     * @returns Returns an array with the removed item and its index.\n     * @fires remove\n     */\n    _remove(subject) {\n        let index, id, item;\n        let itemDoesNotExist = false;\n        const idProperty = this._idProperty;\n        if (typeof subject == 'string') {\n            id = subject;\n            item = this._itemMap.get(id);\n            itemDoesNotExist = !item;\n            if (item) {\n                index = this._items.indexOf(item);\n            }\n        }\n        else if (typeof subject == 'number') {\n            index = subject;\n            item = this._items[index];\n            itemDoesNotExist = !item;\n            if (item) {\n                id = item[idProperty];\n            }\n        }\n        else {\n            item = subject;\n            id = item[idProperty];\n            index = this._items.indexOf(item);\n            itemDoesNotExist = (index == -1 || !this._itemMap.get(id));\n        }\n        if (itemDoesNotExist) {\n            /**\n             * Item not found.\n             *\n             * @error collection-remove-404\n             */\n            throw new CKEditorError('collection-remove-404', this);\n        }\n        this._items.splice(index, 1);\n        this._itemMap.delete(id);\n        const externalItem = this._bindToInternalToExternalMap.get(item);\n        this._bindToInternalToExternalMap.delete(item);\n        this._bindToExternalToInternalMap.delete(externalItem);\n        this.fire('remove', item, index);\n        return [item, index];\n    }\n    /**\n     * Iterable interface.\n     */\n    [Symbol.iterator]() {\n        return this._items[Symbol.iterator]();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/first\n */\n/**\n * Returns first item of the given `iterator`.\n */\nexport default function first(iterator) {\n    const iteratorItem = iterator.next();\n    if (iteratorItem.done) {\n        return null;\n    }\n    return iteratorItem.value;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* global setTimeout, clearTimeout */\n/**\n * @module utils/focustracker\n */\nimport DomEmitterMixin from './dom/emittermixin.js';\nimport ObservableMixin from './observablemixin.js';\nimport CKEditorError from './ckeditorerror.js';\nimport { isElement as _isElement } from 'lodash-es';\n/**\n * Allows observing a group of DOM `Element`s or {@link module:ui/view~View view instances} whether at least one of them (or their child)\n * is focused.\n *\n * Used by the {@link module:core/editor/editor~Editor} in order to track whether the focus is still within the application,\n * or were used outside of its UI.\n *\n * **Note** `focus` and `blur` listeners use event capturing, so it is only needed to register wrapper `Element`\n * which contain other `focusable` elements. But note that this wrapper element has to be focusable too\n * (have e.g. `tabindex=\"-1\"`).\n *\n * Check out the {@glink framework/deep-dive/ui/focus-tracking \"Deep dive into focus tracking\"} guide to learn more.\n */\nexport default class FocusTracker extends /* #__PURE__ */ DomEmitterMixin(/* #__PURE__ */ ObservableMixin()) {\n    // @if CK_DEBUG_FOCUSTRACKER // public _label?: string;\n    constructor() {\n        super();\n        /**\n         * List of registered DOM elements.\n         *\n         * @internal\n         */\n        this._elements = new Set();\n        /**\n         * List of views with external focus trackers that contribute to the state of this focus tracker.\n         *\n         * @internal\n         */\n        this._externalViews = new Set();\n        /**\n         * Asynchronous blur event timeout.\n         */\n        this._blurTimeout = null;\n        this.set('isFocused', false);\n        this.set('focusedElement', null);\n        // @if CK_DEBUG_FOCUSTRACKER // FocusTracker._instances.push( this );\n    }\n    /**\n     * List of registered DOM elements.\n     *\n     * **Note**: The list does do not include elements from {@link #externalViews}.\n     */\n    get elements() {\n        return Array.from(this._elements.values());\n    }\n    /**\n     * List of external focusable views that contribute to the state of this focus tracker. See {@link #add} to learn more.\n     */\n    get externalViews() {\n        return Array.from(this._externalViews.values());\n    }\n    /**\n     * Starts tracking a specified DOM element or a {@link module:ui/view~View} instance.\n     *\n     * * If a DOM element is passed, the focus tracker listens to the `focus` and `blur` events on this element.\n     * Tracked elements are listed in {@link #elements}.\n     * * If a {@link module:ui/view~View} instance is passed that has a `FocusTracker` instance ({@link ~ViewWithFocusTracker}),\n     * the external focus tracker's state ({@link #isFocused}, {@link #focusedElement}) starts contributing to the current tracker instance.\n     * This allows for increasing the \"reach\" of a focus tracker instance, by connecting two or more focus trackers together when DOM\n     * elements they track are located in different subtrees in DOM. External focus trackers are listed in {@link #externalViews}.\n     * * If a {@link module:ui/view~View} instance is passed that has no `FocusTracker` (**not** a {@link ~ViewWithFocusTracker}),\n     * its {@link module:ui/view~View#element} is used to track focus like any other DOM element.\n     */\n    add(elementOrView) {\n        if (isElement(elementOrView)) {\n            this._addElement(elementOrView);\n        }\n        else {\n            if (isViewWithFocusTracker(elementOrView)) {\n                this._addView(elementOrView);\n            }\n            else {\n                if (!elementOrView.element) {\n                    /**\n                     * The {@link module:ui/view~View} added to the {@link module:utils/focustracker~FocusTracker} does not have an\n                     * {@link module:ui/view~View#element}. Make sure the view is {@link module:ui/view~View#render} before adding\n                     * it to the focus tracker.\n                     *\n                     * @error focustracker-add-view-missing-element\n                     */\n                    throw new CKEditorError('focustracker-add-view-missing-element', {\n                        focusTracker: this,\n                        view: elementOrView\n                    });\n                }\n                this._addElement(elementOrView.element);\n            }\n        }\n    }\n    /**\n     * Stops tracking focus in the specified DOM element or a {@link module:ui/view~View view instance}. See {@link #add} to learn more.\n     */\n    remove(elementOrView) {\n        if (isElement(elementOrView)) {\n            this._removeElement(elementOrView);\n        }\n        else {\n            if (isViewWithFocusTracker(elementOrView)) {\n                this._removeView(elementOrView);\n            }\n            else {\n                // Assuming that if the view was successfully added, it must have come with an existing #element.\n                this._removeElement(elementOrView.element);\n            }\n        }\n    }\n    /**\n     * Adds a DOM element to the focus tracker and starts listening to the `focus` and `blur` events on it.\n     */\n    _addElement(element) {\n        if (this._elements.has(element)) {\n            /**\n             * This element is already tracked by {@link module:utils/focustracker~FocusTracker}.\n             *\n             * @error focustracker-add-element-already-exist\n             */\n            throw new CKEditorError('focustracker-add-element-already-exist', this);\n        }\n        this.listenTo(element, 'focus', () => {\n            // @if CK_DEBUG_FOCUSTRACKER // console.log( `\"${ getName( this ) }\": Focus with useCapture on DOM element` );\n            const externalFocusedViewInSubtree = this.externalViews.find(view => isExternalViewSubtreeFocused(element, view));\n            if (externalFocusedViewInSubtree) {\n                this._focus(externalFocusedViewInSubtree.element);\n            }\n            else {\n                this._focus(element);\n            }\n        }, { useCapture: true });\n        this.listenTo(element, 'blur', () => {\n            // @if CK_DEBUG_FOCUSTRACKER // console.log( `\"${ getName( this ) }\": Blur with useCapture on DOM element` );\n            this._blur();\n        }, { useCapture: true });\n        this._elements.add(element);\n    }\n    /**\n     * Removes a DOM element from the focus tracker.\n     */\n    _removeElement(element) {\n        if (this._elements.has(element)) {\n            this.stopListening(element);\n            this._elements.delete(element);\n        }\n        if (element === this.focusedElement) {\n            this._blur();\n        }\n    }\n    /**\n     * Adds an external {@link module:ui/view~View view instance} to this focus tracker and makes it contribute to this focus tracker's\n     * state either by its `View#element` or by its `View#focusTracker` instance.\n     */\n    _addView(view) {\n        if (view.element) {\n            this._addElement(view.element);\n        }\n        this.listenTo(view.focusTracker, 'change:focusedElement', () => {\n            // @if CK_DEBUG_FOCUSTRACKER // console.log(\n            // @if CK_DEBUG_FOCUSTRACKER // \t`\"${ getName( this ) }\": Related \"${ getName( view.focusTracker ) }\"#focusedElement = `,\n            // @if CK_DEBUG_FOCUSTRACKER // \tview.focusTracker.focusedElement\n            // @if CK_DEBUG_FOCUSTRACKER // );\n            if (view.focusTracker.focusedElement) {\n                if (view.element) {\n                    this._focus(view.element);\n                }\n            }\n            else {\n                this._blur();\n            }\n        });\n        this._externalViews.add(view);\n    }\n    /**\n     * Removes an external {@link module:ui/view~View view instance} from this focus tracker.\n     */\n    _removeView(view) {\n        if (view.element) {\n            this._removeElement(view.element);\n        }\n        this.stopListening(view.focusTracker);\n        this._externalViews.delete(view);\n    }\n    /**\n     * Destroys the focus tracker by:\n     * - Disabling all event listeners attached to tracked elements or external views.\n     * - Removing all tracked elements and views that were previously added.\n     */\n    destroy() {\n        this.stopListening();\n        this._elements.clear();\n        this._externalViews.clear();\n        this.isFocused = false;\n        this.focusedElement = null;\n    }\n    /**\n     * Stores currently focused element as {@link #focusedElement} and sets {@link #isFocused} `true`.\n     */\n    _focus(element) {\n        // @if CK_DEBUG_FOCUSTRACKER // console.log( `\"${ getName( this ) }\": _focus() on element`, element );\n        this._clearBlurTimeout();\n        this.focusedElement = element;\n        this.isFocused = true;\n    }\n    /**\n     * Clears currently {@link #focusedElement} and sets {@link #isFocused} `false`.\n     *\n     * This method uses `setTimeout()` to change order of `blur` and `focus` events calls, ensuring that moving focus between\n     * two elements within a single focus tracker's scope, will not cause `[ blurA, focusB ]` sequence but just `[ focusB ]`.\n     * The former would cause a momentary change of `#isFocused` to `false` which is not desired because any logic listening to\n     * a focus tracker state would experience UI flashes and glitches as the user focus travels across the UI.\n     */\n    _blur() {\n        const isAnyElementFocused = this.elements.find(element => element.contains(document.activeElement));\n        // Avoid blurs originating from external FTs when the focus still remains in one of the #elements.\n        if (isAnyElementFocused) {\n            return;\n        }\n        const isAnyExternalViewFocused = this.externalViews.find(view => {\n            // Do not consider external views's focus trackers as focused if there's a blur timeout pending.\n            return view.focusTracker.isFocused && !view.focusTracker._blurTimeout;\n        });\n        // Avoid unnecessary DOM blurs coming from #elements when the focus still remains in one of #externalViews.\n        if (isAnyExternalViewFocused) {\n            return;\n        }\n        this._clearBlurTimeout();\n        this._blurTimeout = setTimeout(() => {\n            // @if CK_DEBUG_FOCUSTRACKER // console.log( `\"${ getName( this ) }\": Blur.` );\n            this.focusedElement = null;\n            this.isFocused = false;\n        }, 0);\n    }\n    /**\n     * Clears the asynchronous blur event timeout on demand. See {@link #_blur} to learn more.\n     */\n    _clearBlurTimeout() {\n        clearTimeout(this._blurTimeout);\n        this._blurTimeout = null;\n    }\n}\n/**\n * Checks whether a view is an instance of {@link ~ViewWithFocusTracker}.\n */\nexport function isViewWithFocusTracker(view) {\n    return 'focusTracker' in view && view.focusTracker instanceof FocusTracker;\n}\nfunction isElement(value) {\n    return _isElement(value);\n}\nfunction isExternalViewSubtreeFocused(subTreeRoot, view) {\n    if (isFocusedView(subTreeRoot, view)) {\n        return true;\n    }\n    return !!view.focusTracker.externalViews.find(view => isFocusedView(subTreeRoot, view));\n}\nfunction isFocusedView(subTreeRoot, view) {\n    // Note: You cannot depend on externalView.focusTracker.focusedElement because blurs are asynchronous and the value may\n    // be outdated when moving focus between two elements. Using document.activeElement instead.\n    return !!view.element && view.element.contains(document.activeElement) && subTreeRoot.contains(view.element);\n}\n// @if CK_DEBUG_FOCUSTRACKER // declare global {\n// @if CK_DEBUG_FOCUSTRACKER // \tinterface Window {\n// @if CK_DEBUG_FOCUSTRACKER // \t\tlogFocusTrackers: Function;\n// @if CK_DEBUG_FOCUSTRACKER // \t}\n// @if CK_DEBUG_FOCUSTRACKER // }\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // function getName( focusTracker: FocusTracker ): string {\n// @if CK_DEBUG_FOCUSTRACKER // \treturn focusTracker._label || 'Unknown';\n// @if CK_DEBUG_FOCUSTRACKER // }\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // function logState(\n// @if CK_DEBUG_FOCUSTRACKER // \tfocusTracker: FocusTracker,\n// @if CK_DEBUG_FOCUSTRACKER // \tkeysToLog: Array<string> = [ 'isFocused', 'focusedElement' ]\n// @if CK_DEBUG_FOCUSTRACKER // ): string {\n// @if CK_DEBUG_FOCUSTRACKER // \tkeysToLog.forEach( key => { console.log( `${ key }=`, focusTracker[ key ] ) } );\n// @if CK_DEBUG_FOCUSTRACKER // \tconsole.log( 'elements', focusTracker.elements );\n// @if CK_DEBUG_FOCUSTRACKER // \tconsole.log( 'externalViews', focusTracker.externalViews );\n// @if CK_DEBUG_FOCUSTRACKER // }\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // window.logFocusTrackers = (\n// @if CK_DEBUG_FOCUSTRACKER // \tfilter = () => true,\n// @if CK_DEBUG_FOCUSTRACKER // \tkeysToLog: Array<string>\n// @if CK_DEBUG_FOCUSTRACKER // ): void => {\n// @if CK_DEBUG_FOCUSTRACKER // \tconsole.group( 'FocusTrackers' );\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // \tfor ( const focusTracker of FocusTracker._instances ) {\n// @if CK_DEBUG_FOCUSTRACKER // \t\tif ( filter( focusTracker ) ) {\n// @if CK_DEBUG_FOCUSTRACKER // \t\t\tconsole.group( `\"${ getName( focusTracker ) }\"` );\n// @if CK_DEBUG_FOCUSTRACKER // \t\t\tlogState( focusTracker, keysToLog );\n// @if CK_DEBUG_FOCUSTRACKER // \t\t\tconsole.groupEnd();\n// @if CK_DEBUG_FOCUSTRACKER // \t\t}\n// @if CK_DEBUG_FOCUSTRACKER // \t}\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // \tconsole.groupEnd();\n// @if CK_DEBUG_FOCUSTRACKER // };\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // window.logFocusTrackerTree = (\n// @if CK_DEBUG_FOCUSTRACKER // \trootFocusTracker: FocusTracker,\n// @if CK_DEBUG_FOCUSTRACKER // \tfilter = () => true,\n// @if CK_DEBUG_FOCUSTRACKER // \tkeysToLog: Array<string>\n// @if CK_DEBUG_FOCUSTRACKER // ): void => {\n// @if CK_DEBUG_FOCUSTRACKER // \tconsole.group( 'FocusTrackers tree' );\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // \tlogBranch( rootFocusTracker, filter );\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // \tfunction logBranch( focusTracker, filter ) {\n// @if CK_DEBUG_FOCUSTRACKER // \t\tconsole.group( `\"${ getName( focusTracker ) }\"` );\n// @if CK_DEBUG_FOCUSTRACKER // \t\tlogState( focusTracker, keysToLog );\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // \t\tfor ( const externalView of focusTracker.externalViews ) {\n// @if CK_DEBUG_FOCUSTRACKER // \t\t\tif ( filter( externalView.focusTracker ) ) {\n// @if CK_DEBUG_FOCUSTRACKER // \t\t\t\tlogBranch( externalView.focusTracker, filter );\n// @if CK_DEBUG_FOCUSTRACKER // \t\t\t}\n// @if CK_DEBUG_FOCUSTRACKER // \t\t}\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // \t\tconsole.groupEnd();\n// @if CK_DEBUG_FOCUSTRACKER // \t}\n// @if CK_DEBUG_FOCUSTRACKER //\n// @if CK_DEBUG_FOCUSTRACKER // \tconsole.groupEnd();\n// @if CK_DEBUG_FOCUSTRACKER // };\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/keystrokehandler\n */\nimport DomEmitterMixin from './dom/emittermixin.js';\nimport { getCode, parseKeystroke } from './keyboard.js';\n/**\n * Keystroke handler allows registering callbacks for given keystrokes.\n *\n * The most frequent use of this class is through the {@link module:core/editor/editor~Editor#keystrokes `editor.keystrokes`}\n * property. It allows listening to keystrokes executed in the editing view:\n *\n * ```ts\n * editor.keystrokes.set( 'Ctrl+A', ( keyEvtData, cancel ) => {\n * \tconsole.log( 'Ctrl+A has been pressed' );\n * \tcancel();\n * } );\n * ```\n *\n * However, this utility class can be used in various part of the UI. For instance, a certain {@link module:ui/view~View}\n * can use it like this:\n *\n * ```ts\n * class MyView extends View {\n * \tconstructor() {\n * \t\tthis.keystrokes = new KeystrokeHandler();\n *\n * \t\tthis.keystrokes.set( 'tab', handleTabKey );\n * \t}\n *\n * \trender() {\n * \t\tsuper.render();\n *\n * \t\tthis.keystrokes.listenTo( this.element );\n * \t}\n * }\n * ```\n *\n * That keystroke handler will listen to `keydown` events fired in this view's main element.\n *\n */\nexport default class KeystrokeHandler {\n    /**\n     * Creates an instance of the keystroke handler.\n     */\n    constructor() {\n        this._listener = new (DomEmitterMixin())();\n    }\n    /**\n     * Starts listening for `keydown` events from a given emitter.\n     */\n    listenTo(emitter) {\n        // The #_listener works here as a kind of dispatcher. It groups the events coming from the same\n        // keystroke so the listeners can be attached to them with different priorities.\n        //\n        // E.g. all the keystrokes with the `keyCode` of 42 coming from the `emitter` are propagated\n        // as a `_keydown:42` event by the `_listener`. If there's a callback created by the `set`\n        // method for this 42 keystroke, it listens to the `_listener#_keydown:42` event only and interacts\n        // only with other listeners of this particular event, thus making it possible to prioritize\n        // the listeners and safely cancel execution, when needed. Instead of duplicating the Emitter logic,\n        // the KeystrokeHandler re–uses it to do its job.\n        this._listener.listenTo(emitter, 'keydown', (evt, keyEvtData) => {\n            this._listener.fire('_keydown:' + getCode(keyEvtData), keyEvtData);\n        });\n    }\n    /**\n     * Registers a handler for the specified keystroke.\n     *\n     * @param keystroke Keystroke defined in a format accepted by\n     * the {@link module:utils/keyboard~parseKeystroke} function.\n     * @param callback A function called with the\n     * {@link module:engine/view/observer/keyobserver~KeyEventData key event data} object and\n     * a helper function to call both `preventDefault()` and `stopPropagation()` on the underlying event.\n     * @param options Additional options.\n     */\n    set(keystroke, callback, options = {}) {\n        const keyCode = parseKeystroke(keystroke);\n        const priority = options.priority;\n        // Execute the passed callback on KeystrokeHandler#_keydown.\n        // TODO: https://github.com/ckeditor/ckeditor5-utils/issues/144\n        this._listener.listenTo(this._listener, '_keydown:' + keyCode, (evt, keyEvtData) => {\n            if (options.filter && !options.filter(keyEvtData)) {\n                return;\n            }\n            callback(keyEvtData, () => {\n                // Stop the event in the DOM: no listener in the web page\n                // will be triggered by this event.\n                keyEvtData.preventDefault();\n                keyEvtData.stopPropagation();\n                // Stop the event in the KeystrokeHandler: no more callbacks\n                // will be executed for this keystroke.\n                evt.stop();\n            });\n            // Mark this keystroke as handled by the callback. See: #press.\n            evt.return = true;\n        }, { priority });\n    }\n    /**\n     * Triggers a keystroke handler for a specified key combination, if such a keystroke was {@link #set defined}.\n     *\n     * @param keyEvtData Key event data.\n     * @returns Whether the keystroke was handled.\n     */\n    press(keyEvtData) {\n        return !!this._listener.fire('_keydown:' + getCode(keyEvtData), keyEvtData);\n    }\n    /**\n     * Stops listening to `keydown` events from the given emitter.\n     */\n    stopListening(emitter) {\n        this._listener.stopListening(emitter);\n    }\n    /**\n     * Destroys the keystroke handler.\n     */\n    destroy() {\n        this.stopListening();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/tomap\n */\nimport objectToMap from './objecttomap.js';\nimport isIterable from './isiterable.js';\n/**\n * Transforms object or iterable to map. Iterable needs to be in the format acceptable by the `Map` constructor.\n *\n * ```ts\n * map = toMap( { 'foo': 1, 'bar': 2 } );\n * map = toMap( [ [ 'foo', 1 ], [ 'bar', 2 ] ] );\n * map = toMap( anotherMap );\n * ```\n *\n * @param data Object or iterable to transform.\n * @returns Map created from data.\n */\nexport default function toMap(data) {\n    if (isIterable(data)) {\n        return new Map(data);\n    }\n    else {\n        return objectToMap(data);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/objecttomap\n */\n/**\n * Transforms object to map.\n *\n * ```ts\n * const map = objectToMap( { 'foo': 1, 'bar': 2 } );\n * map.get( 'foo' ); // 1\n * ```\n *\n * **Note**: For mixed data (`Object` or `Iterable`) there's a dedicated {@link module:utils/tomap~toMap} function.\n *\n * @param obj Object to transform.\n * @returns Map created from object.\n */\nexport default function objectToMap(obj) {\n    const map = new Map();\n    for (const key in obj) {\n        map.set(key, obj[key]);\n    }\n    return map;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/splicearray\n */\nconst BIG_CHUNK_SIZE = 10000;\n/**\n * Splices one array into another. To be used instead of `Array.prototype.splice` as the latter may\n * throw \"Maximum call stack size exceeded\" when passed huge number of items to insert.\n *\n * Note: in contrary to Array.splice, this function does not modify the original `target`.\n *\n * ```ts\n * spliceArray( [ 1, 2 ], [ 3, 4 ], 0, 0 );\t// [ 3, 4, 1, 2 ]\n * spliceArray( [ 1, 2 ], [ 3, 4 ], 1, 1 );\t// [ 1, 3, 4 ]\n * spliceArray( [ 1, 2 ], [ 3, 4 ], 1, 0 );\t// [ 1, 3, 4, 2 ]\n * spliceArray( [ 1, 2 ], [ 3, 4 ], 2, 0 );\t// [ 1, 2, 3, 4 ]\n * spliceArray( [ 1, 2 ], [],       0, 1 );\t// [ 2 ]\n * ```\n *\n * @param target Array to be spliced.\n * @param source Array of elements to be inserted to target.\n * @param start Index at which nodes should be inserted/removed.\n * @param count Number of items.\n *\n * @returns New spliced array.\n */\nexport default function spliceArray(target, source, start, count) {\n    // In case of performance problems, see: https://github.com/ckeditor/ckeditor5/pull/12429/files#r965850568\n    if (Math.max(source.length, target.length) > BIG_CHUNK_SIZE) {\n        return target.slice(0, start).concat(source).concat(target.slice(start + count, target.length));\n    }\n    else {\n        const newTarget = Array.from(target);\n        newTarget.splice(start, count, ...source);\n        return newTarget;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/delay\n */\n/* globals setTimeout, clearTimeout */\n/**\n * Returns a function wrapper that will trigger a function after a specified wait time.\n * The timeout can be canceled by calling the cancel function on the returned wrapped function.\n *\n * @param func The function to wrap.\n * @param wait The timeout in ms.\n */\nexport default function delay(func, wait) {\n    let timer;\n    function delayed(...args) {\n        delayed.cancel();\n        timer = setTimeout(() => func(...args), wait);\n    }\n    delayed.cancel = () => {\n        clearTimeout(timer);\n    };\n    return delayed;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Set of utils to handle unicode characters.\n *\n * @module utils/unicode\n */\n/**\n * Checks whether given `character` is a combining mark.\n *\n * @param character Character to check.\n */\nexport function isCombiningMark(character) {\n    // eslint-disable-next-line no-misleading-character-class\n    return !!character && character.length == 1 && /[\\u0300-\\u036f\\u1ab0-\\u1aff\\u1dc0-\\u1dff\\u20d0-\\u20ff\\ufe20-\\ufe2f]/.test(character);\n}\n/**\n * Checks whether given `character` is a high half of surrogate pair.\n *\n * Using UTF-16 terminology, a surrogate pair denotes UTF-16 character using two UTF-8 characters. The surrogate pair\n * consist of high surrogate pair character followed by low surrogate pair character.\n *\n * @param character Character to check.\n */\nexport function isHighSurrogateHalf(character) {\n    return !!character && character.length == 1 && /[\\ud800-\\udbff]/.test(character);\n}\n/**\n * Checks whether given `character` is a low half of surrogate pair.\n *\n * Using UTF-16 terminology, a surrogate pair denotes UTF-16 character using two UTF-8 characters. The surrogate pair\n * consist of high surrogate pair character followed by low surrogate pair character.\n *\n * @param character Character to check.\n */\nexport function isLowSurrogateHalf(character) {\n    return !!character && character.length == 1 && /[\\udc00-\\udfff]/.test(character);\n}\n/**\n * Checks whether given offset in a string is inside a surrogate pair (between two surrogate halves).\n *\n * @param string String to check.\n * @param offset Offset to check.\n */\nexport function isInsideSurrogatePair(string, offset) {\n    return isHighSurrogateHalf(string.charAt(offset - 1)) && isLowSurrogateHalf(string.charAt(offset));\n}\n/**\n * Checks whether given offset in a string is between base character and combining mark or between two combining marks.\n *\n * @param string String to check.\n * @param offset Offset to check.\n */\nexport function isInsideCombinedSymbol(string, offset) {\n    return isCombiningMark(string.charAt(offset));\n}\nconst EMOJI_PATTERN = /* #__PURE__ */ buildEmojiRegexp();\n/**\n * Checks whether given offset in a string is inside multi-character emoji sequence.\n *\n * @param string String to check.\n * @param offset Offset to check.\n */\nexport function isInsideEmojiSequence(string, offset) {\n    const matches = String(string).matchAll(EMOJI_PATTERN);\n    return Array.from(matches).some(match => match.index < offset && offset < match.index + match[0].length);\n}\nfunction buildEmojiRegexp() {\n    const parts = [\n        // Emoji Tag Sequence (ETS)\n        /\\p{Emoji}[\\u{E0020}-\\u{E007E}]+\\u{E007F}/u,\n        // Emoji Keycap Sequence\n        /\\p{Emoji}\\u{FE0F}?\\u{20E3}/u,\n        // Emoji Presentation Sequence\n        /\\p{Emoji}\\u{FE0F}/u,\n        // Single-Character Emoji / Emoji Modifier Sequence\n        /(?=\\p{General_Category=Other_Symbol})\\p{Emoji}\\p{Emoji_Modifier}*/u\n    ];\n    const flagSequence = /\\p{Regional_Indicator}{2}/u.source;\n    const emoji = '(?:' + parts.map(part => part.source).join('|') + ')';\n    const sequence = `${flagSequence}|${emoji}(?:\\u{200D}${emoji})*`;\n    return new RegExp(sequence, 'ug');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/plugin\n */\n/* eslint-disable @typescript-eslint/no-invalid-void-type */\nimport { ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * The base class for CKEditor plugin classes.\n */\nexport default class Plugin extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super();\n        /**\n         * Holds identifiers for {@link #forceDisabled} mechanism.\n         */\n        this._disableStack = new Set();\n        this.editor = editor;\n        this.set('isEnabled', true);\n    }\n    /**\n     * Disables the plugin.\n     *\n     * Plugin may be disabled by multiple features or algorithms (at once). When disabling a plugin, unique id should be passed\n     * (e.g. feature name). The same identifier should be used when {@link #clearForceDisabled enabling back} the plugin.\n     * The plugin becomes enabled only after all features {@link #clearForceDisabled enabled it back}.\n     *\n     * Disabling and enabling a plugin:\n     *\n     * ```ts\n     * plugin.isEnabled; // -> true\n     * plugin.forceDisabled( 'MyFeature' );\n     * plugin.isEnabled; // -> false\n     * plugin.clearForceDisabled( 'MyFeature' );\n     * plugin.isEnabled; // -> true\n     * ```\n     *\n     * Plugin disabled by multiple features:\n     *\n     * ```ts\n     * plugin.forceDisabled( 'MyFeature' );\n     * plugin.forceDisabled( 'OtherFeature' );\n     * plugin.clearForceDisabled( 'MyFeature' );\n     * plugin.isEnabled; // -> false\n     * plugin.clearForceDisabled( 'OtherFeature' );\n     * plugin.isEnabled; // -> true\n     * ```\n     *\n     * Multiple disabling with the same identifier is redundant:\n     *\n     * ```ts\n     * plugin.forceDisabled( 'MyFeature' );\n     * plugin.forceDisabled( 'MyFeature' );\n     * plugin.clearForceDisabled( 'MyFeature' );\n     * plugin.isEnabled; // -> true\n     * ```\n     *\n     * **Note:** some plugins or algorithms may have more complex logic when it comes to enabling or disabling certain plugins,\n     * so the plugin might be still disabled after {@link #clearForceDisabled} was used.\n     *\n     * @param id Unique identifier for disabling. Use the same id when {@link #clearForceDisabled enabling back} the plugin.\n     */\n    forceDisabled(id) {\n        this._disableStack.add(id);\n        if (this._disableStack.size == 1) {\n            this.on('set:isEnabled', forceDisable, { priority: 'highest' });\n            this.isEnabled = false;\n        }\n    }\n    /**\n     * Clears forced disable previously set through {@link #forceDisabled}. See {@link #forceDisabled}.\n     *\n     * @param id Unique identifier, equal to the one passed in {@link #forceDisabled} call.\n     */\n    clearForceDisabled(id) {\n        this._disableStack.delete(id);\n        if (this._disableStack.size == 0) {\n            this.off('set:isEnabled', forceDisable);\n            this.isEnabled = true;\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this.stopListening();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isContextPlugin() {\n        return false;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return false;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isPremiumPlugin() {\n        return false;\n    }\n}\n/**\n * Helper function that forces plugin to be disabled.\n */\nfunction forceDisable(evt) {\n    evt.return = false;\n    evt.stop();\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/command\n */\nimport { ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Base class for the CKEditor commands.\n *\n * Commands are the main way to manipulate the editor contents and state. They are mostly used by UI elements (or by other\n * commands) to make changes in the model. Commands are available in every part of the code that has access to\n * the {@link module:core/editor/editor~Editor editor} instance.\n *\n * Instances of registered commands can be retrieved from {@link module:core/editor/editor~Editor#commands `editor.commands`}.\n * The easiest way to execute a command is through {@link module:core/editor/editor~Editor#execute `editor.execute()`}.\n *\n * By default, commands are disabled when the editor is in the {@link module:core/editor/editor~Editor#isReadOnly read-only} mode\n * but commands with the {@link module:core/command~Command#affectsData `affectsData`} flag set to `false` will not be disabled.\n */\nexport default class Command extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a new `Command` instance.\n     *\n     * @param editor The editor on which this command will be used.\n     */\n    constructor(editor) {\n        super();\n        this.editor = editor;\n        this.set('value', undefined);\n        this.set('isEnabled', false);\n        this._affectsData = true;\n        this._isEnabledBasedOnSelection = true;\n        this._disableStack = new Set();\n        this.decorate('execute');\n        // By default, every command is refreshed when changes are applied to the model.\n        this.listenTo(this.editor.model.document, 'change', () => {\n            this.refresh();\n        });\n        this.listenTo(editor, 'change:isReadOnly', () => {\n            this.refresh();\n        });\n        // By default, commands are disabled if the selection is in non-editable place or editor is in read-only mode.\n        this.on('set:isEnabled', evt => {\n            if (!this.affectsData) {\n                return;\n            }\n            const selection = editor.model.document.selection;\n            const selectionInGraveyard = selection.getFirstPosition().root.rootName == '$graveyard';\n            const canEditAtSelection = !selectionInGraveyard && editor.model.canEditAt(selection);\n            // Disable if editor is read only, or when selection is in a place which cannot be edited.\n            //\n            // Checking `editor.isReadOnly` is needed for all commands that have `_isEnabledBasedOnSelection == false`.\n            // E.g. undo does not base on selection, but affects data and should be disabled when the editor is in read-only mode.\n            if (editor.isReadOnly || this._isEnabledBasedOnSelection && !canEditAtSelection) {\n                evt.return = false;\n                evt.stop();\n            }\n        }, { priority: 'highest' });\n        this.on('execute', evt => {\n            if (!this.isEnabled) {\n                evt.stop();\n            }\n        }, { priority: 'high' });\n    }\n    /**\n     * A flag indicating whether a command execution changes the editor data or not.\n     *\n     * Commands with `affectsData` set to `false` will not be automatically disabled in\n     * the {@link module:core/editor/editor~Editor#isReadOnly read-only mode} and\n     * {@glink features/read-only#related-features other editor modes} with restricted user write permissions.\n     *\n     * **Note:** You do not have to set it for your every command. It is `true` by default.\n     *\n     * @default true\n     */\n    get affectsData() {\n        return this._affectsData;\n    }\n    set affectsData(affectsData) {\n        this._affectsData = affectsData;\n    }\n    /**\n     * Refreshes the command. The command should update its {@link #isEnabled} and {@link #value} properties\n     * in this method.\n     *\n     * This method is automatically called when\n     * {@link module:engine/model/document~Document#event:change any changes are applied to the document}.\n     */\n    refresh() {\n        this.isEnabled = true;\n    }\n    /**\n     * Disables the command.\n     *\n     * Command may be disabled by multiple features or algorithms (at once). When disabling a command, unique id should be passed\n     * (e.g. the feature name). The same identifier should be used when {@link #clearForceDisabled enabling back} the command.\n     * The command becomes enabled only after all features {@link #clearForceDisabled enabled it back}.\n     *\n     * Disabling and enabling a command:\n     *\n     * ```ts\n     * command.isEnabled; // -> true\n     * command.forceDisabled( 'MyFeature' );\n     * command.isEnabled; // -> false\n     * command.clearForceDisabled( 'MyFeature' );\n     * command.isEnabled; // -> true\n     * ```\n     *\n     * Command disabled by multiple features:\n     *\n     * ```ts\n     * command.forceDisabled( 'MyFeature' );\n     * command.forceDisabled( 'OtherFeature' );\n     * command.clearForceDisabled( 'MyFeature' );\n     * command.isEnabled; // -> false\n     * command.clearForceDisabled( 'OtherFeature' );\n     * command.isEnabled; // -> true\n     * ```\n     *\n     * Multiple disabling with the same identifier is redundant:\n     *\n     * ```ts\n     * command.forceDisabled( 'MyFeature' );\n     * command.forceDisabled( 'MyFeature' );\n     * command.clearForceDisabled( 'MyFeature' );\n     * command.isEnabled; // -> true\n     * ```\n     *\n     * **Note:** some commands or algorithms may have more complex logic when it comes to enabling or disabling certain commands,\n     * so the command might be still disabled after {@link #clearForceDisabled} was used.\n     *\n     * @param id Unique identifier for disabling. Use the same id when {@link #clearForceDisabled enabling back} the command.\n     */\n    forceDisabled(id) {\n        this._disableStack.add(id);\n        if (this._disableStack.size == 1) {\n            this.on('set:isEnabled', forceDisable, { priority: 'highest' });\n            this.isEnabled = false;\n        }\n    }\n    /**\n     * Clears forced disable previously set through {@link #forceDisabled}. See {@link #forceDisabled}.\n     *\n     * @param id Unique identifier, equal to the one passed in {@link #forceDisabled} call.\n     */\n    clearForceDisabled(id) {\n        this._disableStack.delete(id);\n        if (this._disableStack.size == 0) {\n            this.off('set:isEnabled', forceDisable);\n            this.refresh();\n        }\n    }\n    /**\n     * Executes the command.\n     *\n     * A command may accept parameters. They will be passed from {@link module:core/editor/editor~Editor#execute `editor.execute()`}\n     * to the command.\n     *\n     * The `execute()` method will automatically abort when the command is disabled ({@link #isEnabled} is `false`).\n     * This behavior is implemented by a high priority listener to the {@link #event:execute} event.\n     *\n     * In order to see how to disable a command from \"outside\" see the {@link #isEnabled} documentation.\n     *\n     * This method may return a value, which would be forwarded all the way down to the\n     * {@link module:core/editor/editor~Editor#execute `editor.execute()`}.\n     *\n     * @fires execute\n     */\n    execute(...args) { return undefined; } // eslint-disable-line @typescript-eslint/no-unused-vars\n    /**\n     * Destroys the command.\n     */\n    destroy() {\n        this.stopListening();\n    }\n}\n/**\n * Helper function that forces command to be disabled.\n */\nfunction forceDisable(evt) {\n    evt.return = false;\n    evt.stop();\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/multicommand\n */\nimport Command from './command.js';\nimport { insertToPriorityArray } from '@ckeditor/ckeditor5-utils';\n/**\n * A CKEditor command that aggregates other commands.\n *\n * This command is used to proxy multiple commands. The multi-command is enabled when\n * at least one of its registered child commands is enabled.\n * When executing a multi-command, the first enabled command with highest priority will be executed.\n *\n * ```ts\n * const multiCommand = new MultiCommand( editor );\n *\n * const commandFoo = new Command( editor );\n * const commandBar = new Command( editor );\n *\n * // Register a child command.\n * multiCommand.registerChildCommand( commandFoo );\n * // Register a child command with a low priority.\n * multiCommand.registerChildCommand( commandBar, { priority: 'low' } );\n *\n * // Enable one of the commands.\n * commandBar.isEnabled = true;\n *\n * multiCommand.execute(); // Will execute commandBar.\n * ```\n */\nexport default class MultiCommand extends Command {\n    constructor() {\n        super(...arguments);\n        /**\n         * Registered child commands definitions.\n         */\n        this._childCommandsDefinitions = [];\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        // Override base command refresh(): the command's state is changed when one of child commands changes states.\n    }\n    /**\n     * Executes the first enabled command which has the highest priority of all registered child commands.\n     *\n     * @returns The value returned by the {@link module:core/command~Command#execute `command.execute()`}.\n     */\n    execute(...args) {\n        const command = this._getFirstEnabledCommand();\n        return !!command && command.execute(args);\n    }\n    /**\n     * Registers a child command.\n     *\n     * @param options An object with configuration options.\n     * @param options.priority Priority of a command to register.\n     */\n    registerChildCommand(command, options = {}) {\n        insertToPriorityArray(this._childCommandsDefinitions, { command, priority: options.priority || 'normal' });\n        // Change multi-command enabled state when one of registered commands changes state.\n        command.on('change:isEnabled', () => this._checkEnabled());\n        this._checkEnabled();\n    }\n    /**\n     * Checks if any of child commands is enabled.\n     */\n    _checkEnabled() {\n        this.isEnabled = !!this._getFirstEnabledCommand();\n    }\n    /**\n     * Returns a first enabled command with the highest priority or `undefined` if none of them is enabled.\n     */\n    _getFirstEnabledCommand() {\n        const commandDefinition = this._childCommandsDefinitions.find(({ command }) => command.isEnabled);\n        return commandDefinition && commandDefinition.command;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/plugincollection\n */\nimport { CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Manages a list of CKEditor plugins, including loading, resolving dependencies and initialization.\n */\nexport default class PluginCollection extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates an instance of the plugin collection class.\n     * Allows loading and initializing plugins and their dependencies.\n     * Allows providing a list of already loaded plugins. These plugins will not be destroyed along with this collection.\n     *\n     * @param availablePlugins Plugins (constructors) which the collection will be able to use\n     * when {@link module:core/plugincollection~PluginCollection#init} is used with the plugin names (strings, instead of constructors).\n     * Usually, the editor will pass its built-in plugins to the collection so they can later be\n     * used in `config.plugins` or `config.removePlugins` by names.\n     * @param contextPlugins A list of already initialized plugins represented by a `[ PluginConstructor, pluginInstance ]` pair.\n     */\n    constructor(context, availablePlugins = [], contextPlugins = []) {\n        super();\n        this._plugins = new Map();\n        this._context = context;\n        this._availablePlugins = new Map();\n        for (const PluginConstructor of availablePlugins) {\n            if (PluginConstructor.pluginName) {\n                this._availablePlugins.set(PluginConstructor.pluginName, PluginConstructor);\n            }\n        }\n        this._contextPlugins = new Map();\n        for (const [PluginConstructor, pluginInstance] of contextPlugins) {\n            this._contextPlugins.set(PluginConstructor, pluginInstance);\n            this._contextPlugins.set(pluginInstance, PluginConstructor);\n            // To make it possible to require a plugin by its name.\n            if (PluginConstructor.pluginName) {\n                this._availablePlugins.set(PluginConstructor.pluginName, PluginConstructor);\n            }\n        }\n    }\n    /**\n     * Iterable interface.\n     *\n     * Returns `[ PluginConstructor, pluginInstance ]` pairs.\n     */\n    *[Symbol.iterator]() {\n        for (const entry of this._plugins) {\n            if (typeof entry[0] == 'function') {\n                yield entry;\n            }\n        }\n    }\n    /**\n     * Gets the plugin instance by its constructor or name.\n     *\n     * ```ts\n     * // Check if 'Clipboard' plugin was loaded.\n     * if ( editor.plugins.has( 'ClipboardPipeline' ) ) {\n     * \t// Get clipboard plugin instance\n     * \tconst clipboard = editor.plugins.get( 'ClipboardPipeline' );\n     *\n     * \tthis.listenTo( clipboard, 'inputTransformation', ( evt, data ) => {\n     * \t\t// Do something on clipboard input.\n     * \t} );\n     * }\n     * ```\n     *\n     * **Note**: This method will throw an error if a plugin is not loaded. Use `{@link #has editor.plugins.has()}`\n     * to check if a plugin is available.\n     *\n     * @param key The plugin constructor or {@link module:core/plugin~PluginStaticMembers#pluginName name}.\n     */\n    get(key) {\n        const plugin = this._plugins.get(key);\n        if (!plugin) {\n            let pluginName = key;\n            if (typeof key == 'function') {\n                pluginName = key.pluginName || key.name;\n            }\n            /**\n             * The plugin is not loaded and could not be obtained.\n             *\n             * Plugin classes (constructors) need to be provided to the editor and must be loaded before they can be obtained from\n             * the plugin collection.\n             *\n             * **Note**: You can use `{@link module:core/plugincollection~PluginCollection#has editor.plugins.has()}`\n             * to check if a plugin was loaded.\n             *\n             * @error plugincollection-plugin-not-loaded\n             * @param plugin The name of the plugin which is not loaded.\n             */\n            throw new CKEditorError('plugincollection-plugin-not-loaded', this._context, { plugin: pluginName });\n        }\n        return plugin;\n    }\n    /**\n     * Checks if a plugin is loaded.\n     *\n     * ```ts\n     * // Check if the 'Clipboard' plugin was loaded.\n     * if ( editor.plugins.has( 'ClipboardPipeline' ) ) {\n     * \t// Now use the clipboard plugin instance:\n     * \tconst clipboard = editor.plugins.get( 'ClipboardPipeline' );\n     *\n     * \t// ...\n     * }\n     * ```\n     *\n     * @param key The plugin constructor or {@link module:core/plugin~PluginStaticMembers#pluginName name}.\n     */\n    has(key) {\n        return this._plugins.has(key);\n    }\n    /**\n     * Initializes a set of plugins and adds them to the collection.\n     *\n     * @param plugins An array of {@link module:core/plugin~PluginInterface plugin constructors}\n     * or {@link module:core/plugin~PluginStaticMembers#pluginName plugin names}.\n     * @param pluginsToRemove Names of the plugins or plugin constructors\n     * that should not be loaded (despite being specified in the `plugins` array).\n     * @param pluginsSubstitutions An array of {@link module:core/plugin~PluginInterface plugin constructors}\n     * that will be used to replace plugins of the same names that were passed in `plugins` or that are in their dependency tree.\n     * A useful option for replacing built-in plugins while creating tests (for mocking their APIs). Plugins that will be replaced\n     * must follow these rules:\n     *   * The new plugin must be a class.\n     *   * The new plugin must be named.\n     *   * Both plugins must not depend on other plugins.\n     * @returns A promise which gets resolved once all plugins are loaded and available in the collection.\n     */\n    init(plugins, pluginsToRemove = [], pluginsSubstitutions = []) {\n        // Plugin initialization procedure consists of 2 main steps:\n        // 1) collecting all available plugin constructors,\n        // 2) verification whether all required plugins can be instantiated.\n        //\n        // In the first step, all plugin constructors, available in the provided `plugins` array and inside\n        // plugin's dependencies (from the `Plugin.requires` array), are recursively collected and added to the existing\n        // `this._availablePlugins` map, but without any verification at the given moment. Performing the verification\n        // at this point (during the plugin constructor searching) would cause false errors to occur, that some plugin\n        // is missing but in fact it may be defined further in the array as the dependency of other plugin. After\n        // traversing the entire dependency tree, it will be checked if all required \"top level\" plugins are available.\n        //\n        // In the second step, the list of plugins that have not been explicitly removed is traversed to get all the\n        // plugin constructors to be instantiated in the correct order and to validate against some rules. Finally, if\n        // no plugin is missing and no other error has been found, they all will be instantiated.\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        const that = this;\n        const context = this._context;\n        findAvailablePluginConstructors(plugins);\n        validatePlugins(plugins);\n        const pluginsToLoad = plugins.filter(plugin => !isPluginRemoved(plugin, pluginsToRemove));\n        const pluginConstructors = [...getPluginConstructors(pluginsToLoad)];\n        substitutePlugins(pluginConstructors, pluginsSubstitutions);\n        const pluginInstances = loadPlugins(pluginConstructors);\n        return initPlugins(pluginInstances, 'init')\n            .then(() => initPlugins(pluginInstances, 'afterInit'))\n            .then(() => pluginInstances);\n        function isPluginConstructor(plugin) {\n            return typeof plugin === 'function';\n        }\n        function isContextPlugin(plugin) {\n            return isPluginConstructor(plugin) && !!plugin.isContextPlugin;\n        }\n        function isPluginRemoved(plugin, pluginsToRemove) {\n            return pluginsToRemove.some(removedPlugin => {\n                if (removedPlugin === plugin) {\n                    return true;\n                }\n                if (getPluginName(plugin) === removedPlugin) {\n                    return true;\n                }\n                if (getPluginName(removedPlugin) === plugin) {\n                    return true;\n                }\n                return false;\n            });\n        }\n        function getPluginName(plugin) {\n            return isPluginConstructor(plugin) ?\n                plugin.pluginName || plugin.name :\n                plugin;\n        }\n        function findAvailablePluginConstructors(plugins, processed = new Set()) {\n            plugins.forEach(plugin => {\n                if (!isPluginConstructor(plugin)) {\n                    return;\n                }\n                if (processed.has(plugin)) {\n                    return;\n                }\n                processed.add(plugin);\n                if (plugin.pluginName && !that._availablePlugins.has(plugin.pluginName)) {\n                    that._availablePlugins.set(plugin.pluginName, plugin);\n                }\n                if (plugin.requires) {\n                    findAvailablePluginConstructors(plugin.requires, processed);\n                }\n            });\n        }\n        function getPluginConstructors(plugins, processed = new Set()) {\n            return plugins\n                .map(plugin => {\n                return isPluginConstructor(plugin) ?\n                    plugin :\n                    that._availablePlugins.get(plugin);\n            })\n                .reduce((result, plugin) => {\n                if (processed.has(plugin)) {\n                    return result;\n                }\n                processed.add(plugin);\n                if (plugin.requires) {\n                    validatePlugins(plugin.requires, plugin);\n                    getPluginConstructors(plugin.requires, processed).forEach(plugin => result.add(plugin));\n                }\n                return result.add(plugin);\n            }, new Set());\n        }\n        function validatePlugins(plugins, parentPluginConstructor = null) {\n            plugins\n                .map(plugin => {\n                return isPluginConstructor(plugin) ?\n                    plugin :\n                    that._availablePlugins.get(plugin) || plugin;\n            })\n                .forEach(plugin => {\n                checkMissingPlugin(plugin, parentPluginConstructor);\n                checkContextPlugin(plugin, parentPluginConstructor);\n                checkRemovedPlugin(plugin, parentPluginConstructor);\n            });\n        }\n        function checkMissingPlugin(plugin, parentPluginConstructor) {\n            if (isPluginConstructor(plugin)) {\n                return;\n            }\n            if (parentPluginConstructor) {\n                /**\n                 * A required \"soft\" dependency was not found on the plugin list.\n                 *\n                 * When configuring the editor, either prior to building (via\n                 * {@link module:core/editor/editor~Editor.builtinPlugins `Editor.builtinPlugins`}) or when\n                 * creating a new instance of the editor (e.g. via\n                 * {@link module:core/editor/editorconfig~EditorConfig#plugins `config.plugins`}), you need to provide\n                 * some of the dependencies for other plugins that you used.\n                 *\n                 * This error is thrown when one of these dependencies was not provided. The name of the missing plugin\n                 * can be found in `missingPlugin` and the plugin that required it in `requiredBy`.\n                 *\n                 * In order to resolve it, you need to import the missing plugin and add it to the\n                 * current list of plugins (`Editor.builtinPlugins` or `config.plugins`/`config.extraPlugins`).\n                 *\n                 * Soft requirements were introduced in version 26.0.0. If you happen to stumble upon this error\n                 * when upgrading to version 26.0.0, read also the\n                 * {@glink updating/guides/update-to-26 Migration to 26.0.0} guide.\n                 *\n                 * @error plugincollection-soft-required\n                 * @param missingPlugin The name of the required plugin.\n                 * @param requiredBy The name of the plugin that requires the other plugin.\n                 */\n                throw new CKEditorError('plugincollection-soft-required', context, { missingPlugin: plugin, requiredBy: getPluginName(parentPluginConstructor) });\n            }\n            /**\n             * A plugin is not available and could not be loaded.\n             *\n             * Plugin classes (constructors) need to be provided to the editor before they can be loaded by name.\n             * This is usually done in CKEditor 5 builds by setting the {@link module:core/editor/editor~Editor.builtinPlugins}\n             * property.\n             *\n             * **If you see this warning when using one of the CKEditor 5 Builds},\n             * it means that you try to enable a plugin which was not included in that build. This may be due to a typo\n             * in the plugin name or simply because that plugin is not a part of this build.\n             *\n             * Predefined builds are a deprecated solution and we strongly advise\n             * {@glink updating/nim-migration/migration-to-new-installation-methods migrating to new installation methods}.\n             *\n             * **If you see this warning when using one of the editor creators directly** (not a build), then it means\n             * that you tried loading plugins by name. However, unlike CKEditor 4, CKEditor 5 does not implement a \"plugin loader\".\n             * This means that CKEditor 5 does not know where to load the plugin modules from. Therefore, you need to\n             * provide each plugin through a reference (as a constructor function). Check out the examples in the\n             * {@glink getting-started/installation/quick-start Quick start} guide.\n             *\n             * @error plugincollection-plugin-not-found\n             * @param plugin The name of the plugin which could not be loaded.\n             */\n            throw new CKEditorError('plugincollection-plugin-not-found', context, { plugin });\n        }\n        function checkContextPlugin(plugin, parentPluginConstructor) {\n            if (!isContextPlugin(parentPluginConstructor)) {\n                return;\n            }\n            if (isContextPlugin(plugin)) {\n                return;\n            }\n            /**\n             * If a plugin is a context plugin, all plugins it requires should also be context plugins\n             * instead of plugins. In other words, if one plugin can be used in the context,\n             * all its requirements should also be ready to be used in the context. Note that the context\n             * provides only a part of the API provided by the editor. If one plugin needs a full\n             * editor API, all plugins which require it are considered as plugins that need a full\n             * editor API.\n             *\n             * @error plugincollection-context-required\n             * @param plugin The name of the required plugin.\n             * @param requiredBy The name of the parent plugin.\n             */\n            throw new CKEditorError('plugincollection-context-required', context, { plugin: getPluginName(plugin), requiredBy: getPluginName(parentPluginConstructor) });\n        }\n        function checkRemovedPlugin(plugin, parentPluginConstructor) {\n            if (!parentPluginConstructor) {\n                return;\n            }\n            if (!isPluginRemoved(plugin, pluginsToRemove)) {\n                return;\n            }\n            /**\n             * Cannot load a plugin because one of its dependencies is listed in the `removePlugins` option.\n             *\n             * @error plugincollection-required\n             * @param plugin The name of the required plugin.\n             * @param requiredBy The name of the parent plugin.\n             */\n            throw new CKEditorError('plugincollection-required', context, { plugin: getPluginName(plugin), requiredBy: getPluginName(parentPluginConstructor) });\n        }\n        function loadPlugins(pluginConstructors) {\n            return pluginConstructors.map(PluginConstructor => {\n                let pluginInstance = that._contextPlugins.get(PluginConstructor);\n                pluginInstance = pluginInstance || new PluginConstructor(context);\n                that._add(PluginConstructor, pluginInstance);\n                return pluginInstance;\n            });\n        }\n        function initPlugins(pluginInstances, method) {\n            return pluginInstances.reduce((promise, plugin) => {\n                if (!plugin[method]) {\n                    return promise;\n                }\n                if (that._contextPlugins.has(plugin)) {\n                    return promise;\n                }\n                return promise.then(plugin[method].bind(plugin));\n            }, Promise.resolve());\n        }\n        /**\n         * Replaces plugin constructors with the specified set of plugins.\n         */\n        function substitutePlugins(pluginConstructors, pluginsSubstitutions) {\n            for (const pluginItem of pluginsSubstitutions) {\n                if (typeof pluginItem != 'function') {\n                    /**\n                     * The plugin replacing an existing plugin must be a function.\n                     *\n                     * @error plugincollection-replace-plugin-invalid-type\n                     */\n                    throw new CKEditorError('plugincollection-replace-plugin-invalid-type', null, { pluginItem });\n                }\n                const pluginName = pluginItem.pluginName;\n                if (!pluginName) {\n                    /**\n                     * The plugin replacing an existing plugin must have a name.\n                     *\n                     * @error plugincollection-replace-plugin-missing-name\n                     */\n                    throw new CKEditorError('plugincollection-replace-plugin-missing-name', null, { pluginItem });\n                }\n                if (pluginItem.requires && pluginItem.requires.length) {\n                    /**\n                     * The plugin replacing an existing plugin cannot depend on other plugins.\n                     *\n                     * @error plugincollection-plugin-for-replacing-cannot-have-dependencies\n                     */\n                    throw new CKEditorError('plugincollection-plugin-for-replacing-cannot-have-dependencies', null, { pluginName });\n                }\n                const pluginToReplace = that._availablePlugins.get(pluginName);\n                if (!pluginToReplace) {\n                    /**\n                     * The replaced plugin does not exist in the\n                     * {@link module:core/plugincollection~PluginCollection available plugins} collection.\n                     *\n                     * @error plugincollection-plugin-for-replacing-not-exist\n                     */\n                    throw new CKEditorError('plugincollection-plugin-for-replacing-not-exist', null, { pluginName });\n                }\n                const indexInPluginConstructors = pluginConstructors.indexOf(pluginToReplace);\n                if (indexInPluginConstructors === -1) {\n                    // The Context feature can substitute plugins as well.\n                    // It may happen that the editor will be created with the given context, where the plugin for substitute\n                    // was already replaced. In such a case, we don't want to do it again.\n                    if (that._contextPlugins.has(pluginToReplace)) {\n                        return;\n                    }\n                    /**\n                     * The replaced plugin will not be loaded so it cannot be replaced.\n                     *\n                     * @error plugincollection-plugin-for-replacing-not-loaded\n                     */\n                    throw new CKEditorError('plugincollection-plugin-for-replacing-not-loaded', null, { pluginName });\n                }\n                if (pluginToReplace.requires && pluginToReplace.requires.length) {\n                    /**\n                     * The replaced plugin cannot depend on other plugins.\n                     *\n                     * @error plugincollection-replaced-plugin-cannot-have-dependencies\n                     */\n                    throw new CKEditorError('plugincollection-replaced-plugin-cannot-have-dependencies', null, { pluginName });\n                }\n                pluginConstructors.splice(indexInPluginConstructors, 1, pluginItem);\n                that._availablePlugins.set(pluginName, pluginItem);\n            }\n        }\n    }\n    /**\n     * Destroys all loaded plugins.\n     */\n    destroy() {\n        const promises = [];\n        for (const [, pluginInstance] of this) {\n            if (typeof pluginInstance.destroy == 'function' && !this._contextPlugins.has(pluginInstance)) {\n                promises.push(pluginInstance.destroy());\n            }\n        }\n        return Promise.all(promises);\n    }\n    /**\n     * Adds the plugin to the collection. Exposed mainly for testing purposes.\n     *\n     * @param PluginConstructor The plugin constructor.\n     * @param plugin The instance of the plugin.\n     */\n    _add(PluginConstructor, plugin) {\n        this._plugins.set(PluginConstructor, plugin);\n        const pluginName = PluginConstructor.pluginName;\n        if (!pluginName) {\n            return;\n        }\n        if (this._plugins.has(pluginName)) {\n            /**\n             * Two plugins with the same {@link module:core/plugin~PluginStaticMembers#pluginName} were loaded.\n             * This will lead to runtime conflicts between these plugins.\n             *\n             * In practice, this warning usually means that new plugins were added to an existing CKEditor 5 build.\n             * Plugins should always be added to a source version of the editor (`@ckeditor/ckeditor5-editor-*`),\n             * not to an editor imported from one of the `@ckeditor/ckeditor5-build-*` packages.\n             *\n             * Check your import paths and the list of plugins passed to\n             * {@link module:core/editor/editor~Editor.create `Editor.create()`}\n             * or specified in {@link module:core/editor/editor~Editor.builtinPlugins `Editor.builtinPlugins`}.\n             *\n             * Predefined builds are a deprecated solution and we strongly advise\n             * {@glink updating/nim-migration/migration-to-new-installation-methods migrating to new installation methods}.\n             *\n             * The second option is that your `node_modules/` directory contains duplicated versions of the same\n             * CKEditor 5 packages. Normally, on clean installations, npm deduplicates packages in `node_modules/`, so\n             * it may be enough to call `rm -rf node_modules && npm i`. However, if you installed conflicting versions\n             * of some packages, their dependencies may need to be installed in more than one version which may lead to this\n             * warning.\n             *\n             * Technically speaking, this error occurs because after adding a plugin to an existing editor build\n             * the dependencies of this plugin are being duplicated.\n             * They are already built into that editor build and now get added for the second time as dependencies\n             * of the plugin you are installing.\n             *\n             * @error plugincollection-plugin-name-conflict\n             * @param pluginName The duplicated plugin name.\n             * @param plugin1 The first plugin constructor.\n             * @param plugin2 The second plugin constructor.\n             */\n            throw new CKEditorError('plugincollection-plugin-name-conflict', null, { pluginName, plugin1: this._plugins.get(pluginName).constructor, plugin2: PluginConstructor });\n        }\n        this._plugins.set(pluginName, plugin);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/context\n */\nimport { Config, Collection, CKEditorError, Locale } from '@ckeditor/ckeditor5-utils';\nimport PluginCollection from './plugincollection.js';\n/**\n * Provides a common, higher-level environment for solutions that use multiple {@link module:core/editor/editor~Editor editors}\n * or plugins that work outside the editor. Use it instead of {@link module:core/editor/editor~Editor.create `Editor.create()`}\n * in advanced application integrations.\n *\n * All configuration options passed to a context will be used as default options for the editor instances initialized in that context.\n *\n * {@link module:core/contextplugin~ContextPlugin Context plugins} passed to a context instance will be shared among all\n * editor instances initialized in this context. These will be the same plugin instances for all the editors.\n *\n * **Note:** The context can only be initialized with {@link module:core/contextplugin~ContextPlugin context plugins}\n * (e.g. [comments](https://ckeditor.com/collaboration/comments/)). Regular {@link module:core/plugin~Plugin plugins} require an\n * editor instance to work and cannot be added to a context.\n *\n * **Note:** You can add a context plugin to an editor instance, though.\n *\n * If you are using multiple editor instances on one page and use any context plugins, create a context to share the configuration and\n * plugins among these editors. Some plugins will use the information about all existing editors to better integrate between them.\n *\n * If you are using plugins that do not require an editor to work (e.g. [comments](https://ckeditor.com/collaboration/comments/)),\n * enable and configure them using the context.\n *\n * If you are using only a single editor on each page, use {@link module:core/editor/editor~Editor.create `Editor.create()`} instead.\n * In such a case, a context instance will be created by the editor instance in a transparent way.\n *\n * See {@link ~Context.create `Context.create()`} for usage examples.\n */\nexport default class Context {\n    /**\n     * Creates a context instance with a given configuration.\n     *\n     * Usually not to be used directly. See the static {@link module:core/context~Context.create `create()`} method.\n     *\n     * @param config The context configuration.\n     */\n    constructor(config) {\n        /**\n         * Reference to the editor which created the context.\n         * Null when the context was created outside of the editor.\n         *\n         * It is used to destroy the context when removing the editor that has created the context.\n         */\n        this._contextOwner = null;\n        // We don't pass translations to the config, because its behavior of splitting keys\n        // with dots (e.g. `resize.width` => `resize: { width }`) breaks the translations.\n        const { translations, ...rest } = config || {};\n        this.config = new Config(rest, this.constructor.defaultConfig);\n        const availablePlugins = this.constructor.builtinPlugins;\n        this.config.define('plugins', availablePlugins);\n        this.plugins = new PluginCollection(this, availablePlugins);\n        const languageConfig = this.config.get('language') || {};\n        this.locale = new Locale({\n            uiLanguage: typeof languageConfig === 'string' ? languageConfig : languageConfig.ui,\n            contentLanguage: this.config.get('language.content'),\n            translations\n        });\n        this.t = this.locale.t;\n        this.editors = new Collection();\n    }\n    /**\n     * Loads and initializes plugins specified in the configuration.\n     *\n     * @returns A promise which resolves once the initialization is completed, providing an array of loaded plugins.\n     */\n    initPlugins() {\n        const plugins = this.config.get('plugins') || [];\n        const substitutePlugins = this.config.get('substitutePlugins') || [];\n        // Plugins for substitution should be checked as well.\n        for (const Plugin of plugins.concat(substitutePlugins)) {\n            if (typeof Plugin != 'function') {\n                /**\n                 * Only a constructor function is allowed as a {@link module:core/contextplugin~ContextPlugin context plugin}.\n                 *\n                 * @error context-initplugins-constructor-only\n                 */\n                throw new CKEditorError('context-initplugins-constructor-only', null, { Plugin });\n            }\n            if (Plugin.isContextPlugin !== true) {\n                /**\n                 * Only a plugin marked as a {@link module:core/contextplugin~ContextPlugin.isContextPlugin context plugin}\n                 * is allowed to be used with a context.\n                 *\n                 * @error context-initplugins-invalid-plugin\n                 */\n                throw new CKEditorError('context-initplugins-invalid-plugin', null, { Plugin });\n            }\n        }\n        return this.plugins.init(plugins, [], substitutePlugins);\n    }\n    /**\n     * Destroys the context instance and all editors used with the context,\n     * releasing all resources used by the context.\n     *\n     * @returns A promise that resolves once the context instance is fully destroyed.\n     */\n    destroy() {\n        return Promise.all(Array.from(this.editors, editor => editor.destroy()))\n            .then(() => this.plugins.destroy());\n    }\n    /**\n     * Adds a reference to the editor which is used with this context.\n     *\n     * When the given editor has created the context, the reference to this editor will be stored\n     * as a {@link ~Context#_contextOwner}.\n     *\n     * This method should only be used by the editor.\n     *\n     * @internal\n     * @param isContextOwner Stores the given editor as a context owner.\n     */\n    _addEditor(editor, isContextOwner) {\n        if (this._contextOwner) {\n            /**\n             * Cannot add multiple editors to the context which is created by the editor.\n             *\n             * @error context-addeditor-private-context\n             */\n            throw new CKEditorError('context-addeditor-private-context');\n        }\n        this.editors.add(editor);\n        if (isContextOwner) {\n            this._contextOwner = editor;\n        }\n    }\n    /**\n     * Removes a reference to the editor which was used with this context.\n     * When the context was created by the given editor, the context will be destroyed.\n     *\n     * This method should only be used by the editor.\n     *\n     * @internal\n     * @return A promise that resolves once the editor is removed from the context or when the context was destroyed.\n     */\n    _removeEditor(editor) {\n        if (this.editors.has(editor)) {\n            this.editors.remove(editor);\n        }\n        if (this._contextOwner === editor) {\n            return this.destroy();\n        }\n        return Promise.resolve();\n    }\n    /**\n     * Returns the context configuration which will be copied to the editors created using this context.\n     *\n     * The configuration returned by this method has the plugins configuration removed &ndash; plugins are shared with all editors\n     * through another mechanism.\n     *\n     * This method should only be used by the editor.\n     *\n     * @internal\n     * @returns Configuration as a plain object.\n     */\n    _getEditorConfig() {\n        const result = {};\n        for (const name of this.config.names()) {\n            if (!['plugins', 'removePlugins', 'extraPlugins'].includes(name)) {\n                result[name] = this.config.get(name);\n            }\n        }\n        return result;\n    }\n    /**\n     * Creates and initializes a new context instance.\n     *\n     * ```ts\n     * const commonConfig = { ... }; // Configuration for all the plugins and editors.\n     * const editorPlugins = [ ... ]; // Regular plugins here.\n     *\n     * Context\n     * \t.create( {\n     * \t\t// Only context plugins here.\n     * \t\tplugins: [ ... ],\n     *\n     * \t\t// Configure the language for all the editors (it cannot be overwritten).\n     * \t\tlanguage: { ... },\n     *\n     * \t\t// Configuration for context plugins.\n     * \t\tcomments: { ... },\n     * \t\t...\n     *\n     * \t\t// Default configuration for editor plugins.\n     * \t\ttoolbar: { ... },\n     * \t\timage: { ... },\n     * \t\t...\n     * \t} )\n     * \t.then( context => {\n     * \t\tconst promises = [];\n     *\n     * \t\tpromises.push( ClassicEditor.create(\n     * \t\t\tdocument.getElementById( 'editor1' ),\n     * \t\t\t{\n     * \t\t\t\teditorPlugins,\n     * \t\t\t\tcontext\n     * \t\t\t}\n     * \t\t) );\n     *\n     * \t\tpromises.push( ClassicEditor.create(\n     * \t\t\tdocument.getElementById( 'editor2' ),\n     * \t\t\t{\n     * \t\t\t\teditorPlugins,\n     * \t\t\t\tcontext,\n     * \t\t\t\ttoolbar: { ... } // You can overwrite the configuration of the context.\n     * \t\t\t}\n     * \t\t) );\n     *\n     * \t\treturn Promise.all( promises );\n     * \t} );\n     * ```\n     *\n     * @param config The context configuration.\n     * @returns A promise resolved once the context is ready. The promise resolves with the created context instance.\n     */\n    static create(config) {\n        return new Promise(resolve => {\n            const context = new this(config);\n            resolve(context.initPlugins().then(() => context));\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/contextplugin\n */\nimport { ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * The base class for {@link module:core/context~Context} plugin classes.\n *\n * A context plugin can either be initialized for an {@link module:core/editor/editor~Editor editor} or for\n * a {@link module:core/context~Context context}. In other words, it can either\n * work within one editor instance or with one or more editor instances that use a single context.\n * It is the context plugin's role to implement handling for both modes.\n *\n * There are a few rules for interaction between the editor plugins and context plugins:\n *\n * * A context plugin can require another context plugin.\n * * An {@link module:core/plugin~Plugin editor plugin} can require a context plugin.\n * * A context plugin MUST NOT require an {@link module:core/plugin~Plugin editor plugin}.\n */\nexport default class ContextPlugin extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a new plugin instance.\n     */\n    constructor(context) {\n        super();\n        this.context = context;\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this.stopListening();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isContextPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return false;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isPremiumPlugin() {\n        return false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/placeholder\n */\nimport '../../theme/placeholder.css';\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\n// Each document stores information about its placeholder elements and check functions.\nconst documentPlaceholders = new WeakMap();\nlet hasDisplayedPlaceholderDeprecationWarning = false;\n/**\n * A helper that enables a placeholder on the provided view element (also updates its visibility).\n * The placeholder is a CSS pseudo–element (with a text content) attached to the element.\n *\n * To change the placeholder text, change value of the `placeholder` property in the provided `element`.\n *\n * To disable the placeholder, use {@link module:engine/view/placeholder~disablePlaceholder `disablePlaceholder()`} helper.\n *\n * @param options Configuration options of the placeholder.\n * @param options.view Editing view instance.\n * @param options.element Element that will gain a placeholder. See `options.isDirectHost` to learn more.\n * @param options.isDirectHost If set `false`, the placeholder will not be enabled directly\n * in the passed `element` but in one of its children (selected automatically, i.e. a first empty child element).\n * Useful when attaching placeholders to elements that can host other elements (not just text), for instance,\n * editable root elements.\n * @param options.text Placeholder text. It's **deprecated** and will be removed soon. Use\n * {@link module:engine/view/placeholder~PlaceholderableElement#placeholder `options.element.placeholder`} instead.\n * @param options.keepOnFocus If set `true`, the placeholder stay visible when the host element is focused.\n */\nexport function enablePlaceholder({ view, element, text, isDirectHost = true, keepOnFocus = false }) {\n    const doc = view.document;\n    // Use a single a single post fixer per—document to update all placeholders.\n    if (!documentPlaceholders.has(doc)) {\n        documentPlaceholders.set(doc, new Map());\n        // If a post-fixer callback makes a change, it should return `true` so other post–fixers\n        // can re–evaluate the document again.\n        doc.registerPostFixer(writer => updateDocumentPlaceholders(doc, writer));\n        // Update placeholders on isComposing state change since rendering is disabled while in composition mode.\n        doc.on('change:isComposing', () => {\n            view.change(writer => updateDocumentPlaceholders(doc, writer));\n        }, { priority: 'high' });\n    }\n    if (element.is('editableElement')) {\n        element.on('change:placeholder', (evtInfo, evt, text) => {\n            setPlaceholder(text);\n        });\n    }\n    if (element.placeholder) {\n        setPlaceholder(element.placeholder);\n    }\n    else if (text) {\n        setPlaceholder(text);\n    }\n    if (text) {\n        showPlaceholderTextDeprecationWarning();\n    }\n    function setPlaceholder(text) {\n        // Store information about the element placeholder under its document.\n        documentPlaceholders.get(doc).set(element, {\n            text,\n            isDirectHost,\n            keepOnFocus,\n            hostElement: isDirectHost ? element : null\n        });\n        // Update the placeholders right away.\n        view.change(writer => updateDocumentPlaceholders(doc, writer));\n    }\n}\n/**\n * Disables the placeholder functionality from a given element.\n *\n * See {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} to learn more.\n */\nexport function disablePlaceholder(view, element) {\n    const doc = element.document;\n    if (!documentPlaceholders.has(doc)) {\n        return;\n    }\n    view.change(writer => {\n        const placeholders = documentPlaceholders.get(doc);\n        const config = placeholders.get(element);\n        writer.removeAttribute('data-placeholder', config.hostElement);\n        hidePlaceholder(writer, config.hostElement);\n        placeholders.delete(element);\n    });\n}\n/**\n * Shows a placeholder in the provided element by changing related attributes and CSS classes.\n *\n * **Note**: This helper will not update the placeholder visibility nor manage the\n * it in any way in the future. What it does is a one–time state change of an element. Use\n * {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} and\n * {@link module:engine/view/placeholder~disablePlaceholder `disablePlaceholder()`} for full\n * placeholder functionality.\n *\n * **Note**: This helper will blindly show the placeholder directly in the root editable element if\n * one is passed, which could result in a visual clash if the editable element has some children\n * (for instance, an empty paragraph). Use {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`}\n * in that case or make sure the correct element is passed to the helper.\n *\n * @returns `true`, if any changes were made to the `element`.\n */\nexport function showPlaceholder(writer, element) {\n    if (!element.hasClass('ck-placeholder')) {\n        writer.addClass('ck-placeholder', element);\n        return true;\n    }\n    return false;\n}\n/**\n * Hides a placeholder in the element by changing related attributes and CSS classes.\n *\n * **Note**: This helper will not update the placeholder visibility nor manage the\n * it in any way in the future. What it does is a one–time state change of an element. Use\n * {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} and\n * {@link module:engine/view/placeholder~disablePlaceholder `disablePlaceholder()`} for full\n * placeholder functionality.\n *\n * @returns `true`, if any changes were made to the `element`.\n */\nexport function hidePlaceholder(writer, element) {\n    if (element.hasClass('ck-placeholder')) {\n        writer.removeClass('ck-placeholder', element);\n        return true;\n    }\n    return false;\n}\n/**\n * Checks if a placeholder should be displayed in the element.\n *\n * **Note**: This helper will blindly check the possibility of showing a placeholder directly in the\n * root editable element if one is passed, which may not be the expected result. If an element can\n * host other elements (not just text), most likely one of its children should be checked instead\n * because it will be the final host for the placeholder. Use\n * {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`} in that case or make\n * sure the correct element is passed to the helper.\n *\n * @param element Element that holds the placeholder.\n * @param keepOnFocus Focusing the element will keep the placeholder visible.\n */\nexport function needsPlaceholder(element, keepOnFocus) {\n    if (!element.isAttached()) {\n        return false;\n    }\n    // Anything but uiElement(s) counts as content.\n    const hasContent = Array.from(element.getChildren())\n        .some(element => !element.is('uiElement'));\n    if (hasContent) {\n        return false;\n    }\n    const doc = element.document;\n    const viewSelection = doc.selection;\n    const selectionAnchor = viewSelection.anchor;\n    if (doc.isComposing && selectionAnchor && selectionAnchor.parent === element) {\n        return false;\n    }\n    // Skip the focus check and make the placeholder visible already regardless of document focus state.\n    if (keepOnFocus) {\n        return true;\n    }\n    // If the document is blurred.\n    if (!doc.isFocused) {\n        return true;\n    }\n    // If document is focused and the element is empty but the selection is not anchored inside it.\n    return !!selectionAnchor && selectionAnchor.parent !== element;\n}\n/**\n * Updates all placeholders associated with a document in a post–fixer callback.\n *\n * @returns True if any changes were made to the view document.\n */\nfunction updateDocumentPlaceholders(doc, writer) {\n    const placeholders = documentPlaceholders.get(doc);\n    const directHostElements = [];\n    let wasViewModified = false;\n    // First set placeholders on the direct hosts.\n    for (const [element, config] of placeholders) {\n        if (config.isDirectHost) {\n            directHostElements.push(element);\n            if (updatePlaceholder(writer, element, config)) {\n                wasViewModified = true;\n            }\n        }\n    }\n    // Then set placeholders on the indirect hosts but only on those that does not already have an direct host placeholder.\n    for (const [element, config] of placeholders) {\n        if (config.isDirectHost) {\n            continue;\n        }\n        const hostElement = getChildPlaceholderHostSubstitute(element);\n        // When not a direct host, it could happen that there is no child element\n        // capable of displaying a placeholder.\n        if (!hostElement) {\n            continue;\n        }\n        // Don't override placeholder if the host element already has some direct placeholder.\n        if (directHostElements.includes(hostElement)) {\n            continue;\n        }\n        // Update the host element (used for setting and removing the placeholder).\n        config.hostElement = hostElement;\n        if (updatePlaceholder(writer, element, config)) {\n            wasViewModified = true;\n        }\n    }\n    return wasViewModified;\n}\n/**\n * Updates a single placeholder in a post–fixer callback.\n *\n * @returns True if any changes were made to the view document.\n */\nfunction updatePlaceholder(writer, element, config) {\n    const { text, isDirectHost, hostElement } = config;\n    let wasViewModified = false;\n    // This may be necessary when updating the placeholder text to something else.\n    if (hostElement.getAttribute('data-placeholder') !== text) {\n        writer.setAttribute('data-placeholder', text, hostElement);\n        wasViewModified = true;\n    }\n    // If the host element is not a direct host then placeholder is needed only when there is only one element.\n    const isOnlyChild = isDirectHost || element.childCount == 1;\n    if (isOnlyChild && needsPlaceholder(hostElement, config.keepOnFocus)) {\n        if (showPlaceholder(writer, hostElement)) {\n            wasViewModified = true;\n        }\n    }\n    else if (hidePlaceholder(writer, hostElement)) {\n        wasViewModified = true;\n    }\n    return wasViewModified;\n}\n/**\n * Gets a child element capable of displaying a placeholder if a parent element can host more\n * than just text (for instance, when it is a root editable element). The child element\n * can then be used in other placeholder helpers as a substitute of its parent.\n */\nfunction getChildPlaceholderHostSubstitute(parent) {\n    if (parent.childCount) {\n        const firstChild = parent.getChild(0);\n        if (firstChild.is('element') && !firstChild.is('uiElement') && !firstChild.is('attributeElement')) {\n            return firstChild;\n        }\n    }\n    return null;\n}\n/**\n * Displays a deprecation warning message in the console, but only once per page load.\n */\nfunction showPlaceholderTextDeprecationWarning() {\n    if (!hasDisplayedPlaceholderDeprecationWarning) {\n        /**\n         * The \"text\" option in the {@link module:engine/view/placeholder~enablePlaceholder `enablePlaceholder()`}\n         * function is deprecated and will be removed soon.\n         *\n         * See the {@glink updating/guides/update-to-39#view-element-placeholder Migration to v39} guide for\n         * more information on how to apply this change.\n         *\n         * @error enableplaceholder-deprecated-text-option\n         */\n        logWarning('enableplaceholder-deprecated-text-option');\n    }\n    hasDisplayedPlaceholderDeprecationWarning = true;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/typecheckable\n */\nexport default class TypeCheckable {\n    /* istanbul ignore next -- @preserve */\n    is() {\n        // There are a lot of overloads above.\n        // Overriding method in derived classes remove them and only `is( type: string ): boolean` is visible which we don't want.\n        // One option would be to copy them all to all classes, but that's ugly.\n        // It's best when TypeScript compiler doesn't see those overloads, except the one in the top base class.\n        // To overload a method, but not let the compiler see it, do after class definition:\n        // `MyClass.prototype.is = function( type: string ) {...}`\n        throw new Error('is() method is abstract');\n    }\n}\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/node\n */\nimport TypeCheckable from './typecheckable.js';\nimport { CKEditorError, EmitterMixin, compareArrays } from '@ckeditor/ckeditor5-utils';\nimport { clone } from 'lodash-es';\n/**\n * Abstract view node class.\n *\n * This is an abstract class. Its constructor should not be used directly.\n * Use the {@link module:engine/view/downcastwriter~DowncastWriter} or {@link module:engine/view/upcastwriter~UpcastWriter}\n * to create new instances of view nodes.\n */\nexport default class Node extends /* #__PURE__ */ EmitterMixin(TypeCheckable) {\n    /**\n     * Creates a tree view node.\n     *\n     * @param document The document instance to which this node belongs.\n     */\n    constructor(document) {\n        super();\n        this.document = document;\n        this.parent = null;\n    }\n    /**\n     * Index of the node in the parent element or null if the node has no parent.\n     *\n     * Accessing this property throws an error if this node's parent element does not contain it.\n     * This means that view tree got broken.\n     */\n    get index() {\n        let pos;\n        if (!this.parent) {\n            return null;\n        }\n        // No parent or child doesn't exist in parent's children.\n        if ((pos = this.parent.getChildIndex(this)) == -1) {\n            /**\n             * The node's parent does not contain this node. It means that the document tree is corrupted.\n             *\n             * @error view-node-not-found-in-parent\n             */\n            throw new CKEditorError('view-node-not-found-in-parent', this);\n        }\n        return pos;\n    }\n    /**\n     * Node's next sibling, or `null` if it is the last child.\n     */\n    get nextSibling() {\n        const index = this.index;\n        return (index !== null && this.parent.getChild(index + 1)) || null;\n    }\n    /**\n     * Node's previous sibling, or `null` if it is the first child.\n     */\n    get previousSibling() {\n        const index = this.index;\n        return (index !== null && this.parent.getChild(index - 1)) || null;\n    }\n    /**\n     * Top-most ancestor of the node. If the node has no parent it is the root itself.\n     */\n    get root() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let root = this;\n        while (root.parent) {\n            root = root.parent;\n        }\n        return root;\n    }\n    /**\n     * Returns true if the node is in a tree rooted in the document (is a descendant of one of its roots).\n     */\n    isAttached() {\n        return this.root.is('rootElement');\n    }\n    /**\n     * Gets a path to the node. The path is an array containing indices of consecutive ancestors of this node,\n     * beginning from {@link module:engine/view/node~Node#root root}, down to this node's index.\n     *\n     * ```ts\n     * const abc = downcastWriter.createText( 'abc' );\n     * const foo = downcastWriter.createText( 'foo' );\n     * const h1 = downcastWriter.createElement( 'h1', null, downcastWriter.createText( 'header' ) );\n     * const p = downcastWriter.createElement( 'p', null, [ abc, foo ] );\n     * const div = downcastWriter.createElement( 'div', null, [ h1, p ] );\n     * foo.getPath(); // Returns [ 1, 3 ]. `foo` is in `p` which is in `div`. `p` starts at offset 1, while `foo` at 3.\n     * h1.getPath(); // Returns [ 0 ].\n     * div.getPath(); // Returns [].\n     * ```\n     *\n     * @returns The path.\n     */\n    getPath() {\n        const path = [];\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let node = this;\n        while (node.parent) {\n            path.unshift(node.index);\n            node = node.parent;\n        }\n        return path;\n    }\n    /**\n     * Returns ancestors array of this node.\n     *\n     * @param options Options object.\n     * @param options.includeSelf When set to `true` this node will be also included in parent's array.\n     * @param options.parentFirst When set to `true`, array will be sorted from node's parent to root element,\n     * otherwise root element will be the first item in the array.\n     * @returns Array with ancestors.\n     */\n    getAncestors(options = {}) {\n        const ancestors = [];\n        let parent = options.includeSelf ? this : this.parent;\n        while (parent) {\n            ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n            parent = parent.parent;\n        }\n        return ancestors;\n    }\n    /**\n     * Returns a {@link module:engine/view/element~Element} or {@link module:engine/view/documentfragment~DocumentFragment}\n     * which is a common ancestor of both nodes.\n     *\n     * @param node The second node.\n     * @param options Options object.\n     * @param options.includeSelf When set to `true` both nodes will be considered \"ancestors\" too.\n     * Which means that if e.g. node A is inside B, then their common ancestor will be B.\n     */\n    getCommonAncestor(node, options = {}) {\n        const ancestorsA = this.getAncestors(options);\n        const ancestorsB = node.getAncestors(options);\n        let i = 0;\n        while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n            i++;\n        }\n        return i === 0 ? null : ancestorsA[i - 1];\n    }\n    /**\n     * Returns whether this node is before given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/view/documentfragment~DocumentFragment}s).\n     *\n     * @param node Node to compare with.\n     */\n    isBefore(node) {\n        // Given node is not before this node if they are same.\n        if (this == node) {\n            return false;\n        }\n        // Return `false` if it is impossible to compare nodes.\n        if (this.root !== node.root) {\n            return false;\n        }\n        const thisPath = this.getPath();\n        const nodePath = node.getPath();\n        const result = compareArrays(thisPath, nodePath);\n        switch (result) {\n            case 'prefix':\n                return true;\n            case 'extension':\n                return false;\n            default:\n                return thisPath[result] < nodePath[result];\n        }\n    }\n    /**\n     * Returns whether this node is after given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/view/documentfragment~DocumentFragment}s).\n     *\n     * @param node Node to compare with.\n     */\n    isAfter(node) {\n        // Given node is not before this node if they are same.\n        if (this == node) {\n            return false;\n        }\n        // Return `false` if it is impossible to compare nodes.\n        if (this.root !== node.root) {\n            return false;\n        }\n        // In other cases, just check if the `node` is before, and return the opposite.\n        return !this.isBefore(node);\n    }\n    /**\n     * Removes node from parent.\n     *\n     * @internal\n     */\n    _remove() {\n        this.parent._removeChildren(this.index);\n    }\n    /**\n     * @internal\n     * @param type Type of the change.\n     * @param node Changed node.\n     * @fires change\n     */\n    _fireChange(type, node) {\n        this.fire(`change:${type}`, node);\n        if (this.parent) {\n            this.parent._fireChange(type, node);\n        }\n    }\n    /**\n     * Custom toJSON method to solve child-parent circular dependencies.\n     *\n     * @returns Clone of this object with the parent property removed.\n     */\n    toJSON() {\n        const json = clone(this);\n        // Due to circular references we need to remove parent reference.\n        delete json.parent;\n        return json;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nNode.prototype.is = function (type) {\n    return type === 'node' || type === 'view:node';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/text\n */\nimport Node from './node.js';\n/**\n * Tree view text node.\n *\n * The constructor of this class should not be used directly. To create a new text node instance\n * use the {@link module:engine/view/downcastwriter~DowncastWriter#createText `DowncastWriter#createText()`}\n * method when working on data downcasted from the model or the\n * {@link module:engine/view/upcastwriter~UpcastWriter#createText `UpcastWriter#createText()`}\n * method when working on non-semantic views.\n */\nexport default class Text extends Node {\n    /**\n     * Creates a tree view text node.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#createText\n     * @internal\n     * @param document The document instance to which this text node belongs.\n     * @param data The text's data.\n     */\n    constructor(document, data) {\n        super(document);\n        this._textData = data;\n    }\n    /**\n     * The text content.\n     */\n    get data() {\n        return this._textData;\n    }\n    /**\n     * The `_data` property is controlled by a getter and a setter.\n     *\n     * The getter is required when using the addition assignment operator on protected property:\n     *\n     * ```ts\n     * const foo = downcastWriter.createText( 'foo' );\n     * const bar = downcastWriter.createText( 'bar' );\n     *\n     * foo._data += bar.data;   // executes: `foo._data = foo._data + bar.data`\n     * console.log( foo.data ); // prints: 'foobar'\n     * ```\n     *\n     * If the protected getter didn't exist, `foo._data` will return `undefined` and result of the merge will be invalid.\n     *\n     * The setter sets data and fires the {@link module:engine/view/node~Node#event:change:text change event}.\n     *\n     * @internal\n     */\n    get _data() {\n        return this.data;\n    }\n    set _data(data) {\n        this._fireChange('text', this);\n        this._textData = data;\n    }\n    /**\n     * Checks if this text node is similar to other text node.\n     * Both nodes should have the same data to be considered as similar.\n     *\n     * @param otherNode Node to check if it is same as this node.\n     */\n    isSimilar(otherNode) {\n        if (!(otherNode instanceof Text)) {\n            return false;\n        }\n        return this === otherNode || this.data === otherNode.data;\n    }\n    /**\n     * Clones this node.\n     *\n     * @internal\n     * @returns Text node that is a clone of this node.\n     */\n    _clone() {\n        return new Text(this.document, this.data);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nText.prototype.is = function (type) {\n    return type === '$text' || type === 'view:$text' ||\n        // This are legacy values kept for backward compatibility.\n        type === 'text' || type === 'view:text' ||\n        // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n        type === 'node' || type === 'view:node';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/textproxy\n */\nimport TypeCheckable from './typecheckable.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * TextProxy is a wrapper for substring of {@link module:engine/view/text~Text}. Instance of this class is created by\n * {@link module:engine/view/treewalker~TreeWalker} when only a part of {@link module:engine/view/text~Text} needs to be returned.\n *\n * `TextProxy` has an API similar to {@link module:engine/view/text~Text Text} and allows to do most of the common tasks performed\n * on view nodes.\n *\n * **Note:** Some `TextProxy` instances may represent whole text node, not just a part of it.\n * See {@link module:engine/view/textproxy~TextProxy#isPartial}.\n *\n * **Note:** `TextProxy` is a readonly interface.\n *\n * **Note:** `TextProxy` instances are created on the fly basing on the current state of parent {@link module:engine/view/text~Text}.\n * Because of this it is highly unrecommended to store references to `TextProxy instances because they might get\n * invalidated due to operations on Document. Also TextProxy is not a {@link module:engine/view/node~Node} so it can not be\n * inserted as a child of {@link module:engine/view/element~Element}.\n *\n * `TextProxy` instances are created by {@link module:engine/view/treewalker~TreeWalker view tree walker}. You should not need to create\n * an instance of this class by your own.\n */\nexport default class TextProxy extends TypeCheckable {\n    /**\n     * Creates a text proxy.\n     *\n     * @internal\n     * @param textNode Text node which part is represented by this text proxy.\n     * @param offsetInText Offset in {@link module:engine/view/textproxy~TextProxy#textNode text node}\n     * from which the text proxy starts.\n     * @param length Text proxy length, that is how many text node's characters, starting from `offsetInText` it represents.\n     * @constructor\n     */\n    constructor(textNode, offsetInText, length) {\n        super();\n        this.textNode = textNode;\n        if (offsetInText < 0 || offsetInText > textNode.data.length) {\n            /**\n             * Given offsetInText value is incorrect.\n             *\n             * @error view-textproxy-wrong-offsetintext\n             */\n            throw new CKEditorError('view-textproxy-wrong-offsetintext', this);\n        }\n        if (length < 0 || offsetInText + length > textNode.data.length) {\n            /**\n             * Given length value is incorrect.\n             *\n             * @error view-textproxy-wrong-length\n             */\n            throw new CKEditorError('view-textproxy-wrong-length', this);\n        }\n        this.data = textNode.data.substring(offsetInText, offsetInText + length);\n        this.offsetInText = offsetInText;\n    }\n    /**\n     * Offset size of this node.\n     */\n    get offsetSize() {\n        return this.data.length;\n    }\n    /**\n     * Flag indicating whether `TextProxy` instance covers only part of the original {@link module:engine/view/text~Text text node}\n     * (`true`) or the whole text node (`false`).\n     *\n     * This is `false` when text proxy starts at the very beginning of {@link module:engine/view/textproxy~TextProxy#textNode textNode}\n     * ({@link module:engine/view/textproxy~TextProxy#offsetInText offsetInText} equals `0`) and text proxy sizes is equal to\n     * text node size.\n     */\n    get isPartial() {\n        return this.data.length !== this.textNode.data.length;\n    }\n    /**\n     * Parent of this text proxy, which is same as parent of text node represented by this text proxy.\n     */\n    get parent() {\n        return this.textNode.parent;\n    }\n    /**\n     * Root of this text proxy, which is same as root of text node represented by this text proxy.\n     */\n    get root() {\n        return this.textNode.root;\n    }\n    /**\n     * {@link module:engine/view/document~Document View document} that owns this text proxy, or `null` if the text proxy is inside\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n     */\n    get document() {\n        return this.textNode.document;\n    }\n    /**\n     * Returns ancestors array of this text proxy.\n     *\n     * @param options Options object.\n     * @param options.includeSelf When set to `true`, textNode will be also included in parent's array.\n     * @param options.parentFirst When set to `true`, array will be sorted from text proxy parent to\n     * root element, otherwise root element will be the first item in the array.\n     * @returns Array with ancestors.\n     */\n    getAncestors(options = {}) {\n        const ancestors = [];\n        let parent = options.includeSelf ? this.textNode : this.parent;\n        while (parent !== null) {\n            ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n            parent = parent.parent;\n        }\n        return ancestors;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nTextProxy.prototype.is = function (type) {\n    return type === '$textProxy' || type === 'view:$textProxy' ||\n        // This are legacy values kept for backward compatibility.\n        type === 'textProxy' || type === 'view:textProxy';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { isPlainObject } from 'lodash-es';\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\n/**\n * View matcher class.\n * Instance of this class can be used to find {@link module:engine/view/element~Element elements} that match given pattern.\n */\nexport default class Matcher {\n    /**\n     * Creates new instance of Matcher.\n     *\n     * @param pattern Match patterns. See {@link module:engine/view/matcher~Matcher#add add method} for more information.\n     */\n    constructor(...pattern) {\n        this._patterns = [];\n        this.add(...pattern);\n    }\n    /**\n     * Adds pattern or patterns to matcher instance.\n     *\n     * ```ts\n     * // String.\n     * matcher.add( 'div' );\n     *\n     * // Regular expression.\n     * matcher.add( /^\\w/ );\n     *\n     * // Single class.\n     * matcher.add( {\n     * \tclasses: 'foobar'\n     * } );\n     * ```\n     *\n     * See {@link module:engine/view/matcher~MatcherPattern} for more examples.\n     *\n     * Multiple patterns can be added in one call:\n     *\n     * ```ts\n     * matcher.add( 'div', { classes: 'foobar' } );\n     * ```\n     *\n     * @param pattern Object describing pattern details. If string or regular expression\n     * is provided it will be used to match element's name. Pattern can be also provided in a form\n     * of a function - then this function will be called with each {@link module:engine/view/element~Element element} as a parameter.\n     * Function's return value will be stored under `match` key of the object returned from\n     * {@link module:engine/view/matcher~Matcher#match match} or {@link module:engine/view/matcher~Matcher#matchAll matchAll} methods.\n     */\n    add(...pattern) {\n        for (let item of pattern) {\n            // String or RegExp pattern is used as element's name.\n            if (typeof item == 'string' || item instanceof RegExp) {\n                item = { name: item };\n            }\n            this._patterns.push(item);\n        }\n    }\n    /**\n     * Matches elements for currently stored patterns. Returns match information about first found\n     * {@link module:engine/view/element~Element element}, otherwise returns `null`.\n     *\n     * Example of returned object:\n     *\n     * ```ts\n     * {\n     * \telement: <instance of found element>,\n     * \tpattern: <pattern used to match found element>,\n     * \tmatch: {\n     * \t\tname: true,\n     * \t\tattributes: [ 'title', 'href' ],\n     * \t\tclasses: [ 'foo' ],\n     * \t\tstyles: [ 'color', 'position' ]\n     * \t}\n     * }\n     * ```\n     *\n     * @see module:engine/view/matcher~Matcher#add\n     * @see module:engine/view/matcher~Matcher#matchAll\n     * @param element View element to match against stored patterns.\n     */\n    match(...element) {\n        for (const singleElement of element) {\n            for (const pattern of this._patterns) {\n                const match = isElementMatching(singleElement, pattern);\n                if (match) {\n                    return {\n                        element: singleElement,\n                        pattern,\n                        match\n                    };\n                }\n            }\n        }\n        return null;\n    }\n    /**\n     * Matches elements for currently stored patterns. Returns array of match information with all found\n     * {@link module:engine/view/element~Element elements}. If no element is found - returns `null`.\n     *\n     * @see module:engine/view/matcher~Matcher#add\n     * @see module:engine/view/matcher~Matcher#match\n     * @param element View element to match against stored patterns.\n     * @returns Array with match information about found elements or `null`. For more information\n     * see {@link module:engine/view/matcher~Matcher#match match method} description.\n     */\n    matchAll(...element) {\n        const results = [];\n        for (const singleElement of element) {\n            for (const pattern of this._patterns) {\n                const match = isElementMatching(singleElement, pattern);\n                if (match) {\n                    results.push({\n                        element: singleElement,\n                        pattern,\n                        match\n                    });\n                }\n            }\n        }\n        return results.length > 0 ? results : null;\n    }\n    /**\n     * Returns the name of the element to match if there is exactly one pattern added to the matcher instance\n     * and it matches element name defined by `string` (not `RegExp`). Otherwise, returns `null`.\n     *\n     * @returns Element name trying to match.\n     */\n    getElementName() {\n        if (this._patterns.length !== 1) {\n            return null;\n        }\n        const pattern = this._patterns[0];\n        const name = pattern.name;\n        return (typeof pattern != 'function' && name && !(name instanceof RegExp)) ? name : null;\n    }\n}\n/**\n * Returns match information if {@link module:engine/view/element~Element element} is matching provided pattern.\n * If element cannot be matched to provided pattern - returns `null`.\n *\n * @returns Returns object with match information or null if element is not matching.\n */\nfunction isElementMatching(element, pattern) {\n    // If pattern is provided as function - return result of that function;\n    if (typeof pattern == 'function') {\n        return pattern(element);\n    }\n    const match = {};\n    // Check element's name.\n    if (pattern.name) {\n        match.name = matchName(pattern.name, element.name);\n        if (!match.name) {\n            return null;\n        }\n    }\n    // Check element's attributes.\n    if (pattern.attributes) {\n        match.attributes = matchAttributes(pattern.attributes, element);\n        if (!match.attributes) {\n            return null;\n        }\n    }\n    // Check element's classes.\n    if (pattern.classes) {\n        match.classes = matchClasses(pattern.classes, element);\n        if (!match.classes) {\n            return null;\n        }\n    }\n    // Check element's styles.\n    if (pattern.styles) {\n        match.styles = matchStyles(pattern.styles, element);\n        if (!match.styles) {\n            return null;\n        }\n    }\n    return match;\n}\n/**\n * Checks if name can be matched by provided pattern.\n *\n * @returns Returns `true` if name can be matched, `false` otherwise.\n */\nfunction matchName(pattern, name) {\n    // If pattern is provided as RegExp - test against this regexp.\n    if (pattern instanceof RegExp) {\n        return !!name.match(pattern);\n    }\n    return pattern === name;\n}\n/**\n * Checks if an array of key/value pairs can be matched against provided patterns.\n *\n * Patterns can be provided in a following ways:\n * - a boolean value matches any attribute with any value (or no value):\n *\n * ```ts\n * pattern: true\n * ```\n *\n * - a RegExp expression or object matches any attribute name:\n *\n * ```ts\n * pattern: /h[1-6]/\n * ```\n *\n * - an object matches any attribute that has the same name as the object item's key, where object item's value is:\n * \t- equal to `true`, which matches any attribute value:\n *\n * ```ts\n * pattern: {\n * \trequired: true\n * }\n * ```\n *\n * \t- a string that is equal to attribute value:\n *\n * ```ts\n * pattern: {\n * \trel: 'nofollow'\n * }\n * ```\n *\n * \t- a regular expression that matches attribute value,\n *\n * ```ts\n * pattern: {\n * \tsrc: /^https/\n * }\n * ```\n *\n * - an array with items, where the item is:\n * \t- a string that is equal to attribute value:\n *\n * ```ts\n * pattern: [ 'data-property-1', 'data-property-2' ],\n * ```\n *\n * \t- an object with `key` and `value` property, where `key` is a regular expression matching attribute name and\n * \t\t`value` is either regular expression matching attribute value or a string equal to attribute value:\n *\n * ```ts\n * pattern: [\n * \t{ key: /^data-property-/, value: true },\n * \t// or:\n * \t{ key: /^data-property-/, value: 'foobar' },\n * \t// or:\n * \t{ key: /^data-property-/, value: /^foo/ }\n * ]\n * ```\n *\n * @param patterns Object with information about attributes to match.\n * @param keys Attribute, style or class keys.\n * @param valueGetter A function providing value for a given item key.\n * @returns Returns array with matched attribute names or `null` if no attributes were matched.\n */\nfunction matchPatterns(patterns, keys, valueGetter) {\n    const normalizedPatterns = normalizePatterns(patterns);\n    const normalizedItems = Array.from(keys);\n    const match = [];\n    normalizedPatterns.forEach(([patternKey, patternValue]) => {\n        normalizedItems.forEach(itemKey => {\n            if (isKeyMatched(patternKey, itemKey) &&\n                isValueMatched(patternValue, itemKey, valueGetter)) {\n                match.push(itemKey);\n            }\n        });\n    });\n    // Return matches only if there are at least as many of them as there are patterns.\n    // The RegExp pattern can match more than one item.\n    if (!normalizedPatterns.length || match.length < normalizedPatterns.length) {\n        return undefined;\n    }\n    return match;\n}\n/**\n * Bring all the possible pattern forms to an array of arrays where first item is a key and second is a value.\n *\n * Examples:\n *\n * Boolean pattern value:\n *\n * ```ts\n * true\n * ```\n *\n * to\n *\n * ```ts\n * [ [ true, true ] ]\n * ```\n *\n * Textual pattern value:\n *\n * ```ts\n * 'attribute-name-or-class-or-style'\n * ```\n *\n * to\n *\n * ```ts\n * [ [ 'attribute-name-or-class-or-style', true ] ]\n * ```\n *\n * Regular expression:\n *\n * ```ts\n * /^data-.*$/\n * ```\n *\n * to\n *\n * ```ts\n * [ [ /^data-.*$/, true ] ]\n * ```\n *\n * Objects (plain or with `key` and `value` specified explicitly):\n *\n * ```ts\n * {\n * \tsrc: /^https:.*$/\n * }\n * ```\n *\n * or\n *\n * ```ts\n * [ {\n * \tkey: 'src',\n * \tvalue: /^https:.*$/\n * } ]\n * ```\n *\n * to:\n *\n * ```ts\n * [ [ 'src', /^https:.*$/ ] ]\n * ```\n *\n * @returns Returns an array of objects or null if provided patterns were not in an expected form.\n */\nfunction normalizePatterns(patterns) {\n    if (Array.isArray(patterns)) {\n        return patterns.map((pattern) => {\n            if (isPlainObject(pattern)) {\n                if (pattern.key === undefined || pattern.value === undefined) {\n                    // Documented at the end of matcher.js.\n                    logWarning('matcher-pattern-missing-key-or-value', pattern);\n                }\n                return [pattern.key, pattern.value];\n            }\n            // Assume the pattern is either String or RegExp.\n            return [pattern, true];\n        });\n    }\n    if (isPlainObject(patterns)) {\n        return Object.entries(patterns);\n    }\n    // Other cases (true, string or regexp).\n    return [[patterns, true]];\n}\n/**\n * @param patternKey A pattern representing a key we want to match.\n * @param itemKey An actual item key (e.g. `'src'`, `'background-color'`, `'ck-widget'`) we're testing against pattern.\n */\nfunction isKeyMatched(patternKey, itemKey) {\n    return patternKey === true ||\n        patternKey === itemKey ||\n        patternKey instanceof RegExp && itemKey.match(patternKey);\n}\n/**\n * @param patternValue A pattern representing a value we want to match.\n * @param itemKey An item key, e.g. `background`, `href`, 'rel', etc.\n * @param valueGetter A function used to provide a value for a given `itemKey`.\n */\nfunction isValueMatched(patternValue, itemKey, valueGetter) {\n    if (patternValue === true) {\n        return true;\n    }\n    const itemValue = valueGetter(itemKey);\n    // For now, the reducers are not returning the full tree of properties.\n    // Casting to string preserves the old behavior until the root cause is fixed.\n    // More can be found in https://github.com/ckeditor/ckeditor5/issues/10399.\n    return patternValue === itemValue ||\n        patternValue instanceof RegExp && !!String(itemValue).match(patternValue);\n}\n/**\n * Checks if attributes of provided element can be matched against provided patterns.\n *\n * @param patterns Object with information about attributes to match. Each key of the object will be\n * used as attribute name. Value of each key can be a string or regular expression to match against attribute value.\n * @param  element Element which attributes will be tested.\n * @returns Returns array with matched attribute names or `null` if no attributes were matched.\n */\nfunction matchAttributes(patterns, element) {\n    const attributeKeys = new Set(element.getAttributeKeys());\n    // `style` and `class` attribute keys are deprecated. Only allow them in object pattern\n    // for backward compatibility.\n    if (isPlainObject(patterns)) {\n        if (patterns.style !== undefined) {\n            // Documented at the end of matcher.js.\n            logWarning('matcher-pattern-deprecated-attributes-style-key', patterns);\n        }\n        if (patterns.class !== undefined) {\n            // Documented at the end of matcher.js.\n            logWarning('matcher-pattern-deprecated-attributes-class-key', patterns);\n        }\n    }\n    else {\n        attributeKeys.delete('style');\n        attributeKeys.delete('class');\n    }\n    return matchPatterns(patterns, attributeKeys, key => element.getAttribute(key));\n}\n/**\n * Checks if classes of provided element can be matched against provided patterns.\n *\n * @param patterns Array of strings or regular expressions to match against element's classes.\n * @param element Element which classes will be tested.\n * @returns Returns array with matched class names or `null` if no classes were matched.\n */\nfunction matchClasses(patterns, element) {\n    // We don't need `getter` here because patterns for classes are always normalized to `[ className, true ]`.\n    return matchPatterns(patterns, element.getClassNames(), /* istanbul ignore next -- @preserve */ () => { });\n}\n/**\n * Checks if styles of provided element can be matched against provided patterns.\n *\n * @param patterns Object with information about styles to match. Each key of the object will be\n * used as style name. Value of each key can be a string or regular expression to match against style value.\n * @param element Element which styles will be tested.\n * @returns Returns array with matched style names or `null` if no styles were matched.\n */\nfunction matchStyles(patterns, element) {\n    return matchPatterns(patterns, element.getStyleNames(true), key => element.getStyle(key));\n}\n/**\n * The key-value matcher pattern is missing key or value. Both must be present.\n * Refer the documentation: {@link module:engine/view/matcher~MatcherPattern}.\n *\n * @param pattern Pattern with missing properties.\n * @error matcher-pattern-missing-key-or-value\n */\n/**\n * The key-value matcher pattern for `attributes` option is using deprecated `style` key.\n *\n * Use `styles` matcher pattern option instead:\n *\n * ```ts\n * // Instead of:\n * const pattern = {\n * \tattributes: {\n * \t\tkey1: 'value1',\n * \t\tkey2: 'value2',\n * \t\tstyle: /^border.*$/\n * \t}\n * }\n *\n * // Use:\n * const pattern = {\n * \tattributes: {\n * \t\tkey1: 'value1',\n * \t\tkey2: 'value2'\n * \t},\n * \tstyles: /^border.*$/\n * }\n * ```\n *\n * Refer to the {@glink updating/guides/update-to-29##update-to-ckeditor-5-v2910 Migration to v29.1.0} guide\n * and {@link module:engine/view/matcher~MatcherPattern} documentation.\n *\n * @param pattern Pattern with missing properties.\n * @error matcher-pattern-deprecated-attributes-style-key\n */\n/**\n * The key-value matcher pattern for `attributes` option is using deprecated `class` key.\n *\n * Use `classes` matcher pattern option instead:\n *\n * ```ts\n * // Instead of:\n * const pattern = {\n * \tattributes: {\n * \t\tkey1: 'value1',\n * \t\tkey2: 'value2',\n * \t\tclass: 'foobar'\n * \t}\n * }\n *\n * // Use:\n * const pattern = {\n * \tattributes: {\n * \t\tkey1: 'value1',\n * \t\tkey2: 'value2'\n * \t},\n * \tclasses: 'foobar'\n * }\n * ```\n *\n * Refer to the {@glink updating/guides/update-to-29##update-to-ckeditor-5-v2910 Migration to v29.1.0} guide\n * and the {@link module:engine/view/matcher~MatcherPattern} documentation.\n *\n * @param pattern Pattern with missing properties.\n * @error matcher-pattern-deprecated-attributes-class-key\n */\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n", "import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nexport default isKey;\n", "import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n", "import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n", "import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n", "import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\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  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n", "import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n", "import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n", "/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n", "import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n", "import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n", "import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n", "import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  return object == null || delete object[toKey(last(path))];\n}\n\nexport default baseUnset;\n", "import baseUnset from './_baseUnset.js';\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n  return object == null ? true : baseUnset(object, path);\n}\n\nexport default unset;\n", "import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n", "import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nexport default baseSet;\n", "import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/stylesmap\n */\nimport { get, isObject, merge, set, unset } from 'lodash-es';\n/**\n * Styles map. Allows handling (adding, removing, retrieving) a set of style rules (usually, of an element).\n */\nexport default class StylesMap {\n    /**\n     * Creates Styles instance.\n     */\n    constructor(styleProcessor) {\n        this._styles = {};\n        this._styleProcessor = styleProcessor;\n    }\n    /**\n     * Returns true if style map has no styles set.\n     */\n    get isEmpty() {\n        const entries = Object.entries(this._styles);\n        return !entries.length;\n    }\n    /**\n     * Number of styles defined.\n     */\n    get size() {\n        if (this.isEmpty) {\n            return 0;\n        }\n        return this.getStyleNames().length;\n    }\n    /**\n     * Set styles map to a new value.\n     *\n     * ```ts\n     * styles.setTo( 'border:1px solid blue;margin-top:1px;' );\n     * ```\n     */\n    setTo(inlineStyle) {\n        this.clear();\n        const parsedStyles = parseInlineStyles(inlineStyle);\n        for (const [key, value] of parsedStyles) {\n            this._styleProcessor.toNormalizedForm(key, value, this._styles);\n        }\n    }\n    /**\n     * Checks if a given style is set.\n     *\n     * ```ts\n     * styles.setTo( 'margin-left:1px;' );\n     *\n     * styles.has( 'margin-left' );    // -> true\n     * styles.has( 'padding' );        // -> false\n     * ```\n     *\n     * **Note**: This check supports normalized style names.\n     *\n     * ```ts\n     * // Enable 'margin' shorthand processing:\n     * editor.data.addStyleProcessorRules( addMarginRules );\n     *\n     * styles.setTo( 'margin:2px;' );\n     *\n     * styles.has( 'margin' );         // -> true\n     * styles.has( 'margin-top' );     // -> true\n     * styles.has( 'margin-left' );    // -> true\n     *\n     * styles.remove( 'margin-top' );\n     *\n     * styles.has( 'margin' );         // -> false\n     * styles.has( 'margin-top' );     // -> false\n     * styles.has( 'margin-left' );    // -> true\n     * ```\n     *\n     * @param name Style name.\n     */\n    has(name) {\n        if (this.isEmpty) {\n            return false;\n        }\n        const styles = this._styleProcessor.getReducedForm(name, this._styles);\n        const propertyDescriptor = styles.find(([property]) => property === name);\n        // Only return a value if it is set;\n        return Array.isArray(propertyDescriptor);\n    }\n    set(nameOrObject, valueOrObject) {\n        if (isObject(nameOrObject)) {\n            for (const [key, value] of Object.entries(nameOrObject)) {\n                this._styleProcessor.toNormalizedForm(key, value, this._styles);\n            }\n        }\n        else {\n            this._styleProcessor.toNormalizedForm(nameOrObject, valueOrObject, this._styles);\n        }\n    }\n    /**\n     * Removes given style.\n     *\n     * ```ts\n     * styles.setTo( 'background:#f00;margin-right:2px;' );\n     *\n     * styles.remove( 'background' );\n     *\n     * styles.toString();   // -> 'margin-right:2px;'\n     * ```\n     *\n     * ***Note**:* This method uses {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules\n     * enabled style processor rules} to normalize passed values.\n     *\n     * ```ts\n     * // Enable 'margin' shorthand processing:\n     * editor.data.addStyleProcessorRules( addMarginRules );\n     *\n     * styles.setTo( 'margin:1px' );\n     *\n     * styles.remove( 'margin-top' );\n     * styles.remove( 'margin-right' );\n     *\n     * styles.toString(); // -> 'margin-bottom:1px;margin-left:1px;'\n     * ```\n     *\n     * @param name Style name.\n     */\n    remove(name) {\n        const path = toPath(name);\n        unset(this._styles, path);\n        delete this._styles[name];\n        this._cleanEmptyObjectsOnPath(path);\n    }\n    /**\n     * Returns a normalized style object or a single value.\n     *\n     * ```ts\n     * // Enable 'margin' shorthand processing:\n     * editor.data.addStyleProcessorRules( addMarginRules );\n     *\n     * const styles = new Styles();\n     * styles.setTo( 'margin:1px 2px 3em;' );\n     *\n     * styles.getNormalized( 'margin' );\n     * // will log:\n     * // {\n     * //     top: '1px',\n     * //     right: '2px',\n     * //     bottom: '3em',\n     * //     left: '2px'     // normalized value from margin shorthand\n     * // }\n     *\n     * styles.getNormalized( 'margin-left' ); // -> '2px'\n     * ```\n     *\n     * **Note**: This method will only return normalized styles if a style processor was defined.\n     *\n     * @param name Style name.\n     */\n    getNormalized(name) {\n        return this._styleProcessor.getNormalized(name, this._styles);\n    }\n    /**\n     * Returns a normalized style string. Styles are sorted by name.\n     *\n     * ```ts\n     * styles.set( 'margin' , '1px' );\n     * styles.set( 'background', '#f00' );\n     *\n     * styles.toString(); // -> 'background:#f00;margin:1px;'\n     * ```\n     *\n     * **Note**: This method supports normalized styles if defined.\n     *\n     * ```ts\n     * // Enable 'margin' shorthand processing:\n     * editor.data.addStyleProcessorRules( addMarginRules );\n     *\n     * styles.set( 'margin' , '1px' );\n     * styles.set( 'background', '#f00' );\n     * styles.remove( 'margin-top' );\n     * styles.remove( 'margin-right' );\n     *\n     * styles.toString(); // -> 'background:#f00;margin-bottom:1px;margin-left:1px;'\n     * ```\n     */\n    toString() {\n        if (this.isEmpty) {\n            return '';\n        }\n        return this.getStylesEntries()\n            .map(arr => arr.join(':'))\n            .sort()\n            .join(';') + ';';\n    }\n    /**\n     * Returns property as a value string or undefined if property is not set.\n     *\n     * ```ts\n     * // Enable 'margin' shorthand processing:\n     * editor.data.addStyleProcessorRules( addMarginRules );\n     *\n     * const styles = new Styles();\n     * styles.setTo( 'margin:1px;' );\n     * styles.set( 'margin-bottom', '3em' );\n     *\n     * styles.getAsString( 'margin' ); // -> 'margin: 1px 1px 3em;'\n     * ```\n     *\n     * Note, however, that all sub-values must be set for the longhand property name to return a value:\n     *\n     * ```ts\n     * const styles = new Styles();\n     * styles.setTo( 'margin:1px;' );\n     * styles.remove( 'margin-bottom' );\n     *\n     * styles.getAsString( 'margin' ); // -> undefined\n     * ```\n     *\n     * In the above scenario, it is not possible to return a `margin` value, so `undefined` is returned.\n     * Instead, you should use:\n     *\n     * ```ts\n     * const styles = new Styles();\n     * styles.setTo( 'margin:1px;' );\n     * styles.remove( 'margin-bottom' );\n     *\n     * for ( const styleName of styles.getStyleNames() ) {\n     * \tconsole.log( styleName, styles.getAsString( styleName ) );\n     * }\n     * // 'margin-top', '1px'\n     * // 'margin-right', '1px'\n     * // 'margin-left', '1px'\n     * ```\n     *\n     * In general, it is recommend to iterate over style names like in the example above. This way, you will always get all\n     * the currently set style values. So, if all the 4 margin values would be set\n     * the for-of loop above would yield only `'margin'`, `'1px'`:\n     *\n     * ```ts\n     * const styles = new Styles();\n     * styles.setTo( 'margin:1px;' );\n     *\n     * for ( const styleName of styles.getStyleNames() ) {\n     * \tconsole.log( styleName, styles.getAsString( styleName ) );\n     * }\n     * // 'margin', '1px'\n     * ```\n     *\n     * **Note**: To get a normalized version of a longhand property use the {@link #getNormalized `#getNormalized()`} method.\n     */\n    getAsString(propertyName) {\n        if (this.isEmpty) {\n            return;\n        }\n        if (this._styles[propertyName] && !isObject(this._styles[propertyName])) {\n            // Try return styles set directly - values that are not parsed.\n            return this._styles[propertyName];\n        }\n        const styles = this._styleProcessor.getReducedForm(propertyName, this._styles);\n        const propertyDescriptor = styles.find(([property]) => property === propertyName);\n        // Only return a value if it is set;\n        if (Array.isArray(propertyDescriptor)) {\n            return propertyDescriptor[1];\n        }\n    }\n    /**\n     * Returns all style properties names as they would appear when using {@link #toString `#toString()`}.\n     *\n     * When `expand` is set to true and there's a shorthand style property set, it will also return all equivalent styles:\n     *\n     * ```ts\n     * stylesMap.setTo( 'margin: 1em' )\n     * ```\n     *\n     * will be expanded to:\n     *\n     * ```ts\n     * [ 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left' ]\n     * ```\n     *\n     * @param expand Expand shorthand style properties and all return equivalent style representations.\n     */\n    getStyleNames(expand = false) {\n        if (this.isEmpty) {\n            return [];\n        }\n        if (expand) {\n            return this._styleProcessor.getStyleNames(this._styles);\n        }\n        const entries = this.getStylesEntries();\n        return entries.map(([key]) => key);\n    }\n    /**\n     * Removes all styles.\n     */\n    clear() {\n        this._styles = {};\n    }\n    /**\n     * Returns normalized styles entries for further processing.\n     */\n    getStylesEntries() {\n        const parsed = [];\n        const keys = Object.keys(this._styles);\n        for (const key of keys) {\n            parsed.push(...this._styleProcessor.getReducedForm(key, this._styles));\n        }\n        return parsed;\n    }\n    /**\n     * Removes empty objects upon removing an entry from internal object.\n     */\n    _cleanEmptyObjectsOnPath(path) {\n        const pathParts = path.split('.');\n        const isChildPath = pathParts.length > 1;\n        if (!isChildPath) {\n            return;\n        }\n        const parentPath = pathParts.splice(0, pathParts.length - 1).join('.');\n        const parentObject = get(this._styles, parentPath);\n        if (!parentObject) {\n            return;\n        }\n        const isParentEmpty = !Object.keys(parentObject).length;\n        if (isParentEmpty) {\n            this.remove(parentPath);\n        }\n    }\n}\n/**\n * Style processor is responsible for writing and reading a normalized styles object.\n */\nexport class StylesProcessor {\n    /**\n     * Creates StylesProcessor instance.\n     *\n     * @internal\n     */\n    constructor() {\n        this._normalizers = new Map();\n        this._extractors = new Map();\n        this._reducers = new Map();\n        this._consumables = new Map();\n    }\n    /**\n     * Parse style string value to a normalized object and appends it to styles object.\n     *\n     * ```ts\n     * const styles = {};\n     *\n     * stylesProcessor.toNormalizedForm( 'margin', '1px', styles );\n     *\n     * // styles will consist: { margin: { top: '1px', right: '1px', bottom: '1px', left: '1px; } }\n     * ```\n     *\n     * **Note**: To define normalizer callbacks use {@link #setNormalizer}.\n     *\n     * @param name Name of style property.\n     * @param propertyValue Value of style property.\n     * @param styles Object holding normalized styles.\n     */\n    toNormalizedForm(name, propertyValue, styles) {\n        if (isObject(propertyValue)) {\n            appendStyleValue(styles, toPath(name), propertyValue);\n            return;\n        }\n        if (this._normalizers.has(name)) {\n            const normalizer = this._normalizers.get(name);\n            const { path, value } = normalizer(propertyValue);\n            appendStyleValue(styles, path, value);\n        }\n        else {\n            appendStyleValue(styles, name, propertyValue);\n        }\n    }\n    /**\n     * Returns a normalized version of a style property.\n     *\n     * ```ts\n     * const styles = {\n     * \tmargin: { top: '1px', right: '1px', bottom: '1px', left: '1px; },\n     * \tbackground: { color: '#f00' }\n     * };\n     *\n     * stylesProcessor.getNormalized( 'background' );\n     * // will return: { color: '#f00' }\n     *\n     * stylesProcessor.getNormalized( 'margin-top' );\n     * // will return: '1px'\n     * ```\n     *\n     * **Note**: In some cases extracting single value requires defining an extractor callback {@link #setExtractor}.\n     *\n     * @param name Name of style property.\n     * @param styles Object holding normalized styles.\n     */\n    getNormalized(name, styles) {\n        if (!name) {\n            return merge({}, styles);\n        }\n        // Might be empty string.\n        if (styles[name] !== undefined) {\n            return styles[name];\n        }\n        if (this._extractors.has(name)) {\n            const extractor = this._extractors.get(name);\n            if (typeof extractor === 'string') {\n                return get(styles, extractor);\n            }\n            const value = extractor(name, styles);\n            if (value) {\n                return value;\n            }\n        }\n        return get(styles, toPath(name));\n    }\n    /**\n     * Returns a reduced form of style property form normalized object.\n     *\n     * For default margin reducer, the below code:\n     *\n     * ```ts\n     * stylesProcessor.getReducedForm( 'margin', {\n     * \tmargin: { top: '1px', right: '1px', bottom: '2px', left: '1px; }\n     * } );\n     * ```\n     *\n     * will return:\n     *\n     * ```ts\n     * [\n     * \t[ 'margin', '1px 1px 2px' ]\n     * ]\n     * ```\n     *\n     * because it might be represented as a shorthand 'margin' value. However if one of margin long hand values is missing it should return:\n     *\n     * ```ts\n     * [\n     * \t[ 'margin-top', '1px' ],\n     * \t[ 'margin-right', '1px' ],\n     * \t[ 'margin-bottom', '2px' ]\n     * \t// the 'left' value is missing - cannot use 'margin' shorthand.\n     * ]\n     * ```\n     *\n     * **Note**: To define reducer callbacks use {@link #setReducer}.\n     *\n     * @param name Name of style property.\n     */\n    getReducedForm(name, styles) {\n        const normalizedValue = this.getNormalized(name, styles);\n        // Might be empty string.\n        if (normalizedValue === undefined) {\n            return [];\n        }\n        if (this._reducers.has(name)) {\n            const reducer = this._reducers.get(name);\n            return reducer(normalizedValue);\n        }\n        return [[name, normalizedValue]];\n    }\n    /**\n     * Return all style properties. Also expand shorthand properties (e.g. `margin`, `background`) if respective extractor is available.\n     *\n     * @param styles Object holding normalized styles.\n     */\n    getStyleNames(styles) {\n        const styleNamesKeysSet = new Set();\n        // Find all extractable styles that have a value.\n        for (const name of this._consumables.keys()) {\n            const style = this.getNormalized(name, styles);\n            if (style && (typeof style != 'object' || Object.keys(style).length)) {\n                styleNamesKeysSet.add(name);\n            }\n        }\n        // For simple styles (for example `color`) we don't have a map of those styles\n        // but they are 1 to 1 with normalized object keys.\n        for (const name of Object.keys(styles)) {\n            styleNamesKeysSet.add(name);\n        }\n        return Array.from(styleNamesKeysSet);\n    }\n    /**\n     * Returns related style names.\n     *\n     * ```ts\n     * stylesProcessor.getRelatedStyles( 'margin' );\n     * // will return: [ 'margin-top', 'margin-right', 'margin-bottom', 'margin-left' ];\n     *\n     * stylesProcessor.getRelatedStyles( 'margin-top' );\n     * // will return: [ 'margin' ];\n     * ```\n     *\n     * **Note**: To define new style relations load an existing style processor or use\n     * {@link module:engine/view/stylesmap~StylesProcessor#setStyleRelation `StylesProcessor.setStyleRelation()`}.\n     */\n    getRelatedStyles(name) {\n        return this._consumables.get(name) || [];\n    }\n    /**\n     * Adds a normalizer method for a style property.\n     *\n     * A normalizer returns describing how the value should be normalized.\n     *\n     * For instance 'margin' style is a shorthand for four margin values:\n     *\n     * - 'margin-top'\n     * - 'margin-right'\n     * - 'margin-bottom'\n     * - 'margin-left'\n     *\n     * and can be written in various ways if some values are equal to others. For instance `'margin: 1px 2em;'` is a shorthand for\n     * `'margin-top: 1px;margin-right: 2em;margin-bottom: 1px;margin-left: 2em'`.\n     *\n     * A normalizer should parse various margin notations as a single object:\n     *\n     * ```ts\n     * const styles = {\n     * \tmargin: {\n     * \t\ttop: '1px',\n     * \t\tright: '2em',\n     * \t\tbottom: '1px',\n     * \t\tleft: '2em'\n     * \t}\n     * };\n     * ```\n     *\n     * Thus a normalizer for 'margin' style should return an object defining style path and value to store:\n     *\n     * ```ts\n     * const returnValue = {\n     * \tpath: 'margin',\n     * \tvalue: {\n     * \t\ttop: '1px',\n     * \t\tright: '2em',\n     * \t\tbottom: '1px',\n     * \t\tleft: '2em'\n     * \t}\n     * };\n     * ```\n     *\n     * Additionally to fully support all margin notations there should be also defined 4 normalizers for longhand margin notations. Below\n     * is an example for 'margin-top' style property normalizer:\n     *\n     * ```ts\n     * stylesProcessor.setNormalizer( 'margin-top', valueString => {\n     * \treturn {\n     * \t\tpath: 'margin.top',\n     * \t\tvalue: valueString\n     * \t}\n     * } );\n     * ```\n     */\n    setNormalizer(name, callback) {\n        this._normalizers.set(name, callback);\n    }\n    /**\n     * Adds a extractor callback for a style property.\n     *\n     * Most normalized style values are stored as one level objects. It is assumed that `'margin-top'` style will be stored as:\n     *\n     * ```ts\n     * const styles = {\n     * \tmargin: {\n     * \t\ttop: 'value'\n     * \t}\n     * }\n     * ```\n     *\n     * However, some styles can have conflicting notations and thus it might be harder to extract a style value from shorthand. For instance\n     * the 'border-top-style' can be defined using `'border-top:solid'`, `'border-style:solid none none none'` or by `'border:solid'`\n     * shorthands. The default border styles processors stores styles as:\n     *\n     * ```ts\n     * const styles = {\n     * \tborder: {\n     * \t\tstyle: {\n     * \t\t\ttop: 'solid'\n     * \t\t}\n     * \t}\n     * }\n     * ```\n     *\n     * as it is better to modify border style independently from other values. On the other part the output of the border might be\n     * desired as `border-top`, `border-left`, etc notation.\n     *\n     * In the above example an extractor should return a side border value that combines style, color and width:\n     *\n     * ```ts\n     * styleProcessor.setExtractor( 'border-top', styles => {\n     * \treturn {\n     * \t\tcolor: styles.border.color.top,\n     * \t\tstyle: styles.border.style.top,\n     * \t\twidth: styles.border.width.top\n     * \t}\n     * } );\n     * ```\n     *\n     * @param callbackOrPath Callback that return a requested value or path string for single values.\n     */\n    setExtractor(name, callbackOrPath) {\n        this._extractors.set(name, callbackOrPath);\n    }\n    /**\n     * Adds a reducer callback for a style property.\n     *\n     * Reducer returns a minimal notation for given style name. For longhand properties it is not required to write a reducer as\n     * by default the direct value from style path is taken.\n     *\n     * For shorthand styles a reducer should return minimal style notation either by returning single name-value tuple or multiple tuples\n     * if a shorthand cannot be used. For instance for a margin shorthand a reducer might return:\n     *\n     * ```ts\n     * const marginShortHandTuple = [\n     * \t[ 'margin', '1px 1px 2px' ]\n     * ];\n     * ```\n     *\n     * or a longhand tuples for defined values:\n     *\n     * ```ts\n     * // Considering margin.bottom and margin.left are undefined.\n     * const marginLonghandsTuples = [\n     * \t[ 'margin-top', '1px' ],\n     * \t[ 'margin-right', '1px' ]\n     * ];\n     * ```\n     *\n     * A reducer obtains a normalized style value:\n     *\n     * ```ts\n     * // Simplified reducer that always outputs 4 values which are always present:\n     * stylesProcessor.setReducer( 'margin', margin => {\n     * \treturn [\n     * \t\t[ 'margin', `${ margin.top } ${ margin.right } ${ margin.bottom } ${ margin.left }` ]\n     * \t]\n     * } );\n     * ```\n     */\n    setReducer(name, callback) {\n        this._reducers.set(name, callback);\n    }\n    /**\n     * Defines a style shorthand relation to other style notations.\n     *\n     * ```ts\n     * stylesProcessor.setStyleRelation( 'margin', [\n     * \t'margin-top',\n     * \t'margin-right',\n     * \t'margin-bottom',\n     * \t'margin-left'\n     * ] );\n     * ```\n     *\n     * This enables expanding of style names for shorthands. For instance, if defined,\n     * {@link module:engine/conversion/viewconsumable~ViewConsumable view consumable} items are automatically created\n     * for long-hand margin style notation alongside the `'margin'` item.\n     *\n     * This means that when an element being converted has a style `margin`, a converter for `margin-left` will work just\n     * fine since the view consumable will contain a consumable `margin-left` item (thanks to the relation) and\n     * `element.getStyle( 'margin-left' )` will work as well assuming that the style processor was correctly configured.\n     * However, once `margin-left` is consumed, `margin` will not be consumable anymore.\n     */\n    setStyleRelation(shorthandName, styleNames) {\n        this._mapStyleNames(shorthandName, styleNames);\n        for (const alsoName of styleNames) {\n            this._mapStyleNames(alsoName, [shorthandName]);\n        }\n    }\n    /**\n     * Set two-way binding of style names.\n     */\n    _mapStyleNames(name, styleNames) {\n        if (!this._consumables.has(name)) {\n            this._consumables.set(name, []);\n        }\n        this._consumables.get(name).push(...styleNames);\n    }\n}\n/**\n * Parses inline styles and puts property - value pairs into styles map.\n *\n * @param stylesString Styles to parse.\n * @returns Map of parsed properties and values.\n */\nfunction parseInlineStyles(stylesString) {\n    // `null` if no quote was found in input string or last found quote was a closing quote. See below.\n    let quoteType = null;\n    let propertyNameStart = 0;\n    let propertyValueStart = 0;\n    let propertyName = null;\n    const stylesMap = new Map();\n    // Do not set anything if input string is empty.\n    if (stylesString === '') {\n        return stylesMap;\n    }\n    // Fix inline styles that do not end with `;` so they are compatible with algorithm below.\n    if (stylesString.charAt(stylesString.length - 1) != ';') {\n        stylesString = stylesString + ';';\n    }\n    // Seek the whole string for \"special characters\".\n    for (let i = 0; i < stylesString.length; i++) {\n        const char = stylesString.charAt(i);\n        if (quoteType === null) {\n            // No quote found yet or last found quote was a closing quote.\n            switch (char) {\n                case ':':\n                    // Most of time colon means that property name just ended.\n                    // Sometimes however `:` is found inside property value (for example in background image url).\n                    if (!propertyName) {\n                        // Treat this as end of property only if property name is not already saved.\n                        // Save property name.\n                        propertyName = stylesString.substr(propertyNameStart, i - propertyNameStart);\n                        // Save this point as the start of property value.\n                        propertyValueStart = i + 1;\n                    }\n                    break;\n                case '\"':\n                case '\\'':\n                    // Opening quote found (this is an opening quote, because `quoteType` is `null`).\n                    quoteType = char;\n                    break;\n                case ';': {\n                    // Property value just ended.\n                    // Use previously stored property value start to obtain property value.\n                    const propertyValue = stylesString.substr(propertyValueStart, i - propertyValueStart);\n                    if (propertyName) {\n                        // Save parsed part.\n                        stylesMap.set(propertyName.trim(), propertyValue.trim());\n                    }\n                    propertyName = null;\n                    // Save this point as property name start. Property name starts immediately after previous property value ends.\n                    propertyNameStart = i + 1;\n                    break;\n                }\n            }\n        }\n        else if (char === quoteType) {\n            // If a quote char is found and it is a closing quote, mark this fact by `null`-ing `quoteType`.\n            quoteType = null;\n        }\n    }\n    return stylesMap;\n}\n/**\n * Return lodash compatible path from style name.\n */\nfunction toPath(name) {\n    return name.replace('-', '.');\n}\n/**\n * Appends style definition to the styles object.\n */\nfunction appendStyleValue(stylesObject, nameOrPath, valueOrObject) {\n    let valueToSet = valueOrObject;\n    if (isObject(valueOrObject)) {\n        valueToSet = merge({}, get(stylesObject, nameOrPath), valueOrObject);\n    }\n    set(stylesObject, nameOrPath, valueToSet);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/element\n */\nimport Node from './node.js';\nimport Text from './text.js';\nimport TextProxy from './textproxy.js';\nimport { isIterable, toArray, toMap } from '@ckeditor/ckeditor5-utils';\nimport { default as Matcher } from './matcher.js';\nimport { default as StylesMap } from './stylesmap.js';\n// @if CK_DEBUG_ENGINE // const { convertMapToTags } = require( '../dev-utils/utils' );\n/**\n * View element.\n *\n * The editing engine does not define a fixed semantics of its elements (it is \"DTD-free\").\n * This is why the type of the {@link module:engine/view/element~Element} need to\n * be defined by the feature developer. When creating an element you should use one of the following methods:\n *\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createContainerElement `downcastWriter#createContainerElement()`}\n * in order to create a {@link module:engine/view/containerelement~ContainerElement},\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createAttributeElement `downcastWriter#createAttributeElement()`}\n * in order to create a {@link module:engine/view/attributeelement~AttributeElement},\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createEmptyElement `downcastWriter#createEmptyElement()`}\n * in order to create a {@link module:engine/view/emptyelement~EmptyElement}.\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `downcastWriter#createUIElement()`}\n * in order to create a {@link module:engine/view/uielement~UIElement}.\n * * {@link module:engine/view/downcastwriter~DowncastWriter#createEditableElement `downcastWriter#createEditableElement()`}\n * in order to create a {@link module:engine/view/editableelement~EditableElement}.\n *\n * Note that for view elements which are not created from the model, like elements from mutations, paste or\n * {@link module:engine/controller/datacontroller~DataController#set data.set} it is not possible to define the type of the element.\n * In such cases the {@link module:engine/view/upcastwriter~UpcastWriter#createElement `UpcastWriter#createElement()`} method\n * should be used to create generic view elements.\n */\nexport default class Element extends Node {\n    /**\n     * Creates a view element.\n     *\n     * Attributes can be passed in various formats:\n     *\n     * ```ts\n     * new Element( viewDocument, 'div', { class: 'editor', contentEditable: 'true' } ); // object\n     * new Element( viewDocument, 'div', [ [ 'class', 'editor' ], [ 'contentEditable', 'true' ] ] ); // map-like iterator\n     * new Element( viewDocument, 'div', mapOfAttributes ); // map\n     * ```\n     *\n     * @internal\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     */\n    constructor(document, name, attrs, children) {\n        super(document);\n        /**\n         * A list of attribute names that should be rendered in the editing pipeline even though filtering mechanisms\n         * implemented in the {@link module:engine/view/domconverter~DomConverter} (for instance,\n         * {@link module:engine/view/domconverter~DomConverter#shouldRenderAttribute}) would filter them out.\n         *\n         * These attributes can be specified as an option when the element is created by\n         * the {@link module:engine/view/downcastwriter~DowncastWriter}. To check whether an unsafe an attribute should\n         * be permitted, use the {@link #shouldRenderUnsafeAttribute} method.\n         *\n         * @internal\n         */\n        this._unsafeAttributesToRender = [];\n        /**\n         * Map of custom properties.\n         * Custom properties can be added to element instance, will be cloned but not rendered into DOM.\n         */\n        this._customProperties = new Map();\n        this.name = name;\n        this._attrs = parseAttributes(attrs);\n        this._children = [];\n        if (children) {\n            this._insertChild(0, children);\n        }\n        this._classes = new Set();\n        if (this._attrs.has('class')) {\n            // Remove class attribute and handle it by class set.\n            const classString = this._attrs.get('class');\n            parseClasses(this._classes, classString);\n            this._attrs.delete('class');\n        }\n        this._styles = new StylesMap(this.document.stylesProcessor);\n        if (this._attrs.has('style')) {\n            // Remove style attribute and handle it by styles map.\n            this._styles.setTo(this._attrs.get('style'));\n            this._attrs.delete('style');\n        }\n    }\n    /**\n     * Number of element's children.\n     */\n    get childCount() {\n        return this._children.length;\n    }\n    /**\n     * Is `true` if there are no nodes inside this element, `false` otherwise.\n     */\n    get isEmpty() {\n        return this._children.length === 0;\n    }\n    /**\n     * Gets child at the given index.\n     *\n     * @param index Index of child.\n     * @returns Child node.\n     */\n    getChild(index) {\n        return this._children[index];\n    }\n    /**\n     * Gets index of the given child node. Returns `-1` if child node is not found.\n     *\n     * @param node Child node.\n     * @returns Index of the child node.\n     */\n    getChildIndex(node) {\n        return this._children.indexOf(node);\n    }\n    /**\n     * Gets child nodes iterator.\n     *\n     * @returns Child nodes iterator.\n     */\n    getChildren() {\n        return this._children[Symbol.iterator]();\n    }\n    /**\n     * Returns an iterator that contains the keys for attributes. Order of inserting attributes is not preserved.\n     *\n     * @returns Keys for attributes.\n     */\n    *getAttributeKeys() {\n        if (this._classes.size > 0) {\n            yield 'class';\n        }\n        if (!this._styles.isEmpty) {\n            yield 'style';\n        }\n        yield* this._attrs.keys();\n    }\n    /**\n     * Returns iterator that iterates over this element's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     */\n    *getAttributes() {\n        yield* this._attrs.entries();\n        if (this._classes.size > 0) {\n            yield ['class', this.getAttribute('class')];\n        }\n        if (!this._styles.isEmpty) {\n            yield ['style', this.getAttribute('style')];\n        }\n    }\n    /**\n     * Gets attribute by key. If attribute is not present - returns undefined.\n     *\n     * @param key Attribute key.\n     * @returns Attribute value.\n     */\n    getAttribute(key) {\n        if (key == 'class') {\n            if (this._classes.size > 0) {\n                return [...this._classes].join(' ');\n            }\n            return undefined;\n        }\n        if (key == 'style') {\n            const inlineStyle = this._styles.toString();\n            return inlineStyle == '' ? undefined : inlineStyle;\n        }\n        return this._attrs.get(key);\n    }\n    /**\n     * Returns a boolean indicating whether an attribute with the specified key exists in the element.\n     *\n     * @param key Attribute key.\n     * @returns `true` if attribute with the specified key exists in the element, `false` otherwise.\n     */\n    hasAttribute(key) {\n        if (key == 'class') {\n            return this._classes.size > 0;\n        }\n        if (key == 'style') {\n            return !this._styles.isEmpty;\n        }\n        return this._attrs.has(key);\n    }\n    /**\n     * Checks if this element is similar to other element.\n     * Both elements should have the same name and attributes to be considered as similar. Two similar elements\n     * can contain different set of children nodes.\n     */\n    isSimilar(otherElement) {\n        if (!(otherElement instanceof Element)) {\n            return false;\n        }\n        // If exactly the same Element is provided - return true immediately.\n        if (this === otherElement) {\n            return true;\n        }\n        // Check element name.\n        if (this.name != otherElement.name) {\n            return false;\n        }\n        // Check number of attributes, classes and styles.\n        if (this._attrs.size !== otherElement._attrs.size || this._classes.size !== otherElement._classes.size ||\n            this._styles.size !== otherElement._styles.size) {\n            return false;\n        }\n        // Check if attributes are the same.\n        for (const [key, value] of this._attrs) {\n            if (!otherElement._attrs.has(key) || otherElement._attrs.get(key) !== value) {\n                return false;\n            }\n        }\n        // Check if classes are the same.\n        for (const className of this._classes) {\n            if (!otherElement._classes.has(className)) {\n                return false;\n            }\n        }\n        // Check if styles are the same.\n        for (const property of this._styles.getStyleNames()) {\n            if (!otherElement._styles.has(property) ||\n                otherElement._styles.getAsString(property) !== this._styles.getAsString(property)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Returns true if class is present.\n     * If more then one class is provided - returns true only when all classes are present.\n     *\n     * ```ts\n     * element.hasClass( 'foo' ); // Returns true if 'foo' class is present.\n     * element.hasClass( 'foo', 'bar' ); // Returns true if 'foo' and 'bar' classes are both present.\n     * ```\n     */\n    hasClass(...className) {\n        for (const name of className) {\n            if (!this._classes.has(name)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Returns iterator that contains all class names.\n     */\n    getClassNames() {\n        return this._classes.keys();\n    }\n    /**\n     * Returns style value for the given property mae.\n     * If the style does not exist `undefined` is returned.\n     *\n     * **Note**: This method can work with normalized style names if\n     * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n     * See {@link module:engine/view/stylesmap~StylesMap#getAsString `StylesMap#getAsString()`} for details.\n     *\n     * For an element with style set to `'margin:1px'`:\n     *\n     * ```ts\n     * // Enable 'margin' shorthand processing:\n     * editor.data.addStyleProcessorRules( addMarginRules );\n     *\n     * const element = view.change( writer => {\n     * \tconst element = writer.createElement();\n     * \twriter.setStyle( 'margin', '1px' );\n     * \twriter.setStyle( 'margin-bottom', '3em' );\n     *\n     * \treturn element;\n     * } );\n     *\n     * element.getStyle( 'margin' ); // -> 'margin: 1px 1px 3em;'\n     * ```\n     */\n    getStyle(property) {\n        return this._styles.getAsString(property);\n    }\n    /**\n     * Returns a normalized style object or single style value.\n     *\n     * For an element with style set to: margin:1px 2px 3em;\n     *\n     * ```ts\n     * element.getNormalizedStyle( 'margin' ) );\n     * ```\n     *\n     * will return:\n     *\n     * ```ts\n     * {\n     * \ttop: '1px',\n     * \tright: '2px',\n     * \tbottom: '3em',\n     * \tleft: '2px'    // a normalized value from margin shorthand\n     * }\n     * ```\n     *\n     * and reading for single style value:\n     *\n     * ```ts\n     * styles.getNormalizedStyle( 'margin-left' );\n     * ```\n     *\n     * Will return a `2px` string.\n     *\n     * **Note**: This method will return normalized values only if\n     * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n     * See {@link module:engine/view/stylesmap~StylesMap#getNormalized `StylesMap#getNormalized()`} for details.\n     *\n     * @param property Name of CSS property\n     */\n    getNormalizedStyle(property) {\n        return this._styles.getNormalized(property);\n    }\n    /**\n     * Returns iterator that contains all style names.\n     *\n     * @param expand Expand shorthand style properties and return all equivalent style representations.\n     */\n    getStyleNames(expand) {\n        return this._styles.getStyleNames(expand);\n    }\n    /**\n     * Returns true if style keys are present.\n     * If more then one style property is provided - returns true only when all properties are present.\n     *\n     * ```ts\n     * element.hasStyle( 'color' ); // Returns true if 'border-top' style is present.\n     * element.hasStyle( 'color', 'border-top' ); // Returns true if 'color' and 'border-top' styles are both present.\n     * ```\n     */\n    hasStyle(...property) {\n        for (const name of property) {\n            if (!this._styles.has(name)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Returns ancestor element that match specified pattern.\n     * Provided patterns should be compatible with {@link module:engine/view/matcher~Matcher Matcher} as it is used internally.\n     *\n     * @see module:engine/view/matcher~Matcher\n     * @param patterns Patterns used to match correct ancestor. See {@link module:engine/view/matcher~Matcher}.\n     * @returns Found element or `null` if no matching ancestor was found.\n     */\n    findAncestor(...patterns) {\n        const matcher = new Matcher(...patterns);\n        let parent = this.parent;\n        while (parent && !parent.is('documentFragment')) {\n            if (matcher.match(parent)) {\n                return parent;\n            }\n            parent = parent.parent;\n        }\n        return null;\n    }\n    /**\n     * Returns the custom property value for the given key.\n     */\n    getCustomProperty(key) {\n        return this._customProperties.get(key);\n    }\n    /**\n     * Returns an iterator which iterates over this element's custom properties.\n     * Iterator provides `[ key, value ]` pairs for each stored property.\n     */\n    *getCustomProperties() {\n        yield* this._customProperties.entries();\n    }\n    /**\n     * Returns identity string based on element's name, styles, classes and other attributes.\n     * Two elements that {@link #isSimilar are similar} will have same identity string.\n     * It has the following format:\n     *\n     * ```ts\n     * 'name class=\"class1,class2\" style=\"style1:value1;style2:value2\" attr1=\"val1\" attr2=\"val2\"'\n     * ```\n     *\n     * For example:\n     *\n     * ```ts\n     * const element = writer.createContainerElement( 'foo', {\n     * \tbanana: '10',\n     * \tapple: '20',\n     * \tstyle: 'color: red; border-color: white;',\n     * \tclass: 'baz'\n     * } );\n     *\n     * // returns 'foo class=\"baz\" style=\"border-color:white;color:red\" apple=\"20\" banana=\"10\"'\n     * element.getIdentity();\n     * ```\n     *\n     * **Note**: Classes, styles and other attributes are sorted alphabetically.\n     */\n    getIdentity() {\n        const classes = Array.from(this._classes).sort().join(',');\n        const styles = this._styles.toString();\n        const attributes = Array.from(this._attrs).map(i => `${i[0]}=\"${i[1]}\"`).sort().join(' ');\n        return this.name +\n            (classes == '' ? '' : ` class=\"${classes}\"`) +\n            (!styles ? '' : ` style=\"${styles}\"`) +\n            (attributes == '' ? '' : ` ${attributes}`);\n    }\n    /**\n     * Decides whether an unsafe attribute is whitelisted and should be rendered in the editing pipeline even though filtering mechanisms\n     * like {@link module:engine/view/domconverter~DomConverter#shouldRenderAttribute} say it should not.\n     *\n     * Unsafe attribute names can be specified when creating an element via {@link module:engine/view/downcastwriter~DowncastWriter}.\n     *\n     * @param attributeName The name of the attribute to be checked.\n     */\n    shouldRenderUnsafeAttribute(attributeName) {\n        return this._unsafeAttributesToRender.includes(attributeName);\n    }\n    /**\n     * Clones provided element.\n     *\n     * @internal\n     * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any children.\n     * @returns Clone of this element.\n     */\n    _clone(deep = false) {\n        const childrenClone = [];\n        if (deep) {\n            for (const child of this.getChildren()) {\n                childrenClone.push(child._clone(deep));\n            }\n        }\n        // ContainerElement and AttributeElement should be also cloned properly.\n        const cloned = new this.constructor(this.document, this.name, this._attrs, childrenClone);\n        // Classes and styles are cloned separately - this solution is faster than adding them back to attributes and\n        // parse once again in constructor.\n        cloned._classes = new Set(this._classes);\n        cloned._styles.set(this._styles.getNormalized());\n        // Clone custom properties.\n        cloned._customProperties = new Map(this._customProperties);\n        // Clone filler offset method.\n        // We can't define this method in a prototype because it's behavior which\n        // is changed by e.g. toWidget() function from ckeditor5-widget. Perhaps this should be one of custom props.\n        cloned.getFillerOffset = this.getFillerOffset;\n        // Clone unsafe attributes list.\n        cloned._unsafeAttributesToRender = this._unsafeAttributesToRender;\n        return cloned;\n    }\n    /**\n     * {@link module:engine/view/element~Element#_insertChild Insert} a child node or a list of child nodes at the end of this node\n     * and sets the parent of these nodes to this element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#insert\n     * @internal\n     * @param items Items to be inserted.\n     * @fires change\n     * @returns Number of appended nodes.\n     */\n    _appendChild(items) {\n        return this._insertChild(this.childCount, items);\n    }\n    /**\n     * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n     * this element.\n     *\n     * @internal\n     * @see module:engine/view/downcastwriter~DowncastWriter#insert\n     * @param index Position where nodes should be inserted.\n     * @param items Items to be inserted.\n     * @fires change\n     * @returns Number of inserted nodes.\n     */\n    _insertChild(index, items) {\n        this._fireChange('children', this);\n        let count = 0;\n        const nodes = normalize(this.document, items);\n        for (const node of nodes) {\n            // If node that is being added to this element is already inside another element, first remove it from the old parent.\n            if (node.parent !== null) {\n                node._remove();\n            }\n            node.parent = this;\n            node.document = this.document;\n            this._children.splice(index, 0, node);\n            index++;\n            count++;\n        }\n        return count;\n    }\n    /**\n     * Removes number of child nodes starting at the given index and set the parent of these nodes to `null`.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#remove\n     * @internal\n     * @param index Number of the first node to remove.\n     * @param howMany Number of nodes to remove.\n     * @fires change\n     * @returns The array of removed nodes.\n     */\n    _removeChildren(index, howMany = 1) {\n        this._fireChange('children', this);\n        for (let i = index; i < index + howMany; i++) {\n            this._children[i].parent = null;\n        }\n        return this._children.splice(index, howMany);\n    }\n    /**\n     * Adds or overwrite attribute with a specified key and value.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#setAttribute\n     * @internal\n     * @param key Attribute key.\n     * @param value Attribute value.\n     * @fires change\n     */\n    _setAttribute(key, value) {\n        const stringValue = String(value);\n        this._fireChange('attributes', this);\n        if (key == 'class') {\n            parseClasses(this._classes, stringValue);\n        }\n        else if (key == 'style') {\n            this._styles.setTo(stringValue);\n        }\n        else {\n            this._attrs.set(key, stringValue);\n        }\n    }\n    /**\n     * Removes attribute from the element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeAttribute\n     * @internal\n     * @param key Attribute key.\n     * @returns Returns true if an attribute existed and has been removed.\n     * @fires change\n     */\n    _removeAttribute(key) {\n        this._fireChange('attributes', this);\n        // Remove class attribute.\n        if (key == 'class') {\n            if (this._classes.size > 0) {\n                this._classes.clear();\n                return true;\n            }\n            return false;\n        }\n        // Remove style attribute.\n        if (key == 'style') {\n            if (!this._styles.isEmpty) {\n                this._styles.clear();\n                return true;\n            }\n            return false;\n        }\n        // Remove other attributes.\n        return this._attrs.delete(key);\n    }\n    /**\n     * Adds specified class.\n     *\n     * ```ts\n     * element._addClass( 'foo' ); // Adds 'foo' class.\n     * element._addClass( [ 'foo', 'bar' ] ); // Adds 'foo' and 'bar' classes.\n     * ```\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#addClass\n     * @internal\n     * @fires change\n     */\n    _addClass(className) {\n        this._fireChange('attributes', this);\n        for (const name of toArray(className)) {\n            this._classes.add(name);\n        }\n    }\n    /**\n     * Removes specified class.\n     *\n     * ```ts\n     * element._removeClass( 'foo' );  // Removes 'foo' class.\n     * element._removeClass( [ 'foo', 'bar' ] ); // Removes both 'foo' and 'bar' classes.\n     * ```\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeClass\n     * @internal\n     * @fires change\n     */\n    _removeClass(className) {\n        this._fireChange('attributes', this);\n        for (const name of toArray(className)) {\n            this._classes.delete(name);\n        }\n    }\n    _setStyle(property, value) {\n        this._fireChange('attributes', this);\n        if (typeof property != 'string') {\n            this._styles.set(property);\n        }\n        else {\n            this._styles.set(property, value);\n        }\n    }\n    /**\n     * Removes specified style.\n     *\n     * ```ts\n     * element._removeStyle( 'color' );  // Removes 'color' style.\n     * element._removeStyle( [ 'color', 'border-top' ] ); // Removes both 'color' and 'border-top' styles.\n     * ```\n     *\n     * **Note**: This method can work with normalized style names if\n     * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n     * See {@link module:engine/view/stylesmap~StylesMap#remove `StylesMap#remove()`} for details.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeStyle\n     * @internal\n     * @fires change\n     */\n    _removeStyle(property) {\n        this._fireChange('attributes', this);\n        for (const name of toArray(property)) {\n            this._styles.remove(name);\n        }\n    }\n    /**\n     * Sets a custom property. Unlike attributes, custom properties are not rendered to the DOM,\n     * so they can be used to add special data to elements.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#setCustomProperty\n     * @internal\n     */\n    _setCustomProperty(key, value) {\n        this._customProperties.set(key, value);\n    }\n    /**\n     * Removes the custom property stored under the given key.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeCustomProperty\n     * @internal\n     * @returns Returns true if property was removed.\n     */\n    _removeCustomProperty(key) {\n        return this._customProperties.delete(key);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'element' || type === 'view:element' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'element' || type === 'view:element');\n    }\n};\n/**\n * Parses attributes provided to the element constructor before they are applied to an element. If attributes are passed\n * as an object (instead of `Iterable`), the object is transformed to the map. Attributes with `null` value are removed.\n * Attributes with non-`String` value are converted to `String`.\n *\n * @param attrs Attributes to parse.\n * @returns Parsed attributes.\n */\nfunction parseAttributes(attrs) {\n    const attrsMap = toMap(attrs);\n    for (const [key, value] of attrsMap) {\n        if (value === null) {\n            attrsMap.delete(key);\n        }\n        else if (typeof value != 'string') {\n            attrsMap.set(key, String(value));\n        }\n    }\n    return attrsMap;\n}\n/**\n * Parses class attribute and puts all classes into classes set.\n * Classes set s cleared before insertion.\n *\n * @param classesSet Set to insert parsed classes.\n * @param classesString String with classes to parse.\n */\nfunction parseClasses(classesSet, classesString) {\n    const classArray = classesString.split(/\\s+/);\n    classesSet.clear();\n    classArray.forEach(name => classesSet.add(name));\n}\n/**\n * Converts strings to Text and non-iterables to arrays.\n */\nfunction normalize(document, nodes) {\n    // Separate condition because string is iterable.\n    if (typeof nodes == 'string') {\n        return [new Text(document, nodes)];\n    }\n    if (!isIterable(nodes)) {\n        nodes = [nodes];\n    }\n    // Array.from to enable .map() on non-arrays.\n    return Array.from(nodes)\n        .map(node => {\n        if (typeof node == 'string') {\n            return new Text(document, node);\n        }\n        if (node instanceof TextProxy) {\n            return new Text(document, node.data);\n        }\n        return node;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/containerelement\n */\nimport Element from './element.js';\n/**\n * Containers are elements which define document structure. They define boundaries for\n * {@link module:engine/view/attributeelement~AttributeElement attributes}. They are mostly used for block elements like `<p>` or `<div>`.\n *\n * Editing engine does not define a fixed HTML DTD. This is why a feature developer needs to choose between various\n * types (container element, {@link module:engine/view/attributeelement~AttributeElement attribute element},\n * {@link module:engine/view/emptyelement~EmptyElement empty element}, etc) when developing a feature.\n *\n * The container element should be your default choice when writing a converter, unless:\n *\n * * this element represents a model text attribute (then use {@link module:engine/view/attributeelement~AttributeElement}),\n * * this is an empty element like `<img>` (then use {@link module:engine/view/emptyelement~EmptyElement}),\n * * this is a root element,\n * * this is a nested editable element (then use  {@link module:engine/view/editableelement~EditableElement}).\n *\n * To create a new container element instance use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createContainerElement `DowncastWriter#createContainerElement()`}\n * method.\n */\nexport default class ContainerElement extends Element {\n    /**\n     * Creates a container element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#createContainerElement\n     * @see module:engine/view/element~Element\n     * @internal\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     */\n    constructor(document, name, attrs, children) {\n        super(document, name, attrs, children);\n        this.getFillerOffset = getFillerOffset;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nContainerElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'containerElement' || type === 'view:containerElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'element' || type === 'view:element' ||\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'containerElement' || type === 'view:containerElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'element' || type === 'view:element');\n    }\n};\n/**\n * Returns block {@link module:engine/view/filler filler} offset or `null` if block filler is not needed.\n *\n * @returns Block filler offset or `null` if block filler is not needed.\n */\nexport function getFillerOffset() {\n    const children = [...this.getChildren()];\n    const lastChild = children[this.childCount - 1];\n    // Block filler is required after a `<br>` if it's the last element in its container. See #1422.\n    if (lastChild && lastChild.is('element', 'br')) {\n        return this.childCount;\n    }\n    for (const child of children) {\n        // If there's any non-UI element – don't render the bogus.\n        if (!child.is('uiElement')) {\n            return null;\n        }\n    }\n    // If there are only UI elements – render the bogus at the end of the element.\n    return this.childCount;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/editableelement\n */\nimport ContainerElement from './containerelement.js';\nimport { ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Editable element which can be a {@link module:engine/view/rooteditableelement~RootEditableElement root}\n * or nested editable area in the editor.\n *\n * Editable is automatically read-only when its {@link module:engine/view/document~Document Document} is read-only.\n *\n * The constructor of this class shouldn't be used directly. To create new `EditableElement` use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createEditableElement `downcastWriter#createEditableElement()`} method.\n */\nexport default class EditableElement extends /* #__PURE__ */ ObservableMixin(ContainerElement) {\n    /**\n     * Creates an editable element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#createEditableElement\n     * @internal\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     */\n    constructor(document, name, attributes, children) {\n        super(document, name, attributes, children);\n        this.set('isReadOnly', false);\n        this.set('isFocused', false);\n        this.set('placeholder', undefined);\n        this.bind('isReadOnly').to(document);\n        this.bind('isFocused').to(document, 'isFocused', isFocused => isFocused && document.selection.editableElement == this);\n        // Update focus state based on selection changes.\n        this.listenTo(document.selection, 'change', () => {\n            this.isFocused = document.isFocused && document.selection.editableElement == this;\n        });\n    }\n    destroy() {\n        this.stopListening();\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nEditableElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'editableElement' || type === 'view:editableElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'containerElement' || type === 'view:containerElement' ||\n            type === 'element' || type === 'view:element' ||\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'editableElement' || type === 'view:editableElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'containerElement' || type === 'view:containerElement' ||\n            type === 'element' || type === 'view:element');\n    }\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/rooteditableelement\n */\nimport EditableElement from './editableelement.js';\nconst rootNameSymbol = Symbol('rootName');\n/**\n * Class representing a single root in the data view. A root can be either {@link ~RootEditableElement#isReadOnly editable or read-only},\n * but in both cases it is called \"an editable\". Roots can contain other {@link module:engine/view/editableelement~EditableElement\n * editable elements} making them \"nested editables\".\n */\nexport default class RootEditableElement extends EditableElement {\n    /**\n     * Creates root editable element.\n     *\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     */\n    constructor(document, name) {\n        super(document, name);\n        this.rootName = 'main';\n    }\n    /**\n     * Name of this root inside {@link module:engine/view/document~Document} that is an owner of this root. If no\n     * other name is set, `main` name is used.\n     *\n     * @readonly\n     */\n    get rootName() {\n        return this.getCustomProperty(rootNameSymbol);\n    }\n    set rootName(rootName) {\n        this._setCustomProperty(rootNameSymbol, rootName);\n    }\n    /**\n     * Overrides old element name and sets new one.\n     * This is needed because view roots are created before they are attached to the DOM.\n     * The name of the root element is temporary at this stage. It has to be changed when the\n     * view root element is attached to the DOM element.\n     *\n     * @internal\n     * @param name The new name of element.\n     */\n    set _name(name) {\n        this.name = name;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nRootEditableElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'rootElement' || type === 'view:rootElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'editableElement' || type === 'view:editableElement' ||\n            type === 'containerElement' || type === 'view:containerElement' ||\n            type === 'element' || type === 'view:element' ||\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'rootElement' || type === 'view:rootElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'editableElement' || type === 'view:editableElement' ||\n            type === 'containerElement' || type === 'view:containerElement' ||\n            type === 'element' || type === 'view:element');\n    }\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/treewalker\n */\nimport Element from './element.js';\nimport Text from './text.js';\nimport TextProxy from './textproxy.js';\nimport Position from './position.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Position iterator class. It allows to iterate forward and backward over the document.\n */\nexport default class TreeWalker {\n    /**\n     * Creates a range iterator. All parameters are optional, but you have to specify either `boundaries` or `startPosition`.\n     *\n     * @param options Object with configuration.\n     */\n    constructor(options = {}) {\n        if (!options.boundaries && !options.startPosition) {\n            /**\n             * Neither boundaries nor starting position have been defined.\n             *\n             * @error view-tree-walker-no-start-position\n             */\n            throw new CKEditorError('view-tree-walker-no-start-position', null);\n        }\n        if (options.direction && options.direction != 'forward' && options.direction != 'backward') {\n            /**\n             * Only `backward` and `forward` direction allowed.\n             *\n             * @error view-tree-walker-unknown-direction\n             */\n            throw new CKEditorError('view-tree-walker-unknown-direction', options.startPosition, { direction: options.direction });\n        }\n        this.boundaries = options.boundaries || null;\n        if (options.startPosition) {\n            this._position = Position._createAt(options.startPosition);\n        }\n        else {\n            this._position = Position._createAt(options.boundaries[options.direction == 'backward' ? 'end' : 'start']);\n        }\n        this.direction = options.direction || 'forward';\n        this.singleCharacters = !!options.singleCharacters;\n        this.shallow = !!options.shallow;\n        this.ignoreElementEnd = !!options.ignoreElementEnd;\n        this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null;\n        this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null;\n    }\n    /**\n     * Iterable interface.\n     */\n    [Symbol.iterator]() {\n        return this;\n    }\n    /**\n     * Iterator position. If start position is not defined then position depends on {@link #direction}. If direction is\n     * `'forward'` position starts form the beginning, when direction is `'backward'` position starts from the end.\n     */\n    get position() {\n        return this._position;\n    }\n    /**\n     * Moves {@link #position} in the {@link #direction} skipping values as long as the callback function returns `true`.\n     *\n     * For example:\n     *\n     * ```ts\n     * walker.skip( value => value.type == 'text' ); // <p>{}foo</p> -> <p>foo[]</p>\n     * walker.skip( value => true ); // Move the position to the end: <p>{}foo</p> -> <p>foo</p>[]\n     * walker.skip( value => false ); // Do not move the position.\n     * ```\n     *\n     * @param skip Callback function. Gets {@link module:engine/view/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     */\n    skip(skip) {\n        let nextResult;\n        let prevPosition;\n        do {\n            prevPosition = this.position;\n            nextResult = this.next();\n        } while (!nextResult.done && skip(nextResult.value));\n        if (!nextResult.done) {\n            this._position = prevPosition;\n        }\n    }\n    /**\n     * Gets the next tree walker's value.\n     *\n     * @returns Object implementing iterator interface, returning\n     * information about taken step.\n     */\n    next() {\n        if (this.direction == 'forward') {\n            return this._next();\n        }\n        else {\n            return this._previous();\n        }\n    }\n    /**\n     * Makes a step forward in view. Moves the {@link #position} to the next position and returns the encountered value.\n     */\n    _next() {\n        let position = this.position.clone();\n        const previousPosition = this.position;\n        const parent = position.parent;\n        // We are at the end of the root.\n        if (parent.parent === null && position.offset === parent.childCount) {\n            return { done: true, value: undefined };\n        }\n        // We reached the walker boundary.\n        if (parent === this._boundaryEndParent && position.offset == this.boundaries.end.offset) {\n            return { done: true, value: undefined };\n        }\n        // Get node just after current position.\n        let node;\n        // Text is a specific parent because it contains string instead of child nodes.\n        if (parent instanceof Text) {\n            if (position.isAtEnd) {\n                // Prevent returning \"elementEnd\" for Text node. Skip that value and return the next walker step.\n                this._position = Position._createAfter(parent);\n                return this._next();\n            }\n            node = parent.data[position.offset];\n        }\n        else {\n            node = parent.getChild(position.offset);\n        }\n        if (node instanceof Element) {\n            if (!this.shallow) {\n                position = new Position(node, 0);\n            }\n            else {\n                // We are past the walker boundaries.\n                if (this.boundaries && this.boundaries.end.isBefore(position)) {\n                    return { done: true, value: undefined };\n                }\n                position.offset++;\n            }\n            this._position = position;\n            return this._formatReturnValue('elementStart', node, previousPosition, position, 1);\n        }\n        if (node instanceof Text) {\n            if (this.singleCharacters) {\n                position = new Position(node, 0);\n                this._position = position;\n                return this._next();\n            }\n            let charactersCount = node.data.length;\n            let item;\n            // If text stick out of walker range, we need to cut it and wrap in TextProxy.\n            if (node == this._boundaryEndParent) {\n                charactersCount = this.boundaries.end.offset;\n                item = new TextProxy(node, 0, charactersCount);\n                position = Position._createAfter(item);\n            }\n            else {\n                item = new TextProxy(node, 0, node.data.length);\n                // If not just keep moving forward.\n                position.offset++;\n            }\n            this._position = position;\n            return this._formatReturnValue('text', item, previousPosition, position, charactersCount);\n        }\n        if (typeof node == 'string') {\n            let textLength;\n            if (this.singleCharacters) {\n                textLength = 1;\n            }\n            else {\n                // Check if text stick out of walker range.\n                const endOffset = parent === this._boundaryEndParent ? this.boundaries.end.offset : parent.data.length;\n                textLength = endOffset - position.offset;\n            }\n            const textProxy = new TextProxy(parent, position.offset, textLength);\n            position.offset += textLength;\n            this._position = position;\n            return this._formatReturnValue('text', textProxy, previousPosition, position, textLength);\n        }\n        // `node` is not set, we reached the end of current `parent`.\n        position = Position._createAfter(parent);\n        this._position = position;\n        if (this.ignoreElementEnd) {\n            return this._next();\n        }\n        return this._formatReturnValue('elementEnd', parent, previousPosition, position);\n    }\n    /**\n     * Makes a step backward in view. Moves the {@link #position} to the previous position and returns the encountered value.\n     */\n    _previous() {\n        let position = this.position.clone();\n        const previousPosition = this.position;\n        const parent = position.parent;\n        // We are at the beginning of the root.\n        if (parent.parent === null && position.offset === 0) {\n            return { done: true, value: undefined };\n        }\n        // We reached the walker boundary.\n        if (parent == this._boundaryStartParent && position.offset == this.boundaries.start.offset) {\n            return { done: true, value: undefined };\n        }\n        // Get node just before current position.\n        let node;\n        // Text {@link module:engine/view/text~Text} element is a specific parent because contains string instead of child nodes.\n        if (parent instanceof Text) {\n            if (position.isAtStart) {\n                // Prevent returning \"elementStart\" for Text node. Skip that value and return the next walker step.\n                this._position = Position._createBefore(parent);\n                return this._previous();\n            }\n            node = parent.data[position.offset - 1];\n        }\n        else {\n            node = parent.getChild(position.offset - 1);\n        }\n        if (node instanceof Element) {\n            if (this.shallow) {\n                position.offset--;\n                this._position = position;\n                return this._formatReturnValue('elementStart', node, previousPosition, position, 1);\n            }\n            position = new Position(node, node.childCount);\n            this._position = position;\n            if (this.ignoreElementEnd) {\n                return this._previous();\n            }\n            return this._formatReturnValue('elementEnd', node, previousPosition, position);\n        }\n        if (node instanceof Text) {\n            if (this.singleCharacters) {\n                position = new Position(node, node.data.length);\n                this._position = position;\n                return this._previous();\n            }\n            let charactersCount = node.data.length;\n            let item;\n            // If text stick out of walker range, we need to cut it and wrap in TextProxy.\n            if (node == this._boundaryStartParent) {\n                const offset = this.boundaries.start.offset;\n                item = new TextProxy(node, offset, node.data.length - offset);\n                charactersCount = item.data.length;\n                position = Position._createBefore(item);\n            }\n            else {\n                item = new TextProxy(node, 0, node.data.length);\n                // If not just keep moving backward.\n                position.offset--;\n            }\n            this._position = position;\n            return this._formatReturnValue('text', item, previousPosition, position, charactersCount);\n        }\n        if (typeof node == 'string') {\n            let textLength;\n            if (!this.singleCharacters) {\n                // Check if text stick out of walker range.\n                const startOffset = parent === this._boundaryStartParent ? this.boundaries.start.offset : 0;\n                textLength = position.offset - startOffset;\n            }\n            else {\n                textLength = 1;\n            }\n            position.offset -= textLength;\n            const textProxy = new TextProxy(parent, position.offset, textLength);\n            this._position = position;\n            return this._formatReturnValue('text', textProxy, previousPosition, position, textLength);\n        }\n        // `node` is not set, we reached the beginning of current `parent`.\n        position = Position._createBefore(parent);\n        this._position = position;\n        return this._formatReturnValue('elementStart', parent, previousPosition, position, 1);\n    }\n    /**\n     * Format returned data and adjust `previousPosition` and `nextPosition` if reach the bound of the {@link module:engine/view/text~Text}.\n     *\n     * @param type Type of step.\n     * @param item Item between old and new position.\n     * @param previousPosition Previous position of iterator.\n     * @param nextPosition Next position of iterator.\n     * @param length Length of the item.\n     */\n    _formatReturnValue(type, item, previousPosition, nextPosition, length) {\n        // Text is a specific parent, because contains string instead of children.\n        // Walker doesn't enter to the Text except situations when walker is iterating over every single character,\n        // or the bound starts/ends inside the Text. So when the position is at the beginning or at the end of the Text\n        // we move it just before or just after Text.\n        if (item instanceof TextProxy) {\n            // Position is at the end of Text.\n            if (item.offsetInText + item.data.length == item.textNode.data.length) {\n                if (this.direction == 'forward' && !(this.boundaries && this.boundaries.end.isEqual(this.position))) {\n                    nextPosition = Position._createAfter(item.textNode);\n                    // When we change nextPosition of returned value we need also update walker current position.\n                    this._position = nextPosition;\n                }\n                else {\n                    previousPosition = Position._createAfter(item.textNode);\n                }\n            }\n            // Position is at the begining ot the text.\n            if (item.offsetInText === 0) {\n                if (this.direction == 'backward' && !(this.boundaries && this.boundaries.start.isEqual(this.position))) {\n                    nextPosition = Position._createBefore(item.textNode);\n                    // When we change nextPosition of returned value we need also update walker current position.\n                    this._position = nextPosition;\n                }\n                else {\n                    previousPosition = Position._createBefore(item.textNode);\n                }\n            }\n        }\n        return {\n            done: false,\n            value: {\n                type,\n                item,\n                previousPosition,\n                nextPosition,\n                length\n            }\n        };\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/position\n */\nimport TypeCheckable from './typecheckable.js';\nimport { CKEditorError, compareArrays } from '@ckeditor/ckeditor5-utils';\nimport EditableElement from './editableelement.js';\nimport { default as TreeWalker } from './treewalker.js';\n/**\n * Position in the view tree. Position is represented by its parent node and an offset in this parent.\n *\n * In order to create a new position instance use the `createPosition*()` factory methods available in:\n *\n * * {@link module:engine/view/view~View}\n * * {@link module:engine/view/downcastwriter~DowncastWriter}\n * * {@link module:engine/view/upcastwriter~UpcastWriter}\n */\nexport default class Position extends TypeCheckable {\n    /**\n     * Creates a position.\n     *\n     * @param parent Position parent.\n     * @param offset Position offset.\n     */\n    constructor(parent, offset) {\n        super();\n        this.parent = parent;\n        this.offset = offset;\n    }\n    /**\n     * Node directly after the position. Equals `null` when there is no node after position or position is located\n     * inside text node.\n     */\n    get nodeAfter() {\n        if (this.parent.is('$text')) {\n            return null;\n        }\n        return this.parent.getChild(this.offset) || null;\n    }\n    /**\n     * Node directly before the position. Equals `null` when there is no node before position or position is located\n     * inside text node.\n     */\n    get nodeBefore() {\n        if (this.parent.is('$text')) {\n            return null;\n        }\n        return this.parent.getChild(this.offset - 1) || null;\n    }\n    /**\n     * Is `true` if position is at the beginning of its {@link module:engine/view/position~Position#parent parent}, `false` otherwise.\n     */\n    get isAtStart() {\n        return this.offset === 0;\n    }\n    /**\n     * Is `true` if position is at the end of its {@link module:engine/view/position~Position#parent parent}, `false` otherwise.\n     */\n    get isAtEnd() {\n        const endOffset = this.parent.is('$text') ? this.parent.data.length : this.parent.childCount;\n        return this.offset === endOffset;\n    }\n    /**\n     * Position's root, that is the root of the position's parent element.\n     */\n    get root() {\n        return this.parent.root;\n    }\n    /**\n     * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this position, or `null` if\n     * position is not inside an editable element.\n     */\n    get editableElement() {\n        let editable = this.parent;\n        while (!(editable instanceof EditableElement)) {\n            if (editable.parent) {\n                editable = editable.parent;\n            }\n            else {\n                return null;\n            }\n        }\n        return editable;\n    }\n    /**\n     * Returns a new instance of Position with offset incremented by `shift` value.\n     *\n     * @param shift How position offset should get changed. Accepts negative values.\n     * @returns Shifted position.\n     */\n    getShiftedBy(shift) {\n        const shifted = Position._createAt(this);\n        const offset = shifted.offset + shift;\n        shifted.offset = offset < 0 ? 0 : offset;\n        return shifted;\n    }\n    /**\n     * Gets the farthest position which matches the callback using\n     * {@link module:engine/view/treewalker~TreeWalker TreeWalker}.\n     *\n     * For example:\n     *\n     * ```ts\n     * getLastMatchingPosition( value => value.type == 'text' ); // <p>{}foo</p> -> <p>foo[]</p>\n     * getLastMatchingPosition( value => value.type == 'text', { direction: 'backward' } ); // <p>foo[]</p> -> <p>{}foo</p>\n     * getLastMatchingPosition( value => false ); // Do not move the position.\n     * ```\n     *\n     * @param skip Callback function. Gets {@link module:engine/view/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     * @returns The position after the last item which matches the `skip` callback test.\n     */\n    getLastMatchingPosition(skip, options = {}) {\n        options.startPosition = this;\n        const treeWalker = new TreeWalker(options);\n        treeWalker.skip(skip);\n        return treeWalker.position;\n    }\n    /**\n     * Returns ancestors array of this position, that is this position's parent and it's ancestors.\n     *\n     * @returns Array with ancestors.\n     */\n    getAncestors() {\n        if (this.parent.is('documentFragment')) {\n            return [this.parent];\n        }\n        else {\n            return this.parent.getAncestors({ includeSelf: true });\n        }\n    }\n    /**\n     * Returns a {@link module:engine/view/node~Node} or {@link module:engine/view/documentfragment~DocumentFragment}\n     * which is a common ancestor of both positions.\n     */\n    getCommonAncestor(position) {\n        const ancestorsA = this.getAncestors();\n        const ancestorsB = position.getAncestors();\n        let i = 0;\n        while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n            i++;\n        }\n        return i === 0 ? null : ancestorsA[i - 1];\n    }\n    /**\n     * Checks whether this position equals given position.\n     *\n     * @param otherPosition Position to compare with.\n     * @returns True if positions are same.\n     */\n    isEqual(otherPosition) {\n        return (this.parent == otherPosition.parent && this.offset == otherPosition.offset);\n    }\n    /**\n     * Checks whether this position is located before given position. When method returns `false` it does not mean that\n     * this position is after give one. Two positions may be located inside separate roots and in that situation this\n     * method will still return `false`.\n     *\n     * @see module:engine/view/position~Position#isAfter\n     * @see module:engine/view/position~Position#compareWith\n     * @param otherPosition Position to compare with.\n     * @returns Returns `true` if this position is before given position.\n     */\n    isBefore(otherPosition) {\n        return this.compareWith(otherPosition) == 'before';\n    }\n    /**\n     * Checks whether this position is located after given position. When method returns `false` it does not mean that\n     * this position is before give one. Two positions may be located inside separate roots and in that situation this\n     * method will still return `false`.\n     *\n     * @see module:engine/view/position~Position#isBefore\n     * @see module:engine/view/position~Position#compareWith\n     * @param otherPosition Position to compare with.\n     * @returns Returns `true` if this position is after given position.\n     */\n    isAfter(otherPosition) {\n        return this.compareWith(otherPosition) == 'after';\n    }\n    /**\n     * Checks whether this position is before, after or in same position that other position. Two positions may be also\n     * different when they are located in separate roots.\n     *\n     * @param otherPosition Position to compare with.\n     */\n    compareWith(otherPosition) {\n        if (this.root !== otherPosition.root) {\n            return 'different';\n        }\n        if (this.isEqual(otherPosition)) {\n            return 'same';\n        }\n        // Get path from root to position's parent element.\n        const thisPath = this.parent.is('node') ? this.parent.getPath() : [];\n        const otherPath = otherPosition.parent.is('node') ? otherPosition.parent.getPath() : [];\n        // Add the positions' offsets to the parents offsets.\n        thisPath.push(this.offset);\n        otherPath.push(otherPosition.offset);\n        // Compare both path arrays to find common ancestor.\n        const result = compareArrays(thisPath, otherPath);\n        switch (result) {\n            case 'prefix':\n                return 'before';\n            case 'extension':\n                return 'after';\n            default:\n                // Cast to number to avoid having 'same' as a type of `result`.\n                return thisPath[result] < otherPath[result] ? 'before' : 'after';\n        }\n    }\n    /**\n     * Creates a {@link module:engine/view/treewalker~TreeWalker TreeWalker} instance with this positions as a start position.\n     *\n     * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}\n     */\n    getWalker(options = {}) {\n        options.startPosition = this;\n        return new TreeWalker(options);\n    }\n    /**\n     * Clones this position.\n     */\n    clone() {\n        return new Position(this.parent, this.offset);\n    }\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/view/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n     *\n     * This method is a shortcut to other constructors such as:\n     *\n     * * {@link module:engine/view/position~Position._createBefore},\n     * * {@link module:engine/view/position~Position._createAfter}.\n     *\n     * @internal\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n    static _createAt(itemOrPosition, offset) {\n        if (itemOrPosition instanceof Position) {\n            return new this(itemOrPosition.parent, itemOrPosition.offset);\n        }\n        else {\n            const node = itemOrPosition;\n            if (offset == 'end') {\n                offset = node.is('$text') ? node.data.length : node.childCount;\n            }\n            else if (offset == 'before') {\n                return this._createBefore(node);\n            }\n            else if (offset == 'after') {\n                return this._createAfter(node);\n            }\n            else if (offset !== 0 && !offset) {\n                /**\n                 * {@link module:engine/view/view~View#createPositionAt `View#createPositionAt()`}\n                 * requires the offset to be specified when the first parameter is a view item.\n                 *\n                 * @error view-createpositionat-offset-required\n                 */\n                throw new CKEditorError('view-createpositionat-offset-required', node);\n            }\n            return new Position(node, offset);\n        }\n    }\n    /**\n     * Creates a new position after given view item.\n     *\n     * @internal\n     * @param item View item after which the position should be located.\n     */\n    static _createAfter(item) {\n        // TextProxy is not a instance of Node so we need do handle it in specific way.\n        if (item.is('$textProxy')) {\n            return new Position(item.textNode, item.offsetInText + item.data.length);\n        }\n        if (!item.parent) {\n            /**\n             * You can not make a position after a root.\n             *\n             * @error view-position-after-root\n             * @param {module:engine/view/node~Node} root\n             */\n            throw new CKEditorError('view-position-after-root', item, { root: item });\n        }\n        return new Position(item.parent, item.index + 1);\n    }\n    /**\n     * Creates a new position before given view item.\n     *\n     * @internal\n     * @param item View item before which the position should be located.\n     */\n    static _createBefore(item) {\n        // TextProxy is not a instance of Node so we need do handle it in specific way.\n        if (item.is('$textProxy')) {\n            return new Position(item.textNode, item.offsetInText);\n        }\n        if (!item.parent) {\n            /**\n             * You cannot make a position before a root.\n             *\n             * @error view-position-before-root\n             * @param {module:engine/view/node~Node} root\n             */\n            throw new CKEditorError('view-position-before-root', item, { root: item });\n        }\n        return new Position(item.parent, item.index);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nPosition.prototype.is = function (type) {\n    return type === 'position' || type === 'view:position';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/range\n */\nimport TypeCheckable from './typecheckable.js';\nimport Position from './position.js';\nimport { default as TreeWalker } from './treewalker.js';\n/**\n * Range in the view tree. A range is represented by its start and end {@link module:engine/view/position~Position positions}.\n *\n * In order to create a new position instance use the `createPosition*()` factory methods available in:\n *\n * * {@link module:engine/view/view~View}\n * * {@link module:engine/view/downcastwriter~DowncastWriter}\n * * {@link module:engine/view/upcastwriter~UpcastWriter}\n */\nexport default class Range extends TypeCheckable {\n    /**\n     * Creates a range spanning from `start` position to `end` position.\n     *\n     * **Note:** Constructor creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n     *\n     * @param start Start position.\n     * @param end End position. If not set, range will be collapsed at the `start` position.\n     */\n    constructor(start, end = null) {\n        super();\n        this.start = start.clone();\n        this.end = end ? end.clone() : start.clone();\n    }\n    /**\n     * Iterable interface.\n     *\n     * Iterates over all {@link module:engine/view/item~Item view items} that are in this range and returns\n     * them together with additional information like length or {@link module:engine/view/position~Position positions},\n     * grouped as {@link module:engine/view/treewalker~TreeWalkerValue}.\n     *\n     * This iterator uses {@link module:engine/view/treewalker~TreeWalker TreeWalker} with `boundaries` set to this range and\n     * `ignoreElementEnd` option\n     * set to `true`.\n     */\n    *[Symbol.iterator]() {\n        yield* new TreeWalker({ boundaries: this, ignoreElementEnd: true });\n    }\n    /**\n     * Returns whether the range is collapsed, that is it start and end positions are equal.\n     */\n    get isCollapsed() {\n        return this.start.isEqual(this.end);\n    }\n    /**\n     * Returns whether this range is flat, that is if {@link module:engine/view/range~Range#start start} position and\n     * {@link module:engine/view/range~Range#end end} position are in the same {@link module:engine/view/position~Position#parent parent}.\n     */\n    get isFlat() {\n        return this.start.parent === this.end.parent;\n    }\n    /**\n     * Range root element.\n     */\n    get root() {\n        return this.start.root;\n    }\n    /**\n     * Creates a maximal range that has the same content as this range but is expanded in both ways (at the beginning\n     * and at the end).\n     *\n     * For example:\n     *\n     * ```html\n     * <p>Foo</p><p><b>{Bar}</b></p> -> <p>Foo</p>[<p><b>Bar</b>]</p>\n     * <p><b>foo</b>{bar}<span></span></p> -> <p><b>foo[</b>bar<span></span>]</p>\n     * ```\n     *\n     * Note that in the sample above:\n     *\n     * - `<p>` have type of {@link module:engine/view/containerelement~ContainerElement},\n     * - `<b>` have type of {@link module:engine/view/attributeelement~AttributeElement},\n     * - `<span>` have type of {@link module:engine/view/uielement~UIElement}.\n     *\n     * @returns Enlarged range.\n     */\n    getEnlarged() {\n        let start = this.start.getLastMatchingPosition(enlargeTrimSkip, { direction: 'backward' });\n        let end = this.end.getLastMatchingPosition(enlargeTrimSkip);\n        // Fix positions, in case if they are in Text node.\n        if (start.parent.is('$text') && start.isAtStart) {\n            start = Position._createBefore(start.parent);\n        }\n        if (end.parent.is('$text') && end.isAtEnd) {\n            end = Position._createAfter(end.parent);\n        }\n        return new Range(start, end);\n    }\n    /**\n     * Creates a minimum range that has the same content as this range but is trimmed in both ways (at the beginning\n     * and at the end).\n     *\n     * For example:\n     *\n     * ```html\n     * <p>Foo</p>[<p><b>Bar</b>]</p> -> <p>Foo</p><p><b>{Bar}</b></p>\n     * <p><b>foo[</b>bar<span></span>]</p> -> <p><b>foo</b>{bar}<span></span></p>\n     * ```\n     *\n     * Note that in the sample above:\n     *\n     * - `<p>` have type of {@link module:engine/view/containerelement~ContainerElement},\n     * - `<b>` have type of {@link module:engine/view/attributeelement~AttributeElement},\n     * - `<span>` have type of {@link module:engine/view/uielement~UIElement}.\n     *\n     * @returns Shrunk range.\n     */\n    getTrimmed() {\n        let start = this.start.getLastMatchingPosition(enlargeTrimSkip);\n        if (start.isAfter(this.end) || start.isEqual(this.end)) {\n            return new Range(start, start);\n        }\n        let end = this.end.getLastMatchingPosition(enlargeTrimSkip, { direction: 'backward' });\n        const nodeAfterStart = start.nodeAfter;\n        const nodeBeforeEnd = end.nodeBefore;\n        // Because TreeWalker prefers positions next to text node, we need to move them manually into these text nodes.\n        if (nodeAfterStart && nodeAfterStart.is('$text')) {\n            start = new Position(nodeAfterStart, 0);\n        }\n        if (nodeBeforeEnd && nodeBeforeEnd.is('$text')) {\n            end = new Position(nodeBeforeEnd, nodeBeforeEnd.data.length);\n        }\n        return new Range(start, end);\n    }\n    /**\n     * Two ranges are equal if their start and end positions are equal.\n     *\n     * @param otherRange Range to compare with.\n     * @returns `true` if ranges are equal, `false` otherwise\n     */\n    isEqual(otherRange) {\n        return this == otherRange || (this.start.isEqual(otherRange.start) && this.end.isEqual(otherRange.end));\n    }\n    /**\n     * Checks whether this range contains given {@link module:engine/view/position~Position position}.\n     *\n     * @param position Position to check.\n     * @returns `true` if given {@link module:engine/view/position~Position position} is contained in this range, `false` otherwise.\n     */\n    containsPosition(position) {\n        return position.isAfter(this.start) && position.isBefore(this.end);\n    }\n    /**\n     * Checks whether this range contains given {@link module:engine/view/range~Range range}.\n     *\n     * @param otherRange Range to check.\n     * @param loose Whether the check is loose or strict. If the check is strict (`false`), compared range cannot\n     * start or end at the same position as this range boundaries. If the check is loose (`true`), compared range can start, end or\n     * even be equal to this range. Note that collapsed ranges are always compared in strict mode.\n     * @returns `true` if given {@link module:engine/view/range~Range range} boundaries are contained by this range, `false`\n     * otherwise.\n     */\n    containsRange(otherRange, loose = false) {\n        if (otherRange.isCollapsed) {\n            loose = false;\n        }\n        const containsStart = this.containsPosition(otherRange.start) || (loose && this.start.isEqual(otherRange.start));\n        const containsEnd = this.containsPosition(otherRange.end) || (loose && this.end.isEqual(otherRange.end));\n        return containsStart && containsEnd;\n    }\n    /**\n     * Computes which part(s) of this {@link module:engine/view/range~Range range} is not a part of given\n     * {@link module:engine/view/range~Range range}.\n     * Returned array contains zero, one or two {@link module:engine/view/range~Range ranges}.\n     *\n     * Examples:\n     *\n     * ```ts\n     * let foo = downcastWriter.createText( 'foo' );\n     * let img = downcastWriter.createContainerElement( 'img' );\n     * let bar = downcastWriter.createText( 'bar' );\n     * let p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );\n     *\n     * let range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // \"o\", img, \"b\" are in range.\n     * let otherRange = view.createRange( // \"oo\", img, \"ba\" are in range.\n     * \tview.createPositionAt( foo, 1 ),\n     * \tview.createPositionAt( bar, 2 )\n     * );\n     * let transformed = range.getDifference( otherRange );\n     * // transformed array has no ranges because `otherRange` contains `range`\n     *\n     * otherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // \"oo\", img are in range.\n     * transformed = range.getDifference( otherRange );\n     * // transformed array has one range: from ( p, 2 ) to ( bar, 1 )\n     *\n     * otherRange = view.createRange( view.createPositionAt( p, 1 ), view.createPositionAt( p, 2 ) ); // img is in range.\n     * transformed = range.getDifference( otherRange );\n     * // transformed array has two ranges: from ( foo, 1 ) to ( p, 1 ) and from ( p, 2 ) to ( bar, 1 )\n     * ```\n     *\n     * @param otherRange Range to differentiate against.\n     * @returns The difference between ranges.\n     */\n    getDifference(otherRange) {\n        const ranges = [];\n        if (this.isIntersecting(otherRange)) {\n            // Ranges intersect.\n            if (this.containsPosition(otherRange.start)) {\n                // Given range start is inside this range. This means that we have to\n                // add shrunken range - from the start to the middle of this range.\n                ranges.push(new Range(this.start, otherRange.start));\n            }\n            if (this.containsPosition(otherRange.end)) {\n                // Given range end is inside this range. This means that we have to\n                // add shrunken range - from the middle of this range to the end.\n                ranges.push(new Range(otherRange.end, this.end));\n            }\n        }\n        else {\n            // Ranges do not intersect, return the original range.\n            ranges.push(this.clone());\n        }\n        return ranges;\n    }\n    /**\n     * Returns an intersection of this {@link module:engine/view/range~Range range} and given {@link module:engine/view/range~Range range}.\n     * Intersection is a common part of both of those ranges. If ranges has no common part, returns `null`.\n     *\n     * Examples:\n     *\n     * ```ts\n     * let foo = downcastWriter.createText( 'foo' );\n     * let img = downcastWriter.createContainerElement( 'img' );\n     * let bar = downcastWriter.createText( 'bar' );\n     * let p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );\n     *\n     * let range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // \"o\", img, \"b\" are in range.\n     * let otherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // \"oo\", img are in range.\n     * let transformed = range.getIntersection( otherRange ); // range from ( foo, 1 ) to ( p, 2 ).\n     *\n     * otherRange = view.createRange( view.createPositionAt( bar, 1 ), view.createPositionAt( bar, 3 ); \"ar\" is in range.\n     * transformed = range.getIntersection( otherRange ); // null - no common part.\n     * ```\n     *\n     * @param otherRange Range to check for intersection.\n     * @returns A common part of given ranges or `null` if ranges have no common part.\n     */\n    getIntersection(otherRange) {\n        if (this.isIntersecting(otherRange)) {\n            // Ranges intersect, so a common range will be returned.\n            // At most, it will be same as this range.\n            let commonRangeStart = this.start;\n            let commonRangeEnd = this.end;\n            if (this.containsPosition(otherRange.start)) {\n                // Given range start is inside this range. This means thaNt we have to\n                // shrink common range to the given range start.\n                commonRangeStart = otherRange.start;\n            }\n            if (this.containsPosition(otherRange.end)) {\n                // Given range end is inside this range. This means that we have to\n                // shrink common range to the given range end.\n                commonRangeEnd = otherRange.end;\n            }\n            return new Range(commonRangeStart, commonRangeEnd);\n        }\n        // Ranges do not intersect, so they do not have common part.\n        return null;\n    }\n    /**\n     * Creates a {@link module:engine/view/treewalker~TreeWalker TreeWalker} instance with this range as a boundary.\n     *\n     * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     */\n    getWalker(options = {}) {\n        options.boundaries = this;\n        return new TreeWalker(options);\n    }\n    /**\n     * Returns a {@link module:engine/view/node~Node} or {@link module:engine/view/documentfragment~DocumentFragment}\n     * which is a common ancestor of range's both ends (in which the entire range is contained).\n     */\n    getCommonAncestor() {\n        return this.start.getCommonAncestor(this.end);\n    }\n    /**\n     * Returns an {@link module:engine/view/element~Element Element} contained by the range.\n     * The element will be returned when it is the **only** node within the range and **fully–contained**\n     * at the same time.\n     */\n    getContainedElement() {\n        if (this.isCollapsed) {\n            return null;\n        }\n        let nodeAfterStart = this.start.nodeAfter;\n        let nodeBeforeEnd = this.end.nodeBefore;\n        // Handle the situation when the range position is at the beginning / at the end of a text node.\n        // In such situation `.nodeAfter` and `.nodeBefore` are `null` but the range still might be spanning\n        // over one element.\n        //\n        // <p>Foo{<span class=\"widget\"></span>}bar</p> vs <p>Foo[<span class=\"widget\"></span>]bar</p>\n        //\n        // These are basically the same range, only the difference is if the range position is at\n        // at the end/at the beginning of a text node or just before/just after the text node.\n        //\n        if (this.start.parent.is('$text') && this.start.isAtEnd && this.start.parent.nextSibling) {\n            nodeAfterStart = this.start.parent.nextSibling;\n        }\n        if (this.end.parent.is('$text') && this.end.isAtStart && this.end.parent.previousSibling) {\n            nodeBeforeEnd = this.end.parent.previousSibling;\n        }\n        if (nodeAfterStart && nodeAfterStart.is('element') && nodeAfterStart === nodeBeforeEnd) {\n            return nodeAfterStart;\n        }\n        return null;\n    }\n    /**\n     * Clones this range.\n     */\n    clone() {\n        return new Range(this.start, this.end);\n    }\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/view/item~Item view items} that are in this range and returns\n     * them.\n     *\n     * This method uses {@link module:engine/view/treewalker~TreeWalker} with `boundaries` set to this range and `ignoreElementEnd` option\n     * set to `true`. However it returns only {@link module:engine/view/item~Item items},\n     * not {@link module:engine/view/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     */\n    *getItems(options = {}) {\n        options.boundaries = this;\n        options.ignoreElementEnd = true;\n        const treeWalker = new TreeWalker(options);\n        for (const value of treeWalker) {\n            yield value.item;\n        }\n    }\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/view/position~Position positions} that are boundaries or\n     * contained in this range.\n     *\n     * This method uses {@link module:engine/view/treewalker~TreeWalker} with `boundaries` set to this range. However it returns only\n     * {@link module:engine/view/position~Position positions}, not {@link module:engine/view/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n     */\n    *getPositions(options = {}) {\n        options.boundaries = this;\n        const treeWalker = new TreeWalker(options);\n        yield treeWalker.position;\n        for (const value of treeWalker) {\n            yield value.nextPosition;\n        }\n    }\n    /**\n     * Checks and returns whether this range intersects with the given range.\n     *\n     * @param otherRange Range to compare with.\n     * @returns True if ranges intersect.\n     */\n    isIntersecting(otherRange) {\n        return this.start.isBefore(otherRange.end) && this.end.isAfter(otherRange.start);\n    }\n    /**\n     * Creates a range from the given parents and offsets.\n     *\n     * @internal\n     * @param startElement Start position parent element.\n     * @param startOffset Start position offset.\n     * @param endElement End position parent element.\n     * @param endOffset End position offset.\n     * @returns Created range.\n     */\n    static _createFromParentsAndOffsets(startElement, startOffset, endElement, endOffset) {\n        return new this(new Position(startElement, startOffset), new Position(endElement, endOffset));\n    }\n    /**\n     * Creates a new range, spreading from specified {@link module:engine/view/position~Position position} to a position moved by\n     * given `shift`. If `shift` is a negative value, shifted position is treated as the beginning of the range.\n     *\n     * @internal\n     * @param position Beginning of the range.\n     * @param shift How long the range should be.\n     */\n    static _createFromPositionAndShift(position, shift) {\n        const start = position;\n        const end = position.getShiftedBy(shift);\n        return shift > 0 ? new this(start, end) : new this(end, start);\n    }\n    /**\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @internal\n     * @param element Element which is a parent for the range.\n     */\n    static _createIn(element) {\n        return this._createFromParentsAndOffsets(element, 0, element, element.childCount);\n    }\n    /**\n     * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n     *\n     * @internal\n     */\n    static _createOn(item) {\n        const size = item.is('$textProxy') ? item.offsetSize : 1;\n        return this._createFromPositionAndShift(Position._createBefore(item), size);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nRange.prototype.is = function (type) {\n    return type === 'range' || type === 'view:range';\n};\n/**\n * Function used by getEnlarged and getTrimmed methods.\n */\nfunction enlargeTrimSkip(value) {\n    if (value.item.is('attributeElement') || value.item.is('uiElement')) {\n        return true;\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/selection\n */\nimport TypeCheckable from './typecheckable.js';\nimport Range from './range.js';\nimport Position from './position.js';\nimport Node from './node.js';\nimport DocumentSelection from './documentselection.js';\nimport { CKEditorError, EmitterMixin, count, isIterable } from '@ckeditor/ckeditor5-utils';\n/**\n * Class representing an arbirtary selection in the view.\n * See also {@link module:engine/view/documentselection~DocumentSelection}.\n *\n * New selection instances can be created via the constructor or one these methods:\n *\n * * {@link module:engine/view/view~View#createSelection `View#createSelection()`},\n * * {@link module:engine/view/upcastwriter~UpcastWriter#createSelection `UpcastWriter#createSelection()`}.\n *\n * A selection can consist of {@link module:engine/view/range~Range ranges} that can be set by using\n * the {@link module:engine/view/selection~Selection#setTo `Selection#setTo()`} method.\n */\nexport default class Selection extends /* #__PURE__ */ EmitterMixin(TypeCheckable) {\n    /**\n     * Creates new selection instance.\n     *\n     * **Note**: The selection constructor is available as a factory method:\n     *\n     * * {@link module:engine/view/view~View#createSelection `View#createSelection()`},\n     * * {@link module:engine/view/upcastwriter~UpcastWriter#createSelection `UpcastWriter#createSelection()`}.\n     *\n     * ```ts\n     * // Creates empty selection without ranges.\n     * const selection = writer.createSelection();\n     *\n     * // Creates selection at the given range.\n     * const range = writer.createRange( start, end );\n     * const selection = writer.createSelection( range );\n     *\n     * // Creates selection at the given ranges\n     * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     * const selection = writer.createSelection( ranges );\n     *\n     * // Creates selection from the other selection.\n     * const otherSelection = writer.createSelection();\n     * const selection = writer.createSelection( otherSelection );\n     *\n     * // Creates selection from the document selection.\n     * const selection = writer.createSelection( editor.editing.view.document.selection );\n     *\n     * // Creates selection at the given position.\n     * const position = writer.createPositionFromPath( root, path );\n     * const selection = writer.createSelection( position );\n     *\n     * // Creates collapsed selection at the position of given item and offset.\n     * const paragraph = writer.createContainerElement( 'paragraph' );\n     * const selection = writer.createSelection( paragraph, offset );\n     *\n     * // Creates a range inside an {@link module:engine/view/element~Element element} which starts before the\n     * // first child of that element and ends after the last child of that element.\n     * const selection = writer.createSelection( paragraph, 'in' );\n     *\n     * // Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends\n     * // just after the item.\n     * const selection = writer.createSelection( paragraph, 'on' );\n     * ```\n     *\n     * `Selection`'s constructor allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n     *\n     * ```ts\n     * // Creates backward selection.\n     * const selection = writer.createSelection( range, { backward: true } );\n     * ```\n     *\n     * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n     * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n     * represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n     * (and be  properly handled by screen readers).\n     *\n     * ```ts\n     * // Creates fake selection with label.\n     * const selection = writer.createSelection( range, { fake: true, label: 'foo' } );\n     * ```\n     *\n     * @internal\n     */\n    constructor(...args) {\n        super();\n        this._ranges = [];\n        this._lastRangeBackward = false;\n        this._isFake = false;\n        this._fakeSelectionLabel = '';\n        if (args.length) {\n            this.setTo(...args);\n        }\n    }\n    /**\n     * Returns true if selection instance is marked as `fake`.\n     *\n     * @see #setTo\n     */\n    get isFake() {\n        return this._isFake;\n    }\n    /**\n     * Returns fake selection label.\n     *\n     * @see #setTo\n     */\n    get fakeSelectionLabel() {\n        return this._fakeSelectionLabel;\n    }\n    /**\n     * Selection anchor. Anchor may be described as a position where the selection starts. Together with\n     * {@link #focus focus} they define the direction of selection, which is important\n     * when expanding/shrinking selection. Anchor is always the start or end of the most recent added range.\n     * It may be a bit unintuitive when there are multiple ranges in selection.\n     *\n     * @see #focus\n     */\n    get anchor() {\n        if (!this._ranges.length) {\n            return null;\n        }\n        const range = this._ranges[this._ranges.length - 1];\n        const anchor = this._lastRangeBackward ? range.end : range.start;\n        return anchor.clone();\n    }\n    /**\n     * Selection focus. Focus is a position where the selection ends.\n     *\n     * @see #anchor\n     */\n    get focus() {\n        if (!this._ranges.length) {\n            return null;\n        }\n        const range = this._ranges[this._ranges.length - 1];\n        const focus = this._lastRangeBackward ? range.start : range.end;\n        return focus.clone();\n    }\n    /**\n     * Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n     * collapsed.\n     */\n    get isCollapsed() {\n        return this.rangeCount === 1 && this._ranges[0].isCollapsed;\n    }\n    /**\n     * Returns number of ranges in selection.\n     */\n    get rangeCount() {\n        return this._ranges.length;\n    }\n    /**\n     * Specifies whether the {@link #focus} precedes {@link #anchor}.\n     */\n    get isBackward() {\n        return !this.isCollapsed && this._lastRangeBackward;\n    }\n    /**\n     * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this selection, or `null`\n     * if the selection is not inside an editable element.\n     */\n    get editableElement() {\n        if (this.anchor) {\n            return this.anchor.editableElement;\n        }\n        return null;\n    }\n    /**\n     * Returns an iterable that contains copies of all ranges added to the selection.\n     */\n    *getRanges() {\n        for (const range of this._ranges) {\n            yield range.clone();\n        }\n    }\n    /**\n     * Returns copy of the first range in the selection. First range is the one which\n     * {@link module:engine/view/range~Range#start start} position {@link module:engine/view/position~Position#isBefore is before} start\n     * position of all other ranges (not to confuse with the first range added to the selection).\n     * Returns `null` if no ranges are added to selection.\n     */\n    getFirstRange() {\n        let first = null;\n        for (const range of this._ranges) {\n            if (!first || range.start.isBefore(first.start)) {\n                first = range;\n            }\n        }\n        return first ? first.clone() : null;\n    }\n    /**\n     * Returns copy of the last range in the selection. Last range is the one which {@link module:engine/view/range~Range#end end}\n     * position {@link module:engine/view/position~Position#isAfter is after} end position of all other ranges (not to confuse\n     * with the last range added to the selection). Returns `null` if no ranges are added to selection.\n     */\n    getLastRange() {\n        let last = null;\n        for (const range of this._ranges) {\n            if (!last || range.end.isAfter(last.end)) {\n                last = range;\n            }\n        }\n        return last ? last.clone() : null;\n    }\n    /**\n     * Returns copy of the first position in the selection. First position is the position that\n     * {@link module:engine/view/position~Position#isBefore is before} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     */\n    getFirstPosition() {\n        const firstRange = this.getFirstRange();\n        return firstRange ? firstRange.start.clone() : null;\n    }\n    /**\n     * Returns copy of the last position in the selection. Last position is the position that\n     * {@link module:engine/view/position~Position#isAfter is after} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     */\n    getLastPosition() {\n        const lastRange = this.getLastRange();\n        return lastRange ? lastRange.end.clone() : null;\n    }\n    /**\n     * Checks whether, this selection is equal to given selection. Selections are equal if they have same directions,\n     * same number of ranges and all ranges from one selection equal to a range from other selection.\n     *\n     * @param otherSelection Selection to compare with.\n     * @returns `true` if selections are equal, `false` otherwise.\n     */\n    isEqual(otherSelection) {\n        if (this.isFake != otherSelection.isFake) {\n            return false;\n        }\n        if (this.isFake && this.fakeSelectionLabel != otherSelection.fakeSelectionLabel) {\n            return false;\n        }\n        if (this.rangeCount != otherSelection.rangeCount) {\n            return false;\n        }\n        else if (this.rangeCount === 0) {\n            return true;\n        }\n        if (!this.anchor.isEqual(otherSelection.anchor) || !this.focus.isEqual(otherSelection.focus)) {\n            return false;\n        }\n        for (const thisRange of this._ranges) {\n            let found = false;\n            for (const otherRange of otherSelection._ranges) {\n                if (thisRange.isEqual(otherRange)) {\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Checks whether this selection is similar to given selection. Selections are similar if they have same directions, same\n     * number of ranges, and all {@link module:engine/view/range~Range#getTrimmed trimmed} ranges from one selection are\n     * equal to any trimmed range from other selection.\n     *\n     * @param otherSelection Selection to compare with.\n     * @returns `true` if selections are similar, `false` otherwise.\n     */\n    isSimilar(otherSelection) {\n        if (this.isBackward != otherSelection.isBackward) {\n            return false;\n        }\n        const numOfRangesA = count(this.getRanges());\n        const numOfRangesB = count(otherSelection.getRanges());\n        // If selections have different number of ranges, they cannot be similar.\n        if (numOfRangesA != numOfRangesB) {\n            return false;\n        }\n        // If both selections have no ranges, they are similar.\n        if (numOfRangesA == 0) {\n            return true;\n        }\n        // Check if each range in one selection has a similar range in other selection.\n        for (let rangeA of this.getRanges()) {\n            rangeA = rangeA.getTrimmed();\n            let found = false;\n            for (let rangeB of otherSelection.getRanges()) {\n                rangeB = rangeB.getTrimmed();\n                if (rangeA.start.isEqual(rangeB.start) && rangeA.end.isEqual(rangeB.end)) {\n                    found = true;\n                    break;\n                }\n            }\n            // For `rangeA`, neither range in `otherSelection` was similar. So selections are not similar.\n            if (!found) {\n                return false;\n            }\n        }\n        // There were no ranges that weren't matched. Selections are similar.\n        return true;\n    }\n    /**\n     * Returns the selected element. {@link module:engine/view/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     */\n    getSelectedElement() {\n        if (this.rangeCount !== 1) {\n            return null;\n        }\n        return this.getFirstRange().getContainedElement();\n    }\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/view/selection~Selectable selectable}.\n     *\n     * ```ts\n     * // Sets selection to the given range.\n     * const range = writer.createRange( start, end );\n     * selection.setTo( range );\n     *\n     * // Sets selection to given ranges.\n     * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     * selection.setTo( range );\n     *\n     * // Sets selection to the other selection.\n     * const otherSelection = writer.createSelection();\n     * selection.setTo( otherSelection );\n     *\n     * // Sets selection to contents of DocumentSelection.\n     * selection.setTo( editor.editing.view.document.selection );\n     *\n     * // Sets collapsed selection at the given position.\n     * const position = writer.createPositionAt( root, path );\n     * selection.setTo( position );\n     *\n     * // Sets collapsed selection at the position of given item and offset.\n     * selection.setTo( paragraph, offset );\n     * ```\n     *\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * ```ts\n     * selection.setTo( paragraph, 'in' );\n     * ```\n     *\n     * Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends just after the item.\n     *\n     * ```ts\n     * selection.setTo( paragraph, 'on' );\n     *\n     * // Clears selection. Removes all ranges.\n     * selection.setTo( null );\n     * ```\n     *\n     * `Selection#setTo()` method allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n     *\n     * ```ts\n     * // Sets selection as backward.\n     * selection.setTo( range, { backward: true } );\n     * ```\n     *\n     * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n     * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n     * represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n     * (and be  properly handled by screen readers).\n     *\n     * ```ts\n     * // Creates fake selection with label.\n     * selection.setTo( range, { fake: true, label: 'foo' } );\n     * ```\n     *\n     * @fires change\n     */\n    setTo(...args) {\n        let [selectable, placeOrOffset, options] = args;\n        if (typeof placeOrOffset == 'object') {\n            options = placeOrOffset;\n            placeOrOffset = undefined;\n        }\n        if (selectable === null) {\n            this._setRanges([]);\n            this._setFakeOptions(options);\n        }\n        else if (selectable instanceof Selection || selectable instanceof DocumentSelection) {\n            this._setRanges(selectable.getRanges(), selectable.isBackward);\n            this._setFakeOptions({ fake: selectable.isFake, label: selectable.fakeSelectionLabel });\n        }\n        else if (selectable instanceof Range) {\n            this._setRanges([selectable], options && options.backward);\n            this._setFakeOptions(options);\n        }\n        else if (selectable instanceof Position) {\n            this._setRanges([new Range(selectable)]);\n            this._setFakeOptions(options);\n        }\n        else if (selectable instanceof Node) {\n            const backward = !!options && !!options.backward;\n            let range;\n            if (placeOrOffset === undefined) {\n                /**\n                 * selection.setTo requires the second parameter when the first parameter is a node.\n                 *\n                 * @error view-selection-setto-required-second-parameter\n                 */\n                throw new CKEditorError('view-selection-setto-required-second-parameter', this);\n            }\n            else if (placeOrOffset == 'in') {\n                range = Range._createIn(selectable);\n            }\n            else if (placeOrOffset == 'on') {\n                range = Range._createOn(selectable);\n            }\n            else {\n                range = new Range(Position._createAt(selectable, placeOrOffset));\n            }\n            this._setRanges([range], backward);\n            this._setFakeOptions(options);\n        }\n        else if (isIterable(selectable)) {\n            // We assume that the selectable is an iterable of ranges.\n            // Array.from() is used to prevent setting ranges to the old iterable\n            this._setRanges(selectable, options && options.backward);\n            this._setFakeOptions(options);\n        }\n        else {\n            /**\n             * Cannot set selection to given place.\n             *\n             * @error view-selection-setto-not-selectable\n             */\n            throw new CKEditorError('view-selection-setto-not-selectable', this);\n        }\n        this.fire('change');\n    }\n    /**\n     * Moves {@link #focus} to the specified location.\n     *\n     * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n     * parameters.\n     *\n     * @fires change\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n    setFocus(itemOrPosition, offset) {\n        if (this.anchor === null) {\n            /**\n             * Cannot set selection focus if there are no ranges in selection.\n             *\n             * @error view-selection-setfocus-no-ranges\n             */\n            throw new CKEditorError('view-selection-setfocus-no-ranges', this);\n        }\n        const newFocus = Position._createAt(itemOrPosition, offset);\n        if (newFocus.compareWith(this.focus) == 'same') {\n            return;\n        }\n        const anchor = this.anchor;\n        this._ranges.pop();\n        if (newFocus.compareWith(anchor) == 'before') {\n            this._addRange(new Range(newFocus, anchor), true);\n        }\n        else {\n            this._addRange(new Range(anchor, newFocus));\n        }\n        this.fire('change');\n    }\n    /**\n     * Replaces all ranges that were added to the selection with given array of ranges. Last range of the array\n     * is treated like the last added range and is used to set {@link #anchor anchor} and {@link #focus focus}.\n     * Accepts a flag describing in which way the selection is made.\n     *\n     * @param newRanges Iterable object of ranges to set.\n     * @param isLastBackward Flag describing if last added range was selected forward - from start to end\n     * (`false`) or backward - from end to start (`true`). Defaults to `false`.\n     */\n    _setRanges(newRanges, isLastBackward = false) {\n        // New ranges should be copied to prevent removing them by setting them to `[]` first.\n        // Only applies to situations when selection is set to the same selection or same selection's ranges.\n        newRanges = Array.from(newRanges);\n        this._ranges = [];\n        for (const range of newRanges) {\n            this._addRange(range);\n        }\n        this._lastRangeBackward = !!isLastBackward;\n    }\n    /**\n     * Sets this selection instance to be marked as `fake`. A fake selection does not render as browser native selection\n     * over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to\n     * the user and selection over elements can be represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be\n     * properly handled by screen readers).\n     */\n    _setFakeOptions(options = {}) {\n        this._isFake = !!options.fake;\n        this._fakeSelectionLabel = options.fake ? options.label || '' : '';\n    }\n    /**\n     * Adds a range to the selection. Added range is copied. This means that passed range is not saved in the\n     * selection instance and you can safely operate on it.\n     *\n     * Accepts a flag describing in which way the selection is made - passed range might be selected from\n     * {@link module:engine/view/range~Range#start start} to {@link module:engine/view/range~Range#end end}\n     * or from {@link module:engine/view/range~Range#end end} to {@link module:engine/view/range~Range#start start}.\n     * The flag is used to set {@link #anchor anchor} and {@link #focus focus} properties.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-selection-range-intersects` if added range intersects\n     * with ranges already stored in Selection instance.\n     */\n    _addRange(range, isBackward = false) {\n        if (!(range instanceof Range)) {\n            /**\n             * Selection range set to an object that is not an instance of {@link module:engine/view/range~Range}.\n             *\n             * @error view-selection-add-range-not-range\n             */\n            throw new CKEditorError('view-selection-add-range-not-range', this);\n        }\n        this._pushRange(range);\n        this._lastRangeBackward = !!isBackward;\n    }\n    /**\n     * Adds range to selection - creates copy of given range so it can be safely used and modified.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-selection-range-intersects` if added range intersects\n     * with ranges already stored in selection instance.\n     */\n    _pushRange(range) {\n        for (const storedRange of this._ranges) {\n            if (range.isIntersecting(storedRange)) {\n                /**\n                 * Trying to add a range that intersects with another range from selection.\n                 *\n                 * @error view-selection-range-intersects\n                 * @param {module:engine/view/range~Range} addedRange Range that was added to the selection.\n                 * @param {module:engine/view/range~Range} intersectingRange Range from selection that intersects with `addedRange`.\n                 */\n                throw new CKEditorError('view-selection-range-intersects', this, { addedRange: range, intersectingRange: storedRange });\n            }\n        }\n        this._ranges.push(new Range(range.start, range.end));\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nSelection.prototype.is = function (type) {\n    return type === 'selection' || type === 'view:selection';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/documentselection\n */\nimport TypeCheckable from './typecheckable.js';\nimport Selection from './selection.js';\nimport { EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Class representing the document selection in the view.\n *\n * Its instance is available in {@link module:engine/view/document~Document#selection `Document#selection`}.\n *\n * It is similar to {@link module:engine/view/selection~Selection} but\n * it has a read-only API and can be modified only by the writer available in\n * the {@link module:engine/view/view~View#change `View#change()`} block\n * (so via {@link module:engine/view/downcastwriter~DowncastWriter#setSelection `DowncastWriter#setSelection()`}).\n */\nexport default class DocumentSelection extends /* #__PURE__ */ EmitterMixin(TypeCheckable) {\n    constructor(...args) {\n        super();\n        this._selection = new Selection();\n        // Delegate change event to be fired on DocumentSelection instance.\n        this._selection.delegate('change').to(this);\n        // Set selection data.\n        if (args.length) {\n            this._selection.setTo(...args);\n        }\n    }\n    /**\n     * Returns true if selection instance is marked as `fake`.\n     *\n     * @see #_setTo\n     */\n    get isFake() {\n        return this._selection.isFake;\n    }\n    /**\n     * Returns fake selection label.\n     *\n     * @see #_setTo\n     */\n    get fakeSelectionLabel() {\n        return this._selection.fakeSelectionLabel;\n    }\n    /**\n     * Selection anchor. Anchor may be described as a position where the selection starts. Together with\n     * {@link #focus focus} they define the direction of selection, which is important\n     * when expanding/shrinking selection. Anchor is always the start or end of the most recent added range.\n     * It may be a bit unintuitive when there are multiple ranges in selection.\n     *\n     * @see #focus\n     */\n    get anchor() {\n        return this._selection.anchor;\n    }\n    /**\n     * Selection focus. Focus is a position where the selection ends.\n     *\n     * @see #anchor\n     */\n    get focus() {\n        return this._selection.focus;\n    }\n    /**\n     * Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n     * collapsed.\n     */\n    get isCollapsed() {\n        return this._selection.isCollapsed;\n    }\n    /**\n     * Returns number of ranges in selection.\n     */\n    get rangeCount() {\n        return this._selection.rangeCount;\n    }\n    /**\n     * Specifies whether the {@link #focus} precedes {@link #anchor}.\n     */\n    get isBackward() {\n        return this._selection.isBackward;\n    }\n    /**\n     * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this selection, or `null`\n     * if the selection is not inside an editable element.\n     */\n    get editableElement() {\n        return this._selection.editableElement;\n    }\n    /**\n     * Used for the compatibility with the {@link module:engine/view/selection~Selection#isEqual} method.\n     *\n     * @internal\n     */\n    get _ranges() {\n        return this._selection._ranges;\n    }\n    /**\n     * Returns an iterable that contains copies of all ranges added to the selection.\n     */\n    *getRanges() {\n        yield* this._selection.getRanges();\n    }\n    /**\n     * Returns copy of the first range in the selection. First range is the one which\n     * {@link module:engine/view/range~Range#start start} position {@link module:engine/view/position~Position#isBefore is before} start\n     * position of all other ranges (not to confuse with the first range added to the selection).\n     * Returns `null` if no ranges are added to selection.\n     */\n    getFirstRange() {\n        return this._selection.getFirstRange();\n    }\n    /**\n     * Returns copy of the last range in the selection. Last range is the one which {@link module:engine/view/range~Range#end end}\n     * position {@link module:engine/view/position~Position#isAfter is after} end position of all other ranges (not to confuse\n     * with the last range added to the selection). Returns `null` if no ranges are added to selection.\n     */\n    getLastRange() {\n        return this._selection.getLastRange();\n    }\n    /**\n     * Returns copy of the first position in the selection. First position is the position that\n     * {@link module:engine/view/position~Position#isBefore is before} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     */\n    getFirstPosition() {\n        return this._selection.getFirstPosition();\n    }\n    /**\n     * Returns copy of the last position in the selection. Last position is the position that\n     * {@link module:engine/view/position~Position#isAfter is after} any other position in the selection ranges.\n     * Returns `null` if no ranges are added to selection.\n     */\n    getLastPosition() {\n        return this._selection.getLastPosition();\n    }\n    /**\n     * Returns the selected element. {@link module:engine/view/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     */\n    getSelectedElement() {\n        return this._selection.getSelectedElement();\n    }\n    /**\n     * Checks whether, this selection is equal to given selection. Selections are equal if they have same directions,\n     * same number of ranges and all ranges from one selection equal to a range from other selection.\n     *\n     * @param otherSelection Selection to compare with.\n     * @returns `true` if selections are equal, `false` otherwise.\n     */\n    isEqual(otherSelection) {\n        return this._selection.isEqual(otherSelection);\n    }\n    /**\n     * Checks whether this selection is similar to given selection. Selections are similar if they have same directions, same\n     * number of ranges, and all {@link module:engine/view/range~Range#getTrimmed trimmed} ranges from one selection are\n     * equal to any trimmed range from other selection.\n     *\n     * @param otherSelection Selection to compare with.\n     * @returns `true` if selections are similar, `false` otherwise.\n     */\n    isSimilar(otherSelection) {\n        return this._selection.isSimilar(otherSelection);\n    }\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/view/selection~Selectable selectable}.\n     *\n     * ```ts\n     * // Sets selection to the given range.\n     * const range = writer.createRange( start, end );\n     * documentSelection._setTo( range );\n     *\n     * // Sets selection to given ranges.\n     * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( start2, end2 ) ];\n     * documentSelection._setTo( range );\n     *\n     * // Sets selection to the other selection.\n     * const otherSelection = writer.createSelection();\n     * documentSelection._setTo( otherSelection );\n     *\n     * // Sets collapsed selection at the given position.\n     * const position = writer.createPositionAt( root, offset );\n     * documentSelection._setTo( position );\n     *\n     * // Sets collapsed selection at the position of given item and offset.\n     * documentSelection._setTo( paragraph, offset );\n     * ```\n     *\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * ```ts\n     * documentSelection._setTo( paragraph, 'in' );\n     * ```\n     *\n     * Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends just after the item.\n     *\n     * ```ts\n     * documentSelection._setTo( paragraph, 'on' );\n     *\n     * // Clears selection. Removes all ranges.\n     * documentSelection._setTo( null );\n     * ```\n     *\n     * `Selection#_setTo()` method allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n     *\n     * ```ts\n     * // Sets selection as backward.\n     * documentSelection._setTo( range, { backward: true } );\n     * ```\n     *\n     * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n     * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n     * represented in other way, for example by applying proper CSS class.\n     *\n     * Additionally fake's selection label can be provided. It will be used to des cribe fake selection in DOM\n     * (and be  properly handled by screen readers).\n     *\n     * ```ts\n     * // Creates fake selection with label.\n     * documentSelection._setTo( range, { fake: true, label: 'foo' } );\n     * ```\n     *\n     * @internal\n     * @fires change\n     */\n    _setTo(...args) {\n        this._selection.setTo(...args);\n    }\n    /**\n     * Moves {@link #focus} to the specified location.\n     *\n     * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n     * parameters.\n     *\n     * @internal\n     * @fires change\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n    _setFocus(itemOrPosition, offset) {\n        this._selection.setFocus(itemOrPosition, offset);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nDocumentSelection.prototype.is = function (type) {\n    return type === 'selection' ||\n        type == 'documentSelection' ||\n        type == 'view:selection' ||\n        type == 'view:documentSelection';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/bubblingeventinfo\n */\nimport { EventInfo } from '@ckeditor/ckeditor5-utils';\n/**\n * The event object passed to bubbling event callbacks. It is used to provide information about the event as well as a tool to\n * manipulate it.\n */\nexport default class BubblingEventInfo extends EventInfo {\n    /**\n     * @param source The emitter.\n     * @param name The event name.\n     * @param startRange The view range that the bubbling should start from.\n     */\n    constructor(source, name, startRange) {\n        super(source, name);\n        this.startRange = startRange;\n        this._eventPhase = 'none';\n        this._currentTarget = null;\n    }\n    /**\n     * The current event phase.\n     */\n    get eventPhase() {\n        return this._eventPhase;\n    }\n    /**\n     * The current bubbling target.\n     */\n    get currentTarget() {\n        return this._currentTarget;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/bubblingemittermixin\n */\nimport { CKEditorError, EmitterMixin, EventInfo, toArray } from '@ckeditor/ckeditor5-utils';\nimport BubblingEventInfo from './bubblingeventinfo.js';\nconst contextsSymbol = Symbol('bubbling contexts');\n/**\n * Bubbling emitter mixin for the view document as described in the {@link ~BubblingEmitter} interface.\n *\n * This function creates a class that inherits from the provided `base` and implements `Emitter` interface.\n * The base class must implement {@link module:utils/emittermixin~Emitter} interface.\n *\n * ```ts\n * class BaseClass extends EmitterMixin() {\n * \t// ...\n * }\n *\n * class MyClass extends BubblingEmitterMixin( BaseClass ) {\n * \t// This class derives from `BaseClass` and implements the `BubblingEmitter` interface.\n * }\n * ```\n */\nexport default function BubblingEmitterMixin(base) {\n    class Mixin extends base {\n        fire(eventOrInfo, ...eventArgs) {\n            try {\n                const eventInfo = eventOrInfo instanceof EventInfo ? eventOrInfo : new EventInfo(this, eventOrInfo);\n                const eventContexts = getBubblingContexts(this);\n                if (!eventContexts.size) {\n                    return;\n                }\n                updateEventInfo(eventInfo, 'capturing', this);\n                // The capture phase of the event.\n                if (fireListenerFor(eventContexts, '$capture', eventInfo, ...eventArgs)) {\n                    return eventInfo.return;\n                }\n                const startRange = eventInfo.startRange || this.selection.getFirstRange();\n                const selectedElement = startRange ? startRange.getContainedElement() : null;\n                const isCustomContext = selectedElement ? Boolean(getCustomContext(eventContexts, selectedElement)) : false;\n                let node = selectedElement || getDeeperRangeParent(startRange);\n                updateEventInfo(eventInfo, 'atTarget', node);\n                // For the not yet bubbling event trigger for $text node if selection can be there and it's not a custom context selected.\n                if (!isCustomContext) {\n                    if (fireListenerFor(eventContexts, '$text', eventInfo, ...eventArgs)) {\n                        return eventInfo.return;\n                    }\n                    updateEventInfo(eventInfo, 'bubbling', node);\n                }\n                while (node) {\n                    // Root node handling.\n                    if (node.is('rootElement')) {\n                        if (fireListenerFor(eventContexts, '$root', eventInfo, ...eventArgs)) {\n                            return eventInfo.return;\n                        }\n                    }\n                    // Element node handling.\n                    else if (node.is('element')) {\n                        if (fireListenerFor(eventContexts, node.name, eventInfo, ...eventArgs)) {\n                            return eventInfo.return;\n                        }\n                    }\n                    // Check custom contexts (i.e., a widget).\n                    if (fireListenerFor(eventContexts, node, eventInfo, ...eventArgs)) {\n                        return eventInfo.return;\n                    }\n                    node = node.parent;\n                    updateEventInfo(eventInfo, 'bubbling', node);\n                }\n                updateEventInfo(eventInfo, 'bubbling', this);\n                // Document context.\n                fireListenerFor(eventContexts, '$document', eventInfo, ...eventArgs);\n                return eventInfo.return;\n            }\n            catch (err) {\n                // @if CK_DEBUG // throw err;\n                /* istanbul ignore next -- @preserve */\n                CKEditorError.rethrowUnexpectedError(err, this);\n            }\n        }\n        _addEventListener(event, callback, options) {\n            const contexts = toArray(options.context || '$document');\n            const eventContexts = getBubblingContexts(this);\n            for (const context of contexts) {\n                let emitter = eventContexts.get(context);\n                if (!emitter) {\n                    emitter = new (EmitterMixin())();\n                    eventContexts.set(context, emitter);\n                }\n                this.listenTo(emitter, event, callback, options);\n            }\n        }\n        _removeEventListener(event, callback) {\n            const eventContexts = getBubblingContexts(this);\n            for (const emitter of eventContexts.values()) {\n                this.stopListening(emitter, event, callback);\n            }\n        }\n    }\n    return Mixin;\n}\n// Backward compatibility with `mix`.\n{\n    const mixin = BubblingEmitterMixin(Object);\n    ['fire', '_addEventListener', '_removeEventListener'].forEach(key => {\n        BubblingEmitterMixin[key] = mixin.prototype[key];\n    });\n}\n/**\n * Update the event info bubbling fields.\n *\n * @param eventInfo The event info object to update.\n * @param eventPhase The current event phase.\n * @param currentTarget The current bubbling target.\n */\nfunction updateEventInfo(eventInfo, eventPhase, currentTarget) {\n    if (eventInfo instanceof BubblingEventInfo) {\n        eventInfo._eventPhase = eventPhase;\n        eventInfo._currentTarget = currentTarget;\n    }\n}\n/**\n * Fires the listener for the specified context. Returns `true` if event was stopped.\n *\n * @param eventInfo The `EventInfo` object.\n * @param eventArgs Additional arguments to be passed to the callbacks.\n * @returns True if event stop was called.\n */\nfunction fireListenerFor(eventContexts, context, eventInfo, ...eventArgs) {\n    const emitter = typeof context == 'string' ? eventContexts.get(context) : getCustomContext(eventContexts, context);\n    if (!emitter) {\n        return false;\n    }\n    emitter.fire(eventInfo, ...eventArgs);\n    return eventInfo.stop.called;\n}\n/**\n * Returns an emitter for a specified view node.\n */\nfunction getCustomContext(eventContexts, node) {\n    for (const [context, emitter] of eventContexts) {\n        if (typeof context == 'function' && context(node)) {\n            return emitter;\n        }\n    }\n    return null;\n}\n/**\n * Returns bubbling contexts map for the source (emitter).\n */\nfunction getBubblingContexts(source) {\n    if (!source[contextsSymbol]) {\n        source[contextsSymbol] = new Map();\n    }\n    return source[contextsSymbol];\n}\n/**\n * Returns the deeper parent element for the range.\n */\nfunction getDeeperRangeParent(range) {\n    if (!range) {\n        return null;\n    }\n    const startParent = range.start.parent;\n    const endParent = range.end.parent;\n    const startPath = startParent.getPath();\n    const endPath = endParent.getPath();\n    return startPath.length > endPath.length ? startParent : endParent;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/document\n */\nimport DocumentSelection from './documentselection.js';\nimport BubblingEmitterMixin from './observer/bubblingemittermixin.js';\nimport { Collection, ObservableMixin } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_ENGINE // const { logDocument } = require( '../dev-utils/utils' );\n/**\n * Document class creates an abstract layer over the content editable area, contains a tree of view elements and\n * {@link module:engine/view/documentselection~DocumentSelection view selection} associated with this document.\n */\nexport default class Document extends /* #__PURE__ */ BubblingEmitterMixin(/* #__PURE__ */ ObservableMixin()) {\n    /**\n     * Creates a Document instance.\n     *\n     * @param stylesProcessor The styles processor instance.\n     */\n    constructor(stylesProcessor) {\n        super();\n        /**\n         * Post-fixer callbacks registered to the view document.\n         */\n        this._postFixers = new Set();\n        this.selection = new DocumentSelection();\n        this.roots = new Collection({ idProperty: 'rootName' });\n        this.stylesProcessor = stylesProcessor;\n        this.set('isReadOnly', false);\n        this.set('isFocused', false);\n        this.set('isSelecting', false);\n        this.set('isComposing', false);\n    }\n    /**\n     * Gets a {@link module:engine/view/document~Document#roots view root element} with the specified name. If the name is not\n     * specific \"main\" root is returned.\n     *\n     * @param name Name of the root.\n     * @returns The view root element with the specified name or null when there is no root of given name.\n     */\n    getRoot(name = 'main') {\n        return this.roots.get(name);\n    }\n    /**\n     * Allows registering post-fixer callbacks. A post-fixers mechanism allows to update the view tree just before it is rendered\n     * to the DOM.\n     *\n     * Post-fixers are executed right after all changes from the outermost change block were applied but\n     * before the {@link module:engine/view/view~View#event:render render event} is fired. If a post-fixer callback made\n     * a change, it should return `true`. When this happens, all post-fixers are fired again to check if something else should\n     * not be fixed in the new document tree state.\n     *\n     * View post-fixers are useful when you want to apply some fixes whenever the view structure changes. Keep in mind that\n     * changes executed in a view post-fixer should not break model-view mapping.\n     *\n     * The types of changes which should be safe:\n     *\n     * * adding or removing attribute from elements,\n     * * changes inside of {@link module:engine/view/uielement~UIElement UI elements},\n     * * {@link module:engine/controller/editingcontroller~EditingController#reconvertItem marking some of the model elements to be\n     * re-converted}.\n     *\n     * Try to avoid changes which touch view structure:\n     *\n     * * you should not add or remove nor wrap or unwrap any view elements,\n     * * you should not change the editor data model in a view post-fixer.\n     *\n     * As a parameter, a post-fixer callback receives a {@link module:engine/view/downcastwriter~DowncastWriter downcast writer}.\n     *\n     * Typically, a post-fixer will look like this:\n     *\n     * ```ts\n     * editor.editing.view.document.registerPostFixer( writer => {\n     * \tif ( checkSomeCondition() ) {\n     * \t\twriter.doSomething();\n     *\n     * \t\t// Let other post-fixers know that something changed.\n     * \t\treturn true;\n     * \t}\n     *\n     * \treturn false;\n     * } );\n     * ```\n     *\n     * Note that nothing happens right after you register a post-fixer (e.g. execute such a code in the console).\n     * That is because adding a post-fixer does not execute it.\n     * The post-fixer will be executed as soon as any change in the document needs to cause its rendering.\n     * If you want to re-render the editor's view after registering the post-fixer then you should do it manually by calling\n     * {@link module:engine/view/view~View#forceRender `view.forceRender()`}.\n     *\n     * If you need to register a callback which is executed when DOM elements are already updated,\n     * use {@link module:engine/view/view~View#event:render render event}.\n     */\n    registerPostFixer(postFixer) {\n        this._postFixers.add(postFixer);\n    }\n    /**\n     * Destroys this instance. Makes sure that all observers are destroyed and listeners removed.\n     */\n    destroy() {\n        this.roots.forEach(root => root.destroy());\n        this.stopListening();\n    }\n    /**\n     * Performs post-fixer loops. Executes post-fixer callbacks as long as none of them has done any changes to the model.\n     *\n     * @internal\n     */\n    _callPostFixers(writer) {\n        let wasFixed = false;\n        do {\n            for (const callback of this._postFixers) {\n                wasFixed = callback(writer);\n                if (wasFixed) {\n                    break;\n                }\n            }\n        } while (wasFixed);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/attributeelement\n */\nimport Element from './element.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n// Default attribute priority.\nconst DEFAULT_PRIORITY = 10;\n/**\n * Attribute elements are used to represent formatting elements in the view (think – `<b>`, `<span style=\"font-size: 2em\">`, etc.).\n * Most often they are created when downcasting model text attributes.\n *\n * Editing engine does not define a fixed HTML DTD. This is why a feature developer needs to choose between various\n * types (container element, {@link module:engine/view/attributeelement~AttributeElement attribute element},\n * {@link module:engine/view/emptyelement~EmptyElement empty element}, etc) when developing a feature.\n *\n * To create a new attribute element instance use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createAttributeElement `DowncastWriter#createAttributeElement()`} method.\n */\nclass AttributeElement extends Element {\n    /**\n     * Creates an attribute element.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#createAttributeElement\n     * @see module:engine/view/element~Element\n     * @protected\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     */\n    constructor(document, name, attrs, children) {\n        super(document, name, attrs, children);\n        /**\n         * Element priority. Decides in what order elements are wrapped by {@link module:engine/view/downcastwriter~DowncastWriter}.\n         *\n         * @internal\n         * @readonly\n         */\n        this._priority = DEFAULT_PRIORITY;\n        /**\n         * Element identifier. If set, it is used by {@link module:engine/view/element~Element#isSimilar},\n         * and then two elements are considered similar if, and only if they have the same `_id`.\n         *\n         * @internal\n         * @readonly\n         */\n        this._id = null;\n        /**\n         * Keeps all the attribute elements that have the same {@link module:engine/view/attributeelement~AttributeElement#id ids}\n         * and still exist in the view tree.\n         *\n         * This property is managed by {@link module:engine/view/downcastwriter~DowncastWriter}.\n         */\n        this._clonesGroup = null;\n        this.getFillerOffset = getFillerOffset;\n    }\n    /**\n     * Element priority. Decides in what order elements are wrapped by {@link module:engine/view/downcastwriter~DowncastWriter}.\n     */\n    get priority() {\n        return this._priority;\n    }\n    /**\n     * Element identifier. If set, it is used by {@link module:engine/view/element~Element#isSimilar},\n     * and then two elements are considered similar if, and only if they have the same `id`.\n     */\n    get id() {\n        return this._id;\n    }\n    /**\n     * Returns all {@link module:engine/view/attributeelement~AttributeElement attribute elements} that has the\n     * same {@link module:engine/view/attributeelement~AttributeElement#id id} and are in the view tree (were not removed).\n     *\n     * Note: If this element has been removed from the tree, returned set will not include it.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError attribute-element-get-elements-with-same-id-no-id}\n     * if this element has no `id`.\n     *\n     * @returns Set containing all the attribute elements\n     * with the same `id` that were added and not removed from the view tree.\n     */\n    getElementsWithSameId() {\n        if (this.id === null) {\n            /**\n             * Cannot get elements with the same id for an attribute element without id.\n             *\n             * @error attribute-element-get-elements-with-same-id-no-id\n             */\n            throw new CKEditorError('attribute-element-get-elements-with-same-id-no-id', this);\n        }\n        return new Set(this._clonesGroup);\n    }\n    /**\n     * Checks if this element is similar to other element.\n     *\n     * If none of elements has set {@link module:engine/view/attributeelement~AttributeElement#id}, then both elements\n     * should have the same name, attributes and priority to be considered as similar. Two similar elements can contain\n     * different set of children nodes.\n     *\n     * If at least one element has {@link module:engine/view/attributeelement~AttributeElement#id} set, then both\n     * elements have to have the same {@link module:engine/view/attributeelement~AttributeElement#id} value to be\n     * considered similar.\n     *\n     * Similarity is important for {@link module:engine/view/downcastwriter~DowncastWriter}. For example:\n     *\n     * * two following similar elements can be merged together into one, longer element,\n     * * {@link module:engine/view/downcastwriter~DowncastWriter#unwrap} checks similarity of passed element and processed element to\n     * decide whether processed element should be unwrapped,\n     * * etc.\n     */\n    isSimilar(otherElement) {\n        // If any element has an `id` set, just compare the ids.\n        if (this.id !== null || otherElement.id !== null) {\n            return this.id === otherElement.id;\n        }\n        return super.isSimilar(otherElement) && this.priority == otherElement.priority;\n    }\n    /**\n     * Clones provided element with priority.\n     *\n     * @internal\n     * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any children.\n     * @returns Clone of this element.\n     */\n    _clone(deep = false) {\n        const cloned = super._clone(deep);\n        // Clone priority too.\n        cloned._priority = this._priority;\n        // And id too.\n        cloned._id = this._id;\n        return cloned;\n    }\n}\nAttributeElement.DEFAULT_PRIORITY = DEFAULT_PRIORITY;\nexport default AttributeElement;\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nAttributeElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'attributeElement' || type === 'view:attributeElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'element' || type === 'view:element' ||\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'attributeElement' || type === 'view:attributeElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'element' || type === 'view:element');\n    }\n};\n/**\n * Returns block {@link module:engine/view/filler~Filler filler} offset or `null` if block filler is not needed.\n *\n * @returns Block filler offset or `null` if block filler is not needed.\n */\nfunction getFillerOffset() {\n    // <b>foo</b> does not need filler.\n    if (nonUiChildrenCount(this)) {\n        return null;\n    }\n    let element = this.parent;\n    // <p><b></b></p> needs filler -> <p><b><br></b></p>\n    while (element && element.is('attributeElement')) {\n        if (nonUiChildrenCount(element) > 1) {\n            return null;\n        }\n        element = element.parent;\n    }\n    if (!element || nonUiChildrenCount(element) > 1) {\n        return null;\n    }\n    // Render block filler at the end of element (after all ui elements).\n    return this.childCount;\n}\n/**\n * Returns total count of children that are not {@link module:engine/view/uielement~UIElement UIElements}.\n */\nfunction nonUiChildrenCount(element) {\n    return Array.from(element.getChildren()).filter(element => !element.is('uiElement')).length;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/emptyelement\n */\nimport Element from './element.js';\nimport Node from './node.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Empty element class. It is used to represent elements that cannot contain any child nodes (for example `<img>` elements).\n *\n * To create a new empty element use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createEmptyElement `downcastWriter#createEmptyElement()`} method.\n */\nexport default class EmptyElement extends Element {\n    /**\n     * Creates new instance of EmptyElement.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` when third parameter is passed,\n     * to inform that usage of EmptyElement is incorrect (adding child nodes to EmptyElement is forbidden).\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#createEmptyElement\n     * @internal\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     */\n    constructor(document, name, attributes, children) {\n        super(document, name, attributes, children);\n        this.getFillerOffset = getFillerOffset;\n    }\n    /**\n     * Overrides {@link module:engine/view/element~Element#_insertChild} method.\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent\n     * adding any child nodes to EmptyElement.\n     *\n     * @internal\n     */\n    _insertChild(index, items) {\n        if (items && (items instanceof Node || Array.from(items).length > 0)) {\n            /**\n             * Cannot add children to {@link module:engine/view/emptyelement~EmptyElement}.\n             *\n             * @error view-emptyelement-cannot-add\n             */\n            throw new CKEditorError('view-emptyelement-cannot-add', [this, items]);\n        }\n        return 0;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nEmptyElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'emptyElement' || type === 'view:emptyElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'element' || type === 'view:element' ||\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'emptyElement' || type === 'view:emptyElement' ||\n            type === 'element' || type === 'view:element');\n    }\n};\n/**\n * Returns `null` because block filler is not needed for EmptyElements.\n */\nfunction getFillerOffset() {\n    return null;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/uielement\n */\nimport Element from './element.js';\nimport Node from './node.js';\nimport { CKEditorError, keyCodes } from '@ckeditor/ckeditor5-utils';\n/**\n * UI element class. It should be used to represent editing UI which needs to be injected into the editing view\n * If possible, you should keep your UI outside the editing view. However, if that is not possible,\n * UI elements can be used.\n *\n * How a UI element is rendered is in your control (you pass a callback to\n * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `downcastWriter#createUIElement()`}).\n * The editor will ignore your UI element – the selection cannot be placed in it, it is skipped (invisible) when\n * the user modifies the selection by using arrow keys and the editor does not listen to any mutations which\n * happen inside your UI elements.\n *\n * The limitation is that you cannot convert a model element to a UI element. UI elements need to be\n * created for {@link module:engine/model/markercollection~Marker markers} or as additinal elements\n * inside normal {@link module:engine/view/containerelement~ContainerElement container elements}.\n *\n * To create a new UI element use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `downcastWriter#createUIElement()`} method.\n */\nexport default class UIElement extends Element {\n    /**\n     * Creates new instance of UIElement.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-uielement-cannot-add` when third parameter is passed,\n     * to inform that usage of UIElement is incorrect (adding child nodes to UIElement is forbidden).\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#createUIElement\n     * @internal\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     */\n    constructor(document, name, attrs, children) {\n        super(document, name, attrs, children);\n        this.getFillerOffset = getFillerOffset;\n    }\n    /**\n     * Overrides {@link module:engine/view/element~Element#_insertChild} method.\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-uielement-cannot-add` to prevent adding any child nodes\n     * to UIElement.\n     *\n     * @internal\n     */\n    _insertChild(index, items) {\n        if (items && (items instanceof Node || Array.from(items).length > 0)) {\n            /**\n             * Cannot add children to {@link module:engine/view/uielement~UIElement}.\n             *\n             * @error view-uielement-cannot-add\n             */\n            throw new CKEditorError('view-uielement-cannot-add', [this, items]);\n        }\n        return 0;\n    }\n    /**\n     * Renders this {@link module:engine/view/uielement~UIElement} to DOM. This method is called by\n     * {@link module:engine/view/domconverter~DomConverter}.\n     * Do not use inheritance to create custom rendering method, replace `render()` method instead:\n     *\n     * ```ts\n     * const myUIElement = downcastWriter.createUIElement( 'span' );\n     * myUIElement.render = function( domDocument, domConverter ) {\n     * \tconst domElement = this.toDomElement( domDocument );\n     *\n     * \tdomConverter.setContentOf( domElement, '<b>this is ui element</b>' );\n     *\n     * \treturn domElement;\n     * };\n     * ```\n     *\n     * If changes in your UI element should trigger some editor UI update you should call\n     * the {@link module:ui/editorui/editorui~EditorUI#update `editor.ui.update()`} method\n     * after rendering your UI element.\n     *\n     * @param domConverter Instance of the DomConverter used to optimize the output.\n     */\n    render(domDocument, domConverter // eslint-disable-line @typescript-eslint/no-unused-vars\n    ) {\n        // Provide basic, default output.\n        return this.toDomElement(domDocument);\n    }\n    /**\n     * Creates DOM element based on this view UIElement.\n     * Note that each time this method is called new DOM element is created.\n     */\n    toDomElement(domDocument) {\n        const domElement = domDocument.createElement(this.name);\n        for (const key of this.getAttributeKeys()) {\n            domElement.setAttribute(key, this.getAttribute(key));\n        }\n        return domElement;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nUIElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'uiElement' || type === 'view:uiElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'element' || type === 'view:element' ||\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'uiElement' || type === 'view:uiElement' ||\n            type === 'element' || type === 'view:element');\n    }\n};\n/**\n * This function injects UI element handling to the given {@link module:engine/view/document~Document document}.\n *\n * A callback is added to {@link module:engine/view/document~Document#event:keydown document keydown event}.\n * The callback handles the situation when right arrow key is pressed and selection is collapsed before a UI element.\n * Without this handler, it would be impossible to \"jump over\" UI element using right arrow key.\n *\n * @param view View controller to which the quirks handling will be injected.\n */\nexport function injectUiElementHandling(view) {\n    view.document.on('arrowKey', (evt, data) => jumpOverUiElement(evt, data, view.domConverter), { priority: 'low' });\n}\n/**\n * Returns `null` because block filler is not needed for UIElements.\n */\nfunction getFillerOffset() {\n    return null;\n}\n/**\n * Selection cannot be placed in a `UIElement`. Whenever it is placed there, it is moved before it. This\n * causes a situation when it is impossible to jump over `UIElement` using right arrow key, because the selection\n * ends up in ui element (in DOM) and is moved back to the left. This handler fixes this situation.\n */\nfunction jumpOverUiElement(evt, data, domConverter) {\n    if (data.keyCode == keyCodes.arrowright) {\n        const domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n        const domSelectionCollapsed = domSelection.rangeCount == 1 && domSelection.getRangeAt(0).collapsed;\n        // Jump over UI element if selection is collapsed or shift key is pressed. These are the cases when selection would extend.\n        if (domSelectionCollapsed || data.shiftKey) {\n            const domParent = domSelection.focusNode;\n            const domOffset = domSelection.focusOffset;\n            const viewPosition = domConverter.domPositionToView(domParent, domOffset);\n            // In case if dom element is not converted to view or is not mapped or something. Happens for example in some tests.\n            if (viewPosition === null) {\n                return;\n            }\n            // Skip all following ui elements.\n            let jumpedOverAnyUiElement = false;\n            const nextViewPosition = viewPosition.getLastMatchingPosition(value => {\n                if (value.item.is('uiElement')) {\n                    // Remember that there was at least one ui element.\n                    jumpedOverAnyUiElement = true;\n                }\n                // Jump over ui elements, jump over empty attribute elements, move up from inside of attribute element.\n                if (value.item.is('uiElement') || value.item.is('attributeElement')) {\n                    return true;\n                }\n                // Don't jump over text or don't get out of container element.\n                return false;\n            });\n            // If anything has been skipped, fix position.\n            // This `if` could be possibly omitted but maybe it is better not to mess with DOM selection if not needed.\n            if (jumpedOverAnyUiElement) {\n                const newDomPosition = domConverter.viewPositionToDom(nextViewPosition);\n                if (domSelectionCollapsed) {\n                    // Selection was collapsed, so collapse it at further position.\n                    domSelection.collapse(newDomPosition.parent, newDomPosition.offset);\n                }\n                else {\n                    // Selection was not collapse, so extend it instead of collapsing.\n                    domSelection.extend(newDomPosition.parent, newDomPosition.offset);\n                }\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * @module engine/view/rawelement\n */\nimport Element from './element.js';\nimport Node from './node.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * The raw element class.\n *\n * The raw elements work as data containers (\"wrappers\", \"sandboxes\") but their children are not managed or\n * even recognized by the editor. This encapsulation allows integrations to maintain custom DOM structures\n * in the editor content without, for instance, worrying about compatibility with other editor features.\n * Raw elements are a perfect tool for integration with external frameworks and data sources.\n *\n * Unlike {@link module:engine/view/uielement~UIElement UI elements}, raw elements act like real editor\n * content (similar to {@link module:engine/view/containerelement~ContainerElement} or\n * {@link module:engine/view/emptyelement~EmptyElement}), they are considered by the editor selection and\n * {@link module:widget/utils~toWidget they can work as widgets}.\n *\n * To create a new raw element, use the\n * {@link module:engine/view/downcastwriter~DowncastWriter#createRawElement `downcastWriter#createRawElement()`} method.\n */\nexport default class RawElement extends Element {\n    /**\n     * Creates a new instance of a raw element.\n     *\n     * Throws the `view-rawelement-cannot-add` {@link module:utils/ckeditorerror~CKEditorError CKEditorError} when the `children`\n     * parameter is passed to inform that the usage of `RawElement` is incorrect (adding child nodes to `RawElement` is forbidden).\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#createRawElement\n     * @internal\n     * @param document The document instance to which this element belongs.\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     */\n    constructor(document, name, attrs, children) {\n        super(document, name, attrs, children);\n        // Returns `null` because filler is not needed for raw elements.\n        this.getFillerOffset = getFillerOffset;\n    }\n    /**\n     * Overrides the {@link module:engine/view/element~Element#_insertChild} method.\n     * Throws the `view-rawelement-cannot-add` {@link module:utils/ckeditorerror~CKEditorError CKEditorError} to prevent\n     * adding any child nodes to a raw element.\n     *\n     * @internal\n     */\n    _insertChild(index, items) {\n        if (items && (items instanceof Node || Array.from(items).length > 0)) {\n            /**\n             * Cannot add children to a {@link module:engine/view/rawelement~RawElement} instance.\n             *\n             * @error view-rawelement-cannot-add\n             */\n            throw new CKEditorError('view-rawelement-cannot-add', [this, items]);\n        }\n        return 0;\n    }\n    /**\n     * This allows rendering the children of a {@link module:engine/view/rawelement~RawElement} on the DOM level.\n     * This method is called by the {@link module:engine/view/domconverter~DomConverter} with the raw DOM element\n     * passed as an argument, leaving the number and shape of the children up to the integrator.\n     *\n     * This method **must be defined** for the raw element to work:\n     *\n     * ```ts\n     * const myRawElement = downcastWriter.createRawElement( 'div' );\n     *\n     * myRawElement.render = function( domElement, domConverter ) {\n     * \tdomConverter.setContentOf( domElement, '<b>This is the raw content of myRawElement.</b>' );\n     * };\n     * ```\n     *\n     * @param domElement The native DOM element representing the raw view element.\n     * @param domConverter Instance of the DomConverter used to optimize the output.\n     */\n    render(domElement, domConverter) { }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nRawElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'rawElement' || type === 'view:rawElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === this.name || type === 'view:' + this.name ||\n            type === 'element' || type === 'view:element' ||\n            type === 'node' || type === 'view:node';\n    }\n    else {\n        return name === this.name && (type === 'rawElement' || type === 'view:rawElement' ||\n            type === 'element' || type === 'view:element');\n    }\n};\n/**\n * Returns `null` because block filler is not needed for raw elements.\n */\nfunction getFillerOffset() {\n    return null;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/documentfragment\n */\nimport TypeCheckable from './typecheckable.js';\nimport Text from './text.js';\nimport TextProxy from './textproxy.js';\nimport { EmitterMixin, isIterable } from '@ckeditor/ckeditor5-utils';\n/**\n * Document fragment.\n *\n * To create a new document fragment instance use the\n * {@link module:engine/view/upcastwriter~UpcastWriter#createDocumentFragment `UpcastWriter#createDocumentFragment()`}\n * method.\n */\nexport default class DocumentFragment extends /* #__PURE__ */ EmitterMixin(TypeCheckable) {\n    /**\n     * Creates new DocumentFragment instance.\n     *\n     * @internal\n     * @param document The document to which this document fragment belongs.\n     * @param children A list of nodes to be inserted into the created document fragment.\n     */\n    constructor(document, children) {\n        super();\n        /**\n         * Array of child nodes.\n         */\n        this._children = [];\n        /**\n         * Map of custom properties.\n         * Custom properties can be added to document fragment instance.\n         */\n        this._customProperties = new Map();\n        this.document = document;\n        if (children) {\n            this._insertChild(0, children);\n        }\n    }\n    /**\n     * Iterable interface.\n     *\n     * Iterates over nodes added to this document fragment.\n     */\n    [Symbol.iterator]() {\n        return this._children[Symbol.iterator]();\n    }\n    /**\n     * Number of child nodes in this document fragment.\n     */\n    get childCount() {\n        return this._children.length;\n    }\n    /**\n     * Is `true` if there are no nodes inside this document fragment, `false` otherwise.\n     */\n    get isEmpty() {\n        return this.childCount === 0;\n    }\n    /**\n     * Artificial root of `DocumentFragment`. Returns itself. Added for compatibility reasons.\n     */\n    get root() {\n        return this;\n    }\n    /**\n     * Artificial parent of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n     */\n    get parent() {\n        return null;\n    }\n    /**\n     * Artificial element name. Returns `undefined`. Added for compatibility reasons.\n     */\n    get name() {\n        return undefined;\n    }\n    /**\n     * Artificial element getFillerOffset. Returns `undefined`. Added for compatibility reasons.\n     */\n    get getFillerOffset() {\n        return undefined;\n    }\n    /**\n     * Returns the custom property value for the given key.\n     */\n    getCustomProperty(key) {\n        return this._customProperties.get(key);\n    }\n    /**\n     * Returns an iterator which iterates over this document fragment's custom properties.\n     * Iterator provides `[ key, value ]` pairs for each stored property.\n     */\n    *getCustomProperties() {\n        yield* this._customProperties.entries();\n    }\n    /**\n     * {@link module:engine/view/documentfragment~DocumentFragment#_insertChild Insert} a child node or a list of child nodes at the end\n     * and sets the parent of these nodes to this fragment.\n     *\n     * @internal\n     * @param items Items to be inserted.\n     * @returns Number of appended nodes.\n     */\n    _appendChild(items) {\n        return this._insertChild(this.childCount, items);\n    }\n    /**\n     * Gets child at the given index.\n     *\n     * @param index Index of child.\n     * @returns Child node.\n     */\n    getChild(index) {\n        return this._children[index];\n    }\n    /**\n     * Gets index of the given child node. Returns `-1` if child node is not found.\n     *\n     * @param node Child node.\n     * @returns Index of the child node.\n     */\n    getChildIndex(node) {\n        return this._children.indexOf(node);\n    }\n    /**\n     * Gets child nodes iterator.\n     *\n     * @returns Child nodes iterator.\n     */\n    getChildren() {\n        return this._children[Symbol.iterator]();\n    }\n    /**\n     * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n     * this fragment.\n     *\n     * @internal\n     * @param index Position where nodes should be inserted.\n     * @param items Items to be inserted.\n     * @returns Number of inserted nodes.\n     */\n    _insertChild(index, items) {\n        this._fireChange('children', this);\n        let count = 0;\n        const nodes = normalize(this.document, items);\n        for (const node of nodes) {\n            // If node that is being added to this element is already inside another element, first remove it from the old parent.\n            if (node.parent !== null) {\n                node._remove();\n            }\n            node.parent = this;\n            this._children.splice(index, 0, node);\n            index++;\n            count++;\n        }\n        return count;\n    }\n    /**\n     * Removes number of child nodes starting at the given index and set the parent of these nodes to `null`.\n     *\n     * @internal\n     * @param index Number of the first node to remove.\n     * @param howMany Number of nodes to remove.\n     * @returns The array of removed nodes.\n     */\n    _removeChildren(index, howMany = 1) {\n        this._fireChange('children', this);\n        for (let i = index; i < index + howMany; i++) {\n            this._children[i].parent = null;\n        }\n        return this._children.splice(index, howMany);\n    }\n    /**\n     * Fires `change` event with given type of the change.\n     *\n     * @internal\n     * @param type Type of the change.\n     * @param node Changed node.\n     */\n    _fireChange(type, node) {\n        this.fire('change:' + type, node);\n    }\n    /**\n     * Sets a custom property. They can be used to add special data to elements.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#setCustomProperty\n     * @internal\n     */\n    _setCustomProperty(key, value) {\n        this._customProperties.set(key, value);\n    }\n    /**\n     * Removes the custom property stored under the given key.\n     *\n     * @see module:engine/view/downcastwriter~DowncastWriter#removeCustomProperty\n     * @internal\n     * @returns Returns true if property was removed.\n     */\n    _removeCustomProperty(key) {\n        return this._customProperties.delete(key);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nDocumentFragment.prototype.is = function (type) {\n    return type === 'documentFragment' || type === 'view:documentFragment';\n};\n/**\n * Converts strings to Text and non-iterables to arrays.\n */\nfunction normalize(document, nodes) {\n    // Separate condition because string is iterable.\n    if (typeof nodes == 'string') {\n        return [new Text(document, nodes)];\n    }\n    if (!isIterable(nodes)) {\n        nodes = [nodes];\n    }\n    // Array.from to enable .map() on non-arrays.\n    return Array.from(nodes)\n        .map(node => {\n        if (typeof node == 'string') {\n            return new Text(document, node);\n        }\n        if (node instanceof TextProxy) {\n            return new Text(document, node.data);\n        }\n        return node;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/downcastwriter\n */\nimport Position from './position.js';\nimport Range from './range.js';\nimport Selection from './selection.js';\nimport ContainerElement from './containerelement.js';\nimport AttributeElement from './attributeelement.js';\nimport EmptyElement from './emptyelement.js';\nimport UIElement from './uielement.js';\nimport RawElement from './rawelement.js';\nimport { CKEditorError, isIterable } from '@ckeditor/ckeditor5-utils';\nimport DocumentFragment from './documentfragment.js';\nimport Text from './text.js';\nimport EditableElement from './editableelement.js';\nimport { isPlainObject } from 'lodash-es';\n/**\n * View downcast writer.\n *\n * It provides a set of methods used to manipulate view nodes.\n *\n * Do not create an instance of this writer manually. To modify a view structure, use\n * the {@link module:engine/view/view~View#change `View#change()`} block.\n *\n * The `DowncastWriter` is designed to work with semantic views which are the views that were/are being downcasted from the model.\n * To work with ordinary views (e.g. parsed from a pasted content) use the\n * {@link module:engine/view/upcastwriter~UpcastWriter upcast writer}.\n *\n * Read more about changing the view in the {@glink framework/architecture/editing-engine#changing-the-view Changing the view}\n * section of the {@glink framework/architecture/editing-engine Editing engine architecture} guide.\n */\nexport default class DowncastWriter {\n    /**\n     * @param document The view document instance.\n     */\n    constructor(document) {\n        /**\n         * Holds references to the attribute groups that share the same {@link module:engine/view/attributeelement~AttributeElement#id id}.\n         * The keys are `id`s, the values are `Set`s holding {@link module:engine/view/attributeelement~AttributeElement}s.\n         */\n        this._cloneGroups = new Map();\n        /**\n         * The slot factory used by the `elementToStructure` downcast helper.\n         */\n        this._slotFactory = null;\n        this.document = document;\n    }\n    setSelection(...args) {\n        this.document.selection._setTo(...args);\n    }\n    /**\n     * Moves {@link module:engine/view/documentselection~DocumentSelection#focus selection's focus} to the specified location.\n     *\n     * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n     * parameters.\n     *\n     * @param Offset or one of the flags. Used only when the first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n    setSelectionFocus(itemOrPosition, offset) {\n        this.document.selection._setFocus(itemOrPosition, offset);\n    }\n    /**\n     * Creates a new {@link module:engine/view/documentfragment~DocumentFragment} instance.\n     *\n     * @param children A list of nodes to be inserted into the created document fragment.\n     * @returns The created document fragment.\n     */\n    createDocumentFragment(children) {\n        return new DocumentFragment(this.document, children);\n    }\n    /**\n     * Creates a new {@link module:engine/view/text~Text text node}.\n     *\n     * ```ts\n     * writer.createText( 'foo' );\n     * ```\n     *\n     * @param data The text's data.\n     * @returns The created text node.\n     */\n    createText(data) {\n        return new Text(this.document, data);\n    }\n    /**\n     * Creates a new {@link module:engine/view/attributeelement~AttributeElement}.\n     *\n     * ```ts\n     * writer.createAttributeElement( 'strong' );\n     * writer.createAttributeElement( 'a', { href: 'foo.bar' } );\n     *\n     * // Make `<a>` element contain other attributes element so the `<a>` element is not broken.\n     * writer.createAttributeElement( 'a', { href: 'foo.bar' }, { priority: 5 } );\n     *\n     * // Set `id` of a marker element so it is not joined or merged with \"normal\" elements.\n     * writer.createAttributeElement( 'span', { class: 'my-marker' }, { id: 'marker:my' } );\n     * ```\n     *\n     * @param name Name of the element.\n     * @param attributes Element's attributes.\n     * @param options Element's options.\n     * @param options.priority Element's {@link module:engine/view/attributeelement~AttributeElement#priority priority}.\n     * @param options.id Element's {@link module:engine/view/attributeelement~AttributeElement#id id}.\n     * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n     * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n     * @returns Created element.\n     */\n    createAttributeElement(name, attributes, options = {}) {\n        const attributeElement = new AttributeElement(this.document, name, attributes);\n        if (typeof options.priority === 'number') {\n            attributeElement._priority = options.priority;\n        }\n        if (options.id) {\n            attributeElement._id = options.id;\n        }\n        if (options.renderUnsafeAttributes) {\n            attributeElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n        }\n        return attributeElement;\n    }\n    createContainerElement(name, attributes, childrenOrOptions = {}, options = {}) {\n        let children = null;\n        if (isPlainObject(childrenOrOptions)) {\n            options = childrenOrOptions;\n        }\n        else {\n            children = childrenOrOptions;\n        }\n        const containerElement = new ContainerElement(this.document, name, attributes, children);\n        if (options.renderUnsafeAttributes) {\n            containerElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n        }\n        return containerElement;\n    }\n    /**\n     * Creates a new {@link module:engine/view/editableelement~EditableElement}.\n     *\n     * ```ts\n     * writer.createEditableElement( 'div' );\n     * writer.createEditableElement( 'div', { id: 'foo-1234' } );\n     * ```\n     *\n     * Note: The editable element is to be used in the editing pipeline. Usually, together with\n     * {@link module:widget/utils~toWidgetEditable `toWidgetEditable()`}.\n     *\n     * @param name Name of the element.\n     * @param attributes Elements attributes.\n     * @param options Element's options.\n     * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n     * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n     * @returns Created element.\n     */\n    createEditableElement(name, attributes, options = {}) {\n        const editableElement = new EditableElement(this.document, name, attributes);\n        if (options.renderUnsafeAttributes) {\n            editableElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n        }\n        return editableElement;\n    }\n    /**\n     * Creates a new {@link module:engine/view/emptyelement~EmptyElement}.\n     *\n     * ```ts\n     * writer.createEmptyElement( 'img' );\n     * writer.createEmptyElement( 'img', { id: 'foo-1234' } );\n     * ```\n     *\n     * @param name Name of the element.\n     * @param attributes Elements attributes.\n     * @param options Element's options.\n     * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n     * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n     * @returns Created element.\n     */\n    createEmptyElement(name, attributes, options = {}) {\n        const emptyElement = new EmptyElement(this.document, name, attributes);\n        if (options.renderUnsafeAttributes) {\n            emptyElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n        }\n        return emptyElement;\n    }\n    /**\n     * Creates a new {@link module:engine/view/uielement~UIElement}.\n     *\n     * ```ts\n     * writer.createUIElement( 'span' );\n     * writer.createUIElement( 'span', { id: 'foo-1234' } );\n     * ```\n     *\n     * A custom render function can be provided as the third parameter:\n     *\n     * ```ts\n     * writer.createUIElement( 'span', null, function( domDocument ) {\n     * \tconst domElement = this.toDomElement( domDocument );\n     * \tdomElement.innerHTML = '<b>this is ui element</b>';\n     *\n     * \treturn domElement;\n     * } );\n     * ```\n     *\n     * Unlike {@link #createRawElement raw elements}, UI elements are by no means editor content, for instance,\n     * they are ignored by the editor selection system.\n     *\n     * You should not use UI elements as data containers. Check out {@link #createRawElement} instead.\n     *\n     * @param name The name of the element.\n     * @param attributes Element attributes.\n     * @param renderFunction A custom render function.\n     * @returns The created element.\n     */\n    createUIElement(name, attributes, renderFunction) {\n        const uiElement = new UIElement(this.document, name, attributes);\n        if (renderFunction) {\n            uiElement.render = renderFunction;\n        }\n        return uiElement;\n    }\n    /**\n     * Creates a new {@link module:engine/view/rawelement~RawElement}.\n     *\n     * ```ts\n     * writer.createRawElement( 'span', { id: 'foo-1234' }, function( domElement ) {\n     * \tdomElement.innerHTML = '<b>This is the raw content of the raw element.</b>';\n     * } );\n     * ```\n     *\n     * Raw elements work as data containers (\"wrappers\", \"sandboxes\") but their children are not managed or\n     * even recognized by the editor. This encapsulation allows integrations to maintain custom DOM structures\n     * in the editor content without, for instance, worrying about compatibility with other editor features.\n     * Raw elements are a perfect tool for integration with external frameworks and data sources.\n     *\n     * Unlike {@link #createUIElement UI elements}, raw elements act like \"real\" editor content (similar to\n     * {@link module:engine/view/containerelement~ContainerElement} or {@link module:engine/view/emptyelement~EmptyElement}),\n     * and they are considered by the editor selection.\n     *\n     * You should not use raw elements to render the UI in the editor content. Check out {@link #createUIElement `#createUIElement()`}\n     * instead.\n     *\n     * @param name The name of the element.\n     * @param attributes Element attributes.\n     * @param renderFunction A custom render function.\n     * @param options Element's options.\n     * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n     * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n     * @returns The created element.\n     */\n    createRawElement(name, attributes, renderFunction, options = {}) {\n        const rawElement = new RawElement(this.document, name, attributes);\n        if (renderFunction) {\n            rawElement.render = renderFunction;\n        }\n        if (options.renderUnsafeAttributes) {\n            rawElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n        }\n        return rawElement;\n    }\n    /**\n     * Adds or overwrites the element's attribute with a specified key and value.\n     *\n     * ```ts\n     * writer.setAttribute( 'href', 'http://ckeditor.com', linkElement );\n     * ```\n     *\n     * @param key The attribute key.\n     * @param value The attribute value.\n     */\n    setAttribute(key, value, element) {\n        element._setAttribute(key, value);\n    }\n    /**\n     * Removes attribute from the element.\n     *\n     * ```ts\n     * writer.removeAttribute( 'href', linkElement );\n     * ```\n     *\n     * @param key Attribute key.\n     */\n    removeAttribute(key, element) {\n        element._removeAttribute(key);\n    }\n    /**\n     * Adds specified class to the element.\n     *\n     * ```ts\n     * writer.addClass( 'foo', linkElement );\n     * writer.addClass( [ 'foo', 'bar' ], linkElement );\n     * ```\n     */\n    addClass(className, element) {\n        element._addClass(className);\n    }\n    /**\n     * Removes specified class from the element.\n     *\n     * ```ts\n     * writer.removeClass( 'foo', linkElement );\n     * writer.removeClass( [ 'foo', 'bar' ], linkElement );\n     * ```\n     */\n    removeClass(className, element) {\n        element._removeClass(className);\n    }\n    setStyle(property, value, element) {\n        if (isPlainObject(property) && element === undefined) {\n            value._setStyle(property);\n        }\n        else {\n            element._setStyle(property, value);\n        }\n    }\n    /**\n     * Removes specified style from the element.\n     *\n     * ```ts\n     * writer.removeStyle( 'color', element ); // Removes 'color' style.\n     * writer.removeStyle( [ 'color', 'border-top' ], element ); // Removes both 'color' and 'border-top' styles.\n     * ```\n     *\n     * **Note**: This method can work with normalized style names if\n     * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n     * See {@link module:engine/view/stylesmap~StylesMap#remove `StylesMap#remove()`} for details.\n     */\n    removeStyle(property, element) {\n        element._removeStyle(property);\n    }\n    /**\n     * Sets a custom property on element. Unlike attributes, custom properties are not rendered to the DOM,\n     * so they can be used to add special data to elements.\n     */\n    setCustomProperty(key, value, element) {\n        element._setCustomProperty(key, value);\n    }\n    /**\n     * Removes a custom property stored under the given key.\n     *\n     * @returns Returns true if property was removed.\n     */\n    removeCustomProperty(key, element) {\n        return element._removeCustomProperty(key);\n    }\n    /**\n     * Breaks attribute elements at the provided position or at the boundaries of a provided range. It breaks attribute elements\n     * up to their first ancestor that is a container element.\n     *\n     * In following examples `<p>` is a container, `<b>` and `<u>` are attribute elements:\n     *\n     * ```html\n     * <p>foo<b><u>bar{}</u></b></p> -> <p>foo<b><u>bar</u></b>[]</p>\n     * <p>foo<b><u>{}bar</u></b></p> -> <p>foo{}<b><u>bar</u></b></p>\n     * <p>foo<b><u>b{}ar</u></b></p> -> <p>foo<b><u>b</u></b>[]<b><u>ar</u></b></p>\n     * <p><b>fo{o</b><u>ba}r</u></p> -> <p><b>fo</b><b>o</b><u>ba</u><u>r</u></b></p>\n     * ```\n     *\n     * **Note:** {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment} is treated like a container.\n     *\n     * **Note:** The difference between {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes breakAttributes()} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#breakContainer breakContainer()} is that `breakAttributes()` breaks all\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} that are ancestors of a given `position`,\n     * up to the first encountered {@link module:engine/view/containerelement~ContainerElement container element}.\n     * `breakContainer()` assumes that a given `position` is directly in the container element and breaks that container element.\n     *\n     * Throws the `view-writer-invalid-range-container` {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n     * when the {@link module:engine/view/range~Range#start start}\n     * and {@link module:engine/view/range~Range#end end} positions of a passed range are not placed inside same parent container.\n     *\n     * Throws the `view-writer-cannot-break-empty-element` {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n     * when trying to break attributes inside an {@link module:engine/view/emptyelement~EmptyElement EmptyElement}.\n     *\n     * Throws the `view-writer-cannot-break-ui-element` {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n     * when trying to break attributes inside a {@link module:engine/view/uielement~UIElement UIElement}.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#breakContainer\n     * @param positionOrRange The position where to break attribute elements.\n     * @returns The new position or range, after breaking the attribute elements.\n     */\n    breakAttributes(positionOrRange) {\n        if (positionOrRange instanceof Position) {\n            return this._breakAttributes(positionOrRange);\n        }\n        else {\n            return this._breakAttributesRange(positionOrRange);\n        }\n    }\n    /**\n     * Breaks a {@link module:engine/view/containerelement~ContainerElement container view element} into two, at the given position.\n     * The position has to be directly inside the container element and cannot be in the root. It does not break the conrainer view element\n     * if the position is at the beginning or at the end of its parent element.\n     *\n     * ```html\n     * <p>foo^bar</p> -> <p>foo</p><p>bar</p>\n     * <div><p>foo</p>^<p>bar</p></div> -> <div><p>foo</p></div><div><p>bar</p></div>\n     * <p>^foobar</p> -> ^<p>foobar</p>\n     * <p>foobar^</p> -> <p>foobar</p>^\n     * ```\n     *\n     * **Note:** The difference between {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes breakAttributes()} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#breakContainer breakContainer()} is that `breakAttributes()` breaks all\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} that are ancestors of a given `position`,\n     * up to the first encountered {@link module:engine/view/containerelement~ContainerElement container element}.\n     * `breakContainer()` assumes that the given `position` is directly in the container element and breaks that container element.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#breakAttributes\n     * @param position The position where to break the element.\n     * @returns The position between broken elements. If an element has not been broken,\n     * the returned position is placed either before or after it.\n     */\n    breakContainer(position) {\n        const element = position.parent;\n        if (!(element.is('containerElement'))) {\n            /**\n             * Trying to break an element which is not a container element.\n             *\n             * @error view-writer-break-non-container-element\n             */\n            throw new CKEditorError('view-writer-break-non-container-element', this.document);\n        }\n        if (!element.parent) {\n            /**\n             * Trying to break root element.\n             *\n             * @error view-writer-break-root\n             */\n            throw new CKEditorError('view-writer-break-root', this.document);\n        }\n        if (position.isAtStart) {\n            return Position._createBefore(element);\n        }\n        else if (!position.isAtEnd) {\n            const newElement = element._clone(false);\n            this.insert(Position._createAfter(element), newElement);\n            const sourceRange = new Range(position, Position._createAt(element, 'end'));\n            const targetPosition = new Position(newElement, 0);\n            this.move(sourceRange, targetPosition);\n        }\n        return Position._createAfter(element);\n    }\n    /**\n     * Merges {@link module:engine/view/attributeelement~AttributeElement attribute elements}. It also merges text nodes if needed.\n     * Only {@link module:engine/view/attributeelement~AttributeElement#isSimilar similar} attribute elements can be merged.\n     *\n     * In following examples `<p>` is a container and `<b>` is an attribute element:\n     *\n     * ```html\n     * <p>foo[]bar</p> -> <p>foo{}bar</p>\n     * <p><b>foo</b>[]<b>bar</b></p> -> <p><b>foo{}bar</b></p>\n     * <p><b foo=\"bar\">a</b>[]<b foo=\"baz\">b</b></p> -> <p><b foo=\"bar\">a</b>[]<b foo=\"baz\">b</b></p>\n     * ```\n     *\n     * It will also take care about empty attributes when merging:\n     *\n     * ```html\n     * <p><b>[]</b></p> -> <p>[]</p>\n     * <p><b>foo</b><i>[]</i><b>bar</b></p> -> <p><b>foo{}bar</b></p>\n     * ```\n     *\n     * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#mergeAttributes mergeAttributes} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#mergeContainers mergeContainers} is that `mergeAttributes` merges two\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} or {@link module:engine/view/text~Text text nodes}\n     * while `mergeContainer` merges two {@link module:engine/view/containerelement~ContainerElement container elements}.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#mergeContainers\n     * @param position Merge position.\n     * @returns Position after merge.\n     */\n    mergeAttributes(position) {\n        const positionOffset = position.offset;\n        const positionParent = position.parent;\n        // When inside text node - nothing to merge.\n        if (positionParent.is('$text')) {\n            return position;\n        }\n        // When inside empty attribute - remove it.\n        if (positionParent.is('attributeElement') && positionParent.childCount === 0) {\n            const parent = positionParent.parent;\n            const offset = positionParent.index;\n            positionParent._remove();\n            this._removeFromClonedElementsGroup(positionParent);\n            return this.mergeAttributes(new Position(parent, offset));\n        }\n        const nodeBefore = positionParent.getChild(positionOffset - 1);\n        const nodeAfter = positionParent.getChild(positionOffset);\n        // Position should be placed between two nodes.\n        if (!nodeBefore || !nodeAfter) {\n            return position;\n        }\n        // When position is between two text nodes.\n        if (nodeBefore.is('$text') && nodeAfter.is('$text')) {\n            return mergeTextNodes(nodeBefore, nodeAfter);\n        }\n        // When position is between two same attribute elements.\n        else if (nodeBefore.is('attributeElement') && nodeAfter.is('attributeElement') && nodeBefore.isSimilar(nodeAfter)) {\n            // Move all children nodes from node placed after selection and remove that node.\n            const count = nodeBefore.childCount;\n            nodeBefore._appendChild(nodeAfter.getChildren());\n            nodeAfter._remove();\n            this._removeFromClonedElementsGroup(nodeAfter);\n            // New position is located inside the first node, before new nodes.\n            // Call this method recursively to merge again if needed.\n            return this.mergeAttributes(new Position(nodeBefore, count));\n        }\n        return position;\n    }\n    /**\n     * Merges two {@link module:engine/view/containerelement~ContainerElement container elements} that are before and after given position.\n     * Precisely, the element after the position is removed and it's contents are moved to element before the position.\n     *\n     * ```html\n     * <p>foo</p>^<p>bar</p> -> <p>foo^bar</p>\n     * <div>foo</div>^<p>bar</p> -> <div>foo^bar</div>\n     * ```\n     *\n     * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#mergeAttributes mergeAttributes} and\n     * {@link module:engine/view/downcastwriter~DowncastWriter#mergeContainers mergeContainers} is that `mergeAttributes` merges two\n     * {@link module:engine/view/attributeelement~AttributeElement attribute elements} or {@link module:engine/view/text~Text text nodes}\n     * while `mergeContainer` merges two {@link module:engine/view/containerelement~ContainerElement container elements}.\n     *\n     * @see module:engine/view/attributeelement~AttributeElement\n     * @see module:engine/view/containerelement~ContainerElement\n     * @see module:engine/view/downcastwriter~DowncastWriter#mergeAttributes\n     * @param position Merge position.\n     * @returns Position after merge.\n     */\n    mergeContainers(position) {\n        const prev = position.nodeBefore;\n        const next = position.nodeAfter;\n        if (!prev || !next || !prev.is('containerElement') || !next.is('containerElement')) {\n            /**\n             * Element before and after given position cannot be merged.\n             *\n             * @error view-writer-merge-containers-invalid-position\n             */\n            throw new CKEditorError('view-writer-merge-containers-invalid-position', this.document);\n        }\n        const lastChild = prev.getChild(prev.childCount - 1);\n        const newPosition = lastChild instanceof Text ? Position._createAt(lastChild, 'end') : Position._createAt(prev, 'end');\n        this.move(Range._createIn(next), Position._createAt(prev, 'end'));\n        this.remove(Range._createOn(next));\n        return newPosition;\n    }\n    /**\n     * Inserts a node or nodes at specified position. Takes care about breaking attributes before insertion\n     * and merging them afterwards.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n     * contains instances that are not {@link module:engine/view/text~Text Texts},\n     * {@link module:engine/view/attributeelement~AttributeElement AttributeElements},\n     * {@link module:engine/view/containerelement~ContainerElement ContainerElements},\n     * {@link module:engine/view/emptyelement~EmptyElement EmptyElements},\n     * {@link module:engine/view/rawelement~RawElement RawElements} or\n     * {@link module:engine/view/uielement~UIElement UIElements}.\n     *\n     * @param position Insertion position.\n     * @param nodes Node or nodes to insert.\n     * @returns Range around inserted nodes.\n     */\n    insert(position, nodes) {\n        nodes = isIterable(nodes) ? [...nodes] : [nodes];\n        // Check if nodes to insert are instances of AttributeElements, ContainerElements, EmptyElements, UIElements or Text.\n        validateNodesToInsert(nodes, this.document);\n        // Group nodes in batches of nodes that require or do not require breaking an AttributeElements.\n        const nodeGroups = nodes.reduce((groups, node) => {\n            const lastGroup = groups[groups.length - 1];\n            // Break attributes on nodes that do exist in the model tree so they can have attributes, other elements\n            // can't have an attribute in model and won't get wrapped with an AttributeElement while down-casted.\n            const breakAttributes = !node.is('uiElement');\n            if (!lastGroup || lastGroup.breakAttributes != breakAttributes) {\n                groups.push({\n                    breakAttributes,\n                    nodes: [node]\n                });\n            }\n            else {\n                lastGroup.nodes.push(node);\n            }\n            return groups;\n        }, []);\n        // Insert nodes in batches.\n        let start = null;\n        let end = position;\n        for (const { nodes, breakAttributes } of nodeGroups) {\n            const range = this._insertNodes(end, nodes, breakAttributes);\n            if (!start) {\n                start = range.start;\n            }\n            end = range.end;\n        }\n        // When no nodes were inserted - return collapsed range.\n        if (!start) {\n            return new Range(position);\n        }\n        return new Range(start, end);\n    }\n    /**\n     * Removes provided range from the container.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     *\n     * @param rangeOrItem Range to remove from container\n     * or an {@link module:engine/view/item~Item item} to remove. If range is provided, after removing, it will be updated\n     * to a collapsed range showing the new position.\n     * @returns Document fragment containing removed nodes.\n     */\n    remove(rangeOrItem) {\n        const range = rangeOrItem instanceof Range ? rangeOrItem : Range._createOn(rangeOrItem);\n        validateRangeContainer(range, this.document);\n        // If range is collapsed - nothing to remove.\n        if (range.isCollapsed) {\n            return new DocumentFragment(this.document);\n        }\n        // Break attributes at range start and end.\n        const { start: breakStart, end: breakEnd } = this._breakAttributesRange(range, true);\n        const parentContainer = breakStart.parent;\n        const count = breakEnd.offset - breakStart.offset;\n        // Remove nodes in range.\n        const removed = parentContainer._removeChildren(breakStart.offset, count);\n        for (const node of removed) {\n            this._removeFromClonedElementsGroup(node);\n        }\n        // Merge after removing.\n        const mergePosition = this.mergeAttributes(breakStart);\n        range.start = mergePosition;\n        range.end = mergePosition.clone();\n        // Return removed nodes.\n        return new DocumentFragment(this.document, removed);\n    }\n    /**\n     * Removes matching elements from given range.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     *\n     * @param range Range to clear.\n     * @param element Element to remove.\n     */\n    clear(range, element) {\n        validateRangeContainer(range, this.document);\n        // Create walker on given range.\n        // We walk backward because when we remove element during walk it modifies range end position.\n        const walker = range.getWalker({\n            direction: 'backward',\n            ignoreElementEnd: true\n        });\n        // Let's walk.\n        for (const current of walker) {\n            const item = current.item;\n            let rangeToRemove;\n            // When current item matches to the given element.\n            if (item.is('element') && element.isSimilar(item)) {\n                // Create range on this element.\n                rangeToRemove = Range._createOn(item);\n                // When range starts inside Text or TextProxy element.\n            }\n            else if (!current.nextPosition.isAfter(range.start) && item.is('$textProxy')) {\n                // We need to check if parent of this text matches to given element.\n                const parentElement = item.getAncestors().find(ancestor => {\n                    return ancestor.is('element') && element.isSimilar(ancestor);\n                });\n                // If it is then create range inside this element.\n                if (parentElement) {\n                    rangeToRemove = Range._createIn(parentElement);\n                }\n            }\n            // If we have found element to remove.\n            if (rangeToRemove) {\n                // We need to check if element range stick out of the given range and truncate if it is.\n                if (rangeToRemove.end.isAfter(range.end)) {\n                    rangeToRemove.end = range.end;\n                }\n                if (rangeToRemove.start.isBefore(range.start)) {\n                    rangeToRemove.start = range.start;\n                }\n                // At the end we remove range with found element.\n                this.remove(rangeToRemove);\n            }\n        }\n    }\n    /**\n     * Moves nodes from provided range to target position.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     *\n     * @param sourceRange Range containing nodes to move.\n     * @param targetPosition Position to insert.\n     * @returns Range in target container. Inserted nodes are placed between\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions.\n     */\n    move(sourceRange, targetPosition) {\n        let nodes;\n        if (targetPosition.isAfter(sourceRange.end)) {\n            targetPosition = this._breakAttributes(targetPosition, true);\n            const parent = targetPosition.parent;\n            const countBefore = parent.childCount;\n            sourceRange = this._breakAttributesRange(sourceRange, true);\n            nodes = this.remove(sourceRange);\n            targetPosition.offset += (parent.childCount - countBefore);\n        }\n        else {\n            nodes = this.remove(sourceRange);\n        }\n        return this.insert(targetPosition, nodes);\n    }\n    /**\n     * Wraps elements within range with provided {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     * If a collapsed range is provided, it will be wrapped only if it is equal to view selection.\n     *\n     * If a collapsed range was passed and is same as selection, the selection\n     * will be moved to the inside of the wrapped attribute element.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-invalid-range-container`\n     * when {@link module:engine/view/range~Range#start}\n     * and {@link module:engine/view/range~Range#end} positions are not placed inside same parent container.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n     * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-nonselection-collapsed-range` when passed range\n     * is collapsed and different than view selection.\n     *\n     * @param range Range to wrap.\n     * @param attribute Attribute element to use as wrapper.\n     * @returns range Range after wrapping, spanning over wrapping attribute element.\n     */\n    wrap(range, attribute) {\n        if (!(attribute instanceof AttributeElement)) {\n            throw new CKEditorError('view-writer-wrap-invalid-attribute', this.document);\n        }\n        validateRangeContainer(range, this.document);\n        if (!range.isCollapsed) {\n            // Non-collapsed range. Wrap it with the attribute element.\n            return this._wrapRange(range, attribute);\n        }\n        else {\n            // Collapsed range. Wrap position.\n            let position = range.start;\n            if (position.parent.is('element') && !_hasNonUiChildren(position.parent)) {\n                position = position.getLastMatchingPosition(value => value.item.is('uiElement'));\n            }\n            position = this._wrapPosition(position, attribute);\n            const viewSelection = this.document.selection;\n            // If wrapping position is equal to view selection, move view selection inside wrapping attribute element.\n            if (viewSelection.isCollapsed && viewSelection.getFirstPosition().isEqual(range.start)) {\n                this.setSelection(position);\n            }\n            return new Range(position);\n        }\n    }\n    /**\n     * Unwraps nodes within provided range from attribute element.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n     * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n     * same parent container.\n     */\n    unwrap(range, attribute) {\n        if (!(attribute instanceof AttributeElement)) {\n            /**\n             * The `attribute` passed to {@link module:engine/view/downcastwriter~DowncastWriter#unwrap `DowncastWriter#unwrap()`}\n             * must be an instance of {@link module:engine/view/attributeelement~AttributeElement `AttributeElement`}.\n             *\n             * @error view-writer-unwrap-invalid-attribute\n             */\n            throw new CKEditorError('view-writer-unwrap-invalid-attribute', this.document);\n        }\n        validateRangeContainer(range, this.document);\n        // If range is collapsed - nothing to unwrap.\n        if (range.isCollapsed) {\n            return range;\n        }\n        // Break attributes at range start and end.\n        const { start: breakStart, end: breakEnd } = this._breakAttributesRange(range, true);\n        const parentContainer = breakStart.parent;\n        // Unwrap children located between break points.\n        const newRange = this._unwrapChildren(parentContainer, breakStart.offset, breakEnd.offset, attribute);\n        // Merge attributes at the both ends and return a new range.\n        const start = this.mergeAttributes(newRange.start);\n        // If start position was merged - move end position back.\n        if (!start.isEqual(newRange.start)) {\n            newRange.end.offset--;\n        }\n        const end = this.mergeAttributes(newRange.end);\n        return new Range(start, end);\n    }\n    /**\n     * Renames element by creating a copy of renamed element but with changed name and then moving contents of the\n     * old element to the new one. Keep in mind that this will invalidate all {@link module:engine/view/position~Position positions} which\n     * has renamed element as {@link module:engine/view/position~Position#parent a parent}.\n     *\n     * New element has to be created because `Element#tagName` property in DOM is readonly.\n     *\n     * Since this function creates a new element and removes the given one, the new element is returned to keep reference.\n     *\n     * @param newName New name for element.\n     * @param viewElement Element to be renamed.\n     * @returns Element created due to rename.\n     */\n    rename(newName, viewElement) {\n        const newElement = new ContainerElement(this.document, newName, viewElement.getAttributes());\n        this.insert(Position._createAfter(viewElement), newElement);\n        this.move(Range._createIn(viewElement), Position._createAt(newElement, 0));\n        this.remove(Range._createOn(viewElement));\n        return newElement;\n    }\n    /**\n     * Cleans up memory by removing obsolete cloned elements group from the writer.\n     *\n     * Should be used whenever all {@link module:engine/view/attributeelement~AttributeElement attribute elements}\n     * with the same {@link module:engine/view/attributeelement~AttributeElement#id id} are going to be removed from the view and\n     * the group will no longer be needed.\n     *\n     * Cloned elements group are not removed automatically in case if the group is still needed after all its elements\n     * were removed from the view.\n     *\n     * Keep in mind that group names are equal to the `id` property of the attribute element.\n     *\n     * @param groupName Name of the group to clear.\n     */\n    clearClonedElementsGroup(groupName) {\n        this._cloneGroups.delete(groupName);\n    }\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/view/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n     *\n     * This method is a shortcut to other constructors such as:\n     *\n     * * {@link #createPositionBefore},\n     * * {@link #createPositionAfter},\n     *\n     * @param offset Offset or one of the flags. Used only when the first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n    createPositionAt(itemOrPosition, offset) {\n        return Position._createAt(itemOrPosition, offset);\n    }\n    /**\n     * Creates a new position after given view item.\n     *\n     * @param item View item after which the position should be located.\n     */\n    createPositionAfter(item) {\n        return Position._createAfter(item);\n    }\n    /**\n     * Creates a new position before given view item.\n     *\n     * @param item View item before which the position should be located.\n     */\n    createPositionBefore(item) {\n        return Position._createBefore(item);\n    }\n    /**\n     * Creates a range spanning from `start` position to `end` position.\n     *\n     * **Note:** This factory method creates its own {@link module:engine/view/position~Position} instances basing on passed values.\n     *\n     * @param start Start position.\n     * @param end End position. If not set, range will be collapsed at `start` position.\n     */\n    createRange(start, end) {\n        return new Range(start, end);\n    }\n    /**\n     * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n     */\n    createRangeOn(item) {\n        return Range._createOn(item);\n    }\n    /**\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @param element Element which is a parent for the range.\n     */\n    createRangeIn(element) {\n        return Range._createIn(element);\n    }\n    createSelection(...args) {\n        return new Selection(...args);\n    }\n    /**\n     * Creates placeholders for child elements of the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure\n     * `elementToStructure()`} conversion helper.\n     *\n     * ```ts\n     * const viewSlot = conversionApi.writer.createSlot();\n     * const viewPosition = conversionApi.writer.createPositionAt( viewElement, 0 );\n     *\n     * conversionApi.writer.insert( viewPosition, viewSlot );\n     * ```\n     *\n     * It could be filtered down to a specific subset of children (only `<foo>` model elements in this case):\n     *\n     * ```ts\n     * const viewSlot = conversionApi.writer.createSlot( node => node.is( 'element', 'foo' ) );\n     * const viewPosition = conversionApi.writer.createPositionAt( viewElement, 0 );\n     *\n     * conversionApi.writer.insert( viewPosition, viewSlot );\n     * ```\n     *\n     * While providing a filtered slot, make sure to provide slots for all child nodes. A single node can not be downcasted into\n     * multiple slots.\n     *\n     * **Note**: You should not change the order of nodes. View elements should be in the same order as model nodes.\n     *\n     * @param modeOrFilter The filter for child nodes.\n     * @returns The slot element to be placed in to the view structure while processing\n     * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure `elementToStructure()`}.\n     */\n    createSlot(modeOrFilter = 'children') {\n        if (!this._slotFactory) {\n            /**\n             * The `createSlot()` method is only allowed inside the `elementToStructure` downcast helper callback.\n             *\n             * @error view-writer-invalid-create-slot-context\n             */\n            throw new CKEditorError('view-writer-invalid-create-slot-context', this.document);\n        }\n        return this._slotFactory(this, modeOrFilter);\n    }\n    /**\n     * Registers a slot factory.\n     *\n     * @internal\n     * @param slotFactory The slot factory.\n     */\n    _registerSlotFactory(slotFactory) {\n        this._slotFactory = slotFactory;\n    }\n    /**\n     * Clears the registered slot factory.\n     *\n     * @internal\n     */\n    _clearSlotFactory() {\n        this._slotFactory = null;\n    }\n    /**\n     * Inserts a node or nodes at the specified position. Takes care of breaking attributes before insertion\n     * and merging them afterwards if requested by the breakAttributes param.\n     *\n     * @param position Insertion position.\n     * @param nodes Node or nodes to insert.\n     * @param breakAttributes Whether attributes should be broken.\n     * @returns Range around inserted nodes.\n     */\n    _insertNodes(position, nodes, breakAttributes) {\n        let parentElement;\n        // Break attributes on nodes that do exist in the model tree so they can have attributes, other elements\n        // can't have an attribute in model and won't get wrapped with an AttributeElement while down-casted.\n        if (breakAttributes) {\n            parentElement = getParentContainer(position);\n        }\n        else {\n            parentElement = position.parent.is('$text') ? position.parent.parent : position.parent;\n        }\n        if (!parentElement) {\n            /**\n             * Position's parent container cannot be found.\n             *\n             * @error view-writer-invalid-position-container\n             */\n            throw new CKEditorError('view-writer-invalid-position-container', this.document);\n        }\n        let insertionPosition;\n        if (breakAttributes) {\n            insertionPosition = this._breakAttributes(position, true);\n        }\n        else {\n            insertionPosition = position.parent.is('$text') ? breakTextNode(position) : position;\n        }\n        const length = parentElement._insertChild(insertionPosition.offset, nodes);\n        for (const node of nodes) {\n            this._addToClonedElementsGroup(node);\n        }\n        const endPosition = insertionPosition.getShiftedBy(length);\n        const start = this.mergeAttributes(insertionPosition);\n        // If start position was merged - move end position.\n        if (!start.isEqual(insertionPosition)) {\n            endPosition.offset--;\n        }\n        const end = this.mergeAttributes(endPosition);\n        return new Range(start, end);\n    }\n    /**\n     * Wraps children with provided `wrapElement`. Only children contained in `parent` element between\n     * `startOffset` and `endOffset` will be wrapped.\n     */\n    _wrapChildren(parent, startOffset, endOffset, wrapElement) {\n        let i = startOffset;\n        const wrapPositions = [];\n        while (i < endOffset) {\n            const child = parent.getChild(i);\n            const isText = child.is('$text');\n            const isAttribute = child.is('attributeElement');\n            //\n            // (In all examples, assume that `wrapElement` is `<span class=\"foo\">` element.)\n            //\n            // Check if `wrapElement` can be joined with the wrapped element. One of requirements is having same name.\n            // If possible, join elements.\n            //\n            // <p><span class=\"bar\">abc</span></p>  -->  <p><span class=\"foo bar\">abc</span></p>\n            //\n            if (isAttribute && this._wrapAttributeElement(wrapElement, child)) {\n                wrapPositions.push(new Position(parent, i));\n            }\n            //\n            // Wrap the child if it is not an attribute element or if it is an attribute element that should be inside\n            // `wrapElement` (due to priority).\n            //\n            // <p>abc</p>                   -->  <p><span class=\"foo\">abc</span></p>\n            // <p><strong>abc</strong></p>  -->  <p><span class=\"foo\"><strong>abc</strong></span></p>\n            else if (isText || !isAttribute || shouldABeOutsideB(wrapElement, child)) {\n                // Clone attribute.\n                const newAttribute = wrapElement._clone();\n                // Wrap current node with new attribute.\n                child._remove();\n                newAttribute._appendChild(child);\n                parent._insertChild(i, newAttribute);\n                this._addToClonedElementsGroup(newAttribute);\n                wrapPositions.push(new Position(parent, i));\n            }\n            //\n            // If other nested attribute is found and it wasn't wrapped (see above), continue wrapping inside it.\n            //\n            // <p><a href=\"foo.html\">abc</a></p>  -->  <p><a href=\"foo.html\"><span class=\"foo\">abc</span></a></p>\n            //\n            else /* if ( isAttribute ) */ {\n                this._wrapChildren(child, 0, child.childCount, wrapElement);\n            }\n            i++;\n        }\n        // Merge at each wrap.\n        let offsetChange = 0;\n        for (const position of wrapPositions) {\n            position.offset -= offsetChange;\n            // Do not merge with elements outside selected children.\n            if (position.offset == startOffset) {\n                continue;\n            }\n            const newPosition = this.mergeAttributes(position);\n            // If nodes were merged - other merge offsets will change.\n            if (!newPosition.isEqual(position)) {\n                offsetChange++;\n                endOffset--;\n            }\n        }\n        return Range._createFromParentsAndOffsets(parent, startOffset, parent, endOffset);\n    }\n    /**\n     * Unwraps children from provided `unwrapElement`. Only children contained in `parent` element between\n     * `startOffset` and `endOffset` will be unwrapped.\n     */\n    _unwrapChildren(parent, startOffset, endOffset, unwrapElement) {\n        let i = startOffset;\n        const unwrapPositions = [];\n        // Iterate over each element between provided offsets inside parent.\n        // We don't use tree walker or range iterator because we will be removing and merging potentially multiple nodes,\n        // so it could get messy. It is safer to it manually in this case.\n        while (i < endOffset) {\n            const child = parent.getChild(i);\n            // Skip all text nodes. There should be no container element's here either.\n            if (!child.is('attributeElement')) {\n                i++;\n                continue;\n            }\n            //\n            // (In all examples, assume that `unwrapElement` is `<span class=\"foo\">` element.)\n            //\n            // If the child is similar to the given attribute element, unwrap it - it will be completely removed.\n            //\n            // <p><span class=\"foo\">abc</span>xyz</p>  -->  <p>abcxyz</p>\n            //\n            if (child.isSimilar(unwrapElement)) {\n                const unwrapped = child.getChildren();\n                const count = child.childCount;\n                // Replace wrapper element with its children\n                child._remove();\n                parent._insertChild(i, unwrapped);\n                this._removeFromClonedElementsGroup(child);\n                // Save start and end position of moved items.\n                unwrapPositions.push(new Position(parent, i), new Position(parent, i + count));\n                // Skip elements that were unwrapped. Assuming there won't be another element to unwrap in child elements.\n                i += count;\n                endOffset += count - 1;\n                continue;\n            }\n            //\n            // If the child is not similar but is an attribute element, try partial unwrapping - remove the same attributes/styles/classes.\n            // Partial unwrapping will happen only if the elements have the same name.\n            //\n            // <p><span class=\"foo bar\">abc</span>xyz</p>  -->  <p><span class=\"bar\">abc</span>xyz</p>\n            // <p><i class=\"foo\">abc</i>xyz</p>            -->  <p><i class=\"foo\">abc</i>xyz</p>\n            //\n            if (this._unwrapAttributeElement(unwrapElement, child)) {\n                unwrapPositions.push(new Position(parent, i), new Position(parent, i + 1));\n                i++;\n                continue;\n            }\n            //\n            // If other nested attribute is found, look through it's children for elements to unwrap.\n            //\n            // <p><i><span class=\"foo\">abc</span></i><p>  -->  <p><i>abc</i><p>\n            //\n            this._unwrapChildren(child, 0, child.childCount, unwrapElement);\n            i++;\n        }\n        // Merge at each unwrap.\n        let offsetChange = 0;\n        for (const position of unwrapPositions) {\n            position.offset -= offsetChange;\n            // Do not merge with elements outside selected children.\n            if (position.offset == startOffset || position.offset == endOffset) {\n                continue;\n            }\n            const newPosition = this.mergeAttributes(position);\n            // If nodes were merged - other merge offsets will change.\n            if (!newPosition.isEqual(position)) {\n                offsetChange++;\n                endOffset--;\n            }\n        }\n        return Range._createFromParentsAndOffsets(parent, startOffset, parent, endOffset);\n    }\n    /**\n     * Helper function for `view.writer.wrap`. Wraps range with provided attribute element.\n     * This method will also merge newly added attribute element with its siblings whenever possible.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n     * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     *\n     * @returns New range after wrapping, spanning over wrapping attribute element.\n     */\n    _wrapRange(range, attribute) {\n        // Break attributes at range start and end.\n        const { start: breakStart, end: breakEnd } = this._breakAttributesRange(range, true);\n        const parentContainer = breakStart.parent;\n        // Wrap all children with attribute.\n        const newRange = this._wrapChildren(parentContainer, breakStart.offset, breakEnd.offset, attribute);\n        // Merge attributes at the both ends and return a new range.\n        const start = this.mergeAttributes(newRange.start);\n        // If start position was merged - move end position back.\n        if (!start.isEqual(newRange.start)) {\n            newRange.end.offset--;\n        }\n        const end = this.mergeAttributes(newRange.end);\n        return new Range(start, end);\n    }\n    /**\n     * Helper function for {@link #wrap}. Wraps position with provided attribute element.\n     * This method will also merge newly added attribute element with its siblings whenever possible.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n     * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n     *\n     * @returns New position after wrapping.\n     */\n    _wrapPosition(position, attribute) {\n        // Return same position when trying to wrap with attribute similar to position parent.\n        if (attribute.isSimilar(position.parent)) {\n            return movePositionToTextNode(position.clone());\n        }\n        // When position is inside text node - break it and place new position between two text nodes.\n        if (position.parent.is('$text')) {\n            position = breakTextNode(position);\n        }\n        // Create fake element that will represent position, and will not be merged with other attributes.\n        const fakeElement = this.createAttributeElement('_wrapPosition-fake-element');\n        fakeElement._priority = Number.POSITIVE_INFINITY;\n        fakeElement.isSimilar = () => false;\n        // Insert fake element in position location.\n        position.parent._insertChild(position.offset, fakeElement);\n        // Range around inserted fake attribute element.\n        const wrapRange = new Range(position, position.getShiftedBy(1));\n        // Wrap fake element with attribute (it will also merge if possible).\n        this.wrap(wrapRange, attribute);\n        // Remove fake element and place new position there.\n        const newPosition = new Position(fakeElement.parent, fakeElement.index);\n        fakeElement._remove();\n        // If position is placed between text nodes - merge them and return position inside.\n        const nodeBefore = newPosition.nodeBefore;\n        const nodeAfter = newPosition.nodeAfter;\n        if (nodeBefore instanceof Text && nodeAfter instanceof Text) {\n            return mergeTextNodes(nodeBefore, nodeAfter);\n        }\n        // If position is next to text node - move position inside.\n        return movePositionToTextNode(newPosition);\n    }\n    /**\n     * Wraps one {@link module:engine/view/attributeelement~AttributeElement AttributeElement} into another by\n     * merging them if possible. When merging is possible - all attributes, styles and classes are moved from wrapper\n     * element to element being wrapped.\n     *\n     * @param wrapper Wrapper AttributeElement.\n     * @param toWrap AttributeElement to wrap using wrapper element.\n     * @returns Returns `true` if elements are merged.\n     */\n    _wrapAttributeElement(wrapper, toWrap) {\n        if (!canBeJoined(wrapper, toWrap)) {\n            return false;\n        }\n        // Can't merge if name or priority differs.\n        if (wrapper.name !== toWrap.name || wrapper.priority !== toWrap.priority) {\n            return false;\n        }\n        // Check if attributes can be merged.\n        for (const key of wrapper.getAttributeKeys()) {\n            // Classes and styles should be checked separately.\n            if (key === 'class' || key === 'style') {\n                continue;\n            }\n            // If some attributes are different we cannot wrap.\n            if (toWrap.hasAttribute(key) && toWrap.getAttribute(key) !== wrapper.getAttribute(key)) {\n                return false;\n            }\n        }\n        // Check if styles can be merged.\n        for (const key of wrapper.getStyleNames()) {\n            if (toWrap.hasStyle(key) && toWrap.getStyle(key) !== wrapper.getStyle(key)) {\n                return false;\n            }\n        }\n        // Move all attributes/classes/styles from wrapper to wrapped AttributeElement.\n        for (const key of wrapper.getAttributeKeys()) {\n            // Classes and styles should be checked separately.\n            if (key === 'class' || key === 'style') {\n                continue;\n            }\n            // Move only these attributes that are not present - other are similar.\n            if (!toWrap.hasAttribute(key)) {\n                this.setAttribute(key, wrapper.getAttribute(key), toWrap);\n            }\n        }\n        for (const key of wrapper.getStyleNames()) {\n            if (!toWrap.hasStyle(key)) {\n                this.setStyle(key, wrapper.getStyle(key), toWrap);\n            }\n        }\n        for (const key of wrapper.getClassNames()) {\n            if (!toWrap.hasClass(key)) {\n                this.addClass(key, toWrap);\n            }\n        }\n        return true;\n    }\n    /**\n     * Unwraps {@link module:engine/view/attributeelement~AttributeElement AttributeElement} from another by removing\n     * corresponding attributes, classes and styles. All attributes, classes and styles from wrapper should be present\n     * inside element being unwrapped.\n     *\n     * @param wrapper Wrapper AttributeElement.\n     * @param toUnwrap AttributeElement to unwrap using wrapper element.\n     * @returns Returns `true` if elements are unwrapped.\n     **/\n    _unwrapAttributeElement(wrapper, toUnwrap) {\n        if (!canBeJoined(wrapper, toUnwrap)) {\n            return false;\n        }\n        // Can't unwrap if name or priority differs.\n        if (wrapper.name !== toUnwrap.name || wrapper.priority !== toUnwrap.priority) {\n            return false;\n        }\n        // Check if AttributeElement has all wrapper attributes.\n        for (const key of wrapper.getAttributeKeys()) {\n            // Classes and styles should be checked separately.\n            if (key === 'class' || key === 'style') {\n                continue;\n            }\n            // If some attributes are missing or different we cannot unwrap.\n            if (!toUnwrap.hasAttribute(key) || toUnwrap.getAttribute(key) !== wrapper.getAttribute(key)) {\n                return false;\n            }\n        }\n        // Check if AttributeElement has all wrapper classes.\n        if (!toUnwrap.hasClass(...wrapper.getClassNames())) {\n            return false;\n        }\n        // Check if AttributeElement has all wrapper styles.\n        for (const key of wrapper.getStyleNames()) {\n            // If some styles are missing or different we cannot unwrap.\n            if (!toUnwrap.hasStyle(key) || toUnwrap.getStyle(key) !== wrapper.getStyle(key)) {\n                return false;\n            }\n        }\n        // Remove all wrapper's attributes from unwrapped element.\n        for (const key of wrapper.getAttributeKeys()) {\n            // Classes and styles should be checked separately.\n            if (key === 'class' || key === 'style') {\n                continue;\n            }\n            this.removeAttribute(key, toUnwrap);\n        }\n        // Remove all wrapper's classes from unwrapped element.\n        this.removeClass(Array.from(wrapper.getClassNames()), toUnwrap);\n        // Remove all wrapper's styles from unwrapped element.\n        this.removeStyle(Array.from(wrapper.getStyleNames()), toUnwrap);\n        return true;\n    }\n    /**\n     * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at the boundaries of given range.\n     *\n     * @param range Range which `start` and `end` positions will be used to break attributes.\n     * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n     * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n     * @returns New range with located at break positions.\n     */\n    _breakAttributesRange(range, forceSplitText = false) {\n        const rangeStart = range.start;\n        const rangeEnd = range.end;\n        validateRangeContainer(range, this.document);\n        // Break at the collapsed position. Return new collapsed range.\n        if (range.isCollapsed) {\n            const position = this._breakAttributes(range.start, forceSplitText);\n            return new Range(position, position);\n        }\n        const breakEnd = this._breakAttributes(rangeEnd, forceSplitText);\n        const count = breakEnd.parent.childCount;\n        const breakStart = this._breakAttributes(rangeStart, forceSplitText);\n        // Calculate new break end offset.\n        breakEnd.offset += breakEnd.parent.childCount - count;\n        return new Range(breakStart, breakEnd);\n    }\n    /**\n     * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at given position.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-empty-element` when break position\n     * is placed inside {@link module:engine/view/emptyelement~EmptyElement EmptyElement}.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-ui-element` when break position\n     * is placed inside {@link module:engine/view/uielement~UIElement UIElement}.\n     *\n     * @param position Position where to break attributes.\n     * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n     * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n     * @returns New position after breaking the attributes.\n     */\n    _breakAttributes(position, forceSplitText = false) {\n        const positionOffset = position.offset;\n        const positionParent = position.parent;\n        // If position is placed inside EmptyElement - throw an exception as we cannot break inside.\n        if (position.parent.is('emptyElement')) {\n            /**\n             * Cannot break an `EmptyElement` instance.\n             *\n             * This error is thrown if\n             * {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes `DowncastWriter#breakAttributes()`}\n             * was executed in an incorrect position.\n             *\n             * @error view-writer-cannot-break-empty-element\n             */\n            throw new CKEditorError('view-writer-cannot-break-empty-element', this.document);\n        }\n        // If position is placed inside UIElement - throw an exception as we cannot break inside.\n        if (position.parent.is('uiElement')) {\n            /**\n             * Cannot break a `UIElement` instance.\n             *\n             * This error is thrown if\n             * {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes `DowncastWriter#breakAttributes()`}\n             * was executed in an incorrect position.\n             *\n             * @error view-writer-cannot-break-ui-element\n             */\n            throw new CKEditorError('view-writer-cannot-break-ui-element', this.document);\n        }\n        // If position is placed inside RawElement - throw an exception as we cannot break inside.\n        if (position.parent.is('rawElement')) {\n            /**\n             * Cannot break a `RawElement` instance.\n             *\n             * This error is thrown if\n             * {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes `DowncastWriter#breakAttributes()`}\n             * was executed in an incorrect position.\n             *\n             * @error view-writer-cannot-break-raw-element\n             */\n            throw new CKEditorError('view-writer-cannot-break-raw-element', this.document);\n        }\n        // There are no attributes to break and text nodes breaking is not forced.\n        if (!forceSplitText && positionParent.is('$text') && isContainerOrFragment(positionParent.parent)) {\n            return position.clone();\n        }\n        // Position's parent is container, so no attributes to break.\n        if (isContainerOrFragment(positionParent)) {\n            return position.clone();\n        }\n        // Break text and start again in new position.\n        if (positionParent.is('$text')) {\n            return this._breakAttributes(breakTextNode(position), forceSplitText);\n        }\n        const length = positionParent.childCount;\n        // <p>foo<b><u>bar{}</u></b></p>\n        // <p>foo<b><u>bar</u>[]</b></p>\n        // <p>foo<b><u>bar</u></b>[]</p>\n        if (positionOffset == length) {\n            const newPosition = new Position(positionParent.parent, positionParent.index + 1);\n            return this._breakAttributes(newPosition, forceSplitText);\n        }\n        else {\n            // <p>foo<b><u>{}bar</u></b></p>\n            // <p>foo<b>[]<u>bar</u></b></p>\n            // <p>foo{}<b><u>bar</u></b></p>\n            if (positionOffset === 0) {\n                const newPosition = new Position(positionParent.parent, positionParent.index);\n                return this._breakAttributes(newPosition, forceSplitText);\n            }\n            // <p>foo<b><u>b{}ar</u></b></p>\n            // <p>foo<b><u>b[]ar</u></b></p>\n            // <p>foo<b><u>b</u>[]<u>ar</u></b></p>\n            // <p>foo<b><u>b</u></b>[]<b><u>ar</u></b></p>\n            else {\n                const offsetAfter = positionParent.index + 1;\n                // Break element.\n                const clonedNode = positionParent._clone();\n                // Insert cloned node to position's parent node.\n                positionParent.parent._insertChild(offsetAfter, clonedNode);\n                this._addToClonedElementsGroup(clonedNode);\n                // Get nodes to move.\n                const count = positionParent.childCount - positionOffset;\n                const nodesToMove = positionParent._removeChildren(positionOffset, count);\n                // Move nodes to cloned node.\n                clonedNode._appendChild(nodesToMove);\n                // Create new position to work on.\n                const newPosition = new Position(positionParent.parent, offsetAfter);\n                return this._breakAttributes(newPosition, forceSplitText);\n            }\n        }\n    }\n    /**\n     * Stores the information that an {@link module:engine/view/attributeelement~AttributeElement attribute element} was\n     * added to the tree. Saves the reference to the group in the given element and updates the group, so other elements\n     * from the group now keep a reference to the given attribute element.\n     *\n     * The clones group can be obtained using {@link module:engine/view/attributeelement~AttributeElement#getElementsWithSameId}.\n     *\n     * Does nothing if added element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n     *\n     * @param element Attribute element to save.\n     */\n    _addToClonedElementsGroup(element) {\n        // Add only if the element is in document tree.\n        if (!element.root.is('rootElement')) {\n            return;\n        }\n        // Traverse the element's children recursively to find other attribute elements that also might got inserted.\n        // The loop is at the beginning so we can make fast returns later in the code.\n        if (element.is('element')) {\n            for (const child of element.getChildren()) {\n                this._addToClonedElementsGroup(child);\n            }\n        }\n        const id = element.id;\n        if (!id) {\n            return;\n        }\n        let group = this._cloneGroups.get(id);\n        if (!group) {\n            group = new Set();\n            this._cloneGroups.set(id, group);\n        }\n        group.add(element);\n        element._clonesGroup = group;\n    }\n    /**\n     * Removes all the information about the given {@link module:engine/view/attributeelement~AttributeElement attribute element}\n     * from its clones group.\n     *\n     * Keep in mind, that the element will still keep a reference to the group (but the group will not keep a reference to it).\n     * This allows to reference the whole group even if the element was already removed from the tree.\n     *\n     * Does nothing if the element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n     *\n     * @param element Attribute element to remove.\n     */\n    _removeFromClonedElementsGroup(element) {\n        // Traverse the element's children recursively to find other attribute elements that also got removed.\n        // The loop is at the beginning so we can make fast returns later in the code.\n        if (element.is('element')) {\n            for (const child of element.getChildren()) {\n                this._removeFromClonedElementsGroup(child);\n            }\n        }\n        const id = element.id;\n        if (!id) {\n            return;\n        }\n        const group = this._cloneGroups.get(id);\n        if (!group) {\n            return;\n        }\n        group.delete(element);\n        // Not removing group from element on purpose!\n        // If other parts of code have reference to this element, they will be able to get references to other elements from the group.\n    }\n}\n// Helper function for `view.writer.wrap`. Checks if given element has any children that are not ui elements.\nfunction _hasNonUiChildren(parent) {\n    return Array.from(parent.getChildren()).some(child => !child.is('uiElement'));\n}\n/**\n * The `attribute` passed to {@link module:engine/view/downcastwriter~DowncastWriter#wrap `DowncastWriter#wrap()`}\n * must be an instance of {@link module:engine/view/attributeelement~AttributeElement `AttributeElement`}.\n *\n * @error view-writer-wrap-invalid-attribute\n */\n/**\n * Returns first parent container of specified {@link module:engine/view/position~Position Position}.\n * Position's parent node is checked as first, then next parents are checked.\n * Note that {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment} is treated like a container.\n *\n * @param position Position used as a start point to locate parent container.\n * @returns Parent container element or `undefined` if container is not found.\n */\nfunction getParentContainer(position) {\n    let parent = position.parent;\n    while (!isContainerOrFragment(parent)) {\n        if (!parent) {\n            return undefined;\n        }\n        parent = parent.parent;\n    }\n    return parent;\n}\n/**\n * Checks if first {@link module:engine/view/attributeelement~AttributeElement AttributeElement} provided to the function\n * can be wrapped outside second element. It is done by comparing elements'\n * {@link module:engine/view/attributeelement~AttributeElement#priority priorities}, if both have same priority\n * {@link module:engine/view/element~Element#getIdentity identities} are compared.\n */\nfunction shouldABeOutsideB(a, b) {\n    if (a.priority < b.priority) {\n        return true;\n    }\n    else if (a.priority > b.priority) {\n        return false;\n    }\n    // When priorities are equal and names are different - use identities.\n    return a.getIdentity() < b.getIdentity();\n}\n/**\n * Returns new position that is moved to near text node. Returns same position if there is no text node before of after\n * specified position.\n *\n * ```html\n * <p>foo[]</p>  ->  <p>foo{}</p>\n * <p>[]foo</p>  ->  <p>{}foo</p>\n * ```\n *\n * @returns Position located inside text node or same position if there is no text nodes\n * before or after position location.\n */\nfunction movePositionToTextNode(position) {\n    const nodeBefore = position.nodeBefore;\n    if (nodeBefore && nodeBefore.is('$text')) {\n        return new Position(nodeBefore, nodeBefore.data.length);\n    }\n    const nodeAfter = position.nodeAfter;\n    if (nodeAfter && nodeAfter.is('$text')) {\n        return new Position(nodeAfter, 0);\n    }\n    return position;\n}\n/**\n * Breaks text node into two text nodes when possible.\n *\n * ```html\n * <p>foo{}bar</p> -> <p>foo[]bar</p>\n * <p>{}foobar</p> -> <p>[]foobar</p>\n * <p>foobar{}</p> -> <p>foobar[]</p>\n * ```\n *\n * @param position Position that need to be placed inside text node.\n * @returns New position after breaking text node.\n */\nfunction breakTextNode(position) {\n    if (position.offset == position.parent.data.length) {\n        return new Position(position.parent.parent, position.parent.index + 1);\n    }\n    if (position.offset === 0) {\n        return new Position(position.parent.parent, position.parent.index);\n    }\n    // Get part of the text that need to be moved.\n    const textToMove = position.parent.data.slice(position.offset);\n    // Leave rest of the text in position's parent.\n    position.parent._data = position.parent.data.slice(0, position.offset);\n    // Insert new text node after position's parent text node.\n    position.parent.parent._insertChild(position.parent.index + 1, new Text(position.root.document, textToMove));\n    // Return new position between two newly created text nodes.\n    return new Position(position.parent.parent, position.parent.index + 1);\n}\n/**\n * Merges two text nodes into first node. Removes second node and returns merge position.\n *\n * @param t1 First text node to merge. Data from second text node will be moved at the end of this text node.\n * @param t2 Second text node to merge. This node will be removed after merging.\n * @returns Position after merging text nodes.\n */\nfunction mergeTextNodes(t1, t2) {\n    // Merge text data into first text node and remove second one.\n    const nodeBeforeLength = t1.data.length;\n    t1._data += t2.data;\n    t2._remove();\n    return new Position(t1, nodeBeforeLength);\n}\nconst validNodesToInsert = [Text, AttributeElement, ContainerElement, EmptyElement, RawElement, UIElement];\n/**\n * Checks if provided nodes are valid to insert.\n *\n * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n * contains instances that are not supported ones (see error description for valid ones.\n */\nfunction validateNodesToInsert(nodes, errorContext) {\n    for (const node of nodes) {\n        if (!validNodesToInsert.some((validNode => node instanceof validNode))) { // eslint-disable-line no-use-before-define\n            /**\n             * One of the nodes to be inserted is of an invalid type.\n             *\n             * Nodes to be inserted with {@link module:engine/view/downcastwriter~DowncastWriter#insert `DowncastWriter#insert()`} should be\n             * of the following types:\n             *\n             * * {@link module:engine/view/attributeelement~AttributeElement AttributeElement},\n             * * {@link module:engine/view/containerelement~ContainerElement ContainerElement},\n             * * {@link module:engine/view/emptyelement~EmptyElement EmptyElement},\n             * * {@link module:engine/view/uielement~UIElement UIElement},\n             * * {@link module:engine/view/rawelement~RawElement RawElement},\n             * * {@link module:engine/view/text~Text Text}.\n             *\n             * @error view-writer-insert-invalid-node-type\n             */\n            throw new CKEditorError('view-writer-insert-invalid-node-type', errorContext);\n        }\n        if (!node.is('$text')) {\n            validateNodesToInsert(node.getChildren(), errorContext);\n        }\n    }\n}\n/**\n * Checks if node is ContainerElement or DocumentFragment, because in most cases they should be treated the same way.\n *\n * @returns Returns `true` if node is instance of ContainerElement or DocumentFragment.\n */\nfunction isContainerOrFragment(node) {\n    return node && (node.is('containerElement') || node.is('documentFragment'));\n}\n/**\n * Checks if {@link module:engine/view/range~Range#start range start} and {@link module:engine/view/range~Range#end range end} are placed\n * inside same {@link module:engine/view/containerelement~ContainerElement container element}.\n * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when validation fails.\n */\nfunction validateRangeContainer(range, errorContext) {\n    const startContainer = getParentContainer(range.start);\n    const endContainer = getParentContainer(range.end);\n    if (!startContainer || !endContainer || startContainer !== endContainer) {\n        /**\n         * The container of the given range is invalid.\n         *\n         * This may happen if {@link module:engine/view/range~Range#start range start} and\n         * {@link module:engine/view/range~Range#end range end} positions are not placed inside the same container element or\n         * a parent container for these positions cannot be found.\n         *\n         * Methods like {@link module:engine/view/downcastwriter~DowncastWriter#wrap `DowncastWriter#remove()`},\n         * {@link module:engine/view/downcastwriter~DowncastWriter#wrap `DowncastWriter#clean()`},\n         * {@link module:engine/view/downcastwriter~DowncastWriter#wrap `DowncastWriter#wrap()`},\n         * {@link module:engine/view/downcastwriter~DowncastWriter#wrap `DowncastWriter#unwrap()`} need to be called\n         * on a range that has its start and end positions located in the same container element. Both positions can be\n         * nested within other elements (e.g. an attribute element) but the closest container ancestor must be the same.\n         *\n         * @error view-writer-invalid-range-container\n         */\n        throw new CKEditorError('view-writer-invalid-range-container', errorContext);\n    }\n}\n/**\n * Checks if two attribute elements can be joined together. Elements can be joined together if, and only if\n * they do not have ids specified.\n */\nfunction canBeJoined(a, b) {\n    return a.id === null && b.id === null;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { keyCodes, isText } from '@ckeditor/ckeditor5-utils';\n/**\n * Set of utilities related to handling block and inline fillers.\n *\n * Browsers do not allow to put caret in elements which does not have height. Because of it, we need to fill all\n * empty elements which should be selectable with elements or characters called \"fillers\". Unfortunately there is no one\n * universal filler, this is why two types are uses:\n *\n * * Block filler is an element which fill block elements, like `<p>`. CKEditor uses `<br>` as a block filler during the editing,\n * as browsers do natively. So instead of an empty `<p>` there will be `<p><br></p>`. The advantage of block filler is that\n * it is transparent for the selection, so when the caret is before the `<br>` and user presses right arrow he will be\n * moved to the next paragraph, not after the `<br>`. The disadvantage is that it breaks a block, so it can not be used\n * in the middle of a line of text. The {@link module:engine/view/filler~BR_FILLER `<br>` filler} can be replaced with any other\n * character in the data output, for instance {@link module:engine/view/filler~NBSP_FILLER non-breaking space} or\n * {@link module:engine/view/filler~MARKED_NBSP_FILLER marked non-breaking space}.\n *\n * * Inline filler is a filler which does not break a line of text, so it can be used inside the text, for instance in the empty\n * `<b>` surrendered by text: `foo<b></b>bar`, if we want to put the caret there. CKEditor uses a sequence of the zero-width\n * spaces as an {@link module:engine/view/filler~INLINE_FILLER inline filler} having the predetermined\n * {@link module:engine/view/filler~INLINE_FILLER_LENGTH length}. A sequence is used, instead of a single character to\n * avoid treating random zero-width spaces as the inline filler. Disadvantage of the inline filler is that it is not\n * transparent for the selection. The arrow key moves the caret between zero-width spaces characters, so the additional\n * code is needed to handle the caret.\n *\n * Both inline and block fillers are handled by the {@link module:engine/view/renderer~Renderer renderer} and are not present in the\n * view.\n *\n * @module engine/view/filler\n */\n/**\n * Non-breaking space filler creator. This function creates the `&nbsp;` text node.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~MARKED_NBSP_FILLER\n * @see module:engine/view/filler~BR_FILLER\n */\nexport const NBSP_FILLER = (domDocument) => domDocument.createTextNode('\\u00A0');\n/**\n * Marked non-breaking space filler creator. This function creates the `<span data-cke-filler=\"true\">&nbsp;</span>` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @see module:engine/view/filler~BR_FILLER\n */\nexport const MARKED_NBSP_FILLER = (domDocument) => {\n    const span = domDocument.createElement('span');\n    span.dataset.ckeFiller = 'true';\n    span.innerText = '\\u00A0';\n    return span;\n};\n/**\n * `<br>` filler creator. This function creates the `<br data-cke-filler=\"true\">` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @see module:engine/view/filler~MARKED_NBSP_FILLER\n */\nexport const BR_FILLER = (domDocument) => {\n    const fillerBr = domDocument.createElement('br');\n    fillerBr.dataset.ckeFiller = 'true';\n    return fillerBr;\n};\n/**\n * Length of the {@link module:engine/view/filler~INLINE_FILLER INLINE_FILLER}.\n */\nexport const INLINE_FILLER_LENGTH = 7;\n/**\n * Inline filler which is a sequence of the word joiners.\n */\nexport const INLINE_FILLER = '\\u2060'.repeat(INLINE_FILLER_LENGTH);\n/**\n * Checks if the node is a text node which starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n * ```ts\n * startsWithFiller( document.createTextNode( INLINE_FILLER ) ); // true\n * startsWithFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // true\n * startsWithFiller( document.createTextNode( 'foo' ) ); // false\n * startsWithFiller( document.createElement( 'p' ) ); // false\n * ```\n *\n * @param domNode DOM node.\n * @returns True if the text node starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n */\nexport function startsWithFiller(domNode) {\n    if (typeof domNode == 'string') {\n        return domNode.substr(0, INLINE_FILLER_LENGTH) === INLINE_FILLER;\n    }\n    return isText(domNode) && (domNode.data.substr(0, INLINE_FILLER_LENGTH) === INLINE_FILLER);\n}\n/**\n * Checks if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n * ```ts\n * isInlineFiller( document.createTextNode( INLINE_FILLER ) ); // true\n * isInlineFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // false\n * ```\n *\n * @param domText DOM text node.\n * @returns True if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n */\nexport function isInlineFiller(domText) {\n    return domText.data.length == INLINE_FILLER_LENGTH && startsWithFiller(domText);\n}\n/**\n * Get string data from the text node, removing an {@link module:engine/view/filler~INLINE_FILLER inline filler} from it,\n * if text node contains it.\n *\n * ```ts\n * getDataWithoutFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ) == 'foo' // true\n * getDataWithoutFiller( document.createTextNode( 'foo' ) ) == 'foo' // true\n * ```\n *\n * @param domText DOM text node, possible with inline filler.\n * @returns Data without filler.\n */\nexport function getDataWithoutFiller(domText) {\n    const data = typeof domText == 'string' ? domText : domText.data;\n    if (startsWithFiller(domText)) {\n        return data.slice(INLINE_FILLER_LENGTH);\n    }\n    return data;\n}\n/**\n * Assign key observer which move cursor from the end of the inline filler to the beginning of it when\n * the left arrow is pressed, so the filler does not break navigation.\n *\n * @param view View controller instance we should inject quirks handling on.\n */\nexport function injectQuirksHandling(view) {\n    view.document.on('arrowKey', jumpOverInlineFiller, { priority: 'low' });\n}\n/**\n * Move cursor from the end of the inline filler to the beginning of it when, so the filler does not break navigation.\n */\nfunction jumpOverInlineFiller(evt, data) {\n    if (data.keyCode == keyCodes.arrowleft) {\n        const domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n        if (domSelection.rangeCount == 1 && domSelection.getRangeAt(0).collapsed) {\n            const domParent = domSelection.getRangeAt(0).startContainer;\n            const domOffset = domSelection.getRangeAt(0).startOffset;\n            if (startsWithFiller(domParent) && domOffset <= INLINE_FILLER_LENGTH) {\n                domSelection.collapse(domParent, 0);\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/renderer\n */\nimport ViewText from './text.js';\nimport ViewPosition from './position.js';\nimport { INLINE_FILLER, INLINE_FILLER_LENGTH, startsWithFiller, isInlineFiller } from './filler.js';\nimport { CKEditorError, ObservableMixin, diff, env, fastDiff, insertAt, isComment, isNode, isText, remove, indexOf } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/renderer.css';\n/**\n * Renderer is responsible for updating the DOM structure and the DOM selection based on\n * the {@link module:engine/view/renderer~Renderer#markToSync information about updated view nodes}.\n * In other words, it renders the view to the DOM.\n *\n * Its main responsibility is to make only the necessary, minimal changes to the DOM. However, unlike in many\n * virtual DOM implementations, the primary reason for doing minimal changes is not the performance but ensuring\n * that native editing features such as text composition, autocompletion, spell checking, selection's x-index are\n * affected as little as possible.\n *\n * Renderer uses {@link module:engine/view/domconverter~DomConverter} to transform view nodes and positions\n * to and from the DOM.\n */\nexport default class Renderer extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a renderer instance.\n     *\n     * @param domConverter Converter instance.\n     * @param selection View selection.\n     */\n    constructor(domConverter, selection) {\n        super();\n        /**\n         * Set of DOM Documents instances.\n         */\n        this.domDocuments = new Set();\n        /**\n         * Set of nodes which attributes changed and may need to be rendered.\n         */\n        this.markedAttributes = new Set();\n        /**\n         * Set of elements which child lists changed and may need to be rendered.\n         */\n        this.markedChildren = new Set();\n        /**\n         * Set of text nodes which text data changed and may need to be rendered.\n         */\n        this.markedTexts = new Set();\n        /**\n         * The text node in which the inline filler was rendered.\n         */\n        this._inlineFiller = null;\n        /**\n         * DOM element containing fake selection.\n         */\n        this._fakeSelectionContainer = null;\n        this.domConverter = domConverter;\n        this.selection = selection;\n        this.set('isFocused', false);\n        this.set('isSelecting', false);\n        this.set('isComposing', false);\n        // Rendering the selection and inline filler manipulation should be postponed in (non-Android) Blink until the user finishes\n        // creating the selection in DOM to avoid accidental selection collapsing\n        // (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n        // When the user stops selecting, all pending changes should be rendered ASAP, though.\n        if (env.isBlink && !env.isAndroid) {\n            this.on('change:isSelecting', () => {\n                if (!this.isSelecting) {\n                    this.render();\n                }\n            });\n        }\n    }\n    /**\n     * Marks a view node to be updated in the DOM by {@link #render `render()`}.\n     *\n     * Note that only view nodes whose parents have corresponding DOM elements need to be marked to be synchronized.\n     *\n     * @see #markedAttributes\n     * @see #markedChildren\n     * @see #markedTexts\n     *\n     * @param type Type of the change.\n     * @param node ViewNode to be marked.\n     */\n    markToSync(type, node) {\n        if (type === 'text') {\n            if (this.domConverter.mapViewToDom(node.parent)) {\n                this.markedTexts.add(node);\n            }\n        }\n        else {\n            // If the node has no DOM element it is not rendered yet,\n            // its children/attributes do not need to be marked to be sync.\n            if (!this.domConverter.mapViewToDom(node)) {\n                return;\n            }\n            if (type === 'attributes') {\n                this.markedAttributes.add(node);\n            }\n            else if (type === 'children') {\n                this.markedChildren.add(node);\n            }\n            else {\n                // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                const unreachable = type;\n                /**\n                 * Unknown type passed to Renderer.markToSync.\n                 *\n                 * @error view-renderer-unknown-type\n                 */\n                throw new CKEditorError('view-renderer-unknown-type', this);\n            }\n        }\n    }\n    /**\n     * Renders all buffered changes ({@link #markedAttributes}, {@link #markedChildren} and {@link #markedTexts}) and\n     * the current view selection (if needed) to the DOM by applying a minimal set of changes to it.\n     *\n     * Renderer tries not to break the text composition (e.g. IME) and x-index of the selection,\n     * so it does as little as it is needed to update the DOM.\n     *\n     * Renderer also handles {@link module:engine/view/filler fillers}. Especially, it checks if the inline filler is needed\n     * at the selection position and adds or removes it. To prevent breaking text composition inline filler will not be\n     * removed as long as the selection is in the text node which needed it at first.\n     */\n    render() {\n        // Ignore rendering while in the composition mode. Composition events are not cancellable and browser will modify the DOM tree.\n        // All marked elements, attributes, etc. will wait until next render after the composition ends.\n        // On Android composition events are immediately applied to the model, so we don't need to skip rendering,\n        // and we should not do it because the difference between view and DOM could lead to position mapping problems.\n        if (this.isComposing && !env.isAndroid) {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[Renderer]%c Rendering aborted while isComposing.',\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-style: italic'\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            return;\n        }\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.group( '%c[Renderer]%c Rendering',\n        // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: bold'\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        let inlineFillerPosition = null;\n        const isInlineFillerRenderingPossible = env.isBlink && !env.isAndroid ? !this.isSelecting : true;\n        // Refresh mappings.\n        for (const element of this.markedChildren) {\n            this._updateChildrenMappings(element);\n        }\n        // Don't manipulate inline fillers while the selection is being made in (non-Android) Blink to prevent accidental\n        // DOM selection collapsing\n        // (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n        if (isInlineFillerRenderingPossible) {\n            // There was inline filler rendered in the DOM but it's not\n            // at the selection position any more, so we can remove it\n            // (cause even if it's needed, it must be placed in another location).\n            if (this._inlineFiller && !this._isSelectionInInlineFiller()) {\n                this._removeInlineFiller();\n            }\n            // If we've got the filler, let's try to guess its position in the view.\n            if (this._inlineFiller) {\n                inlineFillerPosition = this._getInlineFillerPosition();\n            }\n            // Otherwise, if it's needed, create it at the selection position.\n            else if (this._needsInlineFillerAtSelection()) {\n                inlineFillerPosition = this.selection.getFirstPosition();\n                // Do not use `markToSync` so it will be added even if the parent is already added.\n                this.markedChildren.add(inlineFillerPosition.parent);\n            }\n        }\n        // Make sure the inline filler has any parent, so it can be mapped to view position by DomConverter.\n        else if (this._inlineFiller && this._inlineFiller.parentNode) {\n            // While the user is making selection, preserve the inline filler at its original position.\n            inlineFillerPosition = this.domConverter.domPositionToView(this._inlineFiller);\n            // While down-casting the document selection attributes, all existing empty\n            // attribute elements (for selection position) are removed from the view and DOM,\n            // so make sure that we were able to map filler position.\n            // https://github.com/ckeditor/ckeditor5/issues/12026\n            if (inlineFillerPosition && inlineFillerPosition.parent.is('$text')) {\n                // The inline filler position is expected to be before the text node.\n                inlineFillerPosition = ViewPosition._createBefore(inlineFillerPosition.parent);\n            }\n        }\n        for (const element of this.markedAttributes) {\n            this._updateAttrs(element);\n        }\n        for (const element of this.markedChildren) {\n            this._updateChildren(element, { inlineFillerPosition });\n        }\n        for (const node of this.markedTexts) {\n            if (!this.markedChildren.has(node.parent) && this.domConverter.mapViewToDom(node.parent)) {\n                this._updateText(node, { inlineFillerPosition });\n            }\n        }\n        // * Check whether the inline filler is required and where it really is in the DOM.\n        //   At this point in most cases it will be in the DOM, but there are exceptions.\n        //   For example, if the inline filler was deep in the created DOM structure, it will not be created.\n        //   Similarly, if it was removed at the beginning of this function and then neither text nor children were updated,\n        //   it will not be present. Fix those and similar scenarios.\n        // * Don't manipulate inline fillers while the selection is being made in (non-Android) Blink to prevent accidental\n        //   DOM selection collapsing\n        //   (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n        if (isInlineFillerRenderingPossible) {\n            if (inlineFillerPosition) {\n                const fillerDomPosition = this.domConverter.viewPositionToDom(inlineFillerPosition);\n                const domDocument = fillerDomPosition.parent.ownerDocument;\n                if (!startsWithFiller(fillerDomPosition.parent)) {\n                    // Filler has not been created at filler position. Create it now.\n                    this._inlineFiller = addInlineFiller(domDocument, fillerDomPosition.parent, fillerDomPosition.offset);\n                }\n                else {\n                    // Filler has been found, save it.\n                    this._inlineFiller = fillerDomPosition.parent;\n                }\n            }\n            else {\n                // There is no filler needed.\n                this._inlineFiller = null;\n            }\n        }\n        // First focus the new editing host, then update the selection.\n        // Otherwise, FF may throw an error (https://github.com/ckeditor/ckeditor5/issues/721).\n        this._updateFocus();\n        this._updateSelection();\n        this.domConverter._clearTemporaryCustomProperties();\n        this.markedTexts.clear();\n        this.markedAttributes.clear();\n        this.markedChildren.clear();\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n        // @if CK_DEBUG_TYPING // }\n    }\n    /**\n     * Updates mappings of view element's children.\n     *\n     * Children that were replaced in the view structure by similar elements (same tag name) are treated as 'replaced'.\n     * This means that their mappings can be updated so the new view elements are mapped to the existing DOM elements.\n     * Thanks to that these elements do not need to be re-rendered completely.\n     *\n     * @param viewElement The view element whose children mappings will be updated.\n     */\n    _updateChildrenMappings(viewElement) {\n        const domElement = this.domConverter.mapViewToDom(viewElement);\n        if (!domElement) {\n            // If there is no `domElement` it means that it was already removed from DOM and there is no need to process it.\n            return;\n        }\n        // Removing nodes from the DOM as we iterate can cause `actualDomChildren`\n        // (which is a live-updating `NodeList`) to get out of sync with the\n        // indices that we compute as we iterate over `actions`.\n        // This would produce incorrect element mappings.\n        //\n        // Converting live list to an array to make the list static.\n        const actualDomChildren = Array.from(domElement.childNodes);\n        const expectedDomChildren = Array.from(this.domConverter.viewChildrenToDom(viewElement, { withChildren: false }));\n        const diff = this._diffNodeLists(actualDomChildren, expectedDomChildren);\n        const actions = this._findUpdateActions(diff, actualDomChildren, expectedDomChildren, areSimilarElements);\n        if (actions.indexOf('update') !== -1) {\n            const counter = { equal: 0, insert: 0, delete: 0 };\n            for (const action of actions) {\n                if (action === 'update') {\n                    const insertIndex = counter.equal + counter.insert;\n                    const deleteIndex = counter.equal + counter.delete;\n                    const viewChild = viewElement.getChild(insertIndex);\n                    // UIElement and RawElement are special cases. Their children are not stored in a view (#799)\n                    // so we cannot use them with replacing flow (since they use view children during rendering\n                    // which will always result in rendering empty elements).\n                    if (viewChild && !viewChild.is('uiElement') && !viewChild.is('rawElement')) {\n                        this._updateElementMappings(viewChild, actualDomChildren[deleteIndex]);\n                    }\n                    remove(expectedDomChildren[insertIndex]);\n                    counter.equal++;\n                }\n                else {\n                    counter[action]++;\n                }\n            }\n        }\n    }\n    /**\n     * Updates mappings of a given view element.\n     *\n     * @param viewElement The view element whose mappings will be updated.\n     * @param domElement The DOM element representing the given view element.\n     */\n    _updateElementMappings(viewElement, domElement) {\n        // Remap 'DomConverter' bindings.\n        this.domConverter.unbindDomElement(domElement);\n        this.domConverter.bindElements(domElement, viewElement);\n        // View element may have children which needs to be updated, but are not marked, mark them to update.\n        this.markedChildren.add(viewElement);\n        // Because we replace new view element mapping with the existing one, the corresponding DOM element\n        // will not be rerendered. The new view element may have different attributes than the previous one.\n        // Since its corresponding DOM element will not be rerendered, new attributes will not be added\n        // to the DOM, so we need to mark it here to make sure its attributes gets updated. See #1427 for more\n        // detailed case study.\n        // Also there are cases where replaced element is removed from the view structure and then has\n        // its attributes changed or removed. In such cases the element will not be present in `markedAttributes`\n        // and also may be the same (`element.isSimilar()`) as the reused element not having its attributes updated.\n        // To prevent such situations we always mark reused element to have its attributes rerenderd (#1560).\n        this.markedAttributes.add(viewElement);\n    }\n    /**\n     * Gets the position of the inline filler based on the current selection.\n     * Here, we assume that we know that the filler is needed and\n     * {@link #_isSelectionInInlineFiller is at the selection position}, and, since it is needed,\n     * it is somewhere at the selection position.\n     *\n     * Note: The filler position cannot be restored based on the filler's DOM text node, because\n     * when this method is called (before rendering), the bindings will often be broken. View-to-DOM\n     * bindings are only dependable after rendering.\n     */\n    _getInlineFillerPosition() {\n        const firstPos = this.selection.getFirstPosition();\n        if (firstPos.parent.is('$text')) {\n            return ViewPosition._createBefore(firstPos.parent);\n        }\n        else {\n            return firstPos;\n        }\n    }\n    /**\n     * Returns `true` if the selection has not left the inline filler's text node.\n     * If it is `true`, it means that the filler had been added for a reason and the selection did not\n     * leave the filler's text node. For example, the user can be in the middle of a composition so it should not be touched.\n     *\n     * @returns `true` if the inline filler and selection are in the same place.\n     */\n    _isSelectionInInlineFiller() {\n        if (this.selection.rangeCount != 1 || !this.selection.isCollapsed) {\n            return false;\n        }\n        // Note, we can't check if selection's position equals position of the\n        // this._inlineFiller node, because of #663. We may not be able to calculate\n        // the filler's position in the view at this stage.\n        // Instead, we check it the other way – whether selection is anchored in\n        // that text node or next to it.\n        // Possible options are:\n        // \"FILLER{}\"\n        // \"FILLERadded-text{}\"\n        const selectionPosition = this.selection.getFirstPosition();\n        const position = this.domConverter.viewPositionToDom(selectionPosition);\n        if (position && isText(position.parent) && startsWithFiller(position.parent)) {\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Removes the inline filler.\n     */\n    _removeInlineFiller() {\n        const domFillerNode = this._inlineFiller;\n        // Something weird happened and the stored node doesn't contain the filler's text.\n        if (!startsWithFiller(domFillerNode)) {\n            /**\n             * The inline filler node was lost. Most likely, something overwrote the filler text node\n             * in the DOM.\n             *\n             * @error view-renderer-filler-was-lost\n             */\n            throw new CKEditorError('view-renderer-filler-was-lost', this);\n        }\n        if (isInlineFiller(domFillerNode)) {\n            domFillerNode.remove();\n        }\n        else {\n            domFillerNode.data = domFillerNode.data.substr(INLINE_FILLER_LENGTH);\n        }\n        this._inlineFiller = null;\n    }\n    /**\n     * Checks if the inline {@link module:engine/view/filler filler} should be added.\n     *\n     * @returns `true` if the inline filler should be added.\n     */\n    _needsInlineFillerAtSelection() {\n        if (this.selection.rangeCount != 1 || !this.selection.isCollapsed) {\n            return false;\n        }\n        const selectionPosition = this.selection.getFirstPosition();\n        const selectionParent = selectionPosition.parent;\n        const selectionOffset = selectionPosition.offset;\n        // If there is no DOM root we do not care about fillers.\n        if (!this.domConverter.mapViewToDom(selectionParent.root)) {\n            return false;\n        }\n        if (!(selectionParent.is('element'))) {\n            return false;\n        }\n        // Prevent adding inline filler inside elements with contenteditable=false.\n        // https://github.com/ckeditor/ckeditor5-engine/issues/1170\n        if (!isEditable(selectionParent)) {\n            return false;\n        }\n        const nodeBefore = selectionPosition.nodeBefore;\n        const nodeAfter = selectionPosition.nodeAfter;\n        if (nodeBefore instanceof ViewText || nodeAfter instanceof ViewText) {\n            return false;\n        }\n        // We have block filler, we do not need inline one.\n        if (selectionOffset === selectionParent.getFillerOffset() && (!nodeBefore || !nodeBefore.is('element', 'br'))) {\n            return false;\n        }\n        // Do not use inline filler while typing outside inline elements on Android.\n        // The deleteContentBackward would remove part of the inline filler instead of removing last letter in a link.\n        if (env.isAndroid && (nodeBefore || nodeAfter)) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Checks if text needs to be updated and possibly updates it.\n     *\n     * @param viewText View text to update.\n     * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n     */\n    _updateText(viewText, options) {\n        const domText = this.domConverter.findCorrespondingDomText(viewText);\n        const newDomText = this.domConverter.viewToDom(viewText);\n        let expectedText = newDomText.data;\n        const filler = options.inlineFillerPosition;\n        if (filler && filler.parent == viewText.parent && filler.offset == viewText.index) {\n            expectedText = INLINE_FILLER + expectedText;\n        }\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.group( '%c[Renderer]%c Update text',\n        // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: normal'\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        this._updateTextNode(domText, expectedText);\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n        // @if CK_DEBUG_TYPING // }\n    }\n    /**\n     * Checks if attribute list needs to be updated and possibly updates it.\n     *\n     * @param viewElement The view element to update.\n     */\n    _updateAttrs(viewElement) {\n        const domElement = this.domConverter.mapViewToDom(viewElement);\n        if (!domElement) {\n            // If there is no `domElement` it means that 'viewElement' is outdated as its mapping was updated\n            // in 'this._updateChildrenMappings()'. There is no need to process it as new view element which\n            // replaced old 'viewElement' mapping was also added to 'this.markedAttributes'\n            // in 'this._updateChildrenMappings()' so it will be processed separately.\n            return;\n        }\n        // Remove attributes from DOM elements if they do not exist in the view.\n        //\n        // Note: It is important to first remove DOM attributes and then set new ones, because some view attributes may be renamed\n        // as they are set on DOM (due to unsafe attributes handling). If we set the view attribute first, and then remove\n        // non-existing DOM attributes, then we would remove the attribute that we just set.\n        for (const domAttr of domElement.attributes) {\n            const key = domAttr.name;\n            // All other attributes not present in the DOM should be removed.\n            if (!viewElement.hasAttribute(key)) {\n                this.domConverter.removeDomElementAttribute(domElement, key);\n            }\n        }\n        // Add or overwrite attributes.\n        for (const key of viewElement.getAttributeKeys()) {\n            this.domConverter.setDomElementAttribute(domElement, key, viewElement.getAttribute(key), viewElement);\n        }\n    }\n    /**\n     * Checks if elements child list needs to be updated and possibly updates it.\n     *\n     * Note that on Android, to reduce the risk of composition breaks, it tries to update data of an existing\n     * child text nodes instead of replacing them completely.\n     *\n     * @param viewElement View element to update.\n     * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n     */\n    _updateChildren(viewElement, options) {\n        const domElement = this.domConverter.mapViewToDom(viewElement);\n        if (!domElement) {\n            // If there is no `domElement` it means that it was already removed from DOM.\n            // There is no need to process it. It will be processed when re-inserted.\n            return;\n        }\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.group( '%c[Renderer]%c Update children',\n        // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: normal'\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        // IME on Android inserts a new text node while typing after a link\n        // instead of updating an existing text node that follows the link.\n        // We must normalize those text nodes so the diff won't get confused.\n        // https://github.com/ckeditor/ckeditor5/issues/12574.\n        if (env.isAndroid) {\n            let previousDomNode = null;\n            for (const domNode of Array.from(domElement.childNodes)) {\n                if (previousDomNode && isText(previousDomNode) && isText(domNode)) {\n                    domElement.normalize();\n                    break;\n                }\n                previousDomNode = domNode;\n            }\n        }\n        const inlineFillerPosition = options.inlineFillerPosition;\n        const actualDomChildren = domElement.childNodes;\n        const expectedDomChildren = Array.from(this.domConverter.viewChildrenToDom(viewElement, { bind: true }));\n        // Inline filler element has to be created as it is present in the DOM, but not in the view. It is required\n        // during diffing so text nodes could be compared correctly and also during rendering to maintain\n        // proper order and indexes while updating the DOM.\n        if (inlineFillerPosition && inlineFillerPosition.parent === viewElement) {\n            addInlineFiller(domElement.ownerDocument, expectedDomChildren, inlineFillerPosition.offset);\n        }\n        const diff = this._diffNodeLists(actualDomChildren, expectedDomChildren);\n        // We need to make sure that we update the existing text node and not replace it with another one.\n        // The composition and different \"language\" browser extensions are fragile to text node being completely replaced.\n        const actions = this._findUpdateActions(diff, actualDomChildren, expectedDomChildren, areTextNodes);\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping && actions.every( a => a == 'equal' ) ) {\n        // @if CK_DEBUG_TYPING // \tconsole.info( '%c[Renderer]%c Nothing to update.',\n        // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-style: italic'\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        let i = 0;\n        const nodesToUnbind = new Set();\n        // Handle deletions first.\n        // This is to prevent a situation where an element that already exists in `actualDomChildren` is inserted at a different\n        // index in `actualDomChildren`. Since `actualDomChildren` is a `NodeList`, this works like move, not like an insert,\n        // and it disrupts the whole algorithm. See https://github.com/ckeditor/ckeditor5/issues/6367.\n        //\n        // It doesn't matter in what order we remove or add nodes, as long as we remove and add correct nodes at correct indexes.\n        for (const action of actions) {\n            if (action === 'delete') {\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING //\tconst node = actualDomChildren[ i ];\n                // @if CK_DEBUG_TYPING // \tif ( isText( node ) ) {\n                // @if CK_DEBUG_TYPING // \t\tconsole.info( '%c[Renderer]%c Remove text node' +\n                // @if CK_DEBUG_TYPING // \t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n                // @if CK_DEBUG_TYPING // \t\t\t`%c${ _escapeTextNodeData( node.data ) }%c (${ node.data.length })`,\n                // @if CK_DEBUG_TYPING // \t\t\t'color: green; font-weight: bold',\n                // @if CK_DEBUG_TYPING // \t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '', 'color: blue', ''\n                // @if CK_DEBUG_TYPING // \t\t);\n                // @if CK_DEBUG_TYPING // \t} else {\n                // @if CK_DEBUG_TYPING // \t\tconsole.info( '%c[Renderer]%c Remove element' +\n                // @if CK_DEBUG_TYPING // \t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: `,\n                // @if CK_DEBUG_TYPING // \t\t\t'color: green; font-weight: bold',\n                // @if CK_DEBUG_TYPING // \t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n                // @if CK_DEBUG_TYPING // \t\t\tnode\n                // @if CK_DEBUG_TYPING // \t\t);\n                // @if CK_DEBUG_TYPING // \t}\n                // @if CK_DEBUG_TYPING // }\n                nodesToUnbind.add(actualDomChildren[i]);\n                remove(actualDomChildren[i]);\n            }\n            else if (action === 'equal' || action === 'update') {\n                i++;\n            }\n        }\n        i = 0;\n        for (const action of actions) {\n            if (action === 'insert') {\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING //\tconst node = expectedDomChildren[ i ];\n                // @if CK_DEBUG_TYPING //\tif ( isText( node ) ) {\n                // @if CK_DEBUG_TYPING //\t\tconsole.info( '%c[Renderer]%c Insert text node' +\n                // @if CK_DEBUG_TYPING //\t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n                // @if CK_DEBUG_TYPING //\t\t\t`%c${ _escapeTextNodeData( node.data ) }%c (${ node.data.length })`,\n                // @if CK_DEBUG_TYPING //\t\t\t'color: green; font-weight: bold',\n                // @if CK_DEBUG_TYPING //\t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n                // @if CK_DEBUG_TYPING //\t\t\t'color: blue', ''\n                // @if CK_DEBUG_TYPING //\t\t);\n                // @if CK_DEBUG_TYPING //\t} else {\n                // @if CK_DEBUG_TYPING //\t\tconsole.info( '%c[Renderer]%c Insert element:',\n                // @if CK_DEBUG_TYPING //\t\t\t'color: green; font-weight: bold', 'font-weight: normal',\n                // @if CK_DEBUG_TYPING //\t\t\tnode\n                // @if CK_DEBUG_TYPING //\t\t);\n                // @if CK_DEBUG_TYPING //\t}\n                // @if CK_DEBUG_TYPING // }\n                insertAt(domElement, i, expectedDomChildren[i]);\n                i++;\n            }\n            // Update the existing text node data.\n            else if (action === 'update') {\n                this._updateTextNode(actualDomChildren[i], expectedDomChildren[i].data);\n                i++;\n            }\n            else if (action === 'equal') {\n                // Force updating text nodes inside elements which did not change and do not need to be re-rendered (#1125).\n                // Do it here (not in the loop above) because only after insertions the `i` index is correct.\n                this._markDescendantTextToSync(this.domConverter.domToView(expectedDomChildren[i]));\n                i++;\n            }\n        }\n        // Unbind removed nodes. When node does not have a parent it means that it was removed from DOM tree during\n        // comparison with the expected DOM. We don't need to check child nodes, because if child node was reinserted,\n        // it was moved to DOM tree out of the removed node.\n        for (const node of nodesToUnbind) {\n            if (!node.parentNode) {\n                this.domConverter.unbindDomElement(node);\n            }\n        }\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n        // @if CK_DEBUG_TYPING // }\n    }\n    /**\n     * Shorthand for diffing two arrays or node lists of DOM nodes.\n     *\n     * @param actualDomChildren Actual DOM children\n     * @param expectedDomChildren Expected DOM children.\n     * @returns The list of actions based on the {@link module:utils/diff~diff} function.\n     */\n    _diffNodeLists(actualDomChildren, expectedDomChildren) {\n        actualDomChildren = filterOutFakeSelectionContainer(actualDomChildren, this._fakeSelectionContainer);\n        return diff(actualDomChildren, expectedDomChildren, sameNodes.bind(null, this.domConverter));\n    }\n    /**\n     * Finds DOM nodes that were replaced with the similar nodes (same tag name) in the view. All nodes are compared\n     * within one `insert`/`delete` action group, for example:\n     *\n     * ```\n     * Actual DOM:\t\t<p><b>Foo</b>Bar<i>Baz</i><b>Bax</b></p>\n     * Expected DOM:\t<p>Bar<b>123</b><i>Baz</i><b>456</b></p>\n     * Input actions:\t[ insert, insert, delete, delete, equal, insert, delete ]\n     * Output actions:\t[ insert, replace, delete, equal, replace ]\n     * ```\n     *\n     * @param actions Actions array which is a result of the {@link module:utils/diff~diff} function.\n     * @param actualDom Actual DOM children\n     * @param expectedDom Expected DOM children.\n     * @param comparator A comparator function that should return `true` if the given node should be reused\n     * (either by the update of a text node data or an element children list for similar elements).\n     * @returns Actions array modified with the `update` actions.\n     */\n    _findUpdateActions(actions, actualDom, expectedDom, comparator) {\n        // If there is no both 'insert' and 'delete' actions, no need to check for replaced elements.\n        if (actions.indexOf('insert') === -1 || actions.indexOf('delete') === -1) {\n            return actions;\n        }\n        let newActions = [];\n        let actualSlice = [];\n        let expectedSlice = [];\n        const counter = { equal: 0, insert: 0, delete: 0 };\n        for (const action of actions) {\n            if (action === 'insert') {\n                expectedSlice.push(expectedDom[counter.equal + counter.insert]);\n            }\n            else if (action === 'delete') {\n                actualSlice.push(actualDom[counter.equal + counter.delete]);\n            }\n            else { // equal\n                newActions = newActions.concat(diff(actualSlice, expectedSlice, comparator)\n                    .map(action => action === 'equal' ? 'update' : action));\n                newActions.push('equal');\n                // Reset stored elements on 'equal'.\n                actualSlice = [];\n                expectedSlice = [];\n            }\n            counter[action]++;\n        }\n        return newActions.concat(diff(actualSlice, expectedSlice, comparator)\n            .map(action => action === 'equal' ? 'update' : action));\n    }\n    /**\n     * Checks if text needs to be updated and possibly updates it by removing and inserting only parts\n     * of the data from the existing text node to reduce impact on the IME composition.\n     *\n     * @param domText DOM text node to update.\n     * @param expectedText The expected data of a text node.\n     */\n    _updateTextNode(domText, expectedText) {\n        const actualText = domText.data;\n        if (actualText == expectedText) {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[Renderer]%c Text node does not need update:%c ' +\n            // @if CK_DEBUG_TYPING // \t\t`${ _escapeTextNodeData( actualText ) }%c (${ actualText.length })`,\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-style: italic', 'color: blue', ''\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            return;\n        }\n        // Our approach to interleaving space character with NBSP might differ with the one implemented by the browser.\n        // Avoid modifying the text node in the DOM if only NBSPs and spaces are interchanged.\n        // We should avoid DOM modifications while composing to avoid breakage of composition.\n        // See: https://github.com/ckeditor/ckeditor5/issues/13994.\n        if (env.isAndroid && this.isComposing && actualText.replace(/\\u00A0/g, ' ') == expectedText.replace(/\\u00A0/g, ' ')) {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[Renderer]%c Text node ignore NBSP changes while composing: ' +\n            // @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( actualText ) }%c (${ actualText.length }) ->` +\n            // @if CK_DEBUG_TYPING // \t\t` %c${ _escapeTextNodeData( expectedText ) }%c (${ expectedText.length })`,\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-style: italic', 'color: blue', '', 'color: blue', ''\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            return;\n        }\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.info( '%c[Renderer]%c Update text node' +\n        // @if CK_DEBUG_TYPING // \t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n        // @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( actualText ) }%c (${ actualText.length }) ->` +\n        // @if CK_DEBUG_TYPING // \t\t` %c${ _escapeTextNodeData( expectedText ) }%c (${ expectedText.length })`,\n        // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', this.isComposing ? 'color: red; font-weight: bold' : '',\n        // @if CK_DEBUG_TYPING // \t\t'color: blue', '', 'color: blue', ''\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        this._updateTextNodeInternal(domText, expectedText);\n    }\n    /**\n     * Part of the `_updateTextNode` method extracted for easier testing.\n     */\n    _updateTextNodeInternal(domText, expectedText) {\n        const actions = fastDiff(domText.data, expectedText);\n        for (const action of actions) {\n            if (action.type === 'insert') {\n                domText.insertData(action.index, action.values.join(''));\n            }\n            else { // 'delete'\n                domText.deleteData(action.index, action.howMany);\n            }\n        }\n    }\n    /**\n     * Marks text nodes to be synchronized.\n     *\n     * If a text node is passed, it will be marked. If an element is passed, all descendant text nodes inside it will be marked.\n     *\n     * @param viewNode View node to sync.\n     */\n    _markDescendantTextToSync(viewNode) {\n        if (!viewNode) {\n            return;\n        }\n        if (viewNode.is('$text')) {\n            this.markedTexts.add(viewNode);\n        }\n        else if (viewNode.is('element')) {\n            for (const child of viewNode.getChildren()) {\n                this._markDescendantTextToSync(child);\n            }\n        }\n    }\n    /**\n     * Checks if the selection needs to be updated and possibly updates it.\n     */\n    _updateSelection() {\n        // Block updating DOM selection in (non-Android) Blink while the user is selecting to prevent accidental selection collapsing.\n        // Note: Structural changes in DOM must trigger selection rendering, though. Nodes the selection was anchored\n        // to, may disappear in DOM which would break the selection (e.g. in real-time collaboration scenarios).\n        // https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723\n        if (env.isBlink && !env.isAndroid && this.isSelecting && !this.markedChildren.size) {\n            return;\n        }\n        // If there is no selection - remove DOM and fake selections.\n        if (this.selection.rangeCount === 0) {\n            this._removeDomSelection();\n            this._removeFakeSelection();\n            return;\n        }\n        const domRoot = this.domConverter.mapViewToDom(this.selection.editableElement);\n        // Do nothing if there is no focus, or there is no DOM element corresponding to selection's editable element.\n        if (!this.isFocused || !domRoot) {\n            return;\n        }\n        // Render fake selection - create the fake selection container (if needed) and move DOM selection to it.\n        if (this.selection.isFake) {\n            this._updateFakeSelection(domRoot);\n        }\n        // There was a fake selection so remove it and update the DOM selection.\n        // This is especially important on Android because otherwise IME will try to compose over the fake selection container.\n        else if (this._fakeSelectionContainer && this._fakeSelectionContainer.isConnected) {\n            this._removeFakeSelection();\n            this._updateDomSelection(domRoot);\n        }\n        // Update the DOM selection in case of a plain selection change (no fake selection is involved).\n        // On non-Android the whole rendering is disabled in composition mode (including DOM selection update),\n        // but updating DOM selection should be also disabled on Android if in the middle of the composition\n        // (to not interrupt it).\n        else if (!(this.isComposing && env.isAndroid)) {\n            this._updateDomSelection(domRoot);\n        }\n    }\n    /**\n     * Updates the fake selection.\n     *\n     * @param domRoot A valid DOM root where the fake selection container should be added.\n     */\n    _updateFakeSelection(domRoot) {\n        const domDocument = domRoot.ownerDocument;\n        if (!this._fakeSelectionContainer) {\n            this._fakeSelectionContainer = createFakeSelectionContainer(domDocument);\n        }\n        const container = this._fakeSelectionContainer;\n        // Bind fake selection container with the current selection *position*.\n        this.domConverter.bindFakeSelection(container, this.selection);\n        if (!this._fakeSelectionNeedsUpdate(domRoot)) {\n            return;\n        }\n        if (!container.parentElement || container.parentElement != domRoot) {\n            domRoot.appendChild(container);\n        }\n        container.textContent = this.selection.fakeSelectionLabel || '\\u00A0';\n        const domSelection = domDocument.getSelection();\n        const domRange = domDocument.createRange();\n        domSelection.removeAllRanges();\n        domRange.selectNodeContents(container);\n        domSelection.addRange(domRange);\n    }\n    /**\n     * Updates the DOM selection.\n     *\n     * @param domRoot A valid DOM root where the DOM selection should be rendered.\n     */\n    _updateDomSelection(domRoot) {\n        const domSelection = domRoot.ownerDocument.defaultView.getSelection();\n        // Let's check whether DOM selection needs updating at all.\n        if (!this._domSelectionNeedsUpdate(domSelection)) {\n            return;\n        }\n        // Multi-range selection is not available in most browsers, and, at least in Chrome, trying to\n        // set such selection, that is not continuous, throws an error. Because of that, we will just use anchor\n        // and focus of view selection.\n        // Since we are not supporting multi-range selection, we also do not need to check if proper editable is\n        // selected. If there is any editable selected, it is okay (editable is taken from selection anchor).\n        const anchor = this.domConverter.viewPositionToDom(this.selection.anchor);\n        const focus = this.domConverter.viewPositionToDom(this.selection.focus);\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.info( '%c[Renderer]%c Update DOM selection:',\n        // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', '', anchor, focus\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        domSelection.setBaseAndExtent(anchor.parent, anchor.offset, focus.parent, focus.offset);\n        // Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n        if (env.isGecko) {\n            fixGeckoSelectionAfterBr(focus, domSelection);\n        }\n    }\n    /**\n     * Checks whether a given DOM selection needs to be updated.\n     *\n     * @param domSelection The DOM selection to check.\n     */\n    _domSelectionNeedsUpdate(domSelection) {\n        if (!this.domConverter.isDomSelectionCorrect(domSelection)) {\n            // Current DOM selection is in incorrect position. We need to update it.\n            return true;\n        }\n        const oldViewSelection = domSelection && this.domConverter.domSelectionToView(domSelection);\n        if (oldViewSelection && this.selection.isEqual(oldViewSelection)) {\n            return false;\n        }\n        // If selection is not collapsed, it does not need to be updated if it is similar.\n        if (!this.selection.isCollapsed && this.selection.isSimilar(oldViewSelection)) {\n            // Selection did not changed and is correct, do not update.\n            return false;\n        }\n        // Selections are not similar.\n        return true;\n    }\n    /**\n     * Checks whether the fake selection needs to be updated.\n     *\n     * @param domRoot A valid DOM root where a new fake selection container should be added.\n     */\n    _fakeSelectionNeedsUpdate(domRoot) {\n        const container = this._fakeSelectionContainer;\n        const domSelection = domRoot.ownerDocument.getSelection();\n        // Fake selection needs to be updated if there's no fake selection container, or the container currently sits\n        // in a different root.\n        if (!container || container.parentElement !== domRoot) {\n            return true;\n        }\n        // Make sure that the selection actually is within the fake selection.\n        if (domSelection.anchorNode !== container && !container.contains(domSelection.anchorNode)) {\n            return true;\n        }\n        return container.textContent !== this.selection.fakeSelectionLabel;\n    }\n    /**\n     * Removes the DOM selection.\n     */\n    _removeDomSelection() {\n        for (const doc of this.domDocuments) {\n            const domSelection = doc.getSelection();\n            if (domSelection.rangeCount) {\n                const activeDomElement = doc.activeElement;\n                const viewElement = this.domConverter.mapDomToView(activeDomElement);\n                if (activeDomElement && viewElement) {\n                    domSelection.removeAllRanges();\n                }\n            }\n        }\n    }\n    /**\n     * Removes the fake selection.\n     */\n    _removeFakeSelection() {\n        const container = this._fakeSelectionContainer;\n        if (container) {\n            container.remove();\n        }\n    }\n    /**\n     * Checks if focus needs to be updated and possibly updates it.\n     */\n    _updateFocus() {\n        if (this.isFocused) {\n            const editable = this.selection.editableElement;\n            if (editable) {\n                this.domConverter.focus(editable);\n            }\n        }\n    }\n}\n/**\n * Checks if provided element is editable.\n */\nfunction isEditable(element) {\n    if (element.getAttribute('contenteditable') == 'false') {\n        return false;\n    }\n    const parent = element.findAncestor(element => element.hasAttribute('contenteditable'));\n    return !parent || parent.getAttribute('contenteditable') == 'true';\n}\n/**\n * Adds inline filler at a given position.\n *\n * The position can be given as an array of DOM nodes and an offset in that array,\n * or a DOM parent element and an offset in that element.\n *\n * @returns The DOM text node that contains an inline filler.\n */\nfunction addInlineFiller(domDocument, domParentOrArray, offset) {\n    const childNodes = domParentOrArray instanceof Array ? domParentOrArray : domParentOrArray.childNodes;\n    const nodeAfterFiller = childNodes[offset];\n    if (isText(nodeAfterFiller)) {\n        nodeAfterFiller.data = INLINE_FILLER + nodeAfterFiller.data;\n        return nodeAfterFiller;\n    }\n    else {\n        const fillerNode = domDocument.createTextNode(INLINE_FILLER);\n        if (Array.isArray(domParentOrArray)) {\n            childNodes.splice(offset, 0, fillerNode);\n        }\n        else {\n            insertAt(domParentOrArray, offset, fillerNode);\n        }\n        return fillerNode;\n    }\n}\n/**\n * Whether two DOM nodes should be considered as similar.\n * Nodes are considered similar if they have the same tag name.\n */\nfunction areSimilarElements(node1, node2) {\n    return isNode(node1) && isNode(node2) &&\n        !isText(node1) && !isText(node2) &&\n        !isComment(node1) && !isComment(node2) &&\n        node1.tagName.toLowerCase() === node2.tagName.toLowerCase();\n}\n/**\n * Whether two DOM nodes are text nodes.\n */\nfunction areTextNodes(node1, node2) {\n    return isNode(node1) && isNode(node2) &&\n        isText(node1) && isText(node2);\n}\n/**\n * Whether two dom nodes should be considered as the same.\n * Two nodes which are considered the same are:\n *\n * * Text nodes with the same text.\n * * Element nodes represented by the same object.\n * * Two block filler elements.\n *\n * @param blockFillerMode Block filler mode, see {@link module:engine/view/domconverter~DomConverter#blockFillerMode}.\n */\nfunction sameNodes(domConverter, actualDomChild, expectedDomChild) {\n    // Elements.\n    if (actualDomChild === expectedDomChild) {\n        return true;\n    }\n    // Texts.\n    else if (isText(actualDomChild) && isText(expectedDomChild)) {\n        return actualDomChild.data === expectedDomChild.data;\n    }\n    // Block fillers.\n    else if (domConverter.isBlockFiller(actualDomChild) &&\n        domConverter.isBlockFiller(expectedDomChild)) {\n        return true;\n    }\n    // Not matching types.\n    return false;\n}\n/**\n * The following is a Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n * When the native DOM selection is at the end of the block and preceded by <br /> e.g.\n *\n * ```html\n * <p>foo<br/>[]</p>\n * ```\n *\n * which happens a lot when using the soft line break, the browser fails to (visually) move the\n * caret to the new line. A quick fix is as simple as force–refreshing the selection with the same range.\n */\nfunction fixGeckoSelectionAfterBr(focus, domSelection) {\n    let parent = focus.parent;\n    let offset = focus.offset;\n    if (isText(parent) && isInlineFiller(parent)) {\n        offset = indexOf(parent) + 1;\n        parent = parent.parentNode;\n    }\n    // This fix works only when the focus point is at the very end of an element.\n    // There is no point in running it in cases unrelated to the browser bug.\n    if (parent.nodeType != Node.ELEMENT_NODE || offset != parent.childNodes.length - 1) {\n        return;\n    }\n    const childAtOffset = parent.childNodes[offset];\n    // To stay on the safe side, the fix being as specific as possible, it targets only the\n    // selection which is at the very end of the element and preceded by <br />.\n    if (childAtOffset && childAtOffset.tagName == 'BR') {\n        domSelection.addRange(domSelection.getRangeAt(0));\n    }\n}\nfunction filterOutFakeSelectionContainer(domChildList, fakeSelectionContainer) {\n    const childList = Array.from(domChildList);\n    if (childList.length == 0 || !fakeSelectionContainer) {\n        return childList;\n    }\n    const last = childList[childList.length - 1];\n    if (last == fakeSelectionContainer) {\n        childList.pop();\n    }\n    return childList;\n}\n/**\n * Creates a fake selection container for a given document.\n */\nfunction createFakeSelectionContainer(domDocument) {\n    const container = domDocument.createElement('div');\n    container.className = 'ck-fake-selection-container';\n    Object.assign(container.style, {\n        position: 'fixed',\n        top: 0,\n        left: '-9999px',\n        // See https://github.com/ckeditor/ckeditor5/issues/752.\n        width: '42px'\n    });\n    // Fill it with a text node so we can update it later.\n    container.textContent = '\\u00A0';\n    return container;\n}\n// @if CK_DEBUG_TYPING // function _escapeTextNodeData( text ) {\n// @if CK_DEBUG_TYPING // \tconst escapedText = text\n// @if CK_DEBUG_TYPING // \t\t.replace( /&/g, '&amp;' )\n// @if CK_DEBUG_TYPING // \t\t.replace( /\\u00A0/g, '&nbsp;' )\n// @if CK_DEBUG_TYPING // \t\t.replace( /\\u2060/g, '&NoBreak;' );\n// @if CK_DEBUG_TYPING //\n// @if CK_DEBUG_TYPING // \treturn `\"${ escapedText }\"`;\n// @if CK_DEBUG_TYPING // }\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/domconverter\n */\n/* globals Node, NodeFilter, DOMParser */\nimport ViewText from './text.js';\nimport ViewElement from './element.js';\nimport ViewUIElement from './uielement.js';\nimport ViewPosition from './position.js';\nimport ViewRange from './range.js';\nimport ViewSelection from './selection.js';\nimport ViewDocumentFragment from './documentfragment.js';\nimport ViewTreeWalker from './treewalker.js';\nimport { default as Matcher } from './matcher.js';\nimport { BR_FILLER, INLINE_FILLER_LENGTH, NBSP_FILLER, MARKED_NBSP_FILLER, getDataWithoutFiller, isInlineFiller, startsWithFiller } from './filler.js';\nimport { global, logWarning, indexOf, getAncestors, isText, isComment, isValidAttributeName, first, env } from '@ckeditor/ckeditor5-utils';\nconst BR_FILLER_REF = BR_FILLER(global.document); // eslint-disable-line new-cap\nconst NBSP_FILLER_REF = NBSP_FILLER(global.document); // eslint-disable-line new-cap\nconst MARKED_NBSP_FILLER_REF = MARKED_NBSP_FILLER(global.document); // eslint-disable-line new-cap\nconst UNSAFE_ATTRIBUTE_NAME_PREFIX = 'data-ck-unsafe-attribute-';\nconst UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE = 'data-ck-unsafe-element';\n/**\n * `DomConverter` is a set of tools to do transformations between DOM nodes and view nodes. It also handles\n * {@link module:engine/view/domconverter~DomConverter#bindElements bindings} between these nodes.\n *\n * An instance of the DOM converter is available under\n * {@link module:engine/view/view~View#domConverter `editor.editing.view.domConverter`}.\n *\n * The DOM converter does not check which nodes should be rendered (use {@link module:engine/view/renderer~Renderer}), does not keep the\n * state of a tree nor keeps the synchronization between the tree view and the DOM tree (use {@link module:engine/view/document~Document}).\n *\n * The DOM converter keeps DOM elements to view element bindings, so when the converter gets destroyed, the bindings are lost.\n * Two converters will keep separate binding maps, so one tree view can be bound with two DOM trees.\n */\nexport default class DomConverter {\n    /**\n     * Creates a DOM converter.\n     *\n     * @param document The view document instance.\n     * @param options An object with configuration options.\n     * @param options.blockFillerMode The type of the block filler to use.\n     * Default value depends on the options.renderingMode:\n     *  'nbsp' when options.renderingMode == 'data',\n     *  'br' when options.renderingMode == 'editing'.\n     * @param options.renderingMode Whether to leave the View-to-DOM conversion result unchanged\n     * or improve editing experience by filtering out interactive data.\n     */\n    constructor(document, { blockFillerMode, renderingMode = 'editing' } = {}) {\n        /**\n         * The DOM-to-view mapping.\n         */\n        this._domToViewMapping = new WeakMap();\n        /**\n         * The view-to-DOM mapping.\n         */\n        this._viewToDomMapping = new WeakMap();\n        /**\n         * Holds the mapping between fake selection containers and corresponding view selections.\n         */\n        this._fakeSelectionMapping = new WeakMap();\n        /**\n         * Matcher for view elements whose content should be treated as raw data\n         * and not processed during the conversion from DOM nodes to view elements.\n         */\n        this._rawContentElementMatcher = new Matcher();\n        /**\n         * Matcher for inline object view elements. This is an extension of a simple {@link #inlineObjectElements} array of element names.\n         */\n        this._inlineObjectElementMatcher = new Matcher();\n        /**\n         * Set of elements with temporary custom properties that require clearing after render.\n         */\n        this._elementsWithTemporaryCustomProperties = new Set();\n        this.document = document;\n        this.renderingMode = renderingMode;\n        this.blockFillerMode = blockFillerMode || (renderingMode === 'editing' ? 'br' : 'nbsp');\n        this.preElements = ['pre', 'textarea'];\n        this.blockElements = [\n            'address', 'article', 'aside', 'blockquote', 'caption', 'center', 'dd', 'details', 'dir', 'div',\n            'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header',\n            'hgroup', 'legend', 'li', 'main', 'menu', 'nav', 'ol', 'p', 'pre', 'section', 'summary', 'table', 'tbody',\n            'td', 'tfoot', 'th', 'thead', 'tr', 'ul'\n        ];\n        this.inlineObjectElements = [\n            'object', 'iframe', 'input', 'button', 'textarea', 'select', 'option', 'video', 'embed', 'audio', 'img', 'canvas'\n        ];\n        this.unsafeElements = ['script', 'style'];\n        this._domDocument = this.renderingMode === 'editing' ? global.document : global.document.implementation.createHTMLDocument('');\n    }\n    /**\n     * Binds a given DOM element that represents fake selection to a **position** of a\n     * {@link module:engine/view/documentselection~DocumentSelection document selection}.\n     * Document selection copy is stored and can be retrieved by the\n     * {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView} method.\n     */\n    bindFakeSelection(domElement, viewDocumentSelection) {\n        this._fakeSelectionMapping.set(domElement, new ViewSelection(viewDocumentSelection));\n    }\n    /**\n     * Returns a {@link module:engine/view/selection~Selection view selection} instance corresponding to a given\n     * DOM element that represents fake selection. Returns `undefined` if binding to the given DOM element does not exist.\n     */\n    fakeSelectionToView(domElement) {\n        return this._fakeSelectionMapping.get(domElement);\n    }\n    /**\n     * Binds DOM and view elements, so it will be possible to get corresponding elements using\n     * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n     * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n     *\n     * @param domElement The DOM element to bind.\n     * @param viewElement The view element to bind.\n     */\n    bindElements(domElement, viewElement) {\n        this._domToViewMapping.set(domElement, viewElement);\n        this._viewToDomMapping.set(viewElement, domElement);\n    }\n    /**\n     * Unbinds a given DOM element from the view element it was bound to. Unbinding is deep, meaning that all children of\n     * the DOM element will be unbound too.\n     *\n     * @param domElement The DOM element to unbind.\n     */\n    unbindDomElement(domElement) {\n        const viewElement = this._domToViewMapping.get(domElement);\n        if (viewElement) {\n            this._domToViewMapping.delete(domElement);\n            this._viewToDomMapping.delete(viewElement);\n            for (const child of domElement.children) {\n                this.unbindDomElement(child);\n            }\n        }\n    }\n    /**\n     * Binds DOM and view document fragments, so it will be possible to get corresponding document fragments using\n     * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n     * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n     *\n     * @param domFragment The DOM document fragment to bind.\n     * @param viewFragment The view document fragment to bind.\n     */\n    bindDocumentFragments(domFragment, viewFragment) {\n        this._domToViewMapping.set(domFragment, viewFragment);\n        this._viewToDomMapping.set(viewFragment, domFragment);\n    }\n    /**\n     * Decides whether a given pair of attribute key and value should be passed further down the pipeline.\n     *\n     * @param elementName Element name in lower case.\n     */\n    shouldRenderAttribute(attributeKey, attributeValue, elementName) {\n        if (this.renderingMode === 'data') {\n            return true;\n        }\n        attributeKey = attributeKey.toLowerCase();\n        if (attributeKey.startsWith('on')) {\n            return false;\n        }\n        if (attributeKey === 'srcdoc' &&\n            attributeValue.match(/\\bon\\S+\\s*=|javascript:|<\\s*\\/*script/i)) {\n            return false;\n        }\n        if (elementName === 'img' &&\n            (attributeKey === 'src' || attributeKey === 'srcset')) {\n            return true;\n        }\n        if (elementName === 'source' && attributeKey === 'srcset') {\n            return true;\n        }\n        if (attributeValue.match(/^\\s*(javascript:|data:(image\\/svg|text\\/x?html))/i)) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Set `domElement`'s content using provided `html` argument. Apply necessary filtering for the editing pipeline.\n     *\n     * @param domElement DOM element that should have `html` set as its content.\n     * @param html Textual representation of the HTML that will be set on `domElement`.\n     */\n    setContentOf(domElement, html) {\n        // For data pipeline we pass the HTML as-is.\n        if (this.renderingMode === 'data') {\n            domElement.innerHTML = html;\n            return;\n        }\n        const document = new DOMParser().parseFromString(html, 'text/html');\n        const fragment = document.createDocumentFragment();\n        const bodyChildNodes = document.body.childNodes;\n        while (bodyChildNodes.length > 0) {\n            fragment.appendChild(bodyChildNodes[0]);\n        }\n        const treeWalker = document.createTreeWalker(fragment, NodeFilter.SHOW_ELEMENT);\n        const nodes = [];\n        let currentNode;\n        // eslint-disable-next-line no-cond-assign\n        while (currentNode = treeWalker.nextNode()) {\n            nodes.push(currentNode);\n        }\n        for (const currentNode of nodes) {\n            // Go through nodes to remove those that are prohibited in editing pipeline.\n            for (const attributeName of currentNode.getAttributeNames()) {\n                this.setDomElementAttribute(currentNode, attributeName, currentNode.getAttribute(attributeName));\n            }\n            const elementName = currentNode.tagName.toLowerCase();\n            // There are certain nodes, that should be renamed to <span> in editing pipeline.\n            if (this._shouldRenameElement(elementName)) {\n                _logUnsafeElement(elementName);\n                currentNode.replaceWith(this._createReplacementDomElement(elementName, currentNode));\n            }\n        }\n        // Empty the target element.\n        while (domElement.firstChild) {\n            domElement.firstChild.remove();\n        }\n        domElement.append(fragment);\n    }\n    /**\n     * Converts the view to the DOM. For all text nodes, not bound elements and document fragments new items will\n     * be created. For bound elements and document fragments the method will return corresponding items.\n     *\n     * @param viewNode View node or document fragment to transform.\n     * @param options Conversion options.\n     * @param options.bind Determines whether new elements will be bound.\n     * @param options.withChildren If `false`, node's and document fragment's children will not be converted.\n     * @returns Converted node or DocumentFragment.\n     */\n    viewToDom(viewNode, options = {}) {\n        if (viewNode.is('$text')) {\n            const textData = this._processDataFromViewText(viewNode);\n            return this._domDocument.createTextNode(textData);\n        }\n        else {\n            const viewElementOrFragment = viewNode;\n            if (this.mapViewToDom(viewElementOrFragment)) {\n                // Do not reuse element that is marked to not reuse (for example an IMG element\n                // so it can immediately display a placeholder background instead of waiting for the new src to load).\n                if (viewElementOrFragment.getCustomProperty('editingPipeline:doNotReuseOnce')) {\n                    this._elementsWithTemporaryCustomProperties.add(viewElementOrFragment);\n                }\n                else {\n                    return this.mapViewToDom(viewElementOrFragment);\n                }\n            }\n            let domElement;\n            if (viewElementOrFragment.is('documentFragment')) {\n                // Create DOM document fragment.\n                domElement = this._domDocument.createDocumentFragment();\n                if (options.bind) {\n                    this.bindDocumentFragments(domElement, viewElementOrFragment);\n                }\n            }\n            else if (viewElementOrFragment.is('uiElement')) {\n                if (viewElementOrFragment.name === '$comment') {\n                    domElement = this._domDocument.createComment(viewElementOrFragment.getCustomProperty('$rawContent'));\n                }\n                else {\n                    // UIElement has its own render() method (see #799).\n                    domElement = viewElementOrFragment.render(this._domDocument, this);\n                }\n                if (options.bind) {\n                    this.bindElements(domElement, viewElementOrFragment);\n                }\n                return domElement;\n            }\n            else {\n                // Create DOM element.\n                if (this._shouldRenameElement(viewElementOrFragment.name)) {\n                    _logUnsafeElement(viewElementOrFragment.name);\n                    domElement = this._createReplacementDomElement(viewElementOrFragment.name);\n                }\n                else if (viewElementOrFragment.hasAttribute('xmlns')) {\n                    domElement = this._domDocument.createElementNS(viewElementOrFragment.getAttribute('xmlns'), viewElementOrFragment.name);\n                }\n                else {\n                    domElement = this._domDocument.createElement(viewElementOrFragment.name);\n                }\n                // RawElement take care of their children in RawElement#render() method which can be customized\n                // (see https://github.com/ckeditor/ckeditor5/issues/4469).\n                if (viewElementOrFragment.is('rawElement')) {\n                    viewElementOrFragment.render(domElement, this);\n                }\n                if (options.bind) {\n                    this.bindElements(domElement, viewElementOrFragment);\n                }\n                // Copy element's attributes.\n                for (const key of viewElementOrFragment.getAttributeKeys()) {\n                    this.setDomElementAttribute(domElement, key, viewElementOrFragment.getAttribute(key), viewElementOrFragment);\n                }\n            }\n            if (options.withChildren !== false) {\n                for (const child of this.viewChildrenToDom(viewElementOrFragment, options)) {\n                    if (domElement instanceof HTMLTemplateElement) {\n                        domElement.content.appendChild(child);\n                    }\n                    else {\n                        domElement.appendChild(child);\n                    }\n                }\n            }\n            return domElement;\n        }\n    }\n    /**\n     * Sets the attribute on a DOM element.\n     *\n     * **Note**: To remove the attribute, use {@link #removeDomElementAttribute}.\n     *\n     * @param domElement The DOM element the attribute should be set on.\n     * @param key The name of the attribute.\n     * @param value The value of the attribute.\n     * @param relatedViewElement The view element related to the `domElement` (if there is any).\n     * It helps decide whether the attribute set is unsafe. For instance, view elements created via the\n     * {@link module:engine/view/downcastwriter~DowncastWriter} methods can allow certain attributes that would normally be filtered out.\n     */\n    setDomElementAttribute(domElement, key, value, relatedViewElement) {\n        const shouldRenderAttribute = this.shouldRenderAttribute(key, value, domElement.tagName.toLowerCase()) ||\n            relatedViewElement && relatedViewElement.shouldRenderUnsafeAttribute(key);\n        if (!shouldRenderAttribute) {\n            logWarning('domconverter-unsafe-attribute-detected', { domElement, key, value });\n        }\n        if (!isValidAttributeName(key)) {\n            /**\n             * Invalid attribute name was ignored during rendering.\n             *\n             * @error domconverter-invalid-attribute-detected\n             */\n            logWarning('domconverter-invalid-attribute-detected', { domElement, key, value });\n            return;\n        }\n        // The old value was safe but the new value is unsafe.\n        if (domElement.hasAttribute(key) && !shouldRenderAttribute) {\n            domElement.removeAttribute(key);\n        }\n        // The old value was unsafe (but prefixed) but the new value will be safe (will be unprefixed).\n        else if (domElement.hasAttribute(UNSAFE_ATTRIBUTE_NAME_PREFIX + key) && shouldRenderAttribute) {\n            domElement.removeAttribute(UNSAFE_ATTRIBUTE_NAME_PREFIX + key);\n        }\n        // If the attribute should not be rendered, rename it (instead of removing) to give developers some idea of what\n        // is going on (https://github.com/ckeditor/ckeditor5/issues/10801).\n        domElement.setAttribute(shouldRenderAttribute ? key : UNSAFE_ATTRIBUTE_NAME_PREFIX + key, value);\n    }\n    /**\n     * Removes an attribute from a DOM element.\n     *\n     * **Note**: To set the attribute, use {@link #setDomElementAttribute}.\n     *\n     * @param domElement The DOM element the attribute should be removed from.\n     * @param key The name of the attribute.\n     */\n    removeDomElementAttribute(domElement, key) {\n        // See #_createReplacementDomElement() to learn what this is.\n        if (key == UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE) {\n            return;\n        }\n        domElement.removeAttribute(key);\n        // See setDomElementAttribute() to learn what this is.\n        domElement.removeAttribute(UNSAFE_ATTRIBUTE_NAME_PREFIX + key);\n    }\n    /**\n     * Converts children of the view element to DOM using the\n     * {@link module:engine/view/domconverter~DomConverter#viewToDom} method.\n     * Additionally, this method adds block {@link module:engine/view/filler filler} to the list of children, if needed.\n     *\n     * @param viewElement Parent view element.\n     * @param options See {@link module:engine/view/domconverter~DomConverter#viewToDom} options parameter.\n     * @returns DOM nodes.\n     */\n    *viewChildrenToDom(viewElement, options = {}) {\n        const fillerPositionOffset = viewElement.getFillerOffset && viewElement.getFillerOffset();\n        let offset = 0;\n        for (const childView of viewElement.getChildren()) {\n            if (fillerPositionOffset === offset) {\n                yield this._getBlockFiller();\n            }\n            const transparentRendering = childView.is('element') &&\n                !!childView.getCustomProperty('dataPipeline:transparentRendering') &&\n                !first(childView.getAttributes());\n            if (transparentRendering && this.renderingMode == 'data') {\n                // `RawElement` doesn't have #children defined, so they need to be temporarily rendered\n                // and extracted directly.\n                if (childView.is('rawElement')) {\n                    const tempElement = this._domDocument.createElement(childView.name);\n                    childView.render(tempElement, this);\n                    yield* [...tempElement.childNodes];\n                }\n                else {\n                    yield* this.viewChildrenToDom(childView, options);\n                }\n            }\n            else {\n                if (transparentRendering) {\n                    /**\n                     * The `dataPipeline:transparentRendering` flag is supported only in the data pipeline.\n                     *\n                     * @error domconverter-transparent-rendering-unsupported-in-editing-pipeline\n                     */\n                    logWarning('domconverter-transparent-rendering-unsupported-in-editing-pipeline', { viewElement: childView });\n                }\n                yield this.viewToDom(childView, options);\n            }\n            offset++;\n        }\n        if (fillerPositionOffset === offset) {\n            yield this._getBlockFiller();\n        }\n    }\n    /**\n     * Converts view {@link module:engine/view/range~Range} to DOM range.\n     * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n     *\n     * @param viewRange View range.\n     * @returns DOM range.\n     */\n    viewRangeToDom(viewRange) {\n        const domStart = this.viewPositionToDom(viewRange.start);\n        const domEnd = this.viewPositionToDom(viewRange.end);\n        const domRange = this._domDocument.createRange();\n        domRange.setStart(domStart.parent, domStart.offset);\n        domRange.setEnd(domEnd.parent, domEnd.offset);\n        return domRange;\n    }\n    /**\n     * Converts view {@link module:engine/view/position~Position} to DOM parent and offset.\n     *\n     * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n     * If the converted position is directly before inline filler it is moved inside the filler.\n     *\n     * @param viewPosition View position.\n     * @returns DOM position or `null` if view position could not be converted to DOM.\n     * DOM position has two properties:\n     * * `parent` - DOM position parent.\n     * * `offset` - DOM position offset.\n     */\n    viewPositionToDom(viewPosition) {\n        const viewParent = viewPosition.parent;\n        if (viewParent.is('$text')) {\n            const domParent = this.findCorrespondingDomText(viewParent);\n            if (!domParent) {\n                // Position is in a view text node that has not been rendered to DOM yet.\n                return null;\n            }\n            let offset = viewPosition.offset;\n            if (startsWithFiller(domParent)) {\n                offset += INLINE_FILLER_LENGTH;\n            }\n            return { parent: domParent, offset };\n        }\n        else {\n            // viewParent is instance of ViewElement.\n            let domParent, domBefore, domAfter;\n            if (viewPosition.offset === 0) {\n                domParent = this.mapViewToDom(viewParent);\n                if (!domParent) {\n                    // Position is in a view element that has not been rendered to DOM yet.\n                    return null;\n                }\n                domAfter = domParent.childNodes[0];\n            }\n            else {\n                const nodeBefore = viewPosition.nodeBefore;\n                domBefore = nodeBefore.is('$text') ?\n                    this.findCorrespondingDomText(nodeBefore) :\n                    this.mapViewToDom(nodeBefore);\n                if (!domBefore) {\n                    // Position is after a view element that has not been rendered to DOM yet.\n                    return null;\n                }\n                domParent = domBefore.parentNode;\n                domAfter = domBefore.nextSibling;\n            }\n            // If there is an inline filler at position return position inside the filler. We should never return\n            // the position before the inline filler.\n            if (isText(domAfter) && startsWithFiller(domAfter)) {\n                return { parent: domAfter, offset: INLINE_FILLER_LENGTH };\n            }\n            const offset = domBefore ? indexOf(domBefore) + 1 : 0;\n            return { parent: domParent, offset };\n        }\n    }\n    /**\n     * Converts DOM to view. For all text nodes, not bound elements and document fragments new items will\n     * be created. For bound elements and document fragments function will return corresponding items. For\n     * {@link module:engine/view/filler fillers} `null` will be returned.\n     * For all DOM elements rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n     *\n     * @param domNode DOM node or document fragment to transform.\n     * @param options Conversion options.\n     * @param options.bind Determines whether new elements will be bound. False by default.\n     * @param options.withChildren If `true`, node's and document fragment's children will be converted too. True by default.\n     * @param options.keepOriginalCase If `false`, node's tag name will be converted to lower case. False by default.\n     * @param options.skipComments If `false`, comment nodes will be converted to `$comment`\n     * {@link module:engine/view/uielement~UIElement view UI elements}. False by default.\n     * @returns Converted node or document fragment or `null` if DOM node is a {@link module:engine/view/filler filler}\n     * or the given node is an empty text node.\n     */\n    domToView(domNode, options = {}) {\n        const inlineNodes = [];\n        const generator = this._domToView(domNode, options, inlineNodes);\n        // Get the first yielded value or a returned value.\n        const node = generator.next().value;\n        if (!node) {\n            return null;\n        }\n        // Trigger children handling.\n        generator.next();\n        // Whitespace cleaning.\n        this._processDomInlineNodes(null, inlineNodes, options);\n        // Text not got trimmed to an empty string so there is no result node.\n        if (node.is('$text') && node.data.length == 0) {\n            return null;\n        }\n        return node;\n    }\n    /**\n     * Converts children of the DOM element to view nodes using\n     * the {@link module:engine/view/domconverter~DomConverter#domToView} method.\n     * Additionally this method omits block {@link module:engine/view/filler filler}, if it exists in the DOM parent.\n     *\n     * @param domElement Parent DOM element.\n     * @param options See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n     * @param inlineNodes An array that will be populated with inline nodes. It's used internally for whitespace processing.\n     * @returns View nodes.\n     */\n    *domChildrenToView(domElement, options = {}, inlineNodes = []) {\n        // Get child nodes from content document fragment if element is template\n        let childNodes = [];\n        if (domElement instanceof HTMLTemplateElement) {\n            childNodes = [...domElement.content.childNodes];\n        }\n        else {\n            childNodes = [...domElement.childNodes];\n        }\n        for (let i = 0; i < childNodes.length; i++) {\n            const domChild = childNodes[i];\n            const generator = this._domToView(domChild, options, inlineNodes);\n            // Get the first yielded value or a returned value.\n            const viewChild = generator.next().value;\n            if (viewChild !== null) {\n                // Whitespace cleaning before entering a block element (between block elements).\n                if (this._isBlockViewElement(viewChild)) {\n                    this._processDomInlineNodes(domElement, inlineNodes, options);\n                }\n                yield viewChild;\n                // Trigger children handling.\n                generator.next();\n            }\n        }\n        // Whitespace cleaning before leaving a block element (content of block element).\n        this._processDomInlineNodes(domElement, inlineNodes, options);\n    }\n    /**\n     * Converts DOM selection to view {@link module:engine/view/selection~Selection}.\n     * Ranges which cannot be converted will be omitted.\n     *\n     * @param domSelection DOM selection.\n     * @returns View selection.\n     */\n    domSelectionToView(domSelection) {\n        // See: https://github.com/ckeditor/ckeditor5/issues/9635.\n        if (isGeckoRestrictedDomSelection(domSelection)) {\n            return new ViewSelection([]);\n        }\n        // DOM selection might be placed in fake selection container.\n        // If container contains fake selection - return corresponding view selection.\n        if (domSelection.rangeCount === 1) {\n            let container = domSelection.getRangeAt(0).startContainer;\n            // The DOM selection might be moved to the text node inside the fake selection container.\n            if (isText(container)) {\n                container = container.parentNode;\n            }\n            const viewSelection = this.fakeSelectionToView(container);\n            if (viewSelection) {\n                return viewSelection;\n            }\n        }\n        const isBackward = this.isDomSelectionBackward(domSelection);\n        const viewRanges = [];\n        for (let i = 0; i < domSelection.rangeCount; i++) {\n            // DOM Range have correct start and end, no matter what is the DOM Selection direction. So we don't have to fix anything.\n            const domRange = domSelection.getRangeAt(i);\n            const viewRange = this.domRangeToView(domRange);\n            if (viewRange) {\n                viewRanges.push(viewRange);\n            }\n        }\n        return new ViewSelection(viewRanges, { backward: isBackward });\n    }\n    /**\n     * Converts DOM Range to view {@link module:engine/view/range~Range}.\n     * If the start or end position can not be converted `null` is returned.\n     *\n     * @param domRange DOM range.\n     * @returns View range.\n     */\n    domRangeToView(domRange) {\n        const viewStart = this.domPositionToView(domRange.startContainer, domRange.startOffset);\n        const viewEnd = this.domPositionToView(domRange.endContainer, domRange.endOffset);\n        if (viewStart && viewEnd) {\n            return new ViewRange(viewStart, viewEnd);\n        }\n        return null;\n    }\n    /**\n     * Converts DOM parent and offset to view {@link module:engine/view/position~Position}.\n     *\n     * If the position is inside a {@link module:engine/view/filler filler} which has no corresponding view node,\n     * position of the filler will be converted and returned.\n     *\n     * If the position is inside DOM element rendered by {@link module:engine/view/uielement~UIElement}\n     * that position will be converted to view position before that UIElement.\n     *\n     * If structures are too different and it is not possible to find corresponding position then `null` will be returned.\n     *\n     * @param domParent DOM position parent.\n     * @param domOffset DOM position offset. You can skip it when converting the inline filler node.\n     * @returns View position.\n     */\n    domPositionToView(domParent, domOffset = 0) {\n        if (this.isBlockFiller(domParent)) {\n            return this.domPositionToView(domParent.parentNode, indexOf(domParent));\n        }\n        // If position is somewhere inside UIElement or a RawElement - return position before that element.\n        const viewElement = this.mapDomToView(domParent);\n        if (viewElement && (viewElement.is('uiElement') || viewElement.is('rawElement'))) {\n            return ViewPosition._createBefore(viewElement);\n        }\n        if (isText(domParent)) {\n            if (isInlineFiller(domParent)) {\n                return this.domPositionToView(domParent.parentNode, indexOf(domParent));\n            }\n            const viewParent = this.findCorrespondingViewText(domParent);\n            let offset = domOffset;\n            if (!viewParent) {\n                return null;\n            }\n            if (startsWithFiller(domParent)) {\n                offset -= INLINE_FILLER_LENGTH;\n                offset = offset < 0 ? 0 : offset;\n            }\n            return new ViewPosition(viewParent, offset);\n        }\n        // domParent instanceof HTMLElement.\n        else {\n            if (domOffset === 0) {\n                const viewParent = this.mapDomToView(domParent);\n                if (viewParent) {\n                    return new ViewPosition(viewParent, 0);\n                }\n            }\n            else {\n                const domBefore = domParent.childNodes[domOffset - 1];\n                // Jump over an inline filler (and also on Firefox jump over a block filler while pressing backspace in an empty paragraph).\n                if (isText(domBefore) && isInlineFiller(domBefore) || domBefore && this.isBlockFiller(domBefore)) {\n                    return this.domPositionToView(domBefore.parentNode, indexOf(domBefore));\n                }\n                const viewBefore = isText(domBefore) ?\n                    this.findCorrespondingViewText(domBefore) :\n                    this.mapDomToView(domBefore);\n                // TODO #663\n                if (viewBefore && viewBefore.parent) {\n                    return new ViewPosition(viewBefore.parent, viewBefore.index + 1);\n                }\n            }\n            return null;\n        }\n    }\n    /**\n     * Returns corresponding view {@link module:engine/view/element~Element Element} or\n     * {@link module:engine/view/documentfragment~DocumentFragment} for provided DOM element or\n     * document fragment. If there is no view item {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n     * to the given DOM - `undefined` is returned.\n     *\n     * For all DOM elements rendered by a {@link module:engine/view/uielement~UIElement} or\n     * a {@link module:engine/view/rawelement~RawElement}, the parent `UIElement` or `RawElement` will be returned.\n     *\n     * @param domElementOrDocumentFragment DOM element or document fragment.\n     * @returns Corresponding view element, document fragment or `undefined` if no element was bound.\n     */\n    mapDomToView(domElementOrDocumentFragment) {\n        const hostElement = this.getHostViewElement(domElementOrDocumentFragment);\n        return hostElement || this._domToViewMapping.get(domElementOrDocumentFragment);\n    }\n    /**\n     * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n     * corresponding text node is returned based on the sibling or parent.\n     *\n     * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n     * to find the corresponding text node.\n     *\n     * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n     * element, it is used to find the corresponding text node.\n     *\n     * For all text nodes rendered by a {@link module:engine/view/uielement~UIElement} or\n     * a {@link module:engine/view/rawelement~RawElement}, the parent `UIElement` or `RawElement` will be returned.\n     *\n     * Otherwise `null` is returned.\n     *\n     * Note that for the block or inline {@link module:engine/view/filler filler} this method returns `null`.\n     *\n     * @param domText DOM text node.\n     * @returns Corresponding view text node or `null`, if it was not possible to find a corresponding node.\n     */\n    findCorrespondingViewText(domText) {\n        if (isInlineFiller(domText)) {\n            return null;\n        }\n        // If DOM text was rendered by a UIElement or a RawElement - return this parent element.\n        const hostElement = this.getHostViewElement(domText);\n        if (hostElement) {\n            return hostElement;\n        }\n        const previousSibling = domText.previousSibling;\n        // Try to use previous sibling to find the corresponding text node.\n        if (previousSibling) {\n            if (!(this.isElement(previousSibling))) {\n                // The previous is text or comment.\n                return null;\n            }\n            const viewElement = this.mapDomToView(previousSibling);\n            if (viewElement) {\n                const nextSibling = viewElement.nextSibling;\n                // It might be filler which has no corresponding view node.\n                if (nextSibling instanceof ViewText) {\n                    return nextSibling;\n                }\n                else {\n                    return null;\n                }\n            }\n        }\n        // Try to use parent to find the corresponding text node.\n        else {\n            const viewElement = this.mapDomToView(domText.parentNode);\n            if (viewElement) {\n                const firstChild = viewElement.getChild(0);\n                // It might be filler which has no corresponding view node.\n                if (firstChild instanceof ViewText) {\n                    return firstChild;\n                }\n                else {\n                    return null;\n                }\n            }\n        }\n        return null;\n    }\n    mapViewToDom(documentFragmentOrElement) {\n        return this._viewToDomMapping.get(documentFragmentOrElement);\n    }\n    /**\n     * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n     * corresponding text node is returned based on the sibling or parent.\n     *\n     * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n     * to find the corresponding text node.\n     *\n     * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n     * element, it is used to find the corresponding text node.\n     *\n     * Otherwise `null` is returned.\n     *\n     * @param viewText View text node.\n     * @returns Corresponding DOM text node or `null`, if it was not possible to find a corresponding node.\n     */\n    findCorrespondingDomText(viewText) {\n        const previousSibling = viewText.previousSibling;\n        // Try to use previous sibling to find the corresponding text node.\n        if (previousSibling && this.mapViewToDom(previousSibling)) {\n            return this.mapViewToDom(previousSibling).nextSibling;\n        }\n        // If this is a first node, try to use parent to find the corresponding text node.\n        if (!previousSibling && viewText.parent && this.mapViewToDom(viewText.parent)) {\n            return this.mapViewToDom(viewText.parent).childNodes[0];\n        }\n        return null;\n    }\n    /**\n     * Focuses DOM editable that is corresponding to provided {@link module:engine/view/editableelement~EditableElement}.\n     */\n    focus(viewEditable) {\n        const domEditable = this.mapViewToDom(viewEditable);\n        if (domEditable && domEditable.ownerDocument.activeElement !== domEditable) {\n            // Save the scrollX and scrollY positions before the focus.\n            const { scrollX, scrollY } = global.window;\n            const scrollPositions = [];\n            // Save all scrollLeft and scrollTop values starting from domEditable up to\n            // document#documentElement.\n            forEachDomElementAncestor(domEditable, node => {\n                const { scrollLeft, scrollTop } = node;\n                scrollPositions.push([scrollLeft, scrollTop]);\n            });\n            domEditable.focus();\n            // Restore scrollLeft and scrollTop values starting from domEditable up to\n            // document#documentElement.\n            // https://github.com/ckeditor/ckeditor5-engine/issues/951\n            // https://github.com/ckeditor/ckeditor5-engine/issues/957\n            forEachDomElementAncestor(domEditable, node => {\n                const [scrollLeft, scrollTop] = scrollPositions.shift();\n                node.scrollLeft = scrollLeft;\n                node.scrollTop = scrollTop;\n            });\n            // Restore the scrollX and scrollY positions after the focus.\n            // https://github.com/ckeditor/ckeditor5-engine/issues/951\n            global.window.scrollTo(scrollX, scrollY);\n        }\n    }\n    /**\n     * Remove DOM selection from blurred editable, so it won't interfere with clicking on dropdowns (especially on iOS).\n     *\n     * @internal\n     */\n    _clearDomSelection() {\n        const domEditable = this.mapViewToDom(this.document.selection.editableElement);\n        if (!domEditable) {\n            return;\n        }\n        // Check if DOM selection is inside editor editable element.\n        const domSelection = domEditable.ownerDocument.defaultView.getSelection();\n        const newViewSelection = this.domSelectionToView(domSelection);\n        const selectionInEditable = newViewSelection && newViewSelection.rangeCount > 0;\n        if (selectionInEditable) {\n            domSelection.removeAllRanges();\n        }\n    }\n    /**\n     * Returns `true` when `node.nodeType` equals `Node.ELEMENT_NODE`.\n     *\n     * @param node Node to check.\n     */\n    isElement(node) {\n        return node && node.nodeType == Node.ELEMENT_NODE;\n    }\n    /**\n     * Returns `true` when `node.nodeType` equals `Node.DOCUMENT_FRAGMENT_NODE`.\n     *\n     * @param node Node to check.\n     */\n    isDocumentFragment(node) {\n        return node && node.nodeType == Node.DOCUMENT_FRAGMENT_NODE;\n    }\n    /**\n     * Checks if the node is an instance of the block filler for this DOM converter.\n     *\n     * ```ts\n     * const converter = new DomConverter( viewDocument, { blockFillerMode: 'br' } );\n     *\n     * converter.isBlockFiller( BR_FILLER( document ) ); // true\n     * converter.isBlockFiller( NBSP_FILLER( document ) ); // false\n     * ```\n     *\n     * **Note:**: For the `'nbsp'` mode the method also checks context of a node so it cannot be a detached node.\n     *\n     * **Note:** A special case in the `'nbsp'` mode exists where the `<br>` in `<p><br></p>` is treated as a block filler.\n     *\n     * @param domNode DOM node to check.\n     * @returns True if a node is considered a block filler for given mode.\n     */\n    isBlockFiller(domNode) {\n        if (this.blockFillerMode == 'br') {\n            return domNode.isEqualNode(BR_FILLER_REF);\n        }\n        // Special case for <p><br></p> in which <br> should be treated as filler even when we are not in the 'br' mode. See ckeditor5#5564.\n        if (domNode.tagName === 'BR' &&\n            hasBlockParent(domNode, this.blockElements) &&\n            domNode.parentNode.childNodes.length === 1) {\n            return true;\n        }\n        // If not in 'br' mode, try recognizing both marked and regular nbsp block fillers.\n        return domNode.isEqualNode(MARKED_NBSP_FILLER_REF) || isNbspBlockFiller(domNode, this.blockElements);\n    }\n    /**\n     * Returns `true` if given selection is a backward selection, that is, if it's `focus` is before `anchor`.\n     *\n     * @param DOM Selection instance to check.\n     */\n    isDomSelectionBackward(selection) {\n        if (selection.isCollapsed) {\n            return false;\n        }\n        // Since it takes multiple lines of code to check whether a \"DOM Position\" is before/after another \"DOM Position\",\n        // we will use the fact that range will collapse if it's end is before it's start.\n        const range = this._domDocument.createRange();\n        try {\n            range.setStart(selection.anchorNode, selection.anchorOffset);\n            range.setEnd(selection.focusNode, selection.focusOffset);\n        }\n        catch (e) {\n            // Safari sometimes gives us a selection that makes Range.set{Start,End} throw.\n            // See https://github.com/ckeditor/ckeditor5/issues/12375.\n            return false;\n        }\n        const backward = range.collapsed;\n        range.detach();\n        return backward;\n    }\n    /**\n     * Returns a parent {@link module:engine/view/uielement~UIElement} or {@link module:engine/view/rawelement~RawElement}\n     * that hosts the provided DOM node. Returns `null` if there is no such parent.\n     */\n    getHostViewElement(domNode) {\n        const ancestors = getAncestors(domNode);\n        // Remove domNode from the list.\n        ancestors.pop();\n        while (ancestors.length) {\n            const domNode = ancestors.pop();\n            const viewNode = this._domToViewMapping.get(domNode);\n            if (viewNode && (viewNode.is('uiElement') || viewNode.is('rawElement'))) {\n                return viewNode;\n            }\n        }\n        return null;\n    }\n    /**\n     * Checks if the given selection's boundaries are at correct places.\n     *\n     * The following places are considered as incorrect for selection boundaries:\n     *\n     * * before or in the middle of an inline filler sequence,\n     * * inside a DOM element which represents {@link module:engine/view/uielement~UIElement a view UI element},\n     * * inside a DOM element which represents {@link module:engine/view/rawelement~RawElement a view raw element}.\n     *\n     * @param domSelection The DOM selection object to be checked.\n     * @returns `true` if the given selection is at a correct place, `false` otherwise.\n     */\n    isDomSelectionCorrect(domSelection) {\n        return this._isDomSelectionPositionCorrect(domSelection.anchorNode, domSelection.anchorOffset) &&\n            this._isDomSelectionPositionCorrect(domSelection.focusNode, domSelection.focusOffset);\n    }\n    /**\n     * Registers a {@link module:engine/view/matcher~MatcherPattern} for view elements whose content should be treated as raw data\n     * and not processed during the conversion from DOM nodes to view elements.\n     *\n     * This is affecting how {@link module:engine/view/domconverter~DomConverter#domToView} and\n     * {@link module:engine/view/domconverter~DomConverter#domChildrenToView} process DOM nodes.\n     *\n     * The raw data can be later accessed by a\n     * {@link module:engine/view/element~Element#getCustomProperty custom property of a view element} called `\"$rawContent\"`.\n     *\n     * @param pattern Pattern matching a view element whose content should\n     * be treated as raw data.\n     */\n    registerRawContentMatcher(pattern) {\n        this._rawContentElementMatcher.add(pattern);\n    }\n    /**\n     * Registers a {@link module:engine/view/matcher~MatcherPattern} for inline object view elements.\n     *\n     * This is affecting how {@link module:engine/view/domconverter~DomConverter#domToView} and\n     * {@link module:engine/view/domconverter~DomConverter#domChildrenToView} process DOM nodes.\n     *\n     * This is an extension of a simple {@link #inlineObjectElements} array of element names.\n     *\n     * @param pattern Pattern matching a view element which should be treated as an inline object.\n     */\n    registerInlineObjectMatcher(pattern) {\n        this._inlineObjectElementMatcher.add(pattern);\n    }\n    /**\n     * Clear temporary custom properties.\n     *\n     * @internal\n     */\n    _clearTemporaryCustomProperties() {\n        for (const element of this._elementsWithTemporaryCustomProperties) {\n            element._removeCustomProperty('editingPipeline:doNotReuseOnce');\n        }\n        this._elementsWithTemporaryCustomProperties.clear();\n    }\n    /**\n     * Returns the block {@link module:engine/view/filler filler} node based on the current {@link #blockFillerMode} setting.\n     */\n    _getBlockFiller() {\n        switch (this.blockFillerMode) {\n            case 'nbsp':\n                return NBSP_FILLER(this._domDocument); // eslint-disable-line new-cap\n            case 'markedNbsp':\n                return MARKED_NBSP_FILLER(this._domDocument); // eslint-disable-line new-cap\n            case 'br':\n                return BR_FILLER(this._domDocument); // eslint-disable-line new-cap\n        }\n    }\n    /**\n     * Checks if the given DOM position is a correct place for selection boundary. See {@link #isDomSelectionCorrect}.\n     *\n     * @param domParent Position parent.\n     * @param offset Position offset.\n     * @returns `true` if given position is at a correct place for selection boundary, `false` otherwise.\n     */\n    _isDomSelectionPositionCorrect(domParent, offset) {\n        // If selection is before or in the middle of inline filler string, it is incorrect.\n        if (isText(domParent) && startsWithFiller(domParent) && offset < INLINE_FILLER_LENGTH) {\n            // Selection in a text node, at wrong position (before or in the middle of filler).\n            return false;\n        }\n        if (this.isElement(domParent) && startsWithFiller(domParent.childNodes[offset])) {\n            // Selection in an element node, before filler text node.\n            return false;\n        }\n        const viewParent = this.mapDomToView(domParent);\n        // The position is incorrect when anchored inside a UIElement or a RawElement.\n        // Note: In case of UIElement and RawElement, mapDomToView() returns a parent element for any DOM child\n        // so there's no need to perform any additional checks.\n        if (viewParent && (viewParent.is('uiElement') || viewParent.is('rawElement'))) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Internal generator for {@link #domToView}. Also used by {@link #domChildrenToView}.\n     * Separates DOM nodes conversion from whitespaces processing.\n     *\n     * @param domNode DOM node or document fragment to transform.\n     * @param inlineNodes An array of recently encountered inline nodes truncated to the block element boundaries.\n     * Used later to process whitespaces.\n     */\n    *_domToView(domNode, options, inlineNodes) {\n        if (this.isBlockFiller(domNode)) {\n            return null;\n        }\n        // When node is inside a UIElement or a RawElement return that parent as it's view representation.\n        const hostElement = this.getHostViewElement(domNode);\n        if (hostElement) {\n            return hostElement;\n        }\n        if (isComment(domNode) && options.skipComments) {\n            return null;\n        }\n        if (isText(domNode)) {\n            if (isInlineFiller(domNode)) {\n                return null;\n            }\n            else {\n                const textData = domNode.data;\n                if (textData === '') {\n                    return null;\n                }\n                const textNode = new ViewText(this.document, textData);\n                inlineNodes.push(textNode);\n                return textNode;\n            }\n        }\n        else {\n            let viewElement = this.mapDomToView(domNode);\n            if (viewElement) {\n                if (this._isInlineObjectElement(viewElement)) {\n                    inlineNodes.push(viewElement);\n                }\n                return viewElement;\n            }\n            if (this.isDocumentFragment(domNode)) {\n                // Create view document fragment.\n                viewElement = new ViewDocumentFragment(this.document);\n                if (options.bind) {\n                    this.bindDocumentFragments(domNode, viewElement);\n                }\n            }\n            else {\n                // Create view element.\n                viewElement = this._createViewElement(domNode, options);\n                if (options.bind) {\n                    this.bindElements(domNode, viewElement);\n                }\n                // Copy element's attributes.\n                const attrs = domNode.attributes;\n                if (attrs) {\n                    for (let l = attrs.length, i = 0; i < l; i++) {\n                        viewElement._setAttribute(attrs[i].name, attrs[i].value);\n                    }\n                }\n                // Treat this element's content as a raw data if it was registered as such.\n                if (this._isViewElementWithRawContent(viewElement, options)) {\n                    viewElement._setCustomProperty('$rawContent', domNode.innerHTML);\n                    if (!this._isBlockViewElement(viewElement)) {\n                        inlineNodes.push(viewElement);\n                    }\n                    return viewElement;\n                }\n                // Comment node is also treated as an element with raw data.\n                if (isComment(domNode)) {\n                    viewElement._setCustomProperty('$rawContent', domNode.data);\n                    return viewElement;\n                }\n            }\n            // Yield the element first so the flow of nested inline nodes is not reversed inside elements.\n            yield viewElement;\n            const nestedInlineNodes = [];\n            if (options.withChildren !== false) {\n                for (const child of this.domChildrenToView(domNode, options, nestedInlineNodes)) {\n                    viewElement._appendChild(child);\n                }\n            }\n            // Check if this is an inline object after processing child nodes so matcher\n            // for inline objects can verify if the element is empty.\n            if (this._isInlineObjectElement(viewElement)) {\n                inlineNodes.push(viewElement);\n                // Inline object content should be handled as a flow-root.\n                this._processDomInlineNodes(null, nestedInlineNodes, options);\n            }\n            else {\n                // It's an inline element that is not an object (like <b>, <i>) or a block element.\n                for (const inlineNode of nestedInlineNodes) {\n                    inlineNodes.push(inlineNode);\n                }\n            }\n        }\n    }\n    /**\n     * Internal helper that walks the list of inline view nodes already generated from DOM nodes\n     * and handles whitespaces and NBSPs.\n     *\n     * @param domParent The DOM parent of the given inline nodes. This should be a document fragment or\n     * a block element to whitespace processing start cleaning.\n     * @param inlineNodes An array of recently encountered inline nodes truncated to the block element boundaries.\n     */\n    _processDomInlineNodes(domParent, inlineNodes, options) {\n        if (!inlineNodes.length) {\n            return;\n        }\n        // Process text nodes only after reaching a block or document fragment,\n        // do not alter whitespaces while processing an inline element like <b> or <i>.\n        if (domParent && !this.isDocumentFragment(domParent) && !this._isBlockDomElement(domParent)) {\n            return;\n        }\n        let prevNodeEndsWithSpace = false;\n        for (let i = 0; i < inlineNodes.length; i++) {\n            const node = inlineNodes[i];\n            if (!node.is('$text')) {\n                prevNodeEndsWithSpace = false;\n                continue;\n            }\n            let data;\n            let nodeEndsWithSpace = false;\n            if (this._isPreFormatted(node)) {\n                data = getDataWithoutFiller(node.data);\n            }\n            else {\n                // Change all consecutive whitespace characters (from the [ \\n\\t\\r] set –\n                // see https://github.com/ckeditor/ckeditor5-engine/issues/822#issuecomment-311670249) to a single space character.\n                // That's how multiple whitespaces are treated when rendered, so we normalize those whitespaces.\n                // We're replacing 1+ (and not 2+) to also normalize singular \\n\\t\\r characters (#822).\n                data = node.data.replace(/[ \\n\\t\\r]{1,}/g, ' ');\n                nodeEndsWithSpace = /[^\\S\\u00A0]/.test(data.charAt(data.length - 1));\n                const prevNode = i > 0 ? inlineNodes[i - 1] : null;\n                const nextNode = i + 1 < inlineNodes.length ? inlineNodes[i + 1] : null;\n                const shouldLeftTrim = !prevNode || prevNode.is('element') && prevNode.name == 'br' || prevNodeEndsWithSpace;\n                const shouldRightTrim = nextNode ? false : !startsWithFiller(node.data);\n                // Do not try to clear whitespaces if this is flat mapping for the purpose of mutation observer and differ in rendering.\n                if (options.withChildren !== false) {\n                    // If the previous dom text node does not exist or it ends by whitespace character, remove space character from the\n                    // beginning of this text node. Such space character is treated as a whitespace.\n                    if (shouldLeftTrim) {\n                        data = data.replace(/^ /, '');\n                    }\n                    // If the next text node does not exist remove space character from the end of this text node.\n                    if (shouldRightTrim) {\n                        data = data.replace(/ $/, '');\n                    }\n                }\n                // At the beginning and end of a block element, Firefox inserts normal space + <br> instead of non-breaking space.\n                // This means that the text node starts/end with normal space instead of non-breaking space.\n                // This causes a problem because the normal space would be removed in `.replace` calls above. To prevent that,\n                // the inline filler is removed only after the data is initially processed (by the `.replace` above). See ckeditor5#692.\n                data = getDataWithoutFiller(data);\n                // At this point we should have removed all whitespaces from DOM text data.\n                //\n                // Now, We will reverse the process that happens in `_processDataFromViewText`.\n                //\n                // We have to change &nbsp; chars, that were in DOM text data because of rendering reasons, to spaces.\n                // First, change all ` \\u00A0` pairs (space + &nbsp;) to two spaces. DOM converter changes two spaces from model/view to\n                // ` \\u00A0` to ensure proper rendering. Since here we convert back, we recognize those pairs and change them back to `  `.\n                data = data.replace(/ \\u00A0/g, '  ');\n                const isNextNodeInlineObjectElement = nextNode && nextNode.is('element') && nextNode.name != 'br';\n                const isNextNodeStartingWithSpace = nextNode && nextNode.is('$text') && nextNode.data.charAt(0) == ' ';\n                // Then, let's change the last nbsp to a space.\n                if (/[ \\u00A0]\\u00A0$/.test(data) || !nextNode || isNextNodeInlineObjectElement || isNextNodeStartingWithSpace) {\n                    data = data.replace(/\\u00A0$/, ' ');\n                }\n                // Then, change &nbsp; character that is at the beginning of the text node to space character.\n                // We do that replacement only if this is the first node or the previous node ends on whitespace character.\n                if (shouldLeftTrim || prevNode && prevNode.is('element') && prevNode.name != 'br') {\n                    data = data.replace(/^\\u00A0/, ' ');\n                }\n            }\n            // At this point, all whitespaces should be removed and all &nbsp; created for rendering reasons should be\n            // changed to normal space. All left &nbsp; are &nbsp; inserted intentionally.\n            if (data.length == 0 && node.parent) {\n                node._remove();\n                inlineNodes.splice(i, 1);\n                i--;\n            }\n            else {\n                node._data = data;\n                prevNodeEndsWithSpace = nodeEndsWithSpace;\n            }\n        }\n        inlineNodes.length = 0;\n    }\n    /**\n     * Takes text data from a given {@link module:engine/view/text~Text#data} and processes it so\n     * it is correctly displayed in the DOM.\n     *\n     * Following changes are done:\n     *\n     * * a space at the beginning is changed to `&nbsp;` if this is the first text node in its container\n     * element or if a previous text node ends with a space character,\n     * * space at the end of the text node is changed to `&nbsp;` if there are two spaces at the end of a node or if next node\n     * starts with a space or if it is the last text node in its container,\n     * * remaining spaces are replaced to a chain of spaces and `&nbsp;` (e.g. `'x   x'` becomes `'x &nbsp; x'`).\n     *\n     * Content of {@link #preElements} is not processed.\n     *\n     * @param node View text node to process.\n     * @returns Processed text data.\n     */\n    _processDataFromViewText(node) {\n        let data = node.data;\n        // If the currently processed view text node is preformatted, we should not change whitespaces.\n        if (this._isPreFormatted(node)) {\n            return data;\n        }\n        // 1. Replace the first space with a nbsp if the previous node ends with a space or there is no previous node\n        // (container element boundary).\n        if (data.charAt(0) == ' ') {\n            const prevNode = this._getTouchingInlineViewNode(node, false);\n            const prevEndsWithSpace = prevNode && prevNode.is('$textProxy') && this._nodeEndsWithSpace(prevNode);\n            if (prevEndsWithSpace || !prevNode) {\n                data = '\\u00A0' + data.substr(1);\n            }\n        }\n        // 2. Replace the last space with nbsp if there are two spaces at the end or if the next node starts with space or there is no\n        // next node (container element boundary).\n        //\n        // Keep in mind that Firefox prefers $nbsp; before tag, not inside it:\n        //\n        // Foo <span>&nbsp;bar</span>  <-- bad.\n        // Foo&nbsp;<span> bar</span>  <-- good.\n        //\n        // More here: https://github.com/ckeditor/ckeditor5-engine/issues/1747.\n        if (data.charAt(data.length - 1) == ' ') {\n            const nextNode = this._getTouchingInlineViewNode(node, true);\n            const nextStartsWithSpace = nextNode && nextNode.is('$textProxy') && nextNode.data.charAt(0) == ' ';\n            if (data.charAt(data.length - 2) == ' ' || !nextNode || nextStartsWithSpace) {\n                data = data.substr(0, data.length - 1) + '\\u00A0';\n            }\n        }\n        // 3. Create space+nbsp pairs.\n        return data.replace(/ {2}/g, ' \\u00A0');\n    }\n    /**\n     * Checks whether given node ends with a space character after changing appropriate space characters to `&nbsp;`s.\n     *\n     * @param  node Node to check.\n     * @returns `true` if given `node` ends with space, `false` otherwise.\n     */\n    _nodeEndsWithSpace(node) {\n        if (this._isPreFormatted(node)) {\n            return false;\n        }\n        const data = this._processDataFromViewText(node);\n        return data.charAt(data.length - 1) == ' ';\n    }\n    /**\n     * Checks whether given text contains preformatted white space. This is the case if\n     * * any of node ancestors has a name which is in `preElements` array, or\n     * * the closest ancestor that has the `white-space` CSS property sets it to a value that preserves spaces\n     *\n     * @param node Node to check\n     * @returns `true` if given node contains preformatted white space, `false` otherwise.\n     */\n    _isPreFormatted(node) {\n        if (_hasViewParentOfType(node, this.preElements)) {\n            return true;\n        }\n        for (const ancestor of node.getAncestors({ parentFirst: true })) {\n            if (!ancestor.is('element') || !ancestor.hasStyle('white-space') || ancestor.getStyle('white-space') === 'inherit') {\n                continue;\n            }\n            // If the node contains the `white-space` property with a value that does not preserve spaces, it will take\n            // precedence over any white-space settings its ancestors contain, so no further parent checking needs to\n            // be done.\n            return ['pre', 'pre-wrap', 'break-spaces'].includes(ancestor.getStyle('white-space'));\n        }\n        return false;\n    }\n    /**\n     * Helper function. For given {@link module:engine/view/text~Text view text node}, it finds previous or next sibling\n     * that is contained in the same container element. If there is no such sibling, `null` is returned.\n     *\n     * @param node Reference node.\n     * @returns Touching text node, an inline object\n     * or `null` if there is no next or previous touching text node.\n     */\n    _getTouchingInlineViewNode(node, getNext) {\n        const treeWalker = new ViewTreeWalker({\n            startPosition: getNext ? ViewPosition._createAfter(node) : ViewPosition._createBefore(node),\n            direction: getNext ? 'forward' : 'backward'\n        });\n        for (const { item } of treeWalker) {\n            // Found a text node in the same container element.\n            if (item.is('$textProxy')) {\n                return item;\n            }\n            // Found a transparent element, skip it and continue inside it.\n            else if (item.is('element') && item.getCustomProperty('dataPipeline:transparentRendering')) {\n                continue;\n            }\n            // <br> found – it works like a block boundary, so do not scan further.\n            else if (item.is('element', 'br')) {\n                return null;\n            }\n            // Found an inline object (for example an image).\n            else if (this._isInlineObjectElement(item)) {\n                return item;\n            }\n            // ViewContainerElement is found on a way to next ViewText node, so given `node` was first/last\n            // text node in its container element.\n            else if (item.is('containerElement')) {\n                return null;\n            }\n        }\n        return null;\n    }\n    /**\n     * Returns `true` if a DOM node belongs to {@link #blockElements}. `false` otherwise.\n     */\n    _isBlockDomElement(node) {\n        return this.isElement(node) && this.blockElements.includes(node.tagName.toLowerCase());\n    }\n    /**\n     * Returns `true` if a view node belongs to {@link #blockElements}. `false` otherwise.\n     */\n    _isBlockViewElement(node) {\n        return node.is('element') && this.blockElements.includes(node.name);\n    }\n    /**\n     * Returns `true` if a DOM node belongs to {@link #inlineObjectElements}. `false` otherwise.\n     */\n    _isInlineObjectElement(node) {\n        if (!node.is('element')) {\n            return false;\n        }\n        return node.name == 'br' ||\n            this.inlineObjectElements.includes(node.name) ||\n            !!this._inlineObjectElementMatcher.match(node);\n    }\n    /**\n     * Creates view element basing on the node type.\n     *\n     * @param node DOM node to check.\n     * @param options Conversion options. See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n     */\n    _createViewElement(node, options) {\n        if (isComment(node)) {\n            return new ViewUIElement(this.document, '$comment');\n        }\n        const viewName = options.keepOriginalCase ? node.tagName : node.tagName.toLowerCase();\n        return new ViewElement(this.document, viewName);\n    }\n    /**\n     * Checks if view element's content should be treated as a raw data.\n     *\n     * @param viewElement View element to check.\n     * @param options Conversion options. See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n     */\n    _isViewElementWithRawContent(viewElement, options) {\n        return options.withChildren !== false && viewElement.is('element') && !!this._rawContentElementMatcher.match(viewElement);\n    }\n    /**\n     * Checks whether a given element name should be renamed in a current rendering mode.\n     *\n     * @param elementName The name of view element.\n     */\n    _shouldRenameElement(elementName) {\n        const name = elementName.toLowerCase();\n        return this.renderingMode === 'editing' && this.unsafeElements.includes(name);\n    }\n    /**\n     * Return a <span> element with a special attribute holding the name of the original element.\n     * Optionally, copy all the attributes of the original element if that element is provided.\n     *\n     * @param elementName The name of view element.\n     * @param originalDomElement The original DOM element to copy attributes and content from.\n     */\n    _createReplacementDomElement(elementName, originalDomElement) {\n        const newDomElement = this._domDocument.createElement('span');\n        // Mark the span replacing a script as hidden.\n        newDomElement.setAttribute(UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE, elementName);\n        if (originalDomElement) {\n            while (originalDomElement.firstChild) {\n                newDomElement.appendChild(originalDomElement.firstChild);\n            }\n            for (const attributeName of originalDomElement.getAttributeNames()) {\n                newDomElement.setAttribute(attributeName, originalDomElement.getAttribute(attributeName));\n            }\n        }\n        return newDomElement;\n    }\n}\n/**\n * Helper function.\n * Used to check if given native `Element` or `Text` node has parent with tag name from `types` array.\n *\n * @returns`true` if such parent exists or `false` if it does not.\n */\nfunction _hasViewParentOfType(node, types) {\n    return node.getAncestors().some(parent => parent.is('element') && types.includes(parent.name));\n}\n/**\n * A helper that executes given callback for each DOM node's ancestor, starting from the given node\n * and ending in document#documentElement.\n *\n * @param callback A callback to be executed for each ancestor.\n */\nfunction forEachDomElementAncestor(element, callback) {\n    let node = element;\n    while (node) {\n        callback(node);\n        node = node.parentElement;\n    }\n}\n/**\n * Checks if given node is a nbsp block filler.\n *\n * A &nbsp; is a block filler only if it is a single child of a block element.\n *\n * @param domNode DOM node.\n */\nfunction isNbspBlockFiller(domNode, blockElements) {\n    const isNBSP = domNode.isEqualNode(NBSP_FILLER_REF);\n    return isNBSP && hasBlockParent(domNode, blockElements) && domNode.parentNode.childNodes.length === 1;\n}\n/**\n * Checks if domNode has block parent.\n *\n * @param domNode DOM node.\n */\nfunction hasBlockParent(domNode, blockElements) {\n    const parent = domNode.parentNode;\n    return !!parent && !!parent.tagName && blockElements.includes(parent.tagName.toLowerCase());\n}\n/**\n * Log to console the information about element that was replaced.\n * Check UNSAFE_ELEMENTS for all recognized unsafe elements.\n *\n * @param elementName The name of the view element.\n */\nfunction _logUnsafeElement(elementName) {\n    if (elementName === 'script') {\n        logWarning('domconverter-unsafe-script-element-detected');\n    }\n    if (elementName === 'style') {\n        logWarning('domconverter-unsafe-style-element-detected');\n    }\n}\n/**\n * In certain cases, Firefox mysteriously assigns so called \"restricted objects\" to native DOM Range properties.\n * Any attempt at accessing restricted object's properties causes errors.\n * See: https://github.com/ckeditor/ckeditor5/issues/9635.\n */\nfunction isGeckoRestrictedDomSelection(domSelection) {\n    if (!env.isGecko) {\n        return false;\n    }\n    if (!domSelection.rangeCount) {\n        return false;\n    }\n    const container = domSelection.getRangeAt(0).startContainer;\n    try {\n        Object.prototype.toString.call(container);\n    }\n    catch (error) {\n        return true;\n    }\n    return false;\n}\n/**\n * While rendering the editor content, the {@link module:engine/view/domconverter~DomConverter} detected a `<script>` element that may\n * disrupt the editing experience. To avoid this, the `<script>` element was replaced with `<span data-ck-unsafe-element=\"script\"></span>`.\n *\n * @error domconverter-unsafe-script-element-detected\n */\n/**\n * While rendering the editor content, the {@link module:engine/view/domconverter~DomConverter} detected a `<style>` element that may affect\n * the editing experience. To avoid this, the `<style>` element was replaced with `<span data-ck-unsafe-element=\"style\"></span>`.\n *\n * @error domconverter-unsafe-style-element-detected\n */\n/**\n * The {@link module:engine/view/domconverter~DomConverter} detected an interactive attribute in the\n * {@glink framework/architecture/editing-engine#editing-pipeline editing pipeline}. For the best\n * editing experience, the attribute was renamed to `data-ck-unsafe-attribute-[original attribute name]`.\n *\n * If you are the author of the plugin that generated this attribute and you want it to be preserved\n * in the editing pipeline, you can configure this when creating the element\n * using {@link module:engine/view/downcastwriter~DowncastWriter} during the\n * {@glink framework/architecture/editing-engine#conversion model–view conversion}. Methods such as\n * {@link module:engine/view/downcastwriter~DowncastWriter#createContainerElement},\n * {@link module:engine/view/downcastwriter~DowncastWriter#createAttributeElement}, or\n * {@link module:engine/view/downcastwriter~DowncastWriter#createEmptyElement}\n * accept an option that will disable filtering of specific attributes:\n *\n * ```ts\n * const paragraph = writer.createContainerElement( 'p',\n * \t{\n * \t\tclass: 'clickable-paragraph',\n * \t\tonclick: 'alert( \"Paragraph clicked!\" )'\n * \t},\n * \t{\n * \t\t// Make sure the \"onclick\" attribute will pass through.\n * \t\trenderUnsafeAttributes: [ 'onclick' ]\n * \t}\n * );\n * ```\n *\n * @error domconverter-unsafe-attribute-detected\n * @param domElement The DOM element the attribute was set on.\n * @param key The original name of the attribute\n * @param value The value of the original attribute\n */\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/dom/isvalidattributename\n */\nimport global from './global.js';\n/**\n * Checks if the given attribute name is valid in terms of HTML.\n *\n * @param name Attribute name.\n */\nexport default function isValidAttributeName(name) {\n    try {\n        global.document.createAttribute(name);\n    }\n    catch (error) {\n        return false;\n    }\n    return true;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/observer\n */\nimport { DomEmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Abstract base observer class. Observers are classes which listen to DOM events, do the preliminary\n * processing and fire events on the {@link module:engine/view/document~Document} objects.\n * Observers can also add features to the view, for instance by updating its status or marking elements\n * which need a refresh on DOM events.\n */\nexport default class Observer extends /* #__PURE__ */ DomEmitterMixin() {\n    /**\n     * Creates an instance of the observer.\n     */\n    constructor(view) {\n        super();\n        /**\n         * The state of the observer. If it is disabled, no events will be fired.\n         */\n        this._isEnabled = false;\n        this.view = view;\n        this.document = view.document;\n    }\n    /**\n     * The state of the observer. If it is disabled, no events will be fired.\n     */\n    get isEnabled() {\n        return this._isEnabled;\n    }\n    /**\n     * Enables the observer. This method is called when the observer is registered to the\n     * {@link module:engine/view/view~View} and after {@link module:engine/view/view~View#forceRender rendering}\n     * (all observers are {@link #disable disabled} before rendering).\n     *\n     * A typical use case for disabling observers is that mutation observers need to be disabled for the rendering.\n     * However, a child class may not need to be disabled, so it can implement an empty method.\n     *\n     * @see module:engine/view/observer/observer~Observer#disable\n     */\n    enable() {\n        this._isEnabled = true;\n    }\n    /**\n     * Disables the observer. This method is called before\n     * {@link module:engine/view/view~View#forceRender rendering} to prevent firing events during rendering.\n     *\n     * @see module:engine/view/observer/observer~Observer#enable\n     */\n    disable() {\n        this._isEnabled = false;\n    }\n    /**\n     * Disables and destroys the observer, among others removes event listeners created by the observer.\n     */\n    destroy() {\n        this.disable();\n        this.stopListening();\n    }\n    /**\n     * Checks whether a given DOM event should be ignored (should not be turned into a synthetic view document event).\n     *\n     * Currently, an event will be ignored only if its target or any of its ancestors has the `data-cke-ignore-events` attribute.\n     * This attribute can be used inside the structures generated by\n     * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `DowncastWriter#createUIElement()`} to ignore events\n     * fired within a UI that should be excluded from CKEditor 5's realms.\n     *\n     * @param domTarget The DOM event target to check (usually an element, sometimes a text node and\n     * potentially sometimes a document, too).\n     * @returns Whether this event should be ignored by the observer.\n     */\n    checkShouldIgnoreEventFromTarget(domTarget) {\n        if (domTarget && domTarget.nodeType === 3) {\n            domTarget = domTarget.parentNode;\n        }\n        if (!domTarget || domTarget.nodeType !== 1) {\n            return false;\n        }\n        return domTarget.matches('[data-cke-ignore-events], [data-cke-ignore-events] *');\n    }\n}\n", "import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keysIn from './keysIn.js';\n\n/**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\nvar assignIn = createAssigner(function(object, source) {\n  copyObject(source, keysIn(source), object);\n});\n\nexport default assignIn;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/domeventdata\n */\nimport { extend } from 'lodash-es';\n/**\n * Information about a DOM event in context of the {@link module:engine/view/document~Document}.\n * It wraps the native event, which usually should not be used as the wrapper contains\n * additional data (like key code for keyboard events).\n *\n * @typeParam TEvent The type of DOM Event that this class represents.\n */\nexport default class DomEventData {\n    /**\n     * @param view The instance of the view controller.\n     * @param domEvent The DOM event.\n     * @param additionalData Additional properties that the instance should contain.\n     */\n    constructor(view, domEvent, additionalData) {\n        this.view = view;\n        this.document = view.document;\n        this.domEvent = domEvent;\n        this.domTarget = domEvent.target;\n        extend(this, additionalData);\n    }\n    /**\n     * The tree view element representing the target.\n     */\n    get target() {\n        return this.view.domConverter.mapDomToView(this.domTarget);\n    }\n    /**\n     * Prevents the native's event default action.\n     */\n    preventDefault() {\n        this.domEvent.preventDefault();\n    }\n    /**\n     * Stops native event propagation.\n     */\n    stopPropagation() {\n        this.domEvent.stopPropagation();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/domeventobserver\n */\nimport Observer from './observer.js';\nimport DomEventData from './domeventdata.js';\n/**\n * Base class for DOM event observers. This class handles\n * {@link module:engine/view/observer/observer~Observer#observe adding} listeners to DOM elements,\n * {@link module:engine/view/observer/observer~Observer#disable disabling} and\n * {@link module:engine/view/observer/observer~Observer#enable re-enabling} events.\n * Child class needs to define\n * {@link module:engine/view/observer/domeventobserver~DomEventObserver#domEventType DOM event type} and\n * {@link module:engine/view/observer/domeventobserver~DomEventObserver#onDomEvent callback}.\n *\n * For instance:\n *\n * ```ts\n * class ClickObserver extends DomEventObserver<'click'> {\n * \t// It can also be defined as a normal property in the constructor.\n * \tget domEventType(): 'click' {\n * \t\treturn 'click';\n * \t}\n *\n * \tonDomEvent( domEvent: MouseEvent ): void {\n * \t\tthis.fire( 'click', domEvent );\n * \t}\n * }\n * ```\n *\n * @typeParam EventType DOM Event type name or an union of those.\n * @typeParam AdditionalData Additional data passed along with the event.\n */\nexport default class DomEventObserver extends Observer {\n    constructor() {\n        super(...arguments);\n        /**\n         * If set to `true` DOM events will be listened on the capturing phase.\n         * Default value is `false`.\n         */\n        this.useCapture = false;\n        /**\n         * If set to `true`, indicates that the function specified by listener will never call `preventDefault()`.\n         * Default value is `false`.\n         */\n        this.usePassive = false;\n    }\n    /**\n     * @inheritDoc\n     */\n    observe(domElement) {\n        const types = typeof this.domEventType == 'string' ? [this.domEventType] : this.domEventType;\n        types.forEach(type => {\n            this.listenTo(domElement, type, (eventInfo, domEvent) => {\n                if (this.isEnabled && !this.checkShouldIgnoreEventFromTarget(domEvent.target)) {\n                    this.onDomEvent(domEvent);\n                }\n            }, { useCapture: this.useCapture, usePassive: this.usePassive });\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    stopObserving(domElement) {\n        this.stopListening(domElement);\n    }\n    /**\n     * Calls `Document#fire()` if observer {@link #isEnabled is enabled}.\n     *\n     * @see module:utils/emittermixin~Emitter#fire\n     * @param eventType The event type (name).\n     * @param domEvent The DOM event.\n     * @param additionalData The additional data which should extend the\n     * {@link module:engine/view/observer/domeventdata~DomEventData event data} object.\n     */\n    fire(eventType, domEvent, additionalData) {\n        if (this.isEnabled) {\n            this.document.fire(eventType, new DomEventData(this.view, domEvent, additionalData));\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/keyobserver\n */\nimport DomEventObserver from './domeventobserver.js';\nimport { getCode } from '@ckeditor/ckeditor5-utils';\n/**\n * Observer for events connected with pressing keyboard keys.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n */\nexport default class KeyObserver extends DomEventObserver {\n    constructor() {\n        super(...arguments);\n        /**\n         * @inheritDoc\n         */\n        this.domEventType = ['keydown', 'keyup'];\n    }\n    /**\n     * @inheritDoc\n     */\n    onDomEvent(domEvt) {\n        const data = {\n            keyCode: domEvt.keyCode,\n            altKey: domEvt.altKey,\n            ctrlKey: domEvt.ctrlKey,\n            shiftKey: domEvt.shiftKey,\n            metaKey: domEvt.metaKey,\n            get keystroke() {\n                return getCode(this);\n            }\n        };\n        this.fire(domEvt.type, domEvt, data);\n    }\n}\n", "import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n", "import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n", "import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n", "import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport default debounce;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/fakeselectionobserver\n */\nimport Observer from './observer.js';\nimport ViewSelection from '../selection.js';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils';\nimport { debounce } from 'lodash-es';\n/**\n * Fake selection observer class. If view selection is fake it is placed in dummy DOM container. This observer listens\n * on {@link module:engine/view/document~Document#event:keydown keydown} events and handles moving fake view selection to the correct place\n * if arrow keys are pressed.\n * Fires {@link module:engine/view/document~Document#event:selectionChange selectionChange event} simulating natural behaviour of\n * {@link module:engine/view/observer/selectionobserver~SelectionObserver SelectionObserver}.\n */\nexport default class FakeSelectionObserver extends Observer {\n    /**\n     * Creates new FakeSelectionObserver instance.\n     */\n    constructor(view) {\n        super(view);\n        this._fireSelectionChangeDoneDebounced = debounce(data => {\n            this.document.fire('selectionChangeDone', data);\n        }, 200);\n    }\n    /**\n     * @inheritDoc\n     */\n    observe() {\n        const document = this.document;\n        document.on('arrowKey', (eventInfo, data) => {\n            const selection = document.selection;\n            if (selection.isFake && this.isEnabled) {\n                // Prevents default key down handling - no selection change will occur.\n                data.preventDefault();\n            }\n        }, { context: '$capture' });\n        document.on('arrowKey', (eventInfo, data) => {\n            const selection = document.selection;\n            if (selection.isFake && this.isEnabled) {\n                this._handleSelectionMove(data.keyCode);\n            }\n        }, { priority: 'lowest' });\n    }\n    /**\n     * @inheritDoc\n     */\n    stopObserving() { }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this._fireSelectionChangeDoneDebounced.cancel();\n    }\n    /**\n     * Handles collapsing view selection according to given key code. If left or up key is provided - new selection will be\n     * collapsed to left. If right or down key is pressed - new selection will be collapsed to right.\n     *\n     * This method fires {@link module:engine/view/document~Document#event:selectionChange} and\n     * {@link module:engine/view/document~Document#event:selectionChangeDone} events imitating behaviour of\n     * {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n     */\n    _handleSelectionMove(keyCode) {\n        const selection = this.document.selection;\n        const newSelection = new ViewSelection(selection.getRanges(), { backward: selection.isBackward, fake: false });\n        // Left or up arrow pressed - move selection to start.\n        if (keyCode == keyCodes.arrowleft || keyCode == keyCodes.arrowup) {\n            newSelection.setTo(newSelection.getFirstPosition());\n        }\n        // Right or down arrow pressed - move selection to end.\n        if (keyCode == keyCodes.arrowright || keyCode == keyCodes.arrowdown) {\n            newSelection.setTo(newSelection.getLastPosition());\n        }\n        const data = {\n            oldSelection: selection,\n            newSelection,\n            domSelection: null\n        };\n        // Fire dummy selection change event.\n        this.document.fire('selectionChange', data);\n        // Call` #_fireSelectionChangeDoneDebounced` every time when `selectionChange` event is fired.\n        // This function is debounced what means that `selectionChangeDone` event will be fired only when\n        // defined int the function time will elapse since the last time the function was called.\n        // So `selectionChangeDone` will be fired when selection will stop changing.\n        this._fireSelectionChangeDoneDebounced(data);\n    }\n}\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nexport default setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n", "import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nexport default cacheHas;\n", "import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nexport default mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nexport default setToArray;\n", "import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nexport default equalByTag;\n", "import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalObjects;\n", "import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n", "import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n", "import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n *   return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n *   if (isGreeting(objValue) && isGreeting(othValue)) {\n *     return true;\n *   }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  var result = customizer ? customizer(value, other) : undefined;\n  return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nexport default isEqualWith;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/mutationobserver\n */\n/* globals window */\nimport Observer from './observer.js';\nimport { startsWithFiller } from '../filler.js';\nimport { isEqualWith } from 'lodash-es';\n// @if CK_DEBUG_TYPING // const { _debouncedLine } = require( '../../dev-utils/utils.js' );\n/**\n * Mutation observer's role is to watch for any DOM changes inside the editor that weren't\n * done by the editor's {@link module:engine/view/renderer~Renderer} itself and reverting these changes.\n *\n * It does this by observing all mutations in the DOM, marking related view elements as changed and calling\n * {@link module:engine/view/renderer~Renderer#render}. Because all mutated nodes are marked as\n * \"to be rendered\" and the {@link module:engine/view/renderer~Renderer#render `render()`} method is called,\n * all changes are reverted in the DOM (the DOM is synced with the editor's view structure).\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n */\nexport default class MutationObserver extends Observer {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        this._config = {\n            childList: true,\n            characterData: true,\n            subtree: true\n        };\n        this.domConverter = view.domConverter;\n        this._domElements = new Set();\n        this._mutationObserver = new window.MutationObserver(this._onMutations.bind(this));\n    }\n    /**\n     * Synchronously handles mutations and empties the queue.\n     */\n    flush() {\n        this._onMutations(this._mutationObserver.takeRecords());\n    }\n    /**\n     * @inheritDoc\n     */\n    observe(domElement) {\n        this._domElements.add(domElement);\n        if (this.isEnabled) {\n            this._mutationObserver.observe(domElement, this._config);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    stopObserving(domElement) {\n        this._domElements.delete(domElement);\n        if (this.isEnabled) {\n            // Unfortunately, it is not possible to stop observing particular DOM element.\n            // In order to stop observing one of multiple DOM elements, we need to re-connect the mutation observer.\n            this._mutationObserver.disconnect();\n            for (const domElement of this._domElements) {\n                this._mutationObserver.observe(domElement, this._config);\n            }\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    enable() {\n        super.enable();\n        for (const domElement of this._domElements) {\n            this._mutationObserver.observe(domElement, this._config);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    disable() {\n        super.disable();\n        this._mutationObserver.disconnect();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this._mutationObserver.disconnect();\n    }\n    /**\n     * Handles mutations. Mark view elements to sync and call render.\n     *\n     * @param domMutations Array of native mutations.\n     */\n    _onMutations(domMutations) {\n        // As a result of this.flush() we can have an empty collection.\n        if (domMutations.length === 0) {\n            return;\n        }\n        const domConverter = this.domConverter;\n        // Use map and set for deduplication.\n        const mutatedTextNodes = new Set();\n        const elementsWithMutatedChildren = new Set();\n        // Handle `childList` mutations first, so we will be able to check if the `characterData` mutation is in the\n        // element with changed structure anyway.\n        for (const mutation of domMutations) {\n            const element = domConverter.mapDomToView(mutation.target);\n            if (!element) {\n                continue;\n            }\n            // Do not collect mutations from UIElements and RawElements.\n            if (element.is('uiElement') || element.is('rawElement')) {\n                continue;\n            }\n            if (mutation.type === 'childList' && !this._isBogusBrMutation(mutation)) {\n                elementsWithMutatedChildren.add(element);\n            }\n        }\n        // Handle `characterData` mutations later, when we have the full list of nodes which changed structure.\n        for (const mutation of domMutations) {\n            const element = domConverter.mapDomToView(mutation.target);\n            // Do not collect mutations from UIElements and RawElements.\n            if (element && (element.is('uiElement') || element.is('rawElement'))) {\n                continue;\n            }\n            if (mutation.type === 'characterData') {\n                const text = domConverter.findCorrespondingViewText(mutation.target);\n                if (text && !elementsWithMutatedChildren.has(text.parent)) {\n                    mutatedTextNodes.add(text);\n                }\n                // When we added first letter to the text node which had only inline filler, for the DOM it is mutation\n                // on text, but for the view, where filler text node did not exist, new text node was created, so we\n                // need to handle it as a 'children' mutation instead of 'text'.\n                else if (!text && startsWithFiller(mutation.target)) {\n                    elementsWithMutatedChildren.add(domConverter.mapDomToView(mutation.target.parentNode));\n                }\n            }\n        }\n        // Now we build the list of mutations to mark elements. We did not do it earlier to avoid marking the\n        // same node multiple times in case of duplication.\n        const mutations = [];\n        for (const textNode of mutatedTextNodes) {\n            mutations.push({ type: 'text', node: textNode });\n        }\n        for (const viewElement of elementsWithMutatedChildren) {\n            const domElement = domConverter.mapViewToDom(viewElement);\n            const viewChildren = Array.from(viewElement.getChildren());\n            const newViewChildren = Array.from(domConverter.domChildrenToView(domElement, { withChildren: false }));\n            // It may happen that as a result of many changes (sth was inserted and then removed),\n            // both elements haven't really changed. #1031\n            if (!isEqualWith(viewChildren, newViewChildren, sameNodes)) {\n                mutations.push({ type: 'children', node: viewElement });\n            }\n        }\n        // In case only non-relevant mutations were recorded it skips the event and force render (#5600).\n        if (mutations.length) {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \t_debouncedLine();\n            // @if CK_DEBUG_TYPING // \tconsole.group( '%c[MutationObserver]%c Mutations detected',\n            // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green', 'font-weight: bold'\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            this.document.fire('mutations', { mutations });\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n            // @if CK_DEBUG_TYPING // }\n        }\n    }\n    /**\n     * Checks if mutation was generated by the browser inserting bogus br on the end of the block element.\n     * Such mutations are generated while pressing space or performing native spellchecker correction\n     * on the end of the block element in Firefox browser.\n     *\n     * @param mutation Native mutation object.\n     */\n    _isBogusBrMutation(mutation) {\n        let addedNode = null;\n        // Check if mutation added only one node on the end of its parent.\n        if (mutation.nextSibling === null && mutation.removedNodes.length === 0 && mutation.addedNodes.length == 1) {\n            addedNode = this.domConverter.domToView(mutation.addedNodes[0], {\n                withChildren: false\n            });\n        }\n        return addedNode && addedNode.is('element', 'br');\n    }\n}\nfunction sameNodes(child1, child2) {\n    // First level of comparison (array of children vs array of children) – use the Lodash's default behavior.\n    if (Array.isArray(child1)) {\n        return;\n    }\n    // Elements.\n    if (child1 === child2) {\n        return true;\n    }\n    // Texts.\n    else if (child1.is('$text') && child2.is('$text')) {\n        return child1.data === child2.data;\n    }\n    // Not matching types.\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/focusobserver\n */\n/* globals setTimeout, clearTimeout */\nimport DomEventObserver from './domeventobserver.js';\n/**\n * {@link module:engine/view/document~Document#event:focus Focus}\n * and {@link module:engine/view/document~Document#event:blur blur} events observer.\n * Focus observer handle also {@link module:engine/view/rooteditableelement~RootEditableElement#isFocused isFocused} property of the\n * {@link module:engine/view/rooteditableelement~RootEditableElement root elements}.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n */\nexport default class FocusObserver extends DomEventObserver {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        /**\n         * Identifier of the timeout currently used by focus listener to delay rendering execution.\n         */\n        this._renderTimeoutId = null;\n        /**\n         * Set to `true` if the document is in the process of setting the focus.\n         *\n         * The flag is used to indicate that setting the focus is in progress.\n         */\n        this._isFocusChanging = false;\n        /**\n         * @inheritDoc\n         */\n        this.domEventType = ['focus', 'blur'];\n        this.useCapture = true;\n        const document = this.document;\n        document.on('focus', () => this._handleFocus());\n        document.on('blur', (evt, data) => this._handleBlur(data));\n        // Focus the editor in cases where browser dispatches `beforeinput` event to a not-focused editable element.\n        // This is flushed by the beforeinput listener in the `InsertTextObserver`.\n        // Note that focus is set only if the document is not focused yet.\n        // See https://github.com/ckeditor/ckeditor5/issues/14702.\n        document.on('beforeinput', () => {\n            if (!document.isFocused) {\n                this._handleFocus();\n            }\n        }, { priority: 'highest' });\n    }\n    /**\n     * Finishes setting the document focus state.\n     */\n    flush() {\n        if (this._isFocusChanging) {\n            this._isFocusChanging = false;\n            this.document.isFocused = true;\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    onDomEvent(domEvent) {\n        this.fire(domEvent.type, domEvent);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this._clearTimeout();\n        super.destroy();\n    }\n    /**\n     * The `focus` event handler.\n     */\n    _handleFocus() {\n        this._clearTimeout();\n        this._isFocusChanging = true;\n        // Unfortunately native `selectionchange` event is fired asynchronously.\n        // We need to wait until `SelectionObserver` handle the event and then render. Otherwise rendering will\n        // overwrite new DOM selection with selection from the view.\n        // See https://github.com/ckeditor/ckeditor5-engine/issues/795 for more details.\n        // Long timeout is needed to solve #676 and https://github.com/ckeditor/ckeditor5-engine/issues/1157 issues.\n        //\n        // Using `view.change()` instead of `view.forceRender()` to prevent double rendering\n        // in a situation where `selectionchange` already caused selection change.\n        this._renderTimeoutId = setTimeout(() => {\n            this._renderTimeoutId = null;\n            this.flush();\n            this.view.change(() => { });\n        }, 50);\n    }\n    /**\n     * The `blur` event handler.\n     */\n    _handleBlur(data) {\n        const selectedEditable = this.document.selection.editableElement;\n        if (selectedEditable === null || selectedEditable === data.target) {\n            this.document.isFocused = false;\n            this._isFocusChanging = false;\n            // Re-render the document to update view elements\n            // (changing document.isFocused already marked view as changed since last rendering).\n            this.view.change(() => { });\n        }\n    }\n    /**\n     * Clears timeout.\n     */\n    _clearTimeout() {\n        if (this._renderTimeoutId) {\n            clearTimeout(this._renderTimeoutId);\n            this._renderTimeoutId = null;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/selectionobserver\n */\n/* global setInterval, clearInterval */\nimport Observer from './observer.js';\nimport MutationObserver from './mutationobserver.js';\nimport FocusObserver from './focusobserver.js';\nimport { env } from '@ckeditor/ckeditor5-utils';\nimport { debounce } from 'lodash-es';\n/**\n * Selection observer class observes selection changes in the document. If a selection changes on the document this\n * observer checks if the DOM selection is different from the {@link module:engine/view/document~Document#selection view selection}.\n * The selection observer fires {@link module:engine/view/document~Document#event:selectionChange} event only if\n * a selection change was the only change in the document and the DOM selection is different from the view selection.\n *\n * This observer also manages the {@link module:engine/view/document~Document#isSelecting} property of the view document.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n */\nexport default class SelectionObserver extends Observer {\n    constructor(view) {\n        super(view);\n        this.mutationObserver = view.getObserver(MutationObserver);\n        this.focusObserver = view.getObserver(FocusObserver);\n        this.selection = this.document.selection;\n        this.domConverter = view.domConverter;\n        this._documents = new WeakSet();\n        this._fireSelectionChangeDoneDebounced = debounce(data => {\n            this.document.fire('selectionChangeDone', data);\n        }, 200);\n        this._clearInfiniteLoopInterval = setInterval(() => this._clearInfiniteLoop(), 1000);\n        this._documentIsSelectingInactivityTimeoutDebounced = debounce(() => (this.document.isSelecting = false), 5000);\n        this._loopbackCounter = 0;\n    }\n    /**\n     * @inheritDoc\n     */\n    observe(domElement) {\n        const domDocument = domElement.ownerDocument;\n        const startDocumentIsSelecting = () => {\n            this.document.isSelecting = true;\n            // Let's activate the safety timeout each time the document enters the \"is selecting\" state.\n            this._documentIsSelectingInactivityTimeoutDebounced();\n        };\n        const endDocumentIsSelecting = () => {\n            if (!this.document.isSelecting) {\n                return;\n            }\n            // Make sure that model selection is up-to-date at the end of selecting process.\n            // Sometimes `selectionchange` events could arrive after the `mouseup` event and that selection could be already outdated.\n            this._handleSelectionChange(domDocument);\n            this.document.isSelecting = false;\n            // The safety timeout can be canceled when the document leaves the \"is selecting\" state.\n            this._documentIsSelectingInactivityTimeoutDebounced.cancel();\n        };\n        // The document has the \"is selecting\" state while the user keeps making (extending) the selection\n        // (e.g. by holding the mouse button and moving the cursor). The state resets when they either released\n        // the mouse button or interrupted the process by pressing or releasing any key.\n        this.listenTo(domElement, 'selectstart', startDocumentIsSelecting, { priority: 'highest' });\n        this.listenTo(domElement, 'keydown', endDocumentIsSelecting, { priority: 'highest', useCapture: true });\n        this.listenTo(domElement, 'keyup', endDocumentIsSelecting, { priority: 'highest', useCapture: true });\n        // Add document-wide listeners only once. This method could be called for multiple editing roots.\n        if (this._documents.has(domDocument)) {\n            return;\n        }\n        // This listener is using capture mode to make sure that selection is upcasted before any other\n        // handler would like to check it and update (for example table multi cell selection).\n        this.listenTo(domDocument, 'mouseup', endDocumentIsSelecting, { priority: 'highest', useCapture: true });\n        this.listenTo(domDocument, 'selectionchange', () => {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \t_debouncedLine();\n            // @if CK_DEBUG_TYPING // \tconst domSelection = domDocument.defaultView!.getSelection();\n            // @if CK_DEBUG_TYPING // \tconsole.group( '%c[SelectionObserver]%c selectionchange', 'color: green', ''\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[SelectionObserver]%c DOM Selection:', 'font-weight: bold; color: green', '',\n            // @if CK_DEBUG_TYPING // \t\t{ node: domSelection!.anchorNode, offset: domSelection!.anchorOffset },\n            // @if CK_DEBUG_TYPING // \t\t{ node: domSelection!.focusNode, offset: domSelection!.focusOffset }\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            // The Renderer is disabled while composing on non-android browsers, so we can't update the view selection\n            // because the DOM and view tree drifted apart. Position mapping could fail because of it.\n            if (this.document.isComposing && !env.isAndroid) {\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.info( '%c[SelectionObserver]%c Selection change ignored (isComposing)',\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green', ''\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n                // @if CK_DEBUG_TYPING // }\n                return;\n            }\n            this._handleSelectionChange(domDocument);\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n            // @if CK_DEBUG_TYPING // }\n            // Defer the safety timeout when the selection changes (e.g. the user keeps extending the selection\n            // using their mouse).\n            this._documentIsSelectingInactivityTimeoutDebounced();\n        });\n        // Update the model DocumentSelection just after the Renderer and the SelectionObserver are locked.\n        // We do this synchronously (without waiting for the `selectionchange` DOM event) as browser updates\n        // the DOM selection (but not visually) to span the text that is under composition and could be replaced.\n        this.listenTo(this.view.document, 'compositionstart', () => {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconst domSelection = domDocument.defaultView!.getSelection();\n            // @if CK_DEBUG_TYPING // \tconsole.group( '%c[SelectionObserver]%c update selection on compositionstart', 'color: green', ''\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[SelectionObserver]%c DOM Selection:', 'font-weight: bold; color: green', '',\n            // @if CK_DEBUG_TYPING // \t\t{ node: domSelection!.anchorNode, offset: domSelection!.anchorOffset },\n            // @if CK_DEBUG_TYPING // \t\t{ node: domSelection!.focusNode, offset: domSelection!.focusOffset }\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            this._handleSelectionChange(domDocument);\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n            // @if CK_DEBUG_TYPING // }\n        }, { priority: 'lowest' });\n        this._documents.add(domDocument);\n    }\n    /**\n     * @inheritDoc\n     */\n    stopObserving(domElement) {\n        this.stopListening(domElement);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        clearInterval(this._clearInfiniteLoopInterval);\n        this._fireSelectionChangeDoneDebounced.cancel();\n        this._documentIsSelectingInactivityTimeoutDebounced.cancel();\n    }\n    /* istanbul ignore next -- @preserve */\n    _reportInfiniteLoop() {\n        // @if CK_DEBUG //\t\tthrow new Error(\n        // @if CK_DEBUG //\t\t\t'Selection change observer detected an infinite rendering loop.\\n\\n' +\n        // @if CK_DEBUG //\t \t\t'⚠️⚠️ Report this error on https://github.com/ckeditor/ckeditor5/issues/11658.'\n        // @if CK_DEBUG //\t\t);\n    }\n    /**\n     * Selection change listener. {@link module:engine/view/observer/mutationobserver~MutationObserver#flush Flush} mutations, check if\n     * a selection changes and fires {@link module:engine/view/document~Document#event:selectionChange} event on every change\n     * and {@link module:engine/view/document~Document#event:selectionChangeDone} when a selection stop changing.\n     *\n     * @param domDocument DOM document.\n     */\n    _handleSelectionChange(domDocument) {\n        if (!this.isEnabled) {\n            return;\n        }\n        const domSelection = domDocument.defaultView.getSelection();\n        if (this.checkShouldIgnoreEventFromTarget(domSelection.anchorNode)) {\n            return;\n        }\n        // Ensure the mutation event will be before selection event on all browsers.\n        this.mutationObserver.flush();\n        const newViewSelection = this.domConverter.domSelectionToView(domSelection);\n        // Do not convert selection change if the new view selection has no ranges in it.\n        //\n        // It means that the DOM selection is in some way incorrect. Ranges that were in the DOM selection could not be\n        // converted to the view. This happens when the DOM selection was moved outside of the editable element.\n        if (newViewSelection.rangeCount == 0) {\n            this.view.hasDomSelection = false;\n            return;\n        }\n        this.view.hasDomSelection = true;\n        // Mark the latest focus change as complete (we got new selection after the focus so the selection is in the focused element).\n        this.focusObserver.flush();\n        if (this.selection.isEqual(newViewSelection) && this.domConverter.isDomSelectionCorrect(domSelection)) {\n            return;\n        }\n        // Ensure we are not in the infinite loop (#400).\n        // This counter is reset each second. 60 selection changes in 1 second is enough high number\n        // to be very difficult (impossible) to achieve using just keyboard keys (during normal editor use).\n        if (++this._loopbackCounter > 60) {\n            // Selection change observer detected an infinite rendering loop.\n            // Most probably you try to put the selection in the position which is not allowed\n            // by the browser and browser fixes it automatically what causes `selectionchange` event on\n            // which a loopback through a model tries to re-render the wrong selection and again.\n            this._reportInfiniteLoop();\n            return;\n        }\n        if (this.selection.isSimilar(newViewSelection)) {\n            // If selection was equal and we are at this point of algorithm, it means that it was incorrect.\n            // Just re-render it, no need to fire any events, etc.\n            this.view.forceRender();\n        }\n        else {\n            const data = {\n                oldSelection: this.selection,\n                newSelection: newViewSelection,\n                domSelection\n            };\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[SelectionObserver]%c Fire selection change:',\n            // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green', '',\n            // @if CK_DEBUG_TYPING // \t\tnewViewSelection.getFirstRange()\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            // Prepare data for new selection and fire appropriate events.\n            this.document.fire('selectionChange', data);\n            // Call `#_fireSelectionChangeDoneDebounced` every time when `selectionChange` event is fired.\n            // This function is debounced what means that `selectionChangeDone` event will be fired only when\n            // defined int the function time will elapse since the last time the function was called.\n            // So `selectionChangeDone` will be fired when selection will stop changing.\n            this._fireSelectionChangeDoneDebounced(data);\n        }\n    }\n    /**\n     * Clears `SelectionObserver` internal properties connected with preventing infinite loop.\n     */\n    _clearInfiniteLoop() {\n        this._loopbackCounter = 0;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/compositionobserver\n */\nimport DomEventObserver from './domeventobserver.js';\n// @if CK_DEBUG_TYPING // const { _debouncedLine } = require( '../../dev-utils/utils.js' );\n/**\n * {@link module:engine/view/document~Document#event:compositionstart Compositionstart},\n * {@link module:engine/view/document~Document#event:compositionupdate compositionupdate} and\n * {@link module:engine/view/document~Document#event:compositionend compositionend} events observer.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n */\nexport default class CompositionObserver extends DomEventObserver {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        /**\n         * @inheritDoc\n         */\n        this.domEventType = ['compositionstart', 'compositionupdate', 'compositionend'];\n        const document = this.document;\n        document.on('compositionstart', () => {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.log( '%c[CompositionObserver] ' +\n            // @if CK_DEBUG_TYPING // \t\t'┌───────────────────────────── isComposing = true ─────────────────────────────┐',\n            // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green'\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            document.isComposing = true;\n        }, { priority: 'low' });\n        document.on('compositionend', () => {\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.log( '%c[CompositionObserver] ' +\n            // @if CK_DEBUG_TYPING // \t\t'└───────────────────────────── isComposing = false ─────────────────────────────┘',\n            // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green'\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            document.isComposing = false;\n        }, { priority: 'low' });\n    }\n    /**\n     * @inheritDoc\n     */\n    onDomEvent(domEvent) {\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \t_debouncedLine();\n        // @if CK_DEBUG_TYPING // \tconsole.group( `%c[CompositionObserver]%c ${ domEvent.type }`, 'color: green', '' );\n        // @if CK_DEBUG_TYPING // }\n        this.fire(domEvent.type, domEvent, {\n            data: domEvent.data\n        });\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n        // @if CK_DEBUG_TYPING // }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * A facade over the native [`DataTransfer`](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer) object.\n */\nexport default class DataTransfer {\n    /**\n     * @param nativeDataTransfer The native [`DataTransfer`](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer) object.\n     * @param options.cacheFiles Whether `files` list should be initialized in the constructor.\n     */\n    constructor(nativeDataTransfer, options = {}) {\n        // We should store references to the File instances in case someone would like to process this files\n        // outside the event handler. Files are stored only for `drop` and `paste` events because they are not usable\n        // in other events and are generating a huge delay on Firefox while dragging.\n        // See https://github.com/ckeditor/ckeditor5/issues/13366.\n        this._files = options.cacheFiles ? getFiles(nativeDataTransfer) : null;\n        this._native = nativeDataTransfer;\n    }\n    /**\n     * The array of files created from the native `DataTransfer#files` or `DataTransfer#items`.\n     */\n    get files() {\n        if (!this._files) {\n            this._files = getFiles(this._native);\n        }\n        return this._files;\n    }\n    /**\n     * Returns an array of available native content types.\n     */\n    get types() {\n        return this._native.types;\n    }\n    /**\n     * Gets the data from the data transfer by its MIME type.\n     *\n     * ```ts\n     * dataTransfer.getData( 'text/plain' );\n     * ```\n     *\n     * @param type The MIME type. E.g. `text/html` or `text/plain`.\n     */\n    getData(type) {\n        return this._native.getData(type);\n    }\n    /**\n     * Sets the data in the data transfer.\n     *\n     * @param type The MIME type. E.g. `text/html` or `text/plain`.\n     */\n    setData(type, data) {\n        this._native.setData(type, data);\n    }\n    /**\n     * The effect that is allowed for a drag operation.\n     */\n    set effectAllowed(value) {\n        this._native.effectAllowed = value;\n    }\n    get effectAllowed() {\n        return this._native.effectAllowed;\n    }\n    /**\n     * The actual drop effect.\n     */\n    set dropEffect(value) {\n        this._native.dropEffect = value;\n    }\n    get dropEffect() {\n        return this._native.dropEffect;\n    }\n    /**\n     * Set a preview image of the dragged content.\n     */\n    setDragImage(image, x, y) {\n        this._native.setDragImage(image, x, y);\n    }\n    /**\n     * Whether the dragging operation was canceled.\n     */\n    get isCanceled() {\n        return this._native.dropEffect == 'none' || !!this._native.mozUserCancelled;\n    }\n}\nfunction getFiles(nativeDataTransfer) {\n    // DataTransfer.files and items are array-like and might not have an iterable interface.\n    const files = Array.from(nativeDataTransfer.files || []);\n    const items = Array.from(nativeDataTransfer.items || []);\n    if (files.length) {\n        return files;\n    }\n    // Chrome has empty DataTransfer.files, but allows getting files through the items interface.\n    return items\n        .filter(item => item.kind === 'file')\n        .map(item => item.getAsFile());\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/inputobserver\n */\nimport DomEventObserver from './domeventobserver.js';\nimport DataTransfer from '../datatransfer.js';\nimport { env } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_TYPING // const { _debouncedLine } = require( '../../dev-utils/utils.js' );\n/**\n * Observer for events connected with data input.\n *\n * **Note**: This observer is attached by {@link module:engine/view/view~View} and available by default in all\n * editor instances.\n */\nexport default class InputObserver extends DomEventObserver {\n    constructor() {\n        super(...arguments);\n        /**\n         * @inheritDoc\n         */\n        this.domEventType = 'beforeinput';\n    }\n    /**\n     * @inheritDoc\n     */\n    onDomEvent(domEvent) {\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \t_debouncedLine();\n        // @if CK_DEBUG_TYPING // \tconsole.group( `%c[InputObserver]%c ${ domEvent.type }: ${ domEvent.inputType }`,\n        // @if CK_DEBUG_TYPING // \t\t'color: green', 'color: default'\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        const domTargetRanges = domEvent.getTargetRanges();\n        const view = this.view;\n        const viewDocument = view.document;\n        let dataTransfer = null;\n        let data = null;\n        let targetRanges = [];\n        if (domEvent.dataTransfer) {\n            dataTransfer = new DataTransfer(domEvent.dataTransfer);\n        }\n        if (domEvent.data !== null) {\n            data = domEvent.data;\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( `%c[InputObserver]%c event data: %c${ JSON.stringify( data ) }`,\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: bold', 'color: blue;'\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n        }\n        else if (dataTransfer) {\n            data = dataTransfer.getData('text/plain');\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( `%c[InputObserver]%c event data transfer: %c${ JSON.stringify( data ) }`,\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: bold', 'color: blue;'\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n        }\n        // If the editor selection is fake (an object is selected), the DOM range does not make sense because it is anchored\n        // in the fake selection container.\n        if (viewDocument.selection.isFake) {\n            // Future-proof: in case of multi-range fake selections being possible.\n            targetRanges = Array.from(viewDocument.selection.getRanges());\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[InputObserver]%c using fake selection:',\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: bold', targetRanges,\n            // @if CK_DEBUG_TYPING // \t\tviewDocument.selection.isFake ? 'fake view selection' : 'fake DOM parent'\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n        }\n        else if (domTargetRanges.length) {\n            targetRanges = domTargetRanges.map(domRange => {\n                // Sometimes browser provides range that starts before editable node.\n                // We try to fall back to collapsed range at the valid end position.\n                // See https://github.com/ckeditor/ckeditor5/issues/14411.\n                // See https://github.com/ckeditor/ckeditor5/issues/14050.\n                const viewStart = view.domConverter.domPositionToView(domRange.startContainer, domRange.startOffset);\n                const viewEnd = view.domConverter.domPositionToView(domRange.endContainer, domRange.endOffset);\n                if (viewStart) {\n                    return view.createRange(viewStart, viewEnd);\n                }\n                else if (viewEnd) {\n                    return view.createRange(viewEnd);\n                }\n            }).filter((range) => !!range);\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[InputObserver]%c using target ranges:',\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: bold', targetRanges\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n        }\n        // For Android devices we use a fallback to the current DOM selection, Android modifies it according\n        // to the expected target ranges of input event.\n        else if (env.isAndroid) {\n            const domSelection = domEvent.target.ownerDocument.defaultView.getSelection();\n            targetRanges = Array.from(view.domConverter.domSelectionToView(domSelection).getRanges());\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.info( '%c[InputObserver]%c using selection ranges:',\n            // @if CK_DEBUG_TYPING // \t\t'color: green; font-weight: bold', 'font-weight: bold', targetRanges\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n        }\n        // Android sometimes fires insertCompositionText with a new-line character at the end of the data\n        // instead of firing insertParagraph beforeInput event.\n        // Fire the correct type of beforeInput event and ignore the replaced fragment of text because\n        // it wants to replace \"test\" with \"test\\n\".\n        // https://github.com/ckeditor/ckeditor5/issues/12368.\n        if (env.isAndroid && domEvent.inputType == 'insertCompositionText' && data && data.endsWith('\\n')) {\n            this.fire(domEvent.type, domEvent, {\n                inputType: 'insertParagraph',\n                targetRanges: [view.createRange(targetRanges[0].end)]\n            });\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n            // @if CK_DEBUG_TYPING // }\n            return;\n        }\n        // Normalize the insertText data that includes new-line characters.\n        // https://github.com/ckeditor/ckeditor5/issues/2045.\n        if (domEvent.inputType == 'insertText' && data && data.includes('\\n')) {\n            // There might be a single new-line or double for new paragraph, but we translate\n            // it to paragraphs as it is our default action for enter handling.\n            const parts = data.split(/\\n{1,2}/g);\n            let partTargetRanges = targetRanges;\n            for (let i = 0; i < parts.length; i++) {\n                const dataPart = parts[i];\n                if (dataPart != '') {\n                    this.fire(domEvent.type, domEvent, {\n                        data: dataPart,\n                        dataTransfer,\n                        targetRanges: partTargetRanges,\n                        inputType: domEvent.inputType,\n                        isComposing: domEvent.isComposing\n                    });\n                    // Use the result view selection so following events will be added one after another.\n                    partTargetRanges = [viewDocument.selection.getFirstRange()];\n                }\n                if (i + 1 < parts.length) {\n                    this.fire(domEvent.type, domEvent, {\n                        inputType: 'insertParagraph',\n                        targetRanges: partTargetRanges\n                    });\n                    // Use the result view selection so following events will be added one after another.\n                    partTargetRanges = [viewDocument.selection.getFirstRange()];\n                }\n            }\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n            // @if CK_DEBUG_TYPING // }\n            return;\n        }\n        // Fire the normalized beforeInput event.\n        this.fire(domEvent.type, domEvent, {\n            data,\n            dataTransfer,\n            targetRanges,\n            inputType: domEvent.inputType,\n            isComposing: domEvent.isComposing\n        });\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n        // @if CK_DEBUG_TYPING // }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/arrowkeysobserver\n */\nimport Observer from './observer.js';\nimport BubblingEventInfo from './bubblingeventinfo.js';\nimport { isArrowKeyCode } from '@ckeditor/ckeditor5-utils';\n/**\n * Arrow keys observer introduces the {@link module:engine/view/document~Document#event:arrowKey `Document#arrowKey`} event.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n */\nexport default class ArrowKeysObserver extends Observer {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        this.document.on('keydown', (event, data) => {\n            if (this.isEnabled && isArrowKeyCode(data.keyCode)) {\n                const eventInfo = new BubblingEventInfo(this.document, 'arrowKey', this.document.selection.getFirstRange());\n                this.document.fire(eventInfo, data);\n                if (eventInfo.stop.called) {\n                    event.stop();\n                }\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    observe() { }\n    /**\n     * @inheritDoc\n     */\n    stopObserving() { }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport Observer from './observer.js';\nimport BubblingEventInfo from './bubblingeventinfo.js';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils';\n/**\n * Tab observer introduces the {@link module:engine/view/document~Document#event:tab `Document#tab`} event.\n *\n * Note that because {@link module:engine/view/observer/tabobserver~TabObserver} is attached by the\n * {@link module:engine/view/view~View}, this event is available by default.\n */\nexport default class TabObserver extends Observer {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        const doc = this.document;\n        doc.on('keydown', (evt, data) => {\n            if (!this.isEnabled ||\n                data.keyCode != keyCodes.tab ||\n                data.ctrlKey) {\n                return;\n            }\n            const event = new BubblingEventInfo(doc, 'tab', doc.selection.getFirstRange());\n            doc.fire(event, data);\n            if (event.stop.called) {\n                evt.stop();\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    observe() { }\n    /**\n     * @inheritDoc\n     */\n    stopObserving() { }\n}\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/view\n */\nimport Document from './document.js';\nimport DowncastWriter from './downcastwriter.js';\nimport Renderer from './renderer.js';\nimport DomConverter from './domconverter.js';\nimport Position from './position.js';\nimport Range from './range.js';\nimport Selection from './selection.js';\nimport KeyObserver from './observer/keyobserver.js';\nimport FakeSelectionObserver from './observer/fakeselectionobserver.js';\nimport MutationObserver from './observer/mutationobserver.js';\nimport SelectionObserver from './observer/selectionobserver.js';\nimport FocusObserver from './observer/focusobserver.js';\nimport CompositionObserver from './observer/compositionobserver.js';\nimport InputObserver from './observer/inputobserver.js';\nimport ArrowKeysObserver from './observer/arrowkeysobserver.js';\nimport TabObserver from './observer/tabobserver.js';\nimport { CKEditorError, env, ObservableMixin, scrollViewportToShowTarget } from '@ckeditor/ckeditor5-utils';\nimport { injectUiElementHandling } from './uielement.js';\nimport { injectQuirksHandling } from './filler.js';\nimport { cloneDeep } from 'lodash-es';\n/**\n * Editor's view controller class. Its main responsibility is DOM - View management for editing purposes, to provide\n * abstraction over the DOM structure and events and hide all browsers quirks.\n *\n * View controller renders view document to DOM whenever view structure changes. To determine when view can be rendered,\n * all changes need to be done using the {@link module:engine/view/view~View#change} method, using\n * {@link module:engine/view/downcastwriter~DowncastWriter}:\n *\n * ```ts\n * view.change( writer => {\n * \twriter.insert( position, writer.createText( 'foo' ) );\n * } );\n * ```\n *\n * View controller also register {@link module:engine/view/observer/observer~Observer observers} which observes changes\n * on DOM and fire events on the {@link module:engine/view/document~Document Document}.\n * Note that the following observers are added by the class constructor and are always available:\n *\n * * {@link module:engine/view/observer/selectionobserver~SelectionObserver},\n * * {@link module:engine/view/observer/focusobserver~FocusObserver},\n * * {@link module:engine/view/observer/keyobserver~KeyObserver},\n * * {@link module:engine/view/observer/fakeselectionobserver~FakeSelectionObserver}.\n * * {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n * * {@link module:engine/view/observer/inputobserver~InputObserver}.\n * * {@link module:engine/view/observer/arrowkeysobserver~ArrowKeysObserver}.\n * * {@link module:engine/view/observer/tabobserver~TabObserver}.\n *\n * This class also {@link module:engine/view/view~View#attachDomRoot binds the DOM and the view elements}.\n *\n * If you do not need full a DOM - view management, and only want to transform a tree of view elements to a tree of DOM\n * elements you do not need this controller. You can use the {@link module:engine/view/domconverter~DomConverter DomConverter} instead.\n */\nexport default class View extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * @param stylesProcessor The styles processor instance.\n     */\n    constructor(stylesProcessor) {\n        super();\n        /**\n         * Roots of the DOM tree. Map on the `HTMLElement`s with roots names as keys.\n         */\n        this.domRoots = new Map();\n        /**\n         * A DOM root attributes cache. It saves the initial values of DOM root attributes before the DOM element\n         * is {@link module:engine/view/view~View#attachDomRoot attached} to the view so later on, when\n         * the view is destroyed ({@link module:engine/view/view~View#detachDomRoot}), they can be easily restored.\n         * This way, the DOM element can go back to the (clean) state as if the editing view never used it.\n         */\n        this._initialDomRootAttributes = new WeakMap();\n        /**\n         * Map of registered {@link module:engine/view/observer/observer~Observer observers}.\n         */\n        this._observers = new Map();\n        /**\n         * Is set to `true` when {@link #change view changes} are currently in progress.\n         */\n        this._ongoingChange = false;\n        /**\n         * Used to prevent calling {@link #forceRender} and {@link #change} during rendering view to the DOM.\n         */\n        this._postFixersInProgress = false;\n        /**\n         * Internal flag to temporary disable rendering. See the usage in the {@link #_disableRendering}.\n         */\n        this._renderingDisabled = false;\n        /**\n         * Internal flag that disables rendering when there are no changes since the last rendering.\n         * It stores information about changed selection and changed elements from attached document roots.\n         */\n        this._hasChangedSinceTheLastRendering = false;\n        this.document = new Document(stylesProcessor);\n        this.domConverter = new DomConverter(this.document);\n        this.set('isRenderingInProgress', false);\n        this.set('hasDomSelection', false);\n        this._renderer = new Renderer(this.domConverter, this.document.selection);\n        this._renderer.bind('isFocused', 'isSelecting', 'isComposing')\n            .to(this.document, 'isFocused', 'isSelecting', 'isComposing');\n        this._writer = new DowncastWriter(this.document);\n        // Add default observers.\n        // Make sure that this list matches AlwaysRegisteredObservers type.\n        this.addObserver(MutationObserver);\n        this.addObserver(FocusObserver);\n        this.addObserver(SelectionObserver);\n        this.addObserver(KeyObserver);\n        this.addObserver(FakeSelectionObserver);\n        this.addObserver(CompositionObserver);\n        this.addObserver(ArrowKeysObserver);\n        this.addObserver(InputObserver);\n        this.addObserver(TabObserver);\n        // Inject quirks handlers.\n        injectQuirksHandling(this);\n        injectUiElementHandling(this);\n        // Use 'normal' priority so that rendering is performed as first when using that priority.\n        this.on('render', () => {\n            this._render();\n            // Informs that layout has changed after render.\n            this.document.fire('layoutChanged');\n            // Reset the `_hasChangedSinceTheLastRendering` flag after rendering.\n            this._hasChangedSinceTheLastRendering = false;\n        });\n        // Listen to the document selection changes directly.\n        this.listenTo(this.document.selection, 'change', () => {\n            this._hasChangedSinceTheLastRendering = true;\n        });\n        // Trigger re-render if only the focus changed.\n        this.listenTo(this.document, 'change:isFocused', () => {\n            this._hasChangedSinceTheLastRendering = true;\n        });\n        // Remove ranges from DOM selection if editor is blurred.\n        // See https://github.com/ckeditor/ckeditor5/issues/5753.\n        if (env.isiOS) {\n            this.listenTo(this.document, 'blur', (evt, data) => {\n                const relatedViewElement = this.domConverter.mapDomToView(data.domEvent.relatedTarget);\n                // Do not modify DOM selection if focus is moved to other editable of the same editor.\n                if (!relatedViewElement) {\n                    this.domConverter._clearDomSelection();\n                }\n            });\n        }\n        // Listen to external content mutations (directly in the DOM) and mark them to get verified by the renderer.\n        this.listenTo(this.document, 'mutations', (evt, { mutations }) => {\n            mutations.forEach(mutation => this._renderer.markToSync(mutation.type, mutation.node));\n        }, { priority: 'low' });\n        // After all mutated nodes were marked to sync we can trigger view to DOM synchronization\n        // to make sure the DOM structure matches the view.\n        this.listenTo(this.document, 'mutations', () => {\n            this.forceRender();\n        }, { priority: 'lowest' });\n    }\n    /**\n     * Attaches a DOM root element to the view element and enable all observers on that element.\n     * Also {@link module:engine/view/renderer~Renderer#markToSync mark element} to be synchronized\n     * with the view what means that all child nodes will be removed and replaced with content of the view root.\n     *\n     * This method also will change view element name as the same as tag name of given dom root.\n     * Name is always transformed to lower case.\n     *\n     * **Note:** Use {@link #detachDomRoot `detachDomRoot()`} to revert this action.\n     *\n     * @param domRoot DOM root element.\n     * @param name Name of the root.\n     */\n    attachDomRoot(domRoot, name = 'main') {\n        const viewRoot = this.document.getRoot(name);\n        // Set view root name the same as DOM root tag name.\n        viewRoot._name = domRoot.tagName.toLowerCase();\n        const initialDomRootAttributes = {};\n        // 1. Copy and cache the attributes to remember the state of the element before attaching.\n        //    The cached attributes will be restored in detachDomRoot() so the element goes to the\n        //    clean state as if the editing view never used it.\n        // 2. Apply the attributes using the view writer, so they all go under the control of the engine.\n        //    The editing view takes over the attribute management completely because various\n        //    features (e.g. addPlaceholder()) require dynamic changes of those attributes and they\n        //    cannot be managed by the engine and the UI library at the same time.\n        for (const { name, value } of Array.from(domRoot.attributes)) {\n            initialDomRootAttributes[name] = value;\n            // Do not use writer.setAttribute() for the class attribute. The EditableUIView class\n            // and its descendants could have already set some using the writer.addClass() on the view\n            // document root. They haven't been rendered yet so they are not present in the DOM root.\n            // Using writer.setAttribute( 'class', ... ) would override them completely.\n            if (name === 'class') {\n                this._writer.addClass(value.split(' '), viewRoot);\n            }\n            else {\n                // There is a chance that some attributes have already been set on the view root before attaching\n                // the DOM root and should be preserved. This is a similar case to the \"class\" attribute except\n                // this time there is no workaround using a some low-level API.\n                if (!viewRoot.hasAttribute(name)) {\n                    this._writer.setAttribute(name, value, viewRoot);\n                }\n            }\n        }\n        this._initialDomRootAttributes.set(domRoot, initialDomRootAttributes);\n        const updateContenteditableAttribute = () => {\n            this._writer.setAttribute('contenteditable', (!viewRoot.isReadOnly).toString(), viewRoot);\n            if (viewRoot.isReadOnly) {\n                this._writer.addClass('ck-read-only', viewRoot);\n            }\n            else {\n                this._writer.removeClass('ck-read-only', viewRoot);\n            }\n        };\n        // Set initial value.\n        updateContenteditableAttribute();\n        this.domRoots.set(name, domRoot);\n        this.domConverter.bindElements(domRoot, viewRoot);\n        this._renderer.markToSync('children', viewRoot);\n        this._renderer.markToSync('attributes', viewRoot);\n        this._renderer.domDocuments.add(domRoot.ownerDocument);\n        viewRoot.on('change:children', (evt, node) => this._renderer.markToSync('children', node));\n        viewRoot.on('change:attributes', (evt, node) => this._renderer.markToSync('attributes', node));\n        viewRoot.on('change:text', (evt, node) => this._renderer.markToSync('text', node));\n        viewRoot.on('change:isReadOnly', () => this.change(updateContenteditableAttribute));\n        viewRoot.on('change', () => {\n            this._hasChangedSinceTheLastRendering = true;\n        });\n        for (const observer of this._observers.values()) {\n            observer.observe(domRoot, name);\n        }\n    }\n    /**\n     * Detaches a DOM root element from the view element and restores its attributes to the state before\n     * {@link #attachDomRoot `attachDomRoot()`}.\n     *\n     * @param name Name of the root to detach.\n     */\n    detachDomRoot(name) {\n        const domRoot = this.domRoots.get(name);\n        // Remove all root attributes so the DOM element is \"bare\".\n        Array.from(domRoot.attributes).forEach(({ name }) => domRoot.removeAttribute(name));\n        const initialDomRootAttributes = this._initialDomRootAttributes.get(domRoot);\n        // Revert all view root attributes back to the state before attachDomRoot was called.\n        for (const attribute in initialDomRootAttributes) {\n            domRoot.setAttribute(attribute, initialDomRootAttributes[attribute]);\n        }\n        this.domRoots.delete(name);\n        this.domConverter.unbindDomElement(domRoot);\n        for (const observer of this._observers.values()) {\n            observer.stopObserving(domRoot);\n        }\n    }\n    /**\n     * Gets DOM root element.\n     *\n     * @param name  Name of the root.\n     * @returns DOM root element instance.\n     */\n    getDomRoot(name = 'main') {\n        return this.domRoots.get(name);\n    }\n    /**\n     * Creates observer of the given type if not yet created, {@link module:engine/view/observer/observer~Observer#enable enables} it\n     * and {@link module:engine/view/observer/observer~Observer#observe attaches} to all existing and future\n     * {@link #domRoots DOM roots}.\n     *\n     * Note: Observers are recognized by their constructor (classes). A single observer will be instantiated and used only\n     * when registered for the first time. This means that features and other components can register a single observer\n     * multiple times without caring whether it has been already added or not.\n     *\n     * @param ObserverConstructor The constructor of an observer to add.\n     * Should create an instance inheriting from {@link module:engine/view/observer/observer~Observer}.\n     * @returns Added observer instance.\n     */\n    addObserver(ObserverConstructor) {\n        let observer = this._observers.get(ObserverConstructor);\n        if (observer) {\n            return observer;\n        }\n        observer = new ObserverConstructor(this);\n        this._observers.set(ObserverConstructor, observer);\n        for (const [name, domElement] of this.domRoots) {\n            observer.observe(domElement, name);\n        }\n        observer.enable();\n        return observer;\n    }\n    /**\n     * Returns observer of the given type or `undefined` if such observer has not been added yet.\n     *\n     * @param ObserverConstructor The constructor of an observer to get.\n     * @returns Observer instance or undefined.\n     */\n    getObserver(ObserverConstructor) {\n        return this._observers.get(ObserverConstructor);\n    }\n    /**\n     * Disables all added observers.\n     */\n    disableObservers() {\n        for (const observer of this._observers.values()) {\n            observer.disable();\n        }\n    }\n    /**\n     * Enables all added observers.\n     */\n    enableObservers() {\n        for (const observer of this._observers.values()) {\n            observer.enable();\n        }\n    }\n    /**\n     * Scrolls the page viewport and {@link #domRoots} with their ancestors to reveal the\n     * caret, **if not already visible to the user**.\n     *\n     * **Note**: Calling this method fires the {@link module:engine/view/view~ViewScrollToTheSelectionEvent} event that\n     * allows custom behaviors.\n     *\n     * @param options Additional configuration of the scrolling behavior.\n     * @param options.viewportOffset A distance between the DOM selection and the viewport boundary to be maintained\n     * while scrolling to the selection (default is 20px). Setting this value to `0` will reveal the selection precisely at\n     * the viewport boundary.\n     * @param options.ancestorOffset A distance between the DOM selection and scrollable DOM root ancestor(s) to be maintained\n     * while scrolling to the selection (default is 20px). Setting this value to `0` will reveal the selection precisely at\n     * the scrollable ancestor(s) boundary.\n     * @param options.alignToTop When set `true`, the DOM selection will be aligned to the top of the viewport if not already visible\n     * (see `forceScroll` to learn more).\n     * @param options.forceScroll When set `true`, the DOM selection will be aligned to the top of the viewport and scrollable ancestors\n     * whether it is already visible or not. This option will only work when `alignToTop` is `true`.\n     */\n    scrollToTheSelection({ alignToTop, forceScroll, viewportOffset = 20, ancestorOffset = 20 } = {}) {\n        const range = this.document.selection.getFirstRange();\n        if (!range) {\n            return;\n        }\n        // Clone to make sure properties like `viewportOffset` are not mutated in the event listeners.\n        const originalArgs = cloneDeep({ alignToTop, forceScroll, viewportOffset, ancestorOffset });\n        if (typeof viewportOffset === 'number') {\n            viewportOffset = {\n                top: viewportOffset,\n                bottom: viewportOffset,\n                left: viewportOffset,\n                right: viewportOffset\n            };\n        }\n        const options = {\n            target: this.domConverter.viewRangeToDom(range),\n            viewportOffset,\n            ancestorOffset,\n            alignToTop,\n            forceScroll\n        };\n        this.fire('scrollToTheSelection', options, originalArgs);\n        scrollViewportToShowTarget(options);\n    }\n    /**\n     * It will focus DOM element representing {@link module:engine/view/editableelement~EditableElement EditableElement}\n     * that is currently having selection inside.\n     */\n    focus() {\n        if (!this.document.isFocused) {\n            const editable = this.document.selection.editableElement;\n            if (editable) {\n                this.domConverter.focus(editable);\n                this.forceRender();\n            }\n            else {\n                // Before focusing view document, selection should be placed inside one of the view's editables.\n                // Normally its selection will be converted from model document (which have default selection), but\n                // when using view document on its own, we need to manually place selection before focusing it.\n                //\n                // @if CK_DEBUG // console.warn( 'There is no selection in any editable to focus.' );\n            }\n        }\n    }\n    /**\n     * The `change()` method is the primary way of changing the view. You should use it to modify any node in the view tree.\n     * It makes sure that after all changes are made the view is rendered to the DOM (assuming that the view will be changed\n     * inside the callback). It prevents situations when the DOM is updated when the view state is not yet correct. It allows\n     * to nest calls one inside another and still performs a single rendering after all those changes are made.\n     * It also returns the return value of its callback.\n     *\n     * ```ts\n     * const text = view.change( writer => {\n     * \tconst newText = writer.createText( 'foo' );\n     * \twriter.insert( position1, newText );\n     *\n     * \tview.change( writer => {\n     * \t\twriter.insert( position2, writer.createText( 'bar' ) );\n     * \t} );\n     *\n     * \twriter.remove( range );\n     *\n     * \treturn newText;\n     * } );\n     * ```\n     *\n     * When the outermost change block is done and rendering to the DOM is over the\n     * {@link module:engine/view/view~View#event:render `View#render`} event is fired.\n     *\n     * This method throws a `applying-view-changes-on-rendering` error when\n     * the change block is used after rendering to the DOM has started.\n     *\n     * @param callback Callback function which may modify the view.\n     * @returns Value returned by the callback.\n     */\n    change(callback) {\n        if (this.isRenderingInProgress || this._postFixersInProgress) {\n            /**\n             * Thrown when there is an attempt to make changes to the view tree when it is in incorrect state. This may\n             * cause some unexpected behaviour and inconsistency between the DOM and the view.\n             * This may be caused by:\n             *\n             * * calling {@link module:engine/view/view~View#change} or {@link module:engine/view/view~View#forceRender} during rendering\n             * process,\n             * * calling {@link module:engine/view/view~View#change} or {@link module:engine/view/view~View#forceRender} inside of\n             *   {@link module:engine/view/document~Document#registerPostFixer post-fixer function}.\n             *\n             * @error cannot-change-view-tree\n             */\n            throw new CKEditorError('cannot-change-view-tree', this);\n        }\n        try {\n            // Recursive call to view.change() method - execute listener immediately.\n            if (this._ongoingChange) {\n                return callback(this._writer);\n            }\n            // This lock will assure that all recursive calls to view.change() will end up in same block - one \"render\"\n            // event for all nested calls.\n            this._ongoingChange = true;\n            const callbackResult = callback(this._writer);\n            this._ongoingChange = false;\n            // This lock is used by editing controller to render changes from outer most model.change() once. As plugins might call\n            // view.change() inside model.change() block - this will ensures that postfixers and rendering are called once after all\n            // changes. Also, we don't need to render anything if there're no changes since last rendering.\n            if (!this._renderingDisabled && this._hasChangedSinceTheLastRendering) {\n                this._postFixersInProgress = true;\n                this.document._callPostFixers(this._writer);\n                this._postFixersInProgress = false;\n                this.fire('render');\n            }\n            return callbackResult;\n        }\n        catch (err) {\n            // @if CK_DEBUG // throw err;\n            /* istanbul ignore next -- @preserve */\n            CKEditorError.rethrowUnexpectedError(err, this);\n        }\n    }\n    /**\n     * Forces rendering {@link module:engine/view/document~Document view document} to DOM. If any view changes are\n     * currently in progress, rendering will start after all {@link #change change blocks} are processed.\n     *\n     * Note that this method is dedicated for special cases. All view changes should be wrapped in the {@link #change}\n     * block and the view will automatically check whether it needs to render DOM or not.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `applying-view-changes-on-rendering` when\n     * trying to re-render when rendering to DOM has already started.\n     */\n    forceRender() {\n        this._hasChangedSinceTheLastRendering = true;\n        this.getObserver(FocusObserver).flush();\n        this.change(() => { });\n    }\n    /**\n     * Destroys this instance. Makes sure that all observers are destroyed and listeners removed.\n     */\n    destroy() {\n        for (const observer of this._observers.values()) {\n            observer.destroy();\n        }\n        this.document.destroy();\n        this.stopListening();\n    }\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/view/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n     *\n     * This method is a shortcut to other constructors such as:\n     *\n     * * {@link #createPositionBefore},\n     * * {@link #createPositionAfter},\n     *\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n    createPositionAt(itemOrPosition, offset) {\n        return Position._createAt(itemOrPosition, offset);\n    }\n    /**\n     * Creates a new position after given view item.\n     *\n     * @param item View item after which the position should be located.\n     */\n    createPositionAfter(item) {\n        return Position._createAfter(item);\n    }\n    /**\n     * Creates a new position before given view item.\n     *\n     * @param item View item before which the position should be located.\n     */\n    createPositionBefore(item) {\n        return Position._createBefore(item);\n    }\n    /**\n     * Creates a range spanning from `start` position to `end` position.\n     *\n     * **Note:** This factory method creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n     *\n     * @param start Start position.\n     * @param end End position. If not set, range will be collapsed at `start` position.\n     */\n    createRange(start, end) {\n        return new Range(start, end);\n    }\n    /**\n     * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n     */\n    createRangeOn(item) {\n        return Range._createOn(item);\n    }\n    /**\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @param element Element which is a parent for the range.\n     */\n    createRangeIn(element) {\n        return Range._createIn(element);\n    }\n    createSelection(...args) {\n        return new Selection(...args);\n    }\n    /**\n     * Disables or enables rendering. If the flag is set to `true` then the rendering will be disabled.\n     * If the flag is set to `false` and if there was some change in the meantime, then the rendering action will be performed.\n     *\n     * @internal\n     * @param flag A flag indicates whether the rendering should be disabled.\n     */\n    _disableRendering(flag) {\n        this._renderingDisabled = flag;\n        if (flag == false) {\n            // Render when you stop blocking rendering.\n            this.change(() => { });\n        }\n    }\n    /**\n     * Renders all changes. In order to avoid triggering the observers (e.g. selection) all observers are disabled\n     * before rendering and re-enabled after that.\n     */\n    _render() {\n        this.isRenderingInProgress = true;\n        this.disableObservers();\n        this._renderer.render();\n        this.enableObservers();\n        this.isRenderingInProgress = false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nexport default class TypeCheckable {\n    /* istanbul ignore next -- @preserve */\n    is() {\n        // There are a lot of overloads above.\n        // Overriding method in derived classes remove them and only `is( type: string ): boolean` is visible which we don't want.\n        // One option would be to copy them all to all classes, but that's ugly.\n        // It's best when TypeScript compiler doesn't see those overloads, except the one in the top base class.\n        // To overload a method, but not let the compiler see it, do after class definition:\n        // `MyClass.prototype.is = function( type: string ) {...}`\n        throw new Error('is() method is abstract');\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * @module engine/model/node\n */\nimport TypeCheckable from './typecheckable.js';\nimport { compareArrays, toMap } from '@ckeditor/ckeditor5-utils';\n/**\n * Model node. Most basic structure of model tree.\n *\n * This is an abstract class that is a base for other classes representing different nodes in model.\n *\n * **Note:** If a node is detached from the model tree, you can manipulate it using it's API.\n * However, it is **very important** that nodes already attached to model tree should be only changed through\n * {@link module:engine/model/writer~Writer Writer API}.\n *\n * Changes done by `Node` methods, like {@link module:engine/model/element~Element#_insertChild _insertChild} or\n * {@link module:engine/model/node~Node#_setAttribute _setAttribute}\n * do not generate {@link module:engine/model/operation/operation~Operation operations}\n * which are essential for correct editor work if you modify nodes in {@link module:engine/model/document~Document document} root.\n *\n * The flow of working on `Node` (and classes that inherits from it) is as such:\n * 1. You can create a `Node` instance, modify it using it's API.\n * 2. Add `Node` to the model using `Batch` API.\n * 3. Change `Node` that was already added to the model using `Batch` API.\n *\n * Similarly, you cannot use `Batch` API on a node that has not been added to the model tree, with the exception\n * of {@link module:engine/model/writer~Writer#insert inserting} that node to the model tree.\n *\n * Be aware that using {@link module:engine/model/writer~Writer#remove remove from Batch API} does not allow to use `Node` API because\n * the information about `Node` is still kept in model document.\n *\n * In case of {@link module:engine/model/element~Element element node}, adding and removing children also counts as changing a node and\n * follows same rules.\n */\nexport default class Node extends TypeCheckable {\n    /**\n     * Creates a model node.\n     *\n     * This is an abstract class, so this constructor should not be used directly.\n     *\n     * @param attrs Node's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n     */\n    constructor(attrs) {\n        super();\n        /**\n         * Parent of this node. It could be {@link module:engine/model/element~Element}\n         * or {@link module:engine/model/documentfragment~DocumentFragment}.\n         * Equals to `null` if the node has no parent.\n         */\n        this.parent = null;\n        /**\n         * Index of this node in its parent or `null` if the node has no parent.\n         *\n         * @internal\n         */\n        this._index = null;\n        /**\n         * Offset at which this node starts in its parent or `null` if the node has no parent.\n         *\n         * @internal\n         */\n        this._startOffset = null;\n        this._attrs = toMap(attrs);\n    }\n    /**\n     * {@link module:engine/model/document~Document Document} that owns this root element.\n     */\n    get document() {\n        return null;\n    }\n    /**\n     * Index of this node in its parent or `null` if the node has no parent.\n     */\n    get index() {\n        return this._index;\n    }\n    /**\n     * Offset at which this node starts in its parent. It is equal to the sum of {@link #offsetSize offsetSize}\n     * of all its previous siblings. Equals to `null` if node has no parent.\n     */\n    get startOffset() {\n        return this._startOffset;\n    }\n    /**\n     * Offset size of this node.\n     *\n     * Represents how much \"offset space\" is occupied by the node in its parent. It is important for\n     * {@link module:engine/model/position~Position position}. When node has `offsetSize` greater than `1`, position can be placed between\n     * that node start and end. `offsetSize` greater than `1` is for nodes that represents more than one entity, i.e.\n     * a {@link module:engine/model/text~Text text node}.\n     */\n    get offsetSize() {\n        return 1;\n    }\n    /**\n     * Offset at which this node ends in its parent. It is equal to the sum of this node's\n     * {@link module:engine/model/node~Node#startOffset start offset} and {@link #offsetSize offset size}.\n     * Equals to `null` if the node has no parent.\n     */\n    get endOffset() {\n        if (this.startOffset === null) {\n            return null;\n        }\n        return this.startOffset + this.offsetSize;\n    }\n    /**\n     * Node's next sibling or `null` if the node is a last child of it's parent or if the node has no parent.\n     */\n    get nextSibling() {\n        const index = this.index;\n        return (index !== null && this.parent.getChild(index + 1)) || null;\n    }\n    /**\n     * Node's previous sibling or `null` if the node is a first child of it's parent or if the node has no parent.\n     */\n    get previousSibling() {\n        const index = this.index;\n        return (index !== null && this.parent.getChild(index - 1)) || null;\n    }\n    /**\n     * The top-most ancestor of the node. If node has no parent it is the root itself. If the node is a part\n     * of {@link module:engine/model/documentfragment~DocumentFragment}, it's `root` is equal to that `DocumentFragment`.\n     */\n    get root() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let root = this;\n        while (root.parent) {\n            root = root.parent;\n        }\n        return root;\n    }\n    /**\n     * Returns `true` if the node is inside a document root that is attached to the document.\n     */\n    isAttached() {\n        // If the node has no parent it means that it is a root.\n        // But this is not a `RootElement`, so it means that it is not attached.\n        //\n        // If this is not the root, check if this element's root is attached.\n        return this.parent === null ? false : this.root.isAttached();\n    }\n    /**\n     * Gets path to the node. The path is an array containing starting offsets of consecutive ancestors of this node,\n     * beginning from {@link module:engine/model/node~Node#root root}, down to this node's starting offset. The path can be used to\n     * create {@link module:engine/model/position~Position Position} instance.\n     *\n     * ```ts\n     * const abc = new Text( 'abc' );\n     * const foo = new Text( 'foo' );\n     * const h1 = new Element( 'h1', null, new Text( 'header' ) );\n     * const p = new Element( 'p', null, [ abc, foo ] );\n     * const div = new Element( 'div', null, [ h1, p ] );\n     * foo.getPath(); // Returns [ 1, 3 ]. `foo` is in `p` which is in `div`. `p` starts at offset 1, while `foo` at 3.\n     * h1.getPath(); // Returns [ 0 ].\n     * div.getPath(); // Returns [].\n     * ```\n     */\n    getPath() {\n        const path = [];\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let node = this;\n        while (node.parent) {\n            path.unshift(node.startOffset);\n            node = node.parent;\n        }\n        return path;\n    }\n    /**\n     * Returns ancestors array of this node.\n     *\n     * @param options Options object.\n     * @param options.includeSelf When set to `true` this node will be also included in parent's array.\n     * @param options.parentFirst When set to `true`, array will be sorted from node's parent to root element,\n     * otherwise root element will be the first item in the array.\n     * @returns Array with ancestors.\n     */\n    getAncestors(options = {}) {\n        const ancestors = [];\n        let parent = options.includeSelf ? this : this.parent;\n        while (parent) {\n            ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n            parent = parent.parent;\n        }\n        return ancestors;\n    }\n    /**\n     * Returns a {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n     * which is a common ancestor of both nodes.\n     *\n     * @param node The second node.\n     * @param options Options object.\n     * @param options.includeSelf When set to `true` both nodes will be considered \"ancestors\" too.\n     * Which means that if e.g. node A is inside B, then their common ancestor will be B.\n     */\n    getCommonAncestor(node, options = {}) {\n        const ancestorsA = this.getAncestors(options);\n        const ancestorsB = node.getAncestors(options);\n        let i = 0;\n        while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n            i++;\n        }\n        return i === 0 ? null : ancestorsA[i - 1];\n    }\n    /**\n     * Returns whether this node is before given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/model/documentfragment~DocumentFragment}s).\n     *\n     * @param node Node to compare with.\n     */\n    isBefore(node) {\n        // Given node is not before this node if they are same.\n        if (this == node) {\n            return false;\n        }\n        // Return `false` if it is impossible to compare nodes.\n        if (this.root !== node.root) {\n            return false;\n        }\n        const thisPath = this.getPath();\n        const nodePath = node.getPath();\n        const result = compareArrays(thisPath, nodePath);\n        switch (result) {\n            case 'prefix':\n                return true;\n            case 'extension':\n                return false;\n            default:\n                return thisPath[result] < nodePath[result];\n        }\n    }\n    /**\n     * Returns whether this node is after given node. `false` is returned if nodes are in different trees (for example,\n     * in different {@link module:engine/model/documentfragment~DocumentFragment}s).\n     *\n     * @param node Node to compare with.\n     */\n    isAfter(node) {\n        // Given node is not before this node if they are same.\n        if (this == node) {\n            return false;\n        }\n        // Return `false` if it is impossible to compare nodes.\n        if (this.root !== node.root) {\n            return false;\n        }\n        // In other cases, just check if the `node` is before, and return the opposite.\n        return !this.isBefore(node);\n    }\n    /**\n     * Checks if the node has an attribute with given key.\n     *\n     * @param key Key of attribute to check.\n     * @returns `true` if attribute with given key is set on node, `false` otherwise.\n     */\n    hasAttribute(key) {\n        return this._attrs.has(key);\n    }\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on node.\n     *\n     * @param key Key of attribute to look for.\n     * @returns Attribute value or `undefined`.\n     */\n    getAttribute(key) {\n        return this._attrs.get(key);\n    }\n    /**\n     * Returns iterator that iterates over this node's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     */\n    getAttributes() {\n        return this._attrs.entries();\n    }\n    /**\n     * Returns iterator that iterates over this node's attribute keys.\n     */\n    getAttributeKeys() {\n        return this._attrs.keys();\n    }\n    /**\n     * Converts `Node` to plain object and returns it.\n     *\n     * @returns `Node` converted to plain object.\n     */\n    toJSON() {\n        const json = {};\n        // Serializes attributes to the object.\n        // attributes = { a: 'foo', b: 1, c: true }.\n        if (this._attrs.size) {\n            json.attributes = Array.from(this._attrs).reduce((result, attr) => {\n                result[attr[0]] = attr[1];\n                return result;\n            }, {});\n        }\n        return json;\n    }\n    /**\n     * Creates a copy of this node, that is a node with exactly same attributes, and returns it.\n     *\n     * @internal\n     * @returns Node with same attributes as this node.\n     */\n    _clone(_deep) {\n        return new this.constructor(this._attrs);\n    }\n    /**\n     * Removes this node from its parent.\n     *\n     * @internal\n     * @see module:engine/model/writer~Writer#remove\n     */\n    _remove() {\n        this.parent._removeChildren(this.index);\n    }\n    /**\n     * Sets attribute on the node. If attribute with the same key already is set, it's value is overwritten.\n     *\n     * @see module:engine/model/writer~Writer#setAttribute\n     * @internal\n     * @param key Key of attribute to set.\n     * @param value Attribute value.\n     */\n    _setAttribute(key, value) {\n        this._attrs.set(key, value);\n    }\n    /**\n     * Removes all attributes from the node and sets given attributes.\n     *\n     * @see module:engine/model/writer~Writer#setAttributes\n     * @internal\n     * @param attrs Attributes to set. See {@link module:utils/tomap~toMap} for a list of accepted values.\n     */\n    _setAttributesTo(attrs) {\n        this._attrs = toMap(attrs);\n    }\n    /**\n     * Removes an attribute with given key from the node.\n     *\n     * @see module:engine/model/writer~Writer#removeAttribute\n     * @internal\n     * @param key Key of attribute to remove.\n     * @returns `true` if the attribute was set on the element, `false` otherwise.\n     */\n    _removeAttribute(key) {\n        return this._attrs.delete(key);\n    }\n    /**\n     * Removes all attributes from the node.\n     *\n     * @see module:engine/model/writer~Writer#clearAttributes\n     * @internal\n     */\n    _clearAttributes() {\n        this._attrs.clear();\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nNode.prototype.is = function (type) {\n    return type === 'node' || type === 'model:node';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/nodelist\n */\nimport Node from './node.js';\nimport { CKEditorError, spliceArray } from '@ckeditor/ckeditor5-utils';\n/**\n * Provides an interface to operate on a list of {@link module:engine/model/node~Node nodes}. `NodeList` is used internally\n * in classes like {@link module:engine/model/element~Element Element}\n * or {@link module:engine/model/documentfragment~DocumentFragment DocumentFragment}.\n */\nexport default class NodeList {\n    /**\n     * Creates a node list.\n     *\n     * @internal\n     * @param nodes Nodes contained in this node list.\n     */\n    constructor(nodes) {\n        /**\n         * Nodes contained in this node list.\n         */\n        this._nodes = [];\n        /**\n         * This array maps numbers (offsets) to node that is placed at that offset.\n         *\n         * This array is similar to `_nodes` with the difference that one node may occupy multiple consecutive items in the array.\n         *\n         * This array is needed to quickly retrieve a node that is placed at given offset.\n         */\n        this._offsetToNode = [];\n        if (nodes) {\n            this._insertNodes(0, nodes);\n        }\n    }\n    /**\n     * Iterable interface.\n     *\n     * Iterates over all nodes contained inside this node list.\n     */\n    [Symbol.iterator]() {\n        return this._nodes[Symbol.iterator]();\n    }\n    /**\n     * Number of nodes contained inside this node list.\n     */\n    get length() {\n        return this._nodes.length;\n    }\n    /**\n     * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all nodes contained inside this node list.\n     */\n    get maxOffset() {\n        return this._offsetToNode.length;\n    }\n    /**\n     * Gets the node at the given index. Returns `null` if incorrect index was passed.\n     */\n    getNode(index) {\n        return this._nodes[index] || null;\n    }\n    /**\n     * Gets the node at the given offset. Returns `null` if incorrect offset was passed.\n     */\n    getNodeAtOffset(offset) {\n        return this._offsetToNode[offset] || null;\n    }\n    /**\n     * Returns an index of the given node or `null` if given node does not have a parent.\n     *\n     * This is an alias to {@link module:engine/model/node~Node#index}.\n     */\n    getNodeIndex(node) {\n        return node.index;\n    }\n    /**\n     * Returns the offset at which given node is placed in its parent or `null` if given node does not have a parent.\n     *\n     * This is an alias to {@link module:engine/model/node~Node#startOffset}.\n     */\n    getNodeStartOffset(node) {\n        return node.startOffset;\n    }\n    /**\n     * Converts index to offset in node list.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `model-nodelist-index-out-of-bounds` if given index is less\n     * than `0` or more than {@link #length}.\n     */\n    indexToOffset(index) {\n        if (index == this._nodes.length) {\n            return this.maxOffset;\n        }\n        const node = this._nodes[index];\n        if (!node) {\n            /**\n             * Given index cannot be found in the node list.\n             *\n             * @error model-nodelist-index-out-of-bounds\n             */\n            throw new CKEditorError('model-nodelist-index-out-of-bounds', this);\n        }\n        return this.getNodeStartOffset(node);\n    }\n    /**\n     * Converts offset in node list to index.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `model-nodelist-offset-out-of-bounds` if given offset is less\n     * than `0` or more than {@link #maxOffset}.\n     */\n    offsetToIndex(offset) {\n        if (offset == this._offsetToNode.length) {\n            return this._nodes.length;\n        }\n        const node = this._offsetToNode[offset];\n        if (!node) {\n            /**\n             * Given offset cannot be found in the node list.\n             *\n             * @error model-nodelist-offset-out-of-bounds\n             * @param offset\n             * @param nodeList Stringified node list.\n             */\n            throw new CKEditorError('model-nodelist-offset-out-of-bounds', this, {\n                offset,\n                nodeList: this\n            });\n        }\n        return this.getNodeIndex(node);\n    }\n    /**\n     * Inserts given nodes at given index.\n     *\n     * @internal\n     * @param index Index at which nodes should be inserted.\n     * @param nodes Nodes to be inserted.\n     */\n    _insertNodes(index, nodes) {\n        // Validation.\n        for (const node of nodes) {\n            if (!(node instanceof Node)) {\n                /**\n                 * Trying to insert an object which is not a Node instance.\n                 *\n                 * @error model-nodelist-insertnodes-not-node\n                 */\n                throw new CKEditorError('model-nodelist-insertnodes-not-node', this);\n            }\n        }\n        const nodesArray = Array.from(nodes);\n        const offsetsArray = makeOffsetsArray(nodesArray);\n        let offset = this.indexToOffset(index);\n        // Splice nodes array and offsets array into the nodelist.\n        this._nodes = spliceArray(this._nodes, nodesArray, index, 0);\n        this._offsetToNode = spliceArray(this._offsetToNode, offsetsArray, offset, 0);\n        // Refresh indexes and offsets for nodes inside this node list. We need to do this for all inserted nodes and all nodes after them.\n        for (let i = index; i < this._nodes.length; i++) {\n            this._nodes[i]._index = i;\n            this._nodes[i]._startOffset = offset;\n            offset += this._nodes[i].offsetSize;\n        }\n    }\n    /**\n     * Removes one or more nodes starting at the given index.\n     *\n     * @internal\n     * @param indexStart Index of the first node to remove.\n     * @param howMany Number of nodes to remove.\n     * @returns Array containing removed nodes.\n     */\n    _removeNodes(indexStart, howMany = 1) {\n        if (howMany == 0) {\n            return [];\n        }\n        // Remove nodes from this nodelist.\n        let offset = this.indexToOffset(indexStart);\n        const nodes = this._nodes.splice(indexStart, howMany);\n        const lastNode = nodes[nodes.length - 1];\n        const removedOffsetSum = lastNode.startOffset + lastNode.offsetSize - offset;\n        this._offsetToNode.splice(offset, removedOffsetSum);\n        // Reset index and start offset properties for the removed nodes -- they do not have a parent anymore.\n        for (const node of nodes) {\n            node._index = null;\n            node._startOffset = null;\n        }\n        for (let i = indexStart; i < this._nodes.length; i++) {\n            this._nodes[i]._index = i;\n            this._nodes[i]._startOffset = offset;\n            offset += this._nodes[i].offsetSize;\n        }\n        return nodes;\n    }\n    /**\n     * Converts `NodeList` instance to an array containing nodes that were inserted in the node list. Nodes\n     * are also converted to their plain object representation.\n     *\n     * @returns `NodeList` instance converted to `Array`.\n     */\n    toJSON() {\n        return this._nodes.map(node => node.toJSON());\n    }\n}\n/**\n * Creates an array of nodes in the format as in {@link module:engine/model/nodelist~NodeList#_offsetToNode}, i.e. one node will\n * occupy multiple items if its offset size is greater than one.\n */\nfunction makeOffsetsArray(nodes) {\n    const offsets = [];\n    for (const node of nodes) {\n        const start = offsets.length;\n        offsets.length += node.offsetSize;\n        offsets.fill(node, start);\n    }\n    return offsets;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/text\n */\nimport Node from './node.js';\n// @if CK_DEBUG_ENGINE // const { convertMapToStringifiedObject } = require( '../dev-utils/utils' );\n/**\n * Model text node. Type of {@link module:engine/model/node~Node node} that contains {@link module:engine/model/text~Text#data text data}.\n *\n * **Important:** see {@link module:engine/model/node~Node} to read about restrictions using `Text` and `Node` API.\n *\n * **Note:** keep in mind that `Text` instances might indirectly got removed from model tree when model is changed.\n * This happens when {@link module:engine/model/writer~Writer model writer} is used to change model and the text node is merged with\n * another text node. Then, both text nodes are removed and a new text node is inserted into the model. Because of\n * this behavior, keeping references to `Text` is not recommended. Instead, consider creating\n * {@link module:engine/model/liveposition~LivePosition live position} placed before the text node.\n */\nexport default class Text extends Node {\n    /**\n     * Creates a text node.\n     *\n     * **Note:** Constructor of this class shouldn't be used directly in the code.\n     * Use the {@link module:engine/model/writer~Writer#createText} method instead.\n     *\n     * @internal\n     * @param data Node's text.\n     * @param attrs Node's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n     */\n    constructor(data, attrs) {\n        super(attrs);\n        this._data = data || '';\n    }\n    /**\n     * @inheritDoc\n     */\n    get offsetSize() {\n        return this.data.length;\n    }\n    /**\n     * Returns a text data contained in the node.\n     */\n    get data() {\n        return this._data;\n    }\n    /**\n     * Converts `Text` instance to plain object and returns it.\n     *\n     * @returns`Text` instance converted to plain object.\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.data = this.data;\n        return json;\n    }\n    /**\n     * Creates a copy of this text node and returns it. Created text node has same text data and attributes as original text node.\n     *\n     * @internal\n     * @returns `Text` instance created using given plain object.\n     */\n    _clone() {\n        return new Text(this.data, this.getAttributes());\n    }\n    /**\n     * Creates a `Text` instance from given plain object (i.e. parsed JSON string).\n     *\n     * @param json Plain object to be converted to `Text`.\n     * @returns `Text` instance created using given plain object.\n     */\n    static fromJSON(json) {\n        return new Text(json.data, json.attributes);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nText.prototype.is = function (type) {\n    return type === '$text' || type === 'model:$text' ||\n        // This are legacy values kept for backward compatibility.\n        type === 'text' || type === 'model:text' ||\n        // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n        type === 'node' || type === 'model:node';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/textproxy\n */\nimport TypeCheckable from './typecheckable.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_ENGINE // const { convertMapToStringifiedObject } = require( '../dev-utils/utils' );\n/**\n * `TextProxy` represents a part of {@link module:engine/model/text~Text text node}.\n *\n * Since {@link module:engine/model/position~Position positions} can be placed between characters of a text node,\n * {@link module:engine/model/range~Range ranges} may contain only parts of text nodes. When {@link module:engine/model/range~Range#getItems\n * getting items}\n * contained in such range, we need to represent a part of that text node, since returning the whole text node would be incorrect.\n * `TextProxy` solves this issue.\n *\n * `TextProxy` has an API similar to {@link module:engine/model/text~Text Text} and allows to do most of the common tasks performed\n * on model nodes.\n *\n * **Note:** Some `TextProxy` instances may represent whole text node, not just a part of it.\n * See {@link module:engine/model/textproxy~TextProxy#isPartial}.\n *\n * **Note:** `TextProxy` is not an instance of {@link module:engine/model/node~Node node}. Keep this in mind when using it as a\n * parameter of methods.\n *\n * **Note:** `TextProxy` is a readonly interface. If you want to perform changes on model data represented by a `TextProxy`\n * use {@link module:engine/model/writer~Writer model writer API}.\n *\n * **Note:** `TextProxy` instances are created on the fly, basing on the current state of model. Because of this, it is\n * highly unrecommended to store references to `TextProxy` instances. `TextProxy` instances are not refreshed when\n * model changes, so they might get invalidated. Instead, consider creating {@link module:engine/model/liveposition~LivePosition live\n * position}.\n *\n * `TextProxy` instances are created by {@link module:engine/model/treewalker~TreeWalker model tree walker}. You should not need to create\n * an instance of this class by your own.\n */\nexport default class TextProxy extends TypeCheckable {\n    /**\n     * Creates a text proxy.\n     *\n     * @internal\n     * @param textNode Text node which part is represented by this text proxy.\n     * @param offsetInText Offset in {@link module:engine/model/textproxy~TextProxy#textNode text node} from which the text proxy\n     * starts.\n     * @param length Text proxy length, that is how many text node's characters, starting from `offsetInText` it represents.\n     */\n    constructor(textNode, offsetInText, length) {\n        super();\n        this.textNode = textNode;\n        if (offsetInText < 0 || offsetInText > textNode.offsetSize) {\n            /**\n             * Given `offsetInText` value is incorrect.\n             *\n             * @error model-textproxy-wrong-offsetintext\n             */\n            throw new CKEditorError('model-textproxy-wrong-offsetintext', this);\n        }\n        if (length < 0 || offsetInText + length > textNode.offsetSize) {\n            /**\n             * Given `length` value is incorrect.\n             *\n             * @error model-textproxy-wrong-length\n             */\n            throw new CKEditorError('model-textproxy-wrong-length', this);\n        }\n        this.data = textNode.data.substring(offsetInText, offsetInText + length);\n        this.offsetInText = offsetInText;\n    }\n    /**\n     * Offset at which this text proxy starts in it's parent.\n     *\n     * @see module:engine/model/node~Node#startOffset\n     */\n    get startOffset() {\n        return this.textNode.startOffset !== null ? this.textNode.startOffset + this.offsetInText : null;\n    }\n    /**\n     * Offset size of this text proxy. Equal to the number of characters represented by the text proxy.\n     *\n     * @see module:engine/model/node~Node#offsetSize\n     */\n    get offsetSize() {\n        return this.data.length;\n    }\n    /**\n     * Offset at which this text proxy ends in it's parent.\n     *\n     * @see module:engine/model/node~Node#endOffset\n     */\n    get endOffset() {\n        return this.startOffset !== null ? this.startOffset + this.offsetSize : null;\n    }\n    /**\n     * Flag indicating whether `TextProxy` instance covers only part of the original {@link module:engine/model/text~Text text node}\n     * (`true`) or the whole text node (`false`).\n     *\n     * This is `false` when text proxy starts at the very beginning of {@link module:engine/model/textproxy~TextProxy#textNode textNode}\n     * ({@link module:engine/model/textproxy~TextProxy#offsetInText offsetInText} equals `0`) and text proxy sizes is equal to\n     * text node size.\n     */\n    get isPartial() {\n        return this.offsetSize !== this.textNode.offsetSize;\n    }\n    /**\n     * Parent of this text proxy, which is same as parent of text node represented by this text proxy.\n     */\n    get parent() {\n        return this.textNode.parent;\n    }\n    /**\n     * Root of this text proxy, which is same as root of text node represented by this text proxy.\n     */\n    get root() {\n        return this.textNode.root;\n    }\n    /**\n     * Gets path to this text proxy.\n     *\n     * @see module:engine/model/node~Node#getPath\n     */\n    getPath() {\n        const path = this.textNode.getPath();\n        if (path.length > 0) {\n            path[path.length - 1] += this.offsetInText;\n        }\n        return path;\n    }\n    /**\n     * Returns ancestors array of this text proxy.\n     *\n     * @param options Options object.\n     * @param options.includeSelf When set to `true` this text proxy will be also included in parent's array.\n     * @param options.parentFirst When set to `true`, array will be sorted from text proxy parent to root element,\n     * otherwise root element will be the first item in the array.\n     * @returns Array with ancestors.\n     */\n    getAncestors(options = {}) {\n        const ancestors = [];\n        let parent = options.includeSelf ? this : this.parent;\n        while (parent) {\n            ancestors[options.parentFirst ? 'push' : 'unshift'](parent);\n            parent = parent.parent;\n        }\n        return ancestors;\n    }\n    /**\n     * Checks if this text proxy has an attribute for given key.\n     *\n     * @param key Key of attribute to check.\n     * @returns `true` if attribute with given key is set on text proxy, `false` otherwise.\n     */\n    hasAttribute(key) {\n        return this.textNode.hasAttribute(key);\n    }\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on text proxy.\n     *\n     * @param key Key of attribute to look for.\n     * @returns Attribute value or `undefined`.\n     */\n    getAttribute(key) {\n        return this.textNode.getAttribute(key);\n    }\n    /**\n     * Returns iterator that iterates over this node's attributes. Attributes are returned as arrays containing two\n     * items. First one is attribute key and second is attribute value.\n     *\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     */\n    getAttributes() {\n        return this.textNode.getAttributes();\n    }\n    /**\n     * Returns iterator that iterates over this node's attribute keys.\n     */\n    getAttributeKeys() {\n        return this.textNode.getAttributeKeys();\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nTextProxy.prototype.is = function (type) {\n    return type === '$textProxy' || type === 'model:$textProxy' ||\n        // This are legacy values kept for backward compatibility.\n        type === 'textProxy' || type === 'model:textProxy';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/element\n */\nimport Node from './node.js';\nimport NodeList from './nodelist.js';\nimport Text from './text.js';\nimport TextProxy from './textproxy.js';\nimport { isIterable } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_ENGINE // const { stringifyMap, convertMapToStringifiedObject, convertMapToTags } = require( '../dev-utils/utils' );\n/**\n * Model element. Type of {@link module:engine/model/node~Node node} that has a {@link module:engine/model/element~Element#name name} and\n * {@link module:engine/model/element~Element#getChildren child nodes}.\n *\n * **Important**: see {@link module:engine/model/node~Node} to read about restrictions using `Element` and `Node` API.\n */\nexport default class Element extends Node {\n    /**\n     * Creates a model element.\n     *\n     * **Note:** Constructor of this class shouldn't be used directly in the code.\n     * Use the {@link module:engine/model/writer~Writer#createElement} method instead.\n     *\n     * @internal\n     * @param name Element's name.\n     * @param attrs Element's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n     * @param children One or more nodes to be inserted as children of created element.\n     */\n    constructor(name, attrs, children) {\n        super(attrs);\n        /**\n         * List of children nodes.\n         */\n        this._children = new NodeList();\n        this.name = name;\n        if (children) {\n            this._insertChild(0, children);\n        }\n    }\n    /**\n     * Number of this element's children.\n     */\n    get childCount() {\n        return this._children.length;\n    }\n    /**\n     * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all of this element's children.\n     */\n    get maxOffset() {\n        return this._children.maxOffset;\n    }\n    /**\n     * Is `true` if there are no nodes inside this element, `false` otherwise.\n     */\n    get isEmpty() {\n        return this.childCount === 0;\n    }\n    /**\n     * Gets the child at the given index. Returns `null` if incorrect index was passed.\n     *\n     * @param index Index in this element.\n     * @returns Child node.\n     */\n    getChild(index) {\n        return this._children.getNode(index);\n    }\n    /**\n     * Gets the child at the given offset. Returns `null` if incorrect index was passed.\n     *\n     * @param offset Offset in this element.\n     * @returns Child node.\n     */\n    getChildAtOffset(offset) {\n        return this._children.getNodeAtOffset(offset);\n    }\n    /**\n     * Returns an iterator that iterates over all of this element's children.\n     */\n    getChildren() {\n        return this._children[Symbol.iterator]();\n    }\n    /**\n     * Returns an index of the given child node. Returns `null` if given node is not a child of this element.\n     *\n     * @param node Child node to look for.\n     * @returns Child node's index in this element.\n     */\n    getChildIndex(node) {\n        return this._children.getNodeIndex(node);\n    }\n    /**\n     * Returns the starting offset of given child. Starting offset is equal to the sum of\n     * {@link module:engine/model/node~Node#offsetSize offset sizes} of all node's siblings that are before it. Returns `null` if\n     * given node is not a child of this element.\n     *\n     * @param node Child node to look for.\n     * @returns Child node's starting offset.\n     */\n    getChildStartOffset(node) {\n        return this._children.getNodeStartOffset(node);\n    }\n    /**\n     * Returns index of a node that occupies given offset. If given offset is too low, returns `0`. If given offset is\n     * too high, returns {@link module:engine/model/element~Element#getChildIndex index after last child}.\n     *\n     * ```ts\n     * const textNode = new Text( 'foo' );\n     * const pElement = new Element( 'p' );\n     * const divElement = new Element( [ textNode, pElement ] );\n     * divElement.offsetToIndex( -1 ); // Returns 0, because offset is too low.\n     * divElement.offsetToIndex( 0 ); // Returns 0, because offset 0 is taken by `textNode` which is at index 0.\n     * divElement.offsetToIndex( 1 ); // Returns 0, because `textNode` has `offsetSize` equal to 3, so it occupies offset 1 too.\n     * divElement.offsetToIndex( 2 ); // Returns 0.\n     * divElement.offsetToIndex( 3 ); // Returns 1.\n     * divElement.offsetToIndex( 4 ); // Returns 2. There are no nodes at offset 4, so last available index is returned.\n     * ```\n     */\n    offsetToIndex(offset) {\n        return this._children.offsetToIndex(offset);\n    }\n    /**\n     * Returns a descendant node by its path relative to this element.\n     *\n     * ```ts\n     * // <this>a<b>c</b></this>\n     * this.getNodeByPath( [ 0 ] );     // -> \"a\"\n     * this.getNodeByPath( [ 1 ] );     // -> <b>\n     * this.getNodeByPath( [ 1, 0 ] );  // -> \"c\"\n     * ```\n     *\n     * @param relativePath Path of the node to find, relative to this element.\n     */\n    getNodeByPath(relativePath) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let node = this;\n        for (const offset of relativePath) {\n            node = node.getChildAtOffset(offset);\n        }\n        return node;\n    }\n    /**\n     * Returns the parent element of the given name. Returns null if the element is not inside the desired parent.\n     *\n     * @param parentName The name of the parent element to find.\n     * @param options Options object.\n     * @param options.includeSelf When set to `true` this node will be also included while searching.\n     */\n    findAncestor(parentName, options = {}) {\n        let parent = options.includeSelf ? this : this.parent;\n        while (parent) {\n            if (parent.name === parentName) {\n                return parent;\n            }\n            parent = parent.parent;\n        }\n        return null;\n    }\n    /**\n     * Converts `Element` instance to plain object and returns it. Takes care of converting all of this element's children.\n     *\n     * @returns `Element` instance converted to plain object.\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.name = this.name;\n        if (this._children.length > 0) {\n            json.children = [];\n            for (const node of this._children) {\n                json.children.push(node.toJSON());\n            }\n        }\n        return json;\n    }\n    /**\n     * Creates a copy of this element and returns it. Created element has the same name and attributes as the original element.\n     * If clone is deep, the original element's children are also cloned. If not, then empty element is returned.\n     *\n     * @internal\n     * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any child.\n     */\n    _clone(deep = false) {\n        const children = deep ? Array.from(this._children).map(node => node._clone(true)) : undefined;\n        return new Element(this.name, this.getAttributes(), children);\n    }\n    /**\n     * {@link module:engine/model/element~Element#_insertChild Inserts} one or more nodes at the end of this element.\n     *\n     * @see module:engine/model/writer~Writer#append\n     * @internal\n     * @param nodes Nodes to be inserted.\n     */\n    _appendChild(nodes) {\n        this._insertChild(this.childCount, nodes);\n    }\n    /**\n     * Inserts one or more nodes at the given index and sets {@link module:engine/model/node~Node#parent parent} of these nodes\n     * to this element.\n     *\n     * @see module:engine/model/writer~Writer#insert\n     * @internal\n     * @param index Index at which nodes should be inserted.\n     * @param items Items to be inserted.\n     */\n    _insertChild(index, items) {\n        const nodes = normalize(items);\n        for (const node of nodes) {\n            // If node that is being added to this element is already inside another element, first remove it from the old parent.\n            if (node.parent !== null) {\n                node._remove();\n            }\n            node.parent = this;\n        }\n        this._children._insertNodes(index, nodes);\n    }\n    /**\n     * Removes one or more nodes starting at the given index and sets\n     * {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.\n     *\n     * @see module:engine/model/writer~Writer#remove\n     * @internal\n     * @param index Index of the first node to remove.\n     * @param howMany Number of nodes to remove.\n     * @returns Array containing removed nodes.\n     */\n    _removeChildren(index, howMany = 1) {\n        const nodes = this._children._removeNodes(index, howMany);\n        for (const node of nodes) {\n            node.parent = null;\n        }\n        return nodes;\n    }\n    /**\n     * Creates an `Element` instance from given plain object (i.e. parsed JSON string).\n     * Converts `Element` children to proper nodes.\n     *\n     * @param json Plain object to be converted to `Element`.\n     * @returns `Element` instance created using given plain object.\n     */\n    static fromJSON(json) {\n        let children;\n        if (json.children) {\n            children = [];\n            for (const child of json.children) {\n                if (child.name) {\n                    // If child has name property, it is an Element.\n                    children.push(Element.fromJSON(child));\n                }\n                else {\n                    // Otherwise, it is a Text node.\n                    children.push(Text.fromJSON(child));\n                }\n            }\n        }\n        return new Element(json.name, json.attributes, children);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'element' || type === 'model:element' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'node' || type === 'model:node';\n    }\n    return name === this.name && (type === 'element' || type === 'model:element');\n};\n/**\n * Converts strings to Text and non-iterables to arrays.\n */\nfunction normalize(nodes) {\n    // Separate condition because string is iterable.\n    if (typeof nodes == 'string') {\n        return [new Text(nodes)];\n    }\n    if (!isIterable(nodes)) {\n        nodes = [nodes];\n    }\n    // Array.from to enable .map() on non-arrays.\n    return Array.from(nodes)\n        .map(node => {\n        if (typeof node == 'string') {\n            return new Text(node);\n        }\n        if (node instanceof TextProxy) {\n            return new Text(node.data, node.getAttributes());\n        }\n        return node;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/treewalker\n */\nimport Element from './element.js';\nimport { default as Position, getTextNodeAtPosition, getNodeAfterPosition, getNodeBeforePosition } from './position.js';\nimport Text from './text.js';\nimport TextProxy from './textproxy.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Position iterator class. It allows to iterate forward and backward over the document.\n */\nexport default class TreeWalker {\n    /**\n     * Creates a range iterator. All parameters are optional, but you have to specify either `boundaries` or `startPosition`.\n     *\n     * @param options Object with configuration.\n     */\n    constructor(options) {\n        if (!options || (!options.boundaries && !options.startPosition)) {\n            /**\n             * Neither boundaries nor starting position of a `TreeWalker` have been defined.\n             *\n             * @error model-tree-walker-no-start-position\n             */\n            throw new CKEditorError('model-tree-walker-no-start-position', null);\n        }\n        const direction = options.direction || 'forward';\n        if (direction != 'forward' && direction != 'backward') {\n            /**\n             * Only `backward` and `forward` direction allowed.\n             *\n             * @error model-tree-walker-unknown-direction\n             */\n            throw new CKEditorError('model-tree-walker-unknown-direction', options, { direction });\n        }\n        this.direction = direction;\n        this.boundaries = options.boundaries || null;\n        if (options.startPosition) {\n            this._position = options.startPosition.clone();\n        }\n        else {\n            this._position = Position._createAt(this.boundaries[this.direction == 'backward' ? 'end' : 'start']);\n        }\n        // Reset position stickiness in case it was set to other value, as the stickiness is kept after cloning.\n        this.position.stickiness = 'toNone';\n        this.singleCharacters = !!options.singleCharacters;\n        this.shallow = !!options.shallow;\n        this.ignoreElementEnd = !!options.ignoreElementEnd;\n        this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null;\n        this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null;\n        this._visitedParent = this.position.parent;\n    }\n    /**\n     * Iterable interface.\n     *\n     * @returns {Iterable.<module:engine/model/treewalker~TreeWalkerValue>}\n     */\n    [Symbol.iterator]() {\n        return this;\n    }\n    /**\n     * Iterator position. This is always static position, even if the initial position was a\n     * {@link module:engine/model/liveposition~LivePosition live position}. If start position is not defined then position depends\n     * on {@link #direction}. If direction is `'forward'` position starts form the beginning, when direction\n     * is `'backward'` position starts from the end.\n     */\n    get position() {\n        return this._position;\n    }\n    /**\n     * Moves {@link #position} in the {@link #direction} skipping values as long as the callback function returns `true`.\n     *\n     * For example:\n     *\n     * ```ts\n     * walker.skip( value => value.type == 'text' ); // <paragraph>[]foo</paragraph> -> <paragraph>foo[]</paragraph>\n     * walker.skip( () => true ); // Move the position to the end: <paragraph>[]foo</paragraph> -> <paragraph>foo</paragraph>[]\n     * walker.skip( () => false ); // Do not move the position.\n     * ```\n     *\n     * @param skip Callback function. Gets {@link module:engine/model/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     */\n    skip(skip) {\n        let done, value, prevPosition, prevVisitedParent;\n        do {\n            prevPosition = this.position;\n            prevVisitedParent = this._visitedParent;\n            ({ done, value } = this.next());\n        } while (!done && skip(value));\n        if (!done) {\n            this._position = prevPosition;\n            this._visitedParent = prevVisitedParent;\n        }\n    }\n    /**\n     * Gets the next tree walker's value.\n     */\n    next() {\n        if (this.direction == 'forward') {\n            return this._next();\n        }\n        else {\n            return this._previous();\n        }\n    }\n    /**\n     * Makes a step forward in model. Moves the {@link #position} to the next position and returns the encountered value.\n     */\n    _next() {\n        const previousPosition = this.position;\n        const position = this.position.clone();\n        const parent = this._visitedParent;\n        // We are at the end of the root.\n        if (parent.parent === null && position.offset === parent.maxOffset) {\n            return { done: true, value: undefined };\n        }\n        // We reached the walker boundary.\n        if (parent === this._boundaryEndParent && position.offset == this.boundaries.end.offset) {\n            return { done: true, value: undefined };\n        }\n        // Get node just after the current position.\n        // Use a highly optimized version instead of checking the text node first and then getting the node after. See #6582.\n        const textNodeAtPosition = getTextNodeAtPosition(position, parent);\n        const node = textNodeAtPosition || getNodeAfterPosition(position, parent, textNodeAtPosition);\n        if (node instanceof Element) {\n            if (!this.shallow) {\n                // Manual operations on path internals for optimization purposes. Here and in the rest of the method.\n                position.path.push(0);\n                this._visitedParent = node;\n            }\n            else {\n                // We are past the walker boundaries.\n                if (this.boundaries && this.boundaries.end.isBefore(position)) {\n                    return { done: true, value: undefined };\n                }\n                position.offset++;\n            }\n            this._position = position;\n            return formatReturnValue('elementStart', node, previousPosition, position, 1);\n        }\n        if (node instanceof Text) {\n            let charactersCount;\n            if (this.singleCharacters) {\n                charactersCount = 1;\n            }\n            else {\n                let offset = node.endOffset;\n                if (this._boundaryEndParent == parent && this.boundaries.end.offset < offset) {\n                    offset = this.boundaries.end.offset;\n                }\n                charactersCount = offset - position.offset;\n            }\n            const offsetInTextNode = position.offset - node.startOffset;\n            const item = new TextProxy(node, offsetInTextNode, charactersCount);\n            position.offset += charactersCount;\n            this._position = position;\n            return formatReturnValue('text', item, previousPosition, position, charactersCount);\n        }\n        // `node` is not set, we reached the end of current `parent`.\n        position.path.pop();\n        position.offset++;\n        this._position = position;\n        this._visitedParent = parent.parent;\n        if (this.ignoreElementEnd) {\n            return this._next();\n        }\n        return formatReturnValue('elementEnd', parent, previousPosition, position);\n    }\n    /**\n     * Makes a step backward in model. Moves the {@link #position} to the previous position and returns the encountered value.\n     */\n    _previous() {\n        const previousPosition = this.position;\n        const position = this.position.clone();\n        const parent = this._visitedParent;\n        // We are at the beginning of the root.\n        if (parent.parent === null && position.offset === 0) {\n            return { done: true, value: undefined };\n        }\n        // We reached the walker boundary.\n        if (parent == this._boundaryStartParent && position.offset == this.boundaries.start.offset) {\n            return { done: true, value: undefined };\n        }\n        // Get node just before the current position.\n        // Use a highly optimized version instead of checking the text node first and then getting the node before. See #6582.\n        const positionParent = position.parent;\n        const textNodeAtPosition = getTextNodeAtPosition(position, positionParent);\n        const node = textNodeAtPosition || getNodeBeforePosition(position, positionParent, textNodeAtPosition);\n        if (node instanceof Element) {\n            position.offset--;\n            if (this.shallow) {\n                this._position = position;\n                return formatReturnValue('elementStart', node, previousPosition, position, 1);\n            }\n            position.path.push(node.maxOffset);\n            this._position = position;\n            this._visitedParent = node;\n            if (this.ignoreElementEnd) {\n                return this._previous();\n            }\n            return formatReturnValue('elementEnd', node, previousPosition, position);\n        }\n        if (node instanceof Text) {\n            let charactersCount;\n            if (this.singleCharacters) {\n                charactersCount = 1;\n            }\n            else {\n                let offset = node.startOffset;\n                if (this._boundaryStartParent == parent && this.boundaries.start.offset > offset) {\n                    offset = this.boundaries.start.offset;\n                }\n                charactersCount = position.offset - offset;\n            }\n            const offsetInTextNode = position.offset - node.startOffset;\n            const item = new TextProxy(node, offsetInTextNode - charactersCount, charactersCount);\n            position.offset -= charactersCount;\n            this._position = position;\n            return formatReturnValue('text', item, previousPosition, position, charactersCount);\n        }\n        // `node` is not set, we reached the beginning of current `parent`.\n        position.path.pop();\n        this._position = position;\n        this._visitedParent = parent.parent;\n        return formatReturnValue('elementStart', parent, previousPosition, position, 1);\n    }\n}\nfunction formatReturnValue(type, item, previousPosition, nextPosition, length) {\n    return {\n        done: false,\n        value: {\n            type,\n            item,\n            previousPosition,\n            nextPosition,\n            length\n        }\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/position\n */\nimport TypeCheckable from './typecheckable.js';\nimport TreeWalker from './treewalker.js';\nimport { CKEditorError, compareArrays } from '@ckeditor/ckeditor5-utils';\n/**\n * Represents a position in the model tree.\n *\n * A position is represented by its {@link module:engine/model/position~Position#root} and\n * a {@link module:engine/model/position~Position#path} in that root.\n *\n * You can create position instances via its constructor or the `createPosition*()` factory methods of\n * {@link module:engine/model/model~Model} and {@link module:engine/model/writer~Writer}.\n *\n * **Note:** Position is based on offsets, not indexes. This means that a position between two text nodes\n * `foo` and `bar` has offset `3`, not `1`. See {@link module:engine/model/position~Position#path} for more information.\n *\n * Since a position in the model is represented by a {@link module:engine/model/position~Position#root position root} and\n * {@link module:engine/model/position~Position#path position path} it is possible to create positions placed in non-existing places.\n * This requirement is important for operational transformation algorithms.\n *\n * Also, {@link module:engine/model/operation/operation~Operation operations}\n * kept in the {@link module:engine/model/document~Document#history document history}\n * are storing positions (and ranges) which were correct when those operations were applied, but may not be correct\n * after the document has changed.\n *\n * When changes are applied to the model, it may also happen that {@link module:engine/model/position~Position#parent position parent}\n * will change even if position path has not changed. Keep in mind, that if a position leads to non-existing element,\n * {@link module:engine/model/position~Position#parent} and some other properties and methods will throw errors.\n *\n * In most cases, position with wrong path is caused by an error in code, but it is sometimes needed, as described above.\n */\nexport default class Position extends TypeCheckable {\n    /**\n     * Creates a position.\n     *\n     * @param root Root of the position.\n     * @param path Position path. See {@link module:engine/model/position~Position#path}.\n     * @param stickiness Position stickiness. See {@link module:engine/model/position~PositionStickiness}.\n     */\n    constructor(root, path, stickiness = 'toNone') {\n        super();\n        if (!root.is('element') && !root.is('documentFragment')) {\n            /**\n             * Position root is invalid.\n             *\n             * Positions can only be anchored in elements or document fragments.\n             *\n             * @error model-position-root-invalid\n             */\n            throw new CKEditorError('model-position-root-invalid', root);\n        }\n        if (!(path instanceof Array) || path.length === 0) {\n            /**\n             * Position path must be an array with at least one item.\n             *\n             * @error model-position-path-incorrect-format\n             * @param path\n             */\n            throw new CKEditorError('model-position-path-incorrect-format', root, { path });\n        }\n        // Normalize the root and path when element (not root) is passed.\n        if (root.is('rootElement')) {\n            path = path.slice();\n        }\n        else {\n            path = [...root.getPath(), ...path];\n            root = root.root;\n        }\n        this.root = root;\n        this.path = path;\n        this.stickiness = stickiness;\n    }\n    /**\n     * Offset at which this position is located in its {@link module:engine/model/position~Position#parent parent}. It is equal\n     * to the last item in position {@link module:engine/model/position~Position#path path}.\n     *\n     * @type {Number}\n     */\n    get offset() {\n        return this.path[this.path.length - 1];\n    }\n    set offset(newOffset) {\n        this.path[this.path.length - 1] = newOffset;\n    }\n    /**\n     * Parent element of this position.\n     *\n     * Keep in mind that `parent` value is calculated when the property is accessed.\n     * If {@link module:engine/model/position~Position#path position path}\n     * leads to a non-existing element, `parent` property will throw error.\n     *\n     * Also it is a good idea to cache `parent` property if it is used frequently in an algorithm (i.e. in a long loop).\n     */\n    get parent() {\n        let parent = this.root;\n        for (let i = 0; i < this.path.length - 1; i++) {\n            parent = parent.getChildAtOffset(this.path[i]);\n            if (!parent) {\n                /**\n                 * The position's path is incorrect. This means that a position does not point to\n                 * a correct place in the tree and hence, some of its methods and getters cannot work correctly.\n                 *\n                 * **Note**: Unlike DOM and view positions, in the model, the\n                 * {@link module:engine/model/position~Position#parent position's parent} is always an element or a document fragment.\n                 * The last offset in the {@link module:engine/model/position~Position#path position's path} is the point in this element\n                 * where this position points.\n                 *\n                 * Read more about model positions and offsets in\n                 * the {@glink framework/architecture/editing-engine#indexes-and-offsets Editing engine architecture} guide.\n                 *\n                 * @error model-position-path-incorrect\n                 * @param position The incorrect position.\n                 */\n                throw new CKEditorError('model-position-path-incorrect', this, { position: this });\n            }\n        }\n        if (parent.is('$text')) {\n            throw new CKEditorError('model-position-path-incorrect', this, { position: this });\n        }\n        return parent;\n    }\n    /**\n     * Position {@link module:engine/model/position~Position#offset offset} converted to an index in position's parent node. It is\n     * equal to the {@link module:engine/model/node~Node#index index} of a node after this position. If position is placed\n     * in text node, position index is equal to the index of that text node.\n     */\n    get index() {\n        return this.parent.offsetToIndex(this.offset);\n    }\n    /**\n     * Returns {@link module:engine/model/text~Text text node} instance in which this position is placed or `null` if this\n     * position is not in a text node.\n     */\n    get textNode() {\n        return getTextNodeAtPosition(this, this.parent);\n    }\n    /**\n     * Node directly after this position. Returns `null` if this position is at the end of its parent, or if it is in a text node.\n     */\n    get nodeAfter() {\n        // Cache the parent and reuse for performance reasons. See #6579 and #6582.\n        const parent = this.parent;\n        return getNodeAfterPosition(this, parent, getTextNodeAtPosition(this, parent));\n    }\n    /**\n     * Node directly before this position. Returns `null` if this position is at the start of its parent, or if it is in a text node.\n     */\n    get nodeBefore() {\n        // Cache the parent and reuse for performance reasons. See #6579 and #6582.\n        const parent = this.parent;\n        return getNodeBeforePosition(this, parent, getTextNodeAtPosition(this, parent));\n    }\n    /**\n     * Is `true` if position is at the beginning of its {@link module:engine/model/position~Position#parent parent}, `false` otherwise.\n     */\n    get isAtStart() {\n        return this.offset === 0;\n    }\n    /**\n     * Is `true` if position is at the end of its {@link module:engine/model/position~Position#parent parent}, `false` otherwise.\n     */\n    get isAtEnd() {\n        return this.offset == this.parent.maxOffset;\n    }\n    /**\n     * Checks whether the position is valid in current model tree, that is whether it points to an existing place in the model.\n     */\n    isValid() {\n        if (this.offset < 0) {\n            return false;\n        }\n        let parent = this.root;\n        for (let i = 0; i < this.path.length - 1; i++) {\n            parent = parent.getChildAtOffset(this.path[i]);\n            if (!parent) {\n                return false;\n            }\n        }\n        return this.offset <= parent.maxOffset;\n    }\n    /**\n     * Checks whether this position is before or after given position.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     */\n    compareWith(otherPosition) {\n        if (this.root != otherPosition.root) {\n            return 'different';\n        }\n        const result = compareArrays(this.path, otherPosition.path);\n        switch (result) {\n            case 'same':\n                return 'same';\n            case 'prefix':\n                return 'before';\n            case 'extension':\n                return 'after';\n            default:\n                return this.path[result] < otherPosition.path[result] ? 'before' : 'after';\n        }\n    }\n    /**\n     * Gets the farthest position which matches the callback using\n     * {@link module:engine/model/treewalker~TreeWalker TreeWalker}.\n     *\n     * For example:\n     *\n     * ```ts\n     * getLastMatchingPosition( value => value.type == 'text' );\n     * // <paragraph>[]foo</paragraph> -> <paragraph>foo[]</paragraph>\n     *\n     * getLastMatchingPosition( value => value.type == 'text', { direction: 'backward' } );\n     * // <paragraph>foo[]</paragraph> -> <paragraph>[]foo</paragraph>\n     *\n     * getLastMatchingPosition( value => false );\n     * // Do not move the position.\n     * ```\n     *\n     * @param skip Callback function. Gets {@link module:engine/model/treewalker~TreeWalkerValue} and should\n     * return `true` if the value should be skipped or `false` if not.\n     * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     *\n     * @returns The position after the last item which matches the `skip` callback test.\n     */\n    getLastMatchingPosition(skip, options = {}) {\n        options.startPosition = this;\n        const treeWalker = new TreeWalker(options);\n        treeWalker.skip(skip);\n        return treeWalker.position;\n    }\n    /**\n     * Returns a path to this position's parent. Parent path is equal to position {@link module:engine/model/position~Position#path path}\n     * but without the last item.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @returns Path to the parent.\n     */\n    getParentPath() {\n        return this.path.slice(0, -1);\n    }\n    /**\n     * Returns ancestors array of this position, that is this position's parent and its ancestors.\n     *\n     * @returns Array with ancestors.\n     */\n    getAncestors() {\n        const parent = this.parent;\n        if (parent.is('documentFragment')) {\n            return [parent];\n        }\n        else {\n            return parent.getAncestors({ includeSelf: true });\n        }\n    }\n    /**\n     * Returns the parent element of the given name. Returns null if the position is not inside the desired parent.\n     *\n     * @param parentName The name of the parent element to find.\n     */\n    findAncestor(parentName) {\n        const parent = this.parent;\n        if (parent.is('element')) {\n            return parent.findAncestor(parentName, { includeSelf: true });\n        }\n        return null;\n    }\n    /**\n     * Returns the slice of two position {@link #path paths} which is identical. The {@link #root roots}\n     * of these two paths must be identical.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param position The second position.\n     * @returns The common path.\n     */\n    getCommonPath(position) {\n        if (this.root != position.root) {\n            return [];\n        }\n        // We find on which tree-level start and end have the lowest common ancestor\n        const cmp = compareArrays(this.path, position.path);\n        // If comparison returned string it means that arrays are same.\n        const diffAt = (typeof cmp == 'string') ? Math.min(this.path.length, position.path.length) : cmp;\n        return this.path.slice(0, diffAt);\n    }\n    /**\n     * Returns an {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n     * which is a common ancestor of both positions. The {@link #root roots} of these two positions must be identical.\n     *\n     * @param position The second position.\n     */\n    getCommonAncestor(position) {\n        const ancestorsA = this.getAncestors();\n        const ancestorsB = position.getAncestors();\n        let i = 0;\n        while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n            i++;\n        }\n        return i === 0 ? null : ancestorsA[i - 1];\n    }\n    /**\n     * Returns a new instance of `Position`, that has same {@link #parent parent} but it's offset\n     * is shifted by `shift` value (can be a negative value).\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param shift Offset shift. Can be a negative value.\n     * @returns Shifted position.\n     */\n    getShiftedBy(shift) {\n        const shifted = this.clone();\n        const offset = shifted.offset + shift;\n        shifted.offset = offset < 0 ? 0 : offset;\n        return shifted;\n    }\n    /**\n     * Checks whether this position is after given position.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @see module:engine/model/position~Position#isBefore\n     * @param  otherPosition Position to compare with.\n     * @returns True if this position is after given position.\n     */\n    isAfter(otherPosition) {\n        return this.compareWith(otherPosition) == 'after';\n    }\n    /**\n     * Checks whether this position is before given position.\n     *\n     * **Note:** watch out when using negation of the value returned by this method, because the negation will also\n     * be `true` if positions are in different roots and you might not expect this. You should probably use\n     * `a.isAfter( b ) || a.isEqual( b )` or `!a.isBefore( p ) && a.root == b.root` in most scenarios. If your\n     * condition uses multiple `isAfter` and `isBefore` checks, build them so they do not use negated values, i.e.:\n     *\n     * ```ts\n     * if ( a.isBefore( b ) && c.isAfter( d ) ) {\n     * \t// do A.\n     * } else {\n     * \t// do B.\n     * }\n     * ```\n     *\n     * or, if you have only one if-branch:\n     *\n     * ```ts\n     * if ( !( a.isBefore( b ) && c.isAfter( d ) ) {\n     * \t// do B.\n     * }\n     * ```\n     *\n     * rather than:\n     *\n     * ```ts\n     * if ( !a.isBefore( b ) || && !c.isAfter( d ) ) {\n     * \t// do B.\n     * } else {\n     * \t// do A.\n     * }\n     * ```\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param otherPosition Position to compare with.\n     * @returns True if this position is before given position.\n     */\n    isBefore(otherPosition) {\n        return this.compareWith(otherPosition) == 'before';\n    }\n    /**\n     * Checks whether this position is equal to given position.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param otherPosition Position to compare with.\n     * @returns True if positions are same.\n     */\n    isEqual(otherPosition) {\n        return this.compareWith(otherPosition) == 'same';\n    }\n    /**\n     * Checks whether this position is touching given position. Positions touch when there are no text nodes\n     * or empty nodes in a range between them. Technically, those positions are not equal but in many cases\n     * they are very similar or even indistinguishable.\n     *\n     * @param otherPosition Position to compare with.\n     * @returns True if positions touch.\n     */\n    isTouching(otherPosition) {\n        if (this.root !== otherPosition.root) {\n            return false;\n        }\n        const commonLevel = Math.min(this.path.length, otherPosition.path.length);\n        for (let level = 0; level < commonLevel; level++) {\n            const diff = this.path[level] - otherPosition.path[level];\n            // Positions are spread by a node, so they are not touching.\n            if (diff < -1 || diff > 1) {\n                return false;\n            }\n            else if (diff === 1) {\n                // `otherPosition` is on the left.\n                // `this` is on the right.\n                return checkTouchingBranch(otherPosition, this, level);\n            }\n            else if (diff === -1) {\n                // `this` is on the left.\n                // `otherPosition` is on the right.\n                return checkTouchingBranch(this, otherPosition, level);\n            }\n            // `diff === 0`.\n            // Positions are inside the same element on this level, compare deeper.\n        }\n        // If we ended up here, it means that positions paths have the same beginning.\n        // If the paths have the same length, then it means that they are identical, so the positions are same.\n        if (this.path.length === otherPosition.path.length) {\n            return true;\n        }\n        // If positions have different length of paths, then the common part is the same.\n        // In this case, the \"shorter\" position is on the left, the \"longer\" position is on the right.\n        //\n        // If the positions are touching, the \"longer\" position must have only zeroes. For example:\n        // [ 1, 2 ] vs [ 1, 2, 0 ]\n        // [ 1, 2 ] vs [ 1, 2, 0, 0, 0 ]\n        else if (this.path.length > otherPosition.path.length) {\n            return checkOnlyZeroes(this.path, commonLevel);\n        }\n        else {\n            return checkOnlyZeroes(otherPosition.path, commonLevel);\n        }\n    }\n    /**\n     * Checks if two positions are in the same parent.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param position Position to compare with.\n     * @returns `true` if positions have the same parent, `false` otherwise.\n     */\n    hasSameParentAs(position) {\n        if (this.root !== position.root) {\n            return false;\n        }\n        const thisParentPath = this.getParentPath();\n        const posParentPath = position.getParentPath();\n        return compareArrays(thisParentPath, posParentPath) == 'same';\n    }\n    /**\n     * Returns a copy of this position that is transformed by given `operation`.\n     *\n     * The new position's parameters are updated accordingly to the effect of the `operation`.\n     *\n     * For example, if `n` nodes are inserted before the position, the returned position {@link ~Position#offset} will be\n     * increased by `n`. If the position was in a merged element, it will be accordingly moved to the new element, etc.\n     *\n     * This method is safe to use it on non-existing positions (for example during operational transformation).\n     *\n     * @param operation Operation to transform by.\n     * @returns Transformed position.\n     */\n    getTransformedByOperation(operation) {\n        let result;\n        switch (operation.type) {\n            case 'insert':\n                result = this._getTransformedByInsertOperation(operation);\n                break;\n            case 'move':\n            case 'remove':\n            case 'reinsert':\n                result = this._getTransformedByMoveOperation(operation);\n                break;\n            case 'split':\n                result = this._getTransformedBySplitOperation(operation);\n                break;\n            case 'merge':\n                result = this._getTransformedByMergeOperation(operation);\n                break;\n            default:\n                result = Position._createAt(this);\n                break;\n        }\n        return result;\n    }\n    /**\n     * Returns a copy of this position transformed by an insert operation.\n     *\n     * @internal\n     */\n    _getTransformedByInsertOperation(operation) {\n        return this._getTransformedByInsertion(operation.position, operation.howMany);\n    }\n    /**\n     * Returns a copy of this position transformed by a move operation.\n     *\n     * @internal\n     */\n    _getTransformedByMoveOperation(operation) {\n        return this._getTransformedByMove(operation.sourcePosition, operation.targetPosition, operation.howMany);\n    }\n    /**\n     * Returns a copy of this position transformed by a split operation.\n     *\n     * @internal\n     */\n    _getTransformedBySplitOperation(operation) {\n        const movedRange = operation.movedRange;\n        const isContained = movedRange.containsPosition(this) ||\n            (movedRange.start.isEqual(this) && this.stickiness == 'toNext');\n        if (isContained) {\n            return this._getCombined(operation.splitPosition, operation.moveTargetPosition);\n        }\n        else {\n            if (operation.graveyardPosition) {\n                return this._getTransformedByMove(operation.graveyardPosition, operation.insertionPosition, 1);\n            }\n            else {\n                return this._getTransformedByInsertion(operation.insertionPosition, 1);\n            }\n        }\n    }\n    /**\n     * Returns a copy of this position transformed by merge operation.\n     *\n     * @internal\n     */\n    _getTransformedByMergeOperation(operation) {\n        const movedRange = operation.movedRange;\n        const isContained = movedRange.containsPosition(this) || movedRange.start.isEqual(this);\n        let pos;\n        if (isContained) {\n            pos = this._getCombined(operation.sourcePosition, operation.targetPosition);\n            if (operation.sourcePosition.isBefore(operation.targetPosition)) {\n                // Above happens during OT when the merged element is moved before the merged-to element.\n                pos = pos._getTransformedByDeletion(operation.deletionPosition, 1);\n            }\n        }\n        else if (this.isEqual(operation.deletionPosition)) {\n            pos = Position._createAt(operation.deletionPosition);\n        }\n        else {\n            pos = this._getTransformedByMove(operation.deletionPosition, operation.graveyardPosition, 1);\n        }\n        return pos;\n    }\n    /**\n     * Returns a copy of this position that is updated by removing `howMany` nodes starting from `deletePosition`.\n     * It may happen that this position is in a removed node. If that is the case, `null` is returned instead.\n     *\n     * @internal\n     * @param deletePosition Position before the first removed node.\n     * @param howMany How many nodes are removed.\n     * @returns Transformed position or `null`.\n     */\n    _getTransformedByDeletion(deletePosition, howMany) {\n        const transformed = Position._createAt(this);\n        // This position can't be affected if deletion was in a different root.\n        if (this.root != deletePosition.root) {\n            return transformed;\n        }\n        if (compareArrays(deletePosition.getParentPath(), this.getParentPath()) == 'same') {\n            // If nodes are removed from the node that is pointed by this position...\n            if (deletePosition.offset < this.offset) {\n                // And are removed from before an offset of that position...\n                if (deletePosition.offset + howMany > this.offset) {\n                    // Position is in removed range, it's no longer in the tree.\n                    return null;\n                }\n                else {\n                    // Decrement the offset accordingly.\n                    transformed.offset -= howMany;\n                }\n            }\n        }\n        else if (compareArrays(deletePosition.getParentPath(), this.getParentPath()) == 'prefix') {\n            // If nodes are removed from a node that is on a path to this position...\n            const i = deletePosition.path.length - 1;\n            if (deletePosition.offset <= this.path[i]) {\n                // And are removed from before next node of that path...\n                if (deletePosition.offset + howMany > this.path[i]) {\n                    // If the next node of that path is removed return null\n                    // because the node containing this position got removed.\n                    return null;\n                }\n                else {\n                    // Otherwise, decrement index on that path.\n                    transformed.path[i] -= howMany;\n                }\n            }\n        }\n        return transformed;\n    }\n    /**\n     * Returns a copy of this position that is updated by inserting `howMany` nodes at `insertPosition`.\n     *\n     * @internal\n     * @param insertPosition Position where nodes are inserted.\n     * @param howMany How many nodes are inserted.\n     * @returns Transformed position.\n     */\n    _getTransformedByInsertion(insertPosition, howMany) {\n        const transformed = Position._createAt(this);\n        // This position can't be affected if insertion was in a different root.\n        if (this.root != insertPosition.root) {\n            return transformed;\n        }\n        if (compareArrays(insertPosition.getParentPath(), this.getParentPath()) == 'same') {\n            // If nodes are inserted in the node that is pointed by this position...\n            if (insertPosition.offset < this.offset || (insertPosition.offset == this.offset && this.stickiness != 'toPrevious')) {\n                // And are inserted before an offset of that position...\n                // \"Push\" this positions offset.\n                transformed.offset += howMany;\n            }\n        }\n        else if (compareArrays(insertPosition.getParentPath(), this.getParentPath()) == 'prefix') {\n            // If nodes are inserted in a node that is on a path to this position...\n            const i = insertPosition.path.length - 1;\n            if (insertPosition.offset <= this.path[i]) {\n                // And are inserted before next node of that path...\n                // \"Push\" the index on that path.\n                transformed.path[i] += howMany;\n            }\n        }\n        return transformed;\n    }\n    /**\n     * Returns a copy of this position that is updated by moving `howMany` nodes from `sourcePosition` to `targetPosition`.\n     *\n     * @internal\n     * @param sourcePosition Position before the first element to move.\n     * @param targetPosition Position where moved elements will be inserted.\n     * @param howMany How many consecutive nodes to move, starting from `sourcePosition`.\n     * @returns Transformed position.\n     */\n    _getTransformedByMove(sourcePosition, targetPosition, howMany) {\n        // Update target position, as it could be affected by nodes removal.\n        targetPosition = targetPosition._getTransformedByDeletion(sourcePosition, howMany);\n        if (sourcePosition.isEqual(targetPosition)) {\n            // If `targetPosition` is equal to `sourcePosition` this isn't really any move. Just return position as it is.\n            return Position._createAt(this);\n        }\n        // Moving a range removes nodes from their original position. We acknowledge this by proper transformation.\n        const transformed = this._getTransformedByDeletion(sourcePosition, howMany);\n        const isMoved = transformed === null ||\n            (sourcePosition.isEqual(this) && this.stickiness == 'toNext') ||\n            (sourcePosition.getShiftedBy(howMany).isEqual(this) && this.stickiness == 'toPrevious');\n        if (isMoved) {\n            // This position is inside moved range (or sticks to it).\n            // In this case, we calculate a combination of this position, move source position and target position.\n            return this._getCombined(sourcePosition, targetPosition);\n        }\n        else {\n            // This position is not inside a removed range.\n            //\n            // In next step, we simply reflect inserting `howMany` nodes, which might further affect the position.\n            return transformed._getTransformedByInsertion(targetPosition, howMany);\n        }\n    }\n    /**\n     * Returns a new position that is a combination of this position and given positions.\n     *\n     * The combined position is a copy of this position transformed by moving a range starting at `source` position\n     * to the `target` position. It is expected that this position is inside the moved range.\n     *\n     * Example:\n     *\n     * ```ts\n     * let original = model.createPositionFromPath( root, [ 2, 3, 1 ] );\n     * let source = model.createPositionFromPath( root, [ 2, 2 ] );\n     * let target = model.createPositionFromPath( otherRoot, [ 1, 1, 3 ] );\n     * original._getCombined( source, target ); // path is [ 1, 1, 4, 1 ], root is `otherRoot`\n     * ```\n     *\n     * Explanation:\n     *\n     * We have a position `[ 2, 3, 1 ]` and move some nodes from `[ 2, 2 ]` to `[ 1, 1, 3 ]`. The original position\n     * was inside moved nodes and now should point to the new place. The moved nodes will be after\n     * positions `[ 1, 1, 3 ]`, `[ 1, 1, 4 ]`, `[ 1, 1, 5 ]`. Since our position was in the second moved node,\n     * the transformed position will be in a sub-tree of a node at `[ 1, 1, 4 ]`. Looking at original path, we\n     * took care of `[ 2, 3 ]` part of it. Now we have to add the rest of the original path to the transformed path.\n     * Finally, the transformed position will point to `[ 1, 1, 4, 1 ]`.\n     *\n     * @internal\n     * @param source Beginning of the moved range.\n     * @param target Position where the range is moved.\n     * @returns Combined position.\n     */\n    _getCombined(source, target) {\n        const i = source.path.length - 1;\n        // The first part of a path to combined position is a path to the place where nodes were moved.\n        const combined = Position._createAt(target);\n        combined.stickiness = this.stickiness;\n        // Then we have to update the rest of the path.\n        // Fix the offset because this position might be after `from` position and we have to reflect that.\n        combined.offset = combined.offset + this.path[i] - source.offset;\n        // Then, add the rest of the path.\n        // If this position is at the same level as `from` position nothing will get added.\n        combined.path = [...combined.path, ...this.path.slice(i + 1)];\n        return combined;\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        return {\n            root: this.root.toJSON(),\n            path: Array.from(this.path),\n            stickiness: this.stickiness\n        };\n    }\n    /**\n     * Returns a new position that is equal to current position.\n     */\n    clone() {\n        return new this.constructor(this.root, this.path, this.stickiness);\n    }\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/model/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/model/item~Item model item} and `'before'` or `'after'` (sets position before or after given model item).\n     *\n     * This method is a shortcut to other factory methods such as:\n     *\n     * * {@link module:engine/model/position~Position._createBefore},\n     * * {@link module:engine/model/position~Position._createAfter}.\n     *\n     * @internal\n     * @param offset Offset or one of the flags. Used only when the first parameter is a {@link module:engine/model/item~Item model item}.\n     * @param stickiness Position stickiness. Used only when the first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    static _createAt(itemOrPosition, offset, stickiness = 'toNone') {\n        if (itemOrPosition instanceof Position) {\n            return new Position(itemOrPosition.root, itemOrPosition.path, itemOrPosition.stickiness);\n        }\n        else {\n            const node = itemOrPosition;\n            if (offset == 'end') {\n                offset = node.maxOffset;\n            }\n            else if (offset == 'before') {\n                return this._createBefore(node, stickiness);\n            }\n            else if (offset == 'after') {\n                return this._createAfter(node, stickiness);\n            }\n            else if (offset !== 0 && !offset) {\n                /**\n                 * {@link module:engine/model/model~Model#createPositionAt `Model#createPositionAt()`}\n                 * requires the offset to be specified when the first parameter is a model item.\n                 *\n                 * @error model-createpositionat-offset-required\n                 */\n                throw new CKEditorError('model-createpositionat-offset-required', [this, itemOrPosition]);\n            }\n            if (!node.is('element') && !node.is('documentFragment')) {\n                /**\n                 * Position parent have to be a model element or model document fragment.\n                 *\n                 * @error model-position-parent-incorrect\n                 */\n                throw new CKEditorError('model-position-parent-incorrect', [this, itemOrPosition]);\n            }\n            const path = node.getPath();\n            path.push(offset);\n            return new this(node.root, path, stickiness);\n        }\n    }\n    /**\n     * Creates a new position, after given {@link module:engine/model/item~Item model item}.\n     *\n     * @internal\n     * @param item Item after which the position should be placed.\n     * @param stickiness Position stickiness.\n     */\n    static _createAfter(item, stickiness) {\n        if (!item.parent) {\n            /**\n             * You can not make a position after a root element.\n             *\n             * @error model-position-after-root\n             * @param root\n             */\n            throw new CKEditorError('model-position-after-root', [this, item], { root: item });\n        }\n        return this._createAt(item.parent, item.endOffset, stickiness);\n    }\n    /**\n     * Creates a new position, before the given {@link module:engine/model/item~Item model item}.\n     *\n     * @internal\n     * @param item Item before which the position should be placed.\n     * @param stickiness Position stickiness.\n     */\n    static _createBefore(item, stickiness) {\n        if (!item.parent) {\n            /**\n             * You can not make a position before a root element.\n             *\n             * @error model-position-before-root\n             * @param root\n             */\n            throw new CKEditorError('model-position-before-root', item, { root: item });\n        }\n        return this._createAt(item.parent, item.startOffset, stickiness);\n    }\n    /**\n     * Creates a `Position` instance from given plain object (i.e. parsed JSON string).\n     *\n     * @param json Plain object to be converted to `Position`.\n     * @param doc Document object that will be position owner.\n     * @returns `Position` instance created using given plain object.\n     */\n    static fromJSON(json, doc) {\n        if (json.root === '$graveyard') {\n            const pos = new Position(doc.graveyard, json.path);\n            pos.stickiness = json.stickiness;\n            return pos;\n        }\n        if (!doc.getRoot(json.root)) {\n            /**\n             * Cannot create position for document. Root with specified name does not exist.\n             *\n             * @error model-position-fromjson-no-root\n             * @param rootName\n             */\n            throw new CKEditorError('model-position-fromjson-no-root', doc, { rootName: json.root });\n        }\n        return new Position(doc.getRoot(json.root), json.path, json.stickiness);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nPosition.prototype.is = function (type) {\n    return type === 'position' || type === 'model:position';\n};\n/**\n * Returns a text node at the given position.\n *\n * This is a helper function optimized to reuse the position parent instance for performance reasons.\n *\n * Normally, you should use {@link module:engine/model/position~Position#textNode `Position#textNode`}.\n * If you start hitting performance issues with {@link module:engine/model/position~Position#parent `Position#parent`}\n * check if your algorithm does not access it multiple times (which can happen directly or indirectly via other position properties).\n *\n * See https://github.com/ckeditor/ckeditor5/issues/6579.\n *\n * See also:\n *\n * * {@link module:engine/model/position~getNodeAfterPosition}\n * * {@link module:engine/model/position~getNodeBeforePosition}\n *\n * @param position\n * @param positionParent The parent of the given position.\n */\nexport function getTextNodeAtPosition(position, positionParent) {\n    const node = positionParent.getChildAtOffset(position.offset);\n    if (node && node.is('$text') && node.startOffset < position.offset) {\n        return node;\n    }\n    return null;\n}\n/**\n * Returns the node after the given position.\n *\n * This is a helper function optimized to reuse the position parent instance and the calculation of the text node at the\n * specific position for performance reasons.\n *\n * Normally, you should use {@link module:engine/model/position~Position#nodeAfter `Position#nodeAfter`}.\n * If you start hitting performance issues with {@link module:engine/model/position~Position#parent `Position#parent`} and/or\n * {@link module:engine/model/position~Position#textNode `Position#textNode`}\n * check if your algorithm does not access those properties multiple times\n * (which can happen directly or indirectly via other position properties).\n *\n * See https://github.com/ckeditor/ckeditor5/issues/6579 and https://github.com/ckeditor/ckeditor5/issues/6582.\n *\n * See also:\n *\n * * {@link module:engine/model/position~getTextNodeAtPosition}\n * * {@link module:engine/model/position~getNodeBeforePosition}\n *\n * @param position Position to check.\n * @param positionParent The parent of the given position.\n * @param textNode Text node at the given position.\n */\nexport function getNodeAfterPosition(position, positionParent, textNode) {\n    if (textNode !== null) {\n        return null;\n    }\n    return positionParent.getChildAtOffset(position.offset);\n}\n/**\n * Returns the node before the given position.\n *\n * Refer to {@link module:engine/model/position~getNodeBeforePosition} for documentation on when to use this util method.\n *\n * See also:\n *\n * * {@link module:engine/model/position~getTextNodeAtPosition}\n * * {@link module:engine/model/position~getNodeAfterPosition}\n *\n * @param position Position to check.\n * @param positionParent The parent of the given position.\n * @param textNode Text node at the given position.\n */\nexport function getNodeBeforePosition(position, positionParent, textNode) {\n    if (textNode !== null) {\n        return null;\n    }\n    return positionParent.getChild(positionParent.offsetToIndex(position.offset) - 1);\n}\n/**\n * This is a helper function for `Position#isTouching()`.\n *\n * It checks whether to given positions are touching, considering that they have the same root and paths\n * until given level, and at given level they differ by 1 (so they are branching at `level` point).\n *\n * The exact requirements for touching positions are described in `Position#isTouching()` and also\n * in the body of this function.\n *\n * @param left Position \"on the left\" (it is before `right`).\n * @param right Position \"on the right\" (it is after `left`).\n * @param level Level on which the positions are different.\n */\nfunction checkTouchingBranch(left, right, level) {\n    if (level + 1 === left.path.length) {\n        // Left position does not have any more entries after the point where the positions differ.\n        // [ 2 ] vs [ 3 ]\n        // [ 2 ] vs [ 3, 0, 0 ]\n        // The positions are spread by node at [ 2 ].\n        return false;\n    }\n    if (!checkOnlyZeroes(right.path, level + 1)) {\n        // Right position does not have only zeroes, so we have situation like:\n        // [ 2, maxOffset ] vs [ 3, 1 ]\n        // [ 2, maxOffset ] vs [ 3, 1, 0, 0 ]\n        // The positions are spread by node at [ 3, 0 ].\n        return false;\n    }\n    if (!checkOnlyMaxOffset(left, level + 1)) {\n        // Left position does not have only max offsets, so we have situation like:\n        // [ 2, 4 ] vs [ 3 ]\n        // [ 2, 4 ] vs [ 3, 0, 0 ]\n        // The positions are spread by node at [ 2, 5 ].\n        return false;\n    }\n    // Left position has only max offsets and right position has only zeroes or nothing.\n    // [ 2, maxOffset ] vs [ 3 ]\n    // [ 2, maxOffset, maxOffset ] vs [ 3, 0 ]\n    // There are not elements between positions. The positions are touching.\n    return true;\n}\n/**\n * Checks whether for given array, starting from given index until the end of the array, all items are `0`s.\n *\n * This is a helper function for `Position#isTouching()`.\n */\nfunction checkOnlyZeroes(arr, idx) {\n    while (idx < arr.length) {\n        if (arr[idx] !== 0) {\n            return false;\n        }\n        idx++;\n    }\n    return true;\n}\n/**\n * Checks whether for given position, starting from given path level, whether the position is at the end of\n * its parent and whether each element on the path to the position is also at at the end of its parent.\n *\n * This is a helper function for `Position#isTouching()`.\n */\nfunction checkOnlyMaxOffset(pos, level) {\n    let parent = pos.parent;\n    let idx = pos.path.length - 1;\n    let add = 0;\n    while (idx >= level) {\n        if (pos.path[idx] + add !== parent.maxOffset) {\n            return false;\n        }\n        // After the first check, we \"go up\", and check whether the position's parent-parent is the last element.\n        // However, we need to add 1 to the value in the path to \"simulate\" moving the path after the parent.\n        // It happens just once.\n        add = 1;\n        idx--;\n        parent = parent.parent;\n    }\n    return true;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/range\n */\nimport TypeCheckable from './typecheckable.js';\nimport Position from './position.js';\nimport TreeWalker from './treewalker.js';\nimport { CKEditorError, compareArrays } from '@ckeditor/ckeditor5-utils';\n/**\n * Represents a range in the model tree.\n *\n * A range is defined by its {@link module:engine/model/range~Range#start} and {@link module:engine/model/range~Range#end}\n * positions.\n *\n * You can create range instances via its constructor or the `createRange*()` factory methods of\n * {@link module:engine/model/model~Model} and {@link module:engine/model/writer~Writer}.\n */\nexport default class Range extends TypeCheckable {\n    /**\n     * Creates a range spanning from `start` position to `end` position.\n     *\n     * @param start The start position.\n     * @param end The end position. If not set, the range will be collapsed at the `start` position.\n     */\n    constructor(start, end) {\n        super();\n        this.start = Position._createAt(start);\n        this.end = end ? Position._createAt(end) : Position._createAt(start);\n        // If the range is collapsed, treat in a similar way as a position and set its boundaries stickiness to 'toNone'.\n        // In other case, make the boundaries stick to the \"inside\" of the range.\n        this.start.stickiness = this.isCollapsed ? 'toNone' : 'toNext';\n        this.end.stickiness = this.isCollapsed ? 'toNone' : 'toPrevious';\n    }\n    /**\n     * Iterable interface.\n     *\n     * Iterates over all {@link module:engine/model/item~Item items} that are in this range and returns\n     * them together with additional information like length or {@link module:engine/model/position~Position positions},\n     * grouped as {@link module:engine/model/treewalker~TreeWalkerValue}.\n     * It iterates over all {@link module:engine/model/textproxy~TextProxy text contents} that are inside the range\n     * and all the {@link module:engine/model/element~Element}s that are entered into when iterating over this range.\n     *\n     * This iterator uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range\n     * and `ignoreElementEnd` option set to `true`.\n     */\n    *[Symbol.iterator]() {\n        yield* new TreeWalker({ boundaries: this, ignoreElementEnd: true });\n    }\n    /**\n     * Describes whether the range is collapsed, that is if {@link #start} and\n     * {@link #end} positions are equal.\n     */\n    get isCollapsed() {\n        return this.start.isEqual(this.end);\n    }\n    /**\n     * Describes whether this range is flat, that is if {@link #start} position and\n     * {@link #end} position are in the same {@link module:engine/model/position~Position#parent}.\n     */\n    get isFlat() {\n        const startParentPath = this.start.getParentPath();\n        const endParentPath = this.end.getParentPath();\n        return compareArrays(startParentPath, endParentPath) == 'same';\n    }\n    /**\n     * Range root element.\n     */\n    get root() {\n        return this.start.root;\n    }\n    /**\n     * Checks whether this range contains given {@link module:engine/model/position~Position position}.\n     *\n     * @param position Position to check.\n     * @returns `true` if given {@link module:engine/model/position~Position position} is contained\n     * in this range,`false` otherwise.\n     */\n    containsPosition(position) {\n        return position.isAfter(this.start) && position.isBefore(this.end);\n    }\n    /**\n     * Checks whether this range contains given {@link ~Range range}.\n     *\n     * @param otherRange Range to check.\n     * @param loose Whether the check is loose or strict. If the check is strict (`false`), compared range cannot\n     * start or end at the same position as this range boundaries. If the check is loose (`true`), compared range can start, end or\n     * even be equal to this range. Note that collapsed ranges are always compared in strict mode.\n     * @returns {Boolean} `true` if given {@link ~Range range} boundaries are contained by this range, `false` otherwise.\n     */\n    containsRange(otherRange, loose = false) {\n        if (otherRange.isCollapsed) {\n            loose = false;\n        }\n        const containsStart = this.containsPosition(otherRange.start) || (loose && this.start.isEqual(otherRange.start));\n        const containsEnd = this.containsPosition(otherRange.end) || (loose && this.end.isEqual(otherRange.end));\n        return containsStart && containsEnd;\n    }\n    /**\n     * Checks whether given {@link module:engine/model/item~Item} is inside this range.\n     */\n    containsItem(item) {\n        const pos = Position._createBefore(item);\n        return this.containsPosition(pos) || this.start.isEqual(pos);\n    }\n    /**\n     * Two ranges are equal if their {@link #start} and {@link #end} positions are equal.\n     *\n     * @param otherRange Range to compare with.\n     * @returns `true` if ranges are equal, `false` otherwise.\n     */\n    isEqual(otherRange) {\n        return this.start.isEqual(otherRange.start) && this.end.isEqual(otherRange.end);\n    }\n    /**\n     * Checks and returns whether this range intersects with given range.\n     *\n     * @param otherRange Range to compare with.\n     * @returns `true` if ranges intersect, `false` otherwise.\n     */\n    isIntersecting(otherRange) {\n        return this.start.isBefore(otherRange.end) && this.end.isAfter(otherRange.start);\n    }\n    /**\n     * Computes which part(s) of this {@link ~Range range} is not a part of given {@link ~Range range}.\n     * Returned array contains zero, one or two {@link ~Range ranges}.\n     *\n     * Examples:\n     *\n     * ```ts\n     * let range = model.createRange(\n     * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n     * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n     * );\n     * let otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 5 ] ) );\n     * let transformed = range.getDifference( otherRange );\n     * // transformed array has no ranges because `otherRange` contains `range`\n     *\n     * otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 3 ] ) );\n     * transformed = range.getDifference( otherRange );\n     * // transformed array has one range: from [ 3 ] to [ 4, 0, 1 ]\n     *\n     * otherRange = model.createRange( model.createPositionFromPath( root, [ 3 ] ), model.createPositionFromPath( root, [ 4 ] ) );\n     * transformed = range.getDifference( otherRange );\n     * // transformed array has two ranges: from [ 2, 7 ] to [ 3 ] and from [ 4 ] to [ 4, 0, 1 ]\n     * ```\n     *\n     * @param otherRange Range to differentiate against.\n     * @returns The difference between ranges.\n     */\n    getDifference(otherRange) {\n        const ranges = [];\n        if (this.isIntersecting(otherRange)) {\n            // Ranges intersect.\n            if (this.containsPosition(otherRange.start)) {\n                // Given range start is inside this range. This means that we have to\n                // add shrunken range - from the start to the middle of this range.\n                ranges.push(new Range(this.start, otherRange.start));\n            }\n            if (this.containsPosition(otherRange.end)) {\n                // Given range end is inside this range. This means that we have to\n                // add shrunken range - from the middle of this range to the end.\n                ranges.push(new Range(otherRange.end, this.end));\n            }\n        }\n        else {\n            // Ranges do not intersect, return the original range.\n            ranges.push(new Range(this.start, this.end));\n        }\n        return ranges;\n    }\n    /**\n     * Returns an intersection of this {@link ~Range range} and given {@link ~Range range}.\n     * Intersection is a common part of both of those ranges. If ranges has no common part, returns `null`.\n     *\n     * Examples:\n     *\n     * ```ts\n     * let range = model.createRange(\n     * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n     * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n     * );\n     * let otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 2 ] ) );\n     * let transformed = range.getIntersection( otherRange ); // null - ranges have no common part\n     *\n     * otherRange = model.createRange( model.createPositionFromPath( root, [ 3 ] ), model.createPositionFromPath( root, [ 5 ] ) );\n     * transformed = range.getIntersection( otherRange ); // range from [ 3 ] to [ 4, 0, 1 ]\n     * ```\n     *\n     * @param otherRange Range to check for intersection.\n     * @returns A common part of given ranges or `null` if ranges have no common part.\n     */\n    getIntersection(otherRange) {\n        if (this.isIntersecting(otherRange)) {\n            // Ranges intersect, so a common range will be returned.\n            // At most, it will be same as this range.\n            let commonRangeStart = this.start;\n            let commonRangeEnd = this.end;\n            if (this.containsPosition(otherRange.start)) {\n                // Given range start is inside this range. This means thaNt we have to\n                // shrink common range to the given range start.\n                commonRangeStart = otherRange.start;\n            }\n            if (this.containsPosition(otherRange.end)) {\n                // Given range end is inside this range. This means that we have to\n                // shrink common range to the given range end.\n                commonRangeEnd = otherRange.end;\n            }\n            return new Range(commonRangeStart, commonRangeEnd);\n        }\n        // Ranges do not intersect, so they do not have common part.\n        return null;\n    }\n    /**\n     * Returns a range created by joining this {@link ~Range range} with the given {@link ~Range range}.\n     * If ranges have no common part, returns `null`.\n     *\n     * Examples:\n     *\n     * ```ts\n     * let range = model.createRange(\n     * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n     * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n     * );\n     * let otherRange = model.createRange(\n     * \tmodel.createPositionFromPath( root, [ 1 ] ),\n     * \tmodel.createPositionFromPath( root, [ 2 ] )\n     * );\n     * let transformed = range.getJoined( otherRange ); // null - ranges have no common part\n     *\n     * otherRange = model.createRange(\n     * \tmodel.createPositionFromPath( root, [ 3 ] ),\n     * \tmodel.createPositionFromPath( root, [ 5 ] )\n     * );\n     * transformed = range.getJoined( otherRange ); // range from [ 2, 7 ] to [ 5 ]\n     * ```\n     *\n     * @param otherRange Range to be joined.\n     * @param loose Whether the intersection check is loose or strict. If the check is strict (`false`),\n     * ranges are tested for intersection or whether start/end positions are equal. If the check is loose (`true`),\n     * compared range is also checked if it's {@link module:engine/model/position~Position#isTouching touching} current range.\n     * @returns A sum of given ranges or `null` if ranges have no common part.\n     */\n    getJoined(otherRange, loose = false) {\n        let shouldJoin = this.isIntersecting(otherRange);\n        if (!shouldJoin) {\n            if (this.start.isBefore(otherRange.start)) {\n                shouldJoin = loose ? this.end.isTouching(otherRange.start) : this.end.isEqual(otherRange.start);\n            }\n            else {\n                shouldJoin = loose ? otherRange.end.isTouching(this.start) : otherRange.end.isEqual(this.start);\n            }\n        }\n        if (!shouldJoin) {\n            return null;\n        }\n        let startPosition = this.start;\n        let endPosition = this.end;\n        if (otherRange.start.isBefore(startPosition)) {\n            startPosition = otherRange.start;\n        }\n        if (otherRange.end.isAfter(endPosition)) {\n            endPosition = otherRange.end;\n        }\n        return new Range(startPosition, endPosition);\n    }\n    /**\n     * Computes and returns the smallest set of {@link #isFlat flat} ranges, that covers this range in whole.\n     *\n     * See an example of a model structure (`[` and `]` are range boundaries):\n     *\n     * ```\n     * root                                                            root\n     *  |- element DIV                         DIV             P2              P3             DIV\n     *  |   |- element H                   H        P1        f o o           b a r       H         P4\n     *  |   |   |- \"fir[st\"             fir[st     lorem                               se]cond     ipsum\n     *  |   |- element P1\n     *  |   |   |- \"lorem\"                                              ||\n     *  |- element P2                                                   ||\n     *  |   |- \"foo\"                                                    VV\n     *  |- element P3\n     *  |   |- \"bar\"                                                   root\n     *  |- element DIV                         DIV             [P2             P3]             DIV\n     *  |   |- element H                   H       [P1]       f o o           b a r        H         P4\n     *  |   |   |- \"se]cond\"            fir[st]    lorem                               [se]cond     ipsum\n     *  |   |- element P4\n     *  |   |   |- \"ipsum\"\n     * ```\n     *\n     * As it can be seen, letters contained in the range are: `stloremfoobarse`, spread across different parents.\n     * We are looking for minimal set of flat ranges that contains the same nodes.\n     *\n     * Minimal flat ranges for above range `( [ 0, 0, 3 ], [ 3, 0, 2 ] )` will be:\n     *\n     * ```\n     * ( [ 0, 0, 3 ], [ 0, 0, 5 ] ) = \"st\"\n     * ( [ 0, 1 ], [ 0, 2 ] ) = element P1 (\"lorem\")\n     * ( [ 1 ], [ 3 ] ) = element P2, element P3 (\"foobar\")\n     * ( [ 3, 0, 0 ], [ 3, 0, 2 ] ) = \"se\"\n     * ```\n     *\n     * **Note:** if an {@link module:engine/model/element~Element element} is not wholly contained in this range, it won't be returned\n     * in any of the returned flat ranges. See in the example how `H` elements at the beginning and at the end of the range\n     * were omitted. Only their parts that were wholly in the range were returned.\n     *\n     * **Note:** this method is not returning flat ranges that contain no nodes.\n     *\n     * @returns Array of flat ranges covering this range.\n     */\n    getMinimalFlatRanges() {\n        const ranges = [];\n        const diffAt = this.start.getCommonPath(this.end).length;\n        const pos = Position._createAt(this.start);\n        let posParent = pos.parent;\n        // Go up.\n        while (pos.path.length > diffAt + 1) {\n            const howMany = posParent.maxOffset - pos.offset;\n            if (howMany !== 0) {\n                ranges.push(new Range(pos, pos.getShiftedBy(howMany)));\n            }\n            pos.path = pos.path.slice(0, -1);\n            pos.offset++;\n            posParent = posParent.parent;\n        }\n        // Go down.\n        while (pos.path.length <= this.end.path.length) {\n            const offset = this.end.path[pos.path.length - 1];\n            const howMany = offset - pos.offset;\n            if (howMany !== 0) {\n                ranges.push(new Range(pos, pos.getShiftedBy(howMany)));\n            }\n            pos.offset = offset;\n            pos.path.push(0);\n        }\n        return ranges;\n    }\n    /**\n     * Creates a {@link module:engine/model/treewalker~TreeWalker TreeWalker} instance with this range as a boundary.\n     *\n     * For example, to iterate over all items in the entire document root:\n     *\n     * ```ts\n     * // Create a range spanning over the entire root content:\n     * const range = editor.model.createRangeIn( editor.model.document.getRoot() );\n     *\n     * // Iterate over all items in this range:\n     * for ( const value of range.getWalker() ) {\n     * \tconsole.log( value.item );\n     * }\n     * ```\n     *\n     * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     */\n    getWalker(options = {}) {\n        options.boundaries = this;\n        return new TreeWalker(options);\n    }\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/model/item~Item items} that are in this range and returns\n     * them.\n     *\n     * This method uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range and `ignoreElementEnd` option\n     * set to `true`. However it returns only {@link module:engine/model/item~Item model items},\n     * not {@link module:engine/model/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/model/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     */\n    *getItems(options = {}) {\n        options.boundaries = this;\n        options.ignoreElementEnd = true;\n        const treeWalker = new TreeWalker(options);\n        for (const value of treeWalker) {\n            yield value.item;\n        }\n    }\n    /**\n     * Returns an iterator that iterates over all {@link module:engine/model/position~Position positions} that are boundaries or\n     * contained in this range.\n     *\n     * This method uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range. However it returns only\n     * {@link module:engine/model/position~Position positions}, not {@link module:engine/model/treewalker~TreeWalkerValue}.\n     *\n     * You may specify additional options for the tree walker. See {@link module:engine/model/treewalker~TreeWalker} for\n     * a full list of available options.\n     *\n     * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n     */\n    *getPositions(options = {}) {\n        options.boundaries = this;\n        const treeWalker = new TreeWalker(options);\n        yield treeWalker.position;\n        for (const value of treeWalker) {\n            yield value.nextPosition;\n        }\n    }\n    /**\n     * Returns a range that is a result of transforming this range by given `operation`.\n     *\n     * **Note:** transformation may break one range into multiple ranges (for example, when a part of the range is\n     * moved to a different part of document tree). For this reason, an array is returned by this method and it\n     * may contain one or more `Range` instances.\n     *\n     * @param operation Operation to transform range by.\n     * @returns Range which is the result of transformation.\n     */\n    getTransformedByOperation(operation) {\n        switch (operation.type) {\n            case 'insert':\n                return this._getTransformedByInsertOperation(operation);\n            case 'move':\n            case 'remove':\n            case 'reinsert':\n                return this._getTransformedByMoveOperation(operation);\n            case 'split':\n                return [this._getTransformedBySplitOperation(operation)];\n            case 'merge':\n                return [this._getTransformedByMergeOperation(operation)];\n        }\n        return [new Range(this.start, this.end)];\n    }\n    /**\n     * Returns a range that is a result of transforming this range by multiple `operations`.\n     *\n     * @see ~Range#getTransformedByOperation\n     * @param operations Operations to transform the range by.\n     * @returns Range which is the result of transformation.\n     */\n    getTransformedByOperations(operations) {\n        const ranges = [new Range(this.start, this.end)];\n        for (const operation of operations) {\n            for (let i = 0; i < ranges.length; i++) {\n                const result = ranges[i].getTransformedByOperation(operation);\n                ranges.splice(i, 1, ...result);\n                i += result.length - 1;\n            }\n        }\n        // It may happen that a range is split into two, and then the part of second \"piece\" is moved into first\n        // \"piece\". In this case we will have incorrect third range, which should not be included in the result --\n        // because it is already included in the first \"piece\". In this loop we are looking for all such ranges that\n        // are inside other ranges and we simply remove them.\n        for (let i = 0; i < ranges.length; i++) {\n            const range = ranges[i];\n            for (let j = i + 1; j < ranges.length; j++) {\n                const next = ranges[j];\n                if (range.containsRange(next) || next.containsRange(range) || range.isEqual(next)) {\n                    ranges.splice(j, 1);\n                }\n            }\n        }\n        return ranges;\n    }\n    /**\n     * Returns an {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n     * which is a common ancestor of the range's both ends (in which the entire range is contained).\n     */\n    getCommonAncestor() {\n        return this.start.getCommonAncestor(this.end);\n    }\n    /**\n     * Returns an {@link module:engine/model/element~Element Element} contained by the range.\n     * The element will be returned when it is the **only** node within the range and **fully–contained**\n     * at the same time.\n     */\n    getContainedElement() {\n        if (this.isCollapsed) {\n            return null;\n        }\n        const nodeAfterStart = this.start.nodeAfter;\n        const nodeBeforeEnd = this.end.nodeBefore;\n        if (nodeAfterStart && nodeAfterStart.is('element') && nodeAfterStart === nodeBeforeEnd) {\n            return nodeAfterStart;\n        }\n        return null;\n    }\n    /**\n     * Converts `Range` to plain object and returns it.\n     *\n     * @returns `Node` converted to plain object.\n     */\n    toJSON() {\n        return {\n            start: this.start.toJSON(),\n            end: this.end.toJSON()\n        };\n    }\n    /**\n     * Returns a new range that is equal to current range.\n     */\n    clone() {\n        return new this.constructor(this.start, this.end);\n    }\n    /**\n     * Returns a result of transforming a copy of this range by insert operation.\n     *\n     * One or more ranges may be returned as a result of this transformation.\n     *\n     * @internal\n     */\n    _getTransformedByInsertOperation(operation, spread = false) {\n        return this._getTransformedByInsertion(operation.position, operation.howMany, spread);\n    }\n    /**\n     * Returns a result of transforming a copy of this range by move operation.\n     *\n     * One or more ranges may be returned as a result of this transformation.\n     *\n     * @internal\n     */\n    _getTransformedByMoveOperation(operation, spread = false) {\n        const sourcePosition = operation.sourcePosition;\n        const howMany = operation.howMany;\n        const targetPosition = operation.targetPosition;\n        return this._getTransformedByMove(sourcePosition, targetPosition, howMany, spread);\n    }\n    /**\n     * Returns a result of transforming a copy of this range by split operation.\n     *\n     * Always one range is returned. The transformation is done in a way to not break the range.\n     *\n     * @internal\n     */\n    _getTransformedBySplitOperation(operation) {\n        const start = this.start._getTransformedBySplitOperation(operation);\n        let end = this.end._getTransformedBySplitOperation(operation);\n        if (this.end.isEqual(operation.insertionPosition)) {\n            end = this.end.getShiftedBy(1);\n        }\n        // Below may happen when range contains graveyard element used by split operation.\n        if (start.root != end.root) {\n            // End position was next to the moved graveyard element and was moved with it.\n            // Fix it by using old `end` which has proper `root`.\n            end = this.end.getShiftedBy(-1);\n        }\n        return new Range(start, end);\n    }\n    /**\n     * Returns a result of transforming a copy of this range by merge operation.\n     *\n     * Always one range is returned. The transformation is done in a way to not break the range.\n     *\n     * @internal\n     */\n    _getTransformedByMergeOperation(operation) {\n        // Special case when the marker is set on \"the closing tag\" of an element. Marker can be set like that during\n        // transformations, especially when a content of a few block elements were removed. For example:\n        //\n        // {} is the transformed range, [] is the removed range.\n        // <p>F[o{o</p><p>B}ar</p><p>Xy]z</p>\n        //\n        // <p>Fo{o</p><p>B}ar</p><p>z</p>\n        // <p>F{</p><p>B}ar</p><p>z</p>\n        // <p>F{</p>}<p>z</p>\n        // <p>F{}z</p>\n        //\n        if (this.start.isEqual(operation.targetPosition) && this.end.isEqual(operation.deletionPosition)) {\n            return new Range(this.start);\n        }\n        let start = this.start._getTransformedByMergeOperation(operation);\n        let end = this.end._getTransformedByMergeOperation(operation);\n        if (start.root != end.root) {\n            // This happens when the end position was next to the merged (deleted) element.\n            // Then, the end position was moved to the graveyard root. In this case we need to fix\n            // the range cause its boundaries would be in different roots.\n            end = this.end.getShiftedBy(-1);\n        }\n        if (start.isAfter(end)) {\n            // This happens in three following cases:\n            //\n            // Case 1: Merge operation source position is before the target position (due to some transformations, OT, etc.)\n            //         This means that start can be moved before the end of the range.\n            //\n            // Before: <p>a{a</p><p>b}b</p><p>cc</p>\n            // Merge:  <p>b}b</p><p>cca{a</p>\n            // Fix:    <p>{b}b</p><p>ccaa</p>\n            //\n            // Case 2: Range start is before merged node but not directly.\n            //         Result should include all nodes that were in the original range.\n            //\n            // Before: <p>aa</p>{<p>cc</p><p>b}b</p>\n            // Merge:  <p>aab}b</p>{<p>cc</p>\n            // Fix:    <p>aa{bb</p><p>cc</p>}\n            //\n            //         The range is expanded by an additional `b` letter but it is better than dropping the whole `cc` paragraph.\n            //\n            // Case 3: Range start is directly before merged node.\n            //         Resulting range should include only nodes from the merged element:\n            //\n            // Before: <p>aa</p>{<p>b}b</p><p>cc</p>\n            // Merge:  <p>aab}b</p>{<p>cc</p>\n            // Fix:    <p>aa{b}b</p><p>cc</p>\n            //\n            if (operation.sourcePosition.isBefore(operation.targetPosition)) {\n                // Case 1.\n                start = Position._createAt(end);\n                start.offset = 0;\n            }\n            else {\n                if (!operation.deletionPosition.isEqual(start)) {\n                    // Case 2.\n                    end = operation.deletionPosition;\n                }\n                // In both case 2 and 3 start is at the end of the merge-to element.\n                start = operation.targetPosition;\n            }\n            return new Range(start, end);\n        }\n        return new Range(start, end);\n    }\n    /**\n     * Returns an array containing one or two {@link ~Range ranges} that are a result of transforming this\n     * {@link ~Range range} by inserting `howMany` nodes at `insertPosition`. Two {@link ~Range ranges} are\n     * returned if the insertion was inside this {@link ~Range range} and `spread` is set to `true`.\n     *\n     * Examples:\n     *\n     * ```ts\n     * let range = model.createRange(\n     * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n     * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n     * );\n     * let transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 1 ] ), 2 );\n     * // transformed array has one range from [ 4, 7 ] to [ 6, 0, 1 ]\n     *\n     * transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 4, 0, 0 ] ), 4 );\n     * // transformed array has one range from [ 2, 7 ] to [ 4, 0, 5 ]\n     *\n     * transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 3, 2 ] ), 4 );\n     * // transformed array has one range, which is equal to original range\n     *\n     * transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 3, 2 ] ), 4, true );\n     * // transformed array has two ranges: from [ 2, 7 ] to [ 3, 2 ] and from [ 3, 6 ] to [ 4, 0, 1 ]\n     * ```\n     *\n     * @internal\n     * @param insertPosition Position where nodes are inserted.\n     * @param howMany How many nodes are inserted.\n     * @param spread Flag indicating whether this range should be spread if insertion\n     * was inside the range. Defaults to `false`.\n     * @returns Result of the transformation.\n     */\n    _getTransformedByInsertion(insertPosition, howMany, spread = false) {\n        if (spread && this.containsPosition(insertPosition)) {\n            // Range has to be spread. The first part is from original start to the spread point.\n            // The other part is from spread point to the original end, but transformed by\n            // insertion to reflect insertion changes.\n            return [\n                new Range(this.start, insertPosition),\n                new Range(insertPosition.getShiftedBy(howMany), this.end._getTransformedByInsertion(insertPosition, howMany))\n            ];\n        }\n        else {\n            const range = new Range(this.start, this.end);\n            range.start = range.start._getTransformedByInsertion(insertPosition, howMany);\n            range.end = range.end._getTransformedByInsertion(insertPosition, howMany);\n            return [range];\n        }\n    }\n    /**\n     * Returns an array containing {@link ~Range ranges} that are a result of transforming this\n     * {@link ~Range range} by moving `howMany` nodes from `sourcePosition` to `targetPosition`.\n     *\n     * @internal\n     * @param sourcePosition Position from which nodes are moved.\n     * @param targetPosition Position to where nodes are moved.\n     * @param howMany How many nodes are moved.\n     * @param spread Whether the range should be spread if the move points inside the range.\n     * @returns  Result of the transformation.\n     */\n    _getTransformedByMove(sourcePosition, targetPosition, howMany, spread = false) {\n        // Special case for transforming a collapsed range. Just transform it like a position.\n        if (this.isCollapsed) {\n            const newPos = this.start._getTransformedByMove(sourcePosition, targetPosition, howMany);\n            return [new Range(newPos)];\n        }\n        // Special case for transformation when a part of the range is moved towards the range.\n        //\n        // Examples:\n        //\n        // <div><p>ab</p><p>c[d</p></div><p>e]f</p> --> <div><p>ab</p></div><p>c[d</p><p>e]f</p>\n        // <p>e[f</p><div><p>a]b</p><p>cd</p></div> --> <p>e[f</p><p>a]b</p><div><p>cd</p></div>\n        //\n        // Without this special condition, the default algorithm leaves an \"artifact\" range from one of `differenceSet` parts:\n        //\n        // <div><p>ab</p><p>c[d</p></div><p>e]f</p> --> <div><p>ab</p>{</div>}<p>c[d</p><p>e]f</p>\n        //\n        // This special case is applied only if the range is to be kept together (not spread).\n        const moveRange = Range._createFromPositionAndShift(sourcePosition, howMany);\n        const insertPosition = targetPosition._getTransformedByDeletion(sourcePosition, howMany);\n        if (this.containsPosition(targetPosition) && !spread) {\n            if (moveRange.containsPosition(this.start) || moveRange.containsPosition(this.end)) {\n                const start = this.start._getTransformedByMove(sourcePosition, targetPosition, howMany);\n                const end = this.end._getTransformedByMove(sourcePosition, targetPosition, howMany);\n                return [new Range(start, end)];\n            }\n        }\n        // Default algorithm.\n        let result;\n        const differenceSet = this.getDifference(moveRange);\n        let difference = null;\n        const common = this.getIntersection(moveRange);\n        if (differenceSet.length == 1) {\n            // `moveRange` and this range may intersect but may be separate.\n            difference = new Range(differenceSet[0].start._getTransformedByDeletion(sourcePosition, howMany), differenceSet[0].end._getTransformedByDeletion(sourcePosition, howMany));\n        }\n        else if (differenceSet.length == 2) {\n            // `moveRange` is inside this range.\n            difference = new Range(this.start, this.end._getTransformedByDeletion(sourcePosition, howMany));\n        } // else, `moveRange` contains this range.\n        if (difference) {\n            result = difference._getTransformedByInsertion(insertPosition, howMany, common !== null || spread);\n        }\n        else {\n            result = [];\n        }\n        if (common) {\n            const transformedCommon = new Range(common.start._getCombined(moveRange.start, insertPosition), common.end._getCombined(moveRange.start, insertPosition));\n            if (result.length == 2) {\n                result.splice(1, 0, transformedCommon);\n            }\n            else {\n                result.push(transformedCommon);\n            }\n        }\n        return result;\n    }\n    /**\n     * Returns a copy of this range that is transformed by deletion of `howMany` nodes from `deletePosition`.\n     *\n     * If the deleted range is intersecting with the transformed range, the transformed range will be shrank.\n     *\n     * If the deleted range contains transformed range, `null` will be returned.\n     *\n     * @internal\n     * @param deletionPosition Position from which nodes are removed.\n     * @param howMany How many nodes are removed.\n     * @returns Result of the transformation.\n     */\n    _getTransformedByDeletion(deletePosition, howMany) {\n        let newStart = this.start._getTransformedByDeletion(deletePosition, howMany);\n        let newEnd = this.end._getTransformedByDeletion(deletePosition, howMany);\n        if (newStart == null && newEnd == null) {\n            return null;\n        }\n        if (newStart == null) {\n            newStart = deletePosition;\n        }\n        if (newEnd == null) {\n            newEnd = deletePosition;\n        }\n        return new Range(newStart, newEnd);\n    }\n    /**\n     * Creates a new range, spreading from specified {@link module:engine/model/position~Position position} to a position moved by\n     * given `shift`. If `shift` is a negative value, shifted position is treated as the beginning of the range.\n     *\n     * @internal\n     * @param position Beginning of the range.\n     * @param shift How long the range should be.\n     */\n    static _createFromPositionAndShift(position, shift) {\n        const start = position;\n        const end = position.getShiftedBy(shift);\n        return shift > 0 ? new this(start, end) : new this(end, start);\n    }\n    /**\n     * Creates a range inside an {@link module:engine/model/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @internal\n     * @param element Element which is a parent for the range.\n     */\n    static _createIn(element) {\n        return new this(Position._createAt(element, 0), Position._createAt(element, element.maxOffset));\n    }\n    /**\n     * Creates a range that starts before given {@link module:engine/model/item~Item model item} and ends after it.\n     *\n     * @internal\n     */\n    static _createOn(item) {\n        return this._createFromPositionAndShift(Position._createBefore(item), item.offsetSize);\n    }\n    /**\n     * Combines all ranges from the passed array into a one range. At least one range has to be passed.\n     * Passed ranges must not have common parts.\n     *\n     * The first range from the array is a reference range. If other ranges start or end on the exactly same position where\n     * the reference range, they get combined into one range.\n     *\n     * ```\n     * [  ][]  [    ][ ][             ][ ][]  [  ]  // Passed ranges, shown sorted\n     * [    ]                                       // The result of the function if the first range was a reference range.\n     *         [                           ]        // The result of the function if the third-to-seventh range was a reference range.\n     *                                        [  ]  // The result of the function if the last range was a reference range.\n     * ```\n     *\n     * @internal\n     * @param ranges Ranges to combine.\n     * @returns Combined range.\n     */\n    static _createFromRanges(ranges) {\n        if (ranges.length === 0) {\n            /**\n             * At least one range has to be passed to\n             * {@link module:engine/model/range~Range._createFromRanges `Range._createFromRanges()`}.\n             *\n             * @error range-create-from-ranges-empty-array\n             */\n            throw new CKEditorError('range-create-from-ranges-empty-array', null);\n        }\n        else if (ranges.length == 1) {\n            return ranges[0].clone();\n        }\n        // 1. Set the first range in `ranges` array as a reference range.\n        // If we are going to return just a one range, one of the ranges need to be the reference one.\n        // Other ranges will be stuck to that range, if possible.\n        const ref = ranges[0];\n        // 2. Sort all the ranges, so it's easier to process them.\n        ranges.sort((a, b) => {\n            return a.start.isAfter(b.start) ? 1 : -1;\n        });\n        // 3. Check at which index the reference range is now.\n        const refIndex = ranges.indexOf(ref);\n        // 4. At this moment we don't need the original range.\n        // We are going to modify the result, and we need to return a new instance of Range.\n        // We have to create a copy of the reference range.\n        const result = new this(ref.start, ref.end);\n        // 5. Ranges should be checked and glued starting from the range that is closest to the reference range.\n        // Since ranges are sorted, start with the range with index that is closest to reference range index.\n        for (let i = refIndex - 1; i >= 0; i--) {\n            if (ranges[i].end.isEqual(result.start)) {\n                result.start = Position._createAt(ranges[i].start);\n            }\n            else {\n                // If ranges are not starting/ending at the same position there is no point in looking further.\n                break;\n            }\n        }\n        // 6. Ranges should be checked and glued starting from the range that is closest to the reference range.\n        // Since ranges are sorted, start with the range with index that is closest to reference range index.\n        for (let i = refIndex + 1; i < ranges.length; i++) {\n            if (ranges[i].start.isEqual(result.end)) {\n                result.end = Position._createAt(ranges[i].end);\n            }\n            else {\n                // If ranges are not starting/ending at the same position there is no point in looking further.\n                break;\n            }\n        }\n        return result;\n    }\n    /**\n     * Creates a `Range` instance from given plain object (i.e. parsed JSON string).\n     *\n     * @param json Plain object to be converted to `Range`.\n     * @param doc Document object that will be range owner.\n     * @returns `Range` instance created using given plain object.\n     */\n    static fromJSON(json, doc) {\n        return new this(Position.fromJSON(json.start, doc), Position.fromJSON(json.end, doc));\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nRange.prototype.is = function (type) {\n    return type === 'range' || type === 'model:range';\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/mapper\n */\nimport ModelPosition from '../model/position.js';\nimport ModelRange from '../model/range.js';\nimport ViewPosition from '../view/position.js';\nimport ViewRange from '../view/range.js';\nimport ViewText from '../view/text.js';\nimport { CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Maps elements, positions and markers between the {@link module:engine/view/document~Document view} and\n * the {@link module:engine/model/model model}.\n *\n * The instance of the Mapper used for the editing pipeline is available in\n * {@link module:engine/controller/editingcontroller~EditingController#mapper `editor.editing.mapper`}.\n *\n * Mapper uses bound elements to find corresponding elements and positions, so, to get proper results,\n * all model elements should be {@link module:engine/conversion/mapper~Mapper#bindElements bound}.\n *\n * To map the complex model to/from view relations, you may provide custom callbacks for the\n * {@link module:engine/conversion/mapper~Mapper#event:modelToViewPosition modelToViewPosition event} and\n * {@link module:engine/conversion/mapper~Mapper#event:viewToModelPosition viewToModelPosition event} that are fired whenever\n * a position mapping request occurs.\n * Those events are fired by the {@link module:engine/conversion/mapper~Mapper#toViewPosition toViewPosition}\n * and {@link module:engine/conversion/mapper~Mapper#toModelPosition toModelPosition} methods. `Mapper` adds its own default callbacks\n * with `'lowest'` priority. To override default `Mapper` mapping, add custom callback with higher priority and\n * stop the event.\n */\nexport default class Mapper extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates an instance of the mapper.\n     */\n    constructor() {\n        super();\n        /**\n         * Model element to view element mapping.\n         */\n        this._modelToViewMapping = new WeakMap();\n        /**\n         * View element to model element mapping.\n         */\n        this._viewToModelMapping = new WeakMap();\n        /**\n         * A map containing callbacks between view element names and functions evaluating length of view elements\n         * in model.\n         */\n        this._viewToModelLengthCallbacks = new Map();\n        /**\n         * Model marker name to view elements mapping.\n         *\n         * Keys are `String`s while values are `Set`s with {@link module:engine/view/element~Element view elements}.\n         * One marker (name) can be mapped to multiple elements.\n         */\n        this._markerNameToElements = new Map();\n        /**\n         * View element to model marker names mapping.\n         *\n         * This is reverse to {@link ~Mapper#_markerNameToElements} map.\n         */\n        this._elementToMarkerNames = new Map();\n        /**\n         * The map of removed view elements with their current root (used for deferred unbinding).\n         */\n        this._deferredBindingRemovals = new Map();\n        /**\n         * Stores marker names of markers which have changed due to unbinding a view element (so it is assumed that the view element\n         * has been removed, moved or renamed).\n         */\n        this._unboundMarkerNames = new Set();\n        // Default mapper algorithm for mapping model position to view position.\n        this.on('modelToViewPosition', (evt, data) => {\n            if (data.viewPosition) {\n                return;\n            }\n            const viewContainer = this._modelToViewMapping.get(data.modelPosition.parent);\n            if (!viewContainer) {\n                /**\n                 * A model position could not be mapped to the view because the parent of the model position\n                 * does not have a mapped view element (might have not been converted yet or it has no converter).\n                 *\n                 * Make sure that the model element is correctly converted to the view.\n                 *\n                 * @error mapping-model-position-view-parent-not-found\n                 */\n                throw new CKEditorError('mapping-model-position-view-parent-not-found', this, { modelPosition: data.modelPosition });\n            }\n            data.viewPosition = this.findPositionIn(viewContainer, data.modelPosition.offset);\n        }, { priority: 'low' });\n        // Default mapper algorithm for mapping view position to model position.\n        this.on('viewToModelPosition', (evt, data) => {\n            if (data.modelPosition) {\n                return;\n            }\n            const viewBlock = this.findMappedViewAncestor(data.viewPosition);\n            const modelParent = this._viewToModelMapping.get(viewBlock);\n            const modelOffset = this._toModelOffset(data.viewPosition.parent, data.viewPosition.offset, viewBlock);\n            data.modelPosition = ModelPosition._createAt(modelParent, modelOffset);\n        }, { priority: 'low' });\n    }\n    /**\n     * Marks model and view elements as corresponding. Corresponding elements can be retrieved by using\n     * the {@link module:engine/conversion/mapper~Mapper#toModelElement toModelElement} and\n     * {@link module:engine/conversion/mapper~Mapper#toViewElement toViewElement} methods.\n     * The information that elements are bound is also used to translate positions.\n     *\n     * @param modelElement Model element.\n     * @param viewElement View element.\n     */\n    bindElements(modelElement, viewElement) {\n        this._modelToViewMapping.set(modelElement, viewElement);\n        this._viewToModelMapping.set(viewElement, modelElement);\n    }\n    /**\n     * Unbinds the given {@link module:engine/view/element~Element view element} from the map.\n     *\n     * **Note:** view-to-model binding will be removed, if it existed. However, corresponding model-to-view binding\n     * will be removed only if model element is still bound to the passed `viewElement`.\n     *\n     * This behavior allows for re-binding model element to another view element without fear of losing the new binding\n     * when the previously bound view element is unbound.\n     *\n     * @param viewElement View element to unbind.\n     * @param options The options object.\n     * @param options.defer Controls whether the binding should be removed immediately or deferred until a\n     * {@link #flushDeferredBindings `flushDeferredBindings()`} call.\n     */\n    unbindViewElement(viewElement, options = {}) {\n        const modelElement = this.toModelElement(viewElement);\n        if (this._elementToMarkerNames.has(viewElement)) {\n            for (const markerName of this._elementToMarkerNames.get(viewElement)) {\n                this._unboundMarkerNames.add(markerName);\n            }\n        }\n        if (options.defer) {\n            this._deferredBindingRemovals.set(viewElement, viewElement.root);\n        }\n        else {\n            this._viewToModelMapping.delete(viewElement);\n            if (this._modelToViewMapping.get(modelElement) == viewElement) {\n                this._modelToViewMapping.delete(modelElement);\n            }\n        }\n    }\n    /**\n     * Unbinds the given {@link module:engine/model/element~Element model element} from the map.\n     *\n     * **Note:** the model-to-view binding will be removed, if it existed. However, the corresponding view-to-model binding\n     * will be removed only if the view element is still bound to the passed `modelElement`.\n     *\n     * This behavior lets for re-binding view element to another model element without fear of losing the new binding\n     * when the previously bound model element is unbound.\n     *\n     * @param modelElement Model element to unbind.\n     */\n    unbindModelElement(modelElement) {\n        const viewElement = this.toViewElement(modelElement);\n        this._modelToViewMapping.delete(modelElement);\n        if (this._viewToModelMapping.get(viewElement) == modelElement) {\n            this._viewToModelMapping.delete(viewElement);\n        }\n    }\n    /**\n     * Binds the given marker name with the given {@link module:engine/view/element~Element view element}. The element\n     * will be added to the current set of elements bound with the given marker name.\n     *\n     * @param element Element to bind.\n     * @param name Marker name.\n     */\n    bindElementToMarker(element, name) {\n        const elements = this._markerNameToElements.get(name) || new Set();\n        elements.add(element);\n        const names = this._elementToMarkerNames.get(element) || new Set();\n        names.add(name);\n        this._markerNameToElements.set(name, elements);\n        this._elementToMarkerNames.set(element, names);\n    }\n    /**\n     * Unbinds an element from given marker name.\n     *\n     * @param element Element to unbind.\n     * @param name Marker name.\n     */\n    unbindElementFromMarkerName(element, name) {\n        const nameToElements = this._markerNameToElements.get(name);\n        if (nameToElements) {\n            nameToElements.delete(element);\n            if (nameToElements.size == 0) {\n                this._markerNameToElements.delete(name);\n            }\n        }\n        const elementToNames = this._elementToMarkerNames.get(element);\n        if (elementToNames) {\n            elementToNames.delete(name);\n            if (elementToNames.size == 0) {\n                this._elementToMarkerNames.delete(element);\n            }\n        }\n    }\n    /**\n     * Returns all marker names of markers which have changed due to unbinding a view element (so it is assumed that the view element\n     * has been removed, moved or renamed) since the last flush. After returning, the marker names list is cleared.\n     */\n    flushUnboundMarkerNames() {\n        const markerNames = Array.from(this._unboundMarkerNames);\n        this._unboundMarkerNames.clear();\n        return markerNames;\n    }\n    /**\n     * Unbinds all deferred binding removals of view elements that in the meantime were not re-attached to some root or document fragment.\n     *\n     * See: {@link #unbindViewElement `unbindViewElement()`}.\n     */\n    flushDeferredBindings() {\n        for (const [viewElement, root] of this._deferredBindingRemovals) {\n            // Unbind it only if it wasn't re-attached to some root or document fragment.\n            if (viewElement.root == root) {\n                this.unbindViewElement(viewElement);\n            }\n        }\n        this._deferredBindingRemovals = new Map();\n    }\n    /**\n     * Removes all model to view and view to model bindings.\n     */\n    clearBindings() {\n        this._modelToViewMapping = new WeakMap();\n        this._viewToModelMapping = new WeakMap();\n        this._markerNameToElements = new Map();\n        this._elementToMarkerNames = new Map();\n        this._unboundMarkerNames = new Set();\n        this._deferredBindingRemovals = new Map();\n    }\n    toModelElement(viewElement) {\n        return this._viewToModelMapping.get(viewElement);\n    }\n    toViewElement(modelElement) {\n        return this._modelToViewMapping.get(modelElement);\n    }\n    /**\n     * Gets the corresponding model range.\n     *\n     * @param viewRange View range.\n     * @returns Corresponding model range.\n     */\n    toModelRange(viewRange) {\n        return new ModelRange(this.toModelPosition(viewRange.start), this.toModelPosition(viewRange.end));\n    }\n    /**\n     * Gets the corresponding view range.\n     *\n     * @param modelRange Model range.\n     * @returns Corresponding view range.\n     */\n    toViewRange(modelRange) {\n        return new ViewRange(this.toViewPosition(modelRange.start), this.toViewPosition(modelRange.end));\n    }\n    /**\n     * Gets the corresponding model position.\n     *\n     * @fires viewToModelPosition\n     * @param viewPosition View position.\n     * @returns Corresponding model position.\n     */\n    toModelPosition(viewPosition) {\n        const data = {\n            viewPosition,\n            mapper: this\n        };\n        this.fire('viewToModelPosition', data);\n        return data.modelPosition;\n    }\n    /**\n     * Gets the corresponding view position.\n     *\n     * @fires modelToViewPosition\n     * @param modelPosition Model position.\n     * @param options Additional options for position mapping process.\n     * @param options.isPhantom Should be set to `true` if the model position to map is pointing to a place\n     * in model tree which no longer exists. For example, it could be an end of a removed model range.\n     * @returns Corresponding view position.\n     */\n    toViewPosition(modelPosition, options = {}) {\n        const data = {\n            modelPosition,\n            mapper: this,\n            isPhantom: options.isPhantom\n        };\n        this.fire('modelToViewPosition', data);\n        return data.viewPosition;\n    }\n    /**\n     * Gets all view elements bound to the given marker name.\n     *\n     * @param name Marker name.\n     * @returns View elements bound with the given marker name or `null`\n     * if no elements are bound to the given marker name.\n     */\n    markerNameToElements(name) {\n        const boundElements = this._markerNameToElements.get(name);\n        if (!boundElements) {\n            return null;\n        }\n        const elements = new Set();\n        for (const element of boundElements) {\n            if (element.is('attributeElement')) {\n                for (const clone of element.getElementsWithSameId()) {\n                    elements.add(clone);\n                }\n            }\n            else {\n                elements.add(element);\n            }\n        }\n        return elements;\n    }\n    /**\n     * Registers a callback that evaluates the length in the model of a view element with the given name.\n     *\n     * The callback is fired with one argument, which is a view element instance. The callback is expected to return\n     * a number representing the length of the view element in the model.\n     *\n     * ```ts\n     * // List item in view may contain nested list, which have other list items. In model though,\n     * // the lists are represented by flat structure. Because of those differences, length of list view element\n     * // may be greater than one. In the callback it's checked how many nested list items are in evaluated list item.\n     *\n     * function getViewListItemLength( element ) {\n     * \tlet length = 1;\n     *\n     * \tfor ( let child of element.getChildren() ) {\n     * \t\tif ( child.name == 'ul' || child.name == 'ol' ) {\n     * \t\t\tfor ( let item of child.getChildren() ) {\n     * \t\t\t\tlength += getViewListItemLength( item );\n     * \t\t\t}\n     * \t\t}\n     * \t}\n     *\n     * \treturn length;\n     * }\n     *\n     * mapper.registerViewToModelLength( 'li', getViewListItemLength );\n     * ```\n     *\n     * @param viewElementName Name of view element for which callback is registered.\n     * @param lengthCallback Function return a length of view element instance in model.\n     */\n    registerViewToModelLength(viewElementName, lengthCallback) {\n        this._viewToModelLengthCallbacks.set(viewElementName, lengthCallback);\n    }\n    /**\n     * For the given `viewPosition`, finds and returns the closest ancestor of this position that has a mapping to\n     * the model.\n     *\n     * @param viewPosition Position for which a mapped ancestor should be found.\n     */\n    findMappedViewAncestor(viewPosition) {\n        let parent = viewPosition.parent;\n        while (!this._viewToModelMapping.has(parent)) {\n            parent = parent.parent;\n        }\n        return parent;\n    }\n    /**\n     * Calculates model offset based on the view position and the block element.\n     *\n     * Example:\n     *\n     * ```html\n     * <p>foo<b>ba|r</b></p> // _toModelOffset( b, 2, p ) -> 5\n     * ```\n     *\n     * Is a sum of:\n     *\n     * ```html\n     * <p>foo|<b>bar</b></p> // _toModelOffset( p, 3, p ) -> 3\n     * <p>foo<b>ba|r</b></p> // _toModelOffset( b, 2, b ) -> 2\n     * ```\n     *\n     * @param viewParent Position parent.\n     * @param viewOffset Position offset.\n     * @param viewBlock Block used as a base to calculate offset.\n     * @returns Offset in the model.\n     */\n    _toModelOffset(viewParent, viewOffset, viewBlock) {\n        if (viewBlock != viewParent) {\n            // See example.\n            const offsetToParentStart = this._toModelOffset(viewParent.parent, viewParent.index, viewBlock);\n            const offsetInParent = this._toModelOffset(viewParent, viewOffset, viewParent);\n            return offsetToParentStart + offsetInParent;\n        }\n        // viewBlock == viewParent, so we need to calculate the offset in the parent element.\n        // If the position is a text it is simple (\"ba|r\" -> 2).\n        if (viewParent.is('$text')) {\n            return viewOffset;\n        }\n        // If the position is in an element we need to sum lengths of siblings ( <b> bar </b> foo | -> 3 + 3 = 6 ).\n        let modelOffset = 0;\n        for (let i = 0; i < viewOffset; i++) {\n            modelOffset += this.getModelLength(viewParent.getChild(i));\n        }\n        return modelOffset;\n    }\n    /**\n     * Gets the length of the view element in the model.\n     *\n     * The length is calculated as follows:\n     * * if a {@link #registerViewToModelLength length mapping callback} is provided for the given `viewNode`, it is used to\n     * evaluate the model length (`viewNode` is used as first and only parameter passed to the callback),\n     * * length of a {@link module:engine/view/text~Text text node} is equal to the length of its\n     * {@link module:engine/view/text~Text#data data},\n     * * length of a {@link module:engine/view/uielement~UIElement ui element} is equal to 0,\n     * * length of a mapped {@link module:engine/view/element~Element element} is equal to 1,\n     * * length of a non-mapped {@link module:engine/view/element~Element element} is equal to the length of its children.\n     *\n     * Examples:\n     *\n     * ```\n     * foo                          -> 3 // Text length is equal to its data length.\n     * <p>foo</p>                   -> 1 // Length of an element which is mapped is by default equal to 1.\n     * <b>foo</b>                   -> 3 // Length of an element which is not mapped is a length of its children.\n     * <div><p>x</p><p>y</p></div>  -> 2 // Assuming that <div> is not mapped and <p> are mapped.\n     * ```\n     *\n     * @param viewNode View node.\n     * @returns Length of the node in the tree model.\n     */\n    getModelLength(viewNode) {\n        if (this._viewToModelLengthCallbacks.get(viewNode.name)) {\n            const callback = this._viewToModelLengthCallbacks.get(viewNode.name);\n            return callback(viewNode);\n        }\n        else if (this._viewToModelMapping.has(viewNode)) {\n            return 1;\n        }\n        else if (viewNode.is('$text')) {\n            return viewNode.data.length;\n        }\n        else if (viewNode.is('uiElement')) {\n            return 0;\n        }\n        else {\n            let len = 0;\n            for (const child of viewNode.getChildren()) {\n                len += this.getModelLength(child);\n            }\n            return len;\n        }\n    }\n    /**\n     * Finds the position in the view node (or in its children) with the expected model offset.\n     *\n     * Example:\n     *\n     * ```\n     * <p>fo<b>bar</b>bom</p> -> expected offset: 4\n     *\n     * findPositionIn( p, 4 ):\n     * <p>|fo<b>bar</b>bom</p> -> expected offset: 4, actual offset: 0\n     * <p>fo|<b>bar</b>bom</p> -> expected offset: 4, actual offset: 2\n     * <p>fo<b>bar</b>|bom</p> -> expected offset: 4, actual offset: 5 -> we are too far\n     *\n     * findPositionIn( b, 4 - ( 5 - 3 ) ):\n     * <p>fo<b>|bar</b>bom</p> -> expected offset: 2, actual offset: 0\n     * <p>fo<b>bar|</b>bom</p> -> expected offset: 2, actual offset: 3 -> we are too far\n     *\n     * findPositionIn( bar, 2 - ( 3 - 3 ) ):\n     * We are in the text node so we can simple find the offset.\n     * <p>fo<b>ba|r</b>bom</p> -> expected offset: 2, actual offset: 2 -> position found\n     * ```\n     *\n     * @param viewParent Tree view element in which we are looking for the position.\n     * @param expectedOffset Expected offset.\n     * @returns Found position.\n     */\n    findPositionIn(viewParent, expectedOffset) {\n        // Last scanned view node.\n        let viewNode;\n        // Length of the last scanned view node.\n        let lastLength = 0;\n        let modelOffset = 0;\n        let viewOffset = 0;\n        // In the text node it is simple: the offset in the model equals the offset in the text.\n        if (viewParent.is('$text')) {\n            return new ViewPosition(viewParent, expectedOffset);\n        }\n        // In other cases we add lengths of child nodes to find the proper offset.\n        // If it is smaller we add the length.\n        while (modelOffset < expectedOffset) {\n            viewNode = viewParent.getChild(viewOffset);\n            lastLength = this.getModelLength(viewNode);\n            modelOffset += lastLength;\n            viewOffset++;\n        }\n        // If it equals we found the position.\n        if (modelOffset == expectedOffset) {\n            return this._moveViewPositionToTextNode(new ViewPosition(viewParent, viewOffset));\n        }\n        // If it is higher we need to enter last child.\n        else {\n            // ( modelOffset - lastLength ) is the offset to the child we enter,\n            // so we subtract it from the expected offset to fine the offset in the child.\n            return this.findPositionIn(viewNode, expectedOffset - (modelOffset - lastLength));\n        }\n    }\n    /**\n     * Because we prefer positions in the text nodes over positions next to text nodes, if the view position was next to a text node,\n     * it moves it into the text node instead.\n     *\n     * ```\n     * <p>[]<b>foo</b></p> -> <p>[]<b>foo</b></p> // do not touch if position is not directly next to text\n     * <p>foo[]<b>foo</b></p> -> <p>foo{}<b>foo</b></p> // move to text node\n     * <p><b>[]foo</b></p> -> <p><b>{}foo</b></p> // move to text node\n     * ```\n     *\n     * @param viewPosition Position potentially next to the text node.\n     * @returns Position in the text node if possible.\n     */\n    _moveViewPositionToTextNode(viewPosition) {\n        // If the position is just after a text node, put it at the end of that text node.\n        // If the position is just before a text node, put it at the beginning of that text node.\n        const nodeBefore = viewPosition.nodeBefore;\n        const nodeAfter = viewPosition.nodeAfter;\n        if (nodeBefore instanceof ViewText) {\n            return new ViewPosition(nodeBefore, nodeBefore.data.length);\n        }\n        else if (nodeAfter instanceof ViewText) {\n            return new ViewPosition(nodeAfter, 0);\n        }\n        // Otherwise, just return the given position.\n        return viewPosition;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/modelconsumable\n */\nimport TextProxy from '../model/textproxy.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Manages a list of consumable values for the {@link module:engine/model/item~Item model items}.\n *\n * Consumables are various aspects of the model. A model item can be broken down into separate, single properties that might be\n * taken into consideration when converting that item.\n *\n * `ModelConsumable` is used by {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} while analyzing the changed\n * parts of {@link module:engine/model/document~Document the document}. The added / changed / removed model items are broken down\n * into singular properties (the item itself and its attributes). All those parts are saved in `ModelConsumable`. Then,\n * during conversion, when the given part of a model item is converted (i.e. the view element has been inserted into the view,\n * but without attributes), the consumable value is removed from `ModelConsumable`.\n *\n * For model items, `ModelConsumable` stores consumable values of one of following types: `insert`, `addattribute:<attributeKey>`,\n * `changeattributes:<attributeKey>`, `removeattributes:<attributeKey>`.\n *\n * In most cases, it is enough to let th {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}\n * gather consumable values, so there is no need to use\n * the {@link module:engine/conversion/modelconsumable~ModelConsumable#add add method} directly.\n * However, it is important to understand how consumable values can be\n * {@link module:engine/conversion/modelconsumable~ModelConsumable#consume consumed}.\n * See {@link module:engine/conversion/downcasthelpers default downcast converters} for more information.\n *\n * Keep in mind that one conversion event may have multiple callbacks (converters) attached to it. Each of those is\n * able to convert one or more parts of the model. However, when one of those callbacks actually converts\n * something, the others should not, because they would duplicate the results. Using `ModelConsumable` helps to avoid\n * this situation, because callbacks should only convert these values that were not yet consumed from `ModelConsumable`.\n *\n * Consuming multiple values in a single callback:\n *\n * ```ts\n * // Converter for custom `imageBlock` element that might have a `caption` element inside which changes\n * // how the image is displayed in the view:\n * //\n * // Model:\n * //\n * // [imageBlock]\n * //   └─ [caption]\n * //       └─ foo\n * //\n * // View:\n * //\n * // <figure>\n * //   ├─ <img />\n * //   └─ <caption>\n * //       └─ foo\n * modelConversionDispatcher.on( 'insert:imageBlock', ( evt, data, conversionApi ) => {\n * \t// First, consume the `imageBlock` element.\n * \tconversionApi.consumable.consume( data.item, 'insert' );\n *\n * \t// Just create normal image element for the view.\n * \t// Maybe it will be \"decorated\" later.\n * \tconst viewImage = new ViewElement( 'img' );\n * \tconst insertPosition = conversionApi.mapper.toViewPosition( data.range.start );\n * \tconst viewWriter = conversionApi.writer;\n *\n * \t// Check if the `imageBlock` element has children.\n * \tif ( data.item.childCount > 0 ) {\n * \t\tconst modelCaption = data.item.getChild( 0 );\n *\n * \t\t// `modelCaption` insertion change is consumed from consumable values.\n * \t\t// It will not be converted by other converters, but it's children (probably some text) will be.\n * \t\t// Through mapping, converters for text will know where to insert contents of `modelCaption`.\n * \t\tif ( conversionApi.consumable.consume( modelCaption, 'insert' ) ) {\n * \t\t\tconst viewCaption = new ViewElement( 'figcaption' );\n *\n * \t\t\tconst viewImageHolder = new ViewElement( 'figure', null, [ viewImage, viewCaption ] );\n *\n * \t\t\tconversionApi.mapper.bindElements( modelCaption, viewCaption );\n * \t\t\tconversionApi.mapper.bindElements( data.item, viewImageHolder );\n * \t\t\tviewWriter.insert( insertPosition, viewImageHolder );\n * \t\t}\n * \t} else {\n * \t\tconversionApi.mapper.bindElements( data.item, viewImage );\n * \t\tviewWriter.insert( insertPosition, viewImage );\n * \t}\n *\n * \tevt.stop();\n * } );\n * ```\n */\nexport default class ModelConsumable {\n    constructor() {\n        /**\n         * Contains list of consumable values.\n         */\n        this._consumable = new Map();\n        /**\n         * For each {@link module:engine/model/textproxy~TextProxy} added to `ModelConsumable`, this registry holds a parent\n         * of that `TextProxy` and the start and end indices of that `TextProxy`. This allows identification of the `TextProxy`\n         * instances that point to the same part of the model but are different instances. Each distinct `TextProxy`\n         * is given a unique `Symbol` which is then registered as consumable. This process is transparent for the `ModelConsumable`\n         * API user because whenever `TextProxy` is added, tested, consumed or reverted, the internal mechanisms of\n         * `ModelConsumable` translate `TextProxy` to that unique `Symbol`.\n         */\n        this._textProxyRegistry = new Map();\n    }\n    /**\n     * Adds a consumable value to the consumables list and links it with a given model item.\n     *\n     * ```ts\n     * modelConsumable.add( modelElement, 'insert' ); // Add `modelElement` insertion change to consumable values.\n     * modelConsumable.add( modelElement, 'addAttribute:bold' ); // Add `bold` attribute insertion on `modelElement` change.\n     * modelConsumable.add( modelElement, 'removeAttribute:bold' ); // Add `bold` attribute removal on `modelElement` change.\n     * modelConsumable.add( modelSelection, 'selection' ); // Add `modelSelection` to consumable values.\n     * modelConsumable.add( modelRange, 'range' ); // Add `modelRange` to consumable values.\n     * ```\n     *\n     * @param item Model item, range or selection that has the consumable.\n     * @param type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n     * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n     */\n    add(item, type) {\n        type = _normalizeConsumableType(type);\n        if (item instanceof TextProxy) {\n            item = this._getSymbolForTextProxy(item);\n        }\n        if (!this._consumable.has(item)) {\n            this._consumable.set(item, new Map());\n        }\n        this._consumable.get(item).set(type, true);\n    }\n    /**\n     * Removes a given consumable value from a given model item.\n     *\n     * ```ts\n     * modelConsumable.consume( modelElement, 'insert' ); // Remove `modelElement` insertion change from consumable values.\n     * modelConsumable.consume( modelElement, 'addAttribute:bold' ); // Remove `bold` attribute insertion on `modelElement` change.\n     * modelConsumable.consume( modelElement, 'removeAttribute:bold' ); // Remove `bold` attribute removal on `modelElement` change.\n     * modelConsumable.consume( modelSelection, 'selection' ); // Remove `modelSelection` from consumable values.\n     * modelConsumable.consume( modelRange, 'range' ); // Remove 'modelRange' from consumable values.\n     * ```\n     *\n     * @param item Model item, range or selection from which consumable will be consumed.\n     * @param type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n     * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n     * @returns `true` if consumable value was available and was consumed, `false` otherwise.\n     */\n    consume(item, type) {\n        type = _normalizeConsumableType(type);\n        if (item instanceof TextProxy) {\n            item = this._getSymbolForTextProxy(item);\n        }\n        if (this.test(item, type)) {\n            this._consumable.get(item).set(type, false);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    /**\n     * Tests whether there is a consumable value of a given type connected with a given model item.\n     *\n     * ```ts\n     * modelConsumable.test( modelElement, 'insert' ); // Check for `modelElement` insertion change.\n     * modelConsumable.test( modelElement, 'addAttribute:bold' ); // Check for `bold` attribute insertion on `modelElement` change.\n     * modelConsumable.test( modelElement, 'removeAttribute:bold' ); // Check for `bold` attribute removal on `modelElement` change.\n     * modelConsumable.test( modelSelection, 'selection' ); // Check if `modelSelection` is consumable.\n     * modelConsumable.test( modelRange, 'range' ); // Check if `modelRange` is consumable.\n     * ```\n     *\n     * @param item Model item, range or selection to be tested.\n     * @param type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n     * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n     * @returns `null` if such consumable was never added, `false` if the consumable values was\n     * already consumed or `true` if it was added and not consumed yet.\n     */\n    test(item, type) {\n        type = _normalizeConsumableType(type);\n        if (item instanceof TextProxy) {\n            item = this._getSymbolForTextProxy(item);\n        }\n        const itemConsumables = this._consumable.get(item);\n        if (itemConsumables === undefined) {\n            return null;\n        }\n        const value = itemConsumables.get(type);\n        if (value === undefined) {\n            return null;\n        }\n        return value;\n    }\n    /**\n     * Reverts consuming of a consumable value.\n     *\n     * ```ts\n     * modelConsumable.revert( modelElement, 'insert' ); // Revert consuming `modelElement` insertion change.\n     * modelConsumable.revert( modelElement, 'addAttribute:bold' ); // Revert consuming `bold` attribute insert from `modelElement`.\n     * modelConsumable.revert( modelElement, 'removeAttribute:bold' ); // Revert consuming `bold` attribute remove from `modelElement`.\n     * modelConsumable.revert( modelSelection, 'selection' ); // Revert consuming `modelSelection`.\n     * modelConsumable.revert( modelRange, 'range' ); // Revert consuming `modelRange`.\n     * ```\n     *\n     * @param item Model item, range or selection to be reverted.\n     * @param type Consumable type.\n     * @returns `true` if consumable has been reversed, `false` otherwise. `null` if the consumable has\n     * never been added.\n     */\n    revert(item, type) {\n        type = _normalizeConsumableType(type);\n        if (item instanceof TextProxy) {\n            item = this._getSymbolForTextProxy(item);\n        }\n        const test = this.test(item, type);\n        if (test === false) {\n            this._consumable.get(item).set(type, true);\n            return true;\n        }\n        else if (test === true) {\n            return false;\n        }\n        return null;\n    }\n    /**\n     * Verifies if all events from the specified group were consumed.\n     *\n     * @param eventGroup The events group to verify.\n     */\n    verifyAllConsumed(eventGroup) {\n        const items = [];\n        for (const [item, consumables] of this._consumable) {\n            for (const [event, canConsume] of consumables) {\n                const eventPrefix = event.split(':')[0];\n                if (canConsume && eventGroup == eventPrefix) {\n                    items.push({\n                        event,\n                        item: item.name || item.description\n                    });\n                }\n            }\n        }\n        if (items.length) {\n            /**\n             * Some of the {@link module:engine/model/item~Item model items} were not consumed while downcasting the model to view.\n             *\n             * This might be the effect of:\n             *\n             * * A missing converter for some model elements. Make sure that you registered downcast converters for all model elements.\n             * * A custom converter that does not consume converted items. Make sure that you\n             * {@link module:engine/conversion/modelconsumable~ModelConsumable#consume consumed} all model elements that you converted\n             * from the model to the view.\n             * * A custom converter that called `event.stop()`. When providing a custom converter, keep in mind that you should not stop\n             * the event. If you stop it then the default converter at the `lowest` priority will not trigger the conversion of this node's\n             * attributes and child nodes.\n             *\n             * @error conversion-model-consumable-not-consumed\n             * @param {Array.<module:engine/model/item~Item>} items Items that were not consumed.\n             */\n            throw new CKEditorError('conversion-model-consumable-not-consumed', null, { items });\n        }\n    }\n    /**\n     * Gets a unique symbol for the passed {@link module:engine/model/textproxy~TextProxy} instance. All `TextProxy` instances that\n     * have same parent, same start index and same end index will get the same symbol.\n     *\n     * Used internally to correctly consume `TextProxy` instances.\n     *\n     * @internal\n     * @param textProxy `TextProxy` instance to get a symbol for.\n     * @returns Symbol representing all equal instances of `TextProxy`.\n     */\n    _getSymbolForTextProxy(textProxy) {\n        let symbol = null;\n        const startMap = this._textProxyRegistry.get(textProxy.startOffset);\n        if (startMap) {\n            const endMap = startMap.get(textProxy.endOffset);\n            if (endMap) {\n                symbol = endMap.get(textProxy.parent);\n            }\n        }\n        if (!symbol) {\n            symbol = this._addSymbolForTextProxy(textProxy);\n        }\n        return symbol;\n    }\n    /**\n     * Adds a symbol for the given {@link module:engine/model/textproxy~TextProxy} instance.\n     *\n     * Used internally to correctly consume `TextProxy` instances.\n     *\n     * @param textProxy Text proxy instance.\n     * @returns Symbol generated for given `TextProxy`.\n     */\n    _addSymbolForTextProxy(textProxy) {\n        const start = textProxy.startOffset;\n        const end = textProxy.endOffset;\n        const parent = textProxy.parent;\n        const symbol = Symbol('$textProxy:' + textProxy.data);\n        let startMap;\n        let endMap;\n        startMap = this._textProxyRegistry.get(start);\n        if (!startMap) {\n            startMap = new Map();\n            this._textProxyRegistry.set(start, startMap);\n        }\n        endMap = startMap.get(end);\n        if (!endMap) {\n            endMap = new Map();\n            startMap.set(end, endMap);\n        }\n        endMap.set(parent, symbol);\n        return symbol;\n    }\n}\n/**\n * Returns a normalized consumable type name from the given string. A normalized consumable type name is a string that has\n * at most one colon, for example: `insert` or `addMarker:highlight`. If a string to normalize has more \"parts\" (more colons),\n * the further parts are dropped, for example: `addattribute:bold:$text` -> `addattributes:bold`.\n *\n * @param type Consumable type.\n * @returns Normalized consumable type.\n */\nfunction _normalizeConsumableType(type) {\n    const parts = type.split(':');\n    // For inserts allow passing event name, it's stored in the context of a specified element so the element name is not needed.\n    if (parts[0] == 'insert') {\n        return parts[0];\n    }\n    // Markers are identified by the whole name (otherwise we would consume the whole markers group).\n    if (parts[0] == 'addMarker' || parts[0] == 'removeMarker') {\n        return type;\n    }\n    return parts.length > 1 ? parts[0] + ':' + parts[1] : parts[0];\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/downcastdispatcher\n */\nimport Consumable from './modelconsumable.js';\nimport Range from '../model/range.js';\nimport { EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * The downcast dispatcher is a central point of downcasting (conversion from the model to the view), which is a process of reacting\n * to changes in the model and firing a set of events. The callbacks listening to these events are called converters. The\n * converters' role is to convert the model changes to changes in view (for example, adding view nodes or\n * changing attributes on view elements).\n *\n * During the conversion process, downcast dispatcher fires events basing on the state of the model and prepares\n * data for these events. It is important to understand that the events are connected with the changes done on the model,\n * for example: \"a node has been inserted\" or \"an attribute has changed\". This is in contrary to upcasting (a view-to-model conversion)\n * where you convert the view state (view nodes) to a model tree.\n *\n * The events are prepared basing on a diff created by the {@link module:engine/model/differ~Differ Differ}, which buffers them\n * and then passes to the downcast dispatcher as a diff between the old model state and the new model state.\n *\n * Note that because the changes are converted, there is a need to have a mapping between the model structure and the view structure.\n * To map positions and elements during the downcast (a model-to-view conversion), use {@link module:engine/conversion/mapper~Mapper}.\n *\n * Downcast dispatcher fires the following events for model tree changes:\n *\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert `insert`} &ndash;\n * If a range of nodes was inserted to the model tree.\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:remove `remove`} &ndash;\n * If a range of nodes was removed from the model tree.\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute `attribute`} &ndash;\n * If an attribute was added, changed or removed from a model node.\n *\n * For {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert `insert`}\n * and {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute `attribute`},\n * the downcast dispatcher generates {@link module:engine/conversion/modelconsumable~ModelConsumable consumables}.\n * These are used to have control over which changes have already been consumed. It is useful when some converters\n * overwrite others or convert multiple changes (for example, it converts an insertion of an element and also converts that\n * element's attributes during the insertion).\n *\n * Additionally, downcast dispatcher fires events for {@link module:engine/model/markercollection~Marker marker} changes:\n *\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker `addMarker`} &ndash; If a marker was added.\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:removeMarker `removeMarker`} &ndash; If a marker was\n * removed.\n *\n * Note that changing a marker is done through removing the marker from the old range and adding it to the new range,\n * so both of these events are fired.\n *\n * Finally, a downcast dispatcher also handles firing events for the {@link module:engine/model/selection model selection}\n * conversion:\n *\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:selection `selection`}\n * &ndash; Converts the selection from the model to the view.\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute `attribute`}\n * &ndash; Fired for every selection attribute.\n * * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker `addMarker`}\n * &ndash; Fired for every marker that contains a selection.\n *\n * Unlike the model tree and the markers, the events for selection are not fired for changes but for a selection state.\n *\n * When providing custom listeners for a downcast dispatcher, remember to check whether a given change has not been\n * {@link module:engine/conversion/modelconsumable~ModelConsumable#consume consumed} yet.\n *\n * When providing custom listeners for a downcast dispatcher, keep in mind that you **should not** stop the event. If you stop it,\n * then the default converter at the `lowest` priority will not trigger the conversion of this node's attributes and child nodes.\n *\n * When providing custom listeners for a downcast dispatcher, remember to use the provided\n * {@link module:engine/view/downcastwriter~DowncastWriter view downcast writer} to apply changes to the view document.\n *\n * You can read more about conversion in the following guide:\n *\n * * {@glink framework/deep-dive/conversion/downcast Downcast conversion}\n *\n * An example of a custom converter for the downcast dispatcher:\n *\n * ```ts\n * // You will convert inserting a \"paragraph\" model element into the model.\n * downcastDispatcher.on( 'insert:paragraph', ( evt, data, conversionApi ) => {\n * \t// Remember to check whether the change has not been consumed yet and consume it.\n * \tif ( !conversionApi.consumable.consume( data.item, 'insert' ) ) {\n * \t\treturn;\n * \t}\n *\n * \t// Translate the position in the model to a position in the view.\n * \tconst viewPosition = conversionApi.mapper.toViewPosition( data.range.start );\n *\n * \t// Create a <p> element that will be inserted into the view at the `viewPosition`.\n * \tconst viewElement = conversionApi.writer.createContainerElement( 'p' );\n *\n * \t// Bind the newly created view element to the model element so positions will map accordingly in the future.\n * \tconversionApi.mapper.bindElements( data.item, viewElement );\n *\n * \t// Add the newly created view element to the view.\n * \tconversionApi.writer.insert( viewPosition, viewElement );\n * } );\n * ```\n */\nexport default class DowncastDispatcher extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates a downcast dispatcher instance.\n     *\n     * @see module:engine/conversion/downcastdispatcher~DowncastConversionApi\n     *\n     * @param conversionApi Additional properties for an interface that will be passed to events fired\n     * by the downcast dispatcher.\n     */\n    constructor(conversionApi) {\n        super();\n        this._conversionApi = { dispatcher: this, ...conversionApi };\n        this._firedEventsMap = new WeakMap();\n    }\n    /**\n     * Converts changes buffered in the given {@link module:engine/model/differ~Differ model differ}\n     * and fires conversion events based on it.\n     *\n     * @fires insert\n     * @fires remove\n     * @fires attribute\n     * @fires addMarker\n     * @fires removeMarker\n     * @fires reduceChanges\n     * @param differ The differ object with buffered changes.\n     * @param markers Markers related to the model fragment to convert.\n     * @param writer The view writer that should be used to modify the view document.\n     */\n    convertChanges(differ, markers, writer) {\n        const conversionApi = this._createConversionApi(writer, differ.getRefreshedItems());\n        // Before the view is updated, remove markers which have changed.\n        for (const change of differ.getMarkersToRemove()) {\n            this._convertMarkerRemove(change.name, change.range, conversionApi);\n        }\n        // Let features modify the change list (for example to allow reconversion).\n        const changes = this._reduceChanges(differ.getChanges());\n        // Convert changes that happened on model tree.\n        for (const entry of changes) {\n            if (entry.type === 'insert') {\n                this._convertInsert(Range._createFromPositionAndShift(entry.position, entry.length), conversionApi);\n            }\n            else if (entry.type === 'reinsert') {\n                this._convertReinsert(Range._createFromPositionAndShift(entry.position, entry.length), conversionApi);\n            }\n            else if (entry.type === 'remove') {\n                this._convertRemove(entry.position, entry.length, entry.name, conversionApi);\n            }\n            else {\n                // Defaults to 'attribute' change.\n                this._convertAttribute(entry.range, entry.attributeKey, entry.attributeOldValue, entry.attributeNewValue, conversionApi);\n            }\n        }\n        // Remove mappings for all removed view elements.\n        // Remove these mappings as soon as they are not needed (https://github.com/ckeditor/ckeditor5/issues/15411).\n        conversionApi.mapper.flushDeferredBindings();\n        for (const markerName of conversionApi.mapper.flushUnboundMarkerNames()) {\n            const markerRange = markers.get(markerName).getRange();\n            this._convertMarkerRemove(markerName, markerRange, conversionApi);\n            this._convertMarkerAdd(markerName, markerRange, conversionApi);\n        }\n        // After the view is updated, convert markers which have changed.\n        for (const change of differ.getMarkersToAdd()) {\n            this._convertMarkerAdd(change.name, change.range, conversionApi);\n        }\n        // Verify if all insert consumables were consumed.\n        conversionApi.consumable.verifyAllConsumed('insert');\n    }\n    /**\n     * Starts a conversion of a model range and the provided markers.\n     *\n     * @fires insert\n     * @fires attribute\n     * @fires addMarker\n     * @param range The inserted range.\n     * @param markers The map of markers that should be down-casted.\n     * @param writer The view writer that should be used to modify the view document.\n     * @param options Optional options object passed to `convertionApi.options`.\n     */\n    convert(range, markers, writer, options = {}) {\n        const conversionApi = this._createConversionApi(writer, undefined, options);\n        this._convertInsert(range, conversionApi);\n        for (const [name, range] of markers) {\n            this._convertMarkerAdd(name, range, conversionApi);\n        }\n        // Verify if all insert consumables were consumed.\n        conversionApi.consumable.verifyAllConsumed('insert');\n    }\n    /**\n     * Starts the model selection conversion.\n     *\n     * Fires events for a given {@link module:engine/model/selection~Selection selection} to start the selection conversion.\n     *\n     * @fires selection\n     * @fires addMarker\n     * @fires attribute\n     * @param selection The selection to convert.\n     * @param markers Markers connected with the converted model.\n     * @param writer View writer that should be used to modify the view document.\n     */\n    convertSelection(selection, markers, writer) {\n        const conversionApi = this._createConversionApi(writer);\n        // First perform a clean-up at the current position of the selection.\n        this.fire('cleanSelection', { selection }, conversionApi);\n        // Don't convert selection if it is in a model root that does not have a view root (for now this is only the graveyard root).\n        const modelRoot = selection.getFirstPosition().root;\n        if (!conversionApi.mapper.toViewElement(modelRoot)) {\n            return;\n        }\n        // Now, perform actual selection conversion.\n        const markersAtSelection = Array.from(markers.getMarkersAtPosition(selection.getFirstPosition()));\n        this._addConsumablesForSelection(conversionApi.consumable, selection, markersAtSelection);\n        this.fire('selection', { selection }, conversionApi);\n        if (!selection.isCollapsed) {\n            return;\n        }\n        for (const marker of markersAtSelection) {\n            // Do not fire event if the marker has been consumed.\n            if (conversionApi.consumable.test(selection, 'addMarker:' + marker.name)) {\n                const markerRange = marker.getRange();\n                if (!shouldMarkerChangeBeConverted(selection.getFirstPosition(), marker, conversionApi.mapper)) {\n                    continue;\n                }\n                const data = {\n                    item: selection,\n                    markerName: marker.name,\n                    markerRange\n                };\n                this.fire(`addMarker:${marker.name}`, data, conversionApi);\n            }\n        }\n        for (const key of selection.getAttributeKeys()) {\n            // Do not fire event if the attribute has been consumed.\n            if (conversionApi.consumable.test(selection, 'attribute:' + key)) {\n                const data = {\n                    item: selection,\n                    range: selection.getFirstRange(),\n                    attributeKey: key,\n                    attributeOldValue: null,\n                    attributeNewValue: selection.getAttribute(key)\n                };\n                this.fire(`attribute:${key}:$text`, data, conversionApi);\n            }\n        }\n    }\n    /**\n     * Fires insertion conversion of a range of nodes.\n     *\n     * For each node in the range, {@link #event:insert `insert` event is fired}. For each attribute on each node,\n     * {@link #event:attribute `attribute` event is fired}.\n     *\n     * @fires insert\n     * @fires attribute\n     * @param range The inserted range.\n     * @param conversionApi The conversion API object.\n     * @param options.doNotAddConsumables Whether the ModelConsumable should not get populated\n     * for items in the provided range.\n     */\n    _convertInsert(range, conversionApi, options = {}) {\n        if (!options.doNotAddConsumables) {\n            // Collect a list of things that can be consumed, consisting of nodes and their attributes.\n            this._addConsumablesForInsert(conversionApi.consumable, range);\n        }\n        // Fire a separate insert event for each node and text fragment contained in the range.\n        for (const data of Array.from(range.getWalker({ shallow: true })).map(walkerValueToEventData)) {\n            this._testAndFire('insert', data, conversionApi);\n        }\n    }\n    /**\n     * Fires conversion of a single node removal. Fires {@link #event:remove remove event} with provided data.\n     *\n     * @param position Position from which node was removed.\n     * @param length Offset size of removed node.\n     * @param name Name of removed node.\n     * @param conversionApi The conversion API object.\n     */\n    _convertRemove(position, length, name, conversionApi) {\n        this.fire(`remove:${name}`, { position, length }, conversionApi);\n    }\n    /**\n     * Starts a conversion of an attribute change on a given `range`.\n     *\n     * For each node in the given `range`, {@link #event:attribute attribute event} is fired with the passed data.\n     *\n     * @fires attribute\n     * @param range Changed range.\n     * @param key Key of the attribute that has changed.\n     * @param oldValue Attribute value before the change or `null` if the attribute has not been set before.\n     * @param newValue New attribute value or `null` if the attribute has been removed.\n     * @param conversionApi The conversion API object.\n     */\n    _convertAttribute(range, key, oldValue, newValue, conversionApi) {\n        // Create a list with attributes to consume.\n        this._addConsumablesForRange(conversionApi.consumable, range, `attribute:${key}`);\n        // Create a separate attribute event for each node in the range.\n        for (const value of range) {\n            const data = {\n                item: value.item,\n                range: Range._createFromPositionAndShift(value.previousPosition, value.length),\n                attributeKey: key,\n                attributeOldValue: oldValue,\n                attributeNewValue: newValue\n            };\n            this._testAndFire(`attribute:${key}`, data, conversionApi);\n        }\n    }\n    /**\n     * Fires re-insertion conversion (with a `reconversion` flag passed to `insert` events)\n     * of a range of elements (only elements on the range depth, without children).\n     *\n     * For each node in the range on its depth (without children), {@link #event:insert `insert` event} is fired.\n     * For each attribute on each node, {@link #event:attribute `attribute` event} is fired.\n     *\n     * @fires insert\n     * @fires attribute\n     * @param range The range to reinsert.\n     * @param conversionApi The conversion API object.\n     */\n    _convertReinsert(range, conversionApi) {\n        // Convert the elements - without converting children.\n        const walkerValues = Array.from(range.getWalker({ shallow: true }));\n        // Collect a list of things that can be consumed, consisting of nodes and their attributes.\n        this._addConsumablesForInsert(conversionApi.consumable, walkerValues);\n        // Fire a separate insert event for each node and text fragment contained shallowly in the range.\n        for (const data of walkerValues.map(walkerValueToEventData)) {\n            this._testAndFire('insert', { ...data, reconversion: true }, conversionApi);\n        }\n    }\n    /**\n     * Converts the added marker. Fires the {@link #event:addMarker `addMarker`} event for each item\n     * in the marker's range. If the range is collapsed, a single event is dispatched. See the event description for more details.\n     *\n     * @fires addMarker\n     * @param markerName Marker name.\n     * @param markerRange The marker range.\n     * @param conversionApi The conversion API object.\n     */\n    _convertMarkerAdd(markerName, markerRange, conversionApi) {\n        // Do not convert if range is in graveyard.\n        if (markerRange.root.rootName == '$graveyard') {\n            return;\n        }\n        // In markers' case, event name == consumable name.\n        const eventName = `addMarker:${markerName}`;\n        //\n        // First, fire an event for the whole marker.\n        //\n        conversionApi.consumable.add(markerRange, eventName);\n        this.fire(eventName, { markerName, markerRange }, conversionApi);\n        //\n        // Do not fire events for each item inside the range if the range got consumed.\n        // Also consume the whole marker consumable if it wasn't consumed.\n        //\n        if (!conversionApi.consumable.consume(markerRange, eventName)) {\n            return;\n        }\n        //\n        // Then, fire an event for each item inside the marker range.\n        //\n        this._addConsumablesForRange(conversionApi.consumable, markerRange, eventName);\n        for (const item of markerRange.getItems()) {\n            // Do not fire event for already consumed items.\n            if (!conversionApi.consumable.test(item, eventName)) {\n                continue;\n            }\n            const data = { item, range: Range._createOn(item), markerName, markerRange };\n            this.fire(eventName, data, conversionApi);\n        }\n    }\n    /**\n     * Fires the conversion of the marker removal. Fires the {@link #event:removeMarker `removeMarker`} event with the provided data.\n     *\n     * @fires removeMarker\n     * @param markerName Marker name.\n     * @param markerRange The marker range.\n     * @param conversionApi The conversion API object.\n     */\n    _convertMarkerRemove(markerName, markerRange, conversionApi) {\n        // Do not convert if range is in graveyard.\n        if (markerRange.root.rootName == '$graveyard') {\n            return;\n        }\n        this.fire(`removeMarker:${markerName}`, { markerName, markerRange }, conversionApi);\n    }\n    /**\n     * Fires the reduction of changes buffered in the {@link module:engine/model/differ~Differ `Differ`}.\n     *\n     * Features can replace selected {@link module:engine/model/differ~DiffItem `DiffItem`}s with `reinsert` entries to trigger\n     * reconversion. The {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure\n     * `DowncastHelpers.elementToStructure()`} is using this event to trigger reconversion.\n     *\n     * @fires reduceChanges\n     */\n    _reduceChanges(changes) {\n        const data = { changes };\n        this.fire('reduceChanges', data);\n        return data.changes;\n    }\n    /**\n     * Populates provided {@link module:engine/conversion/modelconsumable~ModelConsumable} with values to consume from a given range,\n     * assuming that the range has just been inserted to the model.\n     *\n     * @param consumable The consumable.\n     * @param walkerValues The walker values for the inserted range.\n     * @returns The values to consume.\n     */\n    _addConsumablesForInsert(consumable, walkerValues) {\n        for (const value of walkerValues) {\n            const item = value.item;\n            // Add consumable if it wasn't there yet.\n            if (consumable.test(item, 'insert') === null) {\n                consumable.add(item, 'insert');\n                for (const key of item.getAttributeKeys()) {\n                    consumable.add(item, 'attribute:' + key);\n                }\n            }\n        }\n        return consumable;\n    }\n    /**\n     * Populates provided {@link module:engine/conversion/modelconsumable~ModelConsumable} with values to consume for a given range.\n     *\n     * @param consumable The consumable.\n     * @param range The affected range.\n     * @param type Consumable type.\n     * @returns The values to consume.\n     */\n    _addConsumablesForRange(consumable, range, type) {\n        for (const item of range.getItems()) {\n            consumable.add(item, type);\n        }\n        return consumable;\n    }\n    /**\n     * Populates provided {@link module:engine/conversion/modelconsumable~ModelConsumable} with selection consumable values.\n     *\n     * @param consumable The consumable.\n     * @param selection The selection to create the consumable from.\n     * @param markers Markers that contain the selection.\n     * @returns The values to consume.\n     */\n    _addConsumablesForSelection(consumable, selection, markers) {\n        consumable.add(selection, 'selection');\n        for (const marker of markers) {\n            consumable.add(selection, 'addMarker:' + marker.name);\n        }\n        for (const key of selection.getAttributeKeys()) {\n            consumable.add(selection, 'attribute:' + key);\n        }\n        return consumable;\n    }\n    /**\n     * Tests whether given event wasn't already fired and if so, fires it.\n     *\n     * @fires insert\n     * @fires attribute\n     * @param type Event type.\n     * @param data Event data.\n     * @param conversionApi The conversion API object.\n     */\n    _testAndFire(type, data, conversionApi) {\n        const eventName = getEventName(type, data);\n        const itemKey = data.item.is('$textProxy') ? conversionApi.consumable._getSymbolForTextProxy(data.item) : data.item;\n        const eventsFiredForConversion = this._firedEventsMap.get(conversionApi);\n        const eventsFiredForItem = eventsFiredForConversion.get(itemKey);\n        if (!eventsFiredForItem) {\n            eventsFiredForConversion.set(itemKey, new Set([eventName]));\n        }\n        else if (!eventsFiredForItem.has(eventName)) {\n            eventsFiredForItem.add(eventName);\n        }\n        else {\n            return;\n        }\n        this.fire(eventName, data, conversionApi);\n    }\n    /**\n     * Fires not already fired events for setting attributes on just inserted item.\n     *\n     * @param item The model item to convert attributes for.\n     * @param conversionApi The conversion API object.\n     */\n    _testAndFireAddAttributes(item, conversionApi) {\n        const data = {\n            item,\n            range: Range._createOn(item)\n        };\n        for (const key of data.item.getAttributeKeys()) {\n            data.attributeKey = key;\n            data.attributeOldValue = null;\n            data.attributeNewValue = data.item.getAttribute(key);\n            this._testAndFire(`attribute:${key}`, data, conversionApi);\n        }\n    }\n    /**\n     * Builds an instance of the {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi} from a template and a given\n     * {@link module:engine/view/downcastwriter~DowncastWriter `DowncastWriter`} and options object.\n     *\n     * @param writer View writer that should be used to modify the view document.\n     * @param refreshedItems A set of model elements that should not reuse their\n     * previous view representations.\n     * @param options Optional options passed to `convertionApi.options`.\n     * @return The conversion API object.\n     */\n    _createConversionApi(writer, refreshedItems = new Set(), options = {}) {\n        const conversionApi = {\n            ...this._conversionApi,\n            consumable: new Consumable(),\n            writer,\n            options,\n            convertItem: item => this._convertInsert(Range._createOn(item), conversionApi),\n            convertChildren: element => this._convertInsert(Range._createIn(element), conversionApi, { doNotAddConsumables: true }),\n            convertAttributes: item => this._testAndFireAddAttributes(item, conversionApi),\n            canReuseView: viewElement => !refreshedItems.has(conversionApi.mapper.toModelElement(viewElement))\n        };\n        this._firedEventsMap.set(conversionApi, new Map());\n        return conversionApi;\n    }\n}\n/**\n * Helper function, checks whether change of `marker` at `modelPosition` should be converted. Marker changes are not\n * converted if they happen inside an element with custom conversion method.\n */\nfunction shouldMarkerChangeBeConverted(modelPosition, marker, mapper) {\n    const range = marker.getRange();\n    const ancestors = Array.from(modelPosition.getAncestors());\n    ancestors.shift(); // Remove root element. It cannot be passed to `model.Range#containsItem`.\n    ancestors.reverse();\n    const hasCustomHandling = ancestors.some(element => {\n        if (range.containsItem(element)) {\n            const viewElement = mapper.toViewElement(element);\n            return !!viewElement.getCustomProperty('addHighlight');\n        }\n    });\n    return !hasCustomHandling;\n}\nfunction getEventName(type, data) {\n    const name = data.item.is('element') ? data.item.name : '$text';\n    return `${type}:${name}`;\n}\nfunction walkerValueToEventData(value) {\n    const item = value.item;\n    const itemRange = Range._createFromPositionAndShift(value.previousPosition, value.length);\n    return {\n        item,\n        range: itemRange\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/selection\n */\nimport TypeCheckable from './typecheckable.js';\nimport Node from './node.js';\nimport Position from './position.js';\nimport Range from './range.js';\nimport { CKEditorError, EmitterMixin, isIterable } from '@ckeditor/ckeditor5-utils';\n/**\n * Selection is a set of {@link module:engine/model/range~Range ranges}. It has a direction specified by its\n * {@link module:engine/model/selection~Selection#anchor anchor} and {@link module:engine/model/selection~Selection#focus focus}\n * (it can be {@link module:engine/model/selection~Selection#isBackward forward or backward}).\n * Additionally, selection may have its own attributes (think – whether text typed in in this selection\n * should have those attributes – e.g. whether you type a bolded text).\n */\nexport default class Selection extends /* #__PURE__ */ EmitterMixin(TypeCheckable) {\n    /**\n     * Creates a new selection instance based on the given {@link module:engine/model/selection~Selectable selectable}\n     * or creates an empty selection if no arguments were passed.\n     *\n     * ```ts\n     * // Creates empty selection without ranges.\n     * const selection = writer.createSelection();\n     *\n     * // Creates selection at the given range.\n     * const range = writer.createRange( start, end );\n     * const selection = writer.createSelection( range );\n     *\n     * // Creates selection at the given ranges\n     * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     * const selection = writer.createSelection( ranges );\n     *\n     * // Creates selection from the other selection.\n     * // Note: It doesn't copy selection attributes.\n     * const otherSelection = writer.createSelection();\n     * const selection = writer.createSelection( otherSelection );\n     *\n     * // Creates selection from the given document selection.\n     * // Note: It doesn't copy selection attributes.\n     * const documentSelection = model.document.selection;\n     * const selection = writer.createSelection( documentSelection );\n     *\n     * // Creates selection at the given position.\n     * const position = writer.createPositionFromPath( root, path );\n     * const selection = writer.createSelection( position );\n     *\n     * // Creates selection at the given offset in the given element.\n     * const paragraph = writer.createElement( 'paragraph' );\n     * const selection = writer.createSelection( paragraph, offset );\n     *\n     * // Creates a range inside an {@link module:engine/model/element~Element element} which starts before the\n     * // first child of that element and ends after the last child of that element.\n     * const selection = writer.createSelection( paragraph, 'in' );\n     *\n     * // Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends\n     * // just after the item.\n     * const selection = writer.createSelection( paragraph, 'on' );\n     * ```\n     *\n     * Selection's constructor allow passing additional options (`'backward'`) as the last argument.\n     *\n     * ```ts\n     * // Creates backward selection.\n     * const selection = writer.createSelection( range, { backward: true } );\n     * ```\n     *\n     * @internal\n     */\n    constructor(...args) {\n        super();\n        /**\n         * Specifies whether the last added range was added as a backward or forward range.\n         */\n        this._lastRangeBackward = false;\n        /**\n         * List of attributes set on current selection.\n         */\n        this._attrs = new Map();\n        /** @internal */\n        this._ranges = [];\n        if (args.length) {\n            this.setTo(...args);\n        }\n    }\n    /**\n     * Selection anchor. Anchor is the position from which the selection was started. If a user is making a selection\n     * by dragging the mouse, the anchor is where the user pressed the mouse button (the beginning of the selection).\n     *\n     * Anchor and {@link #focus} define the direction of the selection, which is important\n     * when expanding/shrinking selection. The focus moves, while the anchor should remain in the same place.\n     *\n     * Anchor is always set to the {@link module:engine/model/range~Range#start start} or\n     * {@link module:engine/model/range~Range#end end} position of the last of selection's ranges. Whether it is\n     * the `start` or `end` depends on the specified `options.backward`. See the {@link #setTo `setTo()`} method.\n     *\n     * May be set to `null` if there are no ranges in the selection.\n     *\n     * @see #focus\n     */\n    get anchor() {\n        if (this._ranges.length > 0) {\n            const range = this._ranges[this._ranges.length - 1];\n            return this._lastRangeBackward ? range.end : range.start;\n        }\n        return null;\n    }\n    /**\n     * Selection focus. Focus is the position where the selection ends. If a user is making a selection\n     * by dragging the mouse, the focus is where the mouse cursor is.\n     *\n     * May be set to `null` if there are no ranges in the selection.\n     *\n     * @see #anchor\n     */\n    get focus() {\n        if (this._ranges.length > 0) {\n            const range = this._ranges[this._ranges.length - 1];\n            return this._lastRangeBackward ? range.start : range.end;\n        }\n        return null;\n    }\n    /**\n     * Whether the selection is collapsed. Selection is collapsed when there is exactly one range in it\n     * and it is collapsed.\n     */\n    get isCollapsed() {\n        const length = this._ranges.length;\n        if (length === 1) {\n            return this._ranges[0].isCollapsed;\n        }\n        else {\n            return false;\n        }\n    }\n    /**\n     * Returns the number of ranges in the selection.\n     */\n    get rangeCount() {\n        return this._ranges.length;\n    }\n    /**\n     * Specifies whether the selection's {@link #focus} precedes the selection's {@link #anchor}.\n     */\n    get isBackward() {\n        return !this.isCollapsed && this._lastRangeBackward;\n    }\n    /**\n     * Checks whether this selection is equal to the given selection. Selections are equal if they have the same directions,\n     * the same number of ranges and all ranges from one selection equal to ranges from the another selection.\n     *\n     * @param otherSelection Selection to compare with.\n     * @returns `true` if selections are equal, `false` otherwise.\n     */\n    isEqual(otherSelection) {\n        if (this.rangeCount != otherSelection.rangeCount) {\n            return false;\n        }\n        else if (this.rangeCount === 0) {\n            return true;\n        }\n        if (!this.anchor.isEqual(otherSelection.anchor) || !this.focus.isEqual(otherSelection.focus)) {\n            return false;\n        }\n        for (const thisRange of this._ranges) {\n            let found = false;\n            for (const otherRange of otherSelection._ranges) {\n                if (thisRange.isEqual(otherRange)) {\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Returns an iterable object that iterates over copies of selection ranges.\n     */\n    *getRanges() {\n        for (const range of this._ranges) {\n            yield new Range(range.start, range.end);\n        }\n    }\n    /**\n     * Returns a copy of the first range in the selection.\n     * First range is the one which {@link module:engine/model/range~Range#start start} position\n     * {@link module:engine/model/position~Position#isBefore is before} start position of all other ranges\n     * (not to confuse with the first range added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getFirstRange() {\n        let first = null;\n        for (const range of this._ranges) {\n            if (!first || range.start.isBefore(first.start)) {\n                first = range;\n            }\n        }\n        return first ? new Range(first.start, first.end) : null;\n    }\n    /**\n     * Returns a copy of the last range in the selection.\n     * Last range is the one which {@link module:engine/model/range~Range#end end} position\n     * {@link module:engine/model/position~Position#isAfter is after} end position of all other ranges (not to confuse with the range most\n     * recently added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getLastRange() {\n        let last = null;\n        for (const range of this._ranges) {\n            if (!last || range.end.isAfter(last.end)) {\n                last = range;\n            }\n        }\n        return last ? new Range(last.start, last.end) : null;\n    }\n    /**\n     * Returns the first position in the selection.\n     * First position is the position that {@link module:engine/model/position~Position#isBefore is before}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getFirstPosition() {\n        const first = this.getFirstRange();\n        return first ? first.start.clone() : null;\n    }\n    /**\n     * Returns the last position in the selection.\n     * Last position is the position that {@link module:engine/model/position~Position#isAfter is after}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getLastPosition() {\n        const lastRange = this.getLastRange();\n        return lastRange ? lastRange.end.clone() : null;\n    }\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/model/selection~Selectable selectable}.\n     *\n     * ```ts\n     * // Removes all selection's ranges.\n     * selection.setTo( null );\n     *\n     * // Sets selection to the given range.\n     * const range = writer.createRange( start, end );\n     * selection.setTo( range );\n     *\n     * // Sets selection to given ranges.\n     * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n     * selection.setTo( ranges );\n     *\n     * // Sets selection to other selection.\n     * // Note: It doesn't copy selection attributes.\n     * const otherSelection = writer.createSelection();\n     * selection.setTo( otherSelection );\n     *\n     * // Sets selection to the given document selection.\n     * // Note: It doesn't copy selection attributes.\n     * const documentSelection = new DocumentSelection( doc );\n     * selection.setTo( documentSelection );\n     *\n     * // Sets collapsed selection at the given position.\n     * const position = writer.createPositionFromPath( root, path );\n     * selection.setTo( position );\n     *\n     * // Sets collapsed selection at the position of the given node and an offset.\n     * selection.setTo( paragraph, offset );\n     * ```\n     *\n     * Creates a range inside an {@link module:engine/model/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * ```ts\n     * selection.setTo( paragraph, 'in' );\n     * ```\n     *\n     * Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends just after the item.\n     *\n     * ```ts\n     * selection.setTo( paragraph, 'on' );\n     * ```\n     *\n     * `Selection#setTo()`' method allow passing additional options (`backward`) as the last argument.\n     *\n     * ```ts\n     * // Sets backward selection.\n     * const selection = writer.createSelection( range, { backward: true } );\n     * ```\n     */\n    setTo(...args) {\n        let [selectable, placeOrOffset, options] = args;\n        if (typeof placeOrOffset == 'object') {\n            options = placeOrOffset;\n            placeOrOffset = undefined;\n        }\n        if (selectable === null) {\n            this._setRanges([]);\n        }\n        else if (selectable instanceof Selection) {\n            this._setRanges(selectable.getRanges(), selectable.isBackward);\n        }\n        else if (selectable && typeof selectable.getRanges == 'function') {\n            // We assume that the selectable is a DocumentSelection.\n            // It can't be imported here, because it would lead to circular imports.\n            this._setRanges(selectable.getRanges(), selectable.isBackward);\n        }\n        else if (selectable instanceof Range) {\n            this._setRanges([selectable], !!options && !!options.backward);\n        }\n        else if (selectable instanceof Position) {\n            this._setRanges([new Range(selectable)]);\n        }\n        else if (selectable instanceof Node) {\n            const backward = !!options && !!options.backward;\n            let range;\n            if (placeOrOffset == 'in') {\n                range = Range._createIn(selectable);\n            }\n            else if (placeOrOffset == 'on') {\n                range = Range._createOn(selectable);\n            }\n            else if (placeOrOffset !== undefined) {\n                range = new Range(Position._createAt(selectable, placeOrOffset));\n            }\n            else {\n                /**\n                 * selection.setTo requires the second parameter when the first parameter is a node.\n                 *\n                 * @error model-selection-setto-required-second-parameter\n                 */\n                throw new CKEditorError('model-selection-setto-required-second-parameter', [this, selectable]);\n            }\n            this._setRanges([range], backward);\n        }\n        else if (isIterable(selectable)) {\n            // We assume that the selectable is an iterable of ranges.\n            this._setRanges(selectable, options && !!options.backward);\n        }\n        else {\n            /**\n             * Cannot set the selection to the given place.\n             *\n             * Invalid parameters were specified when setting the selection. Common issues:\n             *\n             * * A {@link module:engine/model/textproxy~TextProxy} instance was passed instead of\n             * a real {@link module:engine/model/text~Text}.\n             * * View nodes were passed instead of model nodes.\n             * * `null`/`undefined` was passed.\n             *\n             * @error model-selection-setto-not-selectable\n             */\n            throw new CKEditorError('model-selection-setto-not-selectable', [this, selectable]);\n        }\n    }\n    /**\n     * Replaces all ranges that were added to the selection with given array of ranges. Last range of the array\n     * is treated like the last added range and is used to set {@link module:engine/model/selection~Selection#anchor} and\n     * {@link module:engine/model/selection~Selection#focus}. Accepts a flag describing in which direction the selection is made.\n     *\n     * @fires change:range\n     * @param newRanges Ranges to set.\n     * @param isLastBackward Flag describing if last added range was selected forward - from start to end (`false`)\n     * or backward - from end to start (`true`).\n     */\n    _setRanges(newRanges, isLastBackward = false) {\n        const ranges = Array.from(newRanges);\n        // Check whether there is any range in new ranges set that is different than all already added ranges.\n        const anyNewRange = ranges.some(newRange => {\n            if (!(newRange instanceof Range)) {\n                /**\n                 * Selection range set to an object that is not an instance of {@link module:engine/model/range~Range}.\n                 *\n                 * Only {@link module:engine/model/range~Range} instances can be used to set a selection.\n                 * Common mistakes leading to this error are:\n                 *\n                 * * using DOM `Range` object,\n                 * * incorrect CKEditor 5 installation with multiple `ckeditor5-engine` packages having different versions.\n                 *\n                 * @error model-selection-set-ranges-not-range\n                 */\n                throw new CKEditorError('model-selection-set-ranges-not-range', [this, newRanges]);\n            }\n            return this._ranges.every(oldRange => {\n                return !oldRange.isEqual(newRange);\n            });\n        });\n        // Don't do anything if nothing changed.\n        if (ranges.length === this._ranges.length && !anyNewRange) {\n            return;\n        }\n        this._replaceAllRanges(ranges);\n        this._lastRangeBackward = !!isLastBackward;\n        this.fire('change:range', { directChange: true });\n    }\n    /**\n     * Moves {@link module:engine/model/selection~Selection#focus} to the specified location.\n     *\n     * The location can be specified in the same form as\n     * {@link module:engine/model/writer~Writer#createPositionAt writer.createPositionAt()} parameters.\n     *\n     * @fires change:range\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    setFocus(itemOrPosition, offset) {\n        if (this.anchor === null) {\n            /**\n             * Cannot set selection focus if there are no ranges in selection.\n             *\n             * @error model-selection-setfocus-no-ranges\n             */\n            throw new CKEditorError('model-selection-setfocus-no-ranges', [this, itemOrPosition]);\n        }\n        const newFocus = Position._createAt(itemOrPosition, offset);\n        if (newFocus.compareWith(this.focus) == 'same') {\n            return;\n        }\n        const anchor = this.anchor;\n        if (this._ranges.length) {\n            this._popRange();\n        }\n        if (newFocus.compareWith(anchor) == 'before') {\n            this._pushRange(new Range(newFocus, anchor));\n            this._lastRangeBackward = true;\n        }\n        else {\n            this._pushRange(new Range(anchor, newFocus));\n            this._lastRangeBackward = false;\n        }\n        this.fire('change:range', { directChange: true });\n    }\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on the selection.\n     *\n     * @param key Key of attribute to look for.\n     * @returns Attribute value or `undefined`.\n     */\n    getAttribute(key) {\n        return this._attrs.get(key);\n    }\n    /**\n     * Returns iterable that iterates over this selection's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     */\n    getAttributes() {\n        return this._attrs.entries();\n    }\n    /**\n     * Returns iterable that iterates over this selection's attribute keys.\n     */\n    getAttributeKeys() {\n        return this._attrs.keys();\n    }\n    /**\n     * Checks if the selection has an attribute for given key.\n     *\n     * @param key Key of attribute to check.\n     * @returns `true` if attribute with given key is set on selection, `false` otherwise.\n     */\n    hasAttribute(key) {\n        return this._attrs.has(key);\n    }\n    /**\n     * Removes an attribute with given key from the selection.\n     *\n     * If given attribute was set on the selection, fires the {@link #event:change:range} event with\n     * removed attribute key.\n     *\n     * @fires change:attribute\n     * @param key Key of attribute to remove.\n     */\n    removeAttribute(key) {\n        if (this.hasAttribute(key)) {\n            this._attrs.delete(key);\n            this.fire('change:attribute', { attributeKeys: [key], directChange: true });\n        }\n    }\n    /**\n     * Sets attribute on the selection. If attribute with the same key already is set, it's value is overwritten.\n     *\n     * If the attribute value has changed, fires the {@link #event:change:range} event with\n     * the attribute key.\n     *\n     * @fires change:attribute\n     * @param key Key of attribute to set.\n     * @param value Attribute value.\n     */\n    setAttribute(key, value) {\n        if (this.getAttribute(key) !== value) {\n            this._attrs.set(key, value);\n            this.fire('change:attribute', { attributeKeys: [key], directChange: true });\n        }\n    }\n    /**\n     * Returns the selected element. {@link module:engine/model/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     */\n    getSelectedElement() {\n        if (this.rangeCount !== 1) {\n            return null;\n        }\n        return this.getFirstRange().getContainedElement();\n    }\n    /**\n     * Gets elements of type {@link module:engine/model/schema~Schema#isBlock \"block\"} touched by the selection.\n     *\n     * This method's result can be used for example to apply block styling to all blocks covered by this selection.\n     *\n     * **Note:** `getSelectedBlocks()` returns blocks that are nested in other non-block elements\n     * but will not return blocks nested in other blocks.\n     *\n     * In this case the function will return exactly all 3 paragraphs (note: `<blockQuote>` is not a block itself):\n     *\n     * ```xml\n     * <paragraph>[a</paragraph>\n     * <blockQuote>\n     * \t<paragraph>b</paragraph>\n     * </blockQuote>\n     * <paragraph>c]d</paragraph>\n     * ```\n     *\n     * In this case the paragraph will also be returned, despite the collapsed selection:\n     *\n     * ```xml\n     * <paragraph>[]a</paragraph>\n     * ```\n     *\n     * In such a scenario, however, only blocks A, B & E will be returned as blocks C & D are nested in block B:\n     *\n     * ```xml\n     * [<blockA></blockA>\n     * <blockB>\n     * \t<blockC></blockC>\n     * \t<blockD></blockD>\n     * </blockB>\n     * <blockE></blockE>]\n     * ```\n     *\n     * If the selection is inside a block all the inner blocks (A & B) are returned:\n     *\n     * ```xml\n     * <block>\n     * \t<blockA>[a</blockA>\n     * \t<blockB>b]</blockB>\n     * </block>\n     * ```\n     *\n     * **Special case**: Selection ignores first and/or last blocks if nothing (from user perspective) is selected in them.\n     *\n     * ```xml\n     * // Selection ends and the beginning of the last block.\n     * <paragraph>[a</paragraph>\n     * <paragraph>b</paragraph>\n     * <paragraph>]c</paragraph> // This block will not be returned\n     *\n     * // Selection begins at the end of the first block.\n     * <paragraph>a[</paragraph> // This block will not be returned\n     * <paragraph>b</paragraph>\n     * <paragraph>c]</paragraph>\n     *\n     * // Selection begings at the end of the first block and ends at the beginning of the last block.\n     * <paragraph>a[</paragraph> // This block will not be returned\n     * <paragraph>b</paragraph>\n     * <paragraph>]c</paragraph> // This block will not be returned\n     * ```\n     */\n    *getSelectedBlocks() {\n        const visited = new WeakSet();\n        for (const range of this.getRanges()) {\n            // Get start block of range in case of a collapsed range.\n            const startBlock = getParentBlock(range.start, visited);\n            if (isStartBlockSelected(startBlock, range)) {\n                yield startBlock;\n            }\n            for (const value of range.getWalker()) {\n                const block = value.item;\n                if (value.type == 'elementEnd' && isUnvisitedTopBlock(block, visited, range)) {\n                    yield block;\n                }\n            }\n            const endBlock = getParentBlock(range.end, visited);\n            if (isEndBlockSelected(endBlock, range)) {\n                yield endBlock;\n            }\n        }\n    }\n    /**\n     * Checks whether the selection contains the entire content of the given element. This means that selection must start\n     * at a position {@link module:engine/model/position~Position#isTouching touching} the element's start and ends at position\n     * touching the element's end.\n     *\n     * By default, this method will check whether the entire content of the selection's current root is selected.\n     * Useful to check if e.g. the user has just pressed <kbd>Ctrl</kbd> + <kbd>A</kbd>.\n     */\n    containsEntireContent(element = this.anchor.root) {\n        const limitStartPosition = Position._createAt(element, 0);\n        const limitEndPosition = Position._createAt(element, 'end');\n        return limitStartPosition.isTouching(this.getFirstPosition()) &&\n            limitEndPosition.isTouching(this.getLastPosition());\n    }\n    /**\n     * Adds given range to internal {@link #_ranges ranges array}. Throws an error\n     * if given range is intersecting with any range that is already stored in this selection.\n     */\n    _pushRange(range) {\n        this._checkRange(range);\n        this._ranges.push(new Range(range.start, range.end));\n    }\n    /**\n     * Checks if given range intersects with ranges that are already in the selection. Throws an error if it does.\n     */\n    _checkRange(range) {\n        for (let i = 0; i < this._ranges.length; i++) {\n            if (range.isIntersecting(this._ranges[i])) {\n                /**\n                 * Trying to add a range that intersects with another range in the selection.\n                 *\n                 * @error model-selection-range-intersects\n                 * @param addedRange Range that was added to the selection.\n                 * @param intersectingRange Range in the selection that intersects with `addedRange`.\n                 */\n                throw new CKEditorError('model-selection-range-intersects', [this, range], { addedRange: range, intersectingRange: this._ranges[i] });\n            }\n        }\n    }\n    /**\n     * Replaces all the ranges by the given ones.\n     * Uses {@link #_popRange _popRange} and {@link #_pushRange _pushRange} to ensure proper ranges removal and addition.\n     */\n    _replaceAllRanges(ranges) {\n        this._removeAllRanges();\n        for (const range of ranges) {\n            this._pushRange(range);\n        }\n    }\n    /**\n     * Deletes ranges from internal range array. Uses {@link #_popRange _popRange} to\n     * ensure proper ranges removal.\n     */\n    _removeAllRanges() {\n        while (this._ranges.length > 0) {\n            this._popRange();\n        }\n    }\n    /**\n     * Removes most recently added range from the selection.\n     */\n    _popRange() {\n        this._ranges.pop();\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nSelection.prototype.is = function (type) {\n    return type === 'selection' || type === 'model:selection';\n};\n/**\n * Checks whether the given element extends $block in the schema and has a parent (is not a root).\n * Marks it as already visited.\n */\nfunction isUnvisitedBlock(element, visited) {\n    if (visited.has(element)) {\n        return false;\n    }\n    visited.add(element);\n    return element.root.document.model.schema.isBlock(element) && !!element.parent;\n}\n/**\n * Checks if the given element is a $block was not previously visited and is a top block in a range.\n */\nfunction isUnvisitedTopBlock(element, visited, range) {\n    return isUnvisitedBlock(element, visited) && isTopBlockInRange(element, range);\n}\n/**\n * Finds the lowest element in position's ancestors which is a block.\n * It will search until first ancestor that is a limit element.\n * Marks all ancestors as already visited to not include any of them later on.\n */\nfunction getParentBlock(position, visited) {\n    const element = position.parent;\n    const schema = element.root.document.model.schema;\n    const ancestors = position.parent.getAncestors({ parentFirst: true, includeSelf: true });\n    let hasParentLimit = false;\n    const block = ancestors.find((element) => {\n        // Stop searching after first parent node that is limit element.\n        if (hasParentLimit) {\n            return false;\n        }\n        hasParentLimit = schema.isLimit(element);\n        return !hasParentLimit && isUnvisitedBlock(element, visited);\n    });\n    // Mark all ancestors of this position's parent, because find() might've stopped early and\n    // the found block may be a child of another block.\n    ancestors.forEach(element => visited.add(element));\n    return block;\n}\n/**\n * Checks if the blocks is not nested in other block inside a range.\n */\nfunction isTopBlockInRange(block, range) {\n    const parentBlock = findAncestorBlock(block);\n    if (!parentBlock) {\n        return true;\n    }\n    // Add loose flag to check as parentRange can be equal to range.\n    const isParentInRange = range.containsRange(Range._createOn(parentBlock), true);\n    return !isParentInRange;\n}\n/**\n * If a selection starts at the end of a block, that block is not returned as from the user's perspective this block wasn't selected.\n * See [#11585](https://github.com/ckeditor/ckeditor5/issues/11585) for more details.\n *\n * ```xml\n * <paragraph>a[</paragraph> // This block will not be returned\n * <paragraph>b</paragraph>\n * <paragraph>c]</paragraph>\n * ```\n *\n * Collapsed selection is not affected by it:\n *\n * ```xml\n * <paragraph>a[]</paragraph> // This block will be returned\n * ```\n */\nfunction isStartBlockSelected(startBlock, range) {\n    if (!startBlock) {\n        return false;\n    }\n    if (range.isCollapsed || startBlock.isEmpty) {\n        return true;\n    }\n    if (range.start.isTouching(Position._createAt(startBlock, startBlock.maxOffset))) {\n        return false;\n    }\n    return isTopBlockInRange(startBlock, range);\n}\n/**\n * If a selection ends at the beginning of a block, that block is not returned as from the user's perspective this block wasn't selected.\n * See [#984](https://github.com/ckeditor/ckeditor5-engine/issues/984) for more details.\n *\n * ```xml\n * <paragraph>[a</paragraph>\n * <paragraph>b</paragraph>\n * <paragraph>]c</paragraph> // this block will not be returned\n * ```\n *\n * Collapsed selection is not affected by it:\n *\n * ```xml\n * <paragraph>[]a</paragraph> // this block will be returned\n * ```\n */\nfunction isEndBlockSelected(endBlock, range) {\n    if (!endBlock) {\n        return false;\n    }\n    if (range.isCollapsed || endBlock.isEmpty) {\n        return true;\n    }\n    if (range.end.isTouching(Position._createAt(endBlock, 0))) {\n        return false;\n    }\n    return isTopBlockInRange(endBlock, range);\n}\n/**\n * Returns first ancestor block of a node.\n */\nfunction findAncestorBlock(node) {\n    const schema = node.root.document.model.schema;\n    let parent = node.parent;\n    while (parent) {\n        if (schema.isBlock(parent)) {\n            return parent;\n        }\n        parent = parent.parent;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/liverange\n */\nimport Range from './range.js';\nimport { EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * `LiveRange` is a type of {@link module:engine/model/range~Range Range}\n * that updates itself as {@link module:engine/model/document~Document document}\n * is changed through operations. It may be used as a bookmark.\n *\n * **Note:** Be very careful when dealing with `LiveRange`. Each `LiveRange` instance bind events that might\n * have to be unbound. Use {@link module:engine/model/liverange~LiveRange#detach detach} whenever you don't need `LiveRange` anymore.\n */\nexport default class LiveRange extends /* #__PURE__ */ EmitterMixin(Range) {\n    /**\n     * Creates a live range.\n     *\n     * @see module:engine/model/range~Range\n     */\n    constructor(start, end) {\n        super(start, end);\n        bindWithDocument.call(this);\n    }\n    /**\n     * Unbinds all events previously bound by `LiveRange`. Use it whenever you don't need `LiveRange` instance\n     * anymore (i.e. when leaving scope in which it was declared or before re-assigning variable that was\n     * referring to it).\n     */\n    detach() {\n        this.stopListening();\n    }\n    /**\n     * Creates a {@link module:engine/model/range~Range range instance} that is equal to this live range.\n     */\n    toRange() {\n        return new Range(this.start, this.end);\n    }\n    /**\n     * Creates a `LiveRange` instance that is equal to the given range.\n     */\n    static fromRange(range) {\n        return new LiveRange(range.start, range.end);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nLiveRange.prototype.is = function (type) {\n    return type === 'liveRange' || type === 'model:liveRange' ||\n        // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n        type == 'range' || type === 'model:range';\n};\n/**\n * Binds this `LiveRange` to the {@link module:engine/model/document~Document document}\n * that owns this range's {@link module:engine/model/range~Range#root root}.\n */\nfunction bindWithDocument() {\n    this.listenTo(this.root.document.model, 'applyOperation', (event, args) => {\n        const operation = args[0];\n        if (!operation.isDocumentOperation) {\n            return;\n        }\n        transform.call(this, operation);\n    }, { priority: 'low' });\n}\n/**\n * Updates this range accordingly to the updates applied to the model. Bases on change events.\n */\nfunction transform(operation) {\n    // Transform the range by the operation. Join the result ranges if needed.\n    const ranges = this.getTransformedByOperation(operation);\n    const result = Range._createFromRanges(ranges);\n    const boundariesChanged = !result.isEqual(this);\n    const contentChanged = doesOperationChangeRangeContent(this, operation);\n    let deletionPosition = null;\n    if (boundariesChanged) {\n        // If range boundaries have changed, fire `change:range` event.\n        //\n        if (result.root.rootName == '$graveyard') {\n            // If the range was moved to the graveyard root, set `deletionPosition`.\n            if (operation.type == 'remove') {\n                deletionPosition = operation.sourcePosition;\n            }\n            else {\n                // Merge operation.\n                deletionPosition = operation.deletionPosition;\n            }\n        }\n        const oldRange = this.toRange();\n        this.start = result.start;\n        this.end = result.end;\n        this.fire('change:range', oldRange, { deletionPosition });\n    }\n    else if (contentChanged) {\n        // If range boundaries have not changed, but there was change inside the range, fire `change:content` event.\n        this.fire('change:content', this.toRange(), { deletionPosition });\n    }\n}\n/**\n * Checks whether given operation changes something inside the range (even if it does not change boundaries).\n */\nfunction doesOperationChangeRangeContent(range, operation) {\n    switch (operation.type) {\n        case 'insert':\n            return range.containsPosition(operation.position);\n        case 'move':\n        case 'remove':\n        case 'reinsert':\n        case 'merge':\n            return range.containsPosition(operation.sourcePosition) ||\n                range.start.isEqual(operation.sourcePosition) ||\n                range.containsPosition(operation.targetPosition);\n        case 'split':\n            return range.containsPosition(operation.splitPosition) || range.containsPosition(operation.insertionPosition);\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/documentselection\n */\nimport TypeCheckable from './typecheckable.js';\nimport LiveRange from './liverange.js';\nimport Selection from './selection.js';\nimport Text from './text.js';\nimport TextProxy from './textproxy.js';\nimport { CKEditorError, Collection, EmitterMixin, toMap, uid } from '@ckeditor/ckeditor5-utils';\nconst storePrefix = 'selection:';\n/**\n * `DocumentSelection` is a special selection which is used as the\n * {@link module:engine/model/document~Document#selection document's selection}.\n * There can be only one instance of `DocumentSelection` per document.\n *\n * Document selection can only be changed by using the {@link module:engine/model/writer~Writer} instance\n * inside the {@link module:engine/model/model~Model#change `change()`} block, as it provides a secure way to modify model.\n *\n * `DocumentSelection` is automatically updated upon changes in the {@link module:engine/model/document~Document document}\n * to always contain valid ranges. Its attributes are inherited from the text unless set explicitly.\n *\n * Differences between {@link module:engine/model/selection~Selection} and `DocumentSelection` are:\n * * there is always a range in `DocumentSelection` - even if no ranges were added there is a \"default range\"\n * present in the selection,\n * * ranges added to this selection updates automatically when the document changes,\n * * attributes of `DocumentSelection` are updated automatically according to selection ranges.\n *\n * Since `DocumentSelection` uses {@link module:engine/model/liverange~LiveRange live ranges}\n * and is updated when {@link module:engine/model/document~Document document}\n * changes, it cannot be set on {@link module:engine/model/node~Node nodes}\n * that are inside {@link module:engine/model/documentfragment~DocumentFragment document fragment}.\n * If you need to represent a selection in document fragment,\n * use {@link module:engine/model/selection~Selection Selection class} instead.\n */\nexport default class DocumentSelection extends /* #__PURE__ */ EmitterMixin(TypeCheckable) {\n    /**\n     * Creates an empty live selection for given {@link module:engine/model/document~Document}.\n     *\n     * @param doc Document which owns this selection.\n     */\n    constructor(doc) {\n        super();\n        this._selection = new LiveSelection(doc);\n        this._selection.delegate('change:range').to(this);\n        this._selection.delegate('change:attribute').to(this);\n        this._selection.delegate('change:marker').to(this);\n    }\n    /**\n     * Describes whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n     * collapsed.\n     */\n    get isCollapsed() {\n        return this._selection.isCollapsed;\n    }\n    /**\n     * Selection anchor. Anchor may be described as a position where the most recent part of the selection starts.\n     * Together with {@link #focus} they define the direction of selection, which is important\n     * when expanding/shrinking selection. Anchor is always {@link module:engine/model/range~Range#start start} or\n     * {@link module:engine/model/range~Range#end end} position of the most recently added range.\n     *\n     * Is set to `null` if there are no ranges in selection.\n     *\n     * @see #focus\n     */\n    get anchor() {\n        return this._selection.anchor;\n    }\n    /**\n     * Selection focus. Focus is a position where the selection ends.\n     *\n     * Is set to `null` if there are no ranges in selection.\n     *\n     * @see #anchor\n     */\n    get focus() {\n        return this._selection.focus;\n    }\n    /**\n     * Number of ranges in selection.\n     */\n    get rangeCount() {\n        return this._selection.rangeCount;\n    }\n    /**\n     * Describes whether `Documentselection` has own range(s) set, or if it is defaulted to\n     * {@link module:engine/model/document~Document#_getDefaultRange document's default range}.\n     */\n    get hasOwnRange() {\n        return this._selection.hasOwnRange;\n    }\n    /**\n     * Specifies whether the {@link #focus}\n     * precedes {@link #anchor}.\n     *\n     * @readonly\n     * @type {Boolean}\n     */\n    get isBackward() {\n        return this._selection.isBackward;\n    }\n    /**\n     * Describes whether the gravity is overridden (using {@link module:engine/model/writer~Writer#overrideSelectionGravity}) or not.\n     *\n     * Note that the gravity remains overridden as long as will not be restored the same number of times as it was overridden.\n     */\n    get isGravityOverridden() {\n        return this._selection.isGravityOverridden;\n    }\n    /**\n     * A collection of selection {@link module:engine/model/markercollection~Marker markers}.\n     * Marker is a selection marker when selection range is inside the marker range.\n     *\n     * **Note**: Only markers from {@link ~DocumentSelection#observeMarkers observed markers groups} are collected.\n     */\n    get markers() {\n        return this._selection.markers;\n    }\n    /**\n     * Used for the compatibility with the {@link module:engine/model/selection~Selection#isEqual} method.\n     *\n     * @internal\n     */\n    get _ranges() {\n        return this._selection._ranges;\n    }\n    /**\n     * Returns an iterable that iterates over copies of selection ranges.\n     */\n    getRanges() {\n        return this._selection.getRanges();\n    }\n    /**\n     * Returns the first position in the selection.\n     * First position is the position that {@link module:engine/model/position~Position#isBefore is before}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getFirstPosition() {\n        return this._selection.getFirstPosition();\n    }\n    /**\n     * Returns the last position in the selection.\n     * Last position is the position that {@link module:engine/model/position~Position#isAfter is after}\n     * any other position in the selection.\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getLastPosition() {\n        return this._selection.getLastPosition();\n    }\n    /**\n     * Returns a copy of the first range in the selection.\n     * First range is the one which {@link module:engine/model/range~Range#start start} position\n     * {@link module:engine/model/position~Position#isBefore is before} start position of all other ranges\n     * (not to confuse with the first range added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getFirstRange() {\n        return this._selection.getFirstRange();\n    }\n    /**\n     * Returns a copy of the last range in the selection.\n     * Last range is the one which {@link module:engine/model/range~Range#end end} position\n     * {@link module:engine/model/position~Position#isAfter is after} end position of all other ranges (not to confuse with the range most\n     * recently added to the selection).\n     *\n     * Returns `null` if there are no ranges in selection.\n     */\n    getLastRange() {\n        return this._selection.getLastRange();\n    }\n    /**\n     * Gets elements of type {@link module:engine/model/schema~Schema#isBlock \"block\"} touched by the selection.\n     *\n     * This method's result can be used for example to apply block styling to all blocks covered by this selection.\n     *\n     * **Note:** `getSelectedBlocks()` returns blocks that are nested in other non-block elements\n     * but will not return blocks nested in other blocks.\n     *\n     * In this case the function will return exactly all 3 paragraphs (note: `<blockQuote>` is not a block itself):\n     *\n     * ```\n     * <paragraph>[a</paragraph>\n     * <blockQuote>\n     * \t<paragraph>b</paragraph>\n     * </blockQuote>\n     * <paragraph>c]d</paragraph>\n     * ```\n     *\n     * In this case the paragraph will also be returned, despite the collapsed selection:\n     *\n     * ```\n     * <paragraph>[]a</paragraph>\n     * ```\n     *\n     * In such a scenario, however, only blocks A, B & E will be returned as blocks C & D are nested in block B:\n     *\n     * ```\n     * [<blockA></blockA>\n     * <blockB>\n     * \t<blockC></blockC>\n     * \t<blockD></blockD>\n     * </blockB>\n     * <blockE></blockE>]\n     * ```\n     *\n     * If the selection is inside a block all the inner blocks (A & B) are returned:\n     *\n     * ```\n     * <block>\n     * \t<blockA>[a</blockA>\n     * \t<blockB>b]</blockB>\n     * </block>\n     * ```\n     *\n     * **Special case**: If a selection ends at the beginning of a block, that block is not returned as from user perspective\n     * this block wasn't selected. See [#984](https://github.com/ckeditor/ckeditor5-engine/issues/984) for more details.\n     *\n     * ```\n     * <paragraph>[a</paragraph>\n     * <paragraph>b</paragraph>\n     * <paragraph>]c</paragraph> // this block will not be returned\n     * ```\n     */\n    getSelectedBlocks() {\n        return this._selection.getSelectedBlocks();\n    }\n    /**\n     * Returns the selected element. {@link module:engine/model/element~Element Element} is considered as selected if there is only\n     * one range in the selection, and that range contains exactly one element.\n     * Returns `null` if there is no selected element.\n     */\n    getSelectedElement() {\n        return this._selection.getSelectedElement();\n    }\n    /**\n     * Checks whether the selection contains the entire content of the given element. This means that selection must start\n     * at a position {@link module:engine/model/position~Position#isTouching touching} the element's start and ends at position\n     * touching the element's end.\n     *\n     * By default, this method will check whether the entire content of the selection's current root is selected.\n     * Useful to check if e.g. the user has just pressed <kbd>Ctrl</kbd> + <kbd>A</kbd>.\n     */\n    containsEntireContent(element) {\n        return this._selection.containsEntireContent(element);\n    }\n    /**\n     * Unbinds all events previously bound by document selection.\n     */\n    destroy() {\n        this._selection.destroy();\n    }\n    /**\n     * Returns iterable that iterates over this selection's attribute keys.\n     */\n    getAttributeKeys() {\n        return this._selection.getAttributeKeys();\n    }\n    /**\n     * Returns iterable that iterates over this selection's attributes.\n     *\n     * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n     * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n     */\n    getAttributes() {\n        return this._selection.getAttributes();\n    }\n    /**\n     * Gets an attribute value for given key or `undefined` if that attribute is not set on the selection.\n     *\n     * @param key Key of attribute to look for.\n     * @returns Attribute value or `undefined`.\n     */\n    getAttribute(key) {\n        return this._selection.getAttribute(key);\n    }\n    /**\n     * Checks if the selection has an attribute for given key.\n     *\n     * @param key Key of attribute to check.\n     * @returns `true` if attribute with given key is set on selection, `false` otherwise.\n     */\n    hasAttribute(key) {\n        return this._selection.hasAttribute(key);\n    }\n    /**\n     * Refreshes selection attributes and markers according to the current position in the model.\n     */\n    refresh() {\n        this._selection.updateMarkers();\n        this._selection._updateAttributes(false);\n    }\n    /**\n     * Registers a marker group prefix or a marker name to be collected in the\n     * {@link ~DocumentSelection#markers selection markers collection}.\n     *\n     * See also {@link module:engine/model/markercollection~MarkerCollection#getMarkersGroup `MarkerCollection#getMarkersGroup()`}.\n     *\n     * @param prefixOrName The marker group prefix or marker name.\n     */\n    observeMarkers(prefixOrName) {\n        this._selection.observeMarkers(prefixOrName);\n    }\n    /**\n     * Moves {@link module:engine/model/documentselection~DocumentSelection#focus} to the specified location.\n     * Should be used only within the {@link module:engine/model/writer~Writer#setSelectionFocus} method.\n     *\n     * The location can be specified in the same form as\n     * {@link module:engine/model/writer~Writer#createPositionAt writer.createPositionAt()} parameters.\n     *\n     * @see module:engine/model/writer~Writer#setSelectionFocus\n     * @internal\n     * @param offset Offset or one of the flags. Used only when\n     * first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    _setFocus(itemOrPosition, offset) {\n        this._selection.setFocus(itemOrPosition, offset);\n    }\n    /**\n     * Sets this selection's ranges and direction to the specified location based on the given\n     * {@link module:engine/model/selection~Selectable selectable}.\n     * Should be used only within the {@link module:engine/model/writer~Writer#setSelection} method.\n     *\n     * @see module:engine/model/writer~Writer#setSelection\n     * @internal\n     */\n    _setTo(...args) {\n        this._selection.setTo(...args);\n    }\n    /**\n     * Sets attribute on the selection. If attribute with the same key already is set, it's value is overwritten.\n     * Should be used only within the {@link module:engine/model/writer~Writer#setSelectionAttribute} method.\n     *\n     * @see module:engine/model/writer~Writer#setSelectionAttribute\n     * @internal\n     * @param key Key of the attribute to set.\n     * @param value Attribute value.\n     */\n    _setAttribute(key, value) {\n        this._selection.setAttribute(key, value);\n    }\n    /**\n     * Removes an attribute with given key from the selection.\n     * If the given attribute was set on the selection, fires the {@link module:engine/model/selection~Selection#event:change:range}\n     * event with removed attribute key.\n     * Should be used only within the {@link module:engine/model/writer~Writer#removeSelectionAttribute} method.\n     *\n     * @see module:engine/model/writer~Writer#removeSelectionAttribute\n     * @internal\n     * @param key Key of the attribute to remove.\n     */\n    _removeAttribute(key) {\n        this._selection.removeAttribute(key);\n    }\n    /**\n     * Returns an iterable that iterates through all selection attributes stored in current selection's parent.\n     *\n     * @internal\n     */\n    _getStoredAttributes() {\n        return this._selection.getStoredAttributes();\n    }\n    /**\n     * Temporarily changes the gravity of the selection from the left to the right.\n     *\n     * The gravity defines from which direction the selection inherits its attributes. If it's the default left\n     * gravity, the selection (after being moved by the the user) inherits attributes from its left hand side.\n     * This method allows to temporarily override this behavior by forcing the gravity to the right.\n     *\n     * It returns an unique identifier which is required to restore the gravity. It guarantees the symmetry\n     * of the process.\n     *\n     * @see module:engine/model/writer~Writer#overrideSelectionGravity\n     * @internal\n     * @returns The unique id which allows restoring the gravity.\n     */\n    _overrideGravity() {\n        return this._selection.overrideGravity();\n    }\n    /**\n     * Restores the {@link ~DocumentSelection#_overrideGravity overridden gravity}.\n     *\n     * Restoring the gravity is only possible using the unique identifier returned by\n     * {@link ~DocumentSelection#_overrideGravity}. Note that the gravity remains overridden as long as won't be restored\n     * the same number of times it was overridden.\n     *\n     * @see module:engine/model/writer~Writer#restoreSelectionGravity\n     * @internal\n     * @param uid The unique id returned by {@link #_overrideGravity}.\n     */\n    _restoreGravity(uid) {\n        this._selection.restoreGravity(uid);\n    }\n    /**\n     * Generates and returns an attribute key for selection attributes store, basing on original attribute key.\n     *\n     * @internal\n     * @param key Attribute key to convert.\n     * @returns Converted attribute key, applicable for selection store.\n     */\n    static _getStoreAttributeKey(key) {\n        return storePrefix + key;\n    }\n    /**\n     * Checks whether the given attribute key is an attribute stored on an element.\n     *\n     * @internal\n     */\n    static _isStoreAttributeKey(key) {\n        return key.startsWith(storePrefix);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nDocumentSelection.prototype.is = function (type) {\n    return type === 'selection' ||\n        type == 'model:selection' ||\n        type == 'documentSelection' ||\n        type == 'model:documentSelection';\n};\n/**\n * `LiveSelection` is used internally by {@link module:engine/model/documentselection~DocumentSelection} and shouldn't be used directly.\n *\n * LiveSelection` is automatically updated upon changes in the {@link module:engine/model/document~Document document}\n * to always contain valid ranges. Its attributes are inherited from the text unless set explicitly.\n *\n * Differences between {@link module:engine/model/selection~Selection} and `LiveSelection` are:\n * * there is always a range in `LiveSelection` - even if no ranges were added there is a \"default range\"\n * present in the selection,\n * * ranges added to this selection updates automatically when the document changes,\n * * attributes of `LiveSelection` are updated automatically according to selection ranges.\n */\nclass LiveSelection extends Selection {\n    /**\n     * Creates an empty live selection for given {@link module:engine/model/document~Document}.\n     *\n     * @param doc Document which owns this selection.\n     */\n    constructor(doc) {\n        super();\n        /**\n         * List of selection markers.\n         * Marker is a selection marker when selection range is inside the marker range.\n         */\n        this.markers = new Collection({ idProperty: 'name' });\n        /**\n         * Keeps mapping of attribute name to priority with which the attribute got modified (added/changed/removed)\n         * last time. Possible values of priority are: `'low'` and `'normal'`.\n         *\n         * Priorities are used by internal `LiveSelection` mechanisms. All attributes set using `LiveSelection`\n         * attributes API are set with `'normal'` priority.\n         */\n        this._attributePriority = new Map();\n        /**\n         * Position to which the selection should be set if the last selection range was moved to the graveyard.\n         */\n        this._selectionRestorePosition = null;\n        /**\n         * Flag that informs whether the selection ranges have changed. It is changed on true when `LiveRange#change:range` event is fired.\n         */\n        this._hasChangedRange = false;\n        /**\n         * Each overriding gravity adds an UID to the set and each removal removes it.\n         * Gravity is overridden when there's at least one UID in the set.\n         * Gravity is restored when the set is empty.\n         * This is to prevent conflicts when gravity is overridden by more than one feature at the same time.\n         */\n        this._overriddenGravityRegister = new Set();\n        /**\n         * Prefixes of marker names that should affect `LiveSelection#markers` collection.\n         */\n        this._observedMarkers = new Set();\n        this._model = doc.model;\n        this._document = doc;\n        // Ensure selection is correct after each operation.\n        this.listenTo(this._model, 'applyOperation', (evt, args) => {\n            const operation = args[0];\n            if (!operation.isDocumentOperation || operation.type == 'marker' || operation.type == 'rename' || operation.type == 'noop') {\n                return;\n            }\n            // Fix selection if the last range was removed from it and we have a position to which we can restore the selection.\n            if (this._ranges.length == 0 && this._selectionRestorePosition) {\n                this._fixGraveyardSelection(this._selectionRestorePosition);\n            }\n            // \"Forget\" the restore position even if it was not \"used\".\n            this._selectionRestorePosition = null;\n            if (this._hasChangedRange) {\n                this._hasChangedRange = false;\n                this.fire('change:range', { directChange: false });\n            }\n        }, { priority: 'lowest' });\n        // Ensure selection is correct and up to date after each range change.\n        this.on('change:range', () => {\n            this._validateSelectionRanges(this.getRanges());\n        });\n        // Update markers data stored by the selection after each marker change.\n        // This handles only marker changes done through marker operations (not model tree changes).\n        this.listenTo(this._model.markers, 'update', (evt, marker, oldRange, newRange) => {\n            this._updateMarker(marker, newRange);\n        });\n        // Ensure selection is up to date after each change block.\n        this.listenTo(this._document, 'change', (evt, batch) => {\n            clearAttributesStoredInElement(this._model, batch);\n        });\n    }\n    get isCollapsed() {\n        const length = this._ranges.length;\n        return length === 0 ? this._document._getDefaultRange().isCollapsed : super.isCollapsed;\n    }\n    get anchor() {\n        return super.anchor || this._document._getDefaultRange().start;\n    }\n    get focus() {\n        return super.focus || this._document._getDefaultRange().end;\n    }\n    get rangeCount() {\n        return this._ranges.length ? this._ranges.length : 1;\n    }\n    /**\n     * Describes whether `LiveSelection` has own range(s) set, or if it is defaulted to\n     * {@link module:engine/model/document~Document#_getDefaultRange document's default range}.\n     */\n    get hasOwnRange() {\n        return this._ranges.length > 0;\n    }\n    /**\n     * When set to `true` then selection attributes on node before the caret won't be taken\n     * into consideration while updating selection attributes.\n     */\n    get isGravityOverridden() {\n        return !!this._overriddenGravityRegister.size;\n    }\n    /**\n     * Unbinds all events previously bound by live selection.\n     */\n    destroy() {\n        for (let i = 0; i < this._ranges.length; i++) {\n            this._ranges[i].detach();\n        }\n        this.stopListening();\n    }\n    *getRanges() {\n        if (this._ranges.length) {\n            yield* super.getRanges();\n        }\n        else {\n            yield this._document._getDefaultRange();\n        }\n    }\n    getFirstRange() {\n        return super.getFirstRange() || this._document._getDefaultRange();\n    }\n    getLastRange() {\n        return super.getLastRange() || this._document._getDefaultRange();\n    }\n    setTo(...args) {\n        super.setTo(...args);\n        this._updateAttributes(true);\n        this.updateMarkers();\n    }\n    setFocus(itemOrPosition, offset) {\n        super.setFocus(itemOrPosition, offset);\n        this._updateAttributes(true);\n        this.updateMarkers();\n    }\n    setAttribute(key, value) {\n        if (this._setAttribute(key, value)) {\n            // Fire event with exact data.\n            const attributeKeys = [key];\n            this.fire('change:attribute', { attributeKeys, directChange: true });\n        }\n    }\n    removeAttribute(key) {\n        if (this._removeAttribute(key)) {\n            // Fire event with exact data.\n            const attributeKeys = [key];\n            this.fire('change:attribute', { attributeKeys, directChange: true });\n        }\n    }\n    overrideGravity() {\n        const overrideUid = uid();\n        // Remember that another overriding has been requested. It will need to be removed\n        // before the gravity is to be restored.\n        this._overriddenGravityRegister.add(overrideUid);\n        if (this._overriddenGravityRegister.size === 1) {\n            this._updateAttributes(true);\n        }\n        return overrideUid;\n    }\n    restoreGravity(uid) {\n        if (!this._overriddenGravityRegister.has(uid)) {\n            /**\n             * Restoring gravity for an unknown UID is not possible. Make sure you are using a correct\n             * UID obtained from the {@link module:engine/model/writer~Writer#overrideSelectionGravity} to restore.\n             *\n             * @error document-selection-gravity-wrong-restore\n             * @param uid The unique identifier returned by\n             * {@link module:engine/model/documentselection~DocumentSelection#_overrideGravity}.\n             */\n            throw new CKEditorError('document-selection-gravity-wrong-restore', this, { uid });\n        }\n        this._overriddenGravityRegister.delete(uid);\n        // Restore gravity only when all overriding have been restored.\n        if (!this.isGravityOverridden) {\n            this._updateAttributes(true);\n        }\n    }\n    observeMarkers(prefixOrName) {\n        this._observedMarkers.add(prefixOrName);\n        this.updateMarkers();\n    }\n    _replaceAllRanges(ranges) {\n        this._validateSelectionRanges(ranges);\n        super._replaceAllRanges(ranges);\n    }\n    _popRange() {\n        this._ranges.pop().detach();\n    }\n    _pushRange(range) {\n        const liveRange = this._prepareRange(range);\n        // `undefined` is returned when given `range` is in graveyard root.\n        if (liveRange) {\n            this._ranges.push(liveRange);\n        }\n    }\n    _validateSelectionRanges(ranges) {\n        for (const range of ranges) {\n            if (!this._document._validateSelectionRange(range)) {\n                /**\n                 * Range from {@link module:engine/model/documentselection~DocumentSelection document selection}\n                 * starts or ends at incorrect position.\n                 *\n                 * @error document-selection-wrong-position\n                 * @param range\n                 */\n                throw new CKEditorError('document-selection-wrong-position', this, { range });\n            }\n        }\n    }\n    /**\n     * Prepares given range to be added to selection. Checks if it is correct,\n     * converts it to {@link module:engine/model/liverange~LiveRange LiveRange}\n     * and sets listeners listening to the range's change event.\n     */\n    _prepareRange(range) {\n        this._checkRange(range);\n        if (range.root == this._document.graveyard) {\n            // @if CK_DEBUG // console.warn( 'Trying to add a Range that is in the graveyard root. Range rejected.' );\n            return;\n        }\n        const liveRange = LiveRange.fromRange(range);\n        // If selection range is moved to the graveyard remove it from the selection object.\n        // Also, save some data that can be used to restore selection later, on `Model#applyOperation` event.\n        liveRange.on('change:range', (evt, oldRange, data) => {\n            this._hasChangedRange = true;\n            if (liveRange.root == this._document.graveyard) {\n                this._selectionRestorePosition = data.deletionPosition;\n                const index = this._ranges.indexOf(liveRange);\n                this._ranges.splice(index, 1);\n                liveRange.detach();\n            }\n        });\n        return liveRange;\n    }\n    updateMarkers() {\n        if (!this._observedMarkers.size) {\n            return;\n        }\n        const markers = [];\n        let changed = false;\n        for (const marker of this._model.markers) {\n            const markerGroup = marker.name.split(':', 1)[0];\n            if (!this._observedMarkers.has(markerGroup)) {\n                continue;\n            }\n            const markerRange = marker.getRange();\n            for (const selectionRange of this.getRanges()) {\n                if (markerRange.containsRange(selectionRange, !selectionRange.isCollapsed)) {\n                    markers.push(marker);\n                }\n            }\n        }\n        const oldMarkers = Array.from(this.markers);\n        for (const marker of markers) {\n            if (!this.markers.has(marker)) {\n                this.markers.add(marker);\n                changed = true;\n            }\n        }\n        for (const marker of Array.from(this.markers)) {\n            if (!markers.includes(marker)) {\n                this.markers.remove(marker);\n                changed = true;\n            }\n        }\n        if (changed) {\n            this.fire('change:marker', { oldMarkers, directChange: false });\n        }\n    }\n    _updateMarker(marker, markerRange) {\n        const markerGroup = marker.name.split(':', 1)[0];\n        if (!this._observedMarkers.has(markerGroup)) {\n            return;\n        }\n        let changed = false;\n        const oldMarkers = Array.from(this.markers);\n        const hasMarker = this.markers.has(marker);\n        if (!markerRange) {\n            if (hasMarker) {\n                this.markers.remove(marker);\n                changed = true;\n            }\n        }\n        else {\n            let contained = false;\n            for (const selectionRange of this.getRanges()) {\n                if (markerRange.containsRange(selectionRange, !selectionRange.isCollapsed)) {\n                    contained = true;\n                    break;\n                }\n            }\n            if (contained && !hasMarker) {\n                this.markers.add(marker);\n                changed = true;\n            }\n            else if (!contained && hasMarker) {\n                this.markers.remove(marker);\n                changed = true;\n            }\n        }\n        if (changed) {\n            this.fire('change:marker', { oldMarkers, directChange: false });\n        }\n    }\n    /**\n     * Updates this selection attributes according to its ranges and the {@link module:engine/model/document~Document model document}.\n     */\n    _updateAttributes(clearAll) {\n        const newAttributes = toMap(this._getSurroundingAttributes());\n        const oldAttributes = toMap(this.getAttributes());\n        if (clearAll) {\n            // If `clearAll` remove all attributes and reset priorities.\n            this._attributePriority = new Map();\n            this._attrs = new Map();\n        }\n        else {\n            // If not, remove only attributes added with `low` priority.\n            for (const [key, priority] of this._attributePriority) {\n                if (priority == 'low') {\n                    this._attrs.delete(key);\n                    this._attributePriority.delete(key);\n                }\n            }\n        }\n        this._setAttributesTo(newAttributes);\n        // Let's evaluate which attributes really changed.\n        const changed = [];\n        // First, loop through all attributes that are set on selection right now.\n        // Check which of them are different than old attributes.\n        for (const [newKey, newValue] of this.getAttributes()) {\n            if (!oldAttributes.has(newKey) || oldAttributes.get(newKey) !== newValue) {\n                changed.push(newKey);\n            }\n        }\n        // Then, check which of old attributes got removed.\n        for (const [oldKey] of oldAttributes) {\n            if (!this.hasAttribute(oldKey)) {\n                changed.push(oldKey);\n            }\n        }\n        // Fire event with exact data (fire only if anything changed).\n        if (changed.length > 0) {\n            this.fire('change:attribute', { attributeKeys: changed, directChange: false });\n        }\n    }\n    /**\n     * Internal method for setting `LiveSelection` attribute. Supports attribute priorities (through `directChange`\n     * parameter).\n     */\n    _setAttribute(key, value, directChange = true) {\n        const priority = directChange ? 'normal' : 'low';\n        if (priority == 'low' && this._attributePriority.get(key) == 'normal') {\n            // Priority too low.\n            return false;\n        }\n        const oldValue = super.getAttribute(key);\n        // Don't do anything if value has not changed.\n        if (oldValue === value) {\n            return false;\n        }\n        this._attrs.set(key, value);\n        // Update priorities map.\n        this._attributePriority.set(key, priority);\n        return true;\n    }\n    /**\n     * Internal method for removing `LiveSelection` attribute. Supports attribute priorities (through `directChange`\n     * parameter).\n     *\n     * NOTE: Even if attribute is not present in the selection but is provided to this method, it's priority will\n     * be changed according to `directChange` parameter.\n     */\n    _removeAttribute(key, directChange = true) {\n        const priority = directChange ? 'normal' : 'low';\n        if (priority == 'low' && this._attributePriority.get(key) == 'normal') {\n            // Priority too low.\n            return false;\n        }\n        // Update priorities map.\n        this._attributePriority.set(key, priority);\n        // Don't do anything if value has not changed.\n        if (!super.hasAttribute(key)) {\n            return false;\n        }\n        this._attrs.delete(key);\n        return true;\n    }\n    /**\n     * Internal method for setting multiple `LiveSelection` attributes. Supports attribute priorities (through\n     * `directChange` parameter).\n     */\n    _setAttributesTo(attrs) {\n        const changed = new Set();\n        for (const [oldKey, oldValue] of this.getAttributes()) {\n            // Do not remove attribute if attribute with same key and value is about to be set.\n            if (attrs.get(oldKey) === oldValue) {\n                continue;\n            }\n            // All rest attributes will be removed so changed attributes won't change .\n            this._removeAttribute(oldKey, false);\n        }\n        for (const [key, value] of attrs) {\n            // Attribute may not be set because of attributes or because same key/value is already added.\n            const gotAdded = this._setAttribute(key, value, false);\n            if (gotAdded) {\n                changed.add(key);\n            }\n        }\n        return changed;\n    }\n    /**\n     * Returns an iterable that iterates through all selection attributes stored in current selection's parent.\n     */\n    *getStoredAttributes() {\n        const selectionParent = this.getFirstPosition().parent;\n        if (this.isCollapsed && selectionParent.isEmpty) {\n            for (const key of selectionParent.getAttributeKeys()) {\n                if (key.startsWith(storePrefix)) {\n                    const realKey = key.substr(storePrefix.length);\n                    yield [realKey, selectionParent.getAttribute(key)];\n                }\n            }\n        }\n    }\n    /**\n     * Checks model text nodes that are closest to the selection's first position and returns attributes of first\n     * found element. If there are no text nodes in selection's first position parent, it returns selection\n     * attributes stored in that parent.\n     */\n    _getSurroundingAttributes() {\n        const position = this.getFirstPosition();\n        const schema = this._model.schema;\n        if (position.root.rootName == '$graveyard') {\n            return null;\n        }\n        let attrs = null;\n        if (!this.isCollapsed) {\n            // 1. If selection is a range...\n            const range = this.getFirstRange();\n            // ...look for a first character node in that range and take attributes from it.\n            for (const value of range) {\n                // If the item is an object, we don't want to get attributes from its children...\n                if (value.item.is('element') && schema.isObject(value.item)) {\n                    // ...but collect attributes from inline object.\n                    attrs = getTextAttributes(value.item, schema);\n                    break;\n                }\n                if (value.type == 'text') {\n                    attrs = value.item.getAttributes();\n                    break;\n                }\n            }\n        }\n        else {\n            // 2. If the selection is a caret or the range does not contain a character node...\n            const nodeBefore = position.textNode ? position.textNode : position.nodeBefore;\n            const nodeAfter = position.textNode ? position.textNode : position.nodeAfter;\n            // When gravity is overridden then don't take node before into consideration.\n            if (!this.isGravityOverridden) {\n                // ...look at the node before caret and take attributes from it if it is a character node.\n                attrs = getTextAttributes(nodeBefore, schema);\n            }\n            // 3. If not, look at the node after caret...\n            if (!attrs) {\n                attrs = getTextAttributes(nodeAfter, schema);\n            }\n            // 4. If not, try to find the first character on the left, that is in the same node.\n            // When gravity is overridden then don't take node before into consideration.\n            if (!this.isGravityOverridden && !attrs) {\n                let node = nodeBefore;\n                while (node && !attrs) {\n                    node = node.previousSibling;\n                    attrs = getTextAttributes(node, schema);\n                }\n            }\n            // 5. If not found, try to find the first character on the right, that is in the same node.\n            if (!attrs) {\n                let node = nodeAfter;\n                while (node && !attrs) {\n                    node = node.nextSibling;\n                    attrs = getTextAttributes(node, schema);\n                }\n            }\n            // 6. If not found, selection should retrieve attributes from parent.\n            if (!attrs) {\n                attrs = this.getStoredAttributes();\n            }\n        }\n        return attrs;\n    }\n    /**\n     * Fixes the selection after all its ranges got removed.\n     * @param deletionPosition Position where the deletion happened.\n     */\n    _fixGraveyardSelection(deletionPosition) {\n        // Find a range that is a correct selection range and is closest to the position where the deletion happened.\n        const selectionRange = this._model.schema.getNearestSelectionRange(deletionPosition);\n        // If nearest valid selection range has been found - add it in the place of old range.\n        if (selectionRange) {\n            // Check the range, convert it to live range, bind events, etc.\n            this._pushRange(selectionRange);\n        }\n        // If nearest valid selection range cannot be found don't add any range. Selection will be set to the default range.\n    }\n}\n/**\n * Helper function for {@link module:engine/model/liveselection~LiveSelection#_updateAttributes}.\n *\n * It checks if the passed model item is a text node (or text proxy) and, if so, returns it's attributes.\n * If not, it checks if item is an inline object and does the same. Otherwise it returns `null`.\n */\nfunction getTextAttributes(node, schema) {\n    if (!node) {\n        return null;\n    }\n    if (node instanceof TextProxy || node instanceof Text) {\n        return node.getAttributes();\n    }\n    if (!schema.isInline(node)) {\n        return null;\n    }\n    // Stop on inline elements (such as `<softBreak>`) that are not objects (such as `<imageInline>` or `<mathml>`).\n    if (!schema.isObject(node)) {\n        return [];\n    }\n    const attributes = [];\n    // Collect all attributes that can be applied to the text node.\n    for (const [key, value] of node.getAttributes()) {\n        if (schema.checkAttribute('$text', key) &&\n            schema.getAttributeProperties(key).copyFromObject !== false) {\n            attributes.push([key, value]);\n        }\n    }\n    return attributes;\n}\n/**\n * Removes selection attributes from element which is not empty anymore.\n */\nfunction clearAttributesStoredInElement(model, batch) {\n    const differ = model.document.differ;\n    for (const entry of differ.getChanges()) {\n        if (entry.type != 'insert') {\n            continue;\n        }\n        const changeParent = entry.position.parent;\n        const isNoLongerEmpty = entry.length === changeParent.maxOffset;\n        if (isNoLongerEmpty) {\n            model.enqueueChange(batch, writer => {\n                const storedAttributes = Array.from(changeParent.getAttributeKeys())\n                    .filter(key => key.startsWith(storePrefix));\n                for (const key of storedAttributes) {\n                    writer.removeAttribute(key, changeParent);\n                }\n            });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/conversionhelpers\n */\n/**\n * Base class for conversion helpers.\n */\nexport default class ConversionHelpers {\n    /**\n     * Creates a conversion helpers instance.\n     */\n    constructor(dispatchers) {\n        this._dispatchers = dispatchers;\n    }\n    /**\n     * Registers a conversion helper.\n     *\n     * **Note**: See full usage example in the `{@link module:engine/conversion/conversion~Conversion#for conversion.for()}`\n     * method description.\n     *\n     * @param conversionHelper The function to be called on event.\n     */\n    add(conversionHelper) {\n        for (const dispatcher of this._dispatchers) {\n            conversionHelper(dispatcher);\n        }\n        return this;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Contains downcast (model-to-view) converters for {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}.\n *\n * @module engine/conversion/downcasthelpers\n */\nimport ModelRange from '../model/range.js';\nimport ModelSelection from '../model/selection.js';\nimport ModelDocumentSelection from '../model/documentselection.js';\nimport ModelElement from '../model/element.js';\nimport ModelPosition from '../model/position.js';\nimport ViewAttributeElement from '../view/attributeelement.js';\nimport ConversionHelpers from './conversionhelpers.js';\nimport StylesMap from '../view/stylesmap.js';\nimport { CKEditorError, toArray } from '@ckeditor/ckeditor5-utils';\nimport { cloneDeep } from 'lodash-es';\n/**\n * Downcast conversion helper functions.\n *\n * Learn more about {@glink framework/deep-dive/conversion/downcast downcast helpers}.\n *\n * @extends module:engine/conversion/conversionhelpers~ConversionHelpers\n */\nexport default class DowncastHelpers extends ConversionHelpers {\n    /**\n     * Model element to view element conversion helper.\n     *\n     * This conversion results in creating a view element. For example, model `<paragraph>Foo</paragraph>` becomes `<p>Foo</p>` in the view.\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).elementToElement( {\n     * \tmodel: 'paragraph',\n     * \tview: 'p'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).elementToElement( {\n     * \tmodel: 'paragraph',\n     * \tview: 'div',\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).elementToElement( {\n     * \tmodel: 'fancyParagraph',\n     * \tview: {\n     * \t\tname: 'p',\n     * \t\tclasses: 'fancy'\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).elementToElement( {\n     * \tmodel: 'heading',\n     * \tview: ( modelElement, conversionApi ) => {\n     * \t\tconst { writer } = conversionApi;\n     *\n     * \t\treturn writer.createContainerElement( 'h' + modelElement.getAttribute( 'level' ) );\n     * \t}\n     * } );\n     * ```\n     *\n     * The element-to-element conversion supports the reconversion mechanism. It can be enabled by using either the `attributes` or\n     * the `children` props on a model description. You will find a couple examples below.\n     *\n     * In order to reconvert an element if any of its direct children have been added or removed, use the `children` property on a `model`\n     * description. For example, this model:\n     *\n     * ```xml\n     * <box>\n     * \t<paragraph>Some text.</paragraph>\n     * </box>\n     * ```\n     *\n     * will be converted into this structure in the view:\n     *\n     * ```html\n     * <div class=\"box\" data-type=\"single\">\n     * \t<p>Some text.</p>\n     * </div>\n     * ```\n     *\n     * But if more items were inserted in the model:\n     *\n     * ```xml\n     * <box>\n     * \t<paragraph>Some text.</paragraph>\n     * \t<paragraph>Other item.</paragraph>\n     * </box>\n     * ```\n     *\n     * it will be converted into this structure in the view (note the element `data-type` change):\n     *\n     * ```html\n     * <div class=\"box\" data-type=\"multiple\">\n     * \t<p>Some text.</p>\n     * \t<p>Other item.</p>\n     * </div>\n     * ```\n     *\n     * Such a converter would look like this (note that the `paragraph` elements are converted separately):\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).elementToElement( {\n     * \tmodel: {\n     * \t\tname: 'box',\n     * \t\tchildren: true\n     * \t},\n     * \tview: ( modelElement, conversionApi ) => {\n     * \t\tconst { writer } = conversionApi;\n     *\n     * \t\treturn writer.createContainerElement( 'div', {\n     * \t\t\tclass: 'box',\n     * \t\t\t'data-type': modelElement.childCount == 1 ? 'single' : 'multiple'\n     * \t\t} );\n     * \t}\n     * } );\n     * ```\n     *\n     * In order to reconvert element if any of its attributes have been updated, use the `attributes` property on a `model`\n     * description. For example, this model:\n     *\n     * ```xml\n     * <heading level=\"2\">Some text.</heading>\n     * ```\n     *\n     * will be converted into this structure in the view:\n     *\n     * ```html\n     * <h2>Some text.</h2>\n     * ```\n     *\n     * But if the `heading` element's `level` attribute has been updated to `3` for example, then\n     * it will be converted into this structure in the view:\n     *\n     * ```html\n     * <h3>Some text.</h3>\n     * ```\n     *\n     * Such a converter would look as follows:\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).elementToElement( {\n     * \tmodel: {\n     * \t\tname: 'heading',\n     * \t\tattributes: 'level'\n     * \t},\n     * \tview: ( modelElement, conversionApi ) => {\n     * \t\tconst { writer } = conversionApi;\n     *\n     * \t\treturn writer.createContainerElement( 'h' + modelElement.getAttribute( 'level' ) );\n     * \t}\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * You can read more about the element-to-element conversion in the\n     * {@glink framework/deep-dive/conversion/downcast downcast conversion} guide.\n     *\n     * @param config Conversion configuration.\n     * @param config.model The description or a name of the model element to convert.\n     * @param config.model.attributes The list of attribute names that should be consumed while creating\n     * the view element. Note that the view will be reconverted if any of the listed attributes changes.\n     * @param config.model.children Specifies whether the view element requires reconversion if the list\n     * of the model child nodes changed.\n     * @param config.view A view element definition or a function that takes the model element and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n     * as parameters and returns a view container element.\n     */\n    elementToElement(config) {\n        return this.add(downcastElementToElement(config));\n    }\n    /**\n     * The model element to view structure (several elements) conversion helper.\n     *\n     * This conversion results in creating a view structure with one or more slots defined for the child nodes.\n     * For example, a model `<table>` may become this structure in the view:\n     *\n     * ```html\n     * <figure class=\"table\">\n     * \t<table>\n     * \t\t<tbody>${ slot for table rows }</tbody>\n     * \t</table>\n     * </figure>\n     * ```\n     *\n     * The children of the model's `<table>` element will be inserted into the `<tbody>` element.\n     * If the `elementToElement()` helper was used, the children would be inserted into the `<figure>`.\n     *\n     * Imagine a table feature where for this model structure:\n     *\n     * ```xml\n     * <table headingRows=\"1\">\n     * \t<tableRow> ... table cells 1 ... </tableRow>\n     * \t<tableRow> ... table cells 2 ... </tableRow>\n     * \t<tableRow> ... table cells 3 ... </tableRow>\n     * \t<caption>Caption text</caption>\n     * </table>\n     * ```\n     *\n     * we want to generate this view structure:\n     *\n     * ```html\n     * <figure class=\"table\">\n     * \t<table>\n     * \t\t<thead>\n     * \t\t\t<tr> ... table cells 1 ... </tr>\n     * \t\t</thead>\n     * \t\t<tbody>\n     * \t\t\t<tr> ... table cells 2 ... </tr>\n     * \t\t\t<tr> ... table cells 3 ... </tr>\n     * \t\t</tbody>\n     * \t</table>\n     * \t<figcaption>Caption text</figcaption>\n     * </figure>\n     * ```\n     *\n     * The converter has to take the `headingRows` attribute into consideration when allocating the `<tableRow>` elements\n     * into the `<tbody>` and `<thead>` elements. Hence, we need two slots and need to define proper filter callbacks for them.\n     *\n     * Additionally, all elements other than `<tableRow>` should be placed outside the `<table>` tag.\n     * In the example above, this will handle the table caption.\n     *\n     * Such a converter would look like this:\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).elementToStructure( {\n     * \tmodel: {\n     * \t\tname: 'table',\n     * \t\tattributes: [ 'headingRows' ]\n     * \t},\n     * \tview: ( modelElement, conversionApi ) => {\n     * \t\tconst { writer } = conversionApi;\n     *\n     * \t\tconst figureElement = writer.createContainerElement( 'figure', { class: 'table' } );\n     * \t\tconst tableElement = writer.createContainerElement( 'table' );\n     *\n     * \t\twriter.insert( writer.createPositionAt( figureElement, 0 ), tableElement );\n     *\n     * \t\tconst headingRows = modelElement.getAttribute( 'headingRows' ) || 0;\n     *\n     * \t\tif ( headingRows > 0 ) {\n     * \t\t\tconst tableHead = writer.createContainerElement( 'thead' );\n     *\n     * \t\t\tconst headSlot = writer.createSlot( node => node.is( 'element', 'tableRow' ) && node.index < headingRows );\n     *\n     * \t\t\twriter.insert( writer.createPositionAt( tableElement, 'end' ), tableHead );\n     * \t\t\twriter.insert( writer.createPositionAt( tableHead, 0 ), headSlot );\n     * \t\t}\n     *\n     * \t\tif ( headingRows < tableUtils.getRows( table ) ) {\n     * \t\t\tconst tableBody = writer.createContainerElement( 'tbody' );\n     *\n     * \t\t\tconst bodySlot = writer.createSlot( node => node.is( 'element', 'tableRow' ) && node.index >= headingRows );\n     *\n     * \t\t\twriter.insert( writer.createPositionAt( tableElement, 'end' ), tableBody );\n     * \t\t\twriter.insert( writer.createPositionAt( tableBody, 0 ), bodySlot );\n     * \t\t}\n     *\n     * \t\tconst restSlot = writer.createSlot( node => !node.is( 'element', 'tableRow' ) );\n     *\n     * \t\twriter.insert( writer.createPositionAt( figureElement, 'end' ), restSlot );\n     *\n     * \t\treturn figureElement;\n     * \t}\n     * } );\n     * ```\n     *\n     * Note: The children of a model element that's being converted must be allocated in the same order in the view\n     * in which they are placed in the model.\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.model The description or a name of the model element to convert.\n     * @param config.model.name The name of the model element to convert.\n     * @param config.model.attributes The list of attribute names that should be consumed while creating\n     * the view structure. Note that the view will be reconverted if any of the listed attributes will change.\n     * @param config.view A function that takes the model element and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as parameters\n     * and returns a view container element with slots for model child nodes to be converted into.\n     */\n    elementToStructure(config) {\n        return this.add(downcastElementToStructure(config));\n    }\n    /**\n     * Model attribute to view element conversion helper.\n     *\n     * This conversion results in wrapping view nodes with a view attribute element. For example, a model text node with\n     * `\"Foo\"` as data and the `bold` attribute becomes `<strong>Foo</strong>` in the view.\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).attributeToElement( {\n     * \tmodel: 'bold',\n     * \tview: 'strong'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToElement( {\n     * \tmodel: 'bold',\n     * \tview: 'b',\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToElement( {\n     * \tmodel: 'invert',\n     * \tview: {\n     * \t\tname: 'span',\n     * \t\tclasses: [ 'font-light', 'bg-dark' ]\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToElement( {\n     * \tmodel: {\n     * \t\tkey: 'fontSize',\n     * \t\tvalues: [ 'big', 'small' ]\n     * \t},\n     * \tview: {\n     * \t\tbig: {\n     * \t\t\tname: 'span',\n     * \t\t\tstyles: {\n     * \t\t\t\t'font-size': '1.2em'\n     * \t\t\t}\n     * \t\t},\n     * \t\tsmall: {\n     * \t\t\tname: 'span',\n     * \t\t\tstyles: {\n     * \t\t\t\t'font-size': '0.8em'\n     * \t\t\t}\n     * \t\t}\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToElement( {\n     * \tmodel: 'bold',\n     * \tview: ( modelAttributeValue, conversionApi ) => {\n     * \t\tconst { writer } = conversionApi;\n     *\n     * \t\treturn writer.createAttributeElement( 'span', {\n     * \t\t\tstyle: 'font-weight:' + modelAttributeValue\n     * \t\t} );\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToElement( {\n     * \tmodel: {\n     * \t\tkey: 'color',\n     * \t\tname: '$text'\n     * \t},\n     * \tview: ( modelAttributeValue, conversionApi ) => {\n     * \t\tconst { writer } = conversionApi;\n     *\n     * \t\treturn writer.createAttributeElement( 'span', {\n     * \t\t\tstyle: 'color:' + modelAttributeValue\n     * \t\t} );\n     * \t}\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.model The key of the attribute to convert from or a `{ key, values }` object. `values` is an array\n     * of `String`s with possible values if the model attribute is an enumerable.\n     * @param config.view A view element definition or a function\n     * that takes the model attribute value and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as parameters and returns a view\n     * attribute element. If `config.model.values` is given, `config.view` should be an object assigning values from `config.model.values`\n     * to view element definitions or functions.\n     * @param config.converterPriority Converter priority.\n     */\n    attributeToElement(config) {\n        return this.add(downcastAttributeToElement(config));\n    }\n    /**\n     * Model attribute to view attribute conversion helper.\n     *\n     * This conversion results in adding an attribute to a view node, basing on an attribute from a model node. For example,\n     * `<imageInline src='foo.jpg'></imageInline>` is converted to `<img src='foo.jpg'></img>`.\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n     * \tmodel: 'source',\n     * \tview: 'src'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n     * \tmodel: 'source',\n     * \tview: 'href',\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n     * \tmodel: {\n     * \t\tname: 'imageInline',\n     * \t\tkey: 'source'\n     * \t},\n     * \tview: 'src'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n     * \tmodel: {\n     * \t\tname: 'styled',\n     * \t\tvalues: [ 'dark', 'light' ]\n     * \t},\n     * \tview: {\n     * \t\tdark: {\n     * \t\t\tkey: 'class',\n     * \t\t\tvalue: [ 'styled', 'styled-dark' ]\n     * \t\t},\n     * \t\tlight: {\n     * \t\t\tkey: 'class',\n     * \t\t\tvalue: [ 'styled', 'styled-light' ]\n     * \t\t}\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n     * \tmodel: 'styled',\n     * \tview: modelAttributeValue => ( {\n     * \t\tkey: 'class',\n     * \t\tvalue: 'styled-' + modelAttributeValue\n     * \t} )\n     * } );\n     * ```\n     *\n     * **Note**: Downcasting to a style property requires providing `value` as an object:\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n     * \tmodel: 'lineHeight',\n     * \tview: modelAttributeValue => ( {\n     * \t\tkey: 'style',\n     * \t\tvalue: {\n     * \t\t\t'line-height': modelAttributeValue,\n     * \t\t\t'border-bottom': '1px dotted #ba2'\n     * \t\t}\n     * \t} )\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.model The key of the attribute to convert from or a `{ key, values, [ name ] }` object describing\n     * the attribute key, possible values and, optionally, an element name to convert from.\n     * @param config.view A view attribute key, or a `{ key, value }` object or a function that takes the model attribute value and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n     * as parameters and returns a `{ key, value }` object. If the `key` is `'class'`, the `value` can be a `String` or an\n     * array of `String`s. If the `key` is `'style'`, the `value` is an object with key-value pairs. In other cases, `value` is a `String`.\n     * If `config.model.values` is set, `config.view` should be an object assigning values from `config.model.values` to\n     * `{ key, value }` objects or a functions.\n     * @param config.converterPriority Converter priority.\n     */\n    attributeToAttribute(config) {\n        return this.add(downcastAttributeToAttribute(config));\n    }\n    /**\n     * Model marker to view element conversion helper.\n     *\n     * **Note**: This method should be used mainly for editing the downcast and it is recommended\n     * to use the {@link #markerToData `#markerToData()`} helper instead.\n     *\n     * This helper may produce invalid HTML code (e.g. a span between table cells).\n     * It should only be used when you are sure that the produced HTML will be semantically correct.\n     *\n     * This conversion results in creating a view element on the boundaries of the converted marker. If the converted marker\n     * is collapsed, only one element is created. For example, a model marker set like this: `<paragraph>F[oo b]ar</paragraph>`\n     * becomes `<p>F<span data-marker=\"search\"></span>oo b<span data-marker=\"search\"></span>ar</p>` in the view.\n     *\n     * ```ts\n     * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n     * \tmodel: 'search',\n     * \tview: 'marker-search'\n     * } );\n     *\n     * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n     * \tmodel: 'search',\n     * \tview: 'search-result',\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n     * \tmodel: 'search',\n     * \tview: {\n     * \t\tname: 'span',\n     * \t\tattributes: {\n     * \t\t\t'data-marker': 'search'\n     * \t\t}\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n     * \tmodel: 'search',\n     * \tview: ( markerData, conversionApi ) => {\n     * \t\tconst { writer } = conversionApi;\n     *\n     * \t\treturn writer.createUIElement( 'span', {\n     * \t\t\t'data-marker': 'search',\n     * \t\t\t'data-start': markerData.isOpening\n     * \t\t} );\n     * \t}\n     * } );\n     * ```\n     *\n     * If a function is passed as the `config.view` parameter, it will be used to generate both boundary elements. The function\n     * receives the `data` object and {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n     * as a parameters and should return an instance of the\n     * {@link module:engine/view/uielement~UIElement view UI element}. The `data` object and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi `conversionApi`} are passed from\n     * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker}. Additionally,\n     * the `data.isOpening` parameter is passed, which is set to `true` for the marker start boundary element, and `false` for\n     * the marker end boundary element.\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.model The name of the model marker (or model marker group) to convert.\n     * @param config.view A view element definition or a function that takes the model marker data and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as a parameters\n     * and returns a view UI element.\n     * @param config.converterPriority Converter priority.\n     */\n    markerToElement(config) {\n        return this.add(downcastMarkerToElement(config));\n    }\n    /**\n     * Model marker to highlight conversion helper.\n     *\n     * This conversion results in creating a highlight on view nodes. For this kind of conversion,\n     * the {@link module:engine/conversion/downcasthelpers~HighlightDescriptor} should be provided.\n     *\n     * For text nodes, a `<span>` {@link module:engine/view/attributeelement~AttributeElement} is created and it wraps all text nodes\n     * in the converted marker range. For example, a model marker set like this: `<paragraph>F[oo b]ar</paragraph>` becomes\n     * `<p>F<span class=\"comment\">oo b</span>ar</p>` in the view.\n     *\n     * {@link module:engine/view/containerelement~ContainerElement} may provide a custom way of handling highlight. Most often,\n     * the element itself is given classes and attributes described in the highlight descriptor (instead of being wrapped in `<span>`).\n     * For example, a model marker set like this:\n     * `[<imageInline src=\"foo.jpg\"></imageInline>]` becomes `<img src=\"foo.jpg\" class=\"comment\"></img>` in the view.\n     *\n     * For container elements, the conversion is two-step. While the converter processes the highlight descriptor and passes it\n     * to a container element, it is the container element instance itself that applies values from the highlight descriptor.\n     * So, in a sense, the converter takes care of stating what should be applied on what, while the element decides how to apply that.\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' ).markerToHighlight( { model: 'comment', view: { classes: 'comment' } } );\n     *\n     * editor.conversion.for( 'downcast' ).markerToHighlight( {\n     * \tmodel: 'comment',\n     * \tview: { classes: 'comment' },\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'downcast' ).markerToHighlight( {\n     * \tmodel: 'comment',\n     * \tview: ( data, conversionApi ) => {\n     * \t\t// Assuming that the marker name is in a form of comment:commentType:commentId.\n     * \t\tconst [ , commentType, commentId ] = data.markerName.split( ':' );\n     *\n     * \t\treturn {\n     * \t\t\tclasses: [ 'comment', 'comment-' + commentType ],\n     * \t\t\tattributes: { 'data-comment-id': commentId }\n     * \t\t};\n     * \t}\n     * } );\n     * ```\n     *\n     * If a function is passed as the `config.view` parameter, it will be used to generate the highlight descriptor. The function\n     * receives the `data` object and {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n     * as the parameters and should return a\n     * {@link module:engine/conversion/downcasthelpers~HighlightDescriptor highlight descriptor}.\n     * The `data` object properties are passed from {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker}.\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.model The name of the model marker (or model marker group) to convert.\n     * @param config.view A highlight descriptor that will be used for highlighting or a function that takes the model marker data and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as a parameters\n     * and returns a highlight descriptor.\n     * @param config.converterPriority Converter priority.\n     */\n    markerToHighlight(config) {\n        return this.add(downcastMarkerToHighlight(config));\n    }\n    /**\n     * Model marker converter for data downcast.\n     *\n     * This conversion creates a representation for model marker boundaries in the view:\n     *\n     * * If the marker boundary is before or after a model element, a view attribute is set on a corresponding view element.\n     * * In other cases, a view element with the specified tag name is inserted at the corresponding view position.\n     *\n     * Typically, the marker names use the `group:uniqueId:otherData` convention. For example: `comment:e34zfk9k2n459df53sjl34:zx32c`.\n     * The default configuration for this conversion is that the first part is the `group` part and the rest of\n     * the marker name becomes the `name` part.\n     *\n     * Tag and attribute names and values are generated from the marker name:\n     *\n     * * The templates for attributes are `data-[group]-start-before=\"[name]\"`, `data-[group]-start-after=\"[name]\"`,\n     * `data-[group]-end-before=\"[name]\"` and `data-[group]-end-after=\"[name]\"`.\n     * * The templates for view elements are `<[group]-start name=\"[name]\">` and `<[group]-end name=\"[name]\">`.\n     *\n     * Attributes mark whether the given marker's start or end boundary is before or after the given element.\n     * The `data-[group]-start-before` and `data-[group]-end-after` attributes are favored.\n     * The other two are used when the former two cannot be used.\n     *\n     * The conversion configuration can take a function that will generate different group and name parts.\n     * If such a function is set as the `config.view` parameter, it is passed a marker name and it is expected to return an object with two\n     * properties: `group` and `name`. If the function returns a falsy value, the conversion will not take place.\n     *\n     * Basic usage:\n     *\n     * ```ts\n     * // Using the default conversion.\n     * // In this case, all markers with names starting with 'comment:' will be converted.\n     * // The `group` parameter will be set to `comment`.\n     * // The `name` parameter will be the rest of the marker name (without the `:`).\n     * editor.conversion.for( 'dataDowncast' ).markerToData( {\n     * \tmodel: 'comment'\n     * } );\n     * ```\n     *\n     * An example of a view that may be generated by this conversion (assuming a marker with the name `comment:commentId:uid` marked\n     * by `[]`):\n     *\n     * ```\n     * // Model:\n     * <paragraph>Foo[bar</paragraph>\n     * <imageBlock src=\"abc.jpg\"></imageBlock>]\n     *\n     * // View:\n     * <p>Foo<comment-start name=\"commentId:uid\"></comment-start>bar</p>\n     * <figure data-comment-end-after=\"commentId:uid\" class=\"image\"><img src=\"abc.jpg\" /></figure>\n     * ```\n     *\n     * In the example above, the comment starts before \"bar\" and ends after the image.\n     *\n     * If the `name` part is empty, the following view may be generated:\n     *\n     * ```html\n     * <p>Foo <myMarker-start></myMarker-start>bar</p>\n     * <figure data-myMarker-end-after=\"\" class=\"image\"><img src=\"abc.jpg\" /></figure>\n     * ```\n     *\n     * **Note:** A situation where some markers have the `name` part and some do not, is incorrect and should be avoided.\n     *\n     * Examples where `data-group-start-after` and `data-group-end-before` are used:\n     *\n     * ```\n     * // Model:\n     * <blockQuote>[]<paragraph>Foo</paragraph></blockQuote>\n     *\n     * // View:\n     * <blockquote><p data-group-end-before=\"name\" data-group-start-before=\"name\">Foo</p></blockquote>\n     * ```\n     *\n     * Similarly, when a marker is collapsed after the last element:\n     *\n     * ```\n     * // Model:\n     * <blockQuote><paragraph>Foo</paragraph>[]</blockQuote>\n     *\n     * // View:\n     * <blockquote><p data-group-end-after=\"name\" data-group-start-after=\"name\">Foo</p></blockquote>\n     * ```\n     *\n     * When there are multiple markers from the same group stored in the same attribute of the same element, their\n     * name parts are put together in the attribute value, for example: `data-group-start-before=\"name1,name2,name3\"`.\n     *\n     * Other examples of usage:\n     *\n     * ```ts\n     * // Using a custom function which is the same as the default conversion:\n     * editor.conversion.for( 'dataDowncast' ).markerToData( {\n     * \tmodel: 'comment',\n     * \tview: markerName => ( {\n     * \t\tgroup: 'comment',\n     * \t\tname: markerName.substr( 8 ) // Removes 'comment:' part.\n     * \t} )\n     * } );\n     *\n     * // Using the converter priority:\n     * editor.conversion.for( 'dataDowncast' ).markerToData( {\n     * \tmodel: 'comment',\n     * \tview: markerName => ( {\n     * \t\tgroup: 'comment',\n     * \t\tname: markerName.substr( 8 ) // Removes 'comment:' part.\n     * \t} ),\n     * \tconverterPriority: 'high'\n     * } );\n     * ```\n     *\n     * This kind of conversion is useful for saving data into the database, so it should be used in the data conversion pipeline.\n     *\n     * See the {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} API guide to learn how to\n     * add a converter to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.model The name of the model marker (or the model marker group) to convert.\n     * @param config.view A function that takes the model marker name and\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as the parameters\n     * and returns an object with the `group` and `name` properties.\n     * @param config.converterPriority Converter priority.\n     */\n    markerToData(config) {\n        return this.add(downcastMarkerToData(config));\n    }\n}\n/**\n * Function factory that creates a default downcast converter for text insertion changes.\n *\n * The converter automatically consumes the corresponding value from the consumables list and stops the event (see\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}).\n *\n * ```ts\n * modelDispatcher.on( 'insert:$text', insertText() );\n * ```\n *\n * @returns Insert text event converter.\n */\nexport function insertText() {\n    return (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        const viewWriter = conversionApi.writer;\n        const viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n        const viewText = viewWriter.createText(data.item.data);\n        viewWriter.insert(viewPosition, viewText);\n    };\n}\n/**\n * Function factory that creates a default downcast converter for triggering attributes and children conversion.\n *\n * @returns The converter.\n */\nexport function insertAttributesAndChildren() {\n    return (evt, data, conversionApi) => {\n        conversionApi.convertAttributes(data.item);\n        // Start converting children of the current item.\n        // In case of reconversion children were already re-inserted or converted separately.\n        if (!data.reconversion && data.item.is('element') && !data.item.isEmpty) {\n            conversionApi.convertChildren(data.item);\n        }\n    };\n}\n/**\n * Function factory that creates a default downcast converter for node remove changes.\n *\n * ```ts\n * modelDispatcher.on( 'remove', remove() );\n * ```\n *\n * @returns Remove event converter.\n */\nexport function remove() {\n    return (evt, data, conversionApi) => {\n        // Find the view range start position by mapping the model position at which the remove happened.\n        const viewStart = conversionApi.mapper.toViewPosition(data.position);\n        const modelEnd = data.position.getShiftedBy(data.length);\n        const viewEnd = conversionApi.mapper.toViewPosition(modelEnd, { isPhantom: true });\n        const viewRange = conversionApi.writer.createRange(viewStart, viewEnd);\n        // Trim the range to remove in case some UI elements are on the view range boundaries.\n        const removed = conversionApi.writer.remove(viewRange.getTrimmed());\n        // After the range is removed, unbind all view elements from the model.\n        // Range inside view document fragment is used to unbind deeply.\n        for (const child of conversionApi.writer.createRangeIn(removed).getItems()) {\n            conversionApi.mapper.unbindViewElement(child, { defer: true });\n        }\n    };\n}\n/**\n * Creates a `<span>` {@link module:engine/view/attributeelement~AttributeElement view attribute element} from the information\n * provided by the {@link module:engine/conversion/downcasthelpers~HighlightDescriptor highlight descriptor} object. If the priority\n * is not provided in the descriptor, the default priority will be used.\n */\nexport function createViewElementFromHighlightDescriptor(writer, descriptor) {\n    const viewElement = writer.createAttributeElement('span', descriptor.attributes);\n    if (descriptor.classes) {\n        viewElement._addClass(descriptor.classes);\n    }\n    if (typeof descriptor.priority === 'number') {\n        viewElement._priority = descriptor.priority;\n    }\n    viewElement._id = descriptor.id;\n    return viewElement;\n}\n/**\n * Function factory that creates a converter which converts a non-collapsed {@link module:engine/model/selection~Selection model selection}\n * to a {@link module:engine/view/documentselection~DocumentSelection view selection}. The converter consumes appropriate\n * value from the `consumable` object and maps model positions from the selection to view positions.\n *\n * ```ts\n * modelDispatcher.on( 'selection', convertRangeSelection() );\n * ```\n *\n * @returns Selection converter.\n */\nexport function convertRangeSelection() {\n    return (evt, data, conversionApi) => {\n        const selection = data.selection;\n        if (selection.isCollapsed) {\n            return;\n        }\n        if (!conversionApi.consumable.consume(selection, 'selection')) {\n            return;\n        }\n        const viewRanges = [];\n        for (const range of selection.getRanges()) {\n            viewRanges.push(conversionApi.mapper.toViewRange(range));\n        }\n        conversionApi.writer.setSelection(viewRanges, { backward: selection.isBackward });\n    };\n}\n/**\n * Function factory that creates a converter which converts a collapsed {@link module:engine/model/selection~Selection model selection} to\n * a {@link module:engine/view/documentselection~DocumentSelection view selection}. The converter consumes appropriate\n * value from the `consumable` object, maps the model selection position to the view position and breaks\n * {@link module:engine/view/attributeelement~AttributeElement attribute elements} at the selection position.\n *\n * ```ts\n * modelDispatcher.on( 'selection', convertCollapsedSelection() );\n * ```\n *\n * An example of the view state before and after converting the collapsed selection:\n *\n * ```\n *    <p><strong>f^oo<strong>bar</p>\n * -> <p><strong>f</strong>^<strong>oo</strong>bar</p>\n * ```\n *\n * By breaking attribute elements like `<strong>`, the selection is in a correct element. Then, when the selection attribute is\n * converted, broken attributes might be merged again, or the position where the selection is may be wrapped\n * with different, appropriate attribute elements.\n *\n * See also {@link module:engine/conversion/downcasthelpers~cleanSelection} which does a clean-up\n * by merging attributes.\n *\n * @returns Selection converter.\n */\nexport function convertCollapsedSelection() {\n    return (evt, data, conversionApi) => {\n        const selection = data.selection;\n        if (!selection.isCollapsed) {\n            return;\n        }\n        if (!conversionApi.consumable.consume(selection, 'selection')) {\n            return;\n        }\n        const viewWriter = conversionApi.writer;\n        const modelPosition = selection.getFirstPosition();\n        const viewPosition = conversionApi.mapper.toViewPosition(modelPosition);\n        const brokenPosition = viewWriter.breakAttributes(viewPosition);\n        viewWriter.setSelection(brokenPosition);\n    };\n}\n/**\n * Function factory that creates a converter which cleans artifacts after the previous\n * {@link module:engine/model/selection~Selection model selection} conversion. It removes all empty\n * {@link module:engine/view/attributeelement~AttributeElement view attribute elements} and merges sibling attributes at all start and end\n * positions of all ranges.\n *\n * ```\n *    <p><strong>^</strong></p>\n * -> <p>^</p>\n *\n *    <p><strong>foo</strong>^<strong>bar</strong>bar</p>\n * -> <p><strong>foo^bar<strong>bar</p>\n *\n *    <p><strong>foo</strong><em>^</em><strong>bar</strong>bar</p>\n * -> <p><strong>foo^bar<strong>bar</p>\n * ```\n *\n * This listener should be assigned before any converter for the new selection:\n *\n * ```ts\n * modelDispatcher.on( 'cleanSelection', cleanSelection() );\n * ```\n *\n * See {@link module:engine/conversion/downcasthelpers~convertCollapsedSelection}\n * which does the opposite by breaking attributes in the selection position.\n *\n * @returns Selection converter.\n */\nexport function cleanSelection() {\n    return (evt, data, conversionApi) => {\n        const viewWriter = conversionApi.writer;\n        const viewSelection = viewWriter.document.selection;\n        for (const range of viewSelection.getRanges()) {\n            // Not collapsed selection should not have artifacts.\n            if (range.isCollapsed) {\n                // Position might be in the node removed by the view writer.\n                if (range.end.parent.isAttached()) {\n                    conversionApi.writer.mergeAttributes(range.start);\n                }\n            }\n        }\n        viewWriter.setSelection(null);\n    };\n}\n/**\n * Function factory that creates a converter which converts the set/change/remove attribute changes from the model to the view.\n * It can also be used to convert selection attributes. In that case, an empty attribute element will be created and the\n * selection will be put inside it.\n *\n * Attributes from the model are converted to a view element that will be wrapping these view nodes that are bound to\n * model elements having the given attribute. This is useful for attributes like `bold` that may be set on text nodes in the model\n * but are represented as an element in the view:\n *\n * ```\n * [paragraph]              MODEL ====> VIEW        <p>\n * \t|- a {bold: true}                             |- <b>\n * \t|- b {bold: true}                             |   |- ab\n * \t|- c                                          |- c\n * \t```\n *\n * Passed `Function` will be provided with the attribute value and then all the parameters of the\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:attribute `attribute` event}.\n * It is expected that the function returns an {@link module:engine/view/element~Element}.\n * The result of the function will be the wrapping element.\n * When the provided `Function` does not return any element, no conversion will take place.\n *\n * The converter automatically consumes the corresponding value from the consumables list and stops the event (see\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}).\n *\n * ```ts\n * modelDispatcher.on( 'attribute:bold', wrap( ( modelAttributeValue, { writer } ) => {\n * \treturn writer.createAttributeElement( 'strong' );\n * } );\n * ```\n *\n * @internal\n * @param elementCreator Function returning a view element that will be used for wrapping.\n * @returns Set/change attribute converter.\n */\nexport function wrap(elementCreator) {\n    return (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.test(data.item, evt.name)) {\n            return;\n        }\n        // Recreate current wrapping node. It will be used to unwrap view range if the attribute value has changed\n        // or the attribute was removed.\n        const oldViewElement = elementCreator(data.attributeOldValue, conversionApi, data);\n        // Create node to wrap with.\n        const newViewElement = elementCreator(data.attributeNewValue, conversionApi, data);\n        if (!oldViewElement && !newViewElement) {\n            return;\n        }\n        conversionApi.consumable.consume(data.item, evt.name);\n        const viewWriter = conversionApi.writer;\n        const viewSelection = viewWriter.document.selection;\n        if (data.item instanceof ModelSelection || data.item instanceof ModelDocumentSelection) {\n            // Selection attribute conversion.\n            viewWriter.wrap(viewSelection.getFirstRange(), newViewElement);\n        }\n        else {\n            // Node attribute conversion.\n            let viewRange = conversionApi.mapper.toViewRange(data.range);\n            // First, unwrap the range from current wrapper.\n            if (data.attributeOldValue !== null && oldViewElement) {\n                viewRange = viewWriter.unwrap(viewRange, oldViewElement);\n            }\n            if (data.attributeNewValue !== null && newViewElement) {\n                viewWriter.wrap(viewRange, newViewElement);\n            }\n        }\n    };\n}\n/**\n * Function factory that creates a converter which converts node insertion changes from the model to the view.\n * The function passed will be provided with all the parameters of the dispatcher's\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:insert `insert` event}.\n * It is expected that the function returns an {@link module:engine/view/element~Element}.\n * The result of the function will be inserted into the view.\n *\n * The converter automatically consumes the corresponding value from the consumables list and binds the model and view elements.\n *\n * ```ts\n * downcastDispatcher.on(\n * \t'insert:myElem',\n * \tinsertElement( ( modelItem, { writer } ) => {\n * \t\tconst text = writer.createText( 'myText' );\n * \t\tconst myElem = writer.createElement( 'myElem', { myAttr: 'my-' + modelItem.getAttribute( 'myAttr' ) }, text );\n *\n * \t\t// Do something fancy with `myElem` using `modelItem` or other parameters.\n *\n * \t\treturn myElem;\n * \t}\n * ) );\n * ```\n *\n * @internal\n * @param  elementCreator Function returning a view element, which will be inserted.\n * @param consumer Function defining element consumption process.\n * By default this function just consume passed item insertion.\n * @returns Insert element event converter.\n */\nexport function insertElement(elementCreator, consumer = defaultConsumer) {\n    return (evt, data, conversionApi) => {\n        if (!consumer(data.item, conversionApi.consumable, { preflight: true })) {\n            return;\n        }\n        const viewElement = elementCreator(data.item, conversionApi, data);\n        if (!viewElement) {\n            return;\n        }\n        // Consume an element insertion and all present attributes that are specified as a reconversion triggers.\n        consumer(data.item, conversionApi.consumable);\n        const viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n        conversionApi.mapper.bindElements(data.item, viewElement);\n        conversionApi.writer.insert(viewPosition, viewElement);\n        // Convert attributes before converting children.\n        conversionApi.convertAttributes(data.item);\n        // Convert children or reinsert previous view elements.\n        reinsertOrConvertNodes(viewElement, data.item.getChildren(), conversionApi, { reconversion: data.reconversion });\n    };\n}\n/**\n * Function factory that creates a converter which converts a single model node insertion to a view structure.\n *\n * It is expected that the passed element creator function returns an {@link module:engine/view/element~Element} with attached slots\n * created with `writer.createSlot()` to indicate where child nodes should be converted.\n *\n * @see module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure\n *\n * @internal\n * @param elementCreator Function returning a view structure, which will be inserted.\n * @param consumer A callback that is expected to consume all the consumables\n * that were used by the element creator.\n * @returns Insert element event converter.\n*/\nexport function insertStructure(elementCreator, consumer) {\n    return (evt, data, conversionApi) => {\n        if (!consumer(data.item, conversionApi.consumable, { preflight: true })) {\n            return;\n        }\n        const slotsMap = new Map();\n        conversionApi.writer._registerSlotFactory(createSlotFactory(data.item, slotsMap, conversionApi));\n        // View creation.\n        const viewElement = elementCreator(data.item, conversionApi, data);\n        conversionApi.writer._clearSlotFactory();\n        if (!viewElement) {\n            return;\n        }\n        // Check if all children are covered by slots and there is no child that landed in multiple slots.\n        validateSlotsChildren(data.item, slotsMap, conversionApi);\n        // Consume an element insertion and all present attributes that are specified as a reconversion triggers.\n        consumer(data.item, conversionApi.consumable);\n        const viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n        conversionApi.mapper.bindElements(data.item, viewElement);\n        conversionApi.writer.insert(viewPosition, viewElement);\n        // Convert attributes before converting children.\n        conversionApi.convertAttributes(data.item);\n        // Fill view slots with previous view elements or create new ones.\n        fillSlots(viewElement, slotsMap, conversionApi, { reconversion: data.reconversion });\n    };\n}\n/**\n * Function factory that creates a converter which converts marker adding change to the\n * {@link module:engine/view/uielement~UIElement view UI element}.\n *\n * The view UI element that will be added to the view depends on the passed parameter. See {@link ~insertElement}.\n * In case of a non-collapsed range, the UI element will not wrap nodes but separate elements will be placed at the beginning\n * and at the end of the range.\n *\n * This converter binds created UI elements with the marker name using {@link module:engine/conversion/mapper~Mapper#bindElementToMarker}.\n *\n * @internal\n * @param elementCreator A view UI element or a function returning the view element that will be inserted.\n * @returns Insert element event converter.\n */\nexport function insertUIElement(elementCreator) {\n    return (evt, data, conversionApi) => {\n        // Create two view elements. One will be inserted at the beginning of marker, one at the end.\n        // If marker is collapsed, only \"opening\" element will be inserted.\n        data.isOpening = true;\n        const viewStartElement = elementCreator(data, conversionApi);\n        data.isOpening = false;\n        const viewEndElement = elementCreator(data, conversionApi);\n        if (!viewStartElement || !viewEndElement) {\n            return;\n        }\n        const markerRange = data.markerRange;\n        // Marker that is collapsed has consumable build differently that non-collapsed one.\n        // For more information see `addMarker` event description.\n        // If marker's range is collapsed - check if it can be consumed.\n        if (markerRange.isCollapsed && !conversionApi.consumable.consume(markerRange, evt.name)) {\n            return;\n        }\n        // If marker's range is not collapsed - consume all items inside.\n        for (const value of markerRange) {\n            if (!conversionApi.consumable.consume(value.item, evt.name)) {\n                return;\n            }\n        }\n        const mapper = conversionApi.mapper;\n        const viewWriter = conversionApi.writer;\n        // Add \"opening\" element.\n        viewWriter.insert(mapper.toViewPosition(markerRange.start), viewStartElement);\n        conversionApi.mapper.bindElementToMarker(viewStartElement, data.markerName);\n        // Add \"closing\" element only if range is not collapsed.\n        if (!markerRange.isCollapsed) {\n            viewWriter.insert(mapper.toViewPosition(markerRange.end), viewEndElement);\n            conversionApi.mapper.bindElementToMarker(viewEndElement, data.markerName);\n        }\n        evt.stop();\n    };\n}\n/**\n * Function factory that returns a default downcast converter for removing a {@link module:engine/view/uielement~UIElement UI element}\n * based on marker remove change.\n *\n * This converter unbinds elements from the marker name.\n *\n * @returns Removed UI element converter.\n */\nfunction removeUIElement() {\n    return (evt, data, conversionApi) => {\n        const elements = conversionApi.mapper.markerNameToElements(data.markerName);\n        if (!elements) {\n            return;\n        }\n        for (const element of elements) {\n            conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n            conversionApi.writer.clear(conversionApi.writer.createRangeOn(element), element);\n        }\n        conversionApi.writer.clearClonedElementsGroup(data.markerName);\n        evt.stop();\n    };\n}\n/**\n * Function factory that creates a default converter for model markers.\n *\n * See {@link DowncastHelpers#markerToData} for more information what type of view is generated.\n *\n * This converter binds created UI elements and affected view elements with the marker name\n * using {@link module:engine/conversion/mapper~Mapper#bindElementToMarker}.\n *\n * @returns Add marker converter.\n */\nfunction insertMarkerData(viewCreator) {\n    return (evt, data, conversionApi) => {\n        const viewMarkerData = viewCreator(data.markerName, conversionApi);\n        if (!viewMarkerData) {\n            return;\n        }\n        const markerRange = data.markerRange;\n        if (!conversionApi.consumable.consume(markerRange, evt.name)) {\n            return;\n        }\n        // Adding closing data first to keep the proper order in the view.\n        handleMarkerBoundary(markerRange, false, conversionApi, data, viewMarkerData);\n        handleMarkerBoundary(markerRange, true, conversionApi, data, viewMarkerData);\n        evt.stop();\n    };\n}\n/**\n * Helper function for `insertMarkerData()` that marks a marker boundary at the beginning or end of given `range`.\n */\nfunction handleMarkerBoundary(range, isStart, conversionApi, data, viewMarkerData) {\n    const modelPosition = isStart ? range.start : range.end;\n    const elementAfter = modelPosition.nodeAfter && modelPosition.nodeAfter.is('element') ? modelPosition.nodeAfter : null;\n    const elementBefore = modelPosition.nodeBefore && modelPosition.nodeBefore.is('element') ? modelPosition.nodeBefore : null;\n    if (elementAfter || elementBefore) {\n        let modelElement;\n        let isBefore;\n        // If possible, we want to add `data-group-start-before` and `data-group-end-after` attributes.\n        if (isStart && elementAfter || !isStart && !elementBefore) {\n            // [<elementAfter>...</elementAfter> -> <elementAfter data-group-start-before=\"...\">...</elementAfter>\n            // <parent>]<elementAfter> -> <parent><elementAfter data-group-end-before=\"...\">\n            modelElement = elementAfter;\n            isBefore = true;\n        }\n        else {\n            // <elementBefore>...</elementBefore>] -> <elementBefore data-group-end-after=\"...\">...</elementBefore>\n            // </elementBefore>[</parent> -> </elementBefore data-group-start-after=\"...\"></parent>\n            modelElement = elementBefore;\n            isBefore = false;\n        }\n        const viewElement = conversionApi.mapper.toViewElement(modelElement);\n        // In rare circumstances, the model element may be not mapped to any view element and that would cause an error.\n        // One of those situations is a soft break inside code block.\n        if (viewElement) {\n            insertMarkerAsAttribute(viewElement, isStart, isBefore, conversionApi, data, viewMarkerData);\n            return;\n        }\n    }\n    const viewPosition = conversionApi.mapper.toViewPosition(modelPosition);\n    insertMarkerAsElement(viewPosition, isStart, conversionApi, data, viewMarkerData);\n}\n/**\n * Helper function for `insertMarkerData()` that marks a marker boundary in the view as an attribute on a view element.\n */\nfunction insertMarkerAsAttribute(viewElement, isStart, isBefore, conversionApi, data, viewMarkerData) {\n    const attributeName = `data-${viewMarkerData.group}-${isStart ? 'start' : 'end'}-${isBefore ? 'before' : 'after'}`;\n    const markerNames = viewElement.hasAttribute(attributeName) ? viewElement.getAttribute(attributeName).split(',') : [];\n    // Adding marker name at the beginning to have the same order in the attribute as there is with marker elements.\n    markerNames.unshift(viewMarkerData.name);\n    conversionApi.writer.setAttribute(attributeName, markerNames.join(','), viewElement);\n    conversionApi.mapper.bindElementToMarker(viewElement, data.markerName);\n}\n/**\n * Helper function for `insertMarkerData()` that marks a marker boundary in the view as a separate view ui element.\n */\nfunction insertMarkerAsElement(position, isStart, conversionApi, data, viewMarkerData) {\n    const viewElementName = `${viewMarkerData.group}-${isStart ? 'start' : 'end'}`;\n    const attrs = viewMarkerData.name ? { 'name': viewMarkerData.name } : null;\n    const viewElement = conversionApi.writer.createUIElement(viewElementName, attrs);\n    conversionApi.writer.insert(position, viewElement);\n    conversionApi.mapper.bindElementToMarker(viewElement, data.markerName);\n}\n/**\n * Function factory that creates a converter for removing a model marker data added by the {@link #insertMarkerData} converter.\n *\n * @returns Remove marker converter.\n */\nfunction removeMarkerData(viewCreator) {\n    return (evt, data, conversionApi) => {\n        const viewData = viewCreator(data.markerName, conversionApi);\n        if (!viewData) {\n            return;\n        }\n        const elements = conversionApi.mapper.markerNameToElements(data.markerName);\n        if (!elements) {\n            return;\n        }\n        for (const element of elements) {\n            conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n            if (element.is('containerElement')) {\n                removeMarkerFromAttribute(`data-${viewData.group}-start-before`, element);\n                removeMarkerFromAttribute(`data-${viewData.group}-start-after`, element);\n                removeMarkerFromAttribute(`data-${viewData.group}-end-before`, element);\n                removeMarkerFromAttribute(`data-${viewData.group}-end-after`, element);\n            }\n            else {\n                conversionApi.writer.clear(conversionApi.writer.createRangeOn(element), element);\n            }\n        }\n        conversionApi.writer.clearClonedElementsGroup(data.markerName);\n        evt.stop();\n        function removeMarkerFromAttribute(attributeName, element) {\n            if (element.hasAttribute(attributeName)) {\n                const markerNames = new Set(element.getAttribute(attributeName).split(','));\n                markerNames.delete(viewData.name);\n                if (markerNames.size == 0) {\n                    conversionApi.writer.removeAttribute(attributeName, element);\n                }\n                else {\n                    conversionApi.writer.setAttribute(attributeName, Array.from(markerNames).join(','), element);\n                }\n            }\n        }\n    };\n}\n/**\n * Function factory that creates a converter which converts the set/change/remove attribute changes from the model to the view.\n *\n * Attributes from the model are converted to the view element attributes in the view. You may provide a custom function to generate\n * a key-value attribute pair to add/change/remove. If not provided, model attributes will be converted to view element\n * attributes on a one-to-one basis.\n *\n * *Note:** The provided attribute creator should always return the same `key` for a given attribute from the model.\n *\n * The converter automatically consumes the corresponding value from the consumables list and stops the event (see\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher}).\n *\n * ```ts\n * modelDispatcher.on( 'attribute:customAttr:myElem', changeAttribute( ( value, data ) => {\n * \t// Change attribute key from `customAttr` to `class` in the view.\n * \tconst key = 'class';\n * \tlet value = data.attributeNewValue;\n *\n * \t// Force attribute value to 'empty' if the model element is empty.\n * \tif ( data.item.childCount === 0 ) {\n * \t\tvalue = 'empty';\n * \t}\n *\n * \t// Return the key-value pair.\n * \treturn { key, value };\n * } ) );\n * ```\n *\n * @param attributeCreator Function returning an object with two properties: `key` and `value`, which\n * represent the attribute key and attribute value to be set on a {@link module:engine/view/element~Element view element}.\n * The function is passed the model attribute value as the first parameter and additional data about the change as the second parameter.\n * @returns Set/change attribute converter.\n */\nfunction changeAttribute(attributeCreator) {\n    return (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.test(data.item, evt.name)) {\n            return;\n        }\n        const oldAttribute = attributeCreator(data.attributeOldValue, conversionApi, data);\n        const newAttribute = attributeCreator(data.attributeNewValue, conversionApi, data);\n        if (!oldAttribute && !newAttribute) {\n            return;\n        }\n        conversionApi.consumable.consume(data.item, evt.name);\n        const viewElement = conversionApi.mapper.toViewElement(data.item);\n        const viewWriter = conversionApi.writer;\n        // If model item cannot be mapped to a view element, it means item is not an `Element` instance but a `TextProxy` node.\n        // Only elements can have attributes in a view so do not proceed for anything else (#1587).\n        if (!viewElement) {\n            /**\n             * This error occurs when a {@link module:engine/model/textproxy~TextProxy text node's} attribute is to be downcasted\n             * by an {@link module:engine/conversion/conversion~Conversion#attributeToAttribute `Attribute to Attribute converter`}.\n             * In most cases it is caused by converters misconfiguration when only \"generic\" converter is defined:\n             *\n             * ```ts\n             * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n             * \tmodel: 'attribute-name',\n             * \tview: 'attribute-name'\n             * } ) );\n             * ```\n             *\n             * and given attribute is used on text node, for example:\n             *\n             * ```ts\n             * model.change( writer => {\n             * \twriter.insertText( 'Foo', { 'attribute-name': 'bar' }, parent, 0 );\n             * } );\n             * ```\n             *\n             * In such cases, to convert the same attribute for both {@link module:engine/model/element~Element}\n             * and {@link module:engine/model/textproxy~TextProxy `Text`} nodes, text specific\n             * {@link module:engine/conversion/conversion~Conversion#attributeToElement `Attribute to Element converter`}\n             * with higher {@link module:utils/priorities~PriorityString priority} must also be defined:\n             *\n             * ```ts\n             * editor.conversion.for( 'downcast' ).attributeToElement( {\n             * \tmodel: {\n             * \t\tkey: 'attribute-name',\n             * \t\tname: '$text'\n             * \t},\n             * \tview: ( value, { writer } ) => {\n             * \t\treturn writer.createAttributeElement( 'span', { 'attribute-name': value } );\n             * \t},\n             * \tconverterPriority: 'high'\n             * } ) );\n             * ```\n             *\n             * @error conversion-attribute-to-attribute-on-text\n             */\n            throw new CKEditorError('conversion-attribute-to-attribute-on-text', conversionApi.dispatcher, data);\n        }\n        // First remove the old attribute if there was one.\n        if (data.attributeOldValue !== null && oldAttribute) {\n            if (oldAttribute.key == 'class') {\n                const classes = typeof oldAttribute.value == 'string' ? oldAttribute.value.split(/\\s+/) : oldAttribute.value;\n                for (const className of classes) {\n                    viewWriter.removeClass(className, viewElement);\n                }\n            }\n            else if (oldAttribute.key == 'style') {\n                if (typeof oldAttribute.value == 'string') {\n                    const styles = new StylesMap(viewWriter.document.stylesProcessor);\n                    styles.setTo(oldAttribute.value);\n                    for (const [key] of styles.getStylesEntries()) {\n                        viewWriter.removeStyle(key, viewElement);\n                    }\n                }\n                else {\n                    const keys = Object.keys(oldAttribute.value);\n                    for (const key of keys) {\n                        viewWriter.removeStyle(key, viewElement);\n                    }\n                }\n            }\n            else {\n                viewWriter.removeAttribute(oldAttribute.key, viewElement);\n            }\n        }\n        // Then set the new attribute.\n        if (data.attributeNewValue !== null && newAttribute) {\n            if (newAttribute.key == 'class') {\n                const classes = typeof newAttribute.value == 'string' ? newAttribute.value.split(/\\s+/) : newAttribute.value;\n                for (const className of classes) {\n                    viewWriter.addClass(className, viewElement);\n                }\n            }\n            else if (newAttribute.key == 'style') {\n                if (typeof newAttribute.value == 'string') {\n                    const styles = new StylesMap(viewWriter.document.stylesProcessor);\n                    styles.setTo(newAttribute.value);\n                    for (const [key, value] of styles.getStylesEntries()) {\n                        viewWriter.setStyle(key, value, viewElement);\n                    }\n                }\n                else {\n                    const keys = Object.keys(newAttribute.value);\n                    for (const key of keys) {\n                        viewWriter.setStyle(key, newAttribute.value[key], viewElement);\n                    }\n                }\n            }\n            else {\n                viewWriter.setAttribute(newAttribute.key, newAttribute.value, viewElement);\n            }\n        }\n    };\n}\n/**\n * Function factory that creates a converter which converts the text inside marker's range. The converter wraps the text with\n * {@link module:engine/view/attributeelement~AttributeElement} created from the provided descriptor.\n * See {link module:engine/conversion/downcasthelpers~createViewElementFromHighlightDescriptor}.\n *\n * It can also be used to convert the selection that is inside a marker. In that case, an empty attribute element will be\n * created and the selection will be put inside it.\n *\n * If the highlight descriptor does not provide the `priority` property, `10` will be used.\n *\n * If the highlight descriptor does not provide the `id` property, the name of the marker will be used.\n *\n * This converter binds the created {@link module:engine/view/attributeelement~AttributeElement attribute elemens} with the marker name\n * using the {@link module:engine/conversion/mapper~Mapper#bindElementToMarker} method.\n */\nfunction highlightText(highlightDescriptor) {\n    return (evt, data, conversionApi) => {\n        if (!data.item) {\n            return;\n        }\n        if (!(data.item instanceof ModelSelection || data.item instanceof ModelDocumentSelection) && !data.item.is('$textProxy')) {\n            return;\n        }\n        const descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n        if (!descriptor) {\n            return;\n        }\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        const viewWriter = conversionApi.writer;\n        const viewElement = createViewElementFromHighlightDescriptor(viewWriter, descriptor);\n        const viewSelection = viewWriter.document.selection;\n        if (data.item instanceof ModelSelection || data.item instanceof ModelDocumentSelection) {\n            viewWriter.wrap(viewSelection.getFirstRange(), viewElement);\n        }\n        else {\n            const viewRange = conversionApi.mapper.toViewRange(data.range);\n            const rangeAfterWrap = viewWriter.wrap(viewRange, viewElement);\n            for (const element of rangeAfterWrap.getItems()) {\n                if (element.is('attributeElement') && element.isSimilar(viewElement)) {\n                    conversionApi.mapper.bindElementToMarker(element, data.markerName);\n                    // One attribute element is enough, because all of them are bound together by the view writer.\n                    // Mapper uses this binding to get all the elements no matter how many of them are registered in the mapper.\n                    break;\n                }\n            }\n        }\n    };\n}\n/**\n * Converter function factory. It creates a function which applies the marker's highlight to an element inside the marker's range.\n *\n * The converter checks if an element has the `addHighlight` function stored as a\n * {@link module:engine/view/element~Element#_setCustomProperty custom property} and, if so, uses it to apply the highlight.\n * In such case the converter will consume all element's children, assuming that they were handled by the element itself.\n *\n * When the `addHighlight` custom property is not present, the element is not converted in any special way.\n * This means that converters will proceed to convert the element's child nodes.\n *\n * If the highlight descriptor does not provide the `priority` property, `10` will be used.\n *\n * If the highlight descriptor does not provide the `id` property, the name of the marker will be used.\n *\n * This converter binds altered {@link module:engine/view/containerelement~ContainerElement container elements} with the marker name using\n * the {@link module:engine/conversion/mapper~Mapper#bindElementToMarker} method.\n */\nfunction highlightElement(highlightDescriptor) {\n    return (evt, data, conversionApi) => {\n        if (!data.item) {\n            return;\n        }\n        if (!(data.item instanceof ModelElement)) {\n            return;\n        }\n        const descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n        if (!descriptor) {\n            return;\n        }\n        if (!conversionApi.consumable.test(data.item, evt.name)) {\n            return;\n        }\n        const viewElement = conversionApi.mapper.toViewElement(data.item);\n        if (viewElement && viewElement.getCustomProperty('addHighlight')) {\n            // Consume element itself.\n            conversionApi.consumable.consume(data.item, evt.name);\n            // Consume all children nodes.\n            for (const value of ModelRange._createIn(data.item)) {\n                conversionApi.consumable.consume(value.item, evt.name);\n            }\n            const addHighlightCallback = viewElement.getCustomProperty('addHighlight');\n            addHighlightCallback(viewElement, descriptor, conversionApi.writer);\n            conversionApi.mapper.bindElementToMarker(viewElement, data.markerName);\n        }\n    };\n}\n/**\n * Function factory that creates a converter which converts the removing model marker to the view.\n *\n * Both text nodes and elements are handled by this converter but they are handled a bit differently.\n *\n * Text nodes are unwrapped using the {@link module:engine/view/attributeelement~AttributeElement attribute element} created from the\n * provided highlight descriptor. See {link module:engine/conversion/downcasthelpers~HighlightDescriptor}.\n *\n * For elements, the converter checks if an element has the `removeHighlight` function stored as a\n * {@link module:engine/view/element~Element#_setCustomProperty custom property}. If so, it uses it to remove the highlight.\n * In such case, the children of that element will not be converted.\n *\n * When `removeHighlight` is not present, the element is not converted in any special way.\n * The converter will proceed to convert the element's child nodes instead.\n *\n * If the highlight descriptor does not provide the `priority` property, `10` will be used.\n *\n * If the highlight descriptor does not provide the `id` property, the name of the marker will be used.\n *\n * This converter unbinds elements from the marker name.\n */\nfunction removeHighlight(highlightDescriptor) {\n    return (evt, data, conversionApi) => {\n        // This conversion makes sense only for non-collapsed range.\n        if (data.markerRange.isCollapsed) {\n            return;\n        }\n        const descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n        if (!descriptor) {\n            return;\n        }\n        // View element that will be used to unwrap `AttributeElement`s.\n        const viewHighlightElement = createViewElementFromHighlightDescriptor(conversionApi.writer, descriptor);\n        // Get all elements bound with given marker name.\n        const elements = conversionApi.mapper.markerNameToElements(data.markerName);\n        if (!elements) {\n            return;\n        }\n        for (const element of elements) {\n            conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n            if (element.is('attributeElement')) {\n                conversionApi.writer.unwrap(conversionApi.writer.createRangeOn(element), viewHighlightElement);\n            }\n            else {\n                // if element.is( 'containerElement' ).\n                const removeHighlightCallback = element.getCustomProperty('removeHighlight');\n                removeHighlightCallback(element, descriptor.id, conversionApi.writer);\n            }\n        }\n        conversionApi.writer.clearClonedElementsGroup(data.markerName);\n        evt.stop();\n    };\n}\n/**\n * Model element to view element conversion helper.\n *\n * See {@link ~DowncastHelpers#elementToElement `.elementToElement()` downcast helper} for examples and config params description.\n *\n * @param config Conversion configuration.\n * @param config.model The description or a name of the model element to convert.\n * @param config.model.attributes List of attributes triggering element reconversion.\n * @param config.model.children Should reconvert element if the list of model child nodes changed.\n * @returns Conversion helper.\n */\nfunction downcastElementToElement(config) {\n    const model = normalizeModelElementConfig(config.model);\n    const view = normalizeToElementConfig(config.view, 'container');\n    // Trigger reconversion on children list change if element is a subject to any reconversion.\n    // This is required to be able to trigger Differ#refreshItem() on a direct child of the reconverted element.\n    if (model.attributes.length) {\n        model.children = true;\n    }\n    return (dispatcher) => {\n        dispatcher.on(`insert:${model.name}`, insertElement(view, createConsumer(model)), { priority: config.converterPriority || 'normal' });\n        if (model.children || model.attributes.length) {\n            dispatcher.on('reduceChanges', createChangeReducer(model), { priority: 'low' });\n        }\n    };\n}\n/**\n * Model element to view structure conversion helper.\n *\n * See {@link ~DowncastHelpers#elementToStructure `.elementToStructure()` downcast helper} for examples and config params description.\n *\n * @param config Conversion configuration.\n * @returns Conversion helper.\n */\nfunction downcastElementToStructure(config) {\n    const model = normalizeModelElementConfig(config.model);\n    const view = normalizeToElementConfig(config.view, 'container');\n    // Trigger reconversion on children list change because it always needs to use slots to put children in proper places.\n    // This is required to be able to trigger Differ#refreshItem() on a direct child of the reconverted element.\n    model.children = true;\n    return (dispatcher) => {\n        if (dispatcher._conversionApi.schema.checkChild(model.name, '$text')) {\n            /**\n             * This error occurs when a {@link module:engine/model/element~Element model element} is downcasted\n             * via {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure} helper but the element was\n             * allowed to host `$text` by the {@link module:engine/model/schema~Schema model schema}.\n             *\n             * For instance, this may be the result of `myElement` allowing the content of\n             * {@glink framework/deep-dive/schema#generic-items `$block`} in its schema definition:\n             *\n             * ```ts\n             * // Element definition in schema.\n             * schema.register( 'myElement', {\n             * \tallowContentOf: '$block',\n             *\n             * \t// ...\n             * } );\n             *\n             * // ...\n             *\n             * // Conversion of myElement with the use of elementToStructure().\n             * editor.conversion.for( 'downcast' ).elementToStructure( {\n             * \tmodel: 'myElement',\n             * \tview: ( modelElement, { writer } ) => {\n             * \t\t// ...\n             * \t}\n             * } );\n             * ```\n             *\n             * In such case, {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToElement `elementToElement()`} helper\n             * can be used instead to get around this problem:\n             *\n             * ```ts\n             * editor.conversion.for( 'downcast' ).elementToElement( {\n             * \tmodel: 'myElement',\n             * \tview: ( modelElement, { writer } ) => {\n             * \t\t// ...\n             * \t}\n             * } );\n             * ```\n             *\n             * @error conversion-element-to-structure-disallowed-text\n             * @param {String} elementName The name of the element the structure is to be created for.\n             */\n            throw new CKEditorError('conversion-element-to-structure-disallowed-text', dispatcher, { elementName: model.name });\n        }\n        dispatcher.on(`insert:${model.name}`, insertStructure(view, createConsumer(model)), { priority: config.converterPriority || 'normal' });\n        dispatcher.on('reduceChanges', createChangeReducer(model), { priority: 'low' });\n    };\n}\n/**\n * Model attribute to view element conversion helper.\n *\n * See {@link ~DowncastHelpers#attributeToElement `.attributeToElement()` downcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.model The key of the attribute to convert from or a `{ key, values }` object. `values` is an array\n * of `String`s with possible values if the model attribute is an enumerable.\n * @param config.view A view element definition or a function that takes the model attribute value and\n * {@link module:engine/view/downcastwriter~DowncastWriter view downcast writer} as parameters and returns a view attribute element.\n * If `config.model.values` is given, `config.view` should be an object assigning values from `config.model.values` to view element\n * definitions or functions.\n * @param config.converterPriority Converter priority.\n * @returns Conversion helper.\n */\nfunction downcastAttributeToElement(config) {\n    config = cloneDeep(config);\n    let model = config.model;\n    if (typeof model == 'string') {\n        model = { key: model };\n    }\n    let eventName = `attribute:${model.key}`;\n    if (model.name) {\n        eventName += ':' + model.name;\n    }\n    if (model.values) {\n        for (const modelValue of model.values) {\n            config.view[modelValue] = normalizeToElementConfig(config.view[modelValue], 'attribute');\n        }\n    }\n    else {\n        config.view = normalizeToElementConfig(config.view, 'attribute');\n    }\n    const elementCreator = getFromAttributeCreator(config);\n    return (dispatcher) => {\n        dispatcher.on(eventName, wrap(elementCreator), { priority: config.converterPriority || 'normal' });\n    };\n}\n/**\n * Model attribute to view attribute conversion helper.\n *\n * See {@link ~DowncastHelpers#attributeToAttribute `.attributeToAttribute()` downcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.model The key of the attribute to convert from or a `{ key, values, [ name ] }` object describing\n * the attribute key, possible values and, optionally, an element name to convert from.\n * @param config.view A view attribute key, or a `{ key, value }` object or a function that takes the model attribute value and returns\n * a `{ key, value }` object.\n * If `key` is `'class'`, `value` can be a `String` or an array of `String`s. If `key` is `'style'`, `value` is an object with\n * key-value pairs. In other cases, `value` is a `String`.\n * If `config.model.values` is set, `config.view` should be an object assigning values from `config.model.values` to\n * `{ key, value }` objects or a functions.\n * @param config.converterPriority Converter priority.\n * @returns Conversion helper.\n */\nfunction downcastAttributeToAttribute(config) {\n    config = cloneDeep(config);\n    let model = config.model;\n    if (typeof model == 'string') {\n        model = { key: model };\n    }\n    let eventName = `attribute:${model.key}`;\n    if (model.name) {\n        eventName += ':' + model.name;\n    }\n    if (model.values) {\n        for (const modelValue of model.values) {\n            config.view[modelValue] = normalizeToAttributeConfig(config.view[modelValue]);\n        }\n    }\n    else {\n        config.view = normalizeToAttributeConfig(config.view);\n    }\n    const elementCreator = getFromAttributeCreator(config);\n    return (dispatcher) => {\n        dispatcher.on(eventName, changeAttribute(elementCreator), { priority: config.converterPriority || 'normal' });\n    };\n}\n/**\n * Model marker to view element conversion helper.\n *\n * See {@link ~DowncastHelpers#markerToElement `.markerToElement()` downcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.model The name of the model marker (or model marker group) to convert.\n * @param config.view A view element definition or a function that takes the model marker data as a parameter and returns a view UI element.\n * @param config.converterPriority Converter priority.\n * @returns Conversion helper.\n */\nfunction downcastMarkerToElement(config) {\n    const view = normalizeToElementConfig(config.view, 'ui');\n    return (dispatcher) => {\n        dispatcher.on(`addMarker:${config.model}`, insertUIElement(view), { priority: config.converterPriority || 'normal' });\n        dispatcher.on(`removeMarker:${config.model}`, removeUIElement(), { priority: config.converterPriority || 'normal' });\n    };\n}\n/**\n * Model marker to view data conversion helper.\n *\n * See {@link ~DowncastHelpers#markerToData `markerToData()` downcast helper} to learn more.\n *\n * @returns Conversion helper.\n */\nfunction downcastMarkerToData(config) {\n    config = cloneDeep(config);\n    const group = config.model;\n    let view = config.view;\n    // Default conversion.\n    if (!view) {\n        view = markerName => ({\n            group,\n            name: markerName.substr(config.model.length + 1)\n        });\n    }\n    return (dispatcher) => {\n        dispatcher.on(`addMarker:${group}`, insertMarkerData(view), { priority: config.converterPriority || 'normal' });\n        dispatcher.on(`removeMarker:${group}`, removeMarkerData(view), { priority: config.converterPriority || 'normal' });\n    };\n}\n/**\n * Model marker to highlight conversion helper.\n *\n * See {@link ~DowncastHelpers#markerToElement `.markerToElement()` downcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.model The name of the model marker (or model marker group) to convert.\n * @param config.view A highlight descriptor that will be used for highlighting or a function that takes\n * the model marker data as a parameter and returns a highlight descriptor.\n * @param config.converterPriority Converter priority.\n * @returns Conversion helper.\n */\nfunction downcastMarkerToHighlight(config) {\n    return (dispatcher) => {\n        dispatcher.on(`addMarker:${config.model}`, highlightText(config.view), { priority: config.converterPriority || 'normal' });\n        dispatcher.on(`addMarker:${config.model}`, highlightElement(config.view), { priority: config.converterPriority || 'normal' });\n        dispatcher.on(`removeMarker:${config.model}`, removeHighlight(config.view), { priority: config.converterPriority || 'normal' });\n    };\n}\n/**\n * Takes `config.model`, and converts it to an object with normalized structure.\n *\n * @param model Model configuration or element name.\n */\nfunction normalizeModelElementConfig(model) {\n    if (typeof model == 'string') {\n        model = { name: model };\n    }\n    return {\n        name: model.name,\n        attributes: model.attributes ? toArray(model.attributes) : [],\n        children: !!model.children\n    };\n}\n/**\n * Takes `config.view`, and if it is an {@link module:engine/view/elementdefinition~ElementDefinition}, converts it\n * to a function (because lower level converters accept only element creator functions).\n *\n * @param view View configuration.\n * @param viewElementType View element type to create.\n * @returns Element creator function to use in lower level converters.\n */\nfunction normalizeToElementConfig(view, viewElementType) {\n    if (typeof view == 'function') {\n        // If `view` is already a function, don't do anything.\n        return view;\n    }\n    return ((modelData, conversionApi) => createViewElementFromDefinition(view, conversionApi, viewElementType));\n}\n/**\n * Creates a view element instance from the provided {@link module:engine/view/elementdefinition~ElementDefinition} and class.\n */\nfunction createViewElementFromDefinition(viewElementDefinition, conversionApi, viewElementType) {\n    if (typeof viewElementDefinition == 'string') {\n        // If `viewElementDefinition` is given as a `String`, normalize it to an object with `name` property.\n        viewElementDefinition = { name: viewElementDefinition };\n    }\n    let element;\n    const viewWriter = conversionApi.writer;\n    const attributes = Object.assign({}, viewElementDefinition.attributes);\n    if (viewElementType == 'container') {\n        element = viewWriter.createContainerElement(viewElementDefinition.name, attributes);\n    }\n    else if (viewElementType == 'attribute') {\n        const options = {\n            priority: viewElementDefinition.priority || ViewAttributeElement.DEFAULT_PRIORITY\n        };\n        element = viewWriter.createAttributeElement(viewElementDefinition.name, attributes, options);\n    }\n    else {\n        // 'ui'.\n        element = viewWriter.createUIElement(viewElementDefinition.name, attributes);\n    }\n    if (viewElementDefinition.styles) {\n        const keys = Object.keys(viewElementDefinition.styles);\n        for (const key of keys) {\n            viewWriter.setStyle(key, viewElementDefinition.styles[key], element);\n        }\n    }\n    if (viewElementDefinition.classes) {\n        const classes = viewElementDefinition.classes;\n        if (typeof classes == 'string') {\n            viewWriter.addClass(classes, element);\n        }\n        else {\n            for (const className of classes) {\n                viewWriter.addClass(className, element);\n            }\n        }\n    }\n    return element;\n}\nfunction getFromAttributeCreator(config) {\n    if (config.model.values) {\n        return ((modelAttributeValue, conversionApi, data) => {\n            const view = config.view[modelAttributeValue];\n            if (view) {\n                return view(modelAttributeValue, conversionApi, data);\n            }\n            return null;\n        });\n    }\n    else {\n        return config.view;\n    }\n}\n/**\n * Takes the configuration, adds default parameters if they do not exist and normalizes other parameters to be used in downcast converters\n * for generating a view attribute.\n *\n * @param view View configuration.\n */\nfunction normalizeToAttributeConfig(view) {\n    if (typeof view == 'string') {\n        return modelAttributeValue => ({ key: view, value: modelAttributeValue });\n    }\n    else if (typeof view == 'object') {\n        // { key, value, ... }\n        if (view.value) {\n            return () => view;\n        }\n        // { key, ... }\n        else {\n            return modelAttributeValue => ({ key: view.key, value: modelAttributeValue });\n        }\n    }\n    else {\n        // function.\n        return view;\n    }\n}\n/**\n * Helper function for `highlight`. Prepares the actual descriptor object using value passed to the converter.\n */\nfunction prepareDescriptor(highlightDescriptor, data, conversionApi) {\n    // If passed descriptor is a creator function, call it. If not, just use passed value.\n    const descriptor = typeof highlightDescriptor == 'function' ?\n        highlightDescriptor(data, conversionApi) :\n        highlightDescriptor;\n    if (!descriptor) {\n        return null;\n    }\n    // Apply default descriptor priority.\n    if (!descriptor.priority) {\n        descriptor.priority = 10;\n    }\n    // Default descriptor id is marker name.\n    if (!descriptor.id) {\n        descriptor.id = data.markerName;\n    }\n    return descriptor;\n}\n/**\n * Creates a function that checks a single differ diff item whether it should trigger reconversion.\n *\n * @param model A normalized `config.model` converter configuration.\n * @param model.name The name of element.\n * @param model.attributes The list of attribute names that should trigger reconversion.\n * @param model.children Whether the child list change should trigger reconversion.\n */\nfunction createChangeReducerCallback(model) {\n    return (node, change) => {\n        if (!node.is('element', model.name)) {\n            return false;\n        }\n        if (change.type == 'attribute') {\n            if (model.attributes.includes(change.attributeKey)) {\n                return true;\n            }\n        }\n        else {\n            /* istanbul ignore else: This is always true because otherwise it would not register a reducer callback. -- @preserve */\n            if (model.children) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n/**\n * Creates a `reduceChanges` event handler for reconversion.\n *\n * @param model A normalized `config.model` converter configuration.\n * @param model.name The name of element.\n * @param model.attributes The list of attribute names that should trigger reconversion.\n * @param model.children Whether the child list change should trigger reconversion.\n */\nfunction createChangeReducer(model) {\n    const shouldReplace = createChangeReducerCallback(model);\n    return (evt, data) => {\n        const reducedChanges = [];\n        if (!data.reconvertedElements) {\n            data.reconvertedElements = new Set();\n        }\n        for (const change of data.changes) {\n            // For attribute use node affected by the change.\n            // For insert or remove use parent element because we need to check if it's added/removed child.\n            const node = change.type == 'attribute' ? change.range.start.nodeAfter : change.position.parent;\n            if (!node || !shouldReplace(node, change)) {\n                reducedChanges.push(change);\n                continue;\n            }\n            // If it's already marked for reconversion, so skip this change, otherwise add the diff items.\n            if (!data.reconvertedElements.has(node)) {\n                data.reconvertedElements.add(node);\n                const position = ModelPosition._createBefore(node);\n                let changeIndex = reducedChanges.length;\n                // We need to insert remove+reinsert before any other change on and inside the re-converted element.\n                // This is important because otherwise we would remove element that had already been modified by the previous change.\n                // Note that there could be some element removed before the re-converted element, so we must not break this behavior.\n                for (let i = reducedChanges.length - 1; i >= 0; i--) {\n                    const change = reducedChanges[i];\n                    const changePosition = change.type == 'attribute' ? change.range.start : change.position;\n                    const positionRelation = changePosition.compareWith(position);\n                    if (positionRelation == 'before' || change.type == 'remove' && positionRelation == 'same') {\n                        break;\n                    }\n                    changeIndex = i;\n                }\n                reducedChanges.splice(changeIndex, 0, {\n                    type: 'remove',\n                    name: node.name,\n                    position,\n                    length: 1\n                }, {\n                    type: 'reinsert',\n                    name: node.name,\n                    position,\n                    length: 1\n                });\n            }\n        }\n        data.changes = reducedChanges;\n    };\n}\n/**\n * Creates a function that checks if an element and its watched attributes can be consumed and consumes them.\n *\n * @param model A normalized `config.model` converter configuration.\n * @param model.name The name of element.\n * @param model.attributes The list of attribute names that should trigger reconversion.\n * @param model.children Whether the child list change should trigger reconversion.\n */\nfunction createConsumer(model) {\n    return (node, consumable, options = {}) => {\n        const events = ['insert'];\n        // Collect all set attributes that are triggering conversion.\n        for (const attributeName of model.attributes) {\n            if (node.hasAttribute(attributeName)) {\n                events.push(`attribute:${attributeName}`);\n            }\n        }\n        if (!events.every(event => consumable.test(node, event))) {\n            return false;\n        }\n        if (!options.preflight) {\n            events.forEach(event => consumable.consume(node, event));\n        }\n        return true;\n    };\n}\n/**\n * Creates a function that create view slots.\n *\n * @returns Function exposed by writer as createSlot().\n */\nfunction createSlotFactory(element, slotsMap, conversionApi) {\n    return (writer, modeOrFilter) => {\n        const slot = writer.createContainerElement('$slot');\n        let children = null;\n        if (modeOrFilter === 'children') {\n            children = Array.from(element.getChildren());\n        }\n        else if (typeof modeOrFilter == 'function') {\n            children = Array.from(element.getChildren()).filter(element => modeOrFilter(element));\n        }\n        else {\n            /**\n             * Unknown slot mode was provided to `writer.createSlot()` in downcast converter.\n             *\n             * @error conversion-slot-mode-unknown\n             */\n            throw new CKEditorError('conversion-slot-mode-unknown', conversionApi.dispatcher, { modeOrFilter });\n        }\n        slotsMap.set(slot, children);\n        return slot;\n    };\n}\n/**\n * Checks if all children are covered by slots and there is no child that landed in multiple slots.\n */\nfunction validateSlotsChildren(element, slotsMap, conversionApi) {\n    const childrenInSlots = Array.from(slotsMap.values()).flat();\n    const uniqueChildrenInSlots = new Set(childrenInSlots);\n    if (uniqueChildrenInSlots.size != childrenInSlots.length) {\n        /**\n         * Filters provided to `writer.createSlot()` overlap (at least two filters accept the same child element).\n         *\n         * @error conversion-slot-filter-overlap\n         * @param {module:engine/model/element~Element} element The element of which children would not be properly\n         * allocated to multiple slots.\n         */\n        throw new CKEditorError('conversion-slot-filter-overlap', conversionApi.dispatcher, { element });\n    }\n    if (uniqueChildrenInSlots.size != element.childCount) {\n        /**\n         * Filters provided to `writer.createSlot()` are incomplete and exclude at least one children element (one of\n         * the children elements would not be assigned to any of the slots).\n         *\n         * @error conversion-slot-filter-incomplete\n         * @param {module:engine/model/element~Element} element The element of which children would not be properly\n         * allocated to multiple slots.\n         */\n        throw new CKEditorError('conversion-slot-filter-incomplete', conversionApi.dispatcher, { element });\n    }\n}\n/**\n * Fill slots with appropriate view elements.\n */\nfunction fillSlots(viewElement, slotsMap, conversionApi, options) {\n    // Set temporary position mapping to redirect child view elements into a proper slots.\n    conversionApi.mapper.on('modelToViewPosition', toViewPositionMapping, { priority: 'highest' });\n    let currentSlot = null;\n    let currentSlotNodes = null;\n    // Fill slots with nested view nodes.\n    for ([currentSlot, currentSlotNodes] of slotsMap) {\n        reinsertOrConvertNodes(viewElement, currentSlotNodes, conversionApi, options);\n        conversionApi.writer.move(conversionApi.writer.createRangeIn(currentSlot), conversionApi.writer.createPositionBefore(currentSlot));\n        conversionApi.writer.remove(currentSlot);\n    }\n    conversionApi.mapper.off('modelToViewPosition', toViewPositionMapping);\n    function toViewPositionMapping(evt, data) {\n        const element = data.modelPosition.nodeAfter;\n        // Find the proper offset within the slot.\n        const index = currentSlotNodes.indexOf(element);\n        if (index < 0) {\n            return;\n        }\n        data.viewPosition = data.mapper.findPositionIn(currentSlot, index);\n    }\n}\n/**\n * Inserts view representation of `nodes` into the `viewElement` either by bringing back just removed view nodes\n * or by triggering conversion for them.\n */\nfunction reinsertOrConvertNodes(viewElement, modelNodes, conversionApi, options) {\n    // Fill with nested view nodes.\n    for (const modelChildNode of modelNodes) {\n        // Try reinserting the view node for the specified model node...\n        if (!reinsertNode(viewElement.root, modelChildNode, conversionApi, options)) {\n            // ...or else convert the model element to the view.\n            conversionApi.convertItem(modelChildNode);\n        }\n    }\n}\n/**\n * Checks if the view for the given model element could be reused and reinserts it to the view.\n *\n * @returns `false` if view element can't be reused.\n */\nfunction reinsertNode(viewRoot, modelNode, conversionApi, options) {\n    const { writer, mapper } = conversionApi;\n    // Don't reinsert if this is not a reconversion...\n    if (!options.reconversion) {\n        return false;\n    }\n    const viewChildNode = mapper.toViewElement(modelNode);\n    // ...or there is no view to reinsert or it was already inserted to the view structure...\n    if (!viewChildNode || viewChildNode.root == viewRoot) {\n        return false;\n    }\n    // ...or it was strictly marked as not to be reused.\n    if (!conversionApi.canReuseView(viewChildNode)) {\n        return false;\n    }\n    // Otherwise reinsert the view node.\n    writer.move(writer.createRangeOn(viewChildNode), mapper.toViewPosition(ModelPosition._createBefore(modelNode)));\n    return true;\n}\n/**\n * The default consumer for insert events.\n *\n * @param item Model item.\n * @param consumable The model consumable.\n * @param options.preflight Whether should consume or just check if can be consumed.\n */\nfunction defaultConsumer(item, consumable, { preflight } = {}) {\n    if (preflight) {\n        return consumable.test(item, 'insert');\n    }\n    else {\n        return consumable.consume(item, 'insert');\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/utils/autoparagraphing\n */\n/**\n * Fixes all empty roots.\n *\n * @internal\n * @param writer The model writer.\n * @returns `true` if any change has been applied, `false` otherwise.\n */\nexport function autoParagraphEmptyRoots(writer) {\n    const { schema, document } = writer.model;\n    for (const root of document.getRoots()) {\n        if (root.isEmpty && !schema.checkChild(root, '$text')) {\n            // If paragraph element is allowed in the root, create paragraph element.\n            if (schema.checkChild(root, 'paragraph')) {\n                writer.insertElement('paragraph', root);\n                // Other roots will get fixed in the next post-fixer round. Those will be triggered\n                // in the same batch no matter if this method was triggered by the post-fixing or not\n                // (the above insertElement call will trigger the post-fixers).\n                return true;\n            }\n        }\n    }\n    return false;\n}\n/**\n * Checks if the given node wrapped with a paragraph would be accepted by the schema in the given position.\n *\n * @internal\n * @param position The position at which to check.\n * @param nodeOrType The child node or child type to check.\n * @param schema A schema instance used for element validation.\n */\nexport function isParagraphable(position, nodeOrType, schema) {\n    const context = schema.createContext(position);\n    // When paragraph is allowed in this context...\n    if (!schema.checkChild(context, 'paragraph')) {\n        return false;\n    }\n    // And a node would be allowed in this paragraph...\n    if (!schema.checkChild(context.push('paragraph'), nodeOrType)) {\n        return false;\n    }\n    return true;\n}\n/**\n * Inserts a new paragraph at the given position and returns a position inside that paragraph.\n *\n * @internal\n * @param position The position where a paragraph should be inserted.\n * @param writer The model writer.\n * @returns  Position inside the created paragraph.\n */\nexport function wrapInParagraph(position, writer) {\n    const paragraph = writer.createElement('paragraph');\n    writer.insert(paragraph, position);\n    return writer.createPositionAt(paragraph, 0);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport Matcher from '../view/matcher.js';\nimport ConversionHelpers from './conversionhelpers.js';\nimport { isParagraphable, wrapInParagraph } from '../model/utils/autoparagraphing.js';\nimport { priorities } from '@ckeditor/ckeditor5-utils';\nimport { cloneDeep } from 'lodash-es';\n/**\n * Contains the {@link module:engine/view/view view} to {@link module:engine/model/model model} converters for\n * {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher}.\n *\n * @module engine/conversion/upcasthelpers\n */\n/**\n * Upcast conversion helper functions.\n *\n * Learn more about {@glink framework/deep-dive/conversion/upcast upcast helpers}.\n *\n * @extends module:engine/conversion/conversionhelpers~ConversionHelpers\n */\nexport default class UpcastHelpers extends ConversionHelpers {\n    /**\n     * View element to model element conversion helper.\n     *\n     * This conversion results in creating a model element. For example,\n     * view `<p>Foo</p>` becomes `<paragraph>Foo</paragraph>` in the model.\n     *\n     * Keep in mind that the element will be inserted only if it is allowed\n     * by {@link module:engine/model/schema~Schema schema} configuration.\n     *\n     * ```ts\n     * editor.conversion.for( 'upcast' ).elementToElement( {\n     * \tview: 'p',\n     * \tmodel: 'paragraph'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToElement( {\n     * \tview: 'p',\n     * \tmodel: 'paragraph',\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToElement( {\n     * \tview: {\n     * \t\tname: 'p',\n     * \t\tclasses: 'fancy'\n     * \t},\n     * \tmodel: 'fancyParagraph'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToElement( {\n     * \tview: {\n     * \t\tname: 'p',\n     * \t\tclasses: 'heading'\n     * \t},\n     * \tmodel: ( viewElement, conversionApi ) => {\n     * \t\tconst modelWriter = conversionApi.writer;\n     *\n     * \t\treturn modelWriter.createElement( 'heading', { level: viewElement.getAttribute( 'data-level' ) } );\n     * \t}\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.view Pattern matching all view elements which should be converted. If not set, the converter\n     * will fire for every view element.\n     * @param config.model Name of the model element, a model element instance or a function that takes a view element\n     * and {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API}\n     * and returns a model element. The model element will be inserted in the model.\n     * @param config.converterPriority Converter priority.\n     */\n    elementToElement(config) {\n        return this.add(upcastElementToElement(config));\n    }\n    /**\n     * View element to model attribute conversion helper.\n     *\n     * This conversion results in setting an attribute on a model node. For example, view `<strong>Foo</strong>` becomes\n     * `Foo` {@link module:engine/model/text~Text model text node} with `bold` attribute set to `true`.\n     *\n     * This helper is meant to set a model attribute on all the elements that are inside the converted element:\n     *\n     * ```\n     * <strong>Foo</strong>   -->   <strong><p>Foo</p></strong>   -->   <paragraph><$text bold=\"true\">Foo</$text></paragraph>\n     * ```\n     *\n     * Above is a sample of HTML code, that goes through autoparagraphing (first step) and then is converted (second step).\n     * Even though `<strong>` is over `<p>` element, `bold=\"true\"` was added to the text. See\n     * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#attributeToAttribute} for comparison.\n     *\n     * Keep in mind that the attribute will be set only if it is allowed by {@link module:engine/model/schema~Schema schema} configuration.\n     *\n     * ```ts\n     * editor.conversion.for( 'upcast' ).elementToAttribute( {\n     * \tview: 'strong',\n     * \tmodel: 'bold'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToAttribute( {\n     * \tview: 'strong',\n     * \tmodel: 'bold',\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToAttribute( {\n     * \tview: {\n     * \t\tname: 'span',\n     * \t\tclasses: 'bold'\n     * \t},\n     * \tmodel: 'bold'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToAttribute( {\n     * \tview: {\n     * \t\tname: 'span',\n     * \t\tclasses: [ 'styled', 'styled-dark' ]\n     * \t},\n     * \tmodel: {\n     * \t\tkey: 'styled',\n     * \t\tvalue: 'dark'\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToAttribute( {\n     * \tview: {\n     * \t\tname: 'span',\n     * \t\tstyles: {\n     * \t\t\t'font-size': /[\\s\\S]+/\n     * \t\t}\n     * \t},\n     * \tmodel: {\n     * \t\tkey: 'fontSize',\n     * \t\tvalue: ( viewElement, conversionApi ) => {\n     * \t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     * \t\t\tconst value = fontSize.substr( 0, fontSize.length - 2 );\n     *\n     * \t\t\tif ( value <= 10 ) {\n     * \t\t\t\treturn 'small';\n     * \t\t\t} else if ( value > 12 ) {\n     * \t\t\t\treturn 'big';\n     * \t\t\t}\n     *\n     * \t\t\treturn null;\n     * \t\t}\n     * \t}\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.view Pattern matching all view elements which should be converted.\n     * @param config.model Model attribute key or an object with `key` and `value` properties, describing\n     * the model attribute. `value` property may be set as a function that takes a view element and\n     * {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API} and returns the value.\n     * If `String` is given, the model attribute value will be set to `true`.\n     * @param config.converterPriority Converter priority. Defaults to `low`.\n     */\n    elementToAttribute(config) {\n        return this.add(upcastElementToAttribute(config));\n    }\n    /**\n     * View attribute to model attribute conversion helper.\n     *\n     * This conversion results in setting an attribute on a model node. For example, view `<img src=\"foo.jpg\"></img>` becomes\n     * `<imageBlock source=\"foo.jpg\"></imageBlock>` in the model.\n     *\n     * This helper is meant to convert view attributes from view elements which got converted to the model, so the view attribute\n     * is set only on the corresponding model node:\n     *\n     * ```\n     * <div class=\"dark\"><div>foo</div></div>    -->    <div dark=\"true\"><div>foo</div></div>\n     * ```\n     *\n     * Above, `class=\"dark\"` attribute is added only to the `<div>` elements that has it. This is in contrast to\n     * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToAttribute} which sets attributes for\n     * all the children in the model:\n     *\n     * ```\n     * <strong>Foo</strong>   -->   <strong><p>Foo</p></strong>   -->   <paragraph><$text bold=\"true\">Foo</$text></paragraph>\n     * ```\n     *\n     * Above is a sample of HTML code, that goes through autoparagraphing (first step) and then is converted (second step).\n     * Even though `<strong>` is over `<p>` element, `bold=\"true\"` was added to the text.\n     *\n     * Keep in mind that the attribute will be set only if it is allowed by {@link module:engine/model/schema~Schema schema} configuration.\n     *\n     * ```ts\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: 'src',\n     * \tmodel: 'source'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: { key: 'src' },\n     * \tmodel: 'source'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: { key: 'src' },\n     * \tmodel: 'source',\n     * \tconverterPriority: 'normal'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: {\n     * \t\tkey: 'data-style',\n     * \t\tvalue: /[\\s\\S]+/\n     * \t},\n     * \tmodel: 'styled'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: {\n     * \t\tname: 'img',\n     * \t\tkey: 'class',\n     * \t\tvalue: 'styled-dark'\n     * \t},\n     * \tmodel: {\n     * \t\tkey: 'styled',\n     * \t\tvalue: 'dark'\n     * \t}\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: {\n     * \t\tkey: 'class',\n     * \t\tvalue: /styled-[\\S]+/\n     * \t},\n     * \tmodel: {\n     * \t\tkey: 'styled'\n     * \t\tvalue: ( viewElement, conversionApi ) => {\n     * \t\t\tconst regexp = /styled-([\\S]+)/;\n     * \t\t\tconst match = viewElement.getAttribute( 'class' ).match( regexp );\n     *\n     * \t\t\treturn match[ 1 ];\n     * \t\t}\n     * \t}\n     * } );\n     * ```\n     *\n     * Converting styles works a bit differently as it requires `view.styles` to be an object and by default\n     * a model attribute will be set to `true` by such a converter. You can set the model attribute to any value by providing the `value`\n     * callback that returns the desired value.\n     *\n     * ```ts\n     * // Default conversion of font-weight style will result in setting bold attribute to true.\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: {\n     * \t\tstyles: {\n     * \t\t\t'font-weight': 'bold'\n     * \t\t}\n     * \t},\n     * \tmodel: 'bold'\n     * } );\n     *\n     * // This converter will pass any style value to the `lineHeight` model attribute.\n     * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n     * \tview: {\n     * \t\tstyles: {\n     * \t\t\t'line-height': /[\\s\\S]+/\n     * \t\t}\n     * \t},\n     * \tmodel: {\n     * \t\tkey: 'lineHeight',\n     * \t\tvalue: ( viewElement, conversionApi ) => viewElement.getStyle( 'line-height' )\n     * \t}\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.view Specifies which view attribute will be converted. If a `String` is passed,\n     * attributes with given key will be converted. If an `Object` is passed, it must have a required `key` property,\n     * specifying view attribute key, and may have an optional `value` property, specifying view attribute value and optional `name`\n     * property specifying a view element name from/on which the attribute should be converted. `value` can be given as a `String`,\n     * a `RegExp` or a function callback, that takes view attribute value as the only parameter and returns `Boolean`.\n     * @param config.model Model attribute key or an object with `key` and `value` properties, describing\n     * the model attribute. `value` property may be set as a function that takes a view element and\n     * {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API} and returns the value.\n     * If `String` is given, the model attribute value will be same as view attribute value.\n     * @param config.converterPriority Converter priority. Defaults to `low`.\n     */\n    attributeToAttribute(config) {\n        return this.add(upcastAttributeToAttribute(config));\n    }\n    /**\n     * View element to model marker conversion helper.\n     *\n     * This conversion results in creating a model marker. For example, if the marker was stored in a view as an element:\n     * `<p>Fo<span data-marker=\"comment\" data-comment-id=\"7\"></span>o</p><p>B<span data-marker=\"comment\" data-comment-id=\"7\"></span>ar</p>`,\n     * after the conversion is done, the marker will be available in\n     * {@link module:engine/model/model~Model#markers model document markers}.\n     *\n     * **Note**: When this helper is used in the data upcast in combination with\n     * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToData `#markerToData()`} in the data downcast,\n     * then invalid HTML code (e.g. a span between table cells) may be produced by the latter converter.\n     *\n     * In most of the cases, the {@link #dataToMarker} should be used instead.\n     *\n     * ```ts\n     * editor.conversion.for( 'upcast' ).elementToMarker( {\n     * \tview: 'marker-search',\n     * \tmodel: 'search'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToMarker( {\n     * \tview: 'marker-search',\n     * \tmodel: 'search',\n     * \tconverterPriority: 'high'\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToMarker( {\n     * \tview: 'marker-search',\n     * \tmodel: ( viewElement, conversionApi ) => 'comment:' + viewElement.getAttribute( 'data-comment-id' )\n     * } );\n     *\n     * editor.conversion.for( 'upcast' ).elementToMarker( {\n     * \tview: {\n     * \t\tname: 'span',\n     * \t\tattributes: {\n     * \t\t\t'data-marker': 'search'\n     * \t\t}\n     * \t},\n     * \tmodel: 'search'\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.view Pattern matching all view elements which should be converted.\n     * @param config.model Name of the model marker, or a function that takes a view element and returns\n     * a model marker name.\n     * @param config.converterPriority Converter priority.\n     */\n    elementToMarker(config) {\n        return this.add(upcastElementToMarker(config));\n    }\n    /**\n     * View-to-model marker conversion helper.\n     *\n     * Converts view data created by {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToData `#markerToData()`}\n     * back to a model marker.\n     *\n     * This converter looks for specific view elements and view attributes that mark marker boundaries. See\n     * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToData `#markerToData()`} to learn what view data\n     * is expected by this converter.\n     *\n     * The `config.view` property is equal to the marker group name to convert.\n     *\n     * By default, this converter creates markers with the `group:name` name convention (to match the default `markerToData` conversion).\n     *\n     * The conversion configuration can take a function that will generate a marker name.\n     * If such function is set as the `config.model` parameter, it is passed the `name` part from the view element or attribute and it is\n     * expected to return a string with the marker name.\n     *\n     * Basic usage:\n     *\n     * ```ts\n     * // Using the default conversion.\n     * // In this case, all markers from the `comment` group will be converted.\n     * // The conversion will look for `<comment-start>` and `<comment-end>` tags and\n     * // `data-comment-start-before`, `data-comment-start-after`,\n     * // `data-comment-end-before` and `data-comment-end-after` attributes.\n     * editor.conversion.for( 'upcast' ).dataToMarker( {\n     * \tview: 'comment'\n     * } );\n     * ```\n     *\n     * An example of a model that may be generated by this conversion:\n     *\n     * ```\n     * // View:\n     * <p>Foo<comment-start name=\"commentId:uid\"></comment-start>bar</p>\n     * <figure data-comment-end-after=\"commentId:uid\" class=\"image\"><img src=\"abc.jpg\" /></figure>\n     *\n     * // Model:\n     * <paragraph>Foo[bar</paragraph>\n     * <imageBlock src=\"abc.jpg\"></imageBlock>]\n     * ```\n     *\n     * Where `[]` are boundaries of a marker that will receive the `comment:commentId:uid` name.\n     *\n     * Other examples of usage:\n     *\n     * ```ts\n     * // Using a custom function which is the same as the default conversion:\n     * editor.conversion.for( 'upcast' ).dataToMarker( {\n     * \tview: 'comment',\n     * \tmodel: ( name, conversionApi ) => 'comment:' + name,\n     * } );\n     *\n     * // Using the converter priority:\n     * editor.conversion.for( 'upcast' ).dataToMarker( {\n     * \tview: 'comment',\n     * \tmodel: ( name, conversionApi ) => 'comment:' + name,\n     * \tconverterPriority: 'high'\n     * } );\n     * ```\n     *\n     * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n     * to the conversion process.\n     *\n     * @param config Conversion configuration.\n     * @param config.view The marker group name to convert.\n     * @param config.model A function that takes the `name` part from the view element or attribute and\n     * {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API} and returns the marker name.\n     * @param config.converterPriority Converter priority.\n     */\n    dataToMarker(config) {\n        return this.add(upcastDataToMarker(config));\n    }\n}\n/**\n * Function factory, creates a converter that converts {@link module:engine/view/documentfragment~DocumentFragment view document fragment}\n * or all children of {@link module:engine/view/element~Element} into\n * {@link module:engine/model/documentfragment~DocumentFragment model document fragment}.\n * This is the \"entry-point\" converter for upcast (view to model conversion). This converter starts the conversion of all children\n * of passed view document fragment. Those children {@link module:engine/view/node~Node view nodes} are then handled by other converters.\n *\n * This also a \"default\", last resort converter for all view elements that has not been converted by other converters.\n * When a view element is being converted to the model but it does not have converter specified, that view element\n * will be converted to {@link module:engine/model/documentfragment~DocumentFragment model document fragment} and returned.\n *\n * @returns Universal converter for view {@link module:engine/view/documentfragment~DocumentFragment fragments} and\n * {@link module:engine/view/element~Element elements} that returns\n * {@link module:engine/model/documentfragment~DocumentFragment model fragment} with children of converted view item.\n */\nexport function convertToModelFragment() {\n    return (evt, data, conversionApi) => {\n        // Second argument in `consumable.consume` is discarded for ViewDocumentFragment but is needed for ViewElement.\n        if (!data.modelRange && conversionApi.consumable.consume(data.viewItem, { name: true })) {\n            const { modelRange, modelCursor } = conversionApi.convertChildren(data.viewItem, data.modelCursor);\n            data.modelRange = modelRange;\n            data.modelCursor = modelCursor;\n        }\n    };\n}\n/**\n * Function factory, creates a converter that converts {@link module:engine/view/text~Text} to {@link module:engine/model/text~Text}.\n *\n * @returns {@link module:engine/view/text~Text View text} converter.\n */\nexport function convertText() {\n    return (evt, data, { schema, consumable, writer }) => {\n        let position = data.modelCursor;\n        // When node is already converted then do nothing.\n        if (!consumable.test(data.viewItem)) {\n            return;\n        }\n        if (!schema.checkChild(position, '$text')) {\n            if (!isParagraphable(position, '$text', schema)) {\n                return;\n            }\n            // Do not auto-paragraph whitespaces.\n            if (data.viewItem.data.trim().length == 0) {\n                return;\n            }\n            position = wrapInParagraph(position, writer);\n        }\n        consumable.consume(data.viewItem);\n        const text = writer.createText(data.viewItem.data);\n        writer.insert(text, position);\n        data.modelRange = writer.createRange(position, position.getShiftedBy(text.offsetSize));\n        data.modelCursor = data.modelRange.end;\n    };\n}\n/**\n * Function factory, creates a callback function which converts a {@link module:engine/view/selection~Selection\n * view selection} taken from the {@link module:engine/view/document~Document#event:selectionChange} event\n * and sets in on the {@link module:engine/model/document~Document#selection model}.\n *\n * **Note**: because there is no view selection change dispatcher nor any other advanced view selection to model\n * conversion mechanism, the callback should be set directly on view document.\n *\n * ```ts\n * view.document.on( 'selectionChange', convertSelectionChange( modelDocument, mapper ) );\n * ```\n *\n * @param model Data model.\n * @param mapper Conversion mapper.\n * @returns {@link module:engine/view/document~Document#event:selectionChange} callback function.\n */\nexport function convertSelectionChange(model, mapper) {\n    return (evt, data) => {\n        const viewSelection = data.newSelection;\n        const ranges = [];\n        for (const viewRange of viewSelection.getRanges()) {\n            ranges.push(mapper.toModelRange(viewRange));\n        }\n        const modelSelection = model.createSelection(ranges, { backward: viewSelection.isBackward });\n        if (!modelSelection.isEqual(model.document.selection)) {\n            model.change(writer => {\n                writer.setSelection(modelSelection);\n            });\n        }\n    };\n}\n/**\n * View element to model element conversion helper.\n *\n * See {@link ~UpcastHelpers#elementToElement `.elementToElement()` upcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.view Pattern matching all view elements which should be converted. If not\n * set, the converter will fire for every view element.\n * @param config.model Name of the model element, a model element\n * instance or a function that takes a view element and returns a model element. The model element will be inserted in the model.\n * @param config.converterPriority Converter priority.\n * @returns Conversion helper.\n */\nfunction upcastElementToElement(config) {\n    config = cloneDeep(config);\n    const converter = prepareToElementConverter(config);\n    const elementName = getViewElementNameFromConfig(config.view);\n    const eventName = elementName ? `element:${elementName}` : 'element';\n    return (dispatcher) => {\n        dispatcher.on(eventName, converter, { priority: config.converterPriority || 'normal' });\n    };\n}\n/**\n * View element to model attribute conversion helper.\n *\n * See {@link ~UpcastHelpers#elementToAttribute `.elementToAttribute()` upcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.view Pattern matching all view elements which should be converted.\n * @param config.model Model attribute key or an object with `key` and `value` properties, describing\n * the model attribute. `value` property may be set as a function that takes a view element and returns the value.\n * If `String` is given, the model attribute value will be set to `true`.\n * @param config.converterPriority Converter priority. Defaults to `low`.\n * @returns Conversion helper.\n */\nfunction upcastElementToAttribute(config) {\n    config = cloneDeep(config);\n    normalizeModelAttributeConfig(config);\n    const converter = prepareToAttributeConverter(config, false);\n    const elementName = getViewElementNameFromConfig(config.view);\n    const eventName = elementName ? `element:${elementName}` : 'element';\n    return (dispatcher) => {\n        dispatcher.on(eventName, converter, { priority: config.converterPriority || 'low' });\n    };\n}\n/**\n * View attribute to model attribute conversion helper.\n *\n * See {@link ~UpcastHelpers#attributeToAttribute `.attributeToAttribute()` upcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.view Specifies which view attribute will be converted. If a `String` is passed,\n * attributes with given key will be converted. If an `Object` is passed, it must have a required `key` property,\n * specifying view attribute key, and may have an optional `value` property, specifying view attribute value and optional `name`\n * property specifying a view element name from/on which the attribute should be converted. `value` can be given as a `String`,\n * a `RegExp` or a function callback, that takes view attribute value as the only parameter and returns `Boolean`.\n * @param config.model Model attribute key or an object with `key` and `value` properties, describing\n * the model attribute. `value` property may be set as a function that takes a view element and returns the value.\n * If `String` is given, the model attribute value will be same as view attribute value.\n * @param config.converterPriority Converter priority. Defaults to `low`.\n * @returns Conversion helper.\n */\nfunction upcastAttributeToAttribute(config) {\n    config = cloneDeep(config);\n    let viewKey = null;\n    if (typeof config.view == 'string' || config.view.key) {\n        viewKey = normalizeViewAttributeKeyValueConfig(config);\n    }\n    normalizeModelAttributeConfig(config, viewKey);\n    const converter = prepareToAttributeConverter(config, true);\n    return (dispatcher) => {\n        dispatcher.on('element', converter, { priority: config.converterPriority || 'low' });\n    };\n}\n/**\n * View element to model marker conversion helper.\n *\n * See {@link ~UpcastHelpers#elementToMarker `.elementToMarker()` upcast helper} for examples.\n *\n * @param config Conversion configuration.\n * @param config.view Pattern matching all view elements which should be converted.\n * @param config.model Name of the model marker, or a function that takes a view element and returns\n * a model marker name.\n * @param config.converterPriority Converter priority.\n * @returns Conversion helper.\n */\nfunction upcastElementToMarker(config) {\n    const model = normalizeElementToMarkerModelConfig(config.model);\n    return upcastElementToElement({ ...config, model });\n}\n/**\n * View data to model marker conversion helper.\n *\n * See {@link ~UpcastHelpers#dataToMarker} to learn more.\n *\n * @returns Conversion helper.\n */\nfunction upcastDataToMarker(config) {\n    config = cloneDeep(config);\n    // Default conversion.\n    if (!config.model) {\n        config.model = name => {\n            return name ? config.view + ':' + name : config.view;\n        };\n    }\n    const normalizedConfig = {\n        view: config.view,\n        model: config.model\n    };\n    const converterStart = prepareToElementConverter(normalizeDataToMarkerConfig(normalizedConfig, 'start'));\n    const converterEnd = prepareToElementConverter(normalizeDataToMarkerConfig(normalizedConfig, 'end'));\n    return (dispatcher) => {\n        dispatcher.on(`element:${config.view}-start`, converterStart, { priority: config.converterPriority || 'normal' });\n        dispatcher.on(`element:${config.view}-end`, converterEnd, { priority: config.converterPriority || 'normal' });\n        // Below is a hack that is needed to properly handle `converterPriority` for both elements and attributes.\n        // Attribute conversion needs to be performed *after* element conversion.\n        // This converter handles both element conversion and attribute conversion, which means that if a single\n        // `config.converterPriority` is used, it will lead to problems. For example, if the `'high'` priority is used,\n        // the attribute conversion will be performed before a lot of element upcast converters.\n        // On the other hand, we want to support `config.converterPriority` and converter overwriting.\n        //\n        // To make it work, we need to do some extra processing for priority for attribute converter.\n        // Priority `'low'` value should be the base value and then we will change it depending on `config.converterPriority` value.\n        //\n        // This hack probably would not be needed if attributes are upcasted separately.\n        //\n        const basePriority = priorities.low;\n        const maxPriority = priorities.highest;\n        const priorityFactor = priorities.get(config.converterPriority) / maxPriority; // Number in range [ -1, 1 ].\n        dispatcher.on('element', upcastAttributeToMarker(normalizedConfig), { priority: basePriority + priorityFactor });\n    };\n}\n/**\n * Function factory, returns a callback function which converts view attributes to a model marker.\n *\n * The converter looks for elements with `data-group-start-before`, `data-group-start-after`, `data-group-end-before`\n * and `data-group-end-after` attributes and inserts `$marker` model elements before/after those elements.\n * `group` part is specified in `config.view`.\n *\n * @returns Marker converter.\n */\nfunction upcastAttributeToMarker(config) {\n    return (evt, data, conversionApi) => {\n        const attrName = `data-${config.view}`;\n        // Check if any attribute for the given view item can be consumed before changing the conversion data\n        // and consuming view items with these attributes.\n        if (!conversionApi.consumable.test(data.viewItem, { attributes: attrName + '-end-after' }) &&\n            !conversionApi.consumable.test(data.viewItem, { attributes: attrName + '-start-after' }) &&\n            !conversionApi.consumable.test(data.viewItem, { attributes: attrName + '-end-before' }) &&\n            !conversionApi.consumable.test(data.viewItem, { attributes: attrName + '-start-before' })) {\n            return;\n        }\n        // This converter wants to add a model element, marking a marker, before/after an element (or maybe even group of elements).\n        // To do that, we can use `data.modelRange` which is set on an element (or a group of elements) that has been upcasted.\n        // But, if the processed view element has not been upcasted yet (it does not have been converted), we need to\n        // fire conversion for its children first, then we will have `data.modelRange` available.\n        if (!data.modelRange) {\n            Object.assign(data, conversionApi.convertChildren(data.viewItem, data.modelCursor));\n        }\n        if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + '-end-after' })) {\n            addMarkerElements(data.modelRange.end, data.viewItem.getAttribute(attrName + '-end-after').split(','));\n        }\n        if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + '-start-after' })) {\n            addMarkerElements(data.modelRange.end, data.viewItem.getAttribute(attrName + '-start-after').split(','));\n        }\n        if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + '-end-before' })) {\n            addMarkerElements(data.modelRange.start, data.viewItem.getAttribute(attrName + '-end-before').split(','));\n        }\n        if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + '-start-before' })) {\n            addMarkerElements(data.modelRange.start, data.viewItem.getAttribute(attrName + '-start-before').split(','));\n        }\n        function addMarkerElements(position, markerViewNames) {\n            for (const markerViewName of markerViewNames) {\n                const markerName = config.model(markerViewName, conversionApi);\n                const element = conversionApi.writer.createElement('$marker', { 'data-name': markerName });\n                conversionApi.writer.insert(element, position);\n                if (data.modelCursor.isEqual(position)) {\n                    data.modelCursor = data.modelCursor.getShiftedBy(1);\n                }\n                else {\n                    data.modelCursor = data.modelCursor._getTransformedByInsertion(position, 1);\n                }\n                data.modelRange = data.modelRange._getTransformedByInsertion(position, 1)[0];\n            }\n        }\n    };\n}\n/**\n * Helper function for from-view-element conversion. Checks if `config.view` directly specifies converted view element's name\n * and if so, returns it.\n *\n * @param config Conversion view config.\n * @returns View element name or `null` if name is not directly set.\n */\nfunction getViewElementNameFromConfig(viewConfig) {\n    if (typeof viewConfig == 'string') {\n        return viewConfig;\n    }\n    if (typeof viewConfig == 'object' && typeof viewConfig.name == 'string') {\n        return viewConfig.name;\n    }\n    return null;\n}\n/**\n * Helper for to-model-element conversion. Takes a config object and returns a proper converter function.\n *\n * @param config Conversion configuration.\n * @returns View to model converter.\n */\nfunction prepareToElementConverter(config) {\n    const matcher = new Matcher(config.view);\n    return (evt, data, conversionApi) => {\n        const matcherResult = matcher.match(data.viewItem);\n        if (!matcherResult) {\n            return;\n        }\n        const match = matcherResult.match;\n        // Force consuming element's name.\n        match.name = true;\n        if (!conversionApi.consumable.test(data.viewItem, match)) {\n            return;\n        }\n        const modelElement = getModelElement(config.model, data.viewItem, conversionApi);\n        if (!modelElement) {\n            return;\n        }\n        if (!conversionApi.safeInsert(modelElement, data.modelCursor)) {\n            return;\n        }\n        conversionApi.consumable.consume(data.viewItem, match);\n        conversionApi.convertChildren(data.viewItem, modelElement);\n        conversionApi.updateConversionResult(modelElement, data);\n    };\n}\n/**\n * Helper function for upcasting-to-element converter. Takes the model configuration, the converted view element\n * and a writer instance and returns a model element instance to be inserted in the model.\n *\n * @param model Model conversion configuration.\n * @param input The converted view node.\n * @param conversionApi The upcast conversion API.\n */\nfunction getModelElement(model, input, conversionApi) {\n    if (model instanceof Function) {\n        return model(input, conversionApi);\n    }\n    else {\n        return conversionApi.writer.createElement(model);\n    }\n}\n/**\n * Helper function view-attribute-to-model-attribute helper. Normalizes `config.view` which was set as `String` or\n * as an `Object` with `key`, `value` and `name` properties. Normalized `config.view` has is compatible with\n * {@link module:engine/view/matcher~MatcherPattern}.\n *\n * @param config Conversion config.\n * @returns Key of the converted view attribute.\n */\nfunction normalizeViewAttributeKeyValueConfig(config) {\n    if (typeof config.view == 'string') {\n        config.view = { key: config.view };\n    }\n    const key = config.view.key;\n    const value = typeof config.view.value == 'undefined' ? /[\\s\\S]*/ : config.view.value;\n    let normalized;\n    if (key == 'class' || key == 'style') {\n        const keyName = key == 'class' ? 'classes' : 'styles';\n        normalized = {\n            [keyName]: value\n        };\n    }\n    else {\n        normalized = {\n            attributes: {\n                [key]: value\n            }\n        };\n    }\n    if (config.view.name) {\n        normalized.name = config.view.name;\n    }\n    config.view = normalized;\n    return key;\n}\n/**\n * Helper function that normalizes `config.model` in from-model-attribute conversion. `config.model` can be set\n * as a `String`, an `Object` with only `key` property or an `Object` with `key` and `value` properties. Normalized\n * `config.model` is an `Object` with `key` and `value` properties.\n *\n * @param config Conversion config.\n * @param viewAttributeKeyToCopy Key of the converted view attribute. If it is set, model attribute value\n * will be equal to view attribute value.\n */\nfunction normalizeModelAttributeConfig(config, viewAttributeKeyToCopy = null) {\n    const defaultModelValue = viewAttributeKeyToCopy === null ? true :\n        (viewElement) => viewElement.getAttribute(viewAttributeKeyToCopy);\n    const key = typeof config.model != 'object' ? config.model : config.model.key;\n    const value = typeof config.model != 'object' || typeof config.model.value == 'undefined' ? defaultModelValue : config.model.value;\n    config.model = { key, value };\n}\n/**\n * Helper for to-model-attribute conversion. Takes the model attribute name and conversion configuration and returns\n * a proper converter function.\n *\n * @param config Conversion configuration. It is possible to provide multiple configurations in an array.\n * @param shallow If set to `true` the attribute will be set only on top-level nodes. Otherwise, it will be set\n * on all elements in the range.\n */\nfunction prepareToAttributeConverter(config, shallow) {\n    const matcher = new Matcher(config.view);\n    return (evt, data, conversionApi) => {\n        // Converting an attribute of an element that has not been converted to anything does not make sense\n        // because there will be nowhere to set that attribute on. At this stage, the element should've already\n        // been converted (https://github.com/ckeditor/ckeditor5/issues/11000).\n        if (!data.modelRange && shallow) {\n            return;\n        }\n        const match = matcher.match(data.viewItem);\n        // If there is no match, this callback should not do anything.\n        if (!match) {\n            return;\n        }\n        if (onlyViewNameIsDefined(config.view, data.viewItem)) {\n            match.match.name = true;\n        }\n        else {\n            // Do not test `name` consumable because it could get consumed already while upcasting some other attribute\n            // on the same element (for example <span class=\"big\" style=\"color: red\">foo</span>).\n            delete match.match.name;\n        }\n        // Try to consume appropriate values from consumable values list.\n        if (!conversionApi.consumable.test(data.viewItem, match.match)) {\n            return;\n        }\n        const modelKey = config.model.key;\n        const modelValue = typeof config.model.value == 'function' ?\n            config.model.value(data.viewItem, conversionApi) : config.model.value;\n        // Do not convert if attribute building function returned falsy value.\n        if (modelValue === null) {\n            return;\n        }\n        // Since we are converting to attribute we need a range on which we will set the attribute.\n        // If the range is not created yet, let's create it by converting children of the current node first.\n        if (!data.modelRange) {\n            // Convert children and set conversion result as a current data.\n            Object.assign(data, conversionApi.convertChildren(data.viewItem, data.modelCursor));\n        }\n        // Set attribute on current `output`. `Schema` is checked inside this helper function.\n        const attributeWasSet = setAttributeOn(data.modelRange, { key: modelKey, value: modelValue }, shallow, conversionApi);\n        // It may happen that a converter will try to set an attribute that is not allowed in the given context.\n        // In such a situation we cannot consume the attribute. See: https://github.com/ckeditor/ckeditor5/pull/9249#issuecomment-815658459.\n        if (attributeWasSet) {\n            // Verify if the element itself wasn't consumed yet. It could be consumed already while upcasting some other attribute\n            // on the same element (for example <span class=\"big\" style=\"color: red\">foo</span>).\n            // We need to consume it so other features (especially GHS) won't try to convert it.\n            // Note that it's not tested by the other element-to-attribute converters whether an element was consumed before\n            // (in case of converters that the element itself is just a context and not the primary information to convert).\n            if (conversionApi.consumable.test(data.viewItem, { name: true })) {\n                match.match.name = true;\n            }\n            conversionApi.consumable.consume(data.viewItem, match.match);\n        }\n    };\n}\n/**\n * Helper function that checks if element name should be consumed in attribute converters.\n *\n * @param viewConfig Conversion view config.\n */\nfunction onlyViewNameIsDefined(viewConfig, viewItem) {\n    // https://github.com/ckeditor/ckeditor5-engine/issues/1786\n    const configToTest = typeof viewConfig == 'function' ? viewConfig(viewItem) : viewConfig;\n    if (typeof configToTest == 'object' && !getViewElementNameFromConfig(configToTest)) {\n        return false;\n    }\n    return !configToTest.classes && !configToTest.attributes && !configToTest.styles;\n}\n/**\n * Helper function for to-model-attribute converter. Sets model attribute on given range. Checks {@link module:engine/model/schema~Schema}\n * to ensure proper model structure.\n *\n * If any node on the given range has already defined an attribute with the same name, its value will not be updated.\n *\n * @param modelRange Model range on which attribute should be set.\n * @param modelAttribute Model attribute to set.\n * @param conversionApi Conversion API.\n * @param shallow If set to `true` the attribute will be set only on top-level nodes. Otherwise, it will be set\n * on all elements in the range.\n * @returns `true` if attribute was set on at least one node from given `modelRange`.\n */\nfunction setAttributeOn(modelRange, modelAttribute, shallow, conversionApi) {\n    let result = false;\n    // Set attribute on each item in range according to Schema.\n    for (const node of Array.from(modelRange.getItems({ shallow }))) {\n        // Skip if not allowed.\n        if (!conversionApi.schema.checkAttribute(node, modelAttribute.key)) {\n            continue;\n        }\n        // Mark the node as consumed even if the attribute will not be updated because it's in a valid context (schema)\n        // and would be converted if the attribute wouldn't be present. See #8921.\n        result = true;\n        // Do not override the attribute if it's already present.\n        if (node.hasAttribute(modelAttribute.key)) {\n            continue;\n        }\n        conversionApi.writer.setAttribute(modelAttribute.key, modelAttribute.value, node);\n    }\n    return result;\n}\n/**\n * Helper function for upcasting-to-marker conversion. Takes the config in a format requested by `upcastElementToMarker()`\n * function and converts it to a format that is supported by `upcastElementToElement()` function.\n */\nfunction normalizeElementToMarkerModelConfig(model) {\n    return (viewElement, conversionApi) => {\n        const markerName = typeof model == 'string' ? model : model(viewElement, conversionApi);\n        return conversionApi.writer.createElement('$marker', { 'data-name': markerName });\n    };\n}\n/**\n * Helper function for upcasting-to-marker conversion. Takes the config in a format requested by `upcastDataToMarker()`\n * function and converts it to a format that is supported by `upcastElementToElement()` function.\n */\nfunction normalizeDataToMarkerConfig(config, type) {\n    const elementCreatorFunction = (viewElement, conversionApi) => {\n        const viewName = viewElement.getAttribute('name');\n        const markerName = config.model(viewName, conversionApi);\n        return conversionApi.writer.createElement('$marker', { 'data-name': markerName });\n    };\n    return {\n        // Upcast <markerGroup-start> and <markerGroup-end> elements.\n        view: `${config.view}-${type}`,\n        model: elementCreatorFunction\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/utils/selection-post-fixer\n */\nimport Position from '../position.js';\nimport Range from '../range.js';\n/**\n * Injects selection post-fixer to the model.\n *\n * The role of the selection post-fixer is to ensure that the selection is in a correct place\n * after a {@link module:engine/model/model~Model#change `change()`} block was executed.\n *\n * The correct position means that:\n *\n * * All collapsed selection ranges are in a place where the {@link module:engine/model/schema~Schema}\n * allows a `$text`.\n * * None of the selection's non-collapsed ranges crosses a {@link module:engine/model/schema~Schema#isLimit limit element}\n * boundary (a range must be rooted within one limit element).\n * * Only {@link module:engine/model/schema~Schema#isSelectable selectable elements} can be selected from the outside\n * (e.g. `[<paragraph>foo</paragraph>]` is invalid). This rule applies independently to both selection ends, so this\n * selection is correct: `<paragraph>f[oo</paragraph><imageBlock></imageBlock>]`.\n *\n * If the position is not correct, the post-fixer will automatically correct it.\n *\n * ## Fixing a non-collapsed selection\n *\n * See as an example a selection that starts in a P1 element and ends inside the text of a TD element\n * (`[` and `]` are range boundaries and `(l)` denotes an element defined as `isLimit=true`):\n *\n * ```\n * root\n *  |- element P1\n *  |   |- \"foo\"                                      root\n *  |- element TABLE (l)                   P1         TABLE             P2\n *  |   |- element TR (l)                 f o[o     TR      TR         b a r\n *  |   |   |- element TD (l)                       TD      TD\n *  |   |       |- \"aaa\"                          a]a a    b b b\n *  |   |- element TR (l)\n *  |   |   |- element TD (l)                           ||\n *  |   |       |- \"bbb\"                                ||\n *  |- element P2                                       VV\n *  |   |- \"bar\"\n *                                                    root\n *                                         P1         TABLE]            P2\n *                                        f o[o     TR      TR         b a r\n *                                                  TD      TD\n *                                                a a a    b b b\n * ```\n *\n * In the example above, the TABLE, TR and TD are defined as `isLimit=true` in the schema. The range which is not contained within\n * a single limit element must be expanded to select the outermost limit element. The range end is inside the text node of the TD element.\n * As the TD element is a child of the TR and TABLE elements, where both are defined as `isLimit=true` in the schema, the range must be\n * expanded to select the whole TABLE element.\n *\n * **Note** If the selection contains multiple ranges, the method returns a minimal set of ranges that are not intersecting after expanding\n * them to select `isLimit=true` elements.\n */\nexport function injectSelectionPostFixer(model) {\n    model.document.registerPostFixer(writer => selectionPostFixer(writer, model));\n}\n/**\n * The selection post-fixer.\n */\nfunction selectionPostFixer(writer, model) {\n    const selection = model.document.selection;\n    const schema = model.schema;\n    const ranges = [];\n    let wasFixed = false;\n    for (const modelRange of selection.getRanges()) {\n        // Go through all ranges in selection and try fixing each of them.\n        // Those ranges might overlap but will be corrected later.\n        const correctedRange = tryFixingRange(modelRange, schema);\n        // \"Selection fixing\" algorithms sometimes get lost. In consequence, it may happen\n        // that a new range is returned but, in fact, it has the same positions as the original\n        // range anyway. If this range is not discarded, a new selection will be set and that,\n        // for instance, would destroy the selection attributes. Let's make sure that the post-fixer\n        // actually worked first before setting a new selection.\n        //\n        // https://github.com/ckeditor/ckeditor5/issues/6693\n        if (correctedRange && !correctedRange.isEqual(modelRange)) {\n            ranges.push(correctedRange);\n            wasFixed = true;\n        }\n        else {\n            ranges.push(modelRange);\n        }\n    }\n    // If any of ranges were corrected update the selection.\n    if (wasFixed) {\n        writer.setSelection(mergeIntersectingRanges(ranges), { backward: selection.isBackward });\n    }\n    return false;\n}\n/**\n * Tries fixing a range if it's incorrect.\n *\n * **Note:** This helper is used by the selection post-fixer and to fix the `beforeinput` target ranges.\n *\n * @returns Returns fixed range or null if range is valid.\n */\nexport function tryFixingRange(range, schema) {\n    if (range.isCollapsed) {\n        return tryFixingCollapsedRange(range, schema);\n    }\n    return tryFixingNonCollapsedRage(range, schema);\n}\n/**\n * Tries to fix collapsed ranges.\n *\n * * Fixes situation when a range is in a place where $text is not allowed\n *\n * @param range Collapsed range to fix.\n * @returns Returns fixed range or null if range is valid.\n */\nfunction tryFixingCollapsedRange(range, schema) {\n    const originalPosition = range.start;\n    const nearestSelectionRange = schema.getNearestSelectionRange(originalPosition);\n    // This might be null, i.e. when the editor data is empty or the selection is inside a limit element\n    // that doesn't allow text inside.\n    // In the first case, there is no need to fix the selection range.\n    // In the second, let's go up to the outer selectable element\n    if (!nearestSelectionRange) {\n        const ancestorObject = originalPosition.getAncestors().reverse().find((item) => schema.isObject(item));\n        if (ancestorObject) {\n            return Range._createOn(ancestorObject);\n        }\n        return null;\n    }\n    if (!nearestSelectionRange.isCollapsed) {\n        return nearestSelectionRange;\n    }\n    const fixedPosition = nearestSelectionRange.start;\n    // Fixed position is the same as original - no need to return corrected range.\n    if (originalPosition.isEqual(fixedPosition)) {\n        return null;\n    }\n    return new Range(fixedPosition);\n}\n/**\n * Tries to fix an expanded range.\n *\n * @param range Expanded range to fix.\n * @returns Returns fixed range or null if range is valid.\n */\nfunction tryFixingNonCollapsedRage(range, schema) {\n    const { start, end } = range;\n    const isTextAllowedOnStart = schema.checkChild(start, '$text');\n    const isTextAllowedOnEnd = schema.checkChild(end, '$text');\n    const startLimitElement = schema.getLimitElement(start);\n    const endLimitElement = schema.getLimitElement(end);\n    // Ranges which both end are inside the same limit element (or root) might needs only minor fix.\n    if (startLimitElement === endLimitElement) {\n        // Range is valid when both position allows to place a text:\n        // - <block>f[oobarba]z</block>\n        // This would be \"fixed\" by a next check but as it will be the same it's better to return null so the selection stays the same.\n        if (isTextAllowedOnStart && isTextAllowedOnEnd) {\n            return null;\n        }\n        // Range that is on non-limit element (or is partially) must be fixed so it is placed inside the block around $text:\n        // - [<block>foo</block>]    ->    <block>[foo]</block>\n        // - [<block>foo]</block>    ->    <block>[foo]</block>\n        // - <block>f[oo</block>]    ->    <block>f[oo]</block>\n        // - [<block>foo</block><selectable></selectable>]    ->    <block>[foo</block><selectable></selectable>]\n        if (checkSelectionOnNonLimitElements(start, end, schema)) {\n            const isStartBeforeSelectable = start.nodeAfter && schema.isSelectable(start.nodeAfter);\n            const fixedStart = isStartBeforeSelectable ? null : schema.getNearestSelectionRange(start, 'forward');\n            const isEndAfterSelectable = end.nodeBefore && schema.isSelectable(end.nodeBefore);\n            const fixedEnd = isEndAfterSelectable ? null : schema.getNearestSelectionRange(end, 'backward');\n            // The schema.getNearestSelectionRange might return null - if that happens use original position.\n            const rangeStart = fixedStart ? fixedStart.start : start;\n            const rangeEnd = fixedEnd ? fixedEnd.end : end;\n            return new Range(rangeStart, rangeEnd);\n        }\n    }\n    const isStartInLimit = startLimitElement && !startLimitElement.is('rootElement');\n    const isEndInLimit = endLimitElement && !endLimitElement.is('rootElement');\n    // At this point we eliminated valid positions on text nodes so if one of range positions is placed inside a limit element\n    // then the range crossed limit element boundaries and needs to be fixed.\n    if (isStartInLimit || isEndInLimit) {\n        const bothInSameParent = (start.nodeAfter && end.nodeBefore) && start.nodeAfter.parent === end.nodeBefore.parent;\n        const expandStart = isStartInLimit && (!bothInSameParent || !isSelectable(start.nodeAfter, schema));\n        const expandEnd = isEndInLimit && (!bothInSameParent || !isSelectable(end.nodeBefore, schema));\n        // Although we've already found limit element on start/end positions we must find the outer-most limit element.\n        // as limit elements might be nested directly inside (ie table > tableRow > tableCell).\n        let fixedStart = start;\n        let fixedEnd = end;\n        if (expandStart) {\n            fixedStart = Position._createBefore(findOutermostLimitAncestor(startLimitElement, schema));\n        }\n        if (expandEnd) {\n            fixedEnd = Position._createAfter(findOutermostLimitAncestor(endLimitElement, schema));\n        }\n        return new Range(fixedStart, fixedEnd);\n    }\n    // Range was not fixed at this point so it is valid - ie it was placed around limit element already.\n    return null;\n}\n/**\n * Finds the outer-most ancestor.\n */\nfunction findOutermostLimitAncestor(startingNode, schema) {\n    let isLimitNode = startingNode;\n    let parent = isLimitNode;\n    // Find outer most isLimit block as such blocks might be nested (ie. in tables).\n    while (schema.isLimit(parent) && parent.parent) {\n        isLimitNode = parent;\n        parent = parent.parent;\n    }\n    return isLimitNode;\n}\n/**\n * Checks whether any of range boundaries is placed around non-limit elements.\n */\nfunction checkSelectionOnNonLimitElements(start, end, schema) {\n    const startIsOnBlock = (start.nodeAfter && !schema.isLimit(start.nodeAfter)) || schema.checkChild(start, '$text');\n    const endIsOnBlock = (end.nodeBefore && !schema.isLimit(end.nodeBefore)) || schema.checkChild(end, '$text');\n    // We should fix such selection when one of those nodes needs fixing.\n    return startIsOnBlock || endIsOnBlock;\n}\n/**\n * Returns a minimal non-intersecting array of ranges without duplicates.\n *\n * @param ranges Ranges to merge.\n * @returns Array of unique and non-intersecting ranges.\n */\nexport function mergeIntersectingRanges(ranges) {\n    const rangesToMerge = [...ranges];\n    const rangeIndexesToRemove = new Set();\n    let currentRangeIndex = 1;\n    while (currentRangeIndex < rangesToMerge.length) {\n        const currentRange = rangesToMerge[currentRangeIndex];\n        const previousRanges = rangesToMerge.slice(0, currentRangeIndex);\n        for (const [previousRangeIndex, previousRange] of previousRanges.entries()) {\n            if (rangeIndexesToRemove.has(previousRangeIndex)) {\n                continue;\n            }\n            if (currentRange.isEqual(previousRange)) {\n                rangeIndexesToRemove.add(previousRangeIndex);\n            }\n            else if (currentRange.isIntersecting(previousRange)) {\n                rangeIndexesToRemove.add(previousRangeIndex);\n                rangeIndexesToRemove.add(currentRangeIndex);\n                const mergedRange = currentRange.getJoined(previousRange);\n                rangesToMerge.push(mergedRange);\n            }\n        }\n        currentRangeIndex++;\n    }\n    const nonIntersectingRanges = rangesToMerge.filter((_, index) => !rangeIndexesToRemove.has(index));\n    return nonIntersectingRanges;\n}\n/**\n * Checks if node exists and if it's a selectable.\n */\nfunction isSelectable(node, schema) {\n    return node && schema.isSelectable(node);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/controller/editingcontroller\n */\nimport { CKEditorError, ObservableMixin, env } from '@ckeditor/ckeditor5-utils';\nimport RootEditableElement from '../view/rooteditableelement.js';\nimport View from '../view/view.js';\nimport Mapper from '../conversion/mapper.js';\nimport DowncastDispatcher from '../conversion/downcastdispatcher.js';\nimport { cleanSelection, convertCollapsedSelection, convertRangeSelection, insertAttributesAndChildren, insertText, remove } from '../conversion/downcasthelpers.js';\nimport { convertSelectionChange } from '../conversion/upcasthelpers.js';\nimport { tryFixingRange } from '../model/utils/selection-post-fixer.js';\n// @if CK_DEBUG_ENGINE // const { dumpTrees, initDocumentDumping } = require( '../dev-utils/utils' );\n/**\n * A controller for the editing pipeline. The editing pipeline controls the {@link ~EditingController#model model} rendering,\n * including selection handling. It also creates the {@link ~EditingController#view view} which builds a\n * browser-independent virtualization over the DOM elements. The editing controller also attaches default converters.\n */\nexport default class EditingController extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates an editing controller instance.\n     *\n     * @param model Editing model.\n     * @param stylesProcessor The styles processor instance.\n     */\n    constructor(model, stylesProcessor) {\n        super();\n        this.model = model;\n        this.view = new View(stylesProcessor);\n        this.mapper = new Mapper();\n        this.downcastDispatcher = new DowncastDispatcher({\n            mapper: this.mapper,\n            schema: model.schema\n        });\n        const doc = this.model.document;\n        const selection = doc.selection;\n        const markers = this.model.markers;\n        // When plugins listen on model changes (on selection change, post fixers, etc.) and change the view as a result of\n        // the model's change, they might trigger view rendering before the conversion is completed (e.g. before the selection\n        // is converted). We disable rendering for the length of the outermost model change() block to prevent that.\n        //\n        // See https://github.com/ckeditor/ckeditor5-engine/issues/1528\n        this.listenTo(this.model, '_beforeChanges', () => {\n            this.view._disableRendering(true);\n        }, { priority: 'highest' });\n        this.listenTo(this.model, '_afterChanges', () => {\n            this.view._disableRendering(false);\n        }, { priority: 'lowest' });\n        // Whenever model document is changed, convert those changes to the view (using model.Document#differ).\n        // Do it on 'low' priority, so changes are converted after other listeners did their job.\n        // Also convert model selection.\n        this.listenTo(doc, 'change', () => {\n            this.view.change(writer => {\n                this.downcastDispatcher.convertChanges(doc.differ, markers, writer);\n                this.downcastDispatcher.convertSelection(selection, markers, writer);\n            });\n        }, { priority: 'low' });\n        // Convert selection from the view to the model when it changes in the view.\n        this.listenTo(this.view.document, 'selectionChange', convertSelectionChange(this.model, this.mapper));\n        // Fix `beforeinput` target ranges so that they map to the valid model ranges.\n        this.listenTo(this.view.document, 'beforeinput', fixTargetRanges(this.mapper, this.model.schema, this.view), { priority: 'high' });\n        // Attach default model converters.\n        this.downcastDispatcher.on('insert:$text', insertText(), { priority: 'lowest' });\n        this.downcastDispatcher.on('insert', insertAttributesAndChildren(), { priority: 'lowest' });\n        this.downcastDispatcher.on('remove', remove(), { priority: 'low' });\n        // Attach default model selection converters.\n        this.downcastDispatcher.on('cleanSelection', cleanSelection());\n        this.downcastDispatcher.on('selection', convertRangeSelection(), { priority: 'low' });\n        this.downcastDispatcher.on('selection', convertCollapsedSelection(), { priority: 'low' });\n        // Binds {@link module:engine/view/document~Document#roots view roots collection} to\n        // {@link module:engine/model/document~Document#roots model roots collection} so creating\n        // model root automatically creates corresponding view root.\n        this.view.document.roots.bindTo(this.model.document.roots).using(root => {\n            // $graveyard is a special root that has no reflection in the view.\n            if (root.rootName == '$graveyard') {\n                return null;\n            }\n            const viewRoot = new RootEditableElement(this.view.document, root.name);\n            viewRoot.rootName = root.rootName;\n            this.mapper.bindElements(root, viewRoot);\n            return viewRoot;\n        });\n        // @if CK_DEBUG_ENGINE // initDocumentDumping( this.model.document );\n        // @if CK_DEBUG_ENGINE // initDocumentDumping( this.view.document );\n        // @if CK_DEBUG_ENGINE // dumpTrees( this.model.document, this.model.document.version );\n        // @if CK_DEBUG_ENGINE // dumpTrees( this.view.document, this.model.document.version );\n        // @if CK_DEBUG_ENGINE // this.model.document.on( 'change', () => {\n        // @if CK_DEBUG_ENGINE //\tdumpTrees( this.view.document, this.model.document.version );\n        // @if CK_DEBUG_ENGINE // }, { priority: 'lowest' } );\n    }\n    /**\n     * Removes all event listeners attached to the `EditingController`. Destroys all objects created\n     * by `EditingController` that need to be destroyed.\n     */\n    destroy() {\n        this.view.destroy();\n        this.stopListening();\n    }\n    /**\n     * Calling this method will refresh the marker by triggering the downcast conversion for it.\n     *\n     * Reconverting the marker is useful when you want to change its {@link module:engine/view/element~Element view element}\n     * without changing any marker data. For instance:\n     *\n     * ```ts\n     * let isCommentActive = false;\n     *\n     * model.conversion.markerToHighlight( {\n     * \tmodel: 'comment',\n     * \tview: data => {\n     * \t\tconst classes = [ 'comment-marker' ];\n     *\n     * \t\tif ( isCommentActive ) {\n     * \t\t\tclasses.push( 'comment-marker--active' );\n     * \t\t}\n     *\n     * \t\treturn { classes };\n     * \t}\n     * } );\n     *\n     * // ...\n     *\n     * // Change the property that indicates if marker is displayed as active or not.\n     * isCommentActive = true;\n     *\n     * // Reconverting will downcast and synchronize the marker with the new isCommentActive state value.\n     * editor.editing.reconvertMarker( 'comment' );\n     * ```\n     *\n     * **Note**: If you want to reconvert a model item, use {@link #reconvertItem} instead.\n     *\n     * @param markerOrName Name of a marker to update, or a marker instance.\n     */\n    reconvertMarker(markerOrName) {\n        const markerName = typeof markerOrName == 'string' ? markerOrName : markerOrName.name;\n        const currentMarker = this.model.markers.get(markerName);\n        if (!currentMarker) {\n            /**\n             * The marker with the provided name does not exist and cannot be reconverted.\n             *\n             * @error editingcontroller-reconvertmarker-marker-not-exist\n             * @param {String} markerName The name of the reconverted marker.\n             */\n            throw new CKEditorError('editingcontroller-reconvertmarker-marker-not-exist', this, { markerName });\n        }\n        this.model.change(() => {\n            this.model.markers._refresh(currentMarker);\n        });\n    }\n    /**\n     * Calling this method will downcast a model item on demand (by requesting a refresh in the {@link module:engine/model/differ~Differ}).\n     *\n     * You can use it if you want the view representation of a specific item updated as a response to external modifications. For instance,\n     * when the view structure depends not only on the associated model data but also on some external state.\n     *\n     * **Note**: If you want to reconvert a model marker, use {@link #reconvertMarker} instead.\n     *\n     * @param item Item to refresh.\n     */\n    reconvertItem(item) {\n        this.model.change(() => {\n            this.model.document.differ._refreshItem(item);\n        });\n    }\n}\n/**\n * Checks whether the target ranges provided by the `beforeInput` event can be properly mapped to model ranges and fixes them if needed.\n *\n * This is using the same logic as the selection post-fixer.\n */\nfunction fixTargetRanges(mapper, schema, view) {\n    return (evt, data) => {\n        // The Renderer is disabled while composing on non-android browsers, so we can't be sure that target ranges\n        // could be properly mapped to view and model because the DOM and view tree drifted apart.\n        if (view.document.isComposing && !env.isAndroid) {\n            return;\n        }\n        for (let i = 0; i < data.targetRanges.length; i++) {\n            const viewRange = data.targetRanges[i];\n            const modelRange = mapper.toModelRange(viewRange);\n            const correctedRange = tryFixingRange(modelRange, schema);\n            if (!correctedRange || correctedRange.isEqual(modelRange)) {\n                continue;\n            }\n            data.targetRanges[i] = mapper.toViewRange(correctedRange);\n        }\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/viewconsumable\n */\nimport { CKEditorError, toArray } from '@ckeditor/ckeditor5-utils';\n/**\n * Class used for handling consumption of view {@link module:engine/view/element~Element elements},\n * {@link module:engine/view/text~Text text nodes} and {@link module:engine/view/documentfragment~DocumentFragment document fragments}.\n * Element's name and its parts (attributes, classes and styles) can be consumed separately. Consuming an element's name\n * does not consume its attributes, classes and styles.\n * To add items for consumption use {@link module:engine/conversion/viewconsumable~ViewConsumable#add add method}.\n * To test items use {@link module:engine/conversion/viewconsumable~ViewConsumable#test test method}.\n * To consume items use {@link module:engine/conversion/viewconsumable~ViewConsumable#consume consume method}.\n * To revert already consumed items use {@link module:engine/conversion/viewconsumable~ViewConsumable#revert revert method}.\n *\n * ```ts\n * viewConsumable.add( element, { name: true } ); // Adds element's name as ready to be consumed.\n * viewConsumable.add( textNode ); // Adds text node for consumption.\n * viewConsumable.add( docFragment ); // Adds document fragment for consumption.\n * viewConsumable.test( element, { name: true }  ); // Tests if element's name can be consumed.\n * viewConsumable.test( textNode ); // Tests if text node can be consumed.\n * viewConsumable.test( docFragment ); // Tests if document fragment can be consumed.\n * viewConsumable.consume( element, { name: true }  ); // Consume element's name.\n * viewConsumable.consume( textNode ); // Consume text node.\n * viewConsumable.consume( docFragment ); // Consume document fragment.\n * viewConsumable.revert( element, { name: true }  ); // Revert already consumed element's name.\n * viewConsumable.revert( textNode ); // Revert already consumed text node.\n * viewConsumable.revert( docFragment ); // Revert already consumed document fragment.\n * ```\n */\nexport default class ViewConsumable {\n    constructor() {\n        /**\n         * Map of consumable elements. If {@link module:engine/view/element~Element element} is used as a key,\n         * {@link module:engine/conversion/viewconsumable~ViewElementConsumables ViewElementConsumables} instance is stored as value.\n         * For {@link module:engine/view/text~Text text nodes} and\n         * {@link module:engine/view/documentfragment~DocumentFragment document fragments} boolean value is stored as value.\n         */\n        this._consumables = new Map();\n    }\n    add(element, consumables) {\n        let elementConsumables;\n        // For text nodes and document fragments just mark them as consumable.\n        if (element.is('$text') || element.is('documentFragment')) {\n            this._consumables.set(element, true);\n            return;\n        }\n        // For elements create new ViewElementConsumables or update already existing one.\n        if (!this._consumables.has(element)) {\n            elementConsumables = new ViewElementConsumables(element);\n            this._consumables.set(element, elementConsumables);\n        }\n        else {\n            elementConsumables = this._consumables.get(element);\n        }\n        elementConsumables.add(consumables);\n    }\n    /**\n     * Tests if {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment} can be consumed.\n     * It returns `true` when all items included in method's call can be consumed. Returns `false` when\n     * first already consumed item is found and `null` when first non-consumable item is found.\n     *\n     * ```ts\n     * viewConsumable.test( p, { name: true } ); // Tests element's name.\n     * viewConsumable.test( p, { attributes: 'name' } ); // Tests attribute.\n     * viewConsumable.test( p, { classes: 'foobar' } ); // Tests class.\n     * viewConsumable.test( p, { styles: 'color' } ); // Tests style.\n     * viewConsumable.test( p, { attributes: 'name', styles: 'color' } ); // Tests attribute and style.\n     * viewConsumable.test( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be tested.\n     * viewConsumable.test( textNode ); // Tests text node.\n     * viewConsumable.test( docFragment ); // Tests document fragment.\n     * ```\n     *\n     * Testing classes and styles as attribute will test if all added classes/styles can be consumed.\n     *\n     * ```ts\n     * viewConsumable.test( p, { attributes: 'class' } ); // Tests if all added classes can be consumed.\n     * viewConsumable.test( p, { attributes: 'style' } ); // Tests if all added styles can be consumed.\n     * ```\n     *\n     * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n     * @param consumables.name If set to true element's name will be included.\n     * @param consumables.attributes Attribute name or array of attribute names.\n     * @param consumables.classes Class name or array of class names.\n     * @param consumables.styles Style name or array of style names.\n     * @returns Returns `true` when all items included in method's call can be consumed. Returns `false`\n     * when first already consumed item is found and `null` when first non-consumable item is found.\n     */\n    test(element, consumables) {\n        const elementConsumables = this._consumables.get(element);\n        if (elementConsumables === undefined) {\n            return null;\n        }\n        // For text nodes and document fragments return stored boolean value.\n        if (element.is('$text') || element.is('documentFragment')) {\n            return elementConsumables;\n        }\n        // For elements test consumables object.\n        return elementConsumables.test(consumables);\n    }\n    /**\n     * Consumes {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n     * It returns `true` when all items included in method's call can be consumed, otherwise returns `false`.\n     *\n     * ```ts\n     * viewConsumable.consume( p, { name: true } ); // Consumes element's name.\n     * viewConsumable.consume( p, { attributes: 'name' } ); // Consumes element's attribute.\n     * viewConsumable.consume( p, { classes: 'foobar' } ); // Consumes element's class.\n     * viewConsumable.consume( p, { styles: 'color' } ); // Consumes element's style.\n     * viewConsumable.consume( p, { attributes: 'name', styles: 'color' } ); // Consumes attribute and style.\n     * viewConsumable.consume( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be consumed.\n     * viewConsumable.consume( textNode ); // Consumes text node.\n     * viewConsumable.consume( docFragment ); // Consumes document fragment.\n     * ```\n     *\n     * Consuming classes and styles as attribute will test if all added classes/styles can be consumed.\n     *\n     * ```ts\n     * viewConsumable.consume( p, { attributes: 'class' } ); // Consume only if all added classes can be consumed.\n     * viewConsumable.consume( p, { attributes: 'style' } ); // Consume only if all added styles can be consumed.\n     * ```\n     *\n     * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n     * @param consumables.name If set to true element's name will be included.\n     * @param consumables.attributes Attribute name or array of attribute names.\n     * @param consumables.classes Class name or array of class names.\n     * @param consumables.styles Style name or array of style names.\n     * @returns Returns `true` when all items included in method's call can be consumed,\n     * otherwise returns `false`.\n     */\n    consume(element, consumables) {\n        if (this.test(element, consumables)) {\n            if (element.is('$text') || element.is('documentFragment')) {\n                // For text nodes and document fragments set value to false.\n                this._consumables.set(element, false);\n            }\n            else {\n                // For elements - consume consumables object.\n                this._consumables.get(element).consume(consumables);\n            }\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Reverts {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n     * {@link module:engine/view/documentfragment~DocumentFragment document fragment} so they can be consumed once again.\n     * Method does not revert items that were never previously added for consumption, even if they are included in\n     * method's call.\n     *\n     * ```ts\n     * viewConsumable.revert( p, { name: true } ); // Reverts element's name.\n     * viewConsumable.revert( p, { attributes: 'name' } ); // Reverts element's attribute.\n     * viewConsumable.revert( p, { classes: 'foobar' } ); // Reverts element's class.\n     * viewConsumable.revert( p, { styles: 'color' } ); // Reverts element's style.\n     * viewConsumable.revert( p, { attributes: 'name', styles: 'color' } ); // Reverts attribute and style.\n     * viewConsumable.revert( p, { classes: [ 'baz', 'bar' ] } ); // Multiple names can be reverted.\n     * viewConsumable.revert( textNode ); // Reverts text node.\n     * viewConsumable.revert( docFragment ); // Reverts document fragment.\n     * ```\n     *\n     * Reverting classes and styles as attribute will revert all classes/styles that were previously added for\n     * consumption.\n     *\n     * ```ts\n     * viewConsumable.revert( p, { attributes: 'class' } ); // Reverts all classes added for consumption.\n     * viewConsumable.revert( p, { attributes: 'style' } ); // Reverts all styles added for consumption.\n     * ```\n     *\n     * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n     * @param consumables.name If set to true element's name will be included.\n     * @param consumables.attributes Attribute name or array of attribute names.\n     * @param consumables.classes Class name or array of class names.\n     * @param consumables.styles Style name or array of style names.\n     */\n    revert(element, consumables) {\n        const elementConsumables = this._consumables.get(element);\n        if (elementConsumables !== undefined) {\n            if (element.is('$text') || element.is('documentFragment')) {\n                // For text nodes and document fragments - set consumable to true.\n                this._consumables.set(element, true);\n            }\n            else {\n                // For elements - revert items from consumables object.\n                elementConsumables.revert(consumables);\n            }\n        }\n    }\n    /**\n     * Creates consumable object from {@link module:engine/view/element~Element view element}. Consumable object will include\n     * element's name and all its attributes, classes and styles.\n     */\n    static consumablesFromElement(element) {\n        const consumables = {\n            element,\n            name: true,\n            attributes: [],\n            classes: [],\n            styles: []\n        };\n        const attributes = element.getAttributeKeys();\n        for (const attribute of attributes) {\n            // Skip classes and styles - will be added separately.\n            if (attribute == 'style' || attribute == 'class') {\n                continue;\n            }\n            consumables.attributes.push(attribute);\n        }\n        const classes = element.getClassNames();\n        for (const className of classes) {\n            consumables.classes.push(className);\n        }\n        const styles = element.getStyleNames();\n        for (const style of styles) {\n            consumables.styles.push(style);\n        }\n        return consumables;\n    }\n    /**\n     * Creates {@link module:engine/conversion/viewconsumable~ViewConsumable ViewConsumable} instance from\n     * {@link module:engine/view/node~Node node} or {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n     * Instance will contain all elements, child nodes, attributes, styles and classes added for consumption.\n     *\n     * @param from View node or document fragment from which `ViewConsumable` will be created.\n     * @param instance If provided, given `ViewConsumable` instance will be used\n     * to add all consumables. It will be returned instead of a new instance.\n     */\n    static createFrom(from, instance) {\n        if (!instance) {\n            instance = new ViewConsumable();\n        }\n        if (from.is('$text')) {\n            instance.add(from);\n            return instance;\n        }\n        // Add `from` itself, if it is an element.\n        if (from.is('element')) {\n            instance.add(from, ViewConsumable.consumablesFromElement(from));\n        }\n        if (from.is('documentFragment')) {\n            instance.add(from);\n        }\n        for (const child of from.getChildren()) {\n            instance = ViewConsumable.createFrom(child, instance);\n        }\n        return instance;\n    }\n}\nconst CONSUMABLE_TYPES = ['attributes', 'classes', 'styles'];\n/**\n * This is a private helper-class for {@link module:engine/conversion/viewconsumable~ViewConsumable}.\n * It represents and manipulates consumable parts of a single {@link module:engine/view/element~Element}.\n */\nexport class ViewElementConsumables {\n    /**\n     * Creates ViewElementConsumables instance.\n     *\n     * @param from View node or document fragment from which `ViewElementConsumables` is being created.\n     */\n    constructor(from) {\n        this.element = from;\n        this._canConsumeName = null;\n        this._consumables = {\n            attributes: new Map(),\n            styles: new Map(),\n            classes: new Map()\n        };\n    }\n    /**\n     * Adds consumable parts of the {@link module:engine/view/element~Element view element}.\n     * Element's name itself can be marked to be consumed (when element's name is consumed its attributes, classes and\n     * styles still could be consumed):\n     *\n     * ```ts\n     * consumables.add( { name: true } );\n     * ```\n     *\n     * Attributes classes and styles:\n     *\n     * ```ts\n     * consumables.add( { attributes: 'title', classes: 'foo', styles: 'color' } );\n     * consumables.add( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n     * ```\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`\n     * attribute is provided - it should be handled separately by providing `style` and `class` in consumables object.\n     *\n     * @param consumables Object describing which parts of the element can be consumed.\n     * @param consumables.name If set to `true` element's name will be added as consumable.\n     * @param consumables.attributes Attribute name or array of attribute names to add as consumable.\n     * @param consumables.classes Class name or array of class names to add as consumable.\n     * @param consumables.styles Style name or array of style names to add as consumable.\n     */\n    add(consumables) {\n        if (consumables.name) {\n            this._canConsumeName = true;\n        }\n        for (const type of CONSUMABLE_TYPES) {\n            if (type in consumables) {\n                this._add(type, consumables[type]);\n            }\n        }\n    }\n    /**\n     * Tests if parts of the {@link module:engine/view/node~Node view node} can be consumed.\n     *\n     * Element's name can be tested:\n     *\n     * ```ts\n     * consumables.test( { name: true } );\n     * ```\n     *\n     * Attributes classes and styles:\n     *\n     * ```ts\n     * consumables.test( { attributes: 'title', classes: 'foo', styles: 'color' } );\n     * consumables.test( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n     * ```\n     *\n     * @param consumables Object describing which parts of the element should be tested.\n     * @param consumables.name If set to `true` element's name will be tested.\n     * @param consumables.attributes Attribute name or array of attribute names to test.\n     * @param consumables.classes Class name or array of class names to test.\n     * @param consumables.styles Style name or array of style names to test.\n     * @returns `true` when all tested items can be consumed, `null` when even one of the items\n     * was never marked for consumption and `false` when even one of the items was already consumed.\n     */\n    test(consumables) {\n        // Check if name can be consumed.\n        if (consumables.name && !this._canConsumeName) {\n            return this._canConsumeName;\n        }\n        for (const type of CONSUMABLE_TYPES) {\n            if (type in consumables) {\n                const value = this._test(type, consumables[type]);\n                if (value !== true) {\n                    return value;\n                }\n            }\n        }\n        // Return true only if all can be consumed.\n        return true;\n    }\n    /**\n     * Consumes parts of {@link module:engine/view/element~Element view element}. This function does not check if consumable item\n     * is already consumed - it consumes all consumable items provided.\n     * Element's name can be consumed:\n     *\n     * ```ts\n     * consumables.consume( { name: true } );\n     * ```\n     *\n     * Attributes classes and styles:\n     *\n     * ```ts\n     * consumables.consume( { attributes: 'title', classes: 'foo', styles: 'color' } );\n     * consumables.consume( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n     * ```\n     *\n     * @param consumables Object describing which parts of the element should be consumed.\n     * @param consumables.name If set to `true` element's name will be consumed.\n     * @param consumables.attributes Attribute name or array of attribute names to consume.\n     * @param consumables.classes Class name or array of class names to consume.\n     * @param consumables.styles Style name or array of style names to consume.\n     */\n    consume(consumables) {\n        if (consumables.name) {\n            this._canConsumeName = false;\n        }\n        for (const type of CONSUMABLE_TYPES) {\n            if (type in consumables) {\n                this._consume(type, consumables[type]);\n            }\n        }\n    }\n    /**\n     * Revert already consumed parts of {@link module:engine/view/element~Element view Element}, so they can be consumed once again.\n     * Element's name can be reverted:\n     *\n     * ```ts\n     * consumables.revert( { name: true } );\n     * ```\n     *\n     * Attributes classes and styles:\n     *\n     * ```ts\n     * consumables.revert( { attributes: 'title', classes: 'foo', styles: 'color' } );\n     * consumables.revert( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n     * ```\n     *\n     * @param consumables Object describing which parts of the element should be reverted.\n     * @param consumables.name If set to `true` element's name will be reverted.\n     * @param consumables.attributes Attribute name or array of attribute names to revert.\n     * @param consumables.classes Class name or array of class names to revert.\n     * @param consumables.styles Style name or array of style names to revert.\n     */\n    revert(consumables) {\n        if (consumables.name) {\n            this._canConsumeName = true;\n        }\n        for (const type of CONSUMABLE_TYPES) {\n            if (type in consumables) {\n                this._revert(type, consumables[type]);\n            }\n        }\n    }\n    /**\n     * Helper method that adds consumables of a given type: attribute, class or style.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`\n     * type is provided - it should be handled separately by providing actual style/class type.\n     *\n     * @param type Type of the consumable item: `attributes`, `classes` or `styles`.\n     * @param item Consumable item or array of items.\n     */\n    _add(type, item) {\n        const items = toArray(item);\n        const consumables = this._consumables[type];\n        for (const name of items) {\n            if (type === 'attributes' && (name === 'class' || name === 'style')) {\n                /**\n                 * Class and style attributes should be handled separately in\n                 * {@link module:engine/conversion/viewconsumable~ViewConsumable#add `ViewConsumable#add()`}.\n                 *\n                 * What you have done is trying to use:\n                 *\n                 * ```ts\n                 * consumables.add( { attributes: [ 'class', 'style' ] } );\n                 * ```\n                 *\n                 * While each class and style should be registered separately:\n                 *\n                 * ```ts\n                 * consumables.add( { classes: 'some-class', styles: 'font-weight' } );\n                 * ```\n                 *\n                 * @error viewconsumable-invalid-attribute\n                 */\n                throw new CKEditorError('viewconsumable-invalid-attribute', this);\n            }\n            consumables.set(name, true);\n            if (type === 'styles') {\n                for (const alsoName of this.element.document.stylesProcessor.getRelatedStyles(name)) {\n                    consumables.set(alsoName, true);\n                }\n            }\n        }\n    }\n    /**\n     * Helper method that tests consumables of a given type: attribute, class or style.\n     *\n     * @param type Type of the consumable item: `attributes`, `classes` or `styles`.\n     * @param item Consumable item or array of items.\n     * @returns Returns `true` if all items can be consumed, `null` when one of the items cannot be\n     * consumed and `false` when one of the items is already consumed.\n     */\n    _test(type, item) {\n        const items = toArray(item);\n        const consumables = this._consumables[type];\n        for (const name of items) {\n            if (type === 'attributes' && (name === 'class' || name === 'style')) {\n                const consumableName = name == 'class' ? 'classes' : 'styles';\n                // Check all classes/styles if class/style attribute is tested.\n                const value = this._test(consumableName, [...this._consumables[consumableName].keys()]);\n                if (value !== true) {\n                    return value;\n                }\n            }\n            else {\n                const value = consumables.get(name);\n                // Return null if attribute is not found.\n                if (value === undefined) {\n                    return null;\n                }\n                if (!value) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    /**\n     * Helper method that consumes items of a given type: attribute, class or style.\n     *\n     * @param type Type of the consumable item: `attributes`, `classes` or `styles`.\n     * @param item Consumable item or array of items.\n     */\n    _consume(type, item) {\n        const items = toArray(item);\n        const consumables = this._consumables[type];\n        for (const name of items) {\n            if (type === 'attributes' && (name === 'class' || name === 'style')) {\n                const consumableName = name == 'class' ? 'classes' : 'styles';\n                // If class or style is provided for consumption - consume them all.\n                this._consume(consumableName, [...this._consumables[consumableName].keys()]);\n            }\n            else {\n                consumables.set(name, false);\n                if (type == 'styles') {\n                    for (const toConsume of this.element.document.stylesProcessor.getRelatedStyles(name)) {\n                        consumables.set(toConsume, false);\n                    }\n                }\n            }\n        }\n    }\n    /**\n     * Helper method that reverts items of a given type: attribute, class or style.\n     *\n     * @param type Type of the consumable item: `attributes`, `classes` or , `styles`.\n     * @param item Consumable item or array of items.\n     */\n    _revert(type, item) {\n        const items = toArray(item);\n        const consumables = this._consumables[type];\n        for (const name of items) {\n            if (type === 'attributes' && (name === 'class' || name === 'style')) {\n                const consumableName = name == 'class' ? 'classes' : 'styles';\n                // If class or style is provided for reverting - revert them all.\n                this._revert(consumableName, [...this._consumables[consumableName].keys()]);\n            }\n            else {\n                const value = consumables.get(name);\n                if (value === false) {\n                    consumables.set(name, true);\n                }\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/schema\n */\nimport Element from './element.js';\nimport Position from './position.js';\nimport Range from './range.js';\nimport Text from './text.js';\nimport TreeWalker from './treewalker.js';\nimport { CKEditorError, first, ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * The model's schema. It defines the allowed and disallowed structures of nodes as well as nodes' attributes.\n * The schema is usually defined by the features and based on them, the editing framework and features\n * make decisions on how to change and process the model.\n *\n * The instance of schema is available in {@link module:engine/model/model~Model#schema `editor.model.schema`}.\n *\n * Read more about the schema in:\n *\n * * The {@glink framework/architecture/editing-engine#schema schema section} of the\n * {@glink framework/architecture/editing-engine Introduction to the Editing engine architecture} guide.\n * * The {@glink framework/deep-dive/schema Schema deep-dive} guide.\n */\nexport default class Schema extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a schema instance.\n     */\n    constructor() {\n        super();\n        this._sourceDefinitions = {};\n        /**\n         * A dictionary containing attribute properties.\n         */\n        this._attributeProperties = Object.create(null);\n        /**\n         * Stores additional callbacks registered for schema items, which are evaluated when {@link ~Schema#checkChild} is called.\n         *\n         * Keys are schema item names for which the callbacks are registered. Values are arrays with the callbacks.\n         *\n         * Some checks are added under {@link ~Schema#_genericCheckSymbol} key, these are evaluated for every {@link ~Schema#checkChild} call.\n         */\n        this._customChildChecks = new Map();\n        /**\n         * Stores additional callbacks registered for attribute names, which are evaluated when {@link ~Schema#checkAttribute} is called.\n         *\n         * Keys are schema attribute names for which the callbacks are registered. Values are arrays with the callbacks.\n         *\n         * Some checks are added under {@link ~Schema#_genericCheckSymbol} key, these are evaluated for every\n         * {@link ~Schema#checkAttribute} call.\n         */\n        this._customAttributeChecks = new Map();\n        this._genericCheckSymbol = Symbol('$generic');\n        this.decorate('checkChild');\n        this.decorate('checkAttribute');\n        this.on('checkAttribute', (evt, args) => {\n            args[0] = new SchemaContext(args[0]);\n        }, { priority: 'highest' });\n        this.on('checkChild', (evt, args) => {\n            args[0] = new SchemaContext(args[0]);\n            args[1] = this.getDefinition(args[1]);\n        }, { priority: 'highest' });\n    }\n    /**\n     * Registers a schema item. Can only be called once for every item name.\n     *\n     * ```ts\n     * schema.register( 'paragraph', {\n     * \tinheritAllFrom: '$block'\n     * } );\n     * ```\n     */\n    register(itemName, definition) {\n        if (this._sourceDefinitions[itemName]) {\n            /**\n             * A single item cannot be registered twice in the schema.\n             *\n             * This situation may happen when:\n             *\n             * * Two or more plugins called {@link module:engine/model/schema~Schema#register `register()`} with the same name.\n             * This will usually mean that there is a collision between plugins which try to use the same element in the model.\n             * Unfortunately, the only way to solve this is by modifying one of these plugins to use a unique model element name.\n             * * A single plugin was loaded twice. This happens when it is installed by npm/yarn in two versions\n             * and usually means one or more of the following issues:\n             *     * a version mismatch (two of your dependencies require two different versions of this plugin),\n             *     * incorrect imports (this plugin is somehow imported twice in a way which confuses webpack),\n             *     * mess in `node_modules/` (`rm -rf node_modules/` may help).\n             *\n             * **Note:** Check the logged `itemName` to better understand which plugin was duplicated/conflicting.\n             *\n             * @param itemName The name of the model element that is being registered twice.\n             * @error schema-cannot-register-item-twice\n             */\n            throw new CKEditorError('schema-cannot-register-item-twice', this, {\n                itemName\n            });\n        }\n        this._sourceDefinitions[itemName] = [\n            Object.assign({}, definition)\n        ];\n        this._clearCache();\n    }\n    /**\n     * Extends a {@link #register registered} item's definition.\n     *\n     * Extending properties such as `allowIn` will add more items to the existing properties,\n     * while redefining properties such as `isBlock` will override the previously defined ones.\n     *\n     * ```ts\n     * schema.register( 'foo', {\n     * \tallowIn: '$root',\n     * \tisBlock: true;\n     * } );\n     * schema.extend( 'foo', {\n     * \tallowIn: 'blockQuote',\n     * \tisBlock: false\n     * } );\n     *\n     * schema.getDefinition( 'foo' );\n     * //\t{\n     * //\t\tallowIn: [ '$root', 'blockQuote' ],\n     * // \t\tisBlock: false\n     * //\t}\n     * ```\n     */\n    extend(itemName, definition) {\n        if (!this._sourceDefinitions[itemName]) {\n            /**\n             * Cannot extend an item which was not registered yet.\n             *\n             * This error happens when a plugin tries to extend the schema definition of an item which was not\n             * {@link module:engine/model/schema~Schema#register registered} yet.\n             *\n             * @param itemName The name of the model element which is being extended.\n             * @error schema-cannot-extend-missing-item\n             */\n            throw new CKEditorError('schema-cannot-extend-missing-item', this, {\n                itemName\n            });\n        }\n        this._sourceDefinitions[itemName].push(Object.assign({}, definition));\n        this._clearCache();\n    }\n    /**\n     * Returns data of all registered items.\n     *\n     * This method should normally be used for reflection purposes (e.g. defining a clone of a certain element,\n     * checking a list of all block elements, etc).\n     * Use specific methods (such as {@link #checkChild `checkChild()`} or {@link #isLimit `isLimit()`})\n     * in other cases.\n     */\n    getDefinitions() {\n        if (!this._compiledDefinitions) {\n            this._compile();\n        }\n        return this._compiledDefinitions;\n    }\n    /**\n     * Returns a definition of the given item or `undefined` if an item is not registered.\n     *\n     * This method should normally be used for reflection purposes (e.g. defining a clone of a certain element,\n     * checking a list of all block elements, etc).\n     * Use specific methods (such as {@link #checkChild `checkChild()`} or {@link #isLimit `isLimit()`})\n     * in other cases.\n     */\n    getDefinition(item) {\n        let itemName;\n        if (typeof item == 'string') {\n            itemName = item;\n        }\n        else if ('is' in item && (item.is('$text') || item.is('$textProxy'))) {\n            itemName = '$text';\n        }\n        // Element or module:engine/model/schema~SchemaContextItem.\n        else {\n            itemName = item.name;\n        }\n        return this.getDefinitions()[itemName];\n    }\n    /**\n     * Returns `true` if the given item is registered in the schema.\n     *\n     * ```ts\n     * schema.isRegistered( 'paragraph' ); // -> true\n     * schema.isRegistered( editor.model.document.getRoot() ); // -> true\n     * schema.isRegistered( 'foo' ); // -> false\n     * ```\n     */\n    isRegistered(item) {\n        return !!this.getDefinition(item);\n    }\n    /**\n     * Returns `true` if the given item is defined to be\n     * a block by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isBlock` property.\n     *\n     * ```ts\n     * schema.isBlock( 'paragraph' ); // -> true\n     * schema.isBlock( '$root' ); // -> false\n     *\n     * const paragraphElement = writer.createElement( 'paragraph' );\n     * schema.isBlock( paragraphElement ); // -> true\n     * ```\n     *\n     * See the {@glink framework/deep-dive/schema#block-elements Block elements} section of\n     * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n     */\n    isBlock(item) {\n        const def = this.getDefinition(item);\n        return !!(def && def.isBlock);\n    }\n    /**\n     * Returns `true` if the given item should be treated as a limit element.\n     *\n     * It considers an item to be a limit element if its\n     * {@link module:engine/model/schema~SchemaItemDefinition}'s\n     * {@link module:engine/model/schema~SchemaItemDefinition#isLimit `isLimit`} or\n     * {@link module:engine/model/schema~SchemaItemDefinition#isObject `isObject`} property\n     * was set to `true`.\n     *\n     * ```ts\n     * schema.isLimit( 'paragraph' ); // -> false\n     * schema.isLimit( '$root' ); // -> true\n     * schema.isLimit( editor.model.document.getRoot() ); // -> true\n     * schema.isLimit( 'imageBlock' ); // -> true\n     * ```\n     *\n     * See the {@glink framework/deep-dive/schema#limit-elements Limit elements} section of\n     * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n     */\n    isLimit(item) {\n        const def = this.getDefinition(item);\n        if (!def) {\n            return false;\n        }\n        return !!(def.isLimit || def.isObject);\n    }\n    /**\n     * Returns `true` if the given item should be treated as an object element.\n     *\n     * It considers an item to be an object element if its\n     * {@link module:engine/model/schema~SchemaItemDefinition}'s\n     * {@link module:engine/model/schema~SchemaItemDefinition#isObject `isObject`} property\n     * was set to `true`.\n     *\n     * ```ts\n     * schema.isObject( 'paragraph' ); // -> false\n     * schema.isObject( 'imageBlock' ); // -> true\n     *\n     * const imageElement = writer.createElement( 'imageBlock' );\n     * schema.isObject( imageElement ); // -> true\n     * ```\n     *\n     * See the {@glink framework/deep-dive/schema#object-elements Object elements} section of\n     * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n     */\n    isObject(item) {\n        const def = this.getDefinition(item);\n        if (!def) {\n            return false;\n        }\n        // Note: Check out the implementation of #isLimit(), #isSelectable(), and #isContent()\n        // to understand why these three constitute an object.\n        return !!(def.isObject || (def.isLimit && def.isSelectable && def.isContent));\n    }\n    /**\n     * Returns `true` if the given item is defined to be\n     * an inline element by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isInline` property.\n     *\n     * ```ts\n     * schema.isInline( 'paragraph' ); // -> false\n     * schema.isInline( 'softBreak' ); // -> true\n     *\n     * const text = writer.createText( 'foo' );\n     * schema.isInline( text ); // -> true\n     * ```\n     *\n     * See the {@glink framework/deep-dive/schema#inline-elements Inline elements} section of\n     * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n     */\n    isInline(item) {\n        const def = this.getDefinition(item);\n        return !!(def && def.isInline);\n    }\n    /**\n     * Returns `true` if the given item is defined to be\n     * a selectable element by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isSelectable` property.\n     *\n     * ```ts\n     * schema.isSelectable( 'paragraph' ); // -> false\n     * schema.isSelectable( 'heading1' ); // -> false\n     * schema.isSelectable( 'imageBlock' ); // -> true\n     * schema.isSelectable( 'tableCell' ); // -> true\n     *\n     * const text = writer.createText( 'foo' );\n     * schema.isSelectable( text ); // -> false\n     * ```\n     *\n     * See the {@glink framework/deep-dive/schema#selectable-elements Selectable elements section} of\n     * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n     */\n    isSelectable(item) {\n        const def = this.getDefinition(item);\n        if (!def) {\n            return false;\n        }\n        return !!(def.isSelectable || def.isObject);\n    }\n    /**\n     * Returns `true` if the given item is defined to be\n     * a content by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isContent` property.\n     *\n     * ```ts\n     * schema.isContent( 'paragraph' ); // -> false\n     * schema.isContent( 'heading1' ); // -> false\n     * schema.isContent( 'imageBlock' ); // -> true\n     * schema.isContent( 'horizontalLine' ); // -> true\n     *\n     * const text = writer.createText( 'foo' );\n     * schema.isContent( text ); // -> true\n     * ```\n     *\n     * See the {@glink framework/deep-dive/schema#content-elements Content elements section} of\n     * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n     */\n    isContent(item) {\n        const def = this.getDefinition(item);\n        if (!def) {\n            return false;\n        }\n        return !!(def.isContent || def.isObject);\n    }\n    /**\n     * Checks whether the given node can be a child of the given context.\n     *\n     * ```ts\n     * schema.checkChild( model.document.getRoot(), paragraph ); // -> false\n     *\n     * schema.register( 'paragraph', {\n     * \tallowIn: '$root'\n     * } );\n     *\n     * schema.checkChild( model.document.getRoot(), paragraph ); // -> true\n     * ```\n     *\n     * Both {@link module:engine/model/schema~Schema#addChildCheck callback checks} and declarative rules (added when\n     * {@link module:engine/model/schema~Schema#register registering} and {@link module:engine/model/schema~Schema#extend extending} items)\n     * are evaluated when this method is called.\n     *\n     * Note that callback checks have bigger priority than declarative rules checks and may overwrite them.\n     *\n     * Note that when verifying whether the given node can be a child of the given context, the schema also verifies the entire\n     * context &ndash; from its root to its last element. Therefore, it is possible for `checkChild()` to return `false` even though\n     * the `context` last element can contain the checked child. It happens if one of the `context` elements does not allow its child.\n     * When `context` is verified, {@link module:engine/model/schema~Schema#addChildCheck custom checks} are considered as well.\n     *\n     * @fires checkChild\n     * @param context The context in which the child will be checked.\n     * @param def The child to check.\n     */\n    checkChild(context, def) {\n        // Note: `context` and `def` are already normalized here to `SchemaContext` and `SchemaCompiledItemDefinition`.\n        if (!def) {\n            return false;\n        }\n        return this._checkContextMatch(context, def);\n    }\n    /**\n     * Checks whether the given attribute can be applied in the given context (on the last item of the context).\n     *\n     * ```ts\n     * schema.checkAttribute( textNode, 'bold' ); // -> false\n     *\n     * schema.extend( '$text', {\n     * \tallowAttributes: 'bold'\n     * } );\n     *\n     * schema.checkAttribute( textNode, 'bold' ); // -> true\n     * ```\n     *\n     * Both {@link module:engine/model/schema~Schema#addAttributeCheck callback checks} and declarative rules (added when\n     * {@link module:engine/model/schema~Schema#register registering} and {@link module:engine/model/schema~Schema#extend extending} items)\n     * are evaluated when this method is called.\n     *\n     * Note that callback checks have bigger priority than declarative rules checks and may overwrite them.\n     *\n     * @fires checkAttribute\n     * @param context The context in which the attribute will be checked.\n     * @param attributeName Name of attribute to check in the given context.\n     */\n    checkAttribute(context, attributeName) {\n        // Note: `context` is already normalized here to `SchemaContext`.\n        const def = this.getDefinition(context.last);\n        if (!def) {\n            return false;\n        }\n        // First, check all attribute checks declared as callbacks.\n        // Note that `_evaluateAttributeChecks()` will return `undefined` if neither child check was applicable (no decision was made).\n        const isAllowed = this._evaluateAttributeChecks(context, attributeName);\n        // If the decision was not made inside attribute check callbacks, then use declarative rules.\n        return isAllowed !== undefined ? isAllowed : def.allowAttributes.includes(attributeName);\n    }\n    /**\n     * Checks whether the given element (`elementToMerge`) can be merged with the specified base element (`positionOrBaseElement`).\n     *\n     * In other words &ndash; both elements are not a limit elements and whether `elementToMerge`'s children\n     * {@link #checkChild are allowed} in the `positionOrBaseElement`.\n     *\n     * This check ensures that elements merged with {@link module:engine/model/writer~Writer#merge `Writer#merge()`}\n     * will be valid.\n     *\n     * Instead of elements, you can pass the instance of the {@link module:engine/model/position~Position} class as the\n     * `positionOrBaseElement`. It means that the elements before and after the position will be checked whether they can be merged.\n     *\n     * @param positionOrBaseElement The position or base element to which the `elementToMerge` will be merged.\n     * @param elementToMerge The element to merge. Required if `positionOrBaseElement` is an element.\n     */\n    checkMerge(positionOrBaseElement, elementToMerge) {\n        if (positionOrBaseElement instanceof Position) {\n            const nodeBefore = positionOrBaseElement.nodeBefore;\n            const nodeAfter = positionOrBaseElement.nodeAfter;\n            if (!(nodeBefore instanceof Element)) {\n                /**\n                 * The node before the merge position must be an element.\n                 *\n                 * @error schema-check-merge-no-element-before\n                 */\n                throw new CKEditorError('schema-check-merge-no-element-before', this);\n            }\n            if (!(nodeAfter instanceof Element)) {\n                /**\n                 * The node after the merge position must be an element.\n                 *\n                 * @error schema-check-merge-no-element-after\n                 */\n                throw new CKEditorError('schema-check-merge-no-element-after', this);\n            }\n            return this.checkMerge(nodeBefore, nodeAfter);\n        }\n        if (this.isLimit(positionOrBaseElement) || this.isLimit(elementToMerge)) {\n            return false;\n        }\n        for (const child of elementToMerge.getChildren()) {\n            if (!this.checkChild(positionOrBaseElement, child)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Allows registering a callback to the {@link #checkChild} method calls.\n     *\n     * Callbacks allow you to implement rules which are not otherwise possible to achieve\n     * by using the declarative API of {@link module:engine/model/schema~SchemaItemDefinition}.\n     *\n     * Note that callback checks have bigger priority than declarative rules checks and may overwrite them.\n     *\n     * For example, by using this method you can disallow elements in specific contexts:\n     *\n     * ```ts\n     * // Disallow `heading1` inside a `blockQuote` that is inside a table.\n     * schema.addChildCheck( ( context, childDefinition ) => {\n     * \tif ( context.endsWith( 'tableCell blockQuote' ) ) {\n     * \t\treturn false;\n     * \t}\n     * }, 'heading1' );\n     * ```\n     *\n     * You can skip the optional `itemName` parameter to evaluate the callback for every `checkChild()` call.\n     *\n     * ```ts\n     * // Inside specific custom element, allow only children, which allows for a specific attribute.\n     * schema.addChildCheck( ( context, childDefinition ) => {\n     * \tif ( context.endsWith( 'myElement' ) ) {\n     * \t\treturn childDefinition.allowAttributes.includes( 'myAttribute' );\n     * \t}\n     * } );\n     * ```\n     *\n     * Please note that the generic callbacks may affect the editor performance and should be avoided if possible.\n     *\n     * When one of the callbacks makes a decision (returns `true` or `false`) the processing is finished and other callbacks are not fired.\n     * Callbacks are fired in the order they were added, however generic callbacks are fired before callbacks added for a specified item.\n     *\n     * You can also use `checkChild` event, if you need even better control. The result from the example above could also be\n     * achieved with following event callback:\n     *\n     * ```ts\n     * schema.on( 'checkChild', ( evt, args ) => {\n     * \tconst context = args[ 0 ];\n     * \tconst childDefinition = args[ 1 ];\n     *\n     * \tif ( context.endsWith( 'myElement' ) ) {\n     * \t\t// Prevent next listeners from being called.\n     * \t\tevt.stop();\n     * \t\t// Set the `checkChild()` return value.\n     * \t\tevt.return = childDefinition.allowAttributes.includes( 'myAttribute' );\n     * \t}\n     * }, { priority: 'high' } );\n     * ```\n     *\n     * Note that the callback checks and declarative rules checks are processed on `normal` priority.\n     *\n     * Adding callbacks this way can also negatively impact editor performance.\n     *\n     * @param callback The callback to be called. It is called with two parameters:\n     * {@link module:engine/model/schema~SchemaContext} (context) instance and\n     * {@link module:engine/model/schema~SchemaCompiledItemDefinition} (definition). The callback may return `true/false` to override\n     * `checkChild()`'s return value. If it does not return a boolean value, the default algorithm (or other callbacks) will define\n     * `checkChild()`'s return value.\n     * @param itemName Name of the schema item for which the callback is registered. If specified, the callback will be run only for\n     * `checkChild()` calls which `def` parameter matches the `itemName`. Otherwise, the callback will run for every `checkChild` call.\n     */\n    addChildCheck(callback, itemName) {\n        const key = itemName !== undefined ? itemName : this._genericCheckSymbol;\n        const checks = this._customChildChecks.get(key) || [];\n        checks.push(callback);\n        this._customChildChecks.set(key, checks);\n    }\n    /**\n     * Allows registering a callback to the {@link #checkAttribute} method calls.\n     *\n     * Callbacks allow you to implement rules which are not otherwise possible to achieve\n     * by using the declarative API of {@link module:engine/model/schema~SchemaItemDefinition}.\n     *\n     * Note that callback checks have bigger priority than declarative rules checks and may overwrite them.\n     *\n     * For example, by using this method you can disallow setting attributes on nodes in specific contexts:\n     *\n     * ```ts\n     * // Disallow setting `bold` on text inside `heading1` element:\n     * schema.addAttributeCheck( context => {\n     * \tif ( context.endsWith( 'heading1 $text' ) ) {\n     * \t\treturn false;\n     * \t}\n     * }, 'bold' );\n     * ```\n     *\n     * You can skip the optional `attributeName` parameter to evaluate the callback for every `checkAttribute()` call.\n     *\n     * ```ts\n     * // Disallow formatting attributes on text inside custom `myTitle` element:\n     * schema.addAttributeCheck( ( context, attributeName ) => {\n     * \tif ( context.endsWith( 'myTitle $text' ) && schema.getAttributeProperties( attributeName ).isFormatting ) {\n     * \t\treturn false;\n     * \t}\n     * } );\n     * ```\n     *\n     * Please note that the generic callbacks may affect the editor performance and should be avoided if possible.\n     *\n     * When one of the callbacks makes a decision (returns `true` or `false`) the processing is finished and other callbacks are not fired.\n     * Callbacks are fired in the order they were added, however generic callbacks are fired before callbacks added for a specified item.\n     *\n     * You can also use {@link #event:checkAttribute} event, if you need even better control. The result from the example above could also\n     * be achieved with following event callback:\n     *\n     * ```ts\n     * schema.on( 'checkAttribute', ( evt, args ) => {\n     * \tconst context = args[ 0 ];\n     * \tconst attributeName = args[ 1 ];\n     *\n     * \tif ( context.endsWith( 'myTitle $text' ) && schema.getAttributeProperties( attributeName ).isFormatting ) {\n     * \t\t// Prevent next listeners from being called.\n     * \t\tevt.stop();\n     * \t\t// Set the `checkAttribute()` return value.\n     * \t\tevt.return = false;\n     * \t}\n     * }, { priority: 'high' } );\n     * ```\n     *\n     * Note that the callback checks and declarative rules checks are processed on `normal` priority.\n     *\n     * Adding callbacks this way can also negatively impact editor performance.\n     *\n     * @param callback The callback to be called. It is called with two parameters:\n     * {@link module:engine/model/schema~SchemaContext `context`} and attribute name. The callback may return `true` or `false`, to\n     * override `checkAttribute()`'s return value. If it does not return a boolean value, the default algorithm (or other callbacks)\n     * will define `checkAttribute()`'s return value.\n     * @param attributeName Name of the attribute for which the callback is registered. If specified, the callback will be run only for\n     * `checkAttribute()` calls with matching `attributeName`. Otherwise, the callback will run for every `checkAttribute()` call.\n     */\n    addAttributeCheck(callback, attributeName) {\n        const key = attributeName !== undefined ? attributeName : this._genericCheckSymbol;\n        const checks = this._customAttributeChecks.get(key) || [];\n        checks.push(callback);\n        this._customAttributeChecks.set(key, checks);\n    }\n    /**\n     * This method allows assigning additional metadata to the model attributes. For example,\n     * {@link module:engine/model/schema~AttributeProperties `AttributeProperties#isFormatting` property} is\n     * used to mark formatting attributes (like `bold` or `italic`).\n     *\n     * ```ts\n     * // Mark bold as a formatting attribute.\n     * schema.setAttributeProperties( 'bold', {\n     * \tisFormatting: true\n     * } );\n     *\n     * // Override code not to be considered a formatting markup.\n     * schema.setAttributeProperties( 'code', {\n     * \tisFormatting: false\n     * } );\n     * ```\n     *\n     * Properties are not limited to members defined in the\n     * {@link module:engine/model/schema~AttributeProperties `AttributeProperties` type} and you can also use custom properties:\n     *\n     * ```ts\n     * schema.setAttributeProperties( 'blockQuote', {\n     * \tcustomProperty: 'value'\n     * } );\n     * ```\n     *\n     * Subsequent calls with the same attribute will extend its custom properties:\n     *\n     * ```ts\n     * schema.setAttributeProperties( 'blockQuote', {\n     * \tone: 1\n     * } );\n     *\n     * schema.setAttributeProperties( 'blockQuote', {\n     * \ttwo: 2\n     * } );\n     *\n     * console.log( schema.getAttributeProperties( 'blockQuote' ) );\n     * // Logs: { one: 1, two: 2 }\n     * ```\n     *\n     * @param attributeName A name of the attribute to receive the properties.\n     * @param properties A dictionary of properties.\n     */\n    setAttributeProperties(attributeName, properties) {\n        this._attributeProperties[attributeName] = Object.assign(this.getAttributeProperties(attributeName), properties);\n    }\n    /**\n     * Returns properties associated with a given model attribute. See {@link #setAttributeProperties `setAttributeProperties()`}.\n     *\n     * @param attributeName A name of the attribute.\n     */\n    getAttributeProperties(attributeName) {\n        return this._attributeProperties[attributeName] || Object.create(null);\n    }\n    /**\n     * Returns the lowest {@link module:engine/model/schema~Schema#isLimit limit element} containing the entire\n     * selection/range/position or the root otherwise.\n     *\n     * @param selectionOrRangeOrPosition The selection/range/position to check.\n     * @returns The lowest limit element containing the entire `selectionOrRangeOrPosition`.\n     */\n    getLimitElement(selectionOrRangeOrPosition) {\n        let element;\n        if (selectionOrRangeOrPosition instanceof Position) {\n            element = selectionOrRangeOrPosition.parent;\n        }\n        else {\n            const ranges = selectionOrRangeOrPosition instanceof Range ?\n                [selectionOrRangeOrPosition] :\n                Array.from(selectionOrRangeOrPosition.getRanges());\n            // Find the common ancestor for all selection's ranges.\n            element = ranges\n                .reduce((element, range) => {\n                const rangeCommonAncestor = range.getCommonAncestor();\n                if (!element) {\n                    return rangeCommonAncestor;\n                }\n                return element.getCommonAncestor(rangeCommonAncestor, { includeSelf: true });\n            }, null);\n        }\n        while (!this.isLimit(element)) {\n            if (element.parent) {\n                element = element.parent;\n            }\n            else {\n                break;\n            }\n        }\n        return element;\n    }\n    /**\n     * Checks whether the attribute is allowed in selection:\n     *\n     * * if the selection is not collapsed, then checks if the attribute is allowed on any of nodes in that range,\n     * * if the selection is collapsed, then checks if on the selection position there's a text with the\n     * specified attribute allowed.\n     *\n     * @param selection Selection which will be checked.\n     * @param attribute The name of the attribute to check.\n     */\n    checkAttributeInSelection(selection, attribute) {\n        if (selection.isCollapsed) {\n            const firstPosition = selection.getFirstPosition();\n            const context = [\n                ...firstPosition.getAncestors(),\n                new Text('', selection.getAttributes())\n            ];\n            // Check whether schema allows for a text with the attribute in the selection.\n            return this.checkAttribute(context, attribute);\n        }\n        else {\n            const ranges = selection.getRanges();\n            // For all ranges, check nodes in them until you find a node that is allowed to have the attribute.\n            for (const range of ranges) {\n                for (const value of range) {\n                    if (this.checkAttribute(value.item, attribute)) {\n                        // If we found a node that is allowed to have the attribute, return true.\n                        return true;\n                    }\n                }\n            }\n        }\n        // If we haven't found such node, return false.\n        return false;\n    }\n    /**\n     * Transforms the given set of ranges into a set of ranges where the given attribute is allowed (and can be applied).\n     *\n     * @param ranges Ranges to be validated.\n     * @param attribute The name of the attribute to check.\n     * @returns Ranges in which the attribute is allowed.\n     */\n    *getValidRanges(ranges, attribute) {\n        ranges = convertToMinimalFlatRanges(ranges);\n        for (const range of ranges) {\n            yield* this._getValidRangesForRange(range, attribute);\n        }\n    }\n    /**\n     * Basing on given `position`, finds and returns a {@link module:engine/model/range~Range range} which is\n     * nearest to that `position` and is a correct range for selection.\n     *\n     * The correct selection range might be collapsed when it is located in a position where the text node can be placed.\n     * Non-collapsed range is returned when selection can be placed around element marked as an \"object\" in\n     * the {@link module:engine/model/schema~Schema schema}.\n     *\n     * Direction of searching for the nearest correct selection range can be specified as:\n     *\n     * * `both` - searching will be performed in both ways,\n     * * `forward` - searching will be performed only forward,\n     * * `backward` - searching will be performed only backward.\n     *\n     * When valid selection range cannot be found, `null` is returned.\n     *\n     * @param position Reference position where new selection range should be looked for.\n     * @param direction Search direction.\n     * @returns Nearest selection range or `null` if one cannot be found.\n     */\n    getNearestSelectionRange(position, direction = 'both') {\n        if (position.root.rootName == '$graveyard') {\n            // No valid selection range in the graveyard.\n            // This is important when getting the document selection default range.\n            return null;\n        }\n        // Return collapsed range if provided position is valid.\n        if (this.checkChild(position, '$text')) {\n            return new Range(position);\n        }\n        let backwardWalker, forwardWalker;\n        // Never leave a limit element.\n        const limitElement = position.getAncestors().reverse().find(item => this.isLimit(item)) ||\n            position.root;\n        if (direction == 'both' || direction == 'backward') {\n            backwardWalker = new TreeWalker({\n                boundaries: Range._createIn(limitElement),\n                startPosition: position,\n                direction: 'backward'\n            });\n        }\n        if (direction == 'both' || direction == 'forward') {\n            forwardWalker = new TreeWalker({\n                boundaries: Range._createIn(limitElement),\n                startPosition: position\n            });\n        }\n        for (const data of combineWalkers(backwardWalker, forwardWalker)) {\n            const type = (data.walker == backwardWalker ? 'elementEnd' : 'elementStart');\n            const value = data.value;\n            if (value.type == type && this.isObject(value.item)) {\n                return Range._createOn(value.item);\n            }\n            if (this.checkChild(value.nextPosition, '$text')) {\n                return new Range(value.nextPosition);\n            }\n        }\n        return null;\n    }\n    /**\n     * Tries to find position ancestors that allow to insert a given node.\n     * It starts searching from the given position and goes node by node to the top of the model tree\n     * as long as a {@link module:engine/model/schema~Schema#isLimit limit element}, an\n     * {@link module:engine/model/schema~Schema#isObject object element} or a topmost ancestor is not reached.\n     *\n     * @param position The position that the search will start from.\n     * @param node The node for which an allowed parent should be found or its name.\n     * @returns Allowed parent or null if nothing was found.\n     */\n    findAllowedParent(position, node) {\n        let parent = position.parent;\n        while (parent) {\n            if (this.checkChild(parent, node)) {\n                return parent;\n            }\n            // Do not split limit elements.\n            if (this.isLimit(parent)) {\n                return null;\n            }\n            parent = parent.parent;\n        }\n        return null;\n    }\n    /**\n     * Sets attributes allowed by the schema on a given node.\n     *\n     * @param node A node to set attributes on.\n     * @param attributes Attributes keys and values.\n     * @param writer An instance of the model writer.\n     */\n    setAllowedAttributes(node, attributes, writer) {\n        const model = writer.model;\n        for (const [attributeName, attributeValue] of Object.entries(attributes)) {\n            if (model.schema.checkAttribute(node, attributeName)) {\n                writer.setAttribute(attributeName, attributeValue, node);\n            }\n        }\n    }\n    /**\n     * Removes attributes disallowed by the schema.\n     *\n     * @param nodes Nodes that will be filtered.\n     */\n    removeDisallowedAttributes(nodes, writer) {\n        for (const node of nodes) {\n            // When node is a `Text` it has no children, so just filter it out.\n            if (node.is('$text')) {\n                removeDisallowedAttributeFromNode(this, node, writer);\n            }\n            // In a case of `Element` iterates through positions between nodes inside this element\n            // and filter out node before the current position, or position parent when position\n            // is at start of an element. Using positions prevent from omitting merged nodes\n            // see https://github.com/ckeditor/ckeditor5-engine/issues/1789.\n            else {\n                const rangeInNode = Range._createIn(node);\n                const positionsInRange = rangeInNode.getPositions();\n                for (const position of positionsInRange) {\n                    const item = position.nodeBefore || position.parent;\n                    removeDisallowedAttributeFromNode(this, item, writer);\n                }\n            }\n        }\n    }\n    /**\n     * Gets attributes of a node that have a given property.\n     *\n     * @param node Node to get attributes from.\n     * @param propertyName Name of the property that attribute must have to return it.\n     * @param propertyValue Desired value of the property that we want to check.\n     * When `undefined` attributes will be returned if they have set a given property no matter what the value is. If specified it will\n     * return attributes which given property's value is equal to this parameter.\n     * @returns Object with attributes' names as key and attributes' values as value.\n     */\n    getAttributesWithProperty(node, propertyName, propertyValue) {\n        const attributes = {};\n        for (const [attributeName, attributeValue] of node.getAttributes()) {\n            const attributeProperties = this.getAttributeProperties(attributeName);\n            if (attributeProperties[propertyName] === undefined) {\n                continue;\n            }\n            if (propertyValue === undefined || propertyValue === attributeProperties[propertyName]) {\n                attributes[attributeName] = attributeValue;\n            }\n        }\n        return attributes;\n    }\n    /**\n     * Creates an instance of the schema context.\n     */\n    createContext(context) {\n        return new SchemaContext(context);\n    }\n    _clearCache() {\n        this._compiledDefinitions = null;\n    }\n    _compile() {\n        const definitions = {};\n        const sourceRules = this._sourceDefinitions;\n        const itemNames = Object.keys(sourceRules);\n        for (const itemName of itemNames) {\n            definitions[itemName] = compileBaseItemRule(sourceRules[itemName], itemName);\n        }\n        const items = Object.values(definitions);\n        // Sometimes features add rules (allows, disallows) for items that has not been registered yet. We allow that, to make it easier\n        // to put the schema together. However, sometimes these items are never registered. To prevent operating\n        // removeUnregisteredEntries( definitions, items );\n        // 1. Propagate `childItem.allowIn` to `parentItem.allowChildren` and vice versa, so that these properties are completely mirrored\n        // for all children and parents. Do the same for `disallowIn` and `disallowChildren`.\n        for (const item of items) {\n            propagateAllowIn(definitions, item);\n            propagateAllowChildren(definitions, item);\n            propagateDisallowIn(definitions, item);\n            propagateDisallowChildren(definitions, item);\n        }\n        // 2. Remove from `allowIn` and `allowChildren` these items which where disallowed by `disallowIn` and `disallowChildren`.\n        // Do the same for attributes. Now we have a clear situation where which item/attribute is allowed. Inheritance is in next steps.\n        for (const item of items) {\n            resolveDisallows(definitions, item);\n        }\n        // 3. Compile `item.allowContentOf` property. For each entry in `allowContentOf`, we want to take `allowChildren` and rewrite\n        // them into `item.allowChildren`. `item.disallowChildren` is used to filter out some entries. This way \"own rules\" have higher\n        // priority than \"inherited rules\". Mirroring from step 1. is maintained.\n        for (const item of items) {\n            compileAllowContentOf(definitions, item);\n        }\n        // 4. Compile `item.allowWhere` property. For each entry in `allowWhere`, we want to take `allowIn` and rewrite them into\n        // `item.allowIn`. `item.disallowIn` is used to filter out some entries. This way \"own rules\" have higher priority than\n        // \"inherited rules\". Mirroring from step 1. is maintained.\n        for (const item of items) {\n            compileAllowWhere(definitions, item);\n        }\n        // 5. Compile `item.allowAttributesOf`. For each entry in `allowAttributesOf`, we want to take `allowAttributes` and rewrite them\n        // into `item.allowAttributes`. `item.disallowAttributes` is used to filter out some entries. This way \"own rules\" have higher\n        // priority than \"inherited rules\".\n        for (const item of items) {\n            compileAllowAttributesOf(definitions, item);\n        }\n        // 6. Compile `item.inheritTypesFrom` property. For each entry in `inheritTypesFrom`, we want to take `is*` properties and\n        // set them on `item` (if they are not set yet).\n        for (const item of items) {\n            compileInheritPropertiesFrom(definitions, item);\n        }\n        // Compile final definitions. Unnecessary properties are removed and some additional cleaning is applied.\n        this._compiledDefinitions = compileDefinitions(definitions);\n    }\n    _checkContextMatch(context, def) {\n        const parentItem = context.last;\n        // First, check all child checks declared as callbacks.\n        // Note that `_evaluateChildChecks()` will return `undefined` if neither child check was applicable (no decision was made).\n        let isAllowed = this._evaluateChildChecks(context, def);\n        // If the decision was not made inside child check callbacks, then use declarative rules.\n        isAllowed = isAllowed !== undefined ? isAllowed : def.allowIn.includes(parentItem.name);\n        // If the item is not allowed in the `context`, return `false`.\n        if (!isAllowed) {\n            return false;\n        }\n        // If the item is allowed, recursively verify the rest of the `context`.\n        const parentItemDefinition = this.getDefinition(parentItem);\n        const parentContext = context.trimLast();\n        // One of the items in the original `context` did not have a definition specified. In this case, the whole context is disallowed.\n        if (!parentItemDefinition) {\n            return false;\n        }\n        // Whole `context` was verified and passed checks.\n        if (parentContext.length == 0) {\n            return true;\n        }\n        // Verify \"truncated\" parent context. The last item of the original context is now the definition to check.\n        return this._checkContextMatch(parentContext, parentItemDefinition);\n    }\n    /**\n     * Calls child check callbacks to decide whether `def` is allowed in `context`. It uses both generic and specific (defined for `def`\n     * item) callbacks. If neither callback makes a decision, `undefined` is returned.\n     *\n     * Note that the first callback that makes a decision \"wins\", i.e., if any callback returns `true` or `false`, then the processing\n     * is over and that result is returned.\n     */\n    _evaluateChildChecks(context, def) {\n        const genericChecks = this._customChildChecks.get(this._genericCheckSymbol) || [];\n        const childChecks = this._customChildChecks.get(def.name) || [];\n        for (const check of [...genericChecks, ...childChecks]) {\n            const result = check(context, def);\n            if (result !== undefined) {\n                return result;\n            }\n        }\n    }\n    /**\n     * Calls attribute check callbacks to decide whether `attributeName` can be set on the last element of `context`. It uses both\n     * generic and specific (defined for `attributeName`) callbacks. If neither callback makes a decision, `undefined` is returned.\n     *\n     * Note that the first callback that makes a decision \"wins\", i.e., if any callback returns `true` or `false`, then the processing\n     * is over and that result is returned.\n     */\n    _evaluateAttributeChecks(context, attributeName) {\n        const genericChecks = this._customAttributeChecks.get(this._genericCheckSymbol) || [];\n        const childChecks = this._customAttributeChecks.get(attributeName) || [];\n        for (const check of [...genericChecks, ...childChecks]) {\n            const result = check(context, attributeName);\n            if (result !== undefined) {\n                return result;\n            }\n        }\n    }\n    /**\n     * Takes a flat range and an attribute name. Traverses the range recursively and deeply to find and return all ranges\n     * inside the given range on which the attribute can be applied.\n     *\n     * This is a helper function for {@link ~Schema#getValidRanges}.\n     *\n     * @param range The range to process.\n     * @param attribute The name of the attribute to check.\n     * @returns Ranges in which the attribute is allowed.\n     */\n    *_getValidRangesForRange(range, attribute) {\n        let start = range.start;\n        let end = range.start;\n        for (const item of range.getItems({ shallow: true })) {\n            if (item.is('element')) {\n                yield* this._getValidRangesForRange(Range._createIn(item), attribute);\n            }\n            if (!this.checkAttribute(item, attribute)) {\n                if (!start.isEqual(end)) {\n                    yield new Range(start, end);\n                }\n                start = Position._createAfter(item);\n            }\n            end = Position._createAfter(item);\n        }\n        if (!start.isEqual(end)) {\n            yield new Range(start, end);\n        }\n    }\n    /**\n     * Returns a model range which is optimal (in terms of UX) for inserting a widget block.\n     *\n     * For instance, if a selection is in the middle of a paragraph, the collapsed range before this paragraph\n     * will be returned so that it is not split. If the selection is at the end of a paragraph,\n     * the collapsed range after this paragraph will be returned.\n     *\n     * Note: If the selection is placed in an empty block, the range in that block will be returned. If that range\n     * is then passed to {@link module:engine/model/model~Model#insertContent}, the block will be fully replaced\n     * by the inserted widget block.\n     *\n     * @internal\n     * @param selection The selection based on which the insertion position should be calculated.\n     * @param place The place where to look for optimal insertion range.\n     * The `auto` value will determine itself the best position for insertion.\n     * The `before` value will try to find a position before selection.\n     * The `after` value will try to find a position after selection.\n     * @returns The optimal range.\n     */\n    findOptimalInsertionRange(selection, place) {\n        const selectedElement = selection.getSelectedElement();\n        if (selectedElement && this.isObject(selectedElement) && !this.isInline(selectedElement)) {\n            if (place == 'before' || place == 'after') {\n                return new Range(Position._createAt(selectedElement, place));\n            }\n            return Range._createOn(selectedElement);\n        }\n        const firstBlock = first(selection.getSelectedBlocks());\n        // There are no block elements within ancestors (in the current limit element).\n        if (!firstBlock) {\n            return new Range(selection.focus);\n        }\n        // If inserting into an empty block – return position in that block. It will get\n        // replaced with the image by insertContent(). #42.\n        if (firstBlock.isEmpty) {\n            return new Range(Position._createAt(firstBlock, 0));\n        }\n        const positionAfter = Position._createAfter(firstBlock);\n        // If selection is at the end of the block - return position after the block.\n        if (selection.focus.isTouching(positionAfter)) {\n            return new Range(positionAfter);\n        }\n        // Otherwise, return position before the block.\n        return new Range(Position._createBefore(firstBlock));\n    }\n}\n/**\n * A schema context &ndash; a list of ancestors of a given position in the document.\n *\n * Considering such position:\n *\n * ```xml\n * <$root>\n * \t<blockQuote>\n * \t\t<paragraph>\n * \t\t\t^\n * \t\t</paragraph>\n * \t</blockQuote>\n * </$root>\n * ```\n *\n * The context of this position is its {@link module:engine/model/position~Position#getAncestors lists of ancestors}:\n *\n *\t\t[ rootElement, blockQuoteElement, paragraphElement ]\n *\n * Contexts are used in the {@link module:engine/model/schema~Schema#event:checkChild `Schema#checkChild`} and\n * {@link module:engine/model/schema~Schema#event:checkAttribute `Schema#checkAttribute`} events as a definition\n * of a place in the document where the check occurs. The context instances are created based on the first arguments\n * of the {@link module:engine/model/schema~Schema#checkChild `Schema#checkChild()`} and\n * {@link module:engine/model/schema~Schema#checkAttribute `Schema#checkAttribute()`} methods so when\n * using these methods you need to use {@link module:engine/model/schema~SchemaContextDefinition}s.\n */\nexport class SchemaContext {\n    /**\n     * Creates an instance of the context.\n     */\n    constructor(context) {\n        if (context instanceof SchemaContext) {\n            return context;\n        }\n        let items;\n        if (typeof context == 'string') {\n            items = [context];\n        }\n        else if (!Array.isArray(context)) {\n            // `context` is item or position.\n            // Position#getAncestors() doesn't accept any parameters but it works just fine here.\n            items = context.getAncestors({ includeSelf: true });\n        }\n        else {\n            items = context;\n        }\n        this._items = items.map(mapContextItem);\n    }\n    /**\n     * The number of items.\n     */\n    get length() {\n        return this._items.length;\n    }\n    /**\n     * The last item (the lowest node).\n     */\n    get last() {\n        return this._items[this._items.length - 1];\n    }\n    /**\n     * Iterable interface.\n     *\n     * Iterates over all context items.\n     */\n    [Symbol.iterator]() {\n        return this._items[Symbol.iterator]();\n    }\n    /**\n     * Returns a new schema context instance with an additional item.\n     *\n     * Item can be added as:\n     *\n     * ```ts\n     * const context = new SchemaContext( [ '$root' ] );\n     *\n     * // An element.\n     * const fooElement = writer.createElement( 'fooElement' );\n     * const newContext = context.push( fooElement ); // [ '$root', 'fooElement' ]\n     *\n     * // A text node.\n     * const text = writer.createText( 'foobar' );\n     * const newContext = context.push( text ); // [ '$root', '$text' ]\n     *\n     * // A string (element name).\n     * const newContext = context.push( 'barElement' ); // [ '$root', 'barElement' ]\n     * ```\n     *\n     * **Note** {@link module:engine/model/node~Node} that is already in the model tree will be added as the only item\n     * (without ancestors).\n     *\n     * @param item An item that will be added to the current context.\n     * @returns A new schema context instance with an additional item.\n     */\n    push(item) {\n        const ctx = new SchemaContext([item]);\n        ctx._items = [...this._items, ...ctx._items];\n        return ctx;\n    }\n    /**\n     * Returns a new schema context that is based on this context but has the last item removed.\n     *\n     * ```ts\n     * const ctxParagraph = new SchemaContext( [ '$root', 'blockQuote', 'paragraph' ] );\n     * const ctxBlockQuote = ctxParagraph.trimLast(); // Items in `ctxBlockQuote` are: `$root` an `blockQuote`.\n     * const ctxRoot = ctxBlockQuote.trimLast(); // Items in `ctxRoot` are: `$root`.\n     * ```\n     *\n     * @returns A new reduced schema context instance.\n     */\n    trimLast() {\n        const ctx = new SchemaContext([]);\n        ctx._items = this._items.slice(0, -1);\n        return ctx;\n    }\n    /**\n     * Gets an item on the given index.\n     */\n    getItem(index) {\n        return this._items[index];\n    }\n    /**\n     * Returns the names of items.\n     */\n    *getNames() {\n        yield* this._items.map(item => item.name);\n    }\n    /**\n     * Checks whether the context ends with the given nodes.\n     *\n     * ```ts\n     * const ctx = new SchemaContext( [ rootElement, paragraphElement, textNode ] );\n     *\n     * ctx.endsWith( '$text' ); // -> true\n     * ctx.endsWith( 'paragraph $text' ); // -> true\n     * ctx.endsWith( '$root' ); // -> false\n     * ctx.endsWith( 'paragraph' ); // -> false\n     * ```\n     */\n    endsWith(query) {\n        return Array.from(this.getNames()).join(' ').endsWith(query);\n    }\n    /**\n     * Checks whether the context starts with the given nodes.\n     *\n     * ```ts\n     * const ctx = new SchemaContext( [ rootElement, paragraphElement, textNode ] );\n     *\n     * ctx.endsWith( '$root' ); // -> true\n     * ctx.endsWith( '$root paragraph' ); // -> true\n     * ctx.endsWith( '$text' ); // -> false\n     * ctx.endsWith( 'paragraph' ); // -> false\n     * ```\n     */\n    startsWith(query) {\n        return Array.from(this.getNames()).join(' ').startsWith(query);\n    }\n}\nfunction compileBaseItemRule(sourceItemRules, itemName) {\n    const itemRule = {\n        name: itemName,\n        allowIn: new Set(),\n        allowChildren: new Set(),\n        disallowIn: new Set(),\n        disallowChildren: new Set(),\n        allowContentOf: new Set(),\n        allowWhere: new Set(),\n        allowAttributes: new Set(),\n        disallowAttributes: new Set(),\n        allowAttributesOf: new Set(),\n        inheritTypesFrom: new Set()\n    };\n    copyTypes(sourceItemRules, itemRule);\n    copyProperty(sourceItemRules, itemRule, 'allowIn');\n    copyProperty(sourceItemRules, itemRule, 'allowChildren');\n    copyProperty(sourceItemRules, itemRule, 'disallowIn');\n    copyProperty(sourceItemRules, itemRule, 'disallowChildren');\n    copyProperty(sourceItemRules, itemRule, 'allowContentOf');\n    copyProperty(sourceItemRules, itemRule, 'allowWhere');\n    copyProperty(sourceItemRules, itemRule, 'allowAttributes');\n    copyProperty(sourceItemRules, itemRule, 'disallowAttributes');\n    copyProperty(sourceItemRules, itemRule, 'allowAttributesOf');\n    copyProperty(sourceItemRules, itemRule, 'inheritTypesFrom');\n    resolveInheritAll(sourceItemRules, itemRule);\n    return itemRule;\n}\nfunction propagateAllowIn(definitions, item) {\n    for (const parentName of item.allowIn) {\n        const parentItem = definitions[parentName];\n        if (parentItem) {\n            parentItem.allowChildren.add(item.name);\n        }\n        else {\n            item.allowIn.delete(parentName);\n        }\n    }\n}\nfunction propagateAllowChildren(definitions, item) {\n    for (const childName of item.allowChildren) {\n        const childItem = definitions[childName];\n        if (childItem) {\n            childItem.allowIn.add(item.name);\n        }\n        else {\n            item.allowChildren.delete(childName);\n        }\n    }\n}\nfunction propagateDisallowIn(definitions, item) {\n    for (const parentName of item.disallowIn) {\n        const parentItem = definitions[parentName];\n        if (parentItem) {\n            parentItem.disallowChildren.add(item.name);\n        }\n        else {\n            item.disallowIn.delete(parentName);\n        }\n    }\n}\nfunction propagateDisallowChildren(definitions, item) {\n    for (const childName of item.disallowChildren) {\n        const childItem = definitions[childName];\n        if (childItem) {\n            childItem.disallowIn.add(item.name);\n        }\n        else {\n            item.disallowChildren.delete(childName);\n        }\n    }\n}\nfunction resolveDisallows(definitions, item) {\n    for (const childName of item.disallowChildren) {\n        item.allowChildren.delete(childName);\n    }\n    for (const parentName of item.disallowIn) {\n        item.allowIn.delete(parentName);\n    }\n    for (const attributeName of item.disallowAttributes) {\n        item.allowAttributes.delete(attributeName);\n    }\n}\nfunction compileAllowContentOf(definitions, item) {\n    for (const allowContentOfItemName of item.allowContentOf) {\n        const baseItem = definitions[allowContentOfItemName];\n        if (!baseItem) {\n            continue;\n        }\n        // Copy `disallowChildren` to propagate this \"knowledge\" down the inheritance chain. The inheritance may involve multiple items and\n        // if this is not propagated, then items down the chain may start to allow for items that were disallowed by previous base items.\n        //\n        // The scenarios were it is important involves multiple inherits both on parent items side and on the child items side.\n        baseItem.disallowChildren.forEach(childName => {\n            // Own item's rules takes precedence before inherited.\n            // If the item directly allows for given child, ignore that base item disallowed that child.\n            if (item.allowChildren.has(childName)) {\n                return;\n            }\n            item.disallowChildren.add(childName);\n            definitions[childName].disallowIn.add(item.name);\n        });\n        // Copy `allowChildren` from the base item to allow for the same items.\n        baseItem.allowChildren.forEach(childName => {\n            // Own item's rules takes precedence before inherited.\n            // Also, `item.disallowChildren` might get some new items during inheritance process.\n            if (item.disallowChildren.has(childName)) {\n                return;\n            }\n            item.allowChildren.add(childName);\n            definitions[childName].allowIn.add(item.name);\n        });\n    }\n}\nfunction compileAllowWhere(definitions, item) {\n    for (const allowWhereItemName of item.allowWhere) {\n        const baseItem = definitions[allowWhereItemName];\n        if (!baseItem) {\n            continue;\n        }\n        // Copy `disallowIn` to propagate this \"knowledge\" down the inheritance chain. The inheritance may involve multiple items and\n        // if this is not propagated, then items down the chain may start to be allowed in items in which they were disallowed previously.\n        //\n        // The scenarios were it is important involves multiple inherits both on parent items side and on the child items side.\n        baseItem.disallowIn.forEach(parentName => {\n            // Own item's rules takes precedence before inherited.\n            // If the item is directly allowed in given parent, ignore that base item was disallowed in it.\n            if (item.allowIn.has(parentName)) {\n                return;\n            }\n            item.disallowIn.add(parentName);\n            definitions[parentName].disallowChildren.add(item.name);\n        });\n        // Copy `allowIn` from the base item to allow item in same parents.\n        baseItem.allowIn.forEach(parentName => {\n            // Own item's rules takes precedence before inherited.\n            // Also, `item.disallowIn` might get some new items during inheritance process.\n            if (item.disallowIn.has(parentName)) {\n                return;\n            }\n            item.allowIn.add(parentName);\n            definitions[parentName].allowChildren.add(item.name);\n        });\n    }\n}\nfunction compileDefinitions(definitions) {\n    const finalDefinitions = {};\n    for (const item of Object.values(definitions)) {\n        finalDefinitions[item.name] = {\n            name: item.name,\n            // `is*` properties may not be set - convert `undefined` to `false`.\n            isBlock: !!item.isBlock,\n            isContent: !!item.isContent,\n            isInline: !!item.isInline,\n            isLimit: !!item.isLimit,\n            isObject: !!item.isObject,\n            isSelectable: !!item.isSelectable,\n            // Filter out non-existing items.\n            allowIn: Array.from(item.allowIn).filter(name => !!definitions[name]),\n            allowChildren: Array.from(item.allowChildren).filter(name => !!definitions[name]),\n            allowAttributes: Array.from(item.allowAttributes)\n        };\n    }\n    return finalDefinitions;\n}\nfunction compileAllowAttributesOf(definitions, item) {\n    for (const allowAttributeOfItemName of item.allowAttributesOf) {\n        const baseItem = definitions[allowAttributeOfItemName];\n        if (!baseItem) {\n            return;\n        }\n        baseItem.allowAttributes.forEach(attributeName => {\n            if (item.disallowAttributes.has(attributeName)) {\n                return;\n            }\n            item.allowAttributes.add(attributeName);\n        });\n    }\n}\nfunction compileInheritPropertiesFrom(definitions, item) {\n    for (const inheritPropertiesOfItemName of item.inheritTypesFrom) {\n        const inheritFrom = definitions[inheritPropertiesOfItemName];\n        if (inheritFrom) {\n            const typeNames = Object.keys(inheritFrom).filter(name => name.startsWith('is'));\n            for (const name of typeNames) {\n                if (!(name in item)) {\n                    item[name] = inheritFrom[name];\n                }\n            }\n        }\n    }\n}\nfunction copyTypes(sourceItemRules, itemRule) {\n    for (const sourceItemRule of sourceItemRules) {\n        const typeNames = Object.keys(sourceItemRule).filter(name => name.startsWith('is'));\n        for (const name of typeNames) {\n            itemRule[name] = !!sourceItemRule[name];\n        }\n    }\n}\nfunction copyProperty(sourceItemRules, itemRule, propertyName) {\n    for (const sourceItemRule of sourceItemRules) {\n        let value = sourceItemRule[propertyName];\n        // `value` can be a string, an array or undefined.\n        // Convert a string to an array with one item, then handle an array. Skip undefined this way.\n        if (typeof value == 'string') {\n            value = [value];\n        }\n        if (Array.isArray(value)) {\n            value.forEach(singleValue => itemRule[propertyName].add(singleValue));\n        }\n    }\n}\nfunction resolveInheritAll(sourceItemRules, itemRule) {\n    for (const sourceItemRule of sourceItemRules) {\n        const inheritFrom = sourceItemRule.inheritAllFrom;\n        if (inheritFrom) {\n            itemRule.allowContentOf.add(inheritFrom);\n            itemRule.allowWhere.add(inheritFrom);\n            itemRule.allowAttributesOf.add(inheritFrom);\n            itemRule.inheritTypesFrom.add(inheritFrom);\n        }\n    }\n}\nfunction mapContextItem(ctxItem) {\n    if (typeof ctxItem == 'string' || ctxItem.is('documentFragment')) {\n        return {\n            name: typeof ctxItem == 'string' ? ctxItem : '$documentFragment',\n            *getAttributeKeys() { },\n            getAttribute() { }\n        };\n    }\n    else {\n        return {\n            // '$text' means text nodes and text proxies.\n            name: ctxItem.is('element') ? ctxItem.name : '$text',\n            *getAttributeKeys() {\n                yield* ctxItem.getAttributeKeys();\n            },\n            getAttribute(key) {\n                return ctxItem.getAttribute(key);\n            }\n        };\n    }\n}\n/**\n * Generator function returning values from provided walkers, switching between them at each iteration. If only one walker\n * is provided it will return data only from that walker.\n *\n * @param backward Walker iterating in backward direction.\n * @param forward Walker iterating in forward direction.\n * @returns Object returned at each iteration contains `value` and `walker` (informing which walker returned\n * given value) fields.\n */\nfunction* combineWalkers(backward, forward) {\n    let done = false;\n    while (!done) {\n        done = true;\n        if (backward) {\n            const step = backward.next();\n            if (!step.done) {\n                done = false;\n                yield {\n                    walker: backward,\n                    value: step.value\n                };\n            }\n        }\n        if (forward) {\n            const step = forward.next();\n            if (!step.done) {\n                done = false;\n                yield {\n                    walker: forward,\n                    value: step.value\n                };\n            }\n        }\n    }\n}\n/**\n * Takes an array of non-intersecting ranges. For each of them gets minimal flat ranges covering that range and returns\n * all those minimal flat ranges.\n *\n * @param ranges Ranges to process.\n * @returns Minimal flat ranges of given `ranges`.\n */\nfunction* convertToMinimalFlatRanges(ranges) {\n    for (const range of ranges) {\n        yield* range.getMinimalFlatRanges();\n    }\n}\nfunction removeDisallowedAttributeFromNode(schema, node, writer) {\n    for (const attribute of node.getAttributeKeys()) {\n        if (!schema.checkAttribute(node, attribute)) {\n            writer.removeAttribute(attribute, node);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/upcastdispatcher\n */\nimport ViewConsumable from './viewconsumable.js';\nimport ModelRange from '../model/range.js';\nimport ModelPosition from '../model/position.js';\nimport { SchemaContext } from '../model/schema.js'; // eslint-disable-line no-duplicate-imports\nimport { isParagraphable, wrapInParagraph } from '../model/utils/autoparagraphing.js';\nimport { CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Upcast dispatcher is a central point of the view-to-model conversion, which is a process of\n * converting a given {@link module:engine/view/documentfragment~DocumentFragment view document fragment} or\n * {@link module:engine/view/element~Element view element} into a correct model structure.\n *\n * During the conversion process, the dispatcher fires events for all {@link module:engine/view/node~Node view nodes}\n * from the converted view document fragment.\n * Special callbacks called \"converters\" should listen to these events in order to convert the view nodes.\n *\n * The second parameter of the callback is the `data` object with the following properties:\n *\n * * `data.viewItem` contains a {@link module:engine/view/node~Node view node} or a\n * {@link module:engine/view/documentfragment~DocumentFragment view document fragment}\n * that is converted at the moment and might be handled by the callback.\n * * `data.modelRange` is used to point to the result\n * of the current conversion (e.g. the element that is being inserted)\n * and is always a {@link module:engine/model/range~Range} when the conversion succeeds.\n * * `data.modelCursor` is a {@link module:engine/model/position~Position position} on which the converter should insert\n * the newly created items.\n *\n * The third parameter of the callback is an instance of {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi}\n * which provides additional tools for converters.\n *\n * You can read more about conversion in the {@glink framework/deep-dive/conversion/upcast Upcast conversion} guide.\n *\n * Examples of event-based converters:\n *\n * ```ts\n * // A converter for links (<a>).\n * editor.data.upcastDispatcher.on( 'element:a', ( evt, data, conversionApi ) => {\n * \tif ( conversionApi.consumable.consume( data.viewItem, { name: true, attributes: [ 'href' ] } ) ) {\n * \t\t// The <a> element is inline and is represented by an attribute in the model.\n * \t\t// This is why you need to convert only children.\n * \t\tconst { modelRange } = conversionApi.convertChildren( data.viewItem, data.modelCursor );\n *\n * \t\tfor ( let item of modelRange.getItems() ) {\n * \t\t\tif ( conversionApi.schema.checkAttribute( item, 'linkHref' ) ) {\n * \t\t\t\tconversionApi.writer.setAttribute( 'linkHref', data.viewItem.getAttribute( 'href' ), item );\n * \t\t\t}\n * \t\t}\n * \t}\n * } );\n *\n * // Convert <p> element's font-size style.\n * // Note: You should use a low-priority observer in order to ensure that\n * // it is executed after the element-to-element converter.\n * editor.data.upcastDispatcher.on( 'element:p', ( evt, data, conversionApi ) => {\n * \tconst { consumable, schema, writer } = conversionApi;\n *\n * \tif ( !consumable.consume( data.viewItem, { style: 'font-size' } ) ) {\n * \t\treturn;\n * \t}\n *\n * \tconst fontSize = data.viewItem.getStyle( 'font-size' );\n *\n * \t// Do not go for the model element after data.modelCursor because it might happen\n * \t// that a single view element was converted to multiple model elements. Get all of them.\n * \tfor ( const item of data.modelRange.getItems( { shallow: true } ) ) {\n * \t\tif ( schema.checkAttribute( item, 'fontSize' ) ) {\n * \t\t\twriter.setAttribute( 'fontSize', fontSize, item );\n * \t\t}\n * \t}\n * }, { priority: 'low' } );\n *\n * // Convert all elements which have no custom converter into a paragraph (autoparagraphing).\n * editor.data.upcastDispatcher.on( 'element', ( evt, data, conversionApi ) => {\n * \t// Check if an element can be converted.\n * \tif ( !conversionApi.consumable.test( data.viewItem, { name: data.viewItem.name } ) ) {\n * \t\t// When an element is already consumed by higher priority converters, do nothing.\n * \t\treturn;\n * \t}\n *\n * \tconst paragraph = conversionApi.writer.createElement( 'paragraph' );\n *\n * \t// Try to safely insert a paragraph at the model cursor - it will find an allowed parent for the current element.\n * \tif ( !conversionApi.safeInsert( paragraph, data.modelCursor ) ) {\n * \t\t// When an element was not inserted, it means that you cannot insert a paragraph at this position.\n * \t\treturn;\n * \t}\n *\n * \t// Consume the inserted element.\n * \tconversionApi.consumable.consume( data.viewItem, { name: data.viewItem.name } ) );\n *\n * \t// Convert the children to a paragraph.\n * \tconst { modelRange } = conversionApi.convertChildren( data.viewItem,  paragraph ) );\n *\n * \t// Update `modelRange` and `modelCursor` in the `data` as a conversion result.\n * \tconversionApi.updateConversionResult( paragraph, data );\n * }, { priority: 'low' } );\n * ```\n *\n * @fires viewCleanup\n * @fires element\n * @fires text\n * @fires documentFragment\n */\nexport default class UpcastDispatcher extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates an upcast dispatcher that operates using the passed API.\n     *\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi\n     * @param conversionApi Additional properties for an interface that will be passed to events fired\n     * by the upcast dispatcher.\n     */\n    constructor(conversionApi) {\n        super();\n        /**\n         * The list of elements that were created during splitting.\n         *\n         * After the conversion process, the list is cleared.\n         */\n        this._splitParts = new Map();\n        /**\n         * The list of cursor parent elements that were created during splitting.\n         *\n         * After the conversion process the list is cleared.\n         */\n        this._cursorParents = new Map();\n        /**\n         * The position in the temporary structure where the converted content is inserted. The structure reflects the context of\n         * the target position where the content will be inserted. This property is built based on the context parameter of the\n         * convert method.\n         */\n        this._modelCursor = null;\n        /**\n         * The list of elements that were created during the splitting but should not get removed on conversion end even if they are empty.\n         *\n         * The list is cleared after the conversion process.\n         */\n        this._emptyElementsToKeep = new Set();\n        this.conversionApi = {\n            ...conversionApi,\n            consumable: null,\n            writer: null,\n            store: null,\n            convertItem: (viewItem, modelCursor) => this._convertItem(viewItem, modelCursor),\n            convertChildren: (viewElement, positionOrElement) => this._convertChildren(viewElement, positionOrElement),\n            safeInsert: (modelNode, position) => this._safeInsert(modelNode, position),\n            updateConversionResult: (modelElement, data) => this._updateConversionResult(modelElement, data),\n            // Advanced API - use only if custom position handling is needed.\n            splitToAllowedParent: (modelNode, modelCursor) => this._splitToAllowedParent(modelNode, modelCursor),\n            getSplitParts: modelElement => this._getSplitParts(modelElement),\n            keepEmptyElement: modelElement => this._keepEmptyElement(modelElement)\n        };\n    }\n    /**\n     * Starts the conversion process. The entry point for the conversion.\n     *\n     * @fires element\n     * @fires text\n     * @fires documentFragment\n     * @param viewElement The part of the view to be converted.\n     * @param writer An instance of the model writer.\n     * @param context Elements will be converted according to this context.\n     * @returns Model data that is the result of the conversion process\n     * wrapped in `DocumentFragment`. Converted marker elements will be set as the document fragment's\n     * {@link module:engine/model/documentfragment~DocumentFragment#markers static markers map}.\n     */\n    convert(viewElement, writer, context = ['$root']) {\n        this.fire('viewCleanup', viewElement);\n        // Create context tree and set position in the top element.\n        // Items will be converted according to this position.\n        this._modelCursor = createContextTree(context, writer);\n        // Store writer in conversion as a conversion API\n        // to be sure that conversion process will use the same batch.\n        this.conversionApi.writer = writer;\n        // Create consumable values list for conversion process.\n        this.conversionApi.consumable = ViewConsumable.createFrom(viewElement);\n        // Custom data stored by converter for conversion process.\n        this.conversionApi.store = {};\n        // Do the conversion.\n        const { modelRange } = this._convertItem(viewElement, this._modelCursor);\n        // Conversion result is always a document fragment so let's create it.\n        const documentFragment = writer.createDocumentFragment();\n        // When there is a conversion result.\n        if (modelRange) {\n            // Remove all empty elements that were created while splitting.\n            this._removeEmptyElements();\n            // Move all items that were converted in context tree to the document fragment.\n            for (const item of Array.from(this._modelCursor.parent.getChildren())) {\n                writer.append(item, documentFragment);\n            }\n            // Extract temporary markers elements from model and set as static markers collection.\n            documentFragment.markers = extractMarkersFromModelFragment(documentFragment, writer);\n        }\n        // Clear context position.\n        this._modelCursor = null;\n        // Clear split elements & parents lists.\n        this._splitParts.clear();\n        this._cursorParents.clear();\n        this._emptyElementsToKeep.clear();\n        // Clear conversion API.\n        this.conversionApi.writer = null;\n        this.conversionApi.store = null;\n        // Return fragment as conversion result.\n        return documentFragment;\n    }\n    /**\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#convertItem\n     */\n    _convertItem(viewItem, modelCursor) {\n        const data = { viewItem, modelCursor, modelRange: null };\n        if (viewItem.is('element')) {\n            this.fire(`element:${viewItem.name}`, data, this.conversionApi);\n        }\n        else if (viewItem.is('$text')) {\n            this.fire('text', data, this.conversionApi);\n        }\n        else {\n            this.fire('documentFragment', data, this.conversionApi);\n        }\n        // Handle incorrect conversion result.\n        if (data.modelRange && !(data.modelRange instanceof ModelRange)) {\n            /**\n             * Incorrect conversion result was dropped.\n             *\n             * {@link module:engine/model/range~Range Model range} should be a conversion result.\n             *\n             * @error view-conversion-dispatcher-incorrect-result\n             */\n            throw new CKEditorError('view-conversion-dispatcher-incorrect-result', this);\n        }\n        return { modelRange: data.modelRange, modelCursor: data.modelCursor };\n    }\n    /**\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#convertChildren\n     */\n    _convertChildren(viewItem, elementOrModelCursor) {\n        let nextModelCursor = elementOrModelCursor.is('position') ?\n            elementOrModelCursor : ModelPosition._createAt(elementOrModelCursor, 0);\n        const modelRange = new ModelRange(nextModelCursor);\n        for (const viewChild of Array.from(viewItem.getChildren())) {\n            const result = this._convertItem(viewChild, nextModelCursor);\n            if (result.modelRange instanceof ModelRange) {\n                modelRange.end = result.modelRange.end;\n                nextModelCursor = result.modelCursor;\n            }\n        }\n        return { modelRange, modelCursor: nextModelCursor };\n    }\n    /**\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#safeInsert\n     */\n    _safeInsert(modelNode, position) {\n        // Find allowed parent for element that we are going to insert.\n        // If current parent does not allow to insert element but one of the ancestors does\n        // then split nodes to allowed parent.\n        const splitResult = this._splitToAllowedParent(modelNode, position);\n        // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n        if (!splitResult) {\n            return false;\n        }\n        // Insert element on allowed position.\n        this.conversionApi.writer.insert(modelNode, splitResult.position);\n        return true;\n    }\n    /**\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#updateConversionResult\n     */\n    _updateConversionResult(modelElement, data) {\n        const parts = this._getSplitParts(modelElement);\n        const writer = this.conversionApi.writer;\n        // Set conversion result range - only if not set already.\n        if (!data.modelRange) {\n            data.modelRange = writer.createRange(writer.createPositionBefore(modelElement), writer.createPositionAfter(parts[parts.length - 1]));\n        }\n        const savedCursorParent = this._cursorParents.get(modelElement);\n        // Now we need to check where the `modelCursor` should be.\n        if (savedCursorParent) {\n            // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n            //\n            // before: <allowed><notAllowed>foo[]</notAllowed></allowed>\n            // after:  <allowed><notAllowed>foo</notAllowed> <converted></converted> <notAllowed>[]</notAllowed></allowed>\n            data.modelCursor = writer.createPositionAt(savedCursorParent, 0);\n        }\n        else {\n            // Otherwise just continue after inserted element.\n            data.modelCursor = data.modelRange.end;\n        }\n    }\n    /**\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#splitToAllowedParent\n     */\n    _splitToAllowedParent(node, modelCursor) {\n        const { schema, writer } = this.conversionApi;\n        // Try to find allowed parent.\n        let allowedParent = schema.findAllowedParent(modelCursor, node);\n        if (allowedParent) {\n            // When current position parent allows to insert node then return this position.\n            if (allowedParent === modelCursor.parent) {\n                return { position: modelCursor };\n            }\n            // When allowed parent is in context tree (it's outside the converted tree).\n            if (this._modelCursor.parent.getAncestors().includes(allowedParent)) {\n                allowedParent = null;\n            }\n        }\n        if (!allowedParent) {\n            // Check if the node wrapped with a paragraph would be accepted by the schema.\n            if (!isParagraphable(modelCursor, node, schema)) {\n                return null;\n            }\n            return {\n                position: wrapInParagraph(modelCursor, writer)\n            };\n        }\n        // Split element to allowed parent.\n        const splitResult = this.conversionApi.writer.split(modelCursor, allowedParent);\n        // Using the range returned by `model.Writer#split`, we will pair original elements with their split parts.\n        //\n        // The range returned from the writer spans \"over the split\" or, precisely saying, from the end of the original element (the one\n        // that got split) to the beginning of the other part of that element:\n        //\n        // <limit><a><b><c>X[]Y</c></b><a></limit> ->\n        // <limit><a><b><c>X[</c></b></a><a><b><c>]Y</c></b></a>\n        //\n        // After the split there cannot be any full node between the positions in `splitRange`. The positions are touching.\n        // Also, because of how splitting works, it is easy to notice, that \"closing tags\" are in the reverse order than \"opening tags\".\n        // Also, since we split all those elements, each of them has to have the other part.\n        //\n        // With those observations in mind, we will pair the original elements with their split parts by saving \"closing tags\" and matching\n        // them with \"opening tags\" in the reverse order. For that we can use a stack.\n        const stack = [];\n        for (const treeWalkerValue of splitResult.range.getWalker()) {\n            if (treeWalkerValue.type == 'elementEnd') {\n                stack.push(treeWalkerValue.item);\n            }\n            else {\n                // There should not be any text nodes after the element is split, so the only other value is `elementStart`.\n                const originalPart = stack.pop();\n                const splitPart = treeWalkerValue.item;\n                this._registerSplitPair(originalPart, splitPart);\n            }\n        }\n        const cursorParent = splitResult.range.end.parent;\n        this._cursorParents.set(node, cursorParent);\n        return {\n            position: splitResult.position,\n            cursorParent\n        };\n    }\n    /**\n     * Registers that a `splitPart` element is a split part of the `originalPart` element.\n     *\n     * The data set by this method is used by {@link #_getSplitParts} and {@link #_removeEmptyElements}.\n     */\n    _registerSplitPair(originalPart, splitPart) {\n        if (!this._splitParts.has(originalPart)) {\n            this._splitParts.set(originalPart, [originalPart]);\n        }\n        const list = this._splitParts.get(originalPart);\n        this._splitParts.set(splitPart, list);\n        list.push(splitPart);\n    }\n    /**\n     * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#getSplitParts\n     */\n    _getSplitParts(element) {\n        let parts;\n        if (!this._splitParts.has(element)) {\n            parts = [element];\n        }\n        else {\n            parts = this._splitParts.get(element);\n        }\n        return parts;\n    }\n    /**\n     * Mark an element that were created during the splitting to not get removed on conversion end even if it is empty.\n     */\n    _keepEmptyElement(element) {\n        this._emptyElementsToKeep.add(element);\n    }\n    /**\n     * Checks if there are any empty elements created while splitting and removes them.\n     *\n     * This method works recursively to re-check empty elements again after at least one element was removed in the initial call,\n     * as some elements might have become empty after other empty elements were removed from them.\n     */\n    _removeEmptyElements() {\n        let anyRemoved = false;\n        for (const element of this._splitParts.keys()) {\n            if (element.isEmpty && !this._emptyElementsToKeep.has(element)) {\n                this.conversionApi.writer.remove(element);\n                this._splitParts.delete(element);\n                anyRemoved = true;\n            }\n        }\n        if (anyRemoved) {\n            this._removeEmptyElements();\n        }\n    }\n}\n/**\n * Traverses given model item and searches elements which marks marker range. Found element is removed from\n * DocumentFragment but path of this element is stored in a Map which is then returned.\n *\n * @param modelItem Fragment of model.\n * @returns List of static markers.\n */\nfunction extractMarkersFromModelFragment(modelItem, writer) {\n    const markerElements = new Set();\n    const markers = new Map();\n    // Create ModelTreeWalker.\n    const range = ModelRange._createIn(modelItem).getItems();\n    // Walk through DocumentFragment and collect marker elements.\n    for (const item of range) {\n        // Check if current element is a marker.\n        if (item.is('element', '$marker')) {\n            markerElements.add(item);\n        }\n    }\n    // Walk through collected marker elements store its path and remove its from the DocumentFragment.\n    for (const markerElement of markerElements) {\n        const markerName = markerElement.getAttribute('data-name');\n        const currentPosition = writer.createPositionBefore(markerElement);\n        // When marker of given name is not stored it means that we have found the beginning of the range.\n        if (!markers.has(markerName)) {\n            markers.set(markerName, new ModelRange(currentPosition.clone()));\n            // Otherwise is means that we have found end of the marker range.\n        }\n        else {\n            markers.get(markerName).end = currentPosition.clone();\n        }\n        // Remove marker element from DocumentFragment.\n        writer.remove(markerElement);\n    }\n    return markers;\n}\n/**\n * Creates model fragment according to given context and returns position in the bottom (the deepest) element.\n */\nfunction createContextTree(contextDefinition, writer) {\n    let position;\n    for (const item of new SchemaContext(contextDefinition)) {\n        const attributes = {};\n        for (const key of item.getAttributeKeys()) {\n            attributes[key] = item.getAttribute(key);\n        }\n        const current = writer.createElement(item.name, attributes);\n        if (position) {\n            writer.insert(current, position);\n        }\n        position = ModelPosition._createAt(current, 0);\n    }\n    return position;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { global } from '@ckeditor/ckeditor5-utils';\n/**\n * Basic HTML writer. It uses the native `innerHTML` property for basic conversion\n * from a document fragment to an HTML string.\n */\nexport default class BasicHtmlWriter {\n    /**\n     * Returns an HTML string created from the document fragment.\n     */\n    getHtml(fragment) {\n        const doc = global.document.implementation.createHTMLDocument('');\n        const container = doc.createElement('div');\n        container.appendChild(fragment);\n        return container.innerHTML;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/dataprocessor/htmldataprocessor\n */\n/* globals DOMParser */\nimport BasicHtmlWriter from './basichtmlwriter.js';\nimport DomConverter from '../view/domconverter.js';\n/**\n * The HTML data processor class.\n * This data processor implementation uses HTML as input and output data.\n */\nexport default class HtmlDataProcessor {\n    /**\n     * Creates a new instance of the HTML data processor class.\n     *\n     * @param document The view document instance.\n     */\n    constructor(document) {\n        this.skipComments = true;\n        this.domParser = new DOMParser();\n        this.domConverter = new DomConverter(document, { renderingMode: 'data' });\n        this.htmlWriter = new BasicHtmlWriter();\n    }\n    /**\n     * Converts a provided {@link module:engine/view/documentfragment~DocumentFragment document fragment}\n     * to data format &ndash; in this case to an HTML string.\n     *\n     * @returns HTML string.\n     */\n    toData(viewFragment) {\n        // Convert view DocumentFragment to DOM DocumentFragment.\n        const domFragment = this.domConverter.viewToDom(viewFragment);\n        // Convert DOM DocumentFragment to HTML output.\n        return this.htmlWriter.getHtml(domFragment);\n    }\n    /**\n     * Converts the provided HTML string to a view tree.\n     *\n     * @param data An HTML string.\n     * @returns A converted view element.\n     */\n    toView(data) {\n        // Convert input HTML data to DOM DocumentFragment.\n        const domFragment = this._toDom(data);\n        // Convert DOM DocumentFragment to view DocumentFragment.\n        return this.domConverter.domToView(domFragment, { skipComments: this.skipComments });\n    }\n    /**\n     * Registers a {@link module:engine/view/matcher~MatcherPattern} for view elements whose content should be treated as raw data\n     * and not processed during the conversion from the DOM to the view elements.\n     *\n     * The raw data can be later accessed by a\n     * {@link module:engine/view/element~Element#getCustomProperty custom property of a view element} called `\"$rawContent\"`.\n     *\n     * @param pattern Pattern matching all view elements whose content should be treated as raw data.\n     */\n    registerRawContentMatcher(pattern) {\n        this.domConverter.registerRawContentMatcher(pattern);\n    }\n    /**\n     * If the processor is set to use marked fillers, it will insert `&nbsp;` fillers wrapped in `<span>` elements\n     * (`<span data-cke-filler=\"true\">&nbsp;</span>`) instead of regular `&nbsp;` characters.\n     *\n     * This mode allows for a more precise handling of the block fillers (so they do not leak into the editor content) but\n     * bloats the editor data with additional markup.\n     *\n     * This mode may be required by some features and will be turned on by them automatically.\n     *\n     * @param type Whether to use the default or the marked `&nbsp;` block fillers.\n     */\n    useFillerType(type) {\n        this.domConverter.blockFillerMode = type == 'marked' ? 'markedNbsp' : 'nbsp';\n    }\n    /**\n     * Converts an HTML string to its DOM representation. Returns a document fragment containing nodes parsed from\n     * the provided data.\n     */\n    _toDom(data) {\n        // Wrap data with a <body> tag so leading non-layout nodes (like <script>, <style>, HTML comment)\n        // will be preserved in the body collection.\n        // Do it only for data that is not a full HTML document.\n        if (!/<(?:html|body|head|meta)(?:\\s[^>]*)?>/i.test(data.trim().slice(0, 10000))) {\n            data = `<body>${data}</body>`;\n        }\n        const document = this.domParser.parseFromString(data, 'text/html');\n        const fragment = document.createDocumentFragment();\n        const bodyChildNodes = document.body.childNodes;\n        while (bodyChildNodes.length > 0) {\n            fragment.appendChild(bodyChildNodes[0]);\n        }\n        return fragment;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/controller/datacontroller\n */\nimport { CKEditorError, EmitterMixin, ObservableMixin, logWarning } from '@ckeditor/ckeditor5-utils';\nimport Mapper from '../conversion/mapper.js';\nimport DowncastDispatcher from '../conversion/downcastdispatcher.js';\nimport { insertAttributesAndChildren, insertText } from '../conversion/downcasthelpers.js';\nimport UpcastDispatcher from '../conversion/upcastdispatcher.js';\nimport { convertText, convertToModelFragment } from '../conversion/upcasthelpers.js';\nimport ViewDocumentFragment from '../view/documentfragment.js';\nimport ViewDocument from '../view/document.js';\nimport ViewDowncastWriter from '../view/downcastwriter.js';\nimport ModelRange from '../model/range.js';\nimport { autoParagraphEmptyRoots } from '../model/utils/autoparagraphing.js';\nimport HtmlDataProcessor from '../dataprocessor/htmldataprocessor.js';\n/**\n * Controller for the data pipeline. The data pipeline controls how data is retrieved from the document\n * and set inside it. Hence, the controller features two methods which allow to {@link ~DataController#get get}\n * and {@link ~DataController#set set} data of the {@link ~DataController#model model}\n * using the given:\n *\n * * {@link module:engine/dataprocessor/dataprocessor~DataProcessor data processor},\n * * downcast converters,\n * * upcast converters.\n *\n * An instance of the data controller is always available in the {@link module:core/editor/editor~Editor#data `editor.data`}\n * property:\n *\n * ```ts\n * editor.data.get( { rootName: 'customRoot' } ); // -> '<p>Hello!</p>'\n * ```\n */\nexport default class DataController extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates a data controller instance.\n     *\n     * @param model Data model.\n     * @param stylesProcessor The styles processor instance.\n     */\n    constructor(model, stylesProcessor) {\n        super();\n        this.model = model;\n        this.mapper = new Mapper();\n        this.downcastDispatcher = new DowncastDispatcher({\n            mapper: this.mapper,\n            schema: model.schema\n        });\n        this.downcastDispatcher.on('insert:$text', insertText(), { priority: 'lowest' });\n        this.downcastDispatcher.on('insert', insertAttributesAndChildren(), { priority: 'lowest' });\n        this.upcastDispatcher = new UpcastDispatcher({\n            schema: model.schema\n        });\n        this.viewDocument = new ViewDocument(stylesProcessor);\n        this.stylesProcessor = stylesProcessor;\n        this.htmlProcessor = new HtmlDataProcessor(this.viewDocument);\n        this.processor = this.htmlProcessor;\n        this._viewWriter = new ViewDowncastWriter(this.viewDocument);\n        // Define default converters for text and elements.\n        //\n        // Note that if there is no default converter for the element it will be skipped, for instance `<b>foo</b>` will be\n        // converted to nothing. We therefore add `convertToModelFragment` as a last converter so it converts children of that\n        // element to the document fragment so `<b>foo</b>` will still be converted to `foo` even if there is no converter for `<b>`.\n        this.upcastDispatcher.on('text', convertText(), { priority: 'lowest' });\n        this.upcastDispatcher.on('element', convertToModelFragment(), { priority: 'lowest' });\n        this.upcastDispatcher.on('documentFragment', convertToModelFragment(), { priority: 'lowest' });\n        ObservableMixin().prototype.decorate.call(this, 'init');\n        ObservableMixin().prototype.decorate.call(this, 'set');\n        ObservableMixin().prototype.decorate.call(this, 'get');\n        ObservableMixin().prototype.decorate.call(this, 'toView');\n        ObservableMixin().prototype.decorate.call(this, 'toModel');\n        // Fire the `ready` event when the initialization has completed. Such low-level listener offers the possibility\n        // to plug into the initialization pipeline without interrupting the initialization flow.\n        this.on('init', () => {\n            this.fire('ready');\n        }, { priority: 'lowest' });\n        // Fix empty roots after DataController is 'ready' (note that the init method could be decorated and stopped).\n        // We need to handle this event because initial data could be empty and the post-fixer would not get triggered.\n        this.on('ready', () => {\n            this.model.enqueueChange({ isUndoable: false }, autoParagraphEmptyRoots);\n        }, { priority: 'lowest' });\n    }\n    /**\n     * Returns the model's data converted by downcast dispatchers attached to {@link #downcastDispatcher} and\n     * formatted by the {@link #processor data processor}.\n     *\n     * A warning is logged when you try to retrieve data for a detached root, as most probably this is a mistake. A detached root should\n     * be treated like it is removed, and you should not save its data. Note, that the detached root data is always an empty string.\n     *\n     * @fires get\n     * @param options Additional configuration for the retrieved data. `DataController` provides two optional\n     * properties: `rootName` and `trim`. Other properties of this object are specified by various editor features.\n     * @param options.rootName Root name. Default 'main'.\n     * @param options.trim Whether returned data should be trimmed. This option is set to `empty` by default,\n     * which means whenever editor content is considered empty, an empty string will be returned. To turn off trimming completely\n     * use `'none'`. In such cases the exact content will be returned (for example a `<p>&nbsp;</p>` for an empty editor).\n     * @returns Output data.\n     */\n    get(options = {}) {\n        const { rootName = 'main', trim = 'empty' } = options;\n        if (!this._checkIfRootsExists([rootName])) {\n            /**\n             * Cannot get data from a non-existing root. This error is thrown when\n             * {@link module:engine/controller/datacontroller~DataController#get `DataController#get()` method}\n             * is called with a non-existent root name. For example, if there is an editor instance with only `main` root,\n             * calling {@link module:engine/controller/datacontroller~DataController#get} like:\n             *\n             * ```ts\n             * data.get( { rootName: 'root2' } );\n             * ```\n             *\n             * will throw this error.\n             *\n             * @error datacontroller-get-non-existent-root\n             */\n            throw new CKEditorError('datacontroller-get-non-existent-root', this);\n        }\n        const root = this.model.document.getRoot(rootName);\n        if (!root.isAttached()) {\n            /**\n             * Retrieving document data for a detached root.\n             *\n             * This usually indicates an error as a detached root should be considered \"removed\" and should not be included in the\n             * document data.\n             *\n             * @error datacontroller-get-detached-root\n             */\n            logWarning('datacontroller-get-detached-root', this);\n        }\n        if (trim === 'empty' && !this.model.hasContent(root, { ignoreWhitespaces: true })) {\n            return '';\n        }\n        return this.stringify(root, options);\n    }\n    /**\n     * Returns the content of the given {@link module:engine/model/element~Element model's element} or\n     * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the downcast converters\n     * attached to the {@link #downcastDispatcher} and formatted by the {@link #processor data processor}.\n     *\n     * @param modelElementOrFragment The element whose content will be stringified.\n     * @param options Additional configuration passed to the conversion process.\n     * @returns Output data.\n     */\n    stringify(modelElementOrFragment, options = {}) {\n        // Model -> view.\n        const viewDocumentFragment = this.toView(modelElementOrFragment, options);\n        // View -> data.\n        return this.processor.toData(viewDocumentFragment);\n    }\n    /**\n     * Returns the content of the given {@link module:engine/model/element~Element model element} or\n     * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the downcast\n     * converters attached to {@link #downcastDispatcher} into a\n     * {@link module:engine/view/documentfragment~DocumentFragment view document fragment}.\n     *\n     * @fires toView\n     * @param modelElementOrFragment Element or document fragment whose content will be converted.\n     * @param options Additional configuration that will be available through the\n     * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi#options} during the conversion process.\n     * @returns Output view DocumentFragment.\n     */\n    toView(modelElementOrFragment, options = {}) {\n        const viewDocument = this.viewDocument;\n        const viewWriter = this._viewWriter;\n        // Clear bindings so the call to this method returns correct results.\n        this.mapper.clearBindings();\n        // First, convert elements.\n        const modelRange = ModelRange._createIn(modelElementOrFragment);\n        const viewDocumentFragment = new ViewDocumentFragment(viewDocument);\n        this.mapper.bindElements(modelElementOrFragment, viewDocumentFragment);\n        // Prepare list of markers.\n        // For document fragment, simply take the markers assigned to this document fragment.\n        // For model root, all markers in that root will be taken.\n        // For model element, we need to check which markers are intersecting with this element and relatively modify the markers' ranges.\n        // Collapsed markers at element boundary, although considered as not intersecting with the element, will also be returned.\n        const markers = modelElementOrFragment.is('documentFragment') ?\n            modelElementOrFragment.markers :\n            _getMarkersRelativeToElement(modelElementOrFragment);\n        this.downcastDispatcher.convert(modelRange, markers, viewWriter, options);\n        return viewDocumentFragment;\n    }\n    /**\n     * Sets the initial input data parsed by the {@link #processor data processor} and\n     * converted by the {@link #upcastDispatcher view-to-model converters}.\n     * Initial data can be only set to a document whose {@link module:engine/model/document~Document#version} is equal 0.\n     *\n     * **Note** This method is {@link module:utils/observablemixin~Observable#decorate decorated} which is\n     * used by e.g. collaborative editing plugin that syncs remote data on init.\n     *\n     * When data is passed as a string, it is initialized on the default `main` root:\n     *\n     * ```ts\n     * dataController.init( '<p>Foo</p>' ); // Initializes data on the `main` root only, as no other is specified.\n     * ```\n     *\n     * To initialize data on a different root or multiple roots at once, an object containing `rootName` - `data` pairs should be passed:\n     *\n     * ```ts\n     * dataController.init( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Initializes data on both the `main` and `title` roots.\n     * ```\n     *\n     * @fires init\n     * @param data Input data as a string or an object containing the `rootName` - `data`\n     * pairs to initialize data on multiple roots at once.\n     * @returns Promise that is resolved after the data is set on the editor.\n     */\n    init(data) {\n        if (this.model.document.version) {\n            /**\n             * Cannot set initial data to a non-empty {@link module:engine/model/document~Document}.\n             * Initial data should be set once, during the {@link module:core/editor/editor~Editor} initialization,\n             * when the {@link module:engine/model/document~Document#version} is equal 0.\n             *\n             * @error datacontroller-init-document-not-empty\n             */\n            throw new CKEditorError('datacontroller-init-document-not-empty', this);\n        }\n        let initialData = {};\n        if (typeof data === 'string') {\n            initialData.main = data; // Default root is 'main'. To initiate data on a different root, object should be passed.\n        }\n        else {\n            initialData = data;\n        }\n        if (!this._checkIfRootsExists(Object.keys(initialData))) {\n            /**\n             * Cannot init data on a non-existent root. This error is thrown when\n             * {@link module:engine/controller/datacontroller~DataController#init DataController#init() method}\n             * is called with non-existent root name. For example, if there is an editor instance with only `main` root,\n             * calling {@link module:engine/controller/datacontroller~DataController#init} like:\n             *\n             * ```ts\n             * data.init( { main: '<p>Foo</p>', root2: '<p>Bar</p>' } );\n             * ```\n             *\n             * will throw this error.\n             *\n             * @error datacontroller-init-non-existent-root\n             */\n            throw new CKEditorError('datacontroller-init-non-existent-root', this);\n        }\n        this.model.enqueueChange({ isUndoable: false }, writer => {\n            for (const rootName of Object.keys(initialData)) {\n                const modelRoot = this.model.document.getRoot(rootName);\n                writer.insert(this.parse(initialData[rootName], modelRoot), modelRoot, 0);\n            }\n        });\n        return Promise.resolve();\n    }\n    /**\n     * Sets the input data parsed by the {@link #processor data processor} and\n     * converted by the {@link #upcastDispatcher view-to-model converters}.\n     * This method can be used any time to replace existing editor data with the new one without clearing the\n     * {@link module:engine/model/document~Document#history document history}.\n     *\n     * This method also creates a batch with all the changes applied. If all you need is to parse data, use\n     * the {@link #parse} method.\n     *\n     * When data is passed as a string it is set on the default `main` root:\n     *\n     * ```ts\n     * dataController.set( '<p>Foo</p>' ); // Sets data on the `main` root, as no other is specified.\n     * ```\n     *\n     * To set data on a different root or multiple roots at once, an object containing `rootName` - `data` pairs should be passed:\n     *\n     * ```ts\n     * dataController.set( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Sets data on the `main` and `title` roots as specified.\n     * ```\n     *\n     * To set the data with a preserved undo stack and add the change to the undo stack, set `{ isUndoable: true }` as a `batchType` option.\n     *\n     * ```ts\n     * dataController.set( '<p>Foo</p>', { batchType: { isUndoable: true } } );\n     * ```\n     *\n     * @fires set\n     * @param data Input data as a string or an object containing the `rootName` - `data`\n     * pairs to set data on multiple roots at once.\n     * @param options Options for setting data.\n     * @param options.batchType The batch type that will be used to create a batch for the changes applied by this method.\n     * By default, the batch will be set as {@link module:engine/model/batch~Batch#isUndoable not undoable} and the undo stack will be\n     * cleared after the new data is applied (all undo steps will be removed). If the batch type `isUndoable` flag is be set to `true`,\n     * the undo stack will be preserved instead and not cleared when new data is applied.\n     */\n    set(data, options = {}) {\n        let newData = {};\n        if (typeof data === 'string') {\n            newData.main = data; // The default root is 'main'. To set data on a different root, an object should be passed.\n        }\n        else {\n            newData = data;\n        }\n        if (!this._checkIfRootsExists(Object.keys(newData))) {\n            /**\n             * Cannot set data on a non-existent root. This error is thrown when the\n             * {@link module:engine/controller/datacontroller~DataController#set DataController#set() method}\n             * is called with non-existent root name. For example, if there is an editor instance with only the default `main` root,\n             * calling {@link module:engine/controller/datacontroller~DataController#set} like:\n             *\n             * ```ts\n             * data.set( { main: '<p>Foo</p>', root2: '<p>Bar</p>' } );\n             * ```\n             *\n             * will throw this error.\n             *\n             * @error datacontroller-set-non-existent-root\n             */\n            throw new CKEditorError('datacontroller-set-non-existent-root', this);\n        }\n        this.model.enqueueChange(options.batchType || {}, writer => {\n            writer.setSelection(null);\n            writer.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());\n            for (const rootName of Object.keys(newData)) {\n                // Save to model.\n                const modelRoot = this.model.document.getRoot(rootName);\n                writer.remove(writer.createRangeIn(modelRoot));\n                writer.insert(this.parse(newData[rootName], modelRoot), modelRoot, 0);\n            }\n        });\n    }\n    /**\n     * Returns the data parsed by the {@link #processor data processor} and then converted by upcast converters\n     * attached to the {@link #upcastDispatcher}.\n     *\n     * @see #set\n     * @param data Data to parse.\n     * @param context Base context in which the view will be converted to the model.\n     * See: {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#convert}.\n     * @returns Parsed data.\n     */\n    parse(data, context = '$root') {\n        // data -> view\n        const viewDocumentFragment = this.processor.toView(data);\n        // view -> model\n        return this.toModel(viewDocumentFragment, context);\n    }\n    /**\n     * Returns the result of the given {@link module:engine/view/element~Element view element} or\n     * {@link module:engine/view/documentfragment~DocumentFragment view document fragment} converted by the\n     * {@link #upcastDispatcher view-to-model converters}, wrapped by {@link module:engine/model/documentfragment~DocumentFragment}.\n     *\n     * When marker elements were converted during the conversion process, it will be set as a document fragment's\n     * {@link module:engine/model/documentfragment~DocumentFragment#markers static markers map}.\n     *\n     * @fires toModel\n     * @param viewElementOrFragment The element or document fragment whose content will be converted.\n     * @param context Base context in which the view will be converted to the model.\n     * See: {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#convert}.\n     * @returns Output document fragment.\n     */\n    toModel(viewElementOrFragment, context = '$root') {\n        return this.model.change(writer => {\n            return this.upcastDispatcher.convert(viewElementOrFragment, writer, context);\n        });\n    }\n    /**\n     * Adds the style processor normalization rules.\n     *\n     * You can implement your own rules as well as use one of the available processor rules:\n     *\n     * * background: {@link module:engine/view/styles/background~addBackgroundRules}\n     * * border: {@link module:engine/view/styles/border~addBorderRules}\n     * * margin: {@link module:engine/view/styles/margin~addMarginRules}\n     * * padding: {@link module:engine/view/styles/padding~addPaddingRules}\n     */\n    addStyleProcessorRules(callback) {\n        callback(this.stylesProcessor);\n    }\n    /**\n     * Registers a {@link module:engine/view/matcher~MatcherPattern} on an {@link #htmlProcessor htmlProcessor}\n     * and a {@link #processor processor} for view elements whose content should be treated as raw data\n     * and not processed during the conversion from DOM to view elements.\n     *\n     * The raw data can be later accessed by the {@link module:engine/view/element~Element#getCustomProperty view element custom property}\n     * `\"$rawContent\"`.\n     *\n     * @param pattern Pattern matching all view elements whose content should be treated as a raw data.\n     */\n    registerRawContentMatcher(pattern) {\n        // No need to register the pattern if both the `htmlProcessor` and `processor` are the same instances.\n        if (this.processor && this.processor !== this.htmlProcessor) {\n            this.processor.registerRawContentMatcher(pattern);\n        }\n        this.htmlProcessor.registerRawContentMatcher(pattern);\n    }\n    /**\n     * Removes all event listeners set by the DataController.\n     */\n    destroy() {\n        this.stopListening();\n    }\n    /**\n     * Checks whether all provided root names are actually existing editor roots.\n     *\n     * @param rootNames Root names to check.\n     * @returns Whether all provided root names are existing editor roots.\n     */\n    _checkIfRootsExists(rootNames) {\n        for (const rootName of rootNames) {\n            if (!this.model.document.getRoot(rootName)) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n/**\n * Helper function for downcast conversion.\n *\n * Takes a document element (element that is added to a model document) and checks which markers are inside it. If the marker is collapsed\n * at element boundary, it is considered as contained inside the element and marker range is returned. Otherwise, if the marker is\n * intersecting with the element, the intersection is returned.\n */\nfunction _getMarkersRelativeToElement(element) {\n    const result = [];\n    const doc = element.root.document;\n    if (!doc) {\n        return new Map();\n    }\n    const elementRange = ModelRange._createIn(element);\n    for (const marker of doc.model.markers) {\n        const markerRange = marker.getRange();\n        const isMarkerCollapsed = markerRange.isCollapsed;\n        const isMarkerAtElementBoundary = markerRange.start.isEqual(elementRange.start) || markerRange.end.isEqual(elementRange.end);\n        if (isMarkerCollapsed && isMarkerAtElementBoundary) {\n            result.push([marker.name, markerRange]);\n        }\n        else {\n            const updatedMarkerRange = elementRange.getIntersection(markerRange);\n            if (updatedMarkerRange) {\n                result.push([marker.name, updatedMarkerRange]);\n            }\n        }\n    }\n    // Sort the markers in a stable fashion to ensure that the order in which they are\n    // added to the model's marker collection does not affect how they are\n    // downcast. One particular use case that we are targeting here, is one where\n    // two markers are adjacent but not overlapping, such as an insertion/deletion\n    // suggestion pair representing the replacement of a range of text. In this\n    // case, putting the markers in DOM order causes the first marker's end to be\n    // serialized right after the second marker's start, while putting the markers\n    // in reverse DOM order causes it to be right before the second marker's\n    // start. So, we sort these in a way that ensures non-intersecting ranges are in\n    // reverse DOM order, and intersecting ranges are in something approximating\n    // reverse DOM order (since reverse DOM order doesn't have a precise meaning\n    // when working with intersecting ranges).\n    result.sort(([n1, r1], [n2, r2]) => {\n        if (r1.end.compareWith(r2.start) !== 'after') {\n            // m1.end <= m2.start -- m1 is entirely <= m2\n            return 1;\n        }\n        else if (r1.start.compareWith(r2.end) !== 'before') {\n            // m1.start >= m2.end -- m1 is entirely >= m2\n            return -1;\n        }\n        else {\n            // they overlap, so use their start positions as the primary sort key and\n            // end positions as the secondary sort key\n            switch (r1.start.compareWith(r2.start)) {\n                case 'before':\n                    return 1;\n                case 'after':\n                    return -1;\n                default:\n                    switch (r1.end.compareWith(r2.end)) {\n                        case 'before':\n                            return 1;\n                        case 'after':\n                            return -1;\n                        default:\n                            return n2.localeCompare(n1);\n                    }\n            }\n        }\n    });\n    return new Map(result);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/conversion/conversion\n */\nimport { CKEditorError, toArray } from '@ckeditor/ckeditor5-utils';\nimport UpcastHelpers from './upcasthelpers.js';\nimport DowncastHelpers from './downcasthelpers.js';\n/**\n * A utility class that helps add converters to upcast and downcast dispatchers.\n *\n * We recommend reading the {@glink framework/deep-dive/conversion/intro editor conversion} guide first to\n * understand the core concepts of the conversion mechanisms.\n *\n * An instance of the conversion manager is available in the\n * {@link module:core/editor/editor~Editor#conversion `editor.conversion`} property\n * and by default has the following groups of dispatchers (i.e. directions of conversion):\n *\n * * `downcast` (editing and data downcasts)\n * * `editingDowncast`\n * * `dataDowncast`\n * * `upcast`\n *\n * # One-way converters\n *\n * To add a converter to a specific group, use the {@link module:engine/conversion/conversion~Conversion#for `for()`}\n * method:\n *\n * ```ts\n * // Add a converter to editing downcast and data downcast.\n * editor.conversion.for( 'downcast' ).elementToElement( config ) );\n *\n * // Add a converter to the data pipepline only:\n * editor.conversion.for( 'dataDowncast' ).elementToElement( dataConversionConfig ) );\n *\n * // And a slightly different one for the editing pipeline:\n * editor.conversion.for( 'editingDowncast' ).elementToElement( editingConversionConfig ) );\n * ```\n *\n * See {@link module:engine/conversion/conversion~Conversion#for `for()`} method documentation to learn more about\n * available conversion helpers and how to use your custom ones.\n *\n * # Two-way converters\n *\n * Besides using one-way converters via the `for()` method, you can also use other methods available in this\n * class to add two-way converters (upcast and downcast):\n *\n * * {@link module:engine/conversion/conversion~Conversion#elementToElement `elementToElement()`} &ndash;\n * Model element to view element and vice versa.\n * * {@link module:engine/conversion/conversion~Conversion#attributeToElement `attributeToElement()`} &ndash;\n * Model attribute to view element and vice versa.\n * * {@link module:engine/conversion/conversion~Conversion#attributeToAttribute `attributeToAttribute()`} &ndash;\n * Model attribute to view attribute and vice versa.\n */\nexport default class Conversion {\n    /**\n     * Creates a new conversion instance.\n     */\n    constructor(downcastDispatchers, upcastDispatchers) {\n        /**\n         * Maps dispatchers group name to ConversionHelpers instances.\n         */\n        this._helpers = new Map();\n        // Define default 'downcast' & 'upcast' dispatchers groups. Those groups are always available as two-way converters needs them.\n        this._downcast = toArray(downcastDispatchers);\n        this._createConversionHelpers({ name: 'downcast', dispatchers: this._downcast, isDowncast: true });\n        this._upcast = toArray(upcastDispatchers);\n        this._createConversionHelpers({ name: 'upcast', dispatchers: this._upcast, isDowncast: false });\n    }\n    /**\n     * Define an alias for registered dispatcher.\n     *\n     * ```ts\n     * const conversion = new Conversion(\n     * \t[ dataDowncastDispatcher, editingDowncastDispatcher ],\n     * \tupcastDispatcher\n     * );\n     *\n     * conversion.addAlias( 'dataDowncast', dataDowncastDispatcher );\n     * ```\n     *\n     * @param alias An alias of a dispatcher.\n     * @param dispatcher Dispatcher which should have an alias.\n     */\n    addAlias(alias, dispatcher) {\n        const isDowncast = this._downcast.includes(dispatcher);\n        const isUpcast = this._upcast.includes(dispatcher);\n        if (!isUpcast && !isDowncast) {\n            /**\n             * Trying to register an alias for a dispatcher that nas not been registered.\n             *\n             * @error conversion-add-alias-dispatcher-not-registered\n             */\n            throw new CKEditorError('conversion-add-alias-dispatcher-not-registered', this);\n        }\n        this._createConversionHelpers({ name: alias, dispatchers: [dispatcher], isDowncast });\n    }\n    /**\n     * Provides a chainable API to assign converters to a conversion dispatchers group.\n     *\n     * If the given group name has not been registered, the\n     * {@link module:utils/ckeditorerror~CKEditorError `conversion-for-unknown-group` error} is thrown.\n     *\n     * You can use conversion helpers available directly in the `for()` chain or your custom ones via\n     * the {@link module:engine/conversion/conversionhelpers~ConversionHelpers#add `add()`} method.\n     *\n     * # Using built-in conversion helpers\n     *\n     * The `for()` chain comes with a set of conversion helpers which you can use like this:\n     *\n     * ```ts\n     * editor.conversion.for( 'downcast' )\n     * \t.elementToElement( config1 )        // Adds an element-to-element downcast converter.\n     * \t.attributeToElement( config2 );     // Adds an attribute-to-element downcast converter.\n     *\n     * editor.conversion.for( 'upcast' )\n     * \t.elementToAttribute( config3 );     // Adds an element-to-attribute upcast converter.\n     * ```\n     *\n     * Refer to the documentation of built-in conversion helpers to learn about their configuration options.\n     *\n     * * downcast (model-to-view) conversion helpers:\n     *\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToElement `elementToElement()`},\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement `attributeToElement()`},\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToAttribute `attributeToAttribute()`}.\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToElement `markerToElement()`}.\n     *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToHighlight `markerToHighlight()`}.\n     *\n     * * upcast (view-to-model) conversion helpers:\n     *\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToElement `elementToElement()`},\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToAttribute `elementToAttribute()`},\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#attributeToAttribute `attributeToAttribute()`}.\n     *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToMarker `elementToMarker()`}.\n     *\n     * # Using custom conversion helpers\n     *\n     * If you need to implement an atypical converter, you can do so by calling:\n     *\n     * ```ts\n     * editor.conversion.for( direction ).add( customHelper );\n     * ```\n     *\n     * The `.add()` method takes exactly one parameter, which is a function. This function should accept one parameter that\n     * is a dispatcher instance. The function should add an actual converter to the passed dispatcher instance.\n     *\n     * Example:\n     *\n     * ```ts\n     * editor.conversion.for( 'upcast' ).add( dispatcher => {\n     * \tdispatcher.on( 'element:a',  ( evt, data, conversionApi ) => {\n     * \t\t// Do something with a view <a> element.\n     * \t} );\n     * } );\n     * ```\n     *\n     * Refer to the documentation of {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher}\n     * and {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} to learn how to write\n     * custom converters.\n     *\n     * @param groupName The name of dispatchers group to add the converters to.\n     */\n    for(groupName) {\n        if (!this._helpers.has(groupName)) {\n            /**\n             * Trying to add a converter to an unknown dispatchers group.\n             *\n             * @error conversion-for-unknown-group\n             */\n            throw new CKEditorError('conversion-for-unknown-group', this);\n        }\n        return this._helpers.get(groupName);\n    }\n    /**\n     * Sets up converters between the model and the view that convert a model element to a view element (and vice versa).\n     * For example, the model `<paragraph>Foo</paragraph>` is turned into `<p>Foo</p>` in the view.\n     *\n     * ```ts\n     * // A simple conversion from the `paragraph` model element to the `<p>` view element (and vice versa).\n     * editor.conversion.elementToElement( { model: 'paragraph', view: 'p' } );\n     *\n     * // Override other converters by specifying a converter definition with a higher priority.\n     * editor.conversion.elementToElement( { model: 'paragraph', view: 'div', converterPriority: 'high' } );\n     *\n     * // View specified as an object instead of a string.\n     * editor.conversion.elementToElement( {\n     * \tmodel: 'fancyParagraph',\n     * \tview: {\n     * \t\tname: 'p',\n     * \t\tclasses: 'fancy'\n     * \t}\n     * } );\n     *\n     * // Use `upcastAlso` to define other view elements that should also be converted to a `paragraph` element.\n     * editor.conversion.elementToElement( {\n     * \tmodel: 'paragraph',\n     * \tview: 'p',\n     * \tupcastAlso: [\n     * \t\t'div',\n     * \t\t{\n     * \t\t\t// Any element with the `display: block` style.\n     * \t\t\tstyles: {\n     * \t\t\t\tdisplay: 'block'\n     * \t\t\t}\n     * \t\t}\n     * \t]\n     * } );\n     *\n     * // `upcastAlso` set as callback enables a conversion of a wide range of different view elements.\n     * editor.conversion.elementToElement( {\n     * \tmodel: 'heading',\n     * \tview: 'h2',\n     * \t// Convert \"heading-like\" paragraphs to headings.\n     * \tupcastAlso: viewElement => {\n     * \t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     *\n     * \t\tif ( !fontSize ) {\n     * \t\t\treturn null;\n     * \t\t}\n     *\n     * \t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n     *\n     * \t\tif ( !match ) {\n     * \t\t\treturn null;\n     * \t\t}\n     *\n     * \t\tconst size = Number( match[ 1 ] );\n     *\n     * \t\tif ( size > 26 ) {\n     * \t\t\t// Returned value can be an object with the matched properties.\n     * \t\t\t// These properties will be \"consumed\" during the conversion.\n     * \t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     * \t\t\treturn { name: true, styles: [ 'font-size' ] };\n     * \t\t}\n     *\n     * \t\treturn null;\n     * \t}\n     * } );\n     * ```\n     *\n     * `definition.model` is a `String` with a model element name to convert from or to.\n     *\n     * @param definition The converter definition.\n     */\n    elementToElement(definition) {\n        // Set up downcast converter.\n        this.for('downcast').elementToElement(definition);\n        // Set up upcast converter.\n        for (const { model, view } of _getAllUpcastDefinitions(definition)) {\n            this.for('upcast')\n                .elementToElement({\n                model,\n                view,\n                converterPriority: definition.converterPriority\n            });\n        }\n    }\n    /**\n     * Sets up converters between the model and the view that convert a model attribute to a view element (and vice versa).\n     * For example, a model text node with `\"Foo\"` as data and the `bold` attribute will be turned to `<strong>Foo</strong>` in the view.\n     *\n     * ```ts\n     * // A simple conversion from the `bold=true` attribute to the `<strong>` view element (and vice versa).\n     * editor.conversion.attributeToElement( { model: 'bold', view: 'strong' } );\n     *\n     * // Override other converters by specifying a converter definition with a higher priority.\n     * editor.conversion.attributeToElement( { model: 'bold', view: 'b', converterPriority: 'high' } );\n     *\n     * // View specified as an object instead of a string.\n     * editor.conversion.attributeToElement( {\n     * \tmodel: 'bold',\n     * \tview: {\n     * \t\tname: 'span',\n     * \t\tclasses: 'bold'\n     * \t}\n     * } );\n     *\n     * // Use `config.model.name` to define the conversion only from a given node type, `$text` in this case.\n     * // The same attribute on different elements may then be handled by a different converter.\n     * editor.conversion.attributeToElement( {\n     * \tmodel: {\n     * \t\tkey: 'textDecoration',\n     * \t\tvalues: [ 'underline', 'lineThrough' ],\n     * \t\tname: '$text'\n     * \t},\n     * \tview: {\n     * \t\tunderline: {\n     * \t\t\tname: 'span',\n     * \t\t\tstyles: {\n     * \t\t\t\t'text-decoration': 'underline'\n     * \t\t\t}\n     * \t\t},\n     * \t\tlineThrough: {\n     * \t\t\tname: 'span',\n     * \t\t\tstyles: {\n     * \t\t\t\t'text-decoration': 'line-through'\n     * \t\t\t}\n     * \t\t}\n     * \t}\n     * } );\n     *\n     * // Use `upcastAlso` to define other view elements that should also be converted to the `bold` attribute.\n     * editor.conversion.attributeToElement( {\n     * \tmodel: 'bold',\n     * \tview: 'strong',\n     * \tupcastAlso: [\n     * \t\t'b',\n     * \t\t{\n     * \t\t\tname: 'span',\n     * \t\t\tclasses: 'bold'\n     * \t\t},\n     * \t\t{\n     * \t\t\tname: 'span',\n     * \t\t\tstyles: {\n     * \t\t\t\t'font-weight': 'bold'\n     * \t\t\t}\n     * \t\t},\n     * \t\tviewElement => {\n     * \t\t\tconst fontWeight = viewElement.getStyle( 'font-weight' );\n     *\n     * \t\t\tif ( viewElement.is( 'element', 'span' ) && fontWeight && /\\d+/.test() && Number( fontWeight ) > 500 ) {\n     * \t\t\t\t// Returned value can be an object with the matched properties.\n     * \t\t\t\t// These properties will be \"consumed\" during the conversion.\n     * \t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     * \t\t\t\treturn {\n     * \t\t\t\t\tname: true,\n     * \t\t\t\t\tstyles: [ 'font-weight' ]\n     * \t\t\t\t};\n     * \t\t\t}\n     * \t\t}\n     * \t]\n     * } );\n     *\n     * // Conversion from and to a model attribute key whose value is an enum (`fontSize=big|small`).\n     * // `upcastAlso` set as callback enables a conversion of a wide range of different view elements.\n     * editor.conversion.attributeToElement( {\n     * \tmodel: {\n     * \t\tkey: 'fontSize',\n     * \t\tvalues: [ 'big', 'small' ]\n     * \t},\n     * \tview: {\n     * \t\tbig: {\n     * \t\t\tname: 'span',\n     * \t\t\tstyles: {\n     * \t\t\t\t'font-size': '1.2em'\n     * \t\t\t}\n     * \t\t},\n     * \t\tsmall: {\n     * \t\t\tname: 'span',\n     * \t\t\tstyles: {\n     * \t\t\t\t'font-size': '0.8em'\n     * \t\t\t}\n     * \t\t}\n     * \t},\n     * \tupcastAlso: {\n     * \t\tbig: viewElement => {\n     * \t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     *\n     * \t\t\tif ( !fontSize ) {\n     * \t\t\t\treturn null;\n     * \t\t\t}\n     *\n     * \t\t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n     *\n     * \t\t\tif ( !match ) {\n     * \t\t\t\treturn null;\n     * \t\t\t}\n     *\n     * \t\t\tconst size = Number( match[ 1 ] );\n     *\n     * \t\t\tif ( viewElement.is( 'element', 'span' ) && size > 10 ) {\n     * \t\t\t\t// Returned value can be an object with the matched properties.\n     * \t\t\t\t// These properties will be \"consumed\" during the conversion.\n     * \t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     * \t\t\t\treturn { name: true, styles: [ 'font-size' ] };\n     * \t\t\t}\n     *\n     * \t\t\treturn null;\n     * \t\t},\n     * \t\tsmall: viewElement => {\n     * \t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n     *\n     * \t\t\tif ( !fontSize ) {\n     * \t\t\t\treturn null;\n     * \t\t\t}\n     *\n     * \t\t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n     *\n     * \t\t\tif ( !match ) {\n     * \t\t\t\treturn null;\n     * \t\t\t}\n     *\n     * \t\t\tconst size = Number( match[ 1 ] );\n     *\n     * \t\t\tif ( viewElement.is( 'element', 'span' ) && size < 10 ) {\n     * \t\t\t\t// Returned value can be an object with the matched properties.\n     * \t\t\t\t// These properties will be \"consumed\" during the conversion.\n     * \t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n     *\n     * \t\t\t\treturn { name: true, styles: [ 'font-size' ] };\n     * \t\t\t}\n     *\n     * \t\t\treturn null;\n     * \t\t}\n     * \t}\n     * } );\n     * ```\n     *\n     * The `definition.model` parameter specifies which model attribute should be converted from or to. It can be a `{ key, value }` object\n     * describing the attribute key and value to convert or a `String` specifying just the attribute key (in such a case\n     * `value` is set to `true`).\n     *\n     * @param definition The converter definition.\n     */\n    attributeToElement(definition) {\n        // Set up downcast converter.\n        this.for('downcast').attributeToElement(definition);\n        // Set up upcast converter.\n        for (const { model, view } of _getAllUpcastDefinitions(definition)) {\n            this.for('upcast')\n                .elementToAttribute({\n                view,\n                model,\n                converterPriority: definition.converterPriority\n            });\n        }\n    }\n    /**\n     * Sets up converters between the model and the view that convert a model attribute to a view attribute (and vice versa). For example,\n     * `<imageBlock src='foo.jpg'></imageBlock>` is converted to `<img src='foo.jpg'></img>` (the same attribute key and value).\n     * This type of converters is intended to be used with {@link module:engine/model/element~Element model element} nodes.\n     * To convert the text attributes,\n     * the {@link module:engine/conversion/conversion~Conversion#attributeToElement `attributeToElement converter`}should be set up.\n     *\n     * ```ts\n     * // A simple conversion from the `source` model attribute to the `src` view attribute (and vice versa).\n     * editor.conversion.attributeToAttribute( { model: 'source', view: 'src' } );\n     *\n     * // Attribute values are strictly specified.\n     * editor.conversion.attributeToAttribute( {\n     * \tmodel: {\n     * \t\tname: 'imageInline',\n     * \t\tkey: 'aside',\n     * \t\tvalues: [ 'aside' ]\n     * \t},\n     * \tview: {\n     * \t\taside: {\n     * \t\t\tname: 'img',\n     * \t\t\tkey: 'class',\n     * \t\t\tvalue: [ 'aside', 'half-size' ]\n     * \t\t}\n     * \t}\n     * } );\n     *\n     * // Set the style attribute.\n     * editor.conversion.attributeToAttribute( {\n     * \tmodel: {\n     * \t\tname: 'imageInline',\n     * \t\tkey: 'aside',\n     * \t\tvalues: [ 'aside' ]\n     * \t},\n     * \tview: {\n     * \t\taside: {\n     * \t\t\tname: 'img',\n     * \t\t\tkey: 'style',\n     * \t\t\tvalue: {\n     * \t\t\t\tfloat: 'right',\n     * \t\t\t\twidth: '50%',\n     * \t\t\t\tmargin: '5px'\n     * \t\t\t}\n     * \t\t}\n     * \t}\n     * } );\n     *\n     * // Conversion from and to a model attribute key whose value is an enum (`align=right|center`).\n     * // Use `upcastAlso` to define other view elements that should also be converted to the `align=right` attribute.\n     * editor.conversion.attributeToAttribute( {\n     * \tmodel: {\n     * \t\tkey: 'align',\n     * \t\tvalues: [ 'right', 'center' ]\n     * \t},\n     * \tview: {\n     * \t\tright: {\n     * \t\t\tkey: 'class',\n     * \t\t\tvalue: 'align-right'\n     * \t\t},\n     * \t\tcenter: {\n     * \t\t\tkey: 'class',\n     * \t\t\tvalue: 'align-center'\n     * \t\t}\n     * \t},\n     * \tupcastAlso: {\n     * \t\tright: {\n     * \t\t\tstyles: {\n     * \t\t\t\t'text-align': 'right'\n     * \t\t\t}\n     * \t\t},\n     * \t\tcenter: {\n     * \t\t\tstyles: {\n     * \t\t\t\t'text-align': 'center'\n     * \t\t\t}\n     * \t\t}\n     * \t}\n     * } );\n     * ```\n     *\n     * The `definition.model` parameter specifies which model attribute should be converted from and to.\n     * It can be a `{ key, [ values ], [ name ] }` object or a `String`, which will be treated like `{ key: definition.model }`.\n     * The `key` property is the model attribute key to convert from and to.\n     * The `values` are the possible model attribute values. If the `values` parameter is not set, the model attribute value\n     * will be the same as the view attribute value.\n     * If `name` is set, the conversion will be set up only for model elements with the given name.\n     *\n     * The `definition.view` parameter specifies which view attribute should be converted from and to.\n     * It can be a `{ key, value, [ name ] }` object or a `String`, which will be treated like `{ key: definition.view }`.\n     * The `key` property is the view attribute key to convert from and to.\n     * The `value` is the view attribute value to convert from and to. If `definition.value` is not set, the view attribute value will be\n     * the same as the model attribute value.\n     * If `key` is `'class'`, `value` can be a `String` or an array of `String`s.\n     * If `key` is `'style'`, `value` is an object with key-value pairs.\n     * In other cases, `value` is a `String`.\n     * If `name` is set, the conversion will be set up only for model elements with the given name.\n     * If `definition.model.values` is set, `definition.view` is an object that assigns values from `definition.model.values`\n     * to `{ key, value, [ name ] }` objects.\n     *\n     * `definition.upcastAlso` specifies which other matching view elements should also be upcast to the given model configuration.\n     * If `definition.model.values` is set, `definition.upcastAlso` should be an object assigning values from `definition.model.values`\n     * to {@link module:engine/view/matcher~MatcherPattern}s or arrays of {@link module:engine/view/matcher~MatcherPattern}s.\n     *\n     * **Note:** `definition.model` and `definition.view` form should be mirrored, so the same types of parameters should\n     * be given in both parameters.\n     *\n     * @param definition The converter definition.\n     * @param definition.model The model attribute to convert from and to.\n     * @param definition.view The view attribute to convert from and to.\n     * @param definition.upcastAlso Any view element matching `definition.upcastAlso` will also be converted to the given model attribute.\n     * `definition.upcastAlso` is used only if `config.model.values` is specified.\n     */\n    attributeToAttribute(definition) {\n        // Set up downcast converter.\n        this.for('downcast').attributeToAttribute(definition);\n        // Set up upcast converter.\n        for (const { model, view } of _getAllUpcastDefinitions(definition)) {\n            this.for('upcast')\n                .attributeToAttribute({\n                view,\n                model\n            });\n        }\n    }\n    /**\n     * Creates and caches conversion helpers for given dispatchers group.\n     *\n     * @param options.name Group name.\n     */\n    _createConversionHelpers({ name, dispatchers, isDowncast }) {\n        if (this._helpers.has(name)) {\n            /**\n             * Trying to register a group name that has already been registered.\n             *\n             * @error conversion-group-exists\n             */\n            throw new CKEditorError('conversion-group-exists', this);\n        }\n        const helpers = isDowncast ?\n            new DowncastHelpers(dispatchers) :\n            new UpcastHelpers(dispatchers);\n        this._helpers.set(name, helpers);\n    }\n}\n/**\n * Helper function that creates a joint array out of an item passed in `definition.view` and items passed in\n * `definition.upcastAlso`.\n */\nfunction* _getAllUpcastDefinitions(definition) {\n    if (definition.model.values) {\n        for (const value of definition.model.values) {\n            const model = { key: definition.model.key, value };\n            const view = definition.view[value];\n            const upcastAlso = definition.upcastAlso ? definition.upcastAlso[value] : undefined;\n            yield* _getUpcastDefinition(model, view, upcastAlso);\n        }\n    }\n    else {\n        yield* _getUpcastDefinition(definition.model, definition.view, definition.upcastAlso);\n    }\n}\nfunction* _getUpcastDefinition(model, view, upcastAlso) {\n    yield { model, view };\n    if (upcastAlso) {\n        for (const upcastAlsoItem of toArray(upcastAlso)) {\n            yield { model, view: upcastAlsoItem };\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Abstract base operation class.\n */\nexport default class Operation {\n    /**\n     * Base operation constructor.\n     *\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(baseVersion) {\n        this.baseVersion = baseVersion;\n        this.isDocumentOperation = this.baseVersion !== null;\n        this.batch = null;\n    }\n    /**\n     * Checks whether the operation's parameters are correct and the operation can be correctly executed. Throws\n     * an error if operation is not valid.\n     *\n     * @internal\n     */\n    _validate() {\n    }\n    /**\n     * Custom toJSON method to solve child-parent circular dependencies.\n     *\n     * @returns Clone of this object with the operation property replaced with string.\n     */\n    toJSON() {\n        // This method creates only a shallow copy, all nested objects should be defined separately.\n        // See https://github.com/ckeditor/ckeditor5-engine/issues/1477.\n        const json = Object.assign({}, this);\n        json.__className = this.constructor.className;\n        // Remove reference to the parent `Batch` to avoid circular dependencies.\n        delete json.batch;\n        // Only document operations are shared with other clients so it is not necessary to keep this information.\n        delete json.isDocumentOperation;\n        return json;\n    }\n    /**\n     * Name of the operation class used for serialization.\n     */\n    static get className() {\n        return 'Operation';\n    }\n    /**\n     * Creates `Operation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param doc Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        return new this(json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/utils\n */\nimport Node from '../node.js';\nimport Range from '../range.js';\nimport Text from '../text.js';\nimport TextProxy from '../textproxy.js';\nimport { CKEditorError, isIterable } from '@ckeditor/ckeditor5-utils';\n/**\n * Inserts given nodes at given position.\n *\n * @internal\n * @param position Position at which nodes should be inserted.\n * @param normalizedNodes Nodes to insert.\n * @returns Range spanning over inserted elements.\n */\nexport function _insert(position, nodes) {\n    const normalizedNodes = _normalizeNodes(nodes);\n    // We have to count offset before inserting nodes because they can get merged and we would get wrong offsets.\n    const offset = normalizedNodes.reduce((sum, node) => sum + node.offsetSize, 0);\n    const parent = position.parent;\n    // Insertion might be in a text node, we should split it if that's the case.\n    _splitNodeAtPosition(position);\n    const index = position.index;\n    // Insert nodes at given index. After splitting we have a proper index and insertion is between nodes,\n    // using basic `Element` API.\n    parent._insertChild(index, normalizedNodes);\n    // Merge text nodes, if possible. Merging is needed only at points where inserted nodes \"touch\" \"old\" nodes.\n    _mergeNodesAtIndex(parent, index + normalizedNodes.length);\n    _mergeNodesAtIndex(parent, index);\n    return new Range(position, position.getShiftedBy(offset));\n}\n/**\n * Removed nodes in given range. Only {@link module:engine/model/range~Range#isFlat flat} ranges are accepted.\n *\n * @internal\n * @param range Range containing nodes to remove.\n */\nexport function _remove(range) {\n    if (!range.isFlat) {\n        /**\n         * Trying to remove a range which starts and ends in different element.\n         *\n         * @error operation-utils-remove-range-not-flat\n         */\n        throw new CKEditorError('operation-utils-remove-range-not-flat', this);\n    }\n    const parent = range.start.parent;\n    // Range may be inside text nodes, we have to split them if that's the case.\n    _splitNodeAtPosition(range.start);\n    _splitNodeAtPosition(range.end);\n    // Remove the text nodes using basic `Element` API.\n    const removed = parent._removeChildren(range.start.index, range.end.index - range.start.index);\n    // Merge text nodes, if possible. After some nodes were removed, node before and after removed range will be\n    // touching at the position equal to the removed range beginning. We check merging possibility there.\n    _mergeNodesAtIndex(parent, range.start.index);\n    return removed;\n}\n/**\n * Moves nodes in given range to given target position. Only {@link module:engine/model/range~Range#isFlat flat} ranges are accepted.\n *\n * @internal\n * @param sourceRange Range containing nodes to move.\n * @param targetPosition Position to which nodes should be moved.\n * @returns Range containing moved nodes.\n */\nexport function _move(sourceRange, targetPosition) {\n    if (!sourceRange.isFlat) {\n        /**\n         * Trying to move a range which starts and ends in different element.\n         *\n         * @error operation-utils-move-range-not-flat\n         */\n        throw new CKEditorError('operation-utils-move-range-not-flat', this);\n    }\n    const nodes = _remove(sourceRange);\n    // We have to fix `targetPosition` because model changed after nodes from `sourceRange` got removed and\n    // that change might have an impact on `targetPosition`.\n    targetPosition = targetPosition._getTransformedByDeletion(sourceRange.start, sourceRange.end.offset - sourceRange.start.offset);\n    return _insert(targetPosition, nodes);\n}\n/**\n * Sets given attribute on nodes in given range. The attributes are only set on top-level nodes of the range, not on its children.\n *\n * @internal\n * @param range Range containing nodes that should have the attribute set. Must be a flat range.\n * @param key Key of attribute to set.\n * @param value Attribute value.\n */\nexport function _setAttribute(range, key, value) {\n    // Range might start or end in text nodes, so we have to split them.\n    _splitNodeAtPosition(range.start);\n    _splitNodeAtPosition(range.end);\n    // Iterate over all items in the range.\n    for (const item of range.getItems({ shallow: true })) {\n        // Iterator will return `TextProxy` instances but we know that those text proxies will\n        // always represent full text nodes (this is guaranteed thanks to splitting we did before).\n        // So, we can operate on those text proxies' text nodes.\n        const node = item.is('$textProxy') ? item.textNode : item;\n        if (value !== null) {\n            node._setAttribute(key, value);\n        }\n        else {\n            node._removeAttribute(key);\n        }\n        // After attributes changing it may happen that some text nodes can be merged. Try to merge with previous node.\n        _mergeNodesAtIndex(node.parent, node.index);\n    }\n    // Try to merge last changed node with it's previous sibling (not covered by the loop above).\n    _mergeNodesAtIndex(range.end.parent, range.end.index);\n}\n/**\n * Normalizes given object or an array of objects to an array of {@link module:engine/model/node~Node nodes}. See\n * {@link ~NodeSet NodeSet} for details on how normalization is performed.\n *\n * @internal\n * @param nodes Objects to normalize.\n * @returns Normalized nodes.\n */\nexport function _normalizeNodes(nodes) {\n    const normalized = [];\n    function convert(nodes) {\n        if (typeof nodes == 'string') {\n            normalized.push(new Text(nodes));\n        }\n        else if (nodes instanceof TextProxy) {\n            normalized.push(new Text(nodes.data, nodes.getAttributes()));\n        }\n        else if (nodes instanceof Node) {\n            normalized.push(nodes);\n        }\n        else if (isIterable(nodes)) {\n            for (const node of nodes) {\n                convert(node);\n            }\n        }\n        else {\n            // Skip unrecognized type.\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            const unreachable = nodes;\n        }\n    }\n    convert(nodes);\n    // Merge text nodes.\n    for (let i = 1; i < normalized.length; i++) {\n        const node = normalized[i];\n        const prev = normalized[i - 1];\n        if (node instanceof Text && prev instanceof Text && _haveSameAttributes(node, prev)) {\n            // Doing this instead changing `prev.data` because `data` is readonly.\n            normalized.splice(i - 1, 2, new Text(prev.data + node.data, prev.getAttributes()));\n            i--;\n        }\n    }\n    return normalized;\n}\n/**\n * Checks if nodes before and after given index in given element are {@link module:engine/model/text~Text text nodes} and\n * merges them into one node if they have same attributes.\n *\n * Merging is done by removing two text nodes and inserting a new text node containing data from both merged text nodes.\n *\n * @param element Parent element of nodes to merge.\n * @param index Index between nodes to merge.\n */\nfunction _mergeNodesAtIndex(element, index) {\n    const nodeBefore = element.getChild(index - 1);\n    const nodeAfter = element.getChild(index);\n    // Check if both of those nodes are text objects with same attributes.\n    if (nodeBefore && nodeAfter && nodeBefore.is('$text') && nodeAfter.is('$text') && _haveSameAttributes(nodeBefore, nodeAfter)) {\n        // Append text of text node after index to the before one.\n        const mergedNode = new Text(nodeBefore.data + nodeAfter.data, nodeBefore.getAttributes());\n        // Remove separate text nodes.\n        element._removeChildren(index - 1, 2);\n        // Insert merged text node.\n        element._insertChild(index - 1, mergedNode);\n    }\n}\n/**\n * Checks if given position is in a text node, and if so, splits the text node in two text nodes, each of them\n * containing a part of original text node.\n *\n * @param position Position at which node should be split.\n */\nfunction _splitNodeAtPosition(position) {\n    const textNode = position.textNode;\n    const element = position.parent;\n    if (textNode) {\n        const offsetDiff = position.offset - textNode.startOffset;\n        const index = textNode.index;\n        element._removeChildren(index, 1);\n        const firstPart = new Text(textNode.data.substr(0, offsetDiff), textNode.getAttributes());\n        const secondPart = new Text(textNode.data.substr(offsetDiff), textNode.getAttributes());\n        element._insertChild(index, [firstPart, secondPart]);\n    }\n}\n/**\n * Checks whether two given nodes have same attributes.\n *\n * @param nodeA Node to check.\n * @param nodeB Node to check.\n * @returns `true` if nodes have same attributes, `false` otherwise.\n */\nfunction _haveSameAttributes(nodeA, nodeB) {\n    const iteratorA = nodeA.getAttributes();\n    const iteratorB = nodeB.getAttributes();\n    for (const attr of iteratorA) {\n        if (attr[1] !== nodeB.getAttribute(attr[0])) {\n            return false;\n        }\n        iteratorB.next();\n    }\n    return iteratorB.next().done;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/moveoperation\n */\nimport Operation from './operation.js';\nimport Position from '../position.js';\nimport Range from '../range.js';\nimport { _move } from './utils.js';\nimport { CKEditorError, compareArrays } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_ENGINE // const ModelRange = require( '../range' ).default;\n/**\n * Operation to move a range of {@link module:engine/model/item~Item model items}\n * to given {@link module:engine/model/position~Position target position}.\n */\nexport default class MoveOperation extends Operation {\n    /**\n     * Creates a move operation.\n     *\n     * @param sourcePosition Position before the first {@link module:engine/model/item~Item model item} to move.\n     * @param howMany Offset size of moved range. Moved range will start from `sourcePosition` and end at\n     * `sourcePosition` with offset shifted by `howMany`.\n     * @param targetPosition Position at which moved nodes will be inserted.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(sourcePosition, howMany, targetPosition, baseVersion) {\n        super(baseVersion);\n        this.sourcePosition = sourcePosition.clone();\n        // `'toNext'` because `sourcePosition` is a bit like a start of the moved range.\n        this.sourcePosition.stickiness = 'toNext';\n        this.howMany = howMany;\n        this.targetPosition = targetPosition.clone();\n        this.targetPosition.stickiness = 'toNone';\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        if (this.targetPosition.root.rootName == '$graveyard') {\n            return 'remove';\n        }\n        else if (this.sourcePosition.root.rootName == '$graveyard') {\n            return 'reinsert';\n        }\n        return 'move';\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return [\n            Range._createFromPositionAndShift(this.sourcePosition, this.howMany),\n            Range._createFromPositionAndShift(this.targetPosition, 0)\n        ];\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     */\n    clone() {\n        return new MoveOperation(this.sourcePosition, this.howMany, this.targetPosition, this.baseVersion);\n    }\n    /**\n     * Returns the start position of the moved range after it got moved. This may be different than\n     * {@link module:engine/model/operation/moveoperation~MoveOperation#targetPosition} in some cases, i.e. when a range is moved\n     * inside the same parent but {@link module:engine/model/operation/moveoperation~MoveOperation#targetPosition targetPosition}\n     * is after {@link module:engine/model/operation/moveoperation~MoveOperation#sourcePosition sourcePosition}.\n     *\n     * ```\n     *  vv              vv\n     * abcdefg ===> adefbcg\n     *      ^          ^\n     *      targetPos  movedRangeStart\n     *      offset 6   offset 4\n     *```\n     */\n    getMovedRangeStart() {\n        return this.targetPosition._getTransformedByDeletion(this.sourcePosition, this.howMany);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        const newTargetPosition = this.sourcePosition._getTransformedByInsertion(this.targetPosition, this.howMany);\n        return new MoveOperation(this.getMovedRangeStart(), this.howMany, newTargetPosition, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        const sourceElement = this.sourcePosition.parent;\n        const targetElement = this.targetPosition.parent;\n        const sourceOffset = this.sourcePosition.offset;\n        const targetOffset = this.targetPosition.offset;\n        // Validate whether move operation has correct parameters.\n        // Validation is pretty complex but move operation is one of the core ways to manipulate the document state.\n        // We expect that many errors might be connected with one of scenarios described below.\n        if (sourceOffset + this.howMany > sourceElement.maxOffset) {\n            /**\n             * The nodes which should be moved do not exist.\n             *\n             * @error move-operation-nodes-do-not-exist\n             */\n            throw new CKEditorError('move-operation-nodes-do-not-exist', this);\n        }\n        else if (sourceElement === targetElement && sourceOffset < targetOffset && targetOffset < sourceOffset + this.howMany) {\n            /**\n             * Trying to move a range of nodes into the middle of that range.\n             *\n             * @error move-operation-range-into-itself\n             */\n            throw new CKEditorError('move-operation-range-into-itself', this);\n        }\n        else if (this.sourcePosition.root == this.targetPosition.root) {\n            if (compareArrays(this.sourcePosition.getParentPath(), this.targetPosition.getParentPath()) == 'prefix') {\n                const i = this.sourcePosition.path.length - 1;\n                if (this.targetPosition.path[i] >= sourceOffset && this.targetPosition.path[i] < sourceOffset + this.howMany) {\n                    /**\n                     * Trying to move a range of nodes into one of nodes from that range.\n                     *\n                     * @error move-operation-node-into-itself\n                     */\n                    throw new CKEditorError('move-operation-node-into-itself', this);\n                }\n            }\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        _move(Range._createFromPositionAndShift(this.sourcePosition, this.howMany), this.targetPosition);\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.sourcePosition = this.sourcePosition.toJSON();\n        json.targetPosition = this.targetPosition.toJSON();\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'MoveOperation';\n    }\n    /**\n     * Creates `MoveOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        const sourcePosition = Position.fromJSON(json.sourcePosition, document);\n        const targetPosition = Position.fromJSON(json.targetPosition, document);\n        return new this(sourcePosition, json.howMany, targetPosition, json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/insertoperation\n */\nimport Operation from './operation.js';\nimport Position from '../position.js';\nimport NodeList from '../nodelist.js';\nimport MoveOperation from './moveoperation.js';\nimport { _insert, _normalizeNodes } from './utils.js';\nimport Text from '../text.js';\nimport Element from '../element.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Operation to insert one or more nodes at given position in the model.\n */\nexport default class InsertOperation extends Operation {\n    /**\n     * Creates an insert operation.\n     *\n     * @param position Position of insertion.\n     * @param nodes The list of nodes to be inserted.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(position, nodes, baseVersion) {\n        super(baseVersion);\n        this.position = position.clone();\n        this.position.stickiness = 'toNone';\n        this.nodes = new NodeList(_normalizeNodes(nodes));\n        this.shouldReceiveAttributes = false;\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        return 'insert';\n    }\n    /**\n     * Total offset size of inserted nodes.\n     */\n    get howMany() {\n        return this.nodes.maxOffset;\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return this.position.clone();\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     */\n    clone() {\n        const nodes = new NodeList([...this.nodes].map(node => node._clone(true)));\n        const insert = new InsertOperation(this.position, nodes, this.baseVersion);\n        insert.shouldReceiveAttributes = this.shouldReceiveAttributes;\n        return insert;\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        const graveyard = this.position.root.document.graveyard;\n        const gyPosition = new Position(graveyard, [0]);\n        return new MoveOperation(this.position, this.nodes.maxOffset, gyPosition, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        const targetElement = this.position.parent;\n        if (!targetElement || targetElement.maxOffset < this.position.offset) {\n            /**\n             * Insertion position is invalid.\n             *\n             * @error insert-operation-position-invalid\n             */\n            throw new CKEditorError('insert-operation-position-invalid', this);\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        // What happens here is that we want original nodes be passed to writer because we want original nodes\n        // to be inserted to the model. But in InsertOperation, we want to keep those nodes as they were added\n        // to the operation, not modified. For example, text nodes can get merged or cropped while Elements can\n        // get children. It is important that InsertOperation has the copy of original nodes in intact state.\n        const originalNodes = this.nodes;\n        this.nodes = new NodeList([...originalNodes].map(node => node._clone(true)));\n        _insert(this.position, originalNodes);\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.position = this.position.toJSON();\n        json.nodes = this.nodes.toJSON();\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'InsertOperation';\n    }\n    /**\n     * Creates `InsertOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        const children = [];\n        for (const child of json.nodes) {\n            if (child.name) {\n                // If child has name property, it is an Element.\n                children.push(Element.fromJSON(child));\n            }\n            else {\n                // Otherwise, it is a Text node.\n                children.push(Text.fromJSON(child));\n            }\n        }\n        const insert = new InsertOperation(Position.fromJSON(json.position, document), children, json.baseVersion);\n        insert.shouldReceiveAttributes = json.shouldReceiveAttributes;\n        return insert;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/splitoperation\n */\nimport Operation from './operation.js';\nimport MergeOperation from './mergeoperation.js';\nimport Position from '../position.js';\nimport Range from '../range.js';\nimport { _insert, _move } from './utils.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Operation to split {@link module:engine/model/element~Element an element} at given\n * {@link module:engine/model/operation/splitoperation~SplitOperation#splitPosition split position} into two elements,\n * both containing a part of the element's original content.\n */\nexport default class SplitOperation extends Operation {\n    /**\n     * Creates a split operation.\n     *\n     * @param splitPosition Position at which an element should be split.\n     * @param howMany Total offset size of elements that are in the split element after `position`.\n     * @param insertionPosition Position at which the clone of split element (or element from graveyard) will be inserted.\n     * @param graveyardPosition Position in the graveyard root before the element which\n     * should be used as a parent of the nodes after `position`. If it is not set, a copy of the the `position` parent will be used.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(splitPosition, howMany, insertionPosition, graveyardPosition, baseVersion) {\n        super(baseVersion);\n        this.splitPosition = splitPosition.clone();\n        // Keep position sticking to the next node. This way any new content added at the place where the element is split\n        // will be left in the original element.\n        this.splitPosition.stickiness = 'toNext';\n        this.howMany = howMany;\n        this.insertionPosition = insertionPosition;\n        this.graveyardPosition = graveyardPosition ? graveyardPosition.clone() : null;\n        if (this.graveyardPosition) {\n            this.graveyardPosition.stickiness = 'toNext';\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        return 'split';\n    }\n    /**\n     * Position inside the new clone of a split element.\n     *\n     * This is a position where nodes that are after the split position will be moved to.\n     */\n    get moveTargetPosition() {\n        const path = this.insertionPosition.path.slice();\n        path.push(0);\n        return new Position(this.insertionPosition.root, path);\n    }\n    /**\n     * Artificial range that contains all the nodes from the split element that will be moved to the new element.\n     * The range starts at {@link #splitPosition} and ends in the same parent, at `POSITIVE_INFINITY` offset.\n     */\n    get movedRange() {\n        const end = this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);\n        return new Range(this.splitPosition, end);\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        // These could be positions but `Selectable` type only supports `Iterable<Range>`.\n        const ranges = [\n            Range._createFromPositionAndShift(this.splitPosition, 0),\n            Range._createFromPositionAndShift(this.insertionPosition, 0)\n        ];\n        if (this.graveyardPosition) {\n            ranges.push(Range._createFromPositionAndShift(this.graveyardPosition, 0));\n        }\n        return ranges;\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns Clone of this operation.\n     */\n    clone() {\n        return new SplitOperation(this.splitPosition, this.howMany, this.insertionPosition, this.graveyardPosition, this.baseVersion);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        const graveyard = this.splitPosition.root.document.graveyard;\n        const graveyardPosition = new Position(graveyard, [0]);\n        return new MergeOperation(this.moveTargetPosition, this.howMany, this.splitPosition, graveyardPosition, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        const element = this.splitPosition.parent;\n        const offset = this.splitPosition.offset;\n        // Validate whether split operation has correct parameters.\n        if (!element || element.maxOffset < offset) {\n            /**\n             * Split position is invalid.\n             *\n             * @error split-operation-position-invalid\n             */\n            throw new CKEditorError('split-operation-position-invalid', this);\n        }\n        else if (!element.parent) {\n            /**\n             * Cannot split root element.\n             *\n             * @error split-operation-split-in-root\n             */\n            throw new CKEditorError('split-operation-split-in-root', this);\n        }\n        else if (this.howMany != element.maxOffset - this.splitPosition.offset) {\n            /**\n             * Split operation specifies wrong number of nodes to move.\n             *\n             * @error split-operation-how-many-invalid\n             */\n            throw new CKEditorError('split-operation-how-many-invalid', this);\n        }\n        else if (this.graveyardPosition && !this.graveyardPosition.nodeAfter) {\n            /**\n             * Graveyard position invalid.\n             *\n             * @error split-operation-graveyard-position-invalid\n             */\n            throw new CKEditorError('split-operation-graveyard-position-invalid', this);\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        const splitElement = this.splitPosition.parent;\n        if (this.graveyardPosition) {\n            _move(Range._createFromPositionAndShift(this.graveyardPosition, 1), this.insertionPosition);\n        }\n        else {\n            const newElement = splitElement._clone();\n            _insert(this.insertionPosition, newElement);\n        }\n        const sourceRange = new Range(Position._createAt(splitElement, this.splitPosition.offset), Position._createAt(splitElement, splitElement.maxOffset));\n        _move(sourceRange, this.moveTargetPosition);\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.splitPosition = this.splitPosition.toJSON();\n        json.insertionPosition = this.insertionPosition.toJSON();\n        if (this.graveyardPosition) {\n            json.graveyardPosition = this.graveyardPosition.toJSON();\n        }\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'SplitOperation';\n    }\n    /**\n     * Helper function that returns a default insertion position basing on given `splitPosition`. The default insertion\n     * position is after the split element.\n     */\n    static getInsertionPosition(splitPosition) {\n        const path = splitPosition.path.slice(0, -1);\n        path[path.length - 1]++;\n        return new Position(splitPosition.root, path, 'toPrevious');\n    }\n    /**\n     * Creates `SplitOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        const splitPosition = Position.fromJSON(json.splitPosition, document);\n        const insertionPosition = Position.fromJSON(json.insertionPosition, document);\n        const graveyardPosition = json.graveyardPosition ? Position.fromJSON(json.graveyardPosition, document) : null;\n        return new this(splitPosition, json.howMany, insertionPosition, graveyardPosition, json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/mergeoperation\n */\nimport Operation from './operation.js';\nimport SplitOperation from './splitoperation.js';\nimport Position from '../position.js';\nimport Range from '../range.js';\nimport { _move } from './utils.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Operation to merge two {@link module:engine/model/element~Element elements}.\n *\n * The merged element is the parent of {@link ~MergeOperation#sourcePosition} and it is merged into the parent of\n * {@link ~MergeOperation#targetPosition}. All nodes from the merged element are moved to {@link ~MergeOperation#targetPosition}.\n *\n * The merged element is moved to the graveyard at {@link ~MergeOperation#graveyardPosition}.\n */\nexport default class MergeOperation extends Operation {\n    /**\n     * Creates a merge operation.\n     *\n     * @param sourcePosition Position inside the merged element. All nodes from that\n     * element after that position will be moved to {@link #targetPosition}.\n     * @param howMany Summary offset size of nodes which will be moved from the merged element to the new parent.\n     * @param targetPosition Position which the nodes from the merged elements will be moved to.\n     * @param graveyardPosition Position in graveyard to which the merged element will be moved.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(sourcePosition, howMany, targetPosition, graveyardPosition, baseVersion) {\n        super(baseVersion);\n        this.sourcePosition = sourcePosition.clone();\n        // This is, and should always remain, the first position in its parent.\n        this.sourcePosition.stickiness = 'toPrevious';\n        this.howMany = howMany;\n        this.targetPosition = targetPosition.clone();\n        // Except of a rare scenario in `MergeOperation` x `MergeOperation` transformation,\n        // this is, and should always remain, the last position in its parent.\n        this.targetPosition.stickiness = 'toNext';\n        this.graveyardPosition = graveyardPosition.clone();\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        return 'merge';\n    }\n    /**\n     * Position before the merged element (which will be deleted).\n     */\n    get deletionPosition() {\n        return new Position(this.sourcePosition.root, this.sourcePosition.path.slice(0, -1));\n    }\n    /**\n     * Artificial range that contains all the nodes from the merged element that will be moved to {@link ~MergeOperation#sourcePosition}.\n     * The range starts at {@link ~MergeOperation#sourcePosition} and ends in the same parent, at `POSITIVE_INFINITY` offset.\n     */\n    get movedRange() {\n        const end = this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);\n        return new Range(this.sourcePosition, end);\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        const mergedElement = this.sourcePosition.parent;\n        return [\n            Range._createOn(mergedElement),\n            // These could be positions but `Selectable` type only supports `Iterable<Range>`.\n            Range._createFromPositionAndShift(this.targetPosition, 0),\n            Range._createFromPositionAndShift(this.graveyardPosition, 0)\n        ];\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     */\n    clone() {\n        return new MergeOperation(this.sourcePosition, this.howMany, this.targetPosition, this.graveyardPosition, this.baseVersion);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        // Positions in this method are transformed by this merge operation because the split operation bases on\n        // the context after this merge operation happened (because split operation reverses it).\n        // So we need to acknowledge that the merge operation happened and those positions changed a little.\n        const targetPosition = this.targetPosition._getTransformedByMergeOperation(this);\n        const path = this.sourcePosition.path.slice(0, -1);\n        const insertionPosition = new Position(this.sourcePosition.root, path)._getTransformedByMergeOperation(this);\n        return new SplitOperation(targetPosition, this.howMany, insertionPosition, this.graveyardPosition, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        const sourceElement = this.sourcePosition.parent;\n        const targetElement = this.targetPosition.parent;\n        // Validate whether merge operation has correct parameters.\n        if (!sourceElement.parent) {\n            /**\n             * Merge source position is invalid. The element to be merged must have a parent node.\n             *\n             * @error merge-operation-source-position-invalid\n             */\n            throw new CKEditorError('merge-operation-source-position-invalid', this);\n        }\n        else if (!targetElement.parent) {\n            /**\n             * Merge target position is invalid. The element to be merged must have a parent node.\n             *\n             * @error merge-operation-target-position-invalid\n             */\n            throw new CKEditorError('merge-operation-target-position-invalid', this);\n        }\n        else if (this.howMany != sourceElement.maxOffset) {\n            /**\n             * Merge operation specifies wrong number of nodes to move.\n             *\n             * @error merge-operation-how-many-invalid\n             */\n            throw new CKEditorError('merge-operation-how-many-invalid', this);\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        const mergedElement = this.sourcePosition.parent;\n        const sourceRange = Range._createIn(mergedElement);\n        _move(sourceRange, this.targetPosition);\n        _move(Range._createOn(mergedElement), this.graveyardPosition);\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.sourcePosition = json.sourcePosition.toJSON();\n        json.targetPosition = json.targetPosition.toJSON();\n        json.graveyardPosition = json.graveyardPosition.toJSON();\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'MergeOperation';\n    }\n    /**\n     * Creates `MergeOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        const sourcePosition = Position.fromJSON(json.sourcePosition, document);\n        const targetPosition = Position.fromJSON(json.targetPosition, document);\n        const graveyardPosition = Position.fromJSON(json.graveyardPosition, document);\n        return new this(sourcePosition, json.howMany, targetPosition, graveyardPosition, json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/markeroperation\n */\nimport Operation from './operation.js';\nimport Range from '../range.js';\nexport default class MarkerOperation extends Operation {\n    /**\n     * @param name Marker name.\n     * @param oldRange Marker range before the change.\n     * @param newRange Marker range after the change.\n     * @param markers Marker collection on which change should be executed.\n     * @param affectsData Specifies whether the marker operation affects the data produced by the data pipeline\n     * (is persisted in the editor's data).\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(name, oldRange, newRange, markers, affectsData, baseVersion) {\n        super(baseVersion);\n        this.name = name;\n        this.oldRange = oldRange ? oldRange.clone() : null;\n        this.newRange = newRange ? newRange.clone() : null;\n        this.affectsData = affectsData;\n        this._markers = markers;\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        return 'marker';\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        const ranges = [];\n        if (this.oldRange) {\n            ranges.push(this.oldRange.clone());\n        }\n        if (this.newRange) {\n            if (this.oldRange) {\n                ranges.push(...this.newRange.getDifference(this.oldRange));\n            }\n            else {\n                ranges.push(this.newRange.clone());\n            }\n        }\n        return ranges;\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     */\n    clone() {\n        return new MarkerOperation(this.name, this.oldRange, this.newRange, this._markers, this.affectsData, this.baseVersion);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        return new MarkerOperation(this.name, this.newRange, this.oldRange, this._markers, this.affectsData, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        if (this.newRange) {\n            this._markers._set(this.name, this.newRange, true, this.affectsData);\n        }\n        else {\n            this._markers._remove(this.name);\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    toJSON() {\n        const json = super.toJSON();\n        if (this.oldRange) {\n            json.oldRange = this.oldRange.toJSON();\n        }\n        if (this.newRange) {\n            json.newRange = this.newRange.toJSON();\n        }\n        delete json._markers;\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'MarkerOperation';\n    }\n    /**\n     * Creates `MarkerOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        return new MarkerOperation(json.name, json.oldRange ? Range.fromJSON(json.oldRange, document) : null, json.newRange ? Range.fromJSON(json.newRange, document) : null, document.model.markers, json.affectsData, json.baseVersion);\n    }\n}\n", "import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/attributeoperation\n */\nimport Operation from './operation.js';\nimport { _setAttribute } from './utils.js';\nimport Range from '../range.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\nimport { isEqual } from 'lodash-es';\n/**\n * Operation to change nodes' attribute.\n *\n * Using this class you can add, remove or change value of the attribute.\n */\nexport default class AttributeOperation extends Operation {\n    /**\n     * Creates an operation that changes, removes or adds attributes.\n     *\n     * If only `newValue` is set, attribute will be added on a node. Note that all nodes in operation's range must not\n     * have an attribute with the same key as the added attribute.\n     *\n     * If only `oldValue` is set, then attribute with given key will be removed. Note that all nodes in operation's range\n     * must have an attribute with that key added.\n     *\n     * If both `newValue` and `oldValue` are set, then the operation will change the attribute value. Note that all nodes in\n     * operation's ranges must already have an attribute with given key and `oldValue` as value\n     *\n     * @param range Range on which the operation should be applied. Must be a flat range.\n     * @param key Key of an attribute to change or remove.\n     * @param oldValue Old value of the attribute with given key or `null`, if attribute was not set before.\n     * @param newValue New value of the attribute with given key or `null`, if operation should remove attribute.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(range, key, oldValue, newValue, baseVersion) {\n        super(baseVersion);\n        this.range = range.clone();\n        this.key = key;\n        this.oldValue = oldValue === undefined ? null : oldValue;\n        this.newValue = newValue === undefined ? null : newValue;\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        if (this.oldValue === null) {\n            return 'addAttribute';\n        }\n        else if (this.newValue === null) {\n            return 'removeAttribute';\n        }\n        else {\n            return 'changeAttribute';\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return this.range.clone();\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     */\n    clone() {\n        return new AttributeOperation(this.range, this.key, this.oldValue, this.newValue, this.baseVersion);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        return new AttributeOperation(this.range, this.key, this.newValue, this.oldValue, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.range = this.range.toJSON();\n        return json;\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        if (!this.range.isFlat) {\n            /**\n             * The range to change is not flat.\n             *\n             * @error attribute-operation-range-not-flat\n             */\n            throw new CKEditorError('attribute-operation-range-not-flat', this);\n        }\n        for (const item of this.range.getItems({ shallow: true })) {\n            if (this.oldValue !== null && !isEqual(item.getAttribute(this.key), this.oldValue)) {\n                /**\n                 * Changed node has different attribute value than operation's old attribute value.\n                 *\n                 * @error attribute-operation-wrong-old-value\n                 * @param item\n                 * @param key\n                 * @param value\n                 */\n                throw new CKEditorError('attribute-operation-wrong-old-value', this, { item, key: this.key, value: this.oldValue });\n            }\n            if (this.oldValue === null && this.newValue !== null && item.hasAttribute(this.key)) {\n                /**\n                 * The attribute with given key already exists for the given node.\n                 *\n                 * @error attribute-operation-attribute-exists\n                 * @param node\n                 * @param key\n                 */\n                throw new CKEditorError('attribute-operation-attribute-exists', this, { node: item, key: this.key });\n            }\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        // If value to set is same as old value, don't do anything.\n        if (!isEqual(this.oldValue, this.newValue)) {\n            // Execution.\n            _setAttribute(this.range, this.key, this.newValue);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'AttributeOperation';\n    }\n    /**\n     * Creates `AttributeOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        return new AttributeOperation(Range.fromJSON(json.range, document), json.key, json.oldValue, json.newValue, json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/nooperation\n */\nimport Operation from './operation.js';\n/**\n * Operation which is doing nothing (\"empty operation\", \"do-nothing operation\", \"noop\"). This is an operation,\n * which when executed does not change the tree model. It still has some parameters defined for transformation purposes.\n *\n * In most cases this operation is a result of transforming operations. When transformation returns\n * {@link module:engine/model/operation/nooperation~NoOperation} it means that changes done by the transformed operation\n * have already been applied.\n */\nexport default class NoOperation extends Operation {\n    get type() {\n        return 'noop';\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return null;\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     */\n    clone() {\n        return new NoOperation(this.baseVersion);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        return new NoOperation(this.baseVersion + 1);\n    }\n    /** @internal */\n    _execute() {\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'NoOperation';\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/renameoperation\n */\nimport Operation from './operation.js';\nimport Element from '../element.js';\nimport Position from '../position.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Operation to change element's name.\n *\n * Using this class you can change element's name.\n */\nexport default class RenameOperation extends Operation {\n    /**\n     * Creates an operation that changes element's name.\n     *\n     * @param position Position before an element to change.\n     * @param oldName Current name of the element.\n     * @param newName New name for the element.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(position, oldName, newName, baseVersion) {\n        super(baseVersion);\n        this.position = position;\n        // This position sticks to the next node because it is a position before the node that we want to change.\n        this.position.stickiness = 'toNext';\n        this.oldName = oldName;\n        this.newName = newName;\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        return 'rename';\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return this.position.nodeAfter;\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns Clone of this operation.\n     */\n    clone() {\n        return new RenameOperation(this.position.clone(), this.oldName, this.newName, this.baseVersion);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        return new RenameOperation(this.position.clone(), this.newName, this.oldName, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        const element = this.position.nodeAfter;\n        if (!(element instanceof Element)) {\n            /**\n             * Given position is invalid or node after it is not instance of Element.\n             *\n             * @error rename-operation-wrong-position\n             */\n            throw new CKEditorError('rename-operation-wrong-position', this);\n        }\n        else if (element.name !== this.oldName) {\n            /**\n             * Element to change has different name than operation's old name.\n             *\n             * @error rename-operation-wrong-name\n             */\n            throw new CKEditorError('rename-operation-wrong-name', this);\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        const element = this.position.nodeAfter;\n        element.name = this.newName;\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.position = this.position.toJSON();\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'RenameOperation';\n    }\n    /**\n     * Creates `RenameOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        return new RenameOperation(Position.fromJSON(json.position, document), json.oldName, json.newName, json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/rootattributeoperation\n */\nimport Operation from './operation.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Operation to change root element's attribute. Using this class you can add, remove or change value of the attribute.\n *\n * This operation is needed, because root elements can't be changed through\n * {@link module:engine/model/operation/attributeoperation~AttributeOperation}.\n * It is because {@link module:engine/model/operation/attributeoperation~AttributeOperation}\n * requires a range to change and root element can't\n * be a part of range because every {@link module:engine/model/position~Position} has to be inside a root.\n * {@link module:engine/model/position~Position} can't be created before a root element.\n */\nexport default class RootAttributeOperation extends Operation {\n    /**\n     * Creates an operation that changes, removes or adds attributes on root element.\n     *\n     * @see module:engine/model/operation/attributeoperation~AttributeOperation\n     * @param root Root element to change.\n     * @param key Key of an attribute to change or remove.\n     * @param oldValue Old value of the attribute with given key or `null`, if attribute was not set before.\n     * @param newValue New value of the attribute with given key or `null`, if operation should remove attribute.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n     * can be applied or `null` if the operation operates on detached (non-document) tree.\n     */\n    constructor(root, key, oldValue, newValue, baseVersion) {\n        super(baseVersion);\n        this.root = root;\n        this.key = key;\n        this.oldValue = oldValue === undefined ? null : oldValue;\n        this.newValue = newValue === undefined ? null : newValue;\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        if (this.oldValue === null) {\n            return 'addRootAttribute';\n        }\n        else if (this.newValue === null) {\n            return 'removeRootAttribute';\n        }\n        else {\n            return 'changeRootAttribute';\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return this.root;\n    }\n    /**\n     * Creates and returns an operation that has the same parameters as this operation.\n     *\n     * @returns Clone of this operation.\n     */\n    clone() {\n        return new RootAttributeOperation(this.root, this.key, this.oldValue, this.newValue, this.baseVersion);\n    }\n    /**\n     * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n     */\n    getReversed() {\n        return new RootAttributeOperation(this.root, this.key, this.newValue, this.oldValue, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        if (this.root != this.root.root || this.root.is('documentFragment')) {\n            /**\n             * The element to change is not a root element.\n             *\n             * @error rootattribute-operation-not-a-root\n             * @param root\n             * @param key\n             * @param value\n             */\n            throw new CKEditorError('rootattribute-operation-not-a-root', this, { root: this.root, key: this.key });\n        }\n        if (this.oldValue !== null && this.root.getAttribute(this.key) !== this.oldValue) {\n            /**\n             * The attribute which should be removed does not exist for the given node.\n             *\n             * @error rootattribute-operation-wrong-old-value\n             * @param root\n             * @param key\n             * @param value\n             */\n            throw new CKEditorError('rootattribute-operation-wrong-old-value', this, { root: this.root, key: this.key });\n        }\n        if (this.oldValue === null && this.newValue !== null && this.root.hasAttribute(this.key)) {\n            /**\n             * The attribute with given key already exists for the given node.\n             *\n             * @error rootattribute-operation-attribute-exists\n             * @param root\n             * @param key\n             */\n            throw new CKEditorError('rootattribute-operation-attribute-exists', this, { root: this.root, key: this.key });\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        if (this.newValue !== null) {\n            this.root._setAttribute(this.key, this.newValue);\n        }\n        else {\n            this.root._removeAttribute(this.key);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.root = this.root.toJSON();\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'RootAttributeOperation';\n    }\n    /**\n     * Creates `RootAttributeOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        if (!document.getRoot(json.root)) {\n            /**\n             * Cannot create RootAttributeOperation for document. Root with specified name does not exist.\n             *\n             * @error rootattribute-operation-fromjson-no-root\n             * @param rootName\n             */\n            throw new CKEditorError('rootattribute-operation-fromjson-no-root', this, { rootName: json.root });\n        }\n        return new RootAttributeOperation(document.getRoot(json.root), json.key, json.oldValue, json.newValue, json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/rootoperation\n */\nimport Operation from './operation.js';\n/**\n * Operation that creates (or attaches) or detaches a root element.\n */\nexport default class RootOperation extends Operation {\n    /**\n     * Creates an operation that creates or removes a root element.\n     *\n     * @param rootName Root name to create or detach.\n     * @param elementName Root element name.\n     * @param isAdd Specifies whether the operation adds (`true`) or detaches the root (`false`).\n     * @param document Document which owns the root.\n     * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation can be applied.\n     */\n    constructor(rootName, elementName, isAdd, document, baseVersion) {\n        super(baseVersion);\n        this.rootName = rootName;\n        this.elementName = elementName;\n        this.isAdd = isAdd;\n        this._document = document;\n        // Make sure that the root exists ASAP, this is important for RTC.\n        // If the root was dynamically added, there will be more operations that operate on/in this root.\n        // These operations will require root element instance (in operation property or in position instance).\n        // If the root is not created ahead of time, instantiating such operations may fail.\n        if (!this._document.getRoot(this.rootName)) {\n            const root = this._document.createRoot(this.elementName, this.rootName);\n            root._isAttached = false;\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        return this.isAdd ? 'addRoot' : 'detachRoot';\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return this._document.getRoot(this.rootName);\n    }\n    /**\n     * @inheritDoc\n     */\n    clone() {\n        return new RootOperation(this.rootName, this.elementName, this.isAdd, this._document, this.baseVersion);\n    }\n    /**\n     * @inheritDoc\n     */\n    getReversed() {\n        return new RootOperation(this.rootName, this.elementName, !this.isAdd, this._document, this.baseVersion + 1);\n    }\n    /**\n     * @inheritDoc\n     */\n    _execute() {\n        this._document.getRoot(this.rootName)._isAttached = this.isAdd;\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        delete json._document;\n        return json;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'RootOperation';\n    }\n    /**\n     * Creates `RootOperation` object from deserialized object, i.e. from parsed JSON string.\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        return new RootOperation(json.rootName, json.elementName, json.isAdd, document, json.baseVersion);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/operationfactory\n */\nimport AttributeOperation from './attributeoperation.js';\nimport InsertOperation from './insertoperation.js';\nimport MarkerOperation from './markeroperation.js';\nimport MoveOperation from './moveoperation.js';\nimport NoOperation from './nooperation.js';\nimport Operation from './operation.js';\nimport RenameOperation from './renameoperation.js';\nimport RootAttributeOperation from './rootattributeoperation.js';\nimport RootOperation from './rootoperation.js';\nimport SplitOperation from './splitoperation.js';\nimport MergeOperation from './mergeoperation.js';\nconst operations = {};\noperations[AttributeOperation.className] = AttributeOperation;\noperations[InsertOperation.className] = InsertOperation;\noperations[MarkerOperation.className] = MarkerOperation;\noperations[MoveOperation.className] = MoveOperation;\noperations[NoOperation.className] = NoOperation;\noperations[Operation.className] = Operation;\noperations[RenameOperation.className] = RenameOperation;\noperations[RootAttributeOperation.className] = RootAttributeOperation;\noperations[RootOperation.className] = RootOperation;\noperations[SplitOperation.className] = SplitOperation;\noperations[MergeOperation.className] = MergeOperation;\n/**\n * A factory class for creating operations.\n */\nexport default class OperationFactory {\n    /**\n     * Creates an operation instance from a JSON object (parsed JSON string).\n     *\n     * @param json Deserialized JSON object.\n     * @param document Document on which this operation will be applied.\n     */\n    static fromJSON(json, document) {\n        return operations[json.__className].fromJSON(json, document);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/transform\n */\nimport InsertOperation from './insertoperation.js';\nimport AttributeOperation from './attributeoperation.js';\nimport RenameOperation from './renameoperation.js';\nimport MarkerOperation from './markeroperation.js';\nimport MoveOperation from './moveoperation.js';\nimport RootAttributeOperation from './rootattributeoperation.js';\nimport RootOperation from './rootoperation.js';\nimport MergeOperation from './mergeoperation.js';\nimport SplitOperation from './splitoperation.js';\nimport NoOperation from './nooperation.js';\nimport Range from '../range.js';\nimport Position from '../position.js';\nimport { compareArrays } from '@ckeditor/ckeditor5-utils';\nconst transformations = new Map();\n/**\n * Sets a transformation function to be be used to transform instances of class `OperationA` by instances of class `OperationB`.\n *\n * The `transformationFunction` is passed three parameters:\n *\n * * `a` - operation to be transformed, an instance of `OperationA`,\n * * `b` - operation to be transformed by, an instance of `OperationB`,\n * * {@link module:engine/model/operation/transform~TransformationContext `context`} - object with additional information about\n * transformation context.\n *\n * The `transformationFunction` should return transformation result, which is an array with one or multiple\n * {@link module:engine/model/operation/operation~Operation operation} instances.\n *\n * @param transformationFunction Function to use for transforming.\n */\nfunction setTransformation(OperationA, OperationB, transformationFunction) {\n    let aGroup = transformations.get(OperationA);\n    if (!aGroup) {\n        aGroup = new Map();\n        transformations.set(OperationA, aGroup);\n    }\n    aGroup.set(OperationB, transformationFunction);\n}\n/**\n * Returns a previously set transformation function for transforming an instance of `OperationA` by an instance of `OperationB`.\n *\n * If no transformation was set for given pair of operations, {@link module:engine/model/operation/transform~noUpdateTransformation}\n * is returned. This means that if no transformation was set, the `OperationA` instance will not change when transformed\n * by the `OperationB` instance.\n *\n * @returns Function set to transform an instance of `OperationA` by an instance of `OperationB`.\n */\nfunction getTransformation(OperationA, OperationB) {\n    const aGroup = transformations.get(OperationA);\n    if (aGroup && aGroup.has(OperationB)) {\n        return aGroup.get(OperationB);\n    }\n    return noUpdateTransformation;\n}\n/**\n * A transformation function that only clones operation to transform, without changing it.\n */\nfunction noUpdateTransformation(a) {\n    return [a];\n}\n/**\n * Transforms operation `a` by operation `b`.\n *\n * @param a Operation to be transformed.\n * @param b Operation to transform by.\n * @param context Transformation context for this transformation.\n * @returns Transformation result.\n */\nexport function transform(a, b, context = {}) {\n    const transformationFunction = getTransformation(a.constructor, b.constructor);\n    /* eslint-disable no-useless-catch */\n    try {\n        a = a.clone();\n        return transformationFunction(a, b, context);\n    }\n    catch (e) {\n        // @if CK_DEBUG // console.warn( 'Error during operation transformation!', e.message );\n        // @if CK_DEBUG // console.warn( 'Transformed operation', a );\n        // @if CK_DEBUG // console.warn( 'Operation transformed by', b );\n        // @if CK_DEBUG // console.warn( 'context.aIsStrong', context.aIsStrong );\n        // @if CK_DEBUG // console.warn( 'context.aWasUndone', context.aWasUndone );\n        // @if CK_DEBUG // console.warn( 'context.bWasUndone', context.bWasUndone );\n        // @if CK_DEBUG // console.warn( 'context.abRelation', context.abRelation );\n        // @if CK_DEBUG // console.warn( 'context.baRelation', context.baRelation );\n        throw e;\n    }\n    /* eslint-enable no-useless-catch */\n}\n/**\n * Performs a transformation of two sets of operations - `operationsA` and `operationsB`. The transformation is two-way -\n * both transformed `operationsA` and transformed `operationsB` are returned.\n *\n * Note, that the first operation in each set should base on the same document state (\n * {@link module:engine/model/document~Document#version document version}).\n *\n * It is assumed that `operationsA` are \"more important\" during conflict resolution between two operations.\n *\n * New copies of both passed arrays and operations inside them are returned. Passed arguments are not altered.\n *\n * Base versions of the transformed operations sets are updated accordingly. For example, assume that base versions are `4`\n * and there are `3` operations in `operationsA` and `5` operations in `operationsB`. Then:\n *\n * * transformed `operationsA` will start from base version `9` (`4` base version + `5` operations B),\n * * transformed `operationsB` will start from base version `7` (`4` base version + `3` operations A).\n *\n * If no operation was broken into two during transformation, then both sets will end up with an operation that bases on version `11`:\n *\n * * transformed `operationsA` start from `9` and there are `3` of them, so the last will have `baseVersion` equal to `11`,\n * * transformed `operationsB` start from `7` and there are `5` of them, so the last will have `baseVersion` equal to `11`.\n *\n * @param operationsA\n * @param operationsB\n * @param options Additional transformation options.\n * @param options.document Document which the operations change.\n * @param options.useRelations Whether during transformation relations should be used (used during undo for better conflict resolution).\n * @param options.padWithNoOps Whether additional {@link module:engine/model/operation/nooperation~NoOperation}s\n * should be added to the transformation results to force the same last base version for both transformed sets (in case\n * if some operations got broken into multiple operations during transformation).\n * @param options.forceWeakRemove If set to `false`, remove operation will be always stronger than move operation,\n * so the removed nodes won't end up back in the document root. When set to `true`, context data will be used.\n * @returns Transformation result.\n */\nexport function transformSets(operationsA, operationsB, options) {\n    // Create new arrays so the originally passed arguments are not changed.\n    // No need to clone operations, they are cloned as they are transformed.\n    operationsA = operationsA.slice();\n    operationsB = operationsB.slice();\n    const contextFactory = new ContextFactory(options.document, options.useRelations, options.forceWeakRemove);\n    contextFactory.setOriginalOperations(operationsA);\n    contextFactory.setOriginalOperations(operationsB);\n    const originalOperations = contextFactory.originalOperations;\n    // If one of sets is empty there is simply nothing to transform, so return sets as they are.\n    if (operationsA.length == 0 || operationsB.length == 0) {\n        return { operationsA, operationsB, originalOperations };\n    }\n    //\n    // Following is a description of transformation process:\n    //\n    // There are `operationsA` and `operationsB` to be transformed, both by both.\n    //\n    // So, suppose we have sets of two operations each: `operationsA` = `[ a1, a2 ]`, `operationsB` = `[ b1, b2 ]`.\n    //\n    // Remember, that we can only transform operations that base on the same context. We assert that `a1` and `b1` base on\n    // the same context and we transform them. Then, we get `a1'` and `b1'`. `a2` bases on a context with `a1` -- `a2`\n    // is an operation that followed `a1`. Similarly, `b2` bases on a context with `b1`.\n    //\n    // However, since `a1'` is a result of transformation by `b1`, `a1'` now also has a context with `b1`. This means that\n    // we can safely transform `a1'` by `b2`. As we finish transforming `a1`, we also transformed all `operationsB`.\n    // All `operationsB` also have context including `a1`. Now, we can properly transform `a2` by those operations.\n    //\n    // The transformation process can be visualized on a transformation diagram (\"diamond diagram\"):\n    //\n    //          [the initial state]\n    //         [common for a1 and b1]\n    //\n    //                   *\n    //                  / \\\n    //                 /   \\\n    //               b1     a1\n    //               /       \\\n    //              /         \\\n    //             *           *\n    //            / \\         / \\\n    //           /   \\       /   \\\n    //         b2    a1'   b1'    a2\n    //         /       \\   /       \\\n    //        /         \\ /         \\\n    //       *           *           *\n    //        \\         / \\         /\n    //         \\       /   \\       /\n    //        a1''   b2'   a2'   b1''\n    //           \\   /       \\   /\n    //            \\ /         \\ /\n    //             *           *\n    //              \\         /\n    //               \\       /\n    //              a2''   b2''\n    //                 \\   /\n    //                  \\ /\n    //                   *\n    //\n    //           [the final state]\n    //\n    // The final state can be reached from the initial state by applying `a1`, `a2`, `b1''` and `b2''`, as well as by\n    // applying `b1`, `b2`, `a1''`, `a2''`. Note how the operations get to a proper common state before each pair is\n    // transformed.\n    //\n    // Another thing to consider is that an operation during transformation can be broken into multiple operations.\n    // Suppose that `a1` * `b1` = `[ a11', a12' ]` (instead of `a1'` that we considered previously).\n    //\n    // In that case, we leave `a12'` for later and we continue transforming `a11'` until it is transformed by all `operationsB`\n    // (in our case it is just `b2`). At this point, `b1` is transformed by \"whole\" `a1`, while `b2` is only transformed\n    // by `a11'`. Similarly, `a12'` is only transformed by `b1`. This leads to a conclusion that we need to start transforming `a12'`\n    // from the moment just after it was broken. So, `a12'` is transformed by `b2`. Now, \"the whole\" `a1` is transformed\n    // by `operationsB`, while all `operationsB` are transformed by \"the whole\" `a1`. This means that we can continue with\n    // following `operationsA` (in our case it is just `a2`).\n    //\n    // Of course, also `operationsB` can be broken. However, since we focus on transforming operation `a` to the end,\n    // the only thing to do is to store both pieces of operation `b`, so that the next transformed operation `a` will\n    // be transformed by both of them.\n    //\n    //                       *\n    //                      / \\\n    //                     /   \\\n    //                    /     \\\n    //                  b1       a1\n    //                  /         \\\n    //                 /           \\\n    //                /             \\\n    //               *               *\n    //              / \\             / \\\n    //             /  a11'         /   \\\n    //            /     \\         /     \\\n    //          b2       *      b1'      a2\n    //          /       / \\     /         \\\n    //         /       /  a12' /           \\\n    //        /       /     \\ /             \\\n    //       *       b2'     *               *\n    //        \\     /       / \\             /\n    //       a11'' /     b21'' \\           /\n    //          \\ /       /     \\         /\n    //           *       *      a2'     b1''\n    //            \\     / \\       \\     /\n    //          a12'' b22''\\       \\   /\n    //              \\ /     \\       \\ /\n    //               *      a2''     *\n    //                \\       \\     /\n    //                 \\       \\  b21'''\n    //                  \\       \\ /\n    //                a2'''      *\n    //                    \\     /\n    //                     \\  b22'''\n    //                      \\ /\n    //                       *\n    //\n    // Note, how `a1` is broken and transformed into `a11'` and `a12'`, while `b2'` got broken and transformed into `b21''` and `b22''`.\n    //\n    // Having all that on mind, here is an outline for the transformation process algorithm:\n    //\n    // 1. We have `operationsA` and `operationsB` array, which we dynamically update as the transformation process goes.\n    //\n    // 2. We take next (or first) operation from `operationsA` and check from which operation `b` we need to start transforming it.\n    // All original `operationsA` are set to be transformed starting from the first operation `b`.\n    //\n    // 3. We take operations from `operationsB`, one by one, starting from the correct one, and transform operation `a`\n    // by operation `b` (and vice versa). We update `operationsA` and `operationsB` by replacing the original operations\n    // with the transformation results.\n    //\n    // 4. If operation is broken into multiple operations, we save all the new operations in the place of the\n    // original operation.\n    //\n    // 5. Additionally, if operation `a` was broken, for the \"new\" operation, we remember from which operation `b` it should\n    // be transformed by.\n    //\n    // 6. We continue transforming \"current\" operation `a` until it is transformed by all `operationsB`. Then, go to 2.\n    // unless the last operation `a` was transformed.\n    //\n    // The actual implementation of the above algorithm is slightly different, as only one loop (while) is used.\n    // The difference is that we have \"current\" `a` operation to transform and we store the index of the next `b` operation\n    // to transform by. Each loop operates on two indexes then: index pointing to currently processed `a` operation and\n    // index pointing to next `b` operation. Each loop is just one `a * b` + `b * a` transformation. After each loop\n    // operation `b` index is updated. If all `b` operations were visited for the current `a` operation, we change\n    // current `a` operation index to the next one.\n    //\n    // For each operation `a`, keeps information what is the index in `operationsB` from which the transformation should start.\n    const nextTransformIndex = new WeakMap();\n    // For all the original `operationsA`, set that they should be transformed starting from the first of `operationsB`.\n    for (const op of operationsA) {\n        nextTransformIndex.set(op, 0);\n    }\n    // Additional data that is used for some postprocessing after the main transformation process is done.\n    const data = {\n        nextBaseVersionA: operationsA[operationsA.length - 1].baseVersion + 1,\n        nextBaseVersionB: operationsB[operationsB.length - 1].baseVersion + 1,\n        originalOperationsACount: operationsA.length,\n        originalOperationsBCount: operationsB.length\n    };\n    // Index of currently transformed operation `a`.\n    let i = 0;\n    // While not all `operationsA` are transformed...\n    while (i < operationsA.length) {\n        // Get \"current\" operation `a`.\n        const opA = operationsA[i];\n        // For the \"current\" operation `a`, get the index of the next operation `b` to transform by.\n        const indexB = nextTransformIndex.get(opA);\n        // If operation `a` was already transformed by every operation `b`, change \"current\" operation `a` to the next one.\n        if (indexB == operationsB.length) {\n            i++;\n            continue;\n        }\n        const opB = operationsB[indexB];\n        // Transform `a` by `b` and `b` by `a`.\n        const newOpsA = transform(opA, opB, contextFactory.getContext(opA, opB, true));\n        const newOpsB = transform(opB, opA, contextFactory.getContext(opB, opA, false));\n        // As a result we get one or more `newOpsA` and one or more `newOpsB` operations.\n        // Update contextual information about operations.\n        contextFactory.updateRelation(opA, opB);\n        contextFactory.setOriginalOperations(newOpsA, opA);\n        contextFactory.setOriginalOperations(newOpsB, opB);\n        // For new `a` operations, update their index of the next operation `b` to transform them by.\n        //\n        // This is needed even if there was only one result (`a` was not broken) because that information is used\n        // at the beginning of this loop every time.\n        for (const newOpA of newOpsA) {\n            // Acknowledge, that operation `b` also might be broken into multiple operations.\n            //\n            // This is why we raise `indexB` not just by 1. If `newOpsB` are multiple operations, they will be\n            // spliced in the place of `opB`. So we need to change `transformBy` accordingly, so that an operation won't\n            // be transformed by the same operation (part of it) again.\n            nextTransformIndex.set(newOpA, indexB + newOpsB.length);\n        }\n        // Update `operationsA` and `operationsB` with the transformed versions.\n        operationsA.splice(i, 1, ...newOpsA);\n        operationsB.splice(indexB, 1, ...newOpsB);\n    }\n    handlePartialMarkerOperations(operationsA);\n    handlePartialMarkerOperations(operationsB);\n    if (options.padWithNoOps) {\n        // If no-operations padding is enabled, count how many extra `a` and `b` operations were generated.\n        const brokenOperationsACount = operationsA.length - data.originalOperationsACount;\n        const brokenOperationsBCount = operationsB.length - data.originalOperationsBCount;\n        // Then, if that number is not the same, pad `operationsA` or `operationsB` with correct number of no-ops so\n        // that the base versions are equalled.\n        //\n        // Note that only one array will be updated, as only one of those subtractions can be greater than zero.\n        padWithNoOps(operationsA, brokenOperationsBCount - brokenOperationsACount);\n        padWithNoOps(operationsB, brokenOperationsACount - brokenOperationsBCount);\n    }\n    // Finally, update base versions of transformed operations.\n    updateBaseVersions(operationsA, data.nextBaseVersionB);\n    updateBaseVersions(operationsB, data.nextBaseVersionA);\n    return { operationsA, operationsB, originalOperations };\n}\n/**\n * Gathers additional data about operations processed during transformation. Can be used to obtain contextual information\n * about two operations that are about to be transformed. This contextual information can be used for better conflict resolution.\n */\nclass ContextFactory {\n    /**\n     * Creates `ContextFactory` instance.\n     *\n     * @param document Document which the operations change.\n     * @param useRelations Whether during transformation relations should be used (used during undo for\n     * better conflict resolution).\n     * @param forceWeakRemove If set to `false`, remove operation will be always stronger than move operation,\n     * so the removed nodes won't end up back in the document root. When set to `true`, context data will be used.\n     */\n    constructor(document, useRelations, forceWeakRemove = false) {\n        // For each operation that is created during transformation process, we keep a reference to the original operation\n        // which it comes from. The original operation works as a kind of \"identifier\". Every contextual information\n        // gathered during transformation that we want to save for given operation, is actually saved for the original operation.\n        // This way no matter if operation `a` is cloned, then transformed, even breaks, we still have access to the previously\n        // gathered data through original operation reference.\n        this.originalOperations = new Map();\n        // `model.History` instance which information about undone operations will be taken from.\n        this._history = document.history;\n        // Whether additional context should be used.\n        this._useRelations = useRelations;\n        this._forceWeakRemove = !!forceWeakRemove;\n        // Relations is a double-map structure (maps in map) where for two operations we store how those operations were related\n        // to each other. Those relations are evaluated during transformation process. For every transformated pair of operations\n        // we keep relations between them.\n        this._relations = new Map();\n    }\n    /**\n     * Sets \"original operation\" for given operations.\n     *\n     * During transformation process, operations are cloned, then changed, then processed again, sometimes broken into two\n     * or multiple operations. When gathering additional data it is important that all operations can be somehow linked\n     * so a cloned and transformed \"version\" still kept track of the data assigned earlier to it.\n     *\n     * The original operation object will be used as such an universal linking id. Throughout the transformation process\n     * all cloned operations will refer to \"the original operation\" when storing and reading additional data.\n     *\n     * If `takeFrom` is not set, each operation from `operations` array will be assigned itself as \"the original operation\".\n     * This should be used as an initialization step.\n     *\n     * If `takeFrom` is set, each operation from `operations` will be assigned the same original operation as assigned\n     * for `takeFrom` operation. This should be used to update original operations. It should be used in a way that\n     * `operations` are the result of `takeFrom` transformation to ensure proper \"original operation propagation\".\n     */\n    setOriginalOperations(operations, takeFrom = null) {\n        const originalOperation = takeFrom ? this.originalOperations.get(takeFrom) : null;\n        for (const operation of operations) {\n            this.originalOperations.set(operation, originalOperation || operation);\n        }\n    }\n    /**\n     * Saves a relation between operations `opA` and `opB`.\n     *\n     * Relations are then later used to help solve conflicts when operations are transformed.\n     */\n    updateRelation(opA, opB) {\n        // The use of relations is described in a bigger detail in transformation functions.\n        //\n        // In brief, this function, for specified pairs of operation types, checks how positions defined in those operations relate.\n        // Then those relations are saved. For example, for two move operations, it is saved if one of those operations target\n        // position is before the other operation source position. This kind of information gives contextual information when\n        // transformation is used during undo. Similar checks are done for other pairs of operations.\n        //\n        if (opA instanceof MoveOperation) {\n            if (opB instanceof MergeOperation) {\n                if (opA.targetPosition.isEqual(opB.sourcePosition) || opB.movedRange.containsPosition(opA.targetPosition)) {\n                    this._setRelation(opA, opB, 'insertAtSource');\n                }\n                else if (opA.targetPosition.isEqual(opB.deletionPosition)) {\n                    this._setRelation(opA, opB, 'insertBetween');\n                }\n                else if (opA.targetPosition.isAfter(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'moveTargetAfter');\n                }\n            }\n            else if (opB instanceof MoveOperation) {\n                if (opA.targetPosition.isEqual(opB.sourcePosition) || opA.targetPosition.isBefore(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'insertBefore');\n                }\n                else {\n                    this._setRelation(opA, opB, 'insertAfter');\n                }\n            }\n        }\n        else if (opA instanceof SplitOperation) {\n            if (opB instanceof MergeOperation) {\n                if (opA.splitPosition.isBefore(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'splitBefore');\n                }\n            }\n            else if (opB instanceof MoveOperation) {\n                if (opA.splitPosition.isEqual(opB.sourcePosition) || opA.splitPosition.isBefore(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'splitBefore');\n                }\n                else {\n                    const range = Range._createFromPositionAndShift(opB.sourcePosition, opB.howMany);\n                    if (opA.splitPosition.hasSameParentAs(opB.sourcePosition) && range.containsPosition(opA.splitPosition)) {\n                        // TODO: Potential bug -- we are saving offset value directly and it is not later updated during OT.\n                        // TODO: This may cause a bug it here was an non-undone operation that may have impacted this offset.\n                        // TODO: Similar error was with MarkerOperation relations, where full path was saved and never updated.\n                        const howMany = range.end.offset - opA.splitPosition.offset;\n                        const offset = opA.splitPosition.offset - range.start.offset;\n                        this._setRelation(opA, opB, { howMany, offset });\n                    }\n                }\n            }\n        }\n        else if (opA instanceof MergeOperation) {\n            if (opB instanceof MergeOperation) {\n                if (!opA.targetPosition.isEqual(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'mergeTargetNotMoved');\n                }\n                if (opA.sourcePosition.isEqual(opB.targetPosition)) {\n                    this._setRelation(opA, opB, 'mergeSourceNotMoved');\n                }\n                if (opA.sourcePosition.isEqual(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'mergeSameElement');\n                }\n            }\n            else if (opB instanceof SplitOperation) {\n                if (opA.sourcePosition.isEqual(opB.splitPosition)) {\n                    this._setRelation(opA, opB, 'splitAtSource');\n                }\n            }\n            else if (opB instanceof MoveOperation && opB.howMany > 0) {\n                if (opA.sourcePosition.isEqual(opB.sourcePosition.getShiftedBy(opB.howMany))) {\n                    this._setRelation(opA, opB, 'mergeSourceAffected');\n                }\n                if (opA.targetPosition.isEqual(opB.sourcePosition)) {\n                    this._setRelation(opA, opB, 'mergeTargetWasBefore');\n                }\n            }\n        }\n        else if (opA instanceof MarkerOperation) {\n            const markerRange = opA.newRange;\n            if (!markerRange) {\n                return;\n            }\n            if (opB instanceof MergeOperation) {\n                const wasInLeftElement = markerRange.start.isEqual(opB.targetPosition);\n                const wasStartBeforeMergedElement = markerRange.start.isEqual(opB.deletionPosition);\n                const wasEndBeforeMergedElement = markerRange.end.isEqual(opB.deletionPosition);\n                const wasInRightElement = markerRange.end.isEqual(opB.sourcePosition);\n                if (wasInLeftElement || wasStartBeforeMergedElement || wasEndBeforeMergedElement || wasInRightElement) {\n                    this._setRelation(opA, opB, {\n                        wasInLeftElement,\n                        wasStartBeforeMergedElement,\n                        wasEndBeforeMergedElement,\n                        wasInRightElement\n                    });\n                }\n            }\n        }\n    }\n    /**\n     * Evaluates and returns contextual information about two given operations `opA` and `opB` which are about to be transformed.\n     */\n    getContext(opA, opB, aIsStrong) {\n        return {\n            aIsStrong,\n            aWasUndone: this._wasUndone(opA),\n            bWasUndone: this._wasUndone(opB),\n            abRelation: this._useRelations ? this._getRelation(opA, opB) : null,\n            baRelation: this._useRelations ? this._getRelation(opB, opA) : null,\n            forceWeakRemove: this._forceWeakRemove\n        };\n    }\n    /**\n     * Returns whether given operation `op` has already been undone.\n     *\n     * Information whether an operation was undone gives more context when making a decision when two operations are in conflict.\n     */\n    _wasUndone(op) {\n        // For `op`, get its original operation. After all, if `op` is a clone (or even transformed clone) of another\n        // operation, literally `op` couldn't be undone. It was just generated. If anything, it was the operation it origins\n        // from which was undone. So get that original operation.\n        const originalOp = this.originalOperations.get(op);\n        // And check with the document if the original operation was undone.\n        return originalOp.wasUndone || this._history.isUndoneOperation(originalOp);\n    }\n    /**\n     * Returns a relation between `opA` and an operation which is undone by `opB`. This can be `String` value if a relation\n     * was set earlier or `null` if there was no relation between those operations.\n     *\n     * This is a little tricky to understand, so let's compare it to `ContextFactory#_wasUndone`.\n     *\n     * When `wasUndone( opB )` is used, we check if the `opB` has already been undone. It is obvious, that the\n     * undoing operation must happen after the undone operation. So, essentially, we have `opB`, we take document history,\n     * we look forward in the future and ask if in that future `opB` was undone.\n     *\n     * Relations is a backward process to `wasUndone()`.\n     *\n     * Long story short - using relations is asking what happened in the past. Looking back. This time we have an undoing\n     * operation `opB` which has undone some other operation. When there is a transformation `opA` x `opB` and there is\n     * a conflict to solve and `opB` is an undoing operation, we can look back in the history and see what was a relation\n     * between `opA` and the operation which `opB` undone. Basing on that relation from the past, we can now make\n     * a better decision when resolving a conflict between two operations, because we know more about the context of\n     * those two operations.\n     *\n     * This is why this function does not return a relation directly between `opA` and `opB` because we need to look\n     * back to search for a meaningful contextual information.\n     */\n    _getRelation(opA, opB) {\n        // Get the original operation. Similarly as in `wasUndone()` it is used as an universal identifier for stored data.\n        const origB = this.originalOperations.get(opB);\n        const undoneB = this._history.getUndoneOperation(origB);\n        // If `opB` is not undoing any operation, there is no relation.\n        if (!undoneB) {\n            return null;\n        }\n        const origA = this.originalOperations.get(opA);\n        const relationsA = this._relations.get(origA);\n        // Get all relations for `opA`, and check if there is a relation with `opB`-undone-counterpart. If so, return it.\n        if (relationsA) {\n            return relationsA.get(undoneB) || null;\n        }\n        return null;\n    }\n    /**\n     * Helper function for `ContextFactory#updateRelations`.\n     */\n    _setRelation(opA, opB, relation) {\n        // As always, setting is for original operations, not the clones/transformed operations.\n        const origA = this.originalOperations.get(opA);\n        const origB = this.originalOperations.get(opB);\n        let relationsA = this._relations.get(origA);\n        if (!relationsA) {\n            relationsA = new Map();\n            this._relations.set(origA, relationsA);\n        }\n        relationsA.set(origB, relation);\n    }\n}\n/**\n * An utility function that updates {@link module:engine/model/operation/operation~Operation#baseVersion base versions}\n * of passed operations.\n *\n * The function simply sets `baseVersion` as a base version of the first passed operation and then increments it for\n * each following operation in `operations`.\n *\n * @param operations Operations to update.\n * @param baseVersion Base version to set for the first operation in `operations`.\n */\nfunction updateBaseVersions(operations, baseVersion) {\n    for (const operation of operations) {\n        operation.baseVersion = baseVersion++;\n    }\n}\n/**\n * Adds `howMany` instances of {@link module:engine/model/operation/nooperation~NoOperation} to `operations` set.\n */\nfunction padWithNoOps(operations, howMany) {\n    for (let i = 0; i < howMany; i++) {\n        operations.push(new NoOperation(0));\n    }\n}\n/**\n * Transformed operations set may include marker operations which were broken into multiple marker operations during transformation.\n * It represents marker range being broken into multiple pieces as the transformation was processed. Each partial marker operation is\n * a piece of the original marker range.\n *\n * These partial marker operations (\"marker range pieces\") should be \"glued\" together if, after transformations, the ranges ended up\n * next to each other.\n *\n * If the ranges did not end up next to each other, then partial marker operations should be discarded, as the marker range cannot\n * be broken into two pieces.\n *\n * There is always one \"reference\" marker operation (the original operation) and there may be some partial marker operations. Partial\n * marker operations have base version set to `-1`. If the `operations` set includes partial marker operations, then they are always\n * after the original marker operation.\n *\n * See also `MarkerOperation` x `MoveOperation` transformation.\n * See also https://github.com/ckeditor/ckeditor5/pull/17071.\n */\nfunction handlePartialMarkerOperations(operations) {\n    const markerOps = new Map();\n    for (let i = 0; i < operations.length; i++) {\n        const op = operations[i];\n        if (!(op instanceof MarkerOperation)) {\n            continue;\n        }\n        if (op.baseVersion !== -1) {\n            markerOps.set(op.name, {\n                op,\n                ranges: op.newRange ? [op.newRange] : []\n            });\n        }\n        else {\n            if (op.newRange) {\n                // `markerOps.get( op.name )` must exist because original marker operation is always before partial marker operations.\n                // If the original marker operation was changed to `NoOperation`, then the partial marker operations would be changed\n                // to `NoOperation` as well, so this is not a case.\n                markerOps.get(op.name).ranges.push(op.newRange);\n            }\n            operations.splice(i, 1);\n            i--;\n        }\n    }\n    for (const { op, ranges } of markerOps.values()) {\n        if (ranges.length) {\n            op.newRange = Range._createFromRanges(ranges);\n        }\n        else {\n            op.newRange = null;\n        }\n    }\n}\n// -----------------------\nsetTransformation(AttributeOperation, AttributeOperation, (a, b, context) => {\n    // If operations in conflict, check if their ranges intersect and manage them properly.\n    //\n    // Operations can be in conflict only if:\n    //\n    // * their key is the same (they change the same attribute), and\n    // * they are in the same parent (operations for ranges [ 1 ] - [ 3 ] and [ 2, 0 ] - [ 2, 5 ] change different\n    // elements and can't be in conflict).\n    if (a.key === b.key && a.range.start.hasSameParentAs(b.range.start)) {\n        // First, we want to apply change to the part of a range that has not been changed by the other operation.\n        const operations = a.range.getDifference(b.range).map(range => {\n            return new AttributeOperation(range, a.key, a.oldValue, a.newValue, 0);\n        });\n        // Then we take care of the common part of ranges.\n        const common = a.range.getIntersection(b.range);\n        if (common) {\n            // If this operation is more important, we also want to apply change to the part of the\n            // original range that has already been changed by the other operation. Since that range\n            // got changed we also have to update `oldValue`.\n            if (context.aIsStrong) {\n                operations.push(new AttributeOperation(common, b.key, b.newValue, a.newValue, 0));\n            }\n        }\n        if (operations.length == 0) {\n            return [new NoOperation(0)];\n        }\n        return operations;\n    }\n    else {\n        // If operations don't conflict, simply return an array containing just a clone of this operation.\n        return [a];\n    }\n});\nsetTransformation(AttributeOperation, InsertOperation, (a, b) => {\n    // Case 1:\n    //\n    // The attribute operation range includes the position where nodes were inserted.\n    // There are two possible scenarios: the inserted nodes were text and they should receive attributes or\n    // the inserted nodes were elements and they should not receive attributes.\n    //\n    if (a.range.start.hasSameParentAs(b.position) && a.range.containsPosition(b.position)) {\n        // If new nodes should not receive attributes, two separated ranges will be returned.\n        // Otherwise, one expanded range will be returned.\n        const range = a.range._getTransformedByInsertion(b.position, b.howMany, !b.shouldReceiveAttributes);\n        const result = range.map(r => {\n            return new AttributeOperation(r, a.key, a.oldValue, a.newValue, a.baseVersion);\n        });\n        if (b.shouldReceiveAttributes) {\n            // `AttributeOperation#range` includes some newly inserted text.\n            // The operation should also change the attribute of that text. An example:\n            //\n            // Bold should be applied on the following range:\n            // <p>Fo[zb]ar</p>\n            //\n            // In meantime, new text is typed:\n            // <p>Fozxxbar</p>\n            //\n            // Bold should be applied also on the new text:\n            // <p>Fo[zxxb]ar</p>\n            // <p>Fo<$text bold=\"true\">zxxb</$text>ar</p>\n            //\n            // There is a special case to consider here to consider.\n            //\n            // Consider setting an attribute with multiple possible values, for example `highlight`. The inserted text might\n            // have already an attribute value applied and the `oldValue` property of the attribute operation might be wrong:\n            //\n            // Attribute `highlight=\"yellow\"` should be applied on the following range:\n            // <p>Fo[zb]ar<p>\n            //\n            // In meantime, character `x` with `highlight=\"red\"` is typed:\n            // <p>Fo[z<$text highlight=\"red\">x</$text>b]ar</p>\n            //\n            // In this case we cannot simply apply operation changing the attribute value from `null` to `\"yellow\"` for the whole range\n            // because that would lead to an exception (`oldValue` is incorrect for `x`).\n            //\n            // We also cannot break the original range as this would mess up a scenario when there are multiple following\n            // insert operations, because then only the first inserted character is included in those ranges:\n            // <p>Fo[z][x][b]ar</p>   -->   <p>Fo[z][x]x[b]ar</p>   -->   <p>Fo[z][x]xx[b]ar</p>\n            //\n            // So, the attribute range needs be expanded, no matter what attributes are set on the inserted nodes:\n            //\n            // <p>Fo[z<$text highlight=\"red\">x</$text>b]ar</p>      <--- Change from `null` to `yellow`, throwing an exception.\n            //\n            // But before that operation would be applied, we will add an additional attribute operation that will change\n            // attributes on the inserted nodes in a way which would make the original operation correct:\n            //\n            // <p>Fo[z{<$text highlight=\"red\">}x</$text>b]ar</p>    <--- Change range `{}` from `red` to `null`.\n            // <p>Fo[zxb]ar</p>                                     <--- Now change from `null` to `yellow` is completely fine.\n            //\n            // Generate complementary attribute operation. Be sure to add it before the original operation.\n            const op = _getComplementaryAttributeOperations(b, a.key, a.oldValue);\n            if (op) {\n                result.unshift(op);\n            }\n        }\n        // If nodes should not receive new attribute, we are done here.\n        return result;\n    }\n    // If insert operation is not expanding the attribute operation range, simply transform the range.\n    a.range = a.range._getTransformedByInsertion(b.position, b.howMany, false)[0];\n    return [a];\n});\n/**\n * Helper function for `AttributeOperation` x `InsertOperation` (and reverse) transformation.\n *\n * For given `insertOperation` it checks the inserted node if it has an attribute `key` set to a value different\n * than `newValue`. If so, it generates an `AttributeOperation` which changes the value of `key` attribute to `newValue`.\n */\nfunction _getComplementaryAttributeOperations(insertOperation, key, newValue) {\n    const nodes = insertOperation.nodes;\n    // At the beginning we store the attribute value from the first node.\n    const insertValue = nodes.getNode(0).getAttribute(key);\n    if (insertValue == newValue) {\n        return null;\n    }\n    const range = new Range(insertOperation.position, insertOperation.position.getShiftedBy(insertOperation.howMany));\n    return new AttributeOperation(range, key, insertValue, newValue, 0);\n}\nsetTransformation(AttributeOperation, MergeOperation, (a, b) => {\n    const ranges = [];\n    // Case 1:\n    //\n    // Attribute change on the merged element. In this case, the merged element was moved to the graveyard.\n    // An additional attribute operation that will change the (re)moved element needs to be generated.\n    //\n    if (a.range.start.hasSameParentAs(b.deletionPosition)) {\n        if (a.range.containsPosition(b.deletionPosition) || a.range.start.isEqual(b.deletionPosition)) {\n            ranges.push(Range._createFromPositionAndShift(b.graveyardPosition, 1));\n        }\n    }\n    const range = a.range._getTransformedByMergeOperation(b);\n    // Do not add empty (collapsed) ranges to the result. `range` may be collapsed if it contained only the merged element.\n    if (!range.isCollapsed) {\n        ranges.push(range);\n    }\n    // Create `AttributeOperation`s out of the ranges.\n    return ranges.map(range => {\n        return new AttributeOperation(range, a.key, a.oldValue, a.newValue, a.baseVersion);\n    });\n});\nsetTransformation(AttributeOperation, MoveOperation, (a, b) => {\n    const ranges = _breakRangeByMoveOperation(a.range, b);\n    // Create `AttributeOperation`s out of the ranges.\n    return ranges.map(range => new AttributeOperation(range, a.key, a.oldValue, a.newValue, a.baseVersion));\n});\n/**\n * Helper function for `AttributeOperation` x `MoveOperation` transformation.\n *\n * Takes the passed `range` and transforms it by move operation `moveOp` in a specific way. Only top-level nodes of `range`\n * are considered to be in the range. If move operation moves nodes deep from inside of the range, those nodes won't\n * be included in the result. In other words, top-level nodes of the ranges from the result are exactly the same as\n * top-level nodes of the original `range`.\n *\n * This is important for `AttributeOperation` because, for its range, it changes only the top-level nodes. So we need to\n * track only how those nodes have been affected by `MoveOperation`.\n */\nfunction _breakRangeByMoveOperation(range, moveOp) {\n    const moveRange = Range._createFromPositionAndShift(moveOp.sourcePosition, moveOp.howMany);\n    // We are transforming `range` (original range) by `moveRange` (range moved by move operation). As usual when it comes to\n    // transforming a ranges, we may have a common part of the ranges and we may have a difference part (zero to two ranges).\n    let common = null;\n    let difference = [];\n    // Let's compare the ranges.\n    if (moveRange.containsRange(range, true)) {\n        // If the whole original range is moved, treat it whole as a common part. There's also no difference part.\n        common = range;\n    }\n    else if (range.start.hasSameParentAs(moveRange.start)) {\n        // If the ranges are \"on the same level\" (in the same parent) then move operation may move exactly those nodes\n        // that are changed by the attribute operation. In this case we get common part and difference part in the usual way.\n        difference = range.getDifference(moveRange);\n        common = range.getIntersection(moveRange);\n    }\n    else {\n        // In any other situation we assume that original range is different than move range, that is that move operation\n        // moves other nodes that attribute operation change. Even if the moved range is deep inside in the original range.\n        //\n        // Note that this is different than in `.getIntersection` (we would get a common part in that case) and different\n        // than `.getDifference` (we would get two ranges).\n        difference = [range];\n    }\n    const result = [];\n    // The default behaviour of `_getTransformedByMove` might get wrong results for difference part, though, so\n    // we do it by hand.\n    for (let diff of difference) {\n        // First, transform the range by removing moved nodes. Since this is a difference, this is safe, `null` won't be returned\n        // as the range is different than the moved range.\n        diff = diff._getTransformedByDeletion(moveOp.sourcePosition, moveOp.howMany);\n        // Transform also `targetPosition`.\n        const targetPosition = moveOp.getMovedRangeStart();\n        // Spread the range only if moved nodes are inserted only between the top-level nodes of the `diff` range.\n        const spread = diff.start.hasSameParentAs(targetPosition);\n        // Transform by insertion of moved nodes.\n        const diffs = diff._getTransformedByInsertion(targetPosition, moveOp.howMany, spread);\n        result.push(...diffs);\n    }\n    // Common part can be simply transformed by the move operation. This is because move operation will not target to\n    // that common part (the operation would have to target inside its own moved range).\n    if (common) {\n        result.push(common._getTransformedByMove(moveOp.sourcePosition, moveOp.targetPosition, moveOp.howMany, false)[0]);\n    }\n    return result;\n}\nsetTransformation(AttributeOperation, SplitOperation, (a, b) => {\n    // Case 1:\n    //\n    // Split node is the last node in `AttributeOperation#range`.\n    // `AttributeOperation#range` needs to be expanded to include the new (split) node.\n    //\n    // Attribute `type` to be changed to `numbered` but the `listItem` is split.\n    // <listItem type=\"bulleted\">foobar</listItem>\n    //\n    // After split:\n    // <listItem type=\"bulleted\">foo</listItem><listItem type=\"bulleted\">bar</listItem>\n    //\n    // After attribute change:\n    // <listItem type=\"numbered\">foo</listItem><listItem type=\"numbered\">foo</listItem>\n    //\n    if (a.range.end.isEqual(b.insertionPosition)) {\n        if (!b.graveyardPosition) {\n            a.range.end.offset++;\n        }\n        return [a];\n    }\n    // Case 2:\n    //\n    // Split position is inside `AttributeOperation#range`, at the same level, so the nodes to change are\n    // not going to make a flat range.\n    //\n    // Content with range-to-change and split position:\n    // <p>Fo[zb^a]r</p>\n    //\n    // After split:\n    // <p>Fozb</p><p>ar</p>\n    //\n    // Make two separate ranges containing all nodes to change:\n    // <p>Fo[zb]</p><p>[a]r</p>\n    //\n    if (a.range.start.hasSameParentAs(b.splitPosition) && a.range.containsPosition(b.splitPosition)) {\n        const secondPart = a.clone();\n        secondPart.range = new Range(b.moveTargetPosition.clone(), a.range.end._getCombined(b.splitPosition, b.moveTargetPosition));\n        a.range.end = b.splitPosition.clone();\n        a.range.end.stickiness = 'toPrevious';\n        return [a, secondPart];\n    }\n    // The default case.\n    //\n    a.range = a.range._getTransformedBySplitOperation(b);\n    return [a];\n});\nsetTransformation(InsertOperation, AttributeOperation, (a, b) => {\n    const result = [a];\n    // Case 1:\n    //\n    // The attribute operation range includes the position where nodes were inserted.\n    // There are two possible scenarios: the inserted nodes were text and they should receive attributes or\n    // the inserted nodes were elements and they should not receive attributes.\n    //\n    // This is a mirror scenario to the one described in `AttributeOperation` x `InsertOperation` transformation,\n    // although this case is a little less complicated. In this case we simply need to change attributes of the\n    // inserted nodes and that's it.\n    //\n    if (a.shouldReceiveAttributes && a.position.hasSameParentAs(b.range.start) && b.range.containsPosition(a.position)) {\n        const op = _getComplementaryAttributeOperations(a, b.key, b.newValue);\n        if (op) {\n            result.push(op);\n        }\n    }\n    // The default case is: do nothing.\n    // `AttributeOperation` does not change the model tree structure so `InsertOperation` does not need to be changed.\n    //\n    return result;\n});\nsetTransformation(InsertOperation, InsertOperation, (a, b, context) => {\n    // Case 1:\n    //\n    // Two insert operations insert nodes at the same position. Since they are the same, it needs to be decided\n    // what will be the order of inserted nodes. However, there is no additional information to help in that\n    // decision. Also, when `b` will be transformed by `a`, the same order must be maintained.\n    //\n    // To achieve that, we will check if the operation is strong.\n    // If it is, it won't get transformed. If it is not, it will be moved.\n    //\n    if (a.position.isEqual(b.position) && context.aIsStrong) {\n        return [a];\n    }\n    // The default case.\n    //\n    a.position = a.position._getTransformedByInsertOperation(b);\n    return [a];\n});\nsetTransformation(InsertOperation, MoveOperation, (a, b) => {\n    // The default case.\n    //\n    a.position = a.position._getTransformedByMoveOperation(b);\n    return [a];\n});\nsetTransformation(InsertOperation, SplitOperation, (a, b) => {\n    // The default case.\n    //\n    a.position = a.position._getTransformedBySplitOperation(b);\n    return [a];\n});\nsetTransformation(InsertOperation, MergeOperation, (a, b) => {\n    a.position = a.position._getTransformedByMergeOperation(b);\n    return [a];\n});\n// -----------------------\nsetTransformation(MarkerOperation, InsertOperation, (a, b) => {\n    if (a.oldRange) {\n        a.oldRange = a.oldRange._getTransformedByInsertOperation(b)[0];\n    }\n    if (a.newRange) {\n        a.newRange = a.newRange._getTransformedByInsertOperation(b)[0];\n    }\n    return [a];\n});\nsetTransformation(MarkerOperation, MarkerOperation, (a, b, context) => {\n    if (a.name == b.name) {\n        if (context.aIsStrong) {\n            a.oldRange = b.newRange ? b.newRange.clone() : null;\n        }\n        else {\n            return [new NoOperation(0)];\n        }\n    }\n    return [a];\n});\nsetTransformation(MarkerOperation, MergeOperation, (a, b) => {\n    if (a.oldRange) {\n        a.oldRange = a.oldRange._getTransformedByMergeOperation(b);\n    }\n    if (a.newRange) {\n        a.newRange = a.newRange._getTransformedByMergeOperation(b);\n    }\n    return [a];\n});\nsetTransformation(MarkerOperation, MoveOperation, (a, b) => {\n    const result = [a];\n    if (a.oldRange) {\n        a.oldRange = Range._createFromRanges(a.oldRange._getTransformedByMoveOperation(b));\n    }\n    if (a.newRange) {\n        // In many simple cases the marker range will be kept integral after the transformation. For example, if some nodes\n        // were inserted before the range, or into the range, then the marker range is not broken into two.\n        //\n        // However, if some nodes are taken out of the range and moved somewhere else, or are moved into the range, then the marker\n        // range is \"broken\" into two or three pieces, and these pieces must be transformed and updated separately.\n        //\n        // When the marker range is transformed by move operation, as a result we get an array with one (simple case) or multiple\n        // (\"broken range\" case) ranges.\n        const ranges = a.newRange._getTransformedByMoveOperation(b);\n        a.newRange = ranges[0];\n        // If there are multiple ranges, we will create separate marker operations for each piece of the original marker range.\n        // Since they will be marker operations, they will be processed through the transformation process.\n        //\n        // However, we cannot create multiple ranges for the same marker (for the same marker name). A marker has only one range.\n        // So, we cannot really have multiple marker operations for the same marker. We will keep the track of the separate marker\n        // operations to see, if after all transformations, the marker pieces are next to each other or not. If so, we will glue\n        // them together to the original marker operation (`a`). If not, we will discard them. These extra operations will never\n        // be executed, as they will only exist temporarily during the transformation process.\n        //\n        // We will call these additional marker operations \"partial marker operations\" and we will mark them with negative base version.\n        //\n        // See also `handlePartialMarkerOperations()`.\n        // See also https://github.com/ckeditor/ckeditor5/pull/17071.\n        //\n        for (let i = 1; i < ranges.length; i++) {\n            const op = a.clone();\n            op.oldRange = null;\n            op.newRange = ranges[i];\n            op.baseVersion = -1;\n            result.push(op);\n        }\n    }\n    return result;\n});\nsetTransformation(MarkerOperation, SplitOperation, (a, b, context) => {\n    if (a.oldRange) {\n        a.oldRange = a.oldRange._getTransformedBySplitOperation(b);\n    }\n    if (a.newRange) {\n        if (context.abRelation) {\n            const aNewRange = a.newRange._getTransformedBySplitOperation(b);\n            if (a.newRange.start.isEqual(b.splitPosition) && context.abRelation.wasStartBeforeMergedElement) {\n                a.newRange.start = Position._createAt(b.insertionPosition);\n            }\n            else if (a.newRange.start.isEqual(b.splitPosition) && !context.abRelation.wasInLeftElement) {\n                a.newRange.start = Position._createAt(b.moveTargetPosition);\n            }\n            else {\n                a.newRange.start = aNewRange.start;\n            }\n            if (a.newRange.end.isEqual(b.splitPosition) && context.abRelation.wasInRightElement) {\n                a.newRange.end = Position._createAt(b.moveTargetPosition);\n            }\n            else if (a.newRange.end.isEqual(b.splitPosition) && context.abRelation.wasEndBeforeMergedElement) {\n                a.newRange.end = Position._createAt(b.insertionPosition);\n            }\n            else {\n                a.newRange.end = aNewRange.end;\n            }\n            return [a];\n        }\n        a.newRange = a.newRange._getTransformedBySplitOperation(b);\n    }\n    return [a];\n});\n// -----------------------\nsetTransformation(MergeOperation, InsertOperation, (a, b) => {\n    if (a.sourcePosition.hasSameParentAs(b.position)) {\n        a.howMany += b.howMany;\n    }\n    a.sourcePosition = a.sourcePosition._getTransformedByInsertOperation(b);\n    a.targetPosition = a.targetPosition._getTransformedByInsertOperation(b);\n    return [a];\n});\nsetTransformation(MergeOperation, MergeOperation, (a, b, context) => {\n    // Case 1:\n    //\n    // Same merge operations.\n    //\n    // Both operations have same source and target positions. So the element already got merged and there is\n    // theoretically nothing to do.\n    //\n    if (a.sourcePosition.isEqual(b.sourcePosition) && a.targetPosition.isEqual(b.targetPosition)) {\n        // There are two ways that we can provide a do-nothing operation.\n        //\n        // First is simply a NoOperation instance. We will use it if `b` operation was not undone.\n        //\n        // Second is a merge operation that has the source operation in the merged element - in the graveyard -\n        // same target position and `howMany` equal to `0`. So it is basically merging an empty element from graveyard\n        // which is almost the same as NoOperation.\n        //\n        // This way the merge operation can be later transformed by split operation\n        // to provide correct undo. This will be used if `b` operation was undone (only then it is correct).\n        //\n        if (!context.bWasUndone) {\n            return [new NoOperation(0)];\n        }\n        else {\n            const path = b.graveyardPosition.path.slice();\n            path.push(0);\n            a.sourcePosition = new Position(b.graveyardPosition.root, path);\n            a.howMany = 0;\n            return [a];\n        }\n    }\n    // Case 2:\n    //\n    // Same merge source position but different target position.\n    //\n    // This can happen during collaboration. For example, if one client merged a paragraph to the previous paragraph\n    // and the other person removed that paragraph and merged the same paragraph to something before:\n    //\n    // Client A:\n    // <p>Foo</p><p>Bar</p><p>[]Xyz</p>\n    // <p>Foo</p><p>BarXyz</p>\n    //\n    // Client B:\n    // <p>Foo</p>[<p>Bar</p>]<p>Xyz</p>\n    // <p>Foo</p><p>[]Xyz</p>\n    // <p>FooXyz</p>\n    //\n    // In this case we need to decide where finally \"Xyz\" will land:\n    //\n    // <p>FooXyz</p>               graveyard: <p>Bar</p>\n    // <p>Foo</p>                  graveyard: <p>BarXyz</p>\n    //\n    // Let's move it in a way so that a merge operation that does not target to graveyard is more important so that\n    // nodes does not end up in the graveyard. It makes sense. Both for Client A and for Client B \"Xyz\" finally did not\n    // end up in the graveyard (see above).\n    //\n    // If neither or both operations point to graveyard, then let `aIsStrong` decide.\n    //\n    if (a.sourcePosition.isEqual(b.sourcePosition) && !a.targetPosition.isEqual(b.targetPosition) &&\n        !context.bWasUndone && context.abRelation != 'splitAtSource') {\n        const aToGraveyard = a.targetPosition.root.rootName == '$graveyard';\n        const bToGraveyard = b.targetPosition.root.rootName == '$graveyard';\n        // If `aIsWeak` it means that `a` points to graveyard while `b` doesn't. Don't move nodes then.\n        const aIsWeak = aToGraveyard && !bToGraveyard;\n        // If `bIsWeak` it means that `b` points to graveyard while `a` doesn't. Force moving nodes then.\n        const bIsWeak = bToGraveyard && !aToGraveyard;\n        // Force move if `b` is weak or neither operation is weak but `a` is stronger through `context.aIsStrong`.\n        const forceMove = bIsWeak || (!aIsWeak && context.aIsStrong);\n        if (forceMove) {\n            const sourcePosition = b.targetPosition._getTransformedByMergeOperation(b);\n            const targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n            return [new MoveOperation(sourcePosition, a.howMany, targetPosition, 0)];\n        }\n        else {\n            return [new NoOperation(0)];\n        }\n    }\n    // The default case.\n    // TODO: Possibly, there's a missing case for same `targetPosition` but different `sourcePosition`.\n    //\n    if (a.sourcePosition.hasSameParentAs(b.targetPosition)) {\n        a.howMany += b.howMany;\n    }\n    a.sourcePosition = a.sourcePosition._getTransformedByMergeOperation(b);\n    a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n    // Handle positions in graveyard.\n    // If graveyard positions are same and `a` operation is strong - do not transform.\n    if (!a.graveyardPosition.isEqual(b.graveyardPosition) || !context.aIsStrong) {\n        a.graveyardPosition = a.graveyardPosition._getTransformedByMergeOperation(b);\n    }\n    return [a];\n});\nsetTransformation(MergeOperation, MoveOperation, (a, b, context) => {\n    // Case 1:\n    //\n    // The element to merge got removed.\n    //\n    // Merge operation does support merging elements which are not siblings. So it would not be a problem\n    // from technical point of view. However, if the element was removed, the intention of the user deleting it\n    // was to have it all deleted, together with its children. From user experience point of view, moving back the\n    // removed nodes might be unexpected. This means that in this scenario we will block the merging.\n    //\n    // The exception to this rule would be if the remove operation was later undone.\n    //\n    const removedRange = Range._createFromPositionAndShift(b.sourcePosition, b.howMany);\n    if (b.type == 'remove' && !context.bWasUndone) {\n        if (a.deletionPosition.hasSameParentAs(b.sourcePosition) && removedRange.containsPosition(a.sourcePosition)) {\n            return [new NoOperation(0)];\n        }\n    }\n    // In most cases we want `sourcePosition` to stick to previous and `targetPosition` to stick to next.\n    // Usually, `sourcePosition` is at the beginning of the merged element and `targetPosition` is at the end of the merge-target element.\n    //\n    // However, `sourcePosition` and `targetPosition` may end up in the middle of an element due to some OT magic that happens during undo.\n    // It is expected and used in `MergeOperation` x `SplitOperation` transformation.\n    //\n    // But when these positions are in the middle, it messes up the regular `MergeOperation` x `MoveOperation` transformation because\n    // these positions may \"follow\" some moved elements. And we want them stick in the original elements.\n    //\n    // This is why we add two extra cases: (1) and (2).\n    //\n    // But after this `MergeOperation` is transformed by \"this\" move (which is undone), we also need to define extra cases for\n    // the operation undoing previous move. These are (3) and (4).\n    //\n    // (1). Note that this case is also added to `updateRelations()` and sets `mergeSourceAffected` relation.\n    //\n    // [] is move operation, } is merge source position (sticks to previous by default):\n    // <p>A[b]}c</p>  ->  <p>A}c</p>\n    //\n    if (b.sourcePosition.getShiftedBy(b.howMany).isEqual(a.sourcePosition)) {\n        a.sourcePosition.stickiness = 'toNone';\n    }\n    // (3). This is the transformation for undoing operation of the above case.\n    //\n    // [] is move operation, } is merge source position (sticks to previous by default):\n    // <p>A}c</p>  ->  <p>A[b]}c</p>  (instead of <p>A}[b]c</p>)\n    //\n    else if (b.targetPosition.isEqual(a.sourcePosition) && context.abRelation == 'mergeSourceAffected') {\n        a.sourcePosition.stickiness = 'toNext';\n    }\n    // (2). Note that this case is also added to `updateRelations()` and sets `mergeTargetWasBefore` relation.\n    //\n    // [] is move operation, { is merge target position (sticks to next by default):\n    // <p>A{[b]c</p>  ->  <p>A{c</p>\n    //\n    else if (b.sourcePosition.isEqual(a.targetPosition)) {\n        a.targetPosition.stickiness = 'toNone';\n        a.howMany -= b.howMany;\n    }\n    // (4). This is the transformation for undoing operation of the above case.\n    //\n    // [] is move operation, { is merge target position (sticks to next by default):\n    // <p>A{c</p>  ->  <p>A{[b]c</p>  (instead of <p>A[b]{c</p>)\n    //\n    else if (b.targetPosition.isEqual(a.targetPosition) && context.abRelation == 'mergeTargetWasBefore') {\n        a.targetPosition.stickiness = 'toPrevious';\n        a.howMany += b.howMany;\n    }\n    // The default case.\n    else {\n        if (a.sourcePosition.hasSameParentAs(b.targetPosition)) {\n            a.howMany += b.howMany;\n        }\n        if (a.sourcePosition.hasSameParentAs(b.sourcePosition)) {\n            a.howMany -= b.howMany;\n        }\n    }\n    a.sourcePosition = a.sourcePosition._getTransformedByMoveOperation(b);\n    a.targetPosition = a.targetPosition._getTransformedByMoveOperation(b);\n    // After transformations are done, make sure to revert stickiness in case if (1) - (4) scenario happened.\n    a.sourcePosition.stickiness = 'toPrevious';\n    a.targetPosition.stickiness = 'toNext';\n    // `MergeOperation` graveyard position is like `MoveOperation` target position. It is a position where element(s) will\n    // be moved. Like in other similar cases, we need to consider the scenario when those positions are same.\n    // Here, we will treat `MergeOperation` like it is always strong (see `InsertOperation` x `InsertOperation` for comparison).\n    // This means that we won't transform graveyard position if it is equal to move operation target position.\n    if (!a.graveyardPosition.isEqual(b.targetPosition)) {\n        a.graveyardPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n    }\n    return [a];\n});\nsetTransformation(MergeOperation, SplitOperation, (a, b, context) => {\n    if (b.graveyardPosition) {\n        // If `b` operation defines graveyard position, a node from graveyard will be moved. This means that we need to\n        // transform `a.graveyardPosition` accordingly.\n        a.graveyardPosition = a.graveyardPosition._getTransformedByDeletion(b.graveyardPosition, 1);\n        // This is a scenario foreseen in `MergeOperation` x `MergeOperation`, with two identical merge operations.\n        //\n        // So, there was `MergeOperation` x `MergeOperation` transformation earlier. Now, `a` is a merge operation which\n        // source position is in graveyard. Interestingly, split operation wants to use the node to be merged by `a`. This\n        // means that `b` is undoing that merge operation from earlier, which caused `a` to be in graveyard.\n        //\n        // If that's the case, at this point, we will only \"fix\" `a.howMany`. It was earlier set to `0` in\n        // `MergeOperation` x `MergeOperation` transformation. Later transformations in this function will change other\n        // properties.\n        //\n        if (a.deletionPosition.isEqual(b.graveyardPosition)) {\n            a.howMany = b.howMany;\n        }\n    }\n    // Case 1:\n    //\n    // Merge operation moves nodes to the place where split happens.\n    //\n    // This is a classic situation when there are two paragraphs, and there is a split (enter) at the end of the first\n    // paragraph and there is a merge (delete) at the beginning of the second paragraph:\n    //\n    // <p>Foo{}</p><p>[]Bar</p>.\n    //\n    // User A presses enter after `Foo`, while User B presses backspace before `Bar`. It is intuitive that after both operations, the\n    // editor state should stay the same.\n    //\n    // State after split:\n    // <p>Foo</p><p></p><p>[]Bar</p>\n    //\n    // When this happens, `Bar` should be merged to the newly created paragraph, to maintain the editor state:\n    // <p>Foo</p><p>Bar</p>\n    //\n    // Another option is to merge into the original paragraph `Foo`, according to the `targetPosition`. This results in an incorrect state:\n    // <p>FooBar</p><p></p>\n    //\n    // Also, consider an example where User A also writes something in the new paragraph:\n    // <p>Foo</p><p>Xyz</p><p>[]Bar</p>\n    //\n    // In this case it is clear that merge should happen into `[ 1, 3 ]` not into `[ 0, 3 ]`. It first has to be transformed to `[ 1, 0 ]`,\n    // and then transformed be insertion into `[ 1, 3 ]`.\n    //\n    // So, usually we want to move `targetPosition` to the new paragraph when it is same as split position. This is how it is handled\n    // in the default transformation (`_getTransformedBySplitOperation()`). We don't need a special case for this.\n    //\n    // However, there are two exceptions, when we **do not** want to transform `targetPosition`, and we need a special case then.\n    //\n    // These exceptions happen only if undo is involved. During OT, above presented case (`<p>Foo{}</p><p>[]Bar</p>`) is the only way\n    // how `SplitOperation#splitPosition` and `MergeOperation#targetPosition` can be the same.\n    //\n    // First exception is when the element to merge is in the graveyard and split operation uses it. In that case\n    // if target position would be transformed, the merge operation would target at the source position:\n    //\n    // root: <p>Foo[]</p>\t\t\t\tgraveyard: <p></p>\n    //\n    // SplitOperation: root [ 0, 3 ] using graveyard [ 0 ] (howMany = 0)\n    // MergeOperation: graveyard [ 0, 0 ] -> root [ 0, 3 ] (howMany = 0)\n    //\n    // Since split operation moves the graveyard element back to the root (to path `[ 1 ]`), the merge operation `sourcePosition` changes.\n    // After split we have: `<p>Foo</p><p></p>`, so `sourcePosition` is `[ 1, 0 ]`. But if `targetPosition` is transformed, then it\n    // also becomes `[ 1, 0 ]`. In this case, we want to keep the `targetPosition` as it was.\n    //\n    // Second exception is connected strictly with undo relations. If this `MergeOperation` was earlier transformed by\n    // `MergeOperation` and we stored an information that earlier the target position was not affected, then here, when transforming by\n    // `SplitOperation` we are not going to change it as well.\n    //\n    // For these two cases we will only transform `sourcePosition` and return early.\n    //\n    // Note, that earlier there was also third special case here. `targetPosition` was not transformed, if it pointed into the middle of\n    // target element, not into its end (as usual). This can also happen only with undo involved. However, it wasn't always a correct\n    // solution, as in some cases we actually wanted to transform `targetPosition`. Also, this case usually happens together with the second\n    // case described above. There is only one scenario that we have in our unit tests, where this third case happened without second case.\n    // However, this scenario went fine no matter if we transformed `targetPosition` or not. That's because this happened in the middle\n    // of transformation process and the operation was correctly transformed later on.\n    //\n    if (a.targetPosition.isEqual(b.splitPosition)) {\n        const mergeSplittingElement = b.graveyardPosition && a.deletionPosition.isEqual(b.graveyardPosition);\n        if (mergeSplittingElement || context.abRelation == 'mergeTargetNotMoved') {\n            a.sourcePosition = a.sourcePosition._getTransformedBySplitOperation(b);\n            return [a];\n        }\n    }\n    // Case 2:\n    //\n    // Merge source is at the same position as split position. This sometimes happen, mostly during undo.\n    // The decision here is mostly to choose whether merge source position should stay where it is (so it will be at the end of the\n    // split element) or should be move to the beginning of the new element.\n    //\n    if (a.sourcePosition.isEqual(b.splitPosition)) {\n        // Use context to check if `SplitOperation` is not undoing a merge operation, that didn't change the `a` operation.\n        // This scenario happens the undone merge operation moved nodes at the source position of `a` operation.\n        // In that case `a` operation source position should stay where it is.\n        if (context.abRelation == 'mergeSourceNotMoved') {\n            a.howMany = 0;\n            a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n            return [a];\n        }\n        // This merge operation might have been earlier transformed by a merge operation which both merged the same element.\n        // See that case in `MergeOperation` x `MergeOperation` transformation. In that scenario, if the merge operation has been undone,\n        // the special case is not applied.\n        //\n        // Now, the merge operation is transformed by the split which has undone that previous merge operation.\n        // So now we are fixing situation which was skipped in `MergeOperation` x `MergeOperation` case.\n        //\n        if (context.abRelation == 'mergeSameElement' || a.sourcePosition.offset > 0) {\n            a.sourcePosition = b.moveTargetPosition.clone();\n            a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n            return [a];\n        }\n    }\n    // The default case.\n    //\n    if (a.sourcePosition.hasSameParentAs(b.splitPosition)) {\n        a.howMany = b.splitPosition.offset;\n    }\n    a.sourcePosition = a.sourcePosition._getTransformedBySplitOperation(b);\n    a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n    return [a];\n});\n// -----------------------\nsetTransformation(MoveOperation, InsertOperation, (a, b) => {\n    const moveRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n    const transformed = moveRange._getTransformedByInsertOperation(b, false)[0];\n    a.sourcePosition = transformed.start;\n    a.howMany = transformed.end.offset - transformed.start.offset;\n    // See `InsertOperation` x `MoveOperation` transformation for details on this case.\n    //\n    // In summary, both operations point to the same place, so the order of nodes needs to be decided.\n    // `MoveOperation` is considered weaker, so it is always transformed, unless there was a certain relation\n    // between operations.\n    //\n    if (!a.targetPosition.isEqual(b.position)) {\n        a.targetPosition = a.targetPosition._getTransformedByInsertOperation(b);\n    }\n    return [a];\n});\nsetTransformation(MoveOperation, MoveOperation, (a, b, context) => {\n    //\n    // Setting and evaluating some variables that will be used in special cases and default algorithm.\n    //\n    // Create ranges from `MoveOperations` properties.\n    const rangeA = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n    const rangeB = Range._createFromPositionAndShift(b.sourcePosition, b.howMany);\n    // Assign `context.aIsStrong` to a different variable, because the value may change during execution of\n    // this algorithm and we do not want to override original `context.aIsStrong` that will be used in later transformations.\n    let aIsStrong = context.aIsStrong;\n    // This will be used to decide the order of nodes if both operations target at the same position.\n    // By default, use strong/weak operation mechanism.\n    let insertBefore = !context.aIsStrong;\n    // If the relation is set, then use it to decide nodes order.\n    if (context.abRelation == 'insertBefore' || context.baRelation == 'insertAfter') {\n        insertBefore = true;\n    }\n    else if (context.abRelation == 'insertAfter' || context.baRelation == 'insertBefore') {\n        insertBefore = false;\n    }\n    // `a.targetPosition` could be affected by the `b` operation. We will transform it.\n    let newTargetPosition;\n    if (a.targetPosition.isEqual(b.targetPosition) && insertBefore) {\n        newTargetPosition = a.targetPosition._getTransformedByDeletion(b.sourcePosition, b.howMany);\n    }\n    else {\n        newTargetPosition = a.targetPosition._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    }\n    //\n    // Special case #1 + mirror.\n    //\n    // Special case when both move operations' target positions are inside nodes that are\n    // being moved by the other move operation. So in other words, we move ranges into inside of each other.\n    // This case can't be solved reasonably (on the other hand, it should not happen often).\n    if (_moveTargetIntoMovedRange(a, b) && _moveTargetIntoMovedRange(b, a)) {\n        // Instead of transforming operation, we return a reverse of the operation that we transform by.\n        // So when the results of this \"transformation\" will be applied, `b` MoveOperation will get reversed.\n        return [b.getReversed()];\n    }\n    //\n    // End of special case #1.\n    //\n    //\n    // Special case #2.\n    //\n    // Check if `b` operation targets inside `rangeA`.\n    const bTargetsToA = rangeA.containsPosition(b.targetPosition);\n    // If `b` targets to `rangeA` and `rangeA` contains `rangeB`, `b` operation has no influence on `a` operation.\n    // You might say that operation `b` is captured inside operation `a`.\n    if (bTargetsToA && rangeA.containsRange(rangeB, true)) {\n        // There is a mini-special case here, where `rangeB` is on other level than `rangeA`. That's why\n        // we need to transform `a` operation anyway.\n        rangeA.start = rangeA.start._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n        rangeA.end = rangeA.end._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n        return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n    }\n    //\n    // Special case #2 mirror.\n    //\n    const aTargetsToB = rangeB.containsPosition(a.targetPosition);\n    if (aTargetsToB && rangeB.containsRange(rangeA, true)) {\n        // `a` operation is \"moved together\" with `b` operation.\n        // Here, just move `rangeA` \"inside\" `rangeB`.\n        rangeA.start = rangeA.start._getCombined(b.sourcePosition, b.getMovedRangeStart());\n        rangeA.end = rangeA.end._getCombined(b.sourcePosition, b.getMovedRangeStart());\n        return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n    }\n    //\n    // End of special case #2.\n    //\n    //\n    // Special case #3 + mirror.\n    //\n    // `rangeA` has a node which is an ancestor of `rangeB`. In other words, `rangeB` is inside `rangeA`\n    // but not on the same tree level. In such case ranges have common part but we have to treat it\n    // differently, because in such case those ranges are not really conflicting and should be treated like\n    // two separate ranges. Also we have to discard two difference parts.\n    const aCompB = compareArrays(a.sourcePosition.getParentPath(), b.sourcePosition.getParentPath());\n    if (aCompB == 'prefix' || aCompB == 'extension') {\n        // Transform `rangeA` by `b` operation and make operation out of it, and that's all.\n        // Note that this is a simplified version of default case, but here we treat the common part (whole `rangeA`)\n        // like a one difference part.\n        rangeA.start = rangeA.start._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n        rangeA.end = rangeA.end._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n        return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n    }\n    //\n    // End of special case #3.\n    //\n    //\n    // Default case - ranges are on the same level or are not connected with each other.\n    //\n    // Modifier for default case.\n    // Modifies `aIsStrong` flag in certain conditions.\n    //\n    // If only one of operations is a remove operation, we force remove operation to be the \"stronger\" one\n    // to provide more expected results.\n    if (a.type == 'remove' && b.type != 'remove' && !context.aWasUndone && !context.forceWeakRemove) {\n        aIsStrong = true;\n    }\n    else if (a.type != 'remove' && b.type == 'remove' && !context.bWasUndone && !context.forceWeakRemove) {\n        aIsStrong = false;\n    }\n    // Handle operation's source ranges - check how `rangeA` is affected by `b` operation.\n    // This will aggregate transformed ranges.\n    const ranges = [];\n    // Get the \"difference part\" of `a` operation source range.\n    // This is an array with one or two ranges. Two ranges if `rangeB` is inside `rangeA`.\n    const difference = rangeA.getDifference(rangeB);\n    for (const range of difference) {\n        // Transform those ranges by `b` operation. For example if `b` moved range from before those ranges, fix those ranges.\n        range.start = range.start._getTransformedByDeletion(b.sourcePosition, b.howMany);\n        range.end = range.end._getTransformedByDeletion(b.sourcePosition, b.howMany);\n        // If `b` operation targets into `rangeA` on the same level, spread `rangeA` into two ranges.\n        const shouldSpread = compareArrays(range.start.getParentPath(), b.getMovedRangeStart().getParentPath()) == 'same';\n        const newRanges = range._getTransformedByInsertion(b.getMovedRangeStart(), b.howMany, shouldSpread);\n        ranges.push(...newRanges);\n    }\n    // Then, we have to manage the \"common part\" of both move ranges.\n    const common = rangeA.getIntersection(rangeB);\n    if (common !== null && aIsStrong) {\n        // Calculate the new position of that part of original range.\n        common.start = common.start._getCombined(b.sourcePosition, b.getMovedRangeStart());\n        common.end = common.end._getCombined(b.sourcePosition, b.getMovedRangeStart());\n        // Take care of proper range order.\n        //\n        // Put `common` at appropriate place. Keep in mind that we are interested in original order.\n        // Basically there are only three cases: there is zero, one or two difference ranges.\n        //\n        // If there is zero difference ranges, just push `common` in the array.\n        if (ranges.length === 0) {\n            ranges.push(common);\n        }\n        // If there is one difference range, we need to check whether common part was before it or after it.\n        else if (ranges.length == 1) {\n            if (rangeB.start.isBefore(rangeA.start) || rangeB.start.isEqual(rangeA.start)) {\n                ranges.unshift(common);\n            }\n            else {\n                ranges.push(common);\n            }\n        }\n        // If there are more ranges (which means two), put common part between them. This is the only scenario\n        // where there could be two difference ranges so we don't have to make any comparisons.\n        else {\n            ranges.splice(1, 0, common);\n        }\n    }\n    if (ranges.length === 0) {\n        // If there are no \"source ranges\", nothing should be changed.\n        // Note that this can happen only if `aIsStrong == false` and `rangeA.isEqual( rangeB )`.\n        return [new NoOperation(a.baseVersion)];\n    }\n    return _makeMoveOperationsFromRanges(ranges, newTargetPosition);\n});\nsetTransformation(MoveOperation, SplitOperation, (a, b, context) => {\n    let newTargetPosition = a.targetPosition.clone();\n    // Do not transform if target position is same as split insertion position and this split comes from undo.\n    // This should be done on relations but it is too much work for now as it would require relations working in collaboration.\n    // We need to make a decision how we will resolve such conflict and this is less harmful way.\n    if (!a.targetPosition.isEqual(b.insertionPosition) || !b.graveyardPosition || context.abRelation == 'moveTargetAfter') {\n        newTargetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n    }\n    // Case 1:\n    //\n    // Last element in the moved range got split.\n    //\n    // In this case the default range transformation will not work correctly as the element created by\n    // split operation would be outside the range. The range to move needs to be fixed manually.\n    //\n    const moveRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n    if (moveRange.end.isEqual(b.insertionPosition)) {\n        // Do it only if this is a \"natural\" split, not a one that comes from undo.\n        // If this is undo split, only `targetPosition` needs to be changed (if the move is a remove).\n        if (!b.graveyardPosition) {\n            a.howMany++;\n        }\n        a.targetPosition = newTargetPosition;\n        return [a];\n    }\n    // Case 2:\n    //\n    // Split happened between the moved nodes. In this case two ranges to move need to be generated.\n    //\n    // Characters `ozba` are moved to the end of paragraph `Xyz` but split happened.\n    // <p>F[oz|ba]r</p><p>Xyz</p>\n    //\n    // After split:\n    // <p>F[oz</p><p>ba]r</p><p>Xyz</p>\n    //\n    // Correct ranges:\n    // <p>F[oz]</p><p>[ba]r</p><p>Xyz</p>\n    //\n    // After move:\n    // <p>F</p><p>r</p><p>Xyzozba</p>\n    //\n    if (moveRange.start.hasSameParentAs(b.splitPosition) && moveRange.containsPosition(b.splitPosition)) {\n        let rightRange = new Range(b.splitPosition, moveRange.end);\n        rightRange = rightRange._getTransformedBySplitOperation(b);\n        const ranges = [\n            new Range(moveRange.start, b.splitPosition),\n            rightRange\n        ];\n        return _makeMoveOperationsFromRanges(ranges, newTargetPosition);\n    }\n    // Case 3:\n    //\n    // Move operation targets at the split position. We need to decide if the nodes should be inserted\n    // at the end of the split element or at the beginning of the new element.\n    //\n    if (a.targetPosition.isEqual(b.splitPosition) && context.abRelation == 'insertAtSource') {\n        newTargetPosition = b.moveTargetPosition;\n    }\n    // Case 4:\n    //\n    // Move operation targets just after the split element. We need to decide if the nodes should be inserted\n    // between two parts of split element, or after the new element.\n    //\n    // Split at `|`, while move operation moves `<p>Xyz</p>` and targets at `^`:\n    // <p>Foo|bar</p>^<p>baz</p>\n    // <p>Foo</p>^<p>bar</p><p>baz</p> or <p>Foo</p><p>bar</p>^<p>baz</p>?\n    //\n    // If there is no contextual information between operations (for example, they come from collaborative\n    // editing), we don't want to put some unrelated content (move) between parts of related content (split parts).\n    // However, if the split is from undo, in the past, the moved content might be targeting between the\n    // split parts, meaning that was exactly user's intention:\n    //\n    // <p>Foo</p>^<p>bar</p>\t\t<--- original situation, in \"past\".\n    // <p>Foobar</p>^\t\t\t\t<--- after merge target position is transformed.\n    // <p>Foo|bar</p>^\t\t\t\t<--- then the merge is undone, and split happens, which leads us to current situation.\n    //\n    // In this case it is pretty clear that the intention was to put new paragraph between those nodes,\n    // so we need to transform accordingly. We can detect this scenario thanks to relations.\n    //\n    if (a.targetPosition.isEqual(b.insertionPosition) && context.abRelation == 'insertBetween') {\n        newTargetPosition = a.targetPosition;\n    }\n    // The default case.\n    //\n    const transformed = moveRange._getTransformedBySplitOperation(b);\n    const ranges = [transformed];\n    // Case 5:\n    //\n    // Moved range contains graveyard element used by split operation. Add extra move operation to the result.\n    //\n    if (b.graveyardPosition) {\n        const movesGraveyardElement = moveRange.start.isEqual(b.graveyardPosition) || moveRange.containsPosition(b.graveyardPosition);\n        if (a.howMany > 1 && movesGraveyardElement && !context.aWasUndone) {\n            ranges.push(Range._createFromPositionAndShift(b.insertionPosition, 1));\n        }\n    }\n    return _makeMoveOperationsFromRanges(ranges, newTargetPosition);\n});\nsetTransformation(MoveOperation, MergeOperation, (a, b, context) => {\n    const movedRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n    if (b.deletionPosition.hasSameParentAs(a.sourcePosition) && movedRange.containsPosition(b.sourcePosition)) {\n        if (a.type == 'remove' && !context.forceWeakRemove) {\n            // Case 1:\n            //\n            // The element to remove got merged.\n            //\n            // Merge operation does support merging elements which are not siblings. So it would not be a problem\n            // from technical point of view. However, if the element was removed, the intention of the user\n            // deleting it was to have it all deleted. From user experience point of view, moving back the\n            // removed nodes might be unexpected. This means that in this scenario we will reverse merging and remove the element.\n            //\n            if (!context.aWasUndone) {\n                const results = [];\n                let gyMoveSource = b.graveyardPosition.clone();\n                let splitNodesMoveSource = b.targetPosition._getTransformedByMergeOperation(b);\n                // `a.targetPosition` points to graveyard, so it was probably affected by `b` (which moved merged element to the graveyard).\n                const aTarget = a.targetPosition.getTransformedByOperation(b);\n                if (a.howMany > 1) {\n                    results.push(new MoveOperation(a.sourcePosition, a.howMany - 1, aTarget, 0));\n                    gyMoveSource = gyMoveSource._getTransformedByMove(a.sourcePosition, aTarget, a.howMany - 1);\n                    splitNodesMoveSource = splitNodesMoveSource._getTransformedByMove(a.sourcePosition, aTarget, a.howMany - 1);\n                }\n                const gyMoveTarget = b.deletionPosition._getCombined(a.sourcePosition, aTarget);\n                const gyMove = new MoveOperation(gyMoveSource, 1, gyMoveTarget, 0);\n                const splitNodesMoveTargetPath = gyMove.getMovedRangeStart().path.slice();\n                splitNodesMoveTargetPath.push(0);\n                const splitNodesMoveTarget = new Position(gyMove.targetPosition.root, splitNodesMoveTargetPath);\n                splitNodesMoveSource = splitNodesMoveSource._getTransformedByMove(gyMoveSource, gyMoveTarget, 1);\n                const splitNodesMove = new MoveOperation(splitNodesMoveSource, b.howMany, splitNodesMoveTarget, 0);\n                results.push(gyMove);\n                results.push(splitNodesMove);\n                return results;\n            }\n        }\n        else {\n            // Case 2:\n            //\n            // The element to move got merged and it was the only element to move.\n            // In this case just don't do anything, leave the node in the graveyard. Without special case\n            // it would be a move operation that moves 0 nodes, so maybe it is better just to return no-op.\n            //\n            if (a.howMany == 1) {\n                if (!context.bWasUndone) {\n                    return [new NoOperation(0)];\n                }\n                else {\n                    a.sourcePosition = b.graveyardPosition.clone();\n                    a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n                    return [a];\n                }\n            }\n        }\n    }\n    // The default case.\n    //\n    const moveRange = Range._createFromPositionAndShift(a.sourcePosition, a.howMany);\n    const transformed = moveRange._getTransformedByMergeOperation(b);\n    a.sourcePosition = transformed.start;\n    a.howMany = transformed.end.offset - transformed.start.offset;\n    a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n    return [a];\n});\n// -----------------------\nsetTransformation(RenameOperation, InsertOperation, (a, b) => {\n    a.position = a.position._getTransformedByInsertOperation(b);\n    return [a];\n});\nsetTransformation(RenameOperation, MergeOperation, (a, b) => {\n    // Case 1:\n    //\n    // Element to rename got merged, so it was moved to `b.graveyardPosition`.\n    //\n    if (a.position.isEqual(b.deletionPosition)) {\n        a.position = b.graveyardPosition.clone();\n        a.position.stickiness = 'toNext';\n        return [a];\n    }\n    a.position = a.position._getTransformedByMergeOperation(b);\n    return [a];\n});\nsetTransformation(RenameOperation, MoveOperation, (a, b) => {\n    a.position = a.position._getTransformedByMoveOperation(b);\n    return [a];\n});\nsetTransformation(RenameOperation, RenameOperation, (a, b, context) => {\n    if (a.position.isEqual(b.position)) {\n        if (context.aIsStrong) {\n            a.oldName = b.newName;\n        }\n        else {\n            return [new NoOperation(0)];\n        }\n    }\n    return [a];\n});\nsetTransformation(RenameOperation, SplitOperation, (a, b) => {\n    // Case 1:\n    //\n    // The element to rename has been split. In this case, the new element should be also renamed.\n    //\n    // User decides to change the paragraph to a list item:\n    // <paragraph>Foobar</paragraph>\n    //\n    // However, in meantime, split happens:\n    // <paragraph>Foo</paragraph><paragraph>bar</paragraph>\n    //\n    // As a result, rename both elements:\n    // <listItem>Foo</listItem><listItem>bar</listItem>\n    //\n    const renamePath = a.position.path;\n    const splitPath = b.splitPosition.getParentPath();\n    if (compareArrays(renamePath, splitPath) == 'same' && !b.graveyardPosition) {\n        const extraRename = new RenameOperation(a.position.getShiftedBy(1), a.oldName, a.newName, 0);\n        return [a, extraRename];\n    }\n    // The default case.\n    //\n    a.position = a.position._getTransformedBySplitOperation(b);\n    return [a];\n});\n// -----------------------\nsetTransformation(RootAttributeOperation, RootAttributeOperation, (a, b, context) => {\n    if (a.root === b.root && a.key === b.key) {\n        if (!context.aIsStrong || a.newValue === b.newValue) {\n            return [new NoOperation(0)];\n        }\n        else {\n            a.oldValue = b.newValue;\n        }\n    }\n    return [a];\n});\n// -----------------------\nsetTransformation(RootOperation, RootOperation, (a, b) => {\n    if (a.rootName === b.rootName && a.isAdd === b.isAdd) {\n        return [new NoOperation(0)];\n    }\n    return [a];\n});\n// -----------------------\nsetTransformation(SplitOperation, InsertOperation, (a, b) => {\n    // The default case.\n    //\n    if (a.splitPosition.hasSameParentAs(b.position) && a.splitPosition.offset < b.position.offset) {\n        a.howMany += b.howMany;\n    }\n    a.splitPosition = a.splitPosition._getTransformedByInsertOperation(b);\n    a.insertionPosition = a.insertionPosition._getTransformedByInsertOperation(b);\n    return [a];\n});\nsetTransformation(SplitOperation, MergeOperation, (a, b, context) => {\n    // Case 1:\n    //\n    // Split element got merged. If two different elements were merged, clients will have different content.\n    //\n    // Example. Merge at `{}`, split at `[]`:\n    // <heading>Foo</heading>{}<paragraph>B[]ar</paragraph>\n    //\n    // On merge side it will look like this:\n    // <heading>FooB[]ar</heading>\n    // <heading>FooB</heading><heading>ar</heading>\n    //\n    // On split side it will look like this:\n    // <heading>Foo</heading>{}<paragraph>B</paragraph><paragraph>ar</paragraph>\n    // <heading>FooB</heading><paragraph>ar</paragraph>\n    //\n    // Clearly, the second element is different for both clients.\n    //\n    // We could use the removed merge element from graveyard as a split element but then clients would have a different\n    // model state (in graveyard), because the split side client would still have an element in graveyard (removed by merge).\n    //\n    // To overcome this, in `SplitOperation` x `MergeOperation` transformation we will add additional `SplitOperation`\n    // in the graveyard, which will actually clone the merged-and-deleted element. Then, that cloned element will be\n    // used for splitting. Example below.\n    //\n    // Original state:\n    // <heading>Foo</heading>{}<paragraph>B[]ar</paragraph>\n    //\n    // Merge side client:\n    //\n    // After merge:\n    // <heading>FooB[]ar</heading>                                 graveyard: <paragraph></paragraph>\n    //\n    // Extra split:\n    // <heading>FooB[]ar</heading>                                 graveyard: <paragraph></paragraph><paragraph></paragraph>\n    //\n    // Use the \"cloned\" element from graveyard:\n    // <heading>FooB</heading><paragraph>ar</paragraph>            graveyard: <paragraph></paragraph>\n    //\n    // Split side client:\n    //\n    // After split:\n    // <heading>Foo</heading>{}<paragraph>B</paragraph><paragraph>ar</paragraph>\n    //\n    // After merge:\n    // <heading>FooB</heading><paragraph>ar</paragraph>            graveyard: <paragraph></paragraph>\n    //\n    // This special case scenario only applies if the original split operation clones the split element.\n    // If the original split operation has `graveyardPosition` set, it all doesn't have sense because split operation\n    // knows exactly which element it should use. So there would be no original problem with different contents.\n    //\n    // Additionally, the special case applies only if the merge wasn't already undone.\n    //\n    if (!a.graveyardPosition && !context.bWasUndone && a.splitPosition.hasSameParentAs(b.sourcePosition)) {\n        const splitPath = b.graveyardPosition.path.slice();\n        splitPath.push(0);\n        const splitPosition = new Position(b.graveyardPosition.root, splitPath);\n        const insertionPosition = SplitOperation.getInsertionPosition(new Position(b.graveyardPosition.root, splitPath));\n        const additionalSplit = new SplitOperation(splitPosition, 0, insertionPosition, null, 0);\n        a.splitPosition = a.splitPosition._getTransformedByMergeOperation(b);\n        a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n        a.graveyardPosition = additionalSplit.insertionPosition.clone();\n        a.graveyardPosition.stickiness = 'toNext';\n        return [additionalSplit, a];\n    }\n    // The default case.\n    //\n    if (a.splitPosition.hasSameParentAs(b.deletionPosition) && !a.splitPosition.isAfter(b.deletionPosition)) {\n        a.howMany--;\n    }\n    if (a.splitPosition.hasSameParentAs(b.targetPosition)) {\n        a.howMany += b.howMany;\n    }\n    a.splitPosition = a.splitPosition._getTransformedByMergeOperation(b);\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    if (a.graveyardPosition) {\n        a.graveyardPosition = a.graveyardPosition._getTransformedByMergeOperation(b);\n    }\n    return [a];\n});\nsetTransformation(SplitOperation, MoveOperation, (a, b, context) => {\n    const rangeToMove = Range._createFromPositionAndShift(b.sourcePosition, b.howMany);\n    if (a.graveyardPosition) {\n        // Case 1:\n        //\n        // Split operation graveyard node was moved. In this case move operation is stronger. Since graveyard element\n        // is already moved to the correct position, we need to only move the nodes after the split position.\n        // This will be done by `MoveOperation` instead of `SplitOperation`.\n        //\n        const gyElementMoved = rangeToMove.start.isEqual(a.graveyardPosition) || rangeToMove.containsPosition(a.graveyardPosition);\n        if (!context.bWasUndone && gyElementMoved) {\n            const sourcePosition = a.splitPosition._getTransformedByMoveOperation(b);\n            const newParentPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n            const newTargetPath = newParentPosition.path.slice();\n            newTargetPath.push(0);\n            const newTargetPosition = new Position(newParentPosition.root, newTargetPath);\n            const moveOp = new MoveOperation(sourcePosition, a.howMany, newTargetPosition, 0);\n            return [moveOp];\n        }\n        a.graveyardPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n    }\n    // Case 2:\n    //\n    // Split is at a position where nodes were moved.\n    //\n    // This is a scenario described in `MoveOperation` x `SplitOperation` transformation but from the\n    // \"split operation point of view\".\n    //\n    const splitAtTarget = a.splitPosition.isEqual(b.targetPosition);\n    if (splitAtTarget && (context.baRelation == 'insertAtSource' || context.abRelation == 'splitBefore')) {\n        a.howMany += b.howMany;\n        a.splitPosition = a.splitPosition._getTransformedByDeletion(b.sourcePosition, b.howMany);\n        a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n        return [a];\n    }\n    if (splitAtTarget && context.abRelation && context.abRelation.howMany) {\n        const { howMany, offset } = context.abRelation;\n        a.howMany += howMany;\n        a.splitPosition = a.splitPosition.getShiftedBy(offset);\n        return [a];\n    }\n    // Case 3:\n    //\n    // If the split position is inside the moved range, we need to shift the split position to a proper place.\n    // The position cannot be moved together with moved range because that would result in splitting of an incorrect element.\n    //\n    // Characters `bc` should be moved to the second paragraph while split position is between them:\n    // <paragraph>A[b|c]d</paragraph><paragraph>Xyz</paragraph>\n    //\n    // After move, new split position is incorrect:\n    // <paragraph>Ad</paragraph><paragraph>Xb|cyz</paragraph>\n    //\n    // Correct split position:\n    // <paragraph>A|d</paragraph><paragraph>Xbcyz</paragraph>\n    //\n    // After split:\n    // <paragraph>A</paragraph><paragraph>d</paragraph><paragraph>Xbcyz</paragraph>\n    //\n    if (a.splitPosition.hasSameParentAs(b.sourcePosition) && rangeToMove.containsPosition(a.splitPosition)) {\n        const howManyRemoved = b.howMany - (a.splitPosition.offset - b.sourcePosition.offset);\n        a.howMany -= howManyRemoved;\n        if (a.splitPosition.hasSameParentAs(b.targetPosition) && a.splitPosition.offset < b.targetPosition.offset) {\n            a.howMany += b.howMany;\n        }\n        a.splitPosition = b.sourcePosition.clone();\n        a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n        return [a];\n    }\n    // The default case.\n    // Don't change `howMany` if move operation does not really move anything.\n    //\n    if (!b.sourcePosition.isEqual(b.targetPosition)) {\n        if (a.splitPosition.hasSameParentAs(b.sourcePosition) && a.splitPosition.offset <= b.sourcePosition.offset) {\n            a.howMany -= b.howMany;\n        }\n        if (a.splitPosition.hasSameParentAs(b.targetPosition) && a.splitPosition.offset < b.targetPosition.offset) {\n            a.howMany += b.howMany;\n        }\n    }\n    // Change position stickiness to force a correct transformation.\n    a.splitPosition.stickiness = 'toNone';\n    a.splitPosition = a.splitPosition._getTransformedByMoveOperation(b);\n    a.splitPosition.stickiness = 'toNext';\n    if (a.graveyardPosition) {\n        a.insertionPosition = a.insertionPosition._getTransformedByMoveOperation(b);\n    }\n    else {\n        a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    }\n    return [a];\n});\nsetTransformation(SplitOperation, SplitOperation, (a, b, context) => {\n    // Case 1:\n    //\n    // Split at the same position.\n    //\n    // If there already was a split at the same position as in `a` operation, it means that the intention\n    // conveyed by `a` operation has already been fulfilled and `a` should not do anything (to avoid double split).\n    //\n    // However, there is a difference if these are new splits or splits created by undo. These have different\n    // intentions. Also splits moving back different elements from graveyard have different intentions. They\n    // are just different operations.\n    //\n    // So we cancel split operation only if it was really identical.\n    //\n    // Also, there is additional case, where split operations aren't identical and should not be cancelled, however the\n    // default transformation is incorrect too.\n    //\n    if (a.splitPosition.isEqual(b.splitPosition)) {\n        if (!a.graveyardPosition && !b.graveyardPosition) {\n            return [new NoOperation(0)];\n        }\n        if (a.graveyardPosition && b.graveyardPosition && a.graveyardPosition.isEqual(b.graveyardPosition)) {\n            return [new NoOperation(0)];\n        }\n        // Use context to know that the `a.splitPosition` should stay where it is.\n        // This happens during undo when first a merge operation moved nodes to `a.splitPosition` and now `b` operation undoes that merge.\n        if (context.abRelation == 'splitBefore') {\n            // Since split is at the same position, there are no nodes left to split.\n            a.howMany = 0;\n            // Note: there was `if ( a.graveyardPosition )` here but it was uncovered in tests and I couldn't find any scenarios for now.\n            // That would have to be a `SplitOperation` that didn't come from undo but is transformed by operations that were undone.\n            // It could happen if `context` is enabled in collaboration.\n            a.graveyardPosition = a.graveyardPosition._getTransformedBySplitOperation(b);\n            return [a];\n        }\n    }\n    // Case 2:\n    //\n    // Same node is using to split different elements. This happens in undo when previously same element was merged to\n    // two different elements. This is described in `MergeOperation` x `MergeOperation` transformation.\n    //\n    // In this case we will follow the same logic. We will assume that `insertionPosition` is same for both\n    // split operations. This might not always be true but in the real cases that were experienced it was. After all,\n    // if these splits are reverses of merge operations that were merging the same element, then the `insertionPosition`\n    // should be same for both of those splits.\n    //\n    // Again, we will decide which operation is stronger by checking if split happens in graveyard or in non-graveyard root.\n    //\n    if (a.graveyardPosition && b.graveyardPosition && a.graveyardPosition.isEqual(b.graveyardPosition)) {\n        const aInGraveyard = a.splitPosition.root.rootName == '$graveyard';\n        const bInGraveyard = b.splitPosition.root.rootName == '$graveyard';\n        // If `aIsWeak` it means that `a` points to graveyard while `b` doesn't. Don't move nodes then.\n        const aIsWeak = aInGraveyard && !bInGraveyard;\n        // If `bIsWeak` it means that `b` points to graveyard while `a` doesn't. Force moving nodes then.\n        const bIsWeak = bInGraveyard && !aInGraveyard;\n        // Force move if `b` is weak or neither operation is weak but `a` is stronger through `context.aIsStrong`.\n        const forceMove = bIsWeak || (!aIsWeak && context.aIsStrong);\n        if (forceMove) {\n            const result = [];\n            // First we need to move any nodes split by `b` back to where they were.\n            // Do it only if `b` actually moved something.\n            if (b.howMany) {\n                result.push(new MoveOperation(b.moveTargetPosition, b.howMany, b.splitPosition, 0));\n            }\n            // Then we need to move nodes from `a` split position to their new element.\n            // Do it only if `a` actually should move something.\n            if (a.howMany) {\n                result.push(new MoveOperation(a.splitPosition, a.howMany, a.moveTargetPosition, 0));\n            }\n            return result;\n        }\n        else {\n            return [new NoOperation(0)];\n        }\n    }\n    if (a.graveyardPosition) {\n        a.graveyardPosition = a.graveyardPosition._getTransformedBySplitOperation(b);\n    }\n    // Case 3:\n    //\n    // Position where operation `b` inserted a new node after split is the same as the operation `a` split position.\n    // As in similar cases, there is ambiguity if the split should be before the new node (created by `b`) or after.\n    //\n    if (a.splitPosition.isEqual(b.insertionPosition) && context.abRelation == 'splitBefore') {\n        a.howMany++;\n        return [a];\n    }\n    // Case 4:\n    //\n    // This is a mirror to the case 2. above.\n    //\n    if (b.splitPosition.isEqual(a.insertionPosition) && context.baRelation == 'splitBefore') {\n        const newPositionPath = b.insertionPosition.path.slice();\n        newPositionPath.push(0);\n        const newPosition = new Position(b.insertionPosition.root, newPositionPath);\n        const moveOp = new MoveOperation(a.insertionPosition, 1, newPosition, 0);\n        return [a, moveOp];\n    }\n    // The default case.\n    //\n    if (a.splitPosition.hasSameParentAs(b.splitPosition) && a.splitPosition.offset < b.splitPosition.offset) {\n        a.howMany -= b.howMany;\n    }\n    a.splitPosition = a.splitPosition._getTransformedBySplitOperation(b);\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    return [a];\n});\n/**\n * Checks whether `MoveOperation` `targetPosition` is inside a node from the moved range of the other `MoveOperation`.\n */\nfunction _moveTargetIntoMovedRange(a, b) {\n    return a.targetPosition._getTransformedByDeletion(b.sourcePosition, b.howMany) === null;\n}\n/**\n * Helper function for `MoveOperation` x `MoveOperation` transformation. Converts given ranges and target position to\n * move operations and returns them.\n *\n * Ranges and target position will be transformed on-the-fly when generating operations.\n *\n * Given `ranges` should be in the order of how they were in the original transformed operation.\n *\n * Given `targetPosition` is the target position of the first range from `ranges`.\n */\nfunction _makeMoveOperationsFromRanges(ranges, targetPosition) {\n    // At this moment we have some ranges and a target position, to which those ranges should be moved.\n    // Order in `ranges` array is the go-to order of after transformation.\n    //\n    // We are almost done. We have `ranges` and `targetPosition` to make operations from.\n    // Unfortunately, those operations may affect each other. Precisely, first operation after move\n    // may affect source range and target position of second and third operation. Same with second\n    // operation affecting third.\n    //\n    // We need to fix those source ranges and target positions once again, before converting `ranges` to operations.\n    const operations = [];\n    // Keep in mind that nothing will be transformed if there is just one range in `ranges`.\n    for (let i = 0; i < ranges.length; i++) {\n        // Create new operation out of a range and target position.\n        const range = ranges[i];\n        const op = new MoveOperation(range.start, range.end.offset - range.start.offset, targetPosition, 0);\n        operations.push(op);\n        // Transform other ranges by the generated operation.\n        for (let j = i + 1; j < ranges.length; j++) {\n            // All ranges in `ranges` array should be:\n            //\n            // * non-intersecting (these are part of original operation source range), and\n            // * `targetPosition` does not target into them (opposite would mean that transformed operation targets \"inside itself\").\n            //\n            // This means that the transformation will be \"clean\" and always return one result.\n            ranges[j] = ranges[j]._getTransformedByMove(op.sourcePosition, op.targetPosition, op.howMany)[0];\n        }\n        targetPosition = targetPosition._getTransformedByMove(op.sourcePosition, op.targetPosition, op.howMany);\n    }\n    return operations;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/liveposition\n */\nimport Position from './position.js';\nimport { CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * `LivePosition` is a type of {@link module:engine/model/position~Position Position}\n * that updates itself as {@link module:engine/model/document~Document document}\n * is changed through operations. It may be used as a bookmark.\n *\n * **Note:** Contrary to {@link module:engine/model/position~Position}, `LivePosition` works only in roots that are\n * {@link module:engine/model/rootelement~RootElement}.\n * If {@link module:engine/model/documentfragment~DocumentFragment} is passed, error will be thrown.\n *\n * **Note:** Be very careful when dealing with `LivePosition`. Each `LivePosition` instance bind events that might\n * have to be unbound.\n * Use {@link module:engine/model/liveposition~LivePosition#detach} whenever you don't need `LivePosition` anymore.\n */\nexport default class LivePosition extends /* #__PURE__ */ EmitterMixin(Position) {\n    /**\n     * Creates a live position.\n     *\n     * @see module:engine/model/position~Position\n     */\n    constructor(root, path, stickiness = 'toNone') {\n        super(root, path, stickiness);\n        if (!this.root.is('rootElement')) {\n            /**\n             * LivePosition's root has to be an instance of RootElement.\n             *\n             * @error model-liveposition-root-not-rootelement\n             */\n            throw new CKEditorError('model-liveposition-root-not-rootelement', root);\n        }\n        bindWithDocument.call(this);\n    }\n    /**\n     * Unbinds all events previously bound by `LivePosition`. Use it whenever you don't need `LivePosition` instance\n     * anymore (i.e. when leaving scope in which it was declared or before re-assigning variable that was\n     * referring to it).\n     */\n    detach() {\n        this.stopListening();\n    }\n    /**\n     * Creates a {@link module:engine/model/position~Position position instance}, which is equal to this live position.\n     */\n    toPosition() {\n        return new Position(this.root, this.path.slice(), this.stickiness);\n    }\n    /**\n     * Creates a `LivePosition` instance that is equal to position.\n     */\n    static fromPosition(position, stickiness) {\n        return new this(position.root, position.path.slice(), stickiness ? stickiness : position.stickiness);\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nLivePosition.prototype.is = function (type) {\n    return type === 'livePosition' || type === 'model:livePosition' ||\n        // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n        type == 'position' || type === 'model:position';\n};\n/**\n * Binds this `LivePosition` to the {@link module:engine/model/document~Document document} that owns\n * this position's {@link module:engine/model/position~Position#root root}.\n */\nfunction bindWithDocument() {\n    this.listenTo(this.root.document.model, 'applyOperation', (event, args) => {\n        const operation = args[0];\n        if (!operation.isDocumentOperation) {\n            return;\n        }\n        transform.call(this, operation);\n    }, { priority: 'low' });\n}\n/**\n * Updates this position accordingly to the updates applied to the model. Bases on change events.\n */\nfunction transform(operation) {\n    const result = this.getTransformedByOperation(operation);\n    if (!this.isEqual(result)) {\n        const oldPosition = this.toPosition();\n        this.path = result.path;\n        this.root = result.root;\n        this.fire('change', oldPosition);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/batch\n */\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\n/**\n * A batch instance groups model changes ({@link module:engine/model/operation/operation~Operation operations}). All operations\n * grouped in a single batch can be reverted together, so you can also think about a batch as of a single undo step. If you want\n * to extend a given undo step, you can add more changes to the batch using {@link module:engine/model/model~Model#enqueueChange}:\n *\n * ```ts\n * model.enqueueChange( batch, writer => {\n * \twriter.insertText( 'foo', paragraph, 'end' );\n * } );\n * ```\n *\n * @see module:engine/model/model~Model#enqueueChange\n * @see module:engine/model/model~Model#change\n */\nexport default class Batch {\n    /**\n     * Creates a batch instance.\n     *\n     * @see module:engine/model/model~Model#enqueueChange\n     * @see module:engine/model/model~Model#change\n     * @param type A set of flags that specify the type of the batch. Batch type can alter how some of the features work\n     * when encountering a given `Batch` instance (for example, when a feature listens to applied operations).\n     */\n    constructor(type = {}) {\n        if (typeof type === 'string') {\n            type = type === 'transparent' ? { isUndoable: false } : {};\n            /**\n             * The string value for a `type` property of the `Batch` constructor has been deprecated and will be removed in the near future.\n             * Please refer to the {@link module:engine/model/batch~Batch#constructor `Batch` constructor API documentation} for more\n             * information.\n             *\n             * @error batch-constructor-deprecated-string-type\n             */\n            logWarning('batch-constructor-deprecated-string-type');\n        }\n        const { isUndoable = true, isLocal = true, isUndo = false, isTyping = false } = type;\n        this.operations = [];\n        this.isUndoable = isUndoable;\n        this.isLocal = isLocal;\n        this.isUndo = isUndo;\n        this.isTyping = isTyping;\n    }\n    /**\n     * The type of the batch.\n     *\n     * **This property has been deprecated and is always set to the `'default'` value.**\n     *\n     * It can be one of the following values:\n     * * `'default'` &ndash; All \"normal\" batches. This is the most commonly used type.\n     * * `'transparent'` &ndash; A batch that should be ignored by other features, i.e. an initial batch or collaborative editing\n     * changes.\n     *\n     * @deprecated\n     */\n    get type() {\n        /**\n         * The {@link module:engine/model/batch~Batch#type `Batch#type` } property has been deprecated and will be removed in the near\n         * future. Use `Batch#isLocal`, `Batch#isUndoable`, `Batch#isUndo` and `Batch#isTyping` instead.\n         *\n         * @error batch-type-deprecated\n         */\n        logWarning('batch-type-deprecated');\n        return 'default';\n    }\n    /**\n     * Returns the base version of this batch, which is equal to the base version of the first operation in the batch.\n     * If there are no operations in the batch or neither operation has the base version set, it returns `null`.\n     */\n    get baseVersion() {\n        for (const op of this.operations) {\n            if (op.baseVersion !== null) {\n                return op.baseVersion;\n            }\n        }\n        return null;\n    }\n    /**\n     * Adds an operation to the batch instance.\n     *\n     * @param operation An operation to add.\n     * @returns The added operation.\n     */\n    addOperation(operation) {\n        operation.batch = this;\n        this.operations.push(operation);\n        return operation;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/differ\n */\nimport Position from './position.js';\nimport Range from './range.js';\n/**\n * Calculates the difference between two model states.\n *\n * Receives operations that are to be applied on the model document. Marks parts of the model document tree which\n * are changed and saves the state of these elements before the change. Then, it compares saved elements with the\n * changed elements, after all changes are applied on the model document. Calculates the diff between saved\n * elements and new ones and returns a change set.\n */\nclass Differ {\n    /**\n     * Creates a `Differ` instance.\n     *\n     * @param markerCollection Model's marker collection.\n     */\n    constructor(markerCollection) {\n        /**\n         * A map that stores changes that happened in a given element.\n         *\n         * The keys of the map are references to the model elements.\n         * The values of the map are arrays with changes that were done on this element.\n         */\n        this._changesInElement = new Map();\n        /**\n         * Stores a snapshot for these model nodes that might have changed.\n         *\n         * This complements {@link ~Differ#_elementChildrenSnapshots `_elementChildrenSnapshots`}.\n         *\n         * See also {@link ~DifferSnapshot}.\n         */\n        this._elementsSnapshots = new Map();\n        /**\n         * For each element or document fragment inside which there was a change, it stores a snapshot of the child nodes list (an array\n         * of children snapshots that represent the state in the element / fragment before any change has happened).\n         *\n         * This complements {@link ~Differ#_elementsSnapshots `_elementsSnapshots`}.\n         *\n         * See also {@link ~DifferSnapshot}.\n         */\n        this._elementChildrenSnapshots = new Map();\n        /**\n         * Keeps the state for a given element, describing how the element was changed so far. It is used to evaluate the `action` property\n         * of diff items returned by {@link ~Differ#getChanges}.\n         *\n         * Possible values, in the order from the lowest priority to the highest priority:\n         *\n         * * `'refresh'` - element was refreshed,\n         * * `'rename'` - element was renamed,\n         * * `'move'` - element was moved (or, usually, removed, that is moved to the graveyard).\n         *\n         * Element that was refreshed, may change its state to `'rename'` if it was later renamed, or to `'move'` if it was removed.\n         * But the element cannot change its state from `'move'` to `'rename'`, or from `'rename'` to `'refresh'`.\n         *\n         * Only already existing elements are registered in `_elementState`. If a new element was inserted as a result of a buffered operation,\n         * it is not be registered in `_elementState`.\n         */\n        this._elementState = new Map();\n        /**\n         * A map that stores all changed markers.\n         *\n         * The keys of the map are marker names.\n         *\n         * The values of the map are objects with the following properties:\n         *\n         * * `oldMarkerData`,\n         * * `newMarkerData`.\n         */\n        this._changedMarkers = new Map();\n        /**\n         * A map that stores all roots that have been changed.\n         *\n         * The keys are the names of the roots while value represents the changes.\n         */\n        this._changedRoots = new Map();\n        /**\n         * Stores the number of changes that were processed. Used to order the changes chronologically. It is important\n         * when changes are sorted.\n         */\n        this._changeCount = 0;\n        /**\n         * For efficiency purposes, `Differ` stores the change set returned by the differ after {@link #getChanges} call.\n         * Cache is reset each time a new operation is buffered. If the cache has not been reset, {@link #getChanges} will\n         * return the cached value instead of calculating it again.\n         *\n         * This property stores those changes that did not take place in graveyard root.\n         */\n        this._cachedChanges = null;\n        /**\n         * For efficiency purposes, `Differ` stores the change set returned by the differ after the {@link #getChanges} call.\n         * The cache is reset each time a new operation is buffered. If the cache has not been reset, {@link #getChanges} will\n         * return the cached value instead of calculating it again.\n         *\n         * This property stores all changes evaluated by `Differ`, including those that took place in the graveyard.\n         */\n        this._cachedChangesWithGraveyard = null;\n        /**\n         * Set of model items that were marked to get refreshed in {@link #_refreshItem}.\n         */\n        this._refreshedItems = new Set();\n        this._markerCollection = markerCollection;\n    }\n    /**\n     * Informs whether there are any changes buffered in `Differ`.\n     */\n    get isEmpty() {\n        return this._changesInElement.size == 0 && this._changedMarkers.size == 0 && this._changedRoots.size == 0;\n    }\n    /**\n     * Buffers the given operation. **An operation has to be buffered before it is executed.**\n     *\n     * @param operationToBuffer An operation to buffer.\n     */\n    bufferOperation(operationToBuffer) {\n        // Below we take an operation, check its type, then use its parameters in marking (private) methods.\n        // The general rule is to not mark elements inside inserted element. All inserted elements are re-rendered.\n        // Marking changes in them would cause a \"double\" changing then.\n        //\n        const operation = operationToBuffer;\n        // Note: an operation that happens inside a non-loaded root will be ignored. If the operation happens partially inside\n        // a non-loaded root, that part will be ignored (this may happen for move or marker operations).\n        //\n        switch (operation.type) {\n            case 'insert': {\n                if (this._isInInsertedElement(operation.position.parent)) {\n                    return;\n                }\n                this._markInsert(operation.position.parent, operation.position.offset, operation.nodes.maxOffset);\n                break;\n            }\n            case 'addAttribute':\n            case 'removeAttribute':\n            case 'changeAttribute': {\n                for (const item of operation.range.getItems({ shallow: true })) {\n                    if (this._isInInsertedElement(item.parent)) {\n                        continue;\n                    }\n                    this._markAttribute(item);\n                }\n                break;\n            }\n            case 'remove':\n            case 'move':\n            case 'reinsert': {\n                // When range is moved to the same position then not mark it as a change.\n                // See: https://github.com/ckeditor/ckeditor5-engine/issues/1664.\n                if (operation.sourcePosition.isEqual(operation.targetPosition) ||\n                    operation.sourcePosition.getShiftedBy(operation.howMany).isEqual(operation.targetPosition)) {\n                    return;\n                }\n                const sourceParentInserted = this._isInInsertedElement(operation.sourcePosition.parent);\n                const targetParentInserted = this._isInInsertedElement(operation.targetPosition.parent);\n                if (!sourceParentInserted) {\n                    this._markRemove(operation.sourcePosition.parent, operation.sourcePosition.offset, operation.howMany);\n                }\n                if (!targetParentInserted) {\n                    this._markInsert(operation.targetPosition.parent, operation.getMovedRangeStart().offset, operation.howMany);\n                }\n                // Remember -- operation is buffered before it is executed. So, it was not executed yet.\n                const range = Range._createFromPositionAndShift(operation.sourcePosition, operation.howMany);\n                for (const node of range.getItems({ shallow: true })) {\n                    this._setElementState(node, 'move');\n                }\n                break;\n            }\n            case 'rename': {\n                if (this._isInInsertedElement(operation.position.parent)) {\n                    return;\n                }\n                this._markRemove(operation.position.parent, operation.position.offset, 1);\n                this._markInsert(operation.position.parent, operation.position.offset, 1);\n                const range = Range._createFromPositionAndShift(operation.position, 1);\n                for (const marker of this._markerCollection.getMarkersIntersectingRange(range)) {\n                    const markerData = marker.getData();\n                    this.bufferMarkerChange(marker.name, markerData, markerData);\n                }\n                this._setElementState(operation.position.nodeAfter, 'rename');\n                break;\n            }\n            case 'split': {\n                const splitElement = operation.splitPosition.parent;\n                // Mark that children of the split element were removed.\n                if (!this._isInInsertedElement(splitElement)) {\n                    this._markRemove(splitElement, operation.splitPosition.offset, operation.howMany);\n                    // Remember -- operation is buffered before it is executed. So, it was not executed yet.\n                    const range = Range._createFromPositionAndShift(operation.splitPosition, operation.howMany);\n                    for (const node of range.getItems({ shallow: true })) {\n                        this._setElementState(node, 'move');\n                    }\n                }\n                // Mark that the new element (split copy) was inserted.\n                if (!this._isInInsertedElement(operation.insertionPosition.parent)) {\n                    this._markInsert(operation.insertionPosition.parent, operation.insertionPosition.offset, 1);\n                }\n                // If the split took the element from the graveyard, mark that the element from the graveyard was removed.\n                if (operation.graveyardPosition) {\n                    this._markRemove(operation.graveyardPosition.parent, operation.graveyardPosition.offset, 1);\n                    this._setElementState(operation.graveyardPosition.nodeAfter, 'move');\n                }\n                break;\n            }\n            case 'merge': {\n                // Mark that the merged element was removed.\n                const mergedElement = operation.sourcePosition.parent;\n                if (!this._isInInsertedElement(mergedElement.parent)) {\n                    this._markRemove(mergedElement.parent, mergedElement.startOffset, 1);\n                }\n                // Mark that the merged element was inserted into graveyard.\n                const graveyardParent = operation.graveyardPosition.parent;\n                this._markInsert(graveyardParent, operation.graveyardPosition.offset, 1);\n                this._setElementState(mergedElement, 'move');\n                // Mark that children of merged element were inserted at new parent.\n                const mergedIntoElement = operation.targetPosition.parent;\n                if (!this._isInInsertedElement(mergedIntoElement)) {\n                    this._markInsert(mergedIntoElement, operation.targetPosition.offset, mergedElement.maxOffset);\n                    // Remember -- operation is buffered before it is executed. So, it was not executed yet.\n                    const range = Range._createFromPositionAndShift(operation.sourcePosition, operation.howMany);\n                    for (const node of range.getItems({ shallow: true })) {\n                        this._setElementState(node, 'move');\n                    }\n                }\n                break;\n            }\n            case 'detachRoot':\n            case 'addRoot': {\n                const root = operation.affectedSelectable;\n                if (!root._isLoaded) {\n                    return;\n                }\n                // Don't buffer if the root state does not change.\n                if (root.isAttached() == operation.isAdd) {\n                    return;\n                }\n                this._bufferRootStateChange(operation.rootName, operation.isAdd);\n                break;\n            }\n            case 'addRootAttribute':\n            case 'removeRootAttribute':\n            case 'changeRootAttribute': {\n                if (!operation.root._isLoaded) {\n                    return;\n                }\n                const rootName = operation.root.rootName;\n                this._bufferRootAttributeChange(rootName, operation.key, operation.oldValue, operation.newValue);\n                break;\n            }\n        }\n        // Clear cache after each buffered operation as it is no longer valid.\n        this._cachedChanges = null;\n    }\n    /**\n     * Buffers a marker change.\n     *\n     * @param markerName The name of the marker that changed.\n     * @param oldMarkerData Marker data before the change.\n     * @param newMarkerData Marker data after the change.\n     */\n    bufferMarkerChange(markerName, oldMarkerData, newMarkerData) {\n        if (oldMarkerData.range && oldMarkerData.range.root.is('rootElement') && !oldMarkerData.range.root._isLoaded) {\n            oldMarkerData.range = null;\n        }\n        if (newMarkerData.range && newMarkerData.range.root.is('rootElement') && !newMarkerData.range.root._isLoaded) {\n            newMarkerData.range = null;\n        }\n        let buffered = this._changedMarkers.get(markerName);\n        if (!buffered) {\n            buffered = { newMarkerData, oldMarkerData };\n            this._changedMarkers.set(markerName, buffered);\n        }\n        else {\n            buffered.newMarkerData = newMarkerData;\n        }\n        if (buffered.oldMarkerData.range == null && newMarkerData.range == null) {\n            // The marker is going to be removed (`newMarkerData.range == null`) but it did not exist before the first buffered change\n            // (`buffered.oldMarkerData.range == null`). In this case, do not keep the marker in buffer at all.\n            this._changedMarkers.delete(markerName);\n        }\n    }\n    /**\n     * Returns all markers that should be removed as a result of buffered changes.\n     *\n     * @returns Markers to remove. Each array item is an object containing the `name` and `range` properties.\n     */\n    getMarkersToRemove() {\n        const result = [];\n        for (const [name, change] of this._changedMarkers) {\n            if (change.oldMarkerData.range != null) {\n                result.push({ name, range: change.oldMarkerData.range });\n            }\n        }\n        return result;\n    }\n    /**\n     * Returns all markers which should be added as a result of buffered changes.\n     *\n     * @returns Markers to add. Each array item is an object containing the `name` and `range` properties.\n     */\n    getMarkersToAdd() {\n        const result = [];\n        for (const [name, change] of this._changedMarkers) {\n            if (change.newMarkerData.range != null) {\n                result.push({ name, range: change.newMarkerData.range });\n            }\n        }\n        return result;\n    }\n    /**\n     * Returns all markers which changed.\n     */\n    getChangedMarkers() {\n        return Array.from(this._changedMarkers).map(([name, change]) => ({\n            name,\n            data: {\n                oldRange: change.oldMarkerData.range,\n                newRange: change.newMarkerData.range\n            }\n        }));\n    }\n    /**\n     * Checks whether some of the buffered changes affect the editor data.\n     *\n     * Types of changes which affect the editor data:\n     *\n     * * model structure changes,\n     * * attribute changes,\n     * * a root is added or detached,\n     * * changes of markers which were defined as `affectsData`,\n     * * changes of markers' `affectsData` property.\n     */\n    hasDataChanges() {\n        if (this.getChanges().length) {\n            return true;\n        }\n        if (this._changedRoots.size > 0) {\n            return true;\n        }\n        for (const { newMarkerData, oldMarkerData } of this._changedMarkers.values()) {\n            if (newMarkerData.affectsData !== oldMarkerData.affectsData) {\n                return true;\n            }\n            if (newMarkerData.affectsData) {\n                const markerAdded = newMarkerData.range && !oldMarkerData.range;\n                const markerRemoved = !newMarkerData.range && oldMarkerData.range;\n                const markerChanged = newMarkerData.range && oldMarkerData.range && !newMarkerData.range.isEqual(oldMarkerData.range);\n                if (markerAdded || markerRemoved || markerChanged) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n    /**\n     * Calculates the diff between the old model tree state (the state before the first buffered operations since the last {@link #reset}\n     * call) and the new model tree state (actual one). It should be called after all buffered operations are executed.\n     *\n     * The diff set is returned as an array of {@link module:engine/model/differ~DiffItem diff items}, each describing a change done\n     * on the model. The items are sorted by the position on which the change happened. If a position\n     * {@link module:engine/model/position~Position#isBefore is before} another one, it will be on an earlier index in the diff set.\n     *\n     * **Note**: Elements inside inserted element will not have a separate diff item, only the top most element change will be reported.\n     *\n     * Because calculating the diff is a costly operation, the result is cached. If no new operation was buffered since the\n     * previous {@link #getChanges} call, the next call will return the cached value.\n     *\n     * @param options Additional options.\n     * @param options.includeChangesInGraveyard If set to `true`, also changes that happened\n     * in the graveyard root will be returned. By default, changes in the graveyard root are not returned.\n     * @returns Diff between the old and the new model tree state.\n     */\n    getChanges(options = {}) {\n        // If there are cached changes, just return them instead of calculating changes again.\n        if (this._cachedChanges) {\n            if (options.includeChangesInGraveyard) {\n                return this._cachedChangesWithGraveyard.slice();\n            }\n            else {\n                return this._cachedChanges.slice();\n            }\n        }\n        // Will contain returned results.\n        let diffSet = [];\n        // Check all changed elements/roots.\n        for (const element of this._changesInElement.keys()) {\n            // Get changes inside this element/root and sort them.\n            const changes = this._changesInElement.get(element).sort((a, b) => {\n                if (a.offset === b.offset) {\n                    if (a.type != b.type) {\n                        // If there are multiple changes at the same position, \"remove\" change should be first.\n                        // If the order is different, for example, we would first add some nodes and then removed them\n                        // (instead of the nodes that we should remove).\n                        return a.type == 'remove' ? -1 : 1;\n                    }\n                    return 0;\n                }\n                return a.offset < b.offset ? -1 : 1;\n            });\n            // Get children of this element before any change was applied on it.\n            const childrenBefore = this._elementChildrenSnapshots.get(element);\n            // Get snapshot of current element's children.\n            const childrenAfter = _getChildrenSnapshots(element.getChildren());\n            // Generate diff instructions based on changes done in the element/root.\n            const diffInstructions = _generateDiffInstructionsFromChanges(childrenBefore.length, changes);\n            let i = 0; // Iterator in `childrenAfter` array -- iterates through current children of element.\n            let j = 0; // Iterator in `childrenBefore` array -- iterates through old children of element.\n            // Process every action.\n            for (const instruction of diffInstructions) {\n                if (instruction === 'i') {\n                    const action = this._getDiffActionForNode(childrenAfter[i].node, 'insert');\n                    const childSnapshotBefore = this._elementsSnapshots.get(childrenAfter[i].node);\n                    const diffItem = this._getInsertDiff(element, i, action, childrenAfter[i], childSnapshotBefore);\n                    diffSet.push(diffItem);\n                    i++;\n                }\n                else if (instruction === 'r') {\n                    const action = this._getDiffActionForNode(childrenBefore[j].node, 'remove');\n                    const diffItem = this._getRemoveDiff(element, i, action, childrenBefore[j]);\n                    diffSet.push(diffItem);\n                    j++;\n                }\n                else if (instruction === 'a') {\n                    // Take attributes from saved and current children.\n                    const beforeAttributes = childrenBefore[j].attributes;\n                    const afterAttributes = childrenAfter[i].attributes;\n                    let range;\n                    if (childrenAfter[i].name == '$text') {\n                        range = new Range(Position._createAt(element, i), Position._createAt(element, i + 1));\n                    }\n                    else {\n                        const index = element.offsetToIndex(i);\n                        range = new Range(Position._createAt(element, i), Position._createAt(element.getChild(index), 0));\n                    }\n                    // Generate diff items for this change (there might be multiple attributes changed and\n                    // there is a single diff for each of them) and insert them into the diff set.\n                    const diffItems = this._getAttributesDiff(range, beforeAttributes, afterAttributes);\n                    diffSet.push(...diffItems);\n                    i++;\n                    j++;\n                }\n                else {\n                    // `action` is 'equal'. Child not changed.\n                    i++;\n                    j++;\n                }\n            }\n        }\n        // Then, sort the changes by the position (change at position before other changes is first).\n        diffSet.sort((a, b) => {\n            // If the change is in different root, we don't care much, but we'd like to have all changes in given\n            // root \"together\" in the array. So let's just sort them by the root name. It does not matter which root\n            // will be processed first.\n            if (a.position.root != b.position.root) {\n                return a.position.root.rootName < b.position.root.rootName ? -1 : 1;\n            }\n            // If change happens at the same position...\n            if (a.position.isEqual(b.position)) {\n                // Keep chronological order of operations.\n                return a.changeCount - b.changeCount;\n            }\n            // If positions differ, position \"on the left\" should be earlier in the result.\n            return a.position.isBefore(b.position) ? -1 : 1;\n        });\n        // Glue together multiple changes (mostly on text nodes).\n        for (let i = 1, prevIndex = 0; i < diffSet.length; i++) {\n            const prevDiff = diffSet[prevIndex];\n            const thisDiff = diffSet[i];\n            // Glue remove changes if they happen on text on same position.\n            const isConsecutiveTextRemove = prevDiff.type == 'remove' && thisDiff.type == 'remove' &&\n                prevDiff.name == '$text' && thisDiff.name == '$text' &&\n                prevDiff.position.isEqual(thisDiff.position);\n            // Glue insert changes if they happen on text on consecutive fragments.\n            const isConsecutiveTextAdd = prevDiff.type == 'insert' && thisDiff.type == 'insert' &&\n                prevDiff.name == '$text' && thisDiff.name == '$text' &&\n                prevDiff.position.parent == thisDiff.position.parent &&\n                prevDiff.position.offset + prevDiff.length == thisDiff.position.offset;\n            // Glue attribute changes if they happen on consecutive fragments and have same key, old value and new value.\n            const isConsecutiveAttributeChange = prevDiff.type == 'attribute' && thisDiff.type == 'attribute' &&\n                prevDiff.position.parent == thisDiff.position.parent &&\n                prevDiff.range.isFlat && thisDiff.range.isFlat &&\n                (prevDiff.position.offset + prevDiff.length) == thisDiff.position.offset &&\n                prevDiff.attributeKey == thisDiff.attributeKey &&\n                prevDiff.attributeOldValue == thisDiff.attributeOldValue &&\n                prevDiff.attributeNewValue == thisDiff.attributeNewValue;\n            if (isConsecutiveTextRemove || isConsecutiveTextAdd || isConsecutiveAttributeChange) {\n                prevDiff.length++;\n                if (isConsecutiveAttributeChange) {\n                    prevDiff.range.end = prevDiff.range.end.getShiftedBy(1);\n                }\n                diffSet[i] = null;\n            }\n            else {\n                prevIndex = i;\n            }\n        }\n        diffSet = diffSet.filter(v => v);\n        // Remove `changeCount` property from diff items. It is used only for sorting and is internal thing.\n        for (const item of diffSet) {\n            delete item.changeCount;\n            if (item.type == 'attribute') {\n                delete item.position;\n                delete item.length;\n            }\n        }\n        this._changeCount = 0;\n        // Cache changes.\n        this._cachedChangesWithGraveyard = diffSet;\n        this._cachedChanges = diffSet.filter(_changesInGraveyardFilter);\n        if (options.includeChangesInGraveyard) {\n            return this._cachedChangesWithGraveyard.slice();\n        }\n        else {\n            return this._cachedChanges.slice();\n        }\n    }\n    /**\n     * Returns all roots that have changed (either were attached, or detached, or their attributes changed).\n     *\n     * @returns Diff between the old and the new roots state.\n     */\n    getChangedRoots() {\n        return Array.from(this._changedRoots.values()).map(diffItem => {\n            const entry = { ...diffItem };\n            if (entry.state !== undefined) {\n                // The root was attached or detached -- do not return its attributes changes.\n                // If the root was attached, it should be handled as a whole, together with its attributes, the same way as model nodes.\n                // If the root was detached, its attributes should be discarded anyway.\n                //\n                // Keep in mind that filtering must happen on this stage (when retrieving changes). If filtering happens on-the-fly as\n                // the attributes change, it may lead to incorrect situation, e.g.: detach root, change attribute, re-attach root.\n                // In this case, attribute change cannot be filtered. After the root is re-attached, the attribute change must be kept.\n                delete entry.attributes;\n            }\n            return entry;\n        });\n    }\n    /**\n     * Returns a set of model items that were marked to get refreshed.\n     */\n    getRefreshedItems() {\n        return new Set(this._refreshedItems);\n    }\n    /**\n     * Resets `Differ`. Removes all buffered changes.\n     */\n    reset() {\n        this._changesInElement.clear();\n        this._elementChildrenSnapshots.clear();\n        this._elementsSnapshots.clear();\n        this._elementState.clear();\n        this._changedMarkers.clear();\n        this._changedRoots.clear();\n        this._refreshedItems.clear();\n        this._cachedChanges = null;\n    }\n    /**\n     * Marks the given `item` in differ to be \"refreshed\". It means that the item will be marked as removed and inserted\n     * in the differ changes set, so it will be effectively re-converted when the differ changes are handled by a dispatcher.\n     *\n     * @internal\n     * @param item Item to refresh.\n     */\n    _refreshItem(item) {\n        if (this._isInInsertedElement(item.parent)) {\n            return;\n        }\n        this._markRemove(item.parent, item.startOffset, item.offsetSize);\n        this._markInsert(item.parent, item.startOffset, item.offsetSize);\n        this._refreshedItems.add(item);\n        this._setElementState(item, 'refresh');\n        const range = Range._createOn(item);\n        for (const marker of this._markerCollection.getMarkersIntersectingRange(range)) {\n            const markerData = marker.getData();\n            this.bufferMarkerChange(marker.name, markerData, markerData);\n        }\n        // Clear cache after each buffered operation as it is no longer valid.\n        this._cachedChanges = null;\n    }\n    /**\n     * Buffers all the data related to given root like it was all just added to the editor.\n     *\n     * Following changes are buffered:\n     *\n     * * root is attached,\n     * * all root content is inserted,\n     * * all root attributes are added,\n     * * all markers inside the root are added.\n     *\n     * @internal\n     */\n    _bufferRootLoad(root) {\n        if (!root.isAttached()) {\n            return;\n        }\n        this._bufferRootStateChange(root.rootName, true);\n        this._markInsert(root, 0, root.maxOffset);\n        // Buffering root attribute changes makes sense and is actually needed, even though we buffer root state change above.\n        // Because the root state change is buffered, the root attributes changes are not returned by the differ.\n        // But, if the root attribute is removed in the same change block, or the root is detached, then the differ results would be wrong.\n        //\n        for (const key of root.getAttributeKeys()) {\n            this._bufferRootAttributeChange(root.rootName, key, null, root.getAttribute(key));\n        }\n        for (const marker of this._markerCollection) {\n            if (marker.getRange().root == root) {\n                const markerData = marker.getData();\n                this.bufferMarkerChange(marker.name, { ...markerData, range: null }, markerData);\n            }\n        }\n    }\n    /**\n     * Buffers the root state change after the root was attached or detached\n     */\n    _bufferRootStateChange(rootName, isAttached) {\n        if (!this._changedRoots.has(rootName)) {\n            this._changedRoots.set(rootName, { name: rootName, state: isAttached ? 'attached' : 'detached' });\n            return;\n        }\n        const diffItem = this._changedRoots.get(rootName);\n        if (diffItem.state !== undefined) {\n            // Root `state` can only toggle between one of the values and no value. It cannot be any other way,\n            // because if the root was originally attached it can only become detached. Then, if it is re-attached in the same batch of\n            // changes, it gets back to \"no change\" (which means no value). Same if the root was originally detached.\n            delete diffItem.state;\n            if (diffItem.attributes === undefined) {\n                // If there is no `state` change and no `attributes` change, remove the entry.\n                this._changedRoots.delete(rootName);\n            }\n        }\n        else {\n            diffItem.state = isAttached ? 'attached' : 'detached';\n        }\n    }\n    /**\n     * Buffers a root attribute change.\n     */\n    _bufferRootAttributeChange(rootName, key, oldValue, newValue) {\n        const diffItem = this._changedRoots.get(rootName) || { name: rootName };\n        const attrs = diffItem.attributes || {};\n        if (attrs[key]) {\n            // If this attribute or metadata was already changed earlier and is changed again, check to what value it is changed.\n            const attrEntry = attrs[key];\n            if (newValue === attrEntry.oldValue) {\n                // If it was changed back to the old value, remove the entry.\n                delete attrs[key];\n            }\n            else {\n                // If it was changed to a different value, update the entry.\n                attrEntry.newValue = newValue;\n            }\n        }\n        else {\n            // If this attribute or metadata was not set earlier, add an entry.\n            attrs[key] = { oldValue, newValue };\n        }\n        if (Object.entries(attrs).length === 0) {\n            // If attributes or metadata changes set became empty, remove it from the diff item.\n            delete diffItem.attributes;\n            if (diffItem.state === undefined) {\n                // If there is no `state` change and no `attributes` change, remove the entry.\n                this._changedRoots.delete(rootName);\n            }\n        }\n        else {\n            // Make sure that, if a new object in the structure was created, it gets set.\n            diffItem.attributes = attrs;\n            this._changedRoots.set(rootName, diffItem);\n        }\n    }\n    /**\n     * Saves and handles an insert change.\n     */\n    _markInsert(parent, offset, howMany) {\n        if (parent.root.is('rootElement') && !parent.root._isLoaded) {\n            return;\n        }\n        const changeItem = { type: 'insert', offset, howMany, count: this._changeCount++ };\n        this._markChange(parent, changeItem);\n    }\n    /**\n     * Saves and handles a remove change.\n     */\n    _markRemove(parent, offset, howMany) {\n        if (parent.root.is('rootElement') && !parent.root._isLoaded) {\n            return;\n        }\n        const changeItem = { type: 'remove', offset, howMany, count: this._changeCount++ };\n        this._markChange(parent, changeItem);\n        this._removeAllNestedChanges(parent, offset, howMany);\n    }\n    /**\n     * Saves and handles an attribute change.\n     */\n    _markAttribute(item) {\n        if (item.root.is('rootElement') && !item.root._isLoaded) {\n            return;\n        }\n        const changeItem = { type: 'attribute', offset: item.startOffset, howMany: item.offsetSize, count: this._changeCount++ };\n        this._markChange(item.parent, changeItem);\n    }\n    /**\n     * Saves and handles a model change.\n     */\n    _markChange(parent, changeItem) {\n        // First, make a snapshot of the parent and its children (it will be made only if it was not made before).\n        this._makeSnapshots(parent);\n        // Then, get all changes that already were done on the element (empty array if this is the first change).\n        const changes = this._getChangesForElement(parent);\n        // Then, look through all the changes, and transform them or the new change.\n        this._handleChange(changeItem, changes);\n        // Add the new change.\n        changes.push(changeItem);\n        // Remove incorrect changes. During transformation some change might be, for example, included in another.\n        // In that case, the change will have `howMany` property set to `0` or less. We need to remove those changes.\n        for (let i = 0; i < changes.length; i++) {\n            if (changes[i].howMany < 1) {\n                changes.splice(i, 1);\n                i--;\n            }\n        }\n    }\n    /**\n     * Tries to set given state for given item.\n     *\n     * This method does simple validation (it sets the state only for model elements, not for text proxy nodes). It also follows state\n     * setting rules, that is, `'refresh'` cannot overwrite `'rename'`, and `'rename'` cannot overwrite `'move'`.\n     */\n    _setElementState(node, state) {\n        if (!node.is('element')) {\n            return;\n        }\n        const currentStatePriority = Differ._statesPriority.indexOf(this._elementState.get(node));\n        const newStatePriority = Differ._statesPriority.indexOf(state);\n        if (newStatePriority > currentStatePriority) {\n            this._elementState.set(node, state);\n        }\n    }\n    /**\n     * Returns a value for {@link ~DifferItemAction `action`} property for diff items returned by {@link ~Differ#getChanges}.\n     * This method aims to return `'rename'` or `'refresh'` when it should, and `diffItemType` (\"default action\") in all other cases.\n     *\n     * It bases on a few factors:\n     *\n     * * for text nodes, the method always returns `diffItemType`,\n     * * for newly inserted element, the method returns `diffItemType`,\n     * * if {@link ~Differ#_elementState element state} was not recorded, the method returns `diffItemType`,\n     * * if state was recorded, and it was `'move'` (default action), the method returns `diffItemType`,\n     * * finally, if state was `'refresh'` or `'rename'`, the method returns the state value.\n     */\n    _getDiffActionForNode(node, diffItemType) {\n        if (!node.is('element')) {\n            // Text node.\n            return diffItemType;\n        }\n        if (!this._elementsSnapshots.has(node)) {\n            // Newly inserted element.\n            return diffItemType;\n        }\n        const state = this._elementState.get(node);\n        if (!state || state == 'move') {\n            return diffItemType;\n        }\n        return state;\n    }\n    /**\n     * Gets an array of changes that have already been saved for a given element.\n     */\n    _getChangesForElement(element) {\n        let changes;\n        if (this._changesInElement.has(element)) {\n            changes = this._changesInElement.get(element);\n        }\n        else {\n            changes = [];\n            this._changesInElement.set(element, changes);\n        }\n        return changes;\n    }\n    /**\n     * Creates and saves a snapshot for all children of the given element.\n     */\n    _makeSnapshots(element) {\n        if (this._elementChildrenSnapshots.has(element)) {\n            return;\n        }\n        const childrenSnapshots = _getChildrenSnapshots(element.getChildren());\n        this._elementChildrenSnapshots.set(element, childrenSnapshots);\n        for (const snapshot of childrenSnapshots) {\n            this._elementsSnapshots.set(snapshot.node, snapshot);\n        }\n    }\n    /**\n     * For a given newly saved change, compares it with a change already done on the element and modifies the incoming\n     * change and/or the old change.\n     *\n     * @param inc Incoming (new) change.\n     * @param changes An array containing all the changes done on that element.\n     */\n    _handleChange(inc, changes) {\n        // We need a helper variable that will store how many nodes are to be still handled for this change item.\n        // `nodesToHandle` (how many nodes still need to be handled) and `howMany` (how many nodes were affected)\n        // needs to be differentiated.\n        //\n        // This comes up when there are multiple changes that are affected by `inc` change item.\n        //\n        // For example: assume two insert changes: `{ offset: 2, howMany: 1 }` and `{ offset: 5, howMany: 1 }`.\n        // Assume that `inc` change is remove `{ offset: 2, howMany: 2, nodesToHandle: 2 }`.\n        //\n        // Then, we:\n        // - \"forget\" about first insert change (it is \"eaten\" by remove),\n        // - because of that, at the end we will want to remove only one node (`nodesToHandle = 1`),\n        // - but still we have to change offset of the second insert change from `5` to `3`!\n        //\n        // So, `howMany` does not change throughout items transformation and keeps information about how many nodes were affected,\n        // while `nodesToHandle` means how many nodes need to be handled after the change item is transformed by other changes.\n        inc.nodesToHandle = inc.howMany;\n        for (const old of changes) {\n            const incEnd = inc.offset + inc.howMany;\n            const oldEnd = old.offset + old.howMany;\n            if (inc.type == 'insert') {\n                if (old.type == 'insert') {\n                    if (inc.offset <= old.offset) {\n                        old.offset += inc.howMany;\n                    }\n                    else if (inc.offset < oldEnd) {\n                        old.howMany += inc.nodesToHandle;\n                        inc.nodesToHandle = 0;\n                    }\n                }\n                if (old.type == 'remove') {\n                    if (inc.offset < old.offset) {\n                        old.offset += inc.howMany;\n                    }\n                }\n                if (old.type == 'attribute') {\n                    if (inc.offset <= old.offset) {\n                        old.offset += inc.howMany;\n                    }\n                    else if (inc.offset < oldEnd) {\n                        // This case is more complicated, because attribute change has to be split into two.\n                        // Example (assume that uppercase and lowercase letters mean different attributes):\n                        //\n                        // initial state:\t\tabcxyz\n                        // attribute change:\taBCXYz\n                        // incoming insert:\t\taBCfooXYz\n                        //\n                        // Change ranges cannot intersect because each item has to be described exactly (it was either\n                        // not changed, inserted, removed, or its attribute was changed). That's why old attribute\n                        // change has to be split and both parts has to be handled separately from now on.\n                        const howMany = old.howMany;\n                        old.howMany = inc.offset - old.offset;\n                        // Add the second part of attribute change to the beginning of processed array so it won't\n                        // be processed again in this loop.\n                        changes.unshift({\n                            type: 'attribute',\n                            offset: incEnd,\n                            howMany: howMany - old.howMany,\n                            count: this._changeCount++\n                        });\n                    }\n                }\n            }\n            if (inc.type == 'remove') {\n                if (old.type == 'insert') {\n                    if (incEnd <= old.offset) {\n                        old.offset -= inc.howMany;\n                    }\n                    else if (incEnd <= oldEnd) {\n                        if (inc.offset < old.offset) {\n                            const intersectionLength = incEnd - old.offset;\n                            old.offset = inc.offset;\n                            old.howMany -= intersectionLength;\n                            inc.nodesToHandle -= intersectionLength;\n                        }\n                        else {\n                            old.howMany -= inc.nodesToHandle;\n                            inc.nodesToHandle = 0;\n                        }\n                    }\n                    else {\n                        if (inc.offset <= old.offset) {\n                            inc.nodesToHandle -= old.howMany;\n                            old.howMany = 0;\n                        }\n                        else if (inc.offset < oldEnd) {\n                            const intersectionLength = oldEnd - inc.offset;\n                            old.howMany -= intersectionLength;\n                            inc.nodesToHandle -= intersectionLength;\n                        }\n                    }\n                }\n                if (old.type == 'remove') {\n                    if (incEnd <= old.offset) {\n                        old.offset -= inc.howMany;\n                    }\n                    else if (inc.offset < old.offset) {\n                        inc.nodesToHandle += old.howMany;\n                        old.howMany = 0;\n                    }\n                }\n                if (old.type == 'attribute') {\n                    if (incEnd <= old.offset) {\n                        old.offset -= inc.howMany;\n                    }\n                    else if (inc.offset < old.offset) {\n                        const intersectionLength = incEnd - old.offset;\n                        old.offset = inc.offset;\n                        old.howMany -= intersectionLength;\n                    }\n                    else if (inc.offset < oldEnd) {\n                        if (incEnd <= oldEnd) {\n                            // On first sight in this case we don't need to split attribute operation into two.\n                            // However the changes set is later converted to actions (see `_generateActionsFromChanges`).\n                            // For that reason, no two changes may intersect.\n                            // So we cannot have an attribute change that \"contains\" remove change.\n                            // Attribute change needs to be split.\n                            const howMany = old.howMany;\n                            old.howMany = inc.offset - old.offset;\n                            const howManyAfter = howMany - old.howMany - inc.nodesToHandle;\n                            // Add the second part of attribute change to the beginning of processed array so it won't\n                            // be processed again in this loop.\n                            changes.unshift({\n                                type: 'attribute',\n                                offset: inc.offset,\n                                howMany: howManyAfter,\n                                count: this._changeCount++\n                            });\n                        }\n                        else {\n                            old.howMany -= oldEnd - inc.offset;\n                        }\n                    }\n                }\n            }\n            if (inc.type == 'attribute') {\n                // In case of attribute change, `howMany` should be kept same as `nodesToHandle`. It's not an error.\n                if (old.type == 'insert') {\n                    if (inc.offset < old.offset && incEnd > old.offset) {\n                        if (incEnd > oldEnd) {\n                            // This case is similar to a case described when incoming change was insert and old change was attribute.\n                            // See comment above.\n                            //\n                            // This time incoming change is attribute. We need to split incoming change in this case too.\n                            // However this time, the second part of the attribute change needs to be processed further\n                            // because there might be other changes that it collides with.\n                            const attributePart = {\n                                type: 'attribute',\n                                offset: oldEnd,\n                                howMany: incEnd - oldEnd,\n                                count: this._changeCount++\n                            };\n                            this._handleChange(attributePart, changes);\n                            changes.push(attributePart);\n                        }\n                        inc.nodesToHandle = old.offset - inc.offset;\n                        inc.howMany = inc.nodesToHandle;\n                    }\n                    else if (inc.offset >= old.offset && inc.offset < oldEnd) {\n                        if (incEnd > oldEnd) {\n                            inc.nodesToHandle = incEnd - oldEnd;\n                            inc.offset = oldEnd;\n                        }\n                        else {\n                            inc.nodesToHandle = 0;\n                        }\n                    }\n                }\n                if (old.type == 'remove') {\n                    // This is a case when attribute change \"contains\" remove change.\n                    // The attribute change needs to be split into two because changes cannot intersect.\n                    if (inc.offset < old.offset && incEnd > old.offset) {\n                        const attributePart = {\n                            type: 'attribute',\n                            offset: old.offset,\n                            howMany: incEnd - old.offset,\n                            count: this._changeCount++\n                        };\n                        this._handleChange(attributePart, changes);\n                        changes.push(attributePart);\n                        inc.nodesToHandle = old.offset - inc.offset;\n                        inc.howMany = inc.nodesToHandle;\n                    }\n                }\n                if (old.type == 'attribute') {\n                    // There are only two conflicting scenarios possible here:\n                    if (inc.offset >= old.offset && incEnd <= oldEnd) {\n                        // `old` change includes `inc` change, or they are the same.\n                        inc.nodesToHandle = 0;\n                        inc.howMany = 0;\n                        inc.offset = 0;\n                    }\n                    else if (inc.offset <= old.offset && incEnd >= oldEnd) {\n                        // `inc` change includes `old` change.\n                        old.howMany = 0;\n                    }\n                }\n            }\n        }\n        inc.howMany = inc.nodesToHandle;\n        delete inc.nodesToHandle;\n    }\n    /**\n     * Returns an object with a single insert change description.\n     *\n     * @param parent The element in which the change happened.\n     * @param offset The offset at which change happened.\n     * @param action Further specifies what kind of action led to generating this change.\n     * @param elementSnapshot Snapshot of the inserted node after changes.\n     * @param elementSnapshotBefore Snapshot of the inserted node before changes.\n     * @returns The diff item.\n     */\n    _getInsertDiff(parent, offset, action, elementSnapshot, elementSnapshotBefore) {\n        const diffItem = {\n            type: 'insert',\n            position: Position._createAt(parent, offset),\n            name: elementSnapshot.name,\n            attributes: new Map(elementSnapshot.attributes),\n            length: 1,\n            changeCount: this._changeCount++,\n            action\n        };\n        if (action != 'insert' && elementSnapshotBefore) {\n            diffItem.before = {\n                name: elementSnapshotBefore.name,\n                attributes: new Map(elementSnapshotBefore.attributes)\n            };\n        }\n        return diffItem;\n    }\n    /**\n     * Returns an object with a single remove change description.\n     *\n     * @param parent The element in which change happened.\n     * @param offset The offset at which change happened.\n     * @param action Further specifies what kind of action led to generating this change.\n     * @param elementSnapshot The snapshot of the removed node before changes.\n     * @returns The diff item.\n     */\n    _getRemoveDiff(parent, offset, action, elementSnapshot) {\n        return {\n            type: 'remove',\n            action,\n            position: Position._createAt(parent, offset),\n            name: elementSnapshot.name,\n            attributes: new Map(elementSnapshot.attributes),\n            length: 1,\n            changeCount: this._changeCount++\n        };\n    }\n    /**\n     * Returns an array of objects where each one is a single attribute change description.\n     *\n     * @param range The range where the change happened.\n     * @param oldAttributes A map, map iterator or compatible object that contains attributes before the change.\n     * @param newAttributes A map, map iterator or compatible object that contains attributes after the change.\n     * @returns An array containing one or more diff items.\n     */\n    _getAttributesDiff(range, oldAttributes, newAttributes) {\n        // Results holder.\n        const diffs = [];\n        // Clone new attributes as we will be performing changes on this object.\n        newAttributes = new Map(newAttributes);\n        // Look through old attributes.\n        for (const [key, oldValue] of oldAttributes) {\n            // Check what is the new value of the attribute (or if it was removed).\n            const newValue = newAttributes.has(key) ? newAttributes.get(key) : null;\n            // If values are different (or attribute was removed)...\n            if (newValue !== oldValue) {\n                // Add diff item.\n                diffs.push({\n                    type: 'attribute',\n                    position: range.start,\n                    range: range.clone(),\n                    length: 1,\n                    attributeKey: key,\n                    attributeOldValue: oldValue,\n                    attributeNewValue: newValue,\n                    changeCount: this._changeCount++\n                });\n            }\n            // Prevent returning two diff items for the same change.\n            newAttributes.delete(key);\n        }\n        // Look through new attributes that weren't handled above.\n        for (const [key, newValue] of newAttributes) {\n            // Each of them is a new attribute. Add diff item.\n            diffs.push({\n                type: 'attribute',\n                position: range.start,\n                range: range.clone(),\n                length: 1,\n                attributeKey: key,\n                attributeOldValue: null,\n                attributeNewValue: newValue,\n                changeCount: this._changeCount++\n            });\n        }\n        return diffs;\n    }\n    /**\n     * Checks whether given element or any of its parents is an element that is buffered as an inserted element.\n     */\n    _isInInsertedElement(element) {\n        const parent = element.parent;\n        if (!parent) {\n            return false;\n        }\n        const changes = this._changesInElement.get(parent);\n        const offset = element.startOffset;\n        if (changes) {\n            for (const change of changes) {\n                if (change.type == 'insert' && offset >= change.offset && offset < change.offset + change.howMany) {\n                    return true;\n                }\n            }\n        }\n        return this._isInInsertedElement(parent);\n    }\n    /**\n     * Removes deeply all buffered changes that are registered in elements from range specified by `parent`, `offset`\n     * and `howMany`.\n     */\n    _removeAllNestedChanges(parent, offset, howMany) {\n        const range = new Range(Position._createAt(parent, offset), Position._createAt(parent, offset + howMany));\n        for (const item of range.getItems({ shallow: true })) {\n            if (item.is('element')) {\n                this._changesInElement.delete(item);\n                this._removeAllNestedChanges(item, 0, item.maxOffset);\n            }\n        }\n    }\n}\n/**\n * Priority of the {@link ~Differ#_elementState element states}. States on higher indexes of the array can overwrite states on the lower\n * indexes.\n */\nDiffer._statesPriority = [undefined, 'refresh', 'rename', 'move'];\nexport default Differ;\n/**\n * Returns a snapshot for the specified child node. Text node snapshots have the `name` property set to `$text`.\n */\nfunction _getSingleNodeSnapshot(node) {\n    return {\n        node,\n        name: node.is('$text') ? '$text' : node.name,\n        attributes: new Map(node.getAttributes())\n    };\n}\n/**\n * Returns an array that is a copy of passed child list with the exception that text nodes are split to one or more\n * objects, each representing one character and attributes set on that character.\n */\nfunction _getChildrenSnapshots(children) {\n    const snapshots = [];\n    for (const child of children) {\n        if (child.is('$text')) {\n            for (let i = 0; i < child.data.length; ++i) {\n                snapshots.push(_getSingleNodeSnapshot(child));\n            }\n        }\n        else {\n            snapshots.push(_getSingleNodeSnapshot(child));\n        }\n    }\n    return snapshots;\n}\n/**\n * Generates array of diff instructions for given changes set.\n *\n * Generated actions are:\n *\n * - 'e' for 'equal' - when item at that position did not change,\n * - 'i' for 'insert' - when item at that position was inserted,\n * - 'r' for 'remove' - when item at that position was removed,\n * - 'a' for 'attribute' - when item at that position has it attributes changed.\n *\n * Example (assume that uppercase letters have bold attribute, compare with function code):\n *\n * children before:\tfooBAR\n * children after:\tfoxybAR\n *\n * changes: type: remove, offset: 1, howMany: 1\n *\t\t\ttype: insert, offset: 2, howMany: 2\n *\t\t\ttype: attribute, offset: 4, howMany: 1\n *\n * Expected actions: equal (f), remove (o), equal (o), insert (x), insert (y), attribute (b), equal (A), equal (R)\n *\n * Steps taken by the script:\n *\n * 1. change = \"type: remove, offset: 1, howMany: 1\"; offset = 0; oldChildrenHandled = 0\n *    1.1 between this change and the beginning is one not-changed node, fill with one equal action, one old child has been handled\n *    1.2 this change removes one node, add one remove action\n *    1.3 change last visited `offset` to 1\n *    1.4 since an old child has been removed, one more old child has been handled\n *    1.5 actions at this point are: equal, remove\n *\n * 2. change = \"type: insert, offset: 2, howMany: 2\"; offset = 1; oldChildrenHandled = 2\n *    2.1 between this change and previous change is one not-changed node, add equal action, another one old children has been handled\n *    2.2 this change inserts two nodes, add two insert actions\n *    2.3 change last visited offset to the end of the inserted range, that is 4\n *    2.4 actions at this point are: equal, remove, equal, insert, insert\n *\n * 3. change = \"type: attribute, offset: 4, howMany: 1\"; offset = 4, oldChildrenHandled = 3\n *    3.1 between this change and previous change are no not-changed nodes\n *    3.2 this change changes one node, add one attribute action\n *    3.3 change last visited `offset` to the end of change range, that is 5\n *    3.4 since an old child has been changed, one more old child has been handled\n *    3.5 actions at this point are: equal, remove, equal, insert, insert, attribute\n *\n * 4. after loop oldChildrenHandled = 4, oldChildrenLength = 6 (fooBAR is 6 characters)\n *    4.1 fill up with two equal actions\n *\n * The result actions are: equal, remove, equal, insert, insert, attribute, equal, equal.\n */\nfunction _generateDiffInstructionsFromChanges(oldChildrenLength, changes) {\n    const diff = [];\n    let offset = 0;\n    let oldChildrenHandled = 0;\n    // Go through all buffered changes.\n    for (const change of changes) {\n        // First, fill \"holes\" between changes with \"equal\" actions.\n        if (change.offset > offset) {\n            for (let i = 0; i < change.offset - offset; i++) {\n                diff.push('e');\n            }\n            oldChildrenHandled += change.offset - offset;\n        }\n        // Then, fill up actions accordingly to change type.\n        if (change.type == 'insert') {\n            for (let i = 0; i < change.howMany; i++) {\n                diff.push('i');\n            }\n            // The last handled offset is after inserted range.\n            offset = change.offset + change.howMany;\n        }\n        else if (change.type == 'remove') {\n            for (let i = 0; i < change.howMany; i++) {\n                diff.push('r');\n            }\n            // The last handled offset is at the position where the nodes were removed.\n            offset = change.offset;\n            // We removed `howMany` old nodes, update `oldChildrenHandled`.\n            oldChildrenHandled += change.howMany;\n        }\n        else {\n            // Total maximum amount of arguments that can be passed to `Array.prototype.push` may be limited so we need to\n            // add them manually one by one to avoid this limit. However loop might be a bit slower than `push` method on\n            // smaller changesets so we need to decide which method to use based on the size of the change.\n            // See: https://github.com/ckeditor/ckeditor5/issues/16819\n            if (change.howMany > 1500) {\n                for (let i = 0; i < change.howMany; i++) {\n                    diff.push('a');\n                }\n            }\n            else {\n                diff.push(...'a'.repeat(change.howMany).split(''));\n            }\n            // The last handled offset is at the position after the changed range.\n            offset = change.offset + change.howMany;\n            // We changed `howMany` old nodes, update `oldChildrenHandled`.\n            oldChildrenHandled += change.howMany;\n        }\n    }\n    // Fill \"equal\" actions at the end of actions set. Use `oldChildrenHandled` to see how many children\n    // has not been changed / removed at the end of their parent.\n    if (oldChildrenHandled < oldChildrenLength) {\n        for (let i = 0; i < oldChildrenLength - oldChildrenHandled - offset; i++) {\n            diff.push('e');\n        }\n    }\n    return diff;\n}\n/**\n * Filter callback for `Array.filter` that filters out change entries that are in graveyard.\n */\nfunction _changesInGraveyardFilter(entry) {\n    const posInGy = 'position' in entry && entry.position.root.rootName == '$graveyard';\n    const rangeInGy = 'range' in entry && entry.range.root.rootName == '$graveyard';\n    return !posInGy && !rangeInGy;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * @module engine/model/history\n */\n/**\n * `History` keeps the track of all the operations applied to the {@link module:engine/model/document~Document document}.\n */\nexport default class History {\n    constructor() {\n        /**\n         * Operations added to the history.\n         */\n        this._operations = [];\n        /**\n         * Holds an information which {@link module:engine/model/operation/operation~Operation operation} undoes which\n         * {@link module:engine/model/operation/operation~Operation operation}.\n         *\n         * Keys of the map are \"undoing operations\", that is operations that undone some other operations. For each key, the\n         * value is an operation that has been undone by the \"undoing operation\".\n         */\n        this._undoPairs = new Map();\n        /**\n         * Holds all undone operations.\n         */\n        this._undoneOperations = new Set();\n        /**\n         * A map that allows retrieving the operations fast based on the given base version.\n         */\n        this._baseVersionToOperationIndex = new Map();\n        /**\n         * The history version.\n         */\n        this._version = 0;\n        /**\n         * The gap pairs kept in the <from,to> format.\n         *\n         * Anytime the `history.version` is set to a version larger than `history.version + 1`,\n         * a new <lastHistoryVersion, newHistoryVersion> entry is added to the map.\n         */\n        this._gaps = new Map();\n    }\n    /**\n     * The version of the last operation in the history.\n     *\n     * The history version is incremented automatically when a new operation is added to the history.\n     * Setting the version manually should be done only in rare circumstances when a gap is planned\n     * between history versions. When doing so, a gap will be created and the history will accept adding\n     * an operation with base version equal to the new history version.\n     */\n    get version() {\n        return this._version;\n    }\n    set version(version) {\n        // Store a gap if there are some operations already in the history and the\n        // new version does not increment the latest one.\n        if (this._operations.length && version > this._version + 1) {\n            this._gaps.set(this._version, version);\n        }\n        this._version = version;\n    }\n    /**\n     * The last history operation.\n     */\n    get lastOperation() {\n        return this._operations[this._operations.length - 1];\n    }\n    /**\n     * Adds an operation to the history and increments the history version.\n     *\n     * The operation's base version should be equal to the history version. Otherwise an error is thrown.\n     */\n    addOperation(operation) {\n        if (operation.baseVersion !== this.version) {\n            /**\n             * Only operations with matching versions can be added to the history.\n             *\n             * @error model-document-history-addoperation-incorrect-version\n             * @param errorData The operation and the current document history version.\n             */\n            throw new CKEditorError('model-document-history-addoperation-incorrect-version', this, {\n                operation,\n                historyVersion: this.version\n            });\n        }\n        this._operations.push(operation);\n        this._version++;\n        this._baseVersionToOperationIndex.set(operation.baseVersion, this._operations.length - 1);\n    }\n    /**\n     * Returns operations from the given range of operation base versions that were added to the history.\n     *\n     * Note that there may be gaps in operations base versions.\n     *\n     * @param fromBaseVersion Base version from which operations should be returned (inclusive).\n     * @param toBaseVersion Base version up to which operations should be returned (exclusive).\n     * @returns History operations for the given range, in chronological order.\n     */\n    getOperations(fromBaseVersion, toBaseVersion = this.version) {\n        // When there is no operation in the history, return an empty array.\n        // After that we can be sure that `firstOperation`, `lastOperation` are not nullish.\n        if (!this._operations.length) {\n            return [];\n        }\n        const firstOperation = this._operations[0];\n        if (fromBaseVersion === undefined) {\n            fromBaseVersion = firstOperation.baseVersion;\n        }\n        // Change exclusive `toBaseVersion` to inclusive, so it will refer to the actual index.\n        // Thanks to that mapping from base versions to operation indexes are possible.\n        let inclusiveTo = toBaseVersion - 1;\n        // Check if \"from\" or \"to\" point to a gap between versions.\n        // If yes, then change the incorrect position to the proper side of the gap.\n        // Thanks to it, it will be possible to get index of the operation.\n        for (const [gapFrom, gapTo] of this._gaps) {\n            if (fromBaseVersion > gapFrom && fromBaseVersion < gapTo) {\n                fromBaseVersion = gapTo;\n            }\n            if (inclusiveTo > gapFrom && inclusiveTo < gapTo) {\n                inclusiveTo = gapFrom - 1;\n            }\n        }\n        // If the whole range is outside of the operation versions, then return an empty array.\n        if (inclusiveTo < firstOperation.baseVersion || fromBaseVersion > this.lastOperation.baseVersion) {\n            return [];\n        }\n        let fromIndex = this._baseVersionToOperationIndex.get(fromBaseVersion);\n        // If the range starts before the first operation, then use the first operation as the range's start.\n        if (fromIndex === undefined) {\n            fromIndex = 0;\n        }\n        let toIndex = this._baseVersionToOperationIndex.get(inclusiveTo);\n        // If the range ends after the last operation, then use the last operation as the range's end.\n        if (toIndex === undefined) {\n            toIndex = this._operations.length - 1;\n        }\n        // Return the part of the history operations based on the calculated start index and end index.\n        return this._operations.slice(fromIndex, \n        // The `toIndex` should be included in the returned operations, so add `1`.\n        toIndex + 1);\n    }\n    /**\n     * Returns operation from the history that bases on given `baseVersion`.\n     *\n     * @param baseVersion Base version of the operation to get.\n     * @returns Operation with given base version or `undefined` if there is no such operation in history.\n     */\n    getOperation(baseVersion) {\n        const operationIndex = this._baseVersionToOperationIndex.get(baseVersion);\n        if (operationIndex === undefined) {\n            return;\n        }\n        return this._operations[operationIndex];\n    }\n    /**\n     * Marks in history that one operation is an operation that is undoing the other operation. By marking operation this way,\n     * history is keeping more context information about operations, which helps in operational transformation.\n     *\n     * @param undoneOperation Operation which is undone by `undoingOperation`.\n     * @param undoingOperation Operation which undoes `undoneOperation`.\n     */\n    setOperationAsUndone(undoneOperation, undoingOperation) {\n        this._undoPairs.set(undoingOperation, undoneOperation);\n        this._undoneOperations.add(undoneOperation);\n    }\n    /**\n     * Checks whether given `operation` is undoing any other operation.\n     *\n     * @param operation Operation to check.\n     * @returns `true` if given `operation` is undoing any other operation, `false` otherwise.\n     */\n    isUndoingOperation(operation) {\n        return this._undoPairs.has(operation);\n    }\n    /**\n     * Checks whether given `operation` has been undone by any other operation.\n     *\n     * @param operation Operation to check.\n     * @returns `true` if given `operation` has been undone any other operation, `false` otherwise.\n     */\n    isUndoneOperation(operation) {\n        return this._undoneOperations.has(operation);\n    }\n    /**\n     * For given `undoingOperation`, returns the operation which has been undone by it.\n     *\n     * @returns Operation that has been undone by given `undoingOperation` or `undefined`\n     * if given `undoingOperation` is not undoing any other operation.\n     */\n    getUndoneOperation(undoingOperation) {\n        return this._undoPairs.get(undoingOperation);\n    }\n    /**\n     * Resets the history of operations.\n     */\n    reset() {\n        this._version = 0;\n        this._undoPairs = new Map();\n        this._operations = [];\n        this._undoneOperations = new Set();\n        this._gaps = new Map();\n        this._baseVersionToOperationIndex = new Map();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/rootelement\n */\nimport Element from './element.js';\n/**\n * Type of {@link module:engine/model/element~Element} that is a root of a model tree.\n */\nexport default class RootElement extends Element {\n    /**\n     * Creates root element.\n     *\n     * @param document Document that is an owner of this root.\n     * @param name Node name.\n     * @param rootName Unique root name used to identify this root element by {@link module:engine/model/document~Document}.\n     */\n    constructor(document, name, rootName = 'main') {\n        super(name);\n        /**\n         * @internal\n         */\n        this._isAttached = true;\n        /**\n         * Informs if the root element is loaded (default).\n         *\n         * @internal\n         */\n        this._isLoaded = true;\n        this._document = document;\n        this.rootName = rootName;\n    }\n    /**\n     * {@link module:engine/model/document~Document Document} that owns this root element.\n     */\n    get document() {\n        return this._document;\n    }\n    /**\n     * Informs if the root element is currently attached to the document, or not.\n     *\n     * A detached root is equivalent to being removed and cannot contain any children or markers.\n     *\n     * By default, a newly added root is attached. It can be detached using\n     * {@link module:engine/model/writer~Writer#detachRoot `Writer#detachRoot`}. A detached root can be re-attached again using\n     * {@link module:engine/model/writer~Writer#addRoot `Writer#addRoot`}.\n     */\n    isAttached() {\n        return this._isAttached;\n    }\n    /**\n     * Converts `RootElement` instance to `string` containing its name.\n     *\n     * @returns `RootElement` instance converted to `string`.\n     */\n    toJSON() {\n        return this.rootName;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nRootElement.prototype.is = function (type, name) {\n    if (!name) {\n        return type === 'rootElement' || type === 'model:rootElement' ||\n            // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n            type === 'element' || type === 'model:element' ||\n            type === 'node' || type === 'model:node';\n    }\n    return name === this.name && (type === 'rootElement' || type === 'model:rootElement' ||\n        // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n        type === 'element' || type === 'model:element');\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/document\n */\nimport Differ from './differ.js';\nimport DocumentSelection from './documentselection.js';\nimport History from './history.js';\nimport RootElement from './rootelement.js';\nimport { CKEditorError, Collection, EmitterMixin, isInsideSurrogatePair, isInsideCombinedSymbol } from '@ckeditor/ckeditor5-utils';\nimport { clone } from 'lodash-es';\n// @if CK_DEBUG_ENGINE // const { logDocument } = require( '../dev-utils/utils' );\nconst graveyardName = '$graveyard';\n/**\n * Data model's document. It contains the model's structure, its selection and the history of changes.\n *\n * Read more about working with the model in\n * {@glink framework/architecture/editing-engine#model introduction to the the editing engine's architecture}.\n *\n * Usually, the document contains just one {@link module:engine/model/document~Document#roots root element}, so\n * you can retrieve it by just calling {@link module:engine/model/document~Document#getRoot} without specifying its name:\n *\n * ```ts\n * model.document.getRoot(); // -> returns the main root\n * ```\n *\n * However, the document may contain multiple roots – e.g. when the editor has multiple editable areas\n * (e.g. a title and a body of a message).\n */\nexport default class Document extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates an empty document instance with no {@link #roots} (other than\n     * the {@link #graveyard graveyard root}).\n     */\n    constructor(model) {\n        super();\n        this.model = model;\n        this.history = new History();\n        this.selection = new DocumentSelection(this);\n        this.roots = new Collection({ idProperty: 'rootName' });\n        this.differ = new Differ(model.markers);\n        this.isReadOnly = false;\n        this._postFixers = new Set();\n        this._hasSelectionChangedFromTheLastChangeBlock = false;\n        // Graveyard tree root. Document always have a graveyard root, which stores removed nodes.\n        this.createRoot('$root', graveyardName);\n        // Then, still before an operation is applied on model, buffer the change in differ.\n        this.listenTo(model, 'applyOperation', (evt, args) => {\n            const operation = args[0];\n            if (operation.isDocumentOperation) {\n                this.differ.bufferOperation(operation);\n            }\n        }, { priority: 'high' });\n        // After the operation is applied, bump document's version and add the operation to the history.\n        this.listenTo(model, 'applyOperation', (evt, args) => {\n            const operation = args[0];\n            if (operation.isDocumentOperation) {\n                this.history.addOperation(operation);\n            }\n        }, { priority: 'low' });\n        // Listen to selection changes. If selection changed, mark it.\n        this.listenTo(this.selection, 'change', () => {\n            this._hasSelectionChangedFromTheLastChangeBlock = true;\n        });\n        // Buffer marker changes.\n        // This is not covered in buffering operations because markers may change outside of them (when they\n        // are modified using `model.markers` collection, not through `MarkerOperation`).\n        this.listenTo(model.markers, 'update', (evt, marker, oldRange, newRange, oldMarkerData) => {\n            // Copy the `newRange` to the new marker data as during the marker removal the range is not updated.\n            const newMarkerData = { ...marker.getData(), range: newRange };\n            // Whenever marker is updated, buffer that change.\n            this.differ.bufferMarkerChange(marker.name, oldMarkerData, newMarkerData);\n            if (oldRange === null) {\n                // If this is a new marker, add a listener that will buffer change whenever marker changes.\n                marker.on('change', (evt, oldRange) => {\n                    const markerData = marker.getData();\n                    this.differ.bufferMarkerChange(marker.name, { ...markerData, range: oldRange }, markerData);\n                });\n            }\n        });\n        // This is a solution for a problem that may occur during real-time editing. If one client detached a root and another added\n        // something there at the same moment, the OT does not solve this problem currently. In such situation, the added elements would\n        // stay in the detached root.\n        //\n        // This is incorrect, a detached root should be empty and all elements from it should be removed. To solve this, the post-fixer will\n        // remove any element that is left in a detached root.\n        //\n        // Similarly, markers that are created at the beginning or at the end of the detached root will not be removed as well.\n        //\n        // The drawback of this solution over the OT solution is that the elements removed by the post-fixer will never be brought back.\n        // If the root detachment gets undone (and the root is brought back), the removed elements will not be there.\n        this.registerPostFixer(writer => {\n            let result = false;\n            for (const root of this.roots) {\n                if (!root.isAttached() && !root.isEmpty) {\n                    writer.remove(writer.createRangeIn(root));\n                    result = true;\n                }\n            }\n            for (const marker of this.model.markers) {\n                if (!marker.getRange().root.isAttached()) {\n                    writer.removeMarker(marker);\n                    result = true;\n                }\n            }\n            return result;\n        });\n    }\n    /**\n     * The document version. Every applied operation increases the version number. It is used to\n     * ensure that operations are applied on a proper document version.\n     *\n     * This property is equal to {@link module:engine/model/history~History#version `model.Document#history#version`}.\n     *\n     * If the {@link module:engine/model/operation/operation~Operation#baseVersion base version} does not match the document version,\n     * a {@link module:utils/ckeditorerror~CKEditorError model-document-applyoperation-wrong-version} error is thrown.\n     */\n    get version() {\n        return this.history.version;\n    }\n    set version(version) {\n        this.history.version = version;\n    }\n    /**\n     * The graveyard tree root. A document always has a graveyard root that stores removed nodes.\n     */\n    get graveyard() {\n        return this.getRoot(graveyardName);\n    }\n    /**\n     * Creates a new root.\n     *\n     * **Note:** do not use this method after the editor has been initialized! If you want to dynamically add a root, use\n     * {@link module:engine/model/writer~Writer#addRoot `model.Writer#addRoot`} instead.\n     *\n     * @param elementName The element name. Defaults to `'$root'` which also has some basic schema defined\n     * (e.g. `$block` elements are allowed inside the `$root`). Make sure to define a proper schema if you use a different name.\n     * @param rootName A unique root name.\n     * @returns The created root.\n     */\n    createRoot(elementName = '$root', rootName = 'main') {\n        if (this.roots.get(rootName)) {\n            /**\n             * A root with the specified name already exists.\n             *\n             * @error model-document-createroot-name-exists\n             */\n            throw new CKEditorError('model-document-createroot-name-exists', this, { name: rootName });\n        }\n        const root = new RootElement(this, elementName, rootName);\n        this.roots.add(root);\n        return root;\n    }\n    /**\n     * Removes all event listeners set by the document instance.\n     */\n    destroy() {\n        this.selection.destroy();\n        this.stopListening();\n    }\n    /**\n     * Returns a root by its name.\n     *\n     * Detached roots are returned by this method. This is to be able to operate on the detached root (for example, to be able to create\n     * a position inside such a root for undo feature purposes).\n     *\n     * @param name The root name of the root to return.\n     * @returns The root registered under a given name or `null` when there is no root with the given name.\n     */\n    getRoot(name = 'main') {\n        return this.roots.get(name);\n    }\n    /**\n     * Returns an array with names of all roots added to the document (except the {@link #graveyard graveyard root}).\n     *\n     * Detached roots **are not** returned by this method by default. This is to make sure that all features or algorithms that operate\n     * on the document data know which roots are still a part of the document and should be processed.\n     *\n     * @param includeDetached Specified whether detached roots should be returned as well.\n     */\n    getRootNames(includeDetached = false) {\n        return this.getRoots(includeDetached).map(root => root.rootName);\n    }\n    /**\n     * Returns an array with all roots added to the document (except the {@link #graveyard graveyard root}).\n     *\n     * Detached roots **are not** returned by this method by default. This is to make sure that all features or algorithms that operate\n     * on the document data know which roots are still a part of the document and should be processed.\n     *\n     * @param includeDetached Specified whether detached roots should be returned as well.\n     */\n    getRoots(includeDetached = false) {\n        return this.roots.filter(root => root != this.graveyard && (includeDetached || root.isAttached()) && root._isLoaded);\n    }\n    /**\n     * Used to register a post-fixer callback. A post-fixer mechanism guarantees that the features\n     * will operate on a correct model state.\n     *\n     * An execution of a feature may lead to an incorrect document tree state. The callbacks are used to fix the document tree after\n     * it has changed. Post-fixers are fired just after all changes from the outermost change block were applied but\n     * before the {@link module:engine/model/document~Document#event:change change event} is fired. If a post-fixer callback made\n     * a change, it should return `true`. When this happens, all post-fixers are fired again to check if something else should\n     * not be fixed in the new document tree state.\n     *\n     * As a parameter, a post-fixer callback receives a {@link module:engine/model/writer~Writer writer} instance connected with the\n     * executed changes block. Thanks to that, all changes done by the callback will be added to the same\n     * {@link module:engine/model/batch~Batch batch} (and undo step) as the original changes. This makes post-fixer changes transparent\n     * for the user.\n     *\n     * An example of a post-fixer is a callback that checks if all the data were removed from the editor. If so, the\n     * callback should add an empty paragraph so that the editor is never empty:\n     *\n     * ```ts\n     * document.registerPostFixer( writer => {\n     * \tconst changes = document.differ.getChanges();\n     *\n     * \t// Check if the changes lead to an empty root in the editor.\n     * \tfor ( const entry of changes ) {\n     * \t\tif ( entry.type == 'remove' && entry.position.root.isEmpty ) {\n     * \t\t\twriter.insertElement( 'paragraph', entry.position.root, 0 );\n     *\n     * \t\t\t// It is fine to return early, even if multiple roots would need to be fixed.\n     * \t\t\t// All post-fixers will be fired again, so if there are more empty roots, those will be fixed, too.\n     * \t\t\treturn true;\n     * \t\t}\n     * \t}\n     *\n     * \treturn false;\n     * } );\n     * ```\n     */\n    registerPostFixer(postFixer) {\n        this._postFixers.add(postFixer);\n    }\n    /**\n     * A custom `toJSON()` method to solve child-parent circular dependencies.\n     *\n     * @returns A clone of this object with the document property changed to a string.\n     */\n    toJSON() {\n        const json = clone(this);\n        // Due to circular references we need to remove parent reference.\n        json.selection = '[engine.model.DocumentSelection]';\n        json.model = '[engine.model.Model]';\n        return json;\n    }\n    /**\n     * Check if there were any changes done on document, and if so, call post-fixers,\n     * fire `change` event for features and conversion and then reset the differ.\n     * Fire `change:data` event when at least one operation or buffered marker changes the data.\n     *\n     * @internal\n     * @fires change\n     * @fires change:data\n     * @param writer The writer on which post-fixers will be called.\n     */\n    _handleChangeBlock(writer) {\n        if (this._hasDocumentChangedFromTheLastChangeBlock()) {\n            this._callPostFixers(writer);\n            // Refresh selection attributes according to the final position in the model after the change.\n            this.selection.refresh();\n            if (this.differ.hasDataChanges()) {\n                this.fire('change:data', writer.batch);\n            }\n            else {\n                this.fire('change', writer.batch);\n            }\n            // Theoretically, it is not necessary to refresh selection after change event because\n            // post-fixers are the last who should change the model, but just in case...\n            this.selection.refresh();\n            this.differ.reset();\n        }\n        this._hasSelectionChangedFromTheLastChangeBlock = false;\n    }\n    /**\n     * Returns whether there is a buffered change or if the selection has changed from the last\n     * {@link module:engine/model/model~Model#enqueueChange `enqueueChange()` block}\n     * or {@link module:engine/model/model~Model#change `change()` block}.\n     *\n     * @returns Returns `true` if document has changed from the last `change()` or `enqueueChange()` block.\n     */\n    _hasDocumentChangedFromTheLastChangeBlock() {\n        return !this.differ.isEmpty || this._hasSelectionChangedFromTheLastChangeBlock;\n    }\n    /**\n     * Returns the default root for this document which is either the first root that was added to the document using\n     * {@link #createRoot} or the {@link #graveyard graveyard root} if no other roots were created.\n     *\n     * @returns The default root for this document.\n     */\n    _getDefaultRoot() {\n        const roots = this.getRoots();\n        return roots.length ? roots[0] : this.graveyard;\n    }\n    /**\n     * Returns the default range for this selection. The default range is a collapsed range that starts and ends\n     * at the beginning of this selection's document {@link #_getDefaultRoot default root}.\n     *\n     * @internal\n     */\n    _getDefaultRange() {\n        const defaultRoot = this._getDefaultRoot();\n        const model = this.model;\n        const schema = model.schema;\n        // Find the first position where the selection can be put.\n        const position = model.createPositionFromPath(defaultRoot, [0]);\n        const nearestRange = schema.getNearestSelectionRange(position);\n        // If valid selection range is not found - return range collapsed at the beginning of the root.\n        return nearestRange || model.createRange(position);\n    }\n    /**\n     * Checks whether a given {@link module:engine/model/range~Range range} is a valid range for\n     * the {@link #selection document's selection}.\n     *\n     * @internal\n     * @param range A range to check.\n     * @returns `true` if `range` is valid, `false` otherwise.\n     */\n    _validateSelectionRange(range) {\n        return range.start.isValid() && range.end.isValid() &&\n            validateTextNodePosition(range.start) && validateTextNodePosition(range.end);\n    }\n    /**\n     * Performs post-fixer loops. Executes post-fixer callbacks as long as none of them has done any changes to the model.\n     *\n     * @param writer The writer on which post-fixer callbacks will be called.\n     */\n    _callPostFixers(writer) {\n        let wasFixed = false;\n        do {\n            for (const callback of this._postFixers) {\n                // Ensure selection attributes are up to date before each post-fixer.\n                // https://github.com/ckeditor/ckeditor5-engine/issues/1673.\n                //\n                // It might be good to refresh the selection after each operation but at the moment it leads\n                // to losing attributes for composition or and spell checking\n                // https://github.com/ckeditor/ckeditor5-typing/issues/188\n                this.selection.refresh();\n                wasFixed = callback(writer);\n                if (wasFixed) {\n                    break;\n                }\n            }\n        } while (wasFixed);\n    }\n}\n/**\n * Checks whether given range boundary position is valid for document selection, meaning that is not between\n * unicode surrogate pairs or base character and combining marks.\n */\nfunction validateTextNodePosition(rangeBoundary) {\n    const textNode = rangeBoundary.textNode;\n    if (textNode) {\n        const data = textNode.data;\n        const offset = rangeBoundary.offset - textNode.startOffset;\n        return !isInsideSurrogatePair(data, offset) && !isInsideCombinedSymbol(data, offset);\n    }\n    return true;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/markercollection\n */\nimport TypeCheckable from './typecheckable.js';\nimport LiveRange from './liverange.js';\nimport { CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * The collection of all {@link module:engine/model/markercollection~Marker markers} attached to the document.\n * It lets you {@link module:engine/model/markercollection~MarkerCollection#get get} markers or track them using\n * {@link module:engine/model/markercollection~MarkerCollection#event:update} event.\n *\n * To create, change or remove makers use {@link module:engine/model/writer~Writer model writers'} methods:\n * {@link module:engine/model/writer~Writer#addMarker} or {@link module:engine/model/writer~Writer#removeMarker}. Since\n * the writer is the only proper way to change the data model it is not possible to change markers directly using this\n * collection. All markers created by the writer will be automatically added to this collection.\n *\n * By default there is one marker collection available as {@link module:engine/model/model~Model#markers model property}.\n *\n * @see module:engine/model/markercollection~Marker\n */\nexport default class MarkerCollection extends /* #__PURE__ */ EmitterMixin() {\n    constructor() {\n        super(...arguments);\n        /**\n         * Stores {@link ~Marker markers} added to the collection.\n         */\n        this._markers = new Map();\n    }\n    /**\n     * Iterable interface.\n     *\n     * Iterates over all {@link ~Marker markers} added to the collection.\n     */\n    [Symbol.iterator]() {\n        return this._markers.values();\n    }\n    /**\n     * Checks if given {@link ~Marker marker} or marker name is in the collection.\n     *\n     * @param markerOrName Name of marker or marker instance to check.\n     * @returns `true` if marker is in the collection, `false` otherwise.\n     */\n    has(markerOrName) {\n        const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n        return this._markers.has(markerName);\n    }\n    /**\n     * Returns {@link ~Marker marker} with given `markerName`.\n     *\n     * @param markerName Name of marker to get.\n     * @returns Marker with given name or `null` if such marker was\n     * not added to the collection.\n     */\n    get(markerName) {\n        return this._markers.get(markerName) || null;\n    }\n    /**\n     * Creates and adds a {@link ~Marker marker} to the `MarkerCollection` with given name on given\n     * {@link module:engine/model/range~Range range}.\n     *\n     * If `MarkerCollection` already had a marker with given name (or {@link ~Marker marker} was passed), the marker in\n     * collection is updated and {@link module:engine/model/markercollection~MarkerCollection#event:update} event is fired\n     * but only if there was a change (marker range or {@link module:engine/model/markercollection~Marker#managedUsingOperations}\n     * flag has changed.\n     *\n     * @internal\n     * @fires update\n     * @param markerOrName Name of marker to set or marker instance to update.\n     * @param range Marker range.\n     * @param managedUsingOperations Specifies whether the marker is managed using operations.\n     * @param affectsData Specifies whether the marker affects the data produced by the data pipeline\n     * (is persisted in the editor's data).\n     * @returns `Marker` instance which was added or updated.\n     */\n    _set(markerOrName, range, managedUsingOperations = false, affectsData = false) {\n        const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n        if (markerName.includes(',')) {\n            /**\n             * Marker name cannot contain the \",\" character.\n             *\n             * @error markercollection-incorrect-marker-name\n             */\n            throw new CKEditorError('markercollection-incorrect-marker-name', this);\n        }\n        const oldMarker = this._markers.get(markerName);\n        if (oldMarker) {\n            const oldMarkerData = oldMarker.getData();\n            const oldRange = oldMarker.getRange();\n            let hasChanged = false;\n            if (!oldRange.isEqual(range)) {\n                oldMarker._attachLiveRange(LiveRange.fromRange(range));\n                hasChanged = true;\n            }\n            if (managedUsingOperations != oldMarker.managedUsingOperations) {\n                oldMarker._managedUsingOperations = managedUsingOperations;\n                hasChanged = true;\n            }\n            if (typeof affectsData === 'boolean' && affectsData != oldMarker.affectsData) {\n                oldMarker._affectsData = affectsData;\n                hasChanged = true;\n            }\n            if (hasChanged) {\n                this.fire(`update:${markerName}`, oldMarker, oldRange, range, oldMarkerData);\n            }\n            return oldMarker;\n        }\n        const liveRange = LiveRange.fromRange(range);\n        const marker = new Marker(markerName, liveRange, managedUsingOperations, affectsData);\n        this._markers.set(markerName, marker);\n        this.fire(`update:${markerName}`, marker, null, range, { ...marker.getData(), range: null });\n        return marker;\n    }\n    /**\n     * Removes given {@link ~Marker marker} or a marker with given name from the `MarkerCollection`.\n     *\n     * @internal\n     * @fires update\n     * @param markerOrName Marker or name of a marker to remove.\n     * @returns `true` if marker was found and removed, `false` otherwise.\n     */\n    _remove(markerOrName) {\n        const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n        const oldMarker = this._markers.get(markerName);\n        if (oldMarker) {\n            this._markers.delete(markerName);\n            this.fire(`update:${markerName}`, oldMarker, oldMarker.getRange(), null, oldMarker.getData());\n            this._destroyMarker(oldMarker);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Fires an {@link module:engine/model/markercollection~MarkerCollection#event:update} event for the given {@link ~Marker marker}\n     * but does not change the marker. Useful to force {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast\n     * conversion} for the marker.\n     *\n     * @internal\n     * @fires update\n     * @param markerOrName Marker or name of a marker to refresh.\n     */\n    _refresh(markerOrName) {\n        const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n        const marker = this._markers.get(markerName);\n        if (!marker) {\n            /**\n             * Marker with provided name does not exists.\n             *\n             * @error markercollection-refresh-marker-not-exists\n             */\n            throw new CKEditorError('markercollection-refresh-marker-not-exists', this);\n        }\n        const range = marker.getRange();\n        this.fire(`update:${markerName}`, marker, range, range, marker.getData());\n    }\n    /**\n     * Returns iterator that iterates over all markers, which ranges contain given {@link module:engine/model/position~Position position}.\n     */\n    *getMarkersAtPosition(position) {\n        for (const marker of this) {\n            if (marker.getRange().containsPosition(position)) {\n                yield marker;\n            }\n        }\n    }\n    /**\n     * Returns iterator that iterates over all markers, which intersects with given {@link module:engine/model/range~Range range}.\n     */\n    *getMarkersIntersectingRange(range) {\n        for (const marker of this) {\n            if (marker.getRange().getIntersection(range) !== null) {\n                yield marker;\n            }\n        }\n    }\n    /**\n     * Destroys marker collection and all markers inside it.\n     */\n    destroy() {\n        for (const marker of this._markers.values()) {\n            this._destroyMarker(marker);\n        }\n        this._markers = null;\n        this.stopListening();\n    }\n    /**\n     * Iterates over all markers that starts with given `prefix`.\n     *\n     * ```ts\n     * const markerFooA = markersCollection._set( 'foo:a', rangeFooA );\n     * const markerFooB = markersCollection._set( 'foo:b', rangeFooB );\n     * const markerBarA = markersCollection._set( 'bar:a', rangeBarA );\n     * const markerFooBarA = markersCollection._set( 'foobar:a', rangeFooBarA );\n     * Array.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]\n     * Array.from( markersCollection.getMarkersGroup( 'a' ) ); // []\n     * ```\n     */\n    *getMarkersGroup(prefix) {\n        for (const marker of this._markers.values()) {\n            if (marker.name.startsWith(prefix + ':')) {\n                yield marker;\n            }\n        }\n    }\n    /**\n     * Destroys the marker.\n     */\n    _destroyMarker(marker) {\n        marker.stopListening();\n        marker._detachLiveRange();\n    }\n}\n/**\n * `Marker` is a continuous part of the model (like a range), is named and represents some kind of information about the\n * marked part of the model document. In contrary to {@link module:engine/model/node~Node nodes}, which are building blocks of\n * the model document tree, markers are not stored directly in the document tree but in the\n * {@link module:engine/model/model~Model#markers model markers' collection}. Still, they are document data, by giving\n * additional meaning to the part of a model document between marker start and marker end.\n *\n * In this sense, markers are similar to adding and converting attributes on nodes. The difference is that attribute is\n * connected with a given node (e.g. a character is bold no matter if it gets moved or content around it changes).\n * Markers on the other hand are continuous ranges and are characterized by their start and end position. This means that\n * any character in the marker is marked by the marker. For example, if a character is moved outside of marker it stops being\n * \"special\" and the marker is shrunk. Similarly, when a character is moved into the marker from other place in document\n * model, it starts being \"special\" and the marker is enlarged.\n *\n * Another upside of markers is that finding marked part of document is fast and easy. Using attributes to mark some nodes\n * and then trying to find that part of document would require traversing whole document tree. Marker gives instant access\n * to the range which it is marking at the moment.\n *\n * Markers are built from a name and a range.\n *\n * Range of the marker is updated automatically when document changes, using\n * {@link module:engine/model/liverange~LiveRange live range} mechanism.\n *\n * Name is used to group and identify markers. Names have to be unique, but markers can be grouped by\n * using common prefixes, separated with `:`, for example: `user:john` or `search:3`. That's useful in term of creating\n * namespaces for custom elements (e.g. comments, highlights). You can use this prefixes in\n * {@link module:engine/model/markercollection~MarkerCollection#event:update} listeners to listen on changes in a group of markers.\n * For instance: `model.markers.on( 'update:user', callback );` will be called whenever any `user:*` markers changes.\n *\n * There are two types of markers.\n *\n * 1. Markers managed directly, without using operations. They are added directly by {@link module:engine/model/writer~Writer}\n * to the {@link module:engine/model/markercollection~MarkerCollection} without any additional mechanism. They can be used\n * as bookmarks or visual markers. They are great for showing results of the find, or select link when the focus is in the input.\n *\n * 1. Markers managed using operations. These markers are also stored in {@link module:engine/model/markercollection~MarkerCollection}\n * but changes in these markers is managed the same way all other changes in the model structure - using operations.\n * Therefore, they are handled in the undo stack and synchronized between clients if the collaboration plugin is enabled.\n * This type of markers is useful for solutions like spell checking or comments.\n *\n * Both type of them should be added / updated by {@link module:engine/model/writer~Writer#addMarker}\n * and removed by {@link module:engine/model/writer~Writer#removeMarker} methods.\n *\n * ```ts\n * model.change( ( writer ) => {\n * \tconst marker = writer.addMarker( name, { range, usingOperation: true } );\n *\n * \t// ...\n *\n * \twriter.removeMarker( marker );\n * } );\n * ```\n *\n * See {@link module:engine/model/writer~Writer} to find more examples.\n *\n * Since markers need to track change in the document, for efficiency reasons, it is best to create and keep as little\n * markers as possible and remove them as soon as they are not needed anymore.\n *\n * Markers can be downcasted and upcasted.\n *\n * Markers downcast happens on {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker} and\n * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:removeMarker} events.\n * Use {@link module:engine/conversion/downcasthelpers downcast converters} or attach a custom converter to mentioned events.\n * For {@link module:engine/controller/datacontroller~DataController data pipeline}, marker should be downcasted to an element.\n * Then, it can be upcasted back to a marker. Again, use {@link module:engine/conversion/upcasthelpers upcast converters} or\n * attach a custom converter to {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element}.\n *\n * `Marker` instances are created and destroyed only by {@link ~MarkerCollection MarkerCollection}.\n */\nclass Marker extends /* #__PURE__ */ EmitterMixin(TypeCheckable) {\n    /**\n     * Creates a marker instance.\n     *\n     * @param name Marker name.\n     * @param liveRange Range marked by the marker.\n     * @param managedUsingOperations Specifies whether the marker is managed using operations.\n     * @param affectsData Specifies whether the marker affects the data produced by the data pipeline (is persisted in the editor's data).\n     */\n    constructor(name, liveRange, managedUsingOperations, affectsData) {\n        super();\n        this.name = name;\n        this._liveRange = this._attachLiveRange(liveRange);\n        this._managedUsingOperations = managedUsingOperations;\n        this._affectsData = affectsData;\n    }\n    /**\n     * A value indicating if the marker is managed using operations.\n     * See {@link ~Marker marker class description} to learn more about marker types.\n     * See {@link module:engine/model/writer~Writer#addMarker}.\n     */\n    get managedUsingOperations() {\n        if (!this._liveRange) {\n            throw new CKEditorError('marker-destroyed', this);\n        }\n        return this._managedUsingOperations;\n    }\n    /**\n     * A value indicating if the marker changes the data.\n     */\n    get affectsData() {\n        if (!this._liveRange) {\n            throw new CKEditorError('marker-destroyed', this);\n        }\n        return this._affectsData;\n    }\n    /**\n     * Returns the marker data (properties defining the marker).\n     */\n    getData() {\n        return {\n            range: this.getRange(),\n            affectsData: this.affectsData,\n            managedUsingOperations: this.managedUsingOperations\n        };\n    }\n    /**\n     * Returns current marker start position.\n     */\n    getStart() {\n        if (!this._liveRange) {\n            throw new CKEditorError('marker-destroyed', this);\n        }\n        return this._liveRange.start.clone();\n    }\n    /**\n     * Returns current marker end position.\n     */\n    getEnd() {\n        if (!this._liveRange) {\n            throw new CKEditorError('marker-destroyed', this);\n        }\n        return this._liveRange.end.clone();\n    }\n    /**\n     * Returns a range that represents the current state of the marker.\n     *\n     * Keep in mind that returned value is a {@link module:engine/model/range~Range Range}, not a\n     * {@link module:engine/model/liverange~LiveRange LiveRange}. This means that it is up-to-date and relevant only\n     * until next model document change. Do not store values returned by this method. Instead, store {@link ~Marker#name}\n     * and get `Marker` instance from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection} every\n     * time there is a need to read marker properties. This will guarantee that the marker has not been removed and\n     * that it's data is up-to-date.\n     */\n    getRange() {\n        if (!this._liveRange) {\n            throw new CKEditorError('marker-destroyed', this);\n        }\n        return this._liveRange.toRange();\n    }\n    /**\n     * Binds new live range to the marker and detach the old one if is attached.\n     *\n     * @internal\n     * @param liveRange Live range to attach\n     * @returns Attached live range.\n     */\n    _attachLiveRange(liveRange) {\n        if (this._liveRange) {\n            this._detachLiveRange();\n        }\n        // Delegating does not work with namespaces. Alternatively, we could delegate all events (using `*`).\n        liveRange.delegate('change:range').to(this);\n        liveRange.delegate('change:content').to(this);\n        this._liveRange = liveRange;\n        return liveRange;\n    }\n    /**\n     * Unbinds and destroys currently attached live range.\n     *\n     * @internal\n     */\n    _detachLiveRange() {\n        this._liveRange.stopDelegating('change:range', this);\n        this._liveRange.stopDelegating('change:content', this);\n        this._liveRange.detach();\n        this._liveRange = null;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nMarker.prototype.is = function (type) {\n    return type === 'marker' || type === 'model:marker';\n};\n/**\n * Cannot use a {@link module:engine/model/markercollection~MarkerCollection#destroy destroyed marker} instance.\n *\n * @error marker-destroyed\n */\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/operation/detachoperation\n */\nimport Operation from './operation.js';\nimport Range from '../range.js';\nimport { _remove } from './utils.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_ENGINE // const ModelRange = require( '../range' ).default;\n/**\n * Operation to permanently remove node from detached root.\n * Note this operation is only a local operation and won't be send to the other clients.\n */\nexport default class DetachOperation extends Operation {\n    /**\n     * Creates an insert operation.\n     *\n     * @param sourcePosition Position before the first {@link module:engine/model/item~Item model item} to move.\n     * @param howMany Offset size of moved range. Moved range will start from `sourcePosition` and end at\n     * `sourcePosition` with offset shifted by `howMany`.\n     */\n    constructor(sourcePosition, howMany) {\n        super(null);\n        this.sourcePosition = sourcePosition.clone();\n        this.howMany = howMany;\n    }\n    /**\n     * @inheritDoc\n     */\n    get type() {\n        return 'detach';\n    }\n    /**\n     * @inheritDoc\n     */\n    get affectedSelectable() {\n        return null;\n    }\n    /**\n     * @inheritDoc\n     */\n    toJSON() {\n        const json = super.toJSON();\n        json.sourcePosition = this.sourcePosition.toJSON();\n        return json;\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _validate() {\n        if (this.sourcePosition.root.document) {\n            /**\n             * Cannot detach document node.\n             *\n             * @error detach-operation-on-document-node\n             */\n            throw new CKEditorError('detach-operation-on-document-node', this);\n        }\n    }\n    /**\n     * @inheritDoc\n     * @internal\n     */\n    _execute() {\n        _remove(Range._createFromPositionAndShift(this.sourcePosition, this.howMany));\n    }\n    /**\n     * @inheritDoc\n     */\n    static get className() {\n        return 'DetachOperation';\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/documentfragment\n */\nimport TypeCheckable from './typecheckable.js';\nimport Element from './element.js';\nimport NodeList from './nodelist.js';\nimport Text from './text.js';\nimport TextProxy from './textproxy.js';\nimport { isIterable } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_ENGINE // const { stringifyMap } = require( '../dev-utils/utils' );\n/**\n * DocumentFragment represents a part of model which does not have a common root but its top-level nodes\n * can be seen as siblings. In other words, it is a detached part of model tree, without a root.\n *\n * DocumentFragment has own {@link module:engine/model/markercollection~MarkerCollection}. Markers from this collection\n * will be set to the {@link module:engine/model/model~Model#markers model markers} by a\n * {@link module:engine/model/writer~Writer#insert} function.\n */\nexport default class DocumentFragment extends TypeCheckable {\n    /**\n     * Creates an empty `DocumentFragment`.\n     *\n     * **Note:** Constructor of this class shouldn't be used directly in the code.\n     * Use the {@link module:engine/model/writer~Writer#createDocumentFragment} method instead.\n     *\n     * @internal\n     * @param children Nodes to be contained inside the `DocumentFragment`.\n     */\n    constructor(children) {\n        super();\n        /**\n         * DocumentFragment static markers map. This is a list of names and {@link module:engine/model/range~Range ranges}\n         * which will be set as Markers to {@link module:engine/model/model~Model#markers model markers collection}\n         * when DocumentFragment will be inserted to the document.\n         */\n        this.markers = new Map();\n        /**\n         * List of nodes contained inside the document fragment.\n         */\n        this._children = new NodeList();\n        if (children) {\n            this._insertChild(0, children);\n        }\n    }\n    /**\n     * Returns an iterator that iterates over all nodes contained inside this document fragment.\n     */\n    [Symbol.iterator]() {\n        return this.getChildren();\n    }\n    /**\n     * Number of this document fragment's children.\n     */\n    get childCount() {\n        return this._children.length;\n    }\n    /**\n     * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all of this document fragment's children.\n     */\n    get maxOffset() {\n        return this._children.maxOffset;\n    }\n    /**\n     * Is `true` if there are no nodes inside this document fragment, `false` otherwise.\n     */\n    get isEmpty() {\n        return this.childCount === 0;\n    }\n    /**\n     * Artificial next sibling. Returns `null`. Added for compatibility reasons.\n     */\n    get nextSibling() {\n        return null;\n    }\n    /**\n     * Artificial previous sibling. Returns `null`. Added for compatibility reasons.\n     */\n    get previousSibling() {\n        return null;\n    }\n    /**\n     * Artificial root of `DocumentFragment`. Returns itself. Added for compatibility reasons.\n     */\n    get root() {\n        return this;\n    }\n    /**\n     * Artificial parent of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n     */\n    get parent() {\n        return null;\n    }\n    /**\n     * Artificial owner of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n     */\n    get document() {\n        return null;\n    }\n    /**\n     * Returns `false` as `DocumentFragment` by definition is not attached to a document. Added for compatibility reasons.\n     */\n    isAttached() {\n        return false;\n    }\n    /**\n     * Returns empty array. Added for compatibility reasons.\n     */\n    getAncestors() {\n        return [];\n    }\n    /**\n     * Gets the child at the given index. Returns `null` if incorrect index was passed.\n     *\n     * @param index Index in this document fragment.\n     * @returns Child node.\n     */\n    getChild(index) {\n        return this._children.getNode(index);\n    }\n    /**\n     * Gets the child at the given offset. Returns `null` if incorrect index was passed.\n     *\n     * @param offset Offset in this document fragment.\n     * @returns Child node.\n     */\n    getChildAtOffset(offset) {\n        return this._children.getNodeAtOffset(offset);\n    }\n    /**\n     * Returns an iterator that iterates over all of this document fragment's children.\n     */\n    getChildren() {\n        return this._children[Symbol.iterator]();\n    }\n    /**\n     * Returns an index of the given child node. Returns `null` if given node is not a child of this document fragment.\n     *\n     * @param node Child node to look for.\n     * @returns Child node's index.\n     */\n    getChildIndex(node) {\n        return this._children.getNodeIndex(node);\n    }\n    /**\n     * Returns the starting offset of given child. Starting offset is equal to the sum of\n     * {@link module:engine/model/node~Node#offsetSize offset sizes} of all node's siblings that are before it. Returns `null` if\n     * given node is not a child of this document fragment.\n     *\n     * @param node Child node to look for.\n     * @returns Child node's starting offset.\n     */\n    getChildStartOffset(node) {\n        return this._children.getNodeStartOffset(node);\n    }\n    /**\n     * Returns path to a `DocumentFragment`, which is an empty array. Added for compatibility reasons.\n     */\n    getPath() {\n        return [];\n    }\n    /**\n     * Returns a descendant node by its path relative to this element.\n     *\n     * ```ts\n     * // <this>a<b>c</b></this>\n     * this.getNodeByPath( [ 0 ] );     // -> \"a\"\n     * this.getNodeByPath( [ 1 ] );     // -> <b>\n     * this.getNodeByPath( [ 1, 0 ] );  // -> \"c\"\n     * ```\n     *\n     * @param relativePath Path of the node to find, relative to this element.\n     */\n    getNodeByPath(relativePath) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let node = this;\n        for (const offset of relativePath) {\n            node = node.getChildAtOffset(offset);\n        }\n        return node;\n    }\n    /**\n     * Converts offset \"position\" to index \"position\".\n     *\n     * Returns index of a node that occupies given offset. If given offset is too low, returns `0`. If given offset is\n     * too high, returns index after last child.\n     *\n     * ```ts\n     * const textNode = new Text( 'foo' );\n     * const pElement = new Element( 'p' );\n     * const docFrag = new DocumentFragment( [ textNode, pElement ] );\n     * docFrag.offsetToIndex( -1 ); // Returns 0, because offset is too low.\n     * docFrag.offsetToIndex( 0 ); // Returns 0, because offset 0 is taken by `textNode` which is at index 0.\n     * docFrag.offsetToIndex( 1 ); // Returns 0, because `textNode` has `offsetSize` equal to 3, so it occupies offset 1 too.\n     * docFrag.offsetToIndex( 2 ); // Returns 0.\n     * docFrag.offsetToIndex( 3 ); // Returns 1.\n     * docFrag.offsetToIndex( 4 ); // Returns 2. There are no nodes at offset 4, so last available index is returned.\n     * ```\n     *\n     * @param offset Offset to look for.\n     * @returns Index of a node that occupies given offset.\n     */\n    offsetToIndex(offset) {\n        return this._children.offsetToIndex(offset);\n    }\n    /**\n     * Converts `DocumentFragment` instance to plain object and returns it.\n     * Takes care of converting all of this document fragment's children.\n     *\n     * @returns `DocumentFragment` instance converted to plain object.\n     */\n    toJSON() {\n        const json = [];\n        for (const node of this._children) {\n            json.push(node.toJSON());\n        }\n        return json;\n    }\n    /**\n     * Creates a `DocumentFragment` instance from given plain object (i.e. parsed JSON string).\n     * Converts `DocumentFragment` children to proper nodes.\n     *\n     * @param json Plain object to be converted to `DocumentFragment`.\n     * @returns `DocumentFragment` instance created using given plain object.\n     */\n    static fromJSON(json) {\n        const children = [];\n        for (const child of json) {\n            if (child.name) {\n                // If child has name property, it is an Element.\n                children.push(Element.fromJSON(child));\n            }\n            else {\n                // Otherwise, it is a Text node.\n                children.push(Text.fromJSON(child));\n            }\n        }\n        return new DocumentFragment(children);\n    }\n    /**\n     * {@link #_insertChild Inserts} one or more nodes at the end of this document fragment.\n     *\n     * @internal\n     * @param items Items to be inserted.\n     */\n    _appendChild(items) {\n        this._insertChild(this.childCount, items);\n    }\n    /**\n     * Inserts one or more nodes at the given index and sets {@link module:engine/model/node~Node#parent parent} of these nodes\n     * to this document fragment.\n     *\n     * @internal\n     * @param index Index at which nodes should be inserted.\n     * @param items Items to be inserted.\n     */\n    _insertChild(index, items) {\n        const nodes = normalize(items);\n        for (const node of nodes) {\n            // If node that is being added to this element is already inside another element, first remove it from the old parent.\n            if (node.parent !== null) {\n                node._remove();\n            }\n            node.parent = this;\n        }\n        this._children._insertNodes(index, nodes);\n    }\n    /**\n     * Removes one or more nodes starting at the given index\n     * and sets {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.\n     *\n     * @internal\n     * @param index Index of the first node to remove.\n     * @param howMany Number of nodes to remove.\n     * @returns Array containing removed nodes.\n     */\n    _removeChildren(index, howMany = 1) {\n        const nodes = this._children._removeNodes(index, howMany);\n        for (const node of nodes) {\n            node.parent = null;\n        }\n        return nodes;\n    }\n}\n// The magic of type inference using `is` method is centralized in `TypeCheckable` class.\n// Proper overload would interfere with that.\nDocumentFragment.prototype.is = function (type) {\n    return type === 'documentFragment' || type === 'model:documentFragment';\n};\n/**\n * Converts strings to Text and non-iterables to arrays.\n */\nfunction normalize(nodes) {\n    // Separate condition because string is iterable.\n    if (typeof nodes == 'string') {\n        return [new Text(nodes)];\n    }\n    if (!isIterable(nodes)) {\n        nodes = [nodes];\n    }\n    // Array.from to enable .map() on non-arrays.\n    return Array.from(nodes)\n        .map(node => {\n        if (typeof node == 'string') {\n            return new Text(node);\n        }\n        if (node instanceof TextProxy) {\n            return new Text(node.data, node.getAttributes());\n        }\n        return node;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/writer\n */\nimport AttributeOperation from './operation/attributeoperation.js';\nimport DetachOperation from './operation/detachoperation.js';\nimport InsertOperation from './operation/insertoperation.js';\nimport MarkerOperation from './operation/markeroperation.js';\nimport MergeOperation from './operation/mergeoperation.js';\nimport MoveOperation from './operation/moveoperation.js';\nimport RenameOperation from './operation/renameoperation.js';\nimport RootAttributeOperation from './operation/rootattributeoperation.js';\nimport RootOperation from './operation/rootoperation.js';\nimport SplitOperation from './operation/splitoperation.js';\nimport DocumentFragment from './documentfragment.js';\nimport DocumentSelection from './documentselection.js';\nimport Element from './element.js';\nimport Position from './position.js';\nimport Range from './range.js';\nimport RootElement from './rootelement.js';\nimport Text from './text.js';\nimport { CKEditorError, logWarning, toMap } from '@ckeditor/ckeditor5-utils';\n/**\n * The model can only be modified by using the writer. It should be used whenever you want to create a node, modify\n * child nodes, attributes or text, set the selection's position and its attributes.\n *\n * The instance of the writer is only available in the {@link module:engine/model/model~Model#change `change()`} or\n * {@link module:engine/model/model~Model#enqueueChange `enqueueChange()`}.\n *\n * ```ts\n * model.change( writer => {\n * \twriter.insertText( 'foo', paragraph, 'end' );\n * } );\n * ```\n *\n * Note that the writer should never be stored and used outside of the `change()` and\n * `enqueueChange()` blocks.\n *\n * Note that writer's methods do not check the {@link module:engine/model/schema~Schema}. It is possible\n * to create incorrect model structures by using the writer. Read more about in\n * {@glink framework/deep-dive/schema#who-checks-the-schema \"Who checks the schema?\"}.\n *\n * @see module:engine/model/model~Model#change\n * @see module:engine/model/model~Model#enqueueChange\n */\nexport default class Writer {\n    /**\n     * Creates a writer instance.\n     *\n     * **Note:** It is not recommended to use it directly. Use {@link module:engine/model/model~Model#change `Model#change()`} or\n     * {@link module:engine/model/model~Model#enqueueChange `Model#enqueueChange()`} instead.\n     *\n     * @internal\n     */\n    constructor(model, batch) {\n        this.model = model;\n        this.batch = batch;\n    }\n    /**\n     * Creates a new {@link module:engine/model/text~Text text node}.\n     *\n     * ```ts\n     * writer.createText( 'foo' );\n     * writer.createText( 'foo', { bold: true } );\n     * ```\n     *\n     * @param data Text data.\n     * @param attributes Text attributes.\n     * @returns {module:engine/model/text~Text} Created text node.\n     */\n    createText(data, attributes) {\n        return new Text(data, attributes);\n    }\n    /**\n     * Creates a new {@link module:engine/model/element~Element element}.\n     *\n     * ```ts\n     * writer.createElement( 'paragraph' );\n     * writer.createElement( 'paragraph', { alignment: 'center' } );\n     * ```\n     *\n     * @param name Name of the element.\n     * @param attributes Elements attributes.\n     * @returns Created element.\n     */\n    createElement(name, attributes) {\n        return new Element(name, attributes);\n    }\n    /**\n     * Creates a new {@link module:engine/model/documentfragment~DocumentFragment document fragment}.\n     *\n     * @returns Created document fragment.\n     */\n    createDocumentFragment() {\n        return new DocumentFragment();\n    }\n    /**\n     * Creates a copy of the element and returns it. Created element has the same name and attributes as the original element.\n     * If clone is deep, the original element's children are also cloned. If not, then empty element is returned.\n     *\n     * @param element The element to clone.\n     * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any child.\n     */\n    cloneElement(element, deep = true) {\n        return element._clone(deep);\n    }\n    /**\n     * Inserts item on given position.\n     *\n     * ```ts\n     * const paragraph = writer.createElement( 'paragraph' );\n     * writer.insert( paragraph, position );\n     * ```\n     *\n     * Instead of using position you can use parent and offset:\n     *\n     * ```ts\n     * const text = writer.createText( 'foo' );\n     * writer.insert( text, paragraph, 5 );\n     * ```\n     *\n     * You can also use `end` instead of the offset to insert at the end:\n     *\n     * ```ts\n     * const text = writer.createText( 'foo' );\n     * writer.insert( text, paragraph, 'end' );\n     * ```\n     *\n     * Or insert before or after another element:\n     *\n     * ```ts\n     * const paragraph = writer.createElement( 'paragraph' );\n     * writer.insert( paragraph, anotherParagraph, 'after' );\n     * ```\n     *\n     * These parameters works the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n     *\n     * Note that if the item already has parent it will be removed from the previous parent.\n     *\n     * Note that you cannot re-insert a node from a document to a different document or a document fragment. In this case,\n     * `model-writer-insert-forbidden-move` is thrown.\n     *\n     * If you want to move {@link module:engine/model/range~Range range} instead of an\n     * {@link module:engine/model/item~Item item} use {@link module:engine/model/writer~Writer#move `Writer#move()`}.\n     *\n     * **Note:** For a paste-like content insertion mechanism see\n     * {@link module:engine/model/model~Model#insertContent `model.insertContent()`}.\n     *\n     * @param item Item or document fragment to insert.\n     * @param offset Offset or one of the flags. Used only when second parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    insert(item, itemOrPosition, offset = 0) {\n        this._assertWriterUsedCorrectly();\n        if (item instanceof Text && item.data == '') {\n            return;\n        }\n        const position = Position._createAt(itemOrPosition, offset);\n        // If item has a parent already.\n        if (item.parent) {\n            // We need to check if item is going to be inserted within the same document.\n            if (isSameTree(item.root, position.root)) {\n                // If it's we just need to move it.\n                this.move(Range._createOn(item), position);\n                return;\n            }\n            // If it isn't the same root.\n            else {\n                if (item.root.document) {\n                    /**\n                     * Cannot move a node from a document to a different tree.\n                     * It is forbidden to move a node that was already in a document outside of it.\n                     *\n                     * @error model-writer-insert-forbidden-move\n                     */\n                    throw new CKEditorError('model-writer-insert-forbidden-move', this);\n                }\n                else {\n                    // Move between two different document fragments or from document fragment to a document is possible.\n                    // In that case, remove the item from it's original parent.\n                    this.remove(item);\n                }\n            }\n        }\n        const version = position.root.document ? position.root.document.version : null;\n        const insert = new InsertOperation(position, item, version);\n        if (item instanceof Text) {\n            insert.shouldReceiveAttributes = true;\n        }\n        this.batch.addOperation(insert);\n        this.model.applyOperation(insert);\n        // When element is a DocumentFragment we need to move its markers to Document#markers.\n        if (item instanceof DocumentFragment) {\n            for (const [markerName, markerRange] of item.markers) {\n                // We need to migrate marker range from DocumentFragment to Document.\n                const rangeRootPosition = Position._createAt(markerRange.root, 0);\n                const range = new Range(markerRange.start._getCombined(rangeRootPosition, position), markerRange.end._getCombined(rangeRootPosition, position));\n                const options = { range, usingOperation: true, affectsData: true };\n                if (this.model.markers.has(markerName)) {\n                    this.updateMarker(markerName, options);\n                }\n                else {\n                    this.addMarker(markerName, options);\n                }\n            }\n        }\n    }\n    insertText(text, attributes, // Too complicated when not using `any`.\n    itemOrPosition, // Too complicated when not using `any`.\n    offset // Too complicated when not using `any`.\n    ) {\n        if (attributes instanceof DocumentFragment || attributes instanceof Element || attributes instanceof Position) {\n            this.insert(this.createText(text), attributes, itemOrPosition);\n        }\n        else {\n            this.insert(this.createText(text, attributes), itemOrPosition, offset);\n        }\n    }\n    insertElement(name, attributes, // Too complicated when not using `any`.\n    itemOrPositionOrOffset, // Too complicated when not using `any`.\n    offset // Too complicated when not using `any`.\n    ) {\n        if (attributes instanceof DocumentFragment || attributes instanceof Element || attributes instanceof Position) {\n            this.insert(this.createElement(name), attributes, itemOrPositionOrOffset);\n        }\n        else {\n            this.insert(this.createElement(name, attributes), itemOrPositionOrOffset, offset);\n        }\n    }\n    /**\n     * Inserts item at the end of the given parent.\n     *\n     * ```ts\n     * const paragraph = writer.createElement( 'paragraph' );\n     * writer.append( paragraph, root );\n     * ```\n     *\n     * Note that if the item already has parent it will be removed from the previous parent.\n     *\n     * If you want to move {@link module:engine/model/range~Range range} instead of an\n     * {@link module:engine/model/item~Item item} use {@link module:engine/model/writer~Writer#move `Writer#move()`}.\n     *\n     * @param item Item or document fragment to insert.\n     */\n    append(item, parent) {\n        this.insert(item, parent, 'end');\n    }\n    appendText(text, attributes, parent) {\n        if (attributes instanceof DocumentFragment || attributes instanceof Element) {\n            this.insert(this.createText(text), attributes, 'end');\n        }\n        else {\n            this.insert(this.createText(text, attributes), parent, 'end');\n        }\n    }\n    appendElement(name, attributes, parent) {\n        if (attributes instanceof DocumentFragment || attributes instanceof Element) {\n            this.insert(this.createElement(name), attributes, 'end');\n        }\n        else {\n            this.insert(this.createElement(name, attributes), parent, 'end');\n        }\n    }\n    /**\n     * Sets value of the attribute with given key on a {@link module:engine/model/item~Item model item}\n     * or on a {@link module:engine/model/range~Range range}.\n     *\n     * @param key Attribute key.\n     * @param value Attribute new value.\n     * @param itemOrRange Model item or range on which the attribute will be set.\n     */\n    setAttribute(key, value, itemOrRange) {\n        this._assertWriterUsedCorrectly();\n        if (itemOrRange instanceof Range) {\n            const ranges = itemOrRange.getMinimalFlatRanges();\n            for (const range of ranges) {\n                setAttributeOnRange(this, key, value, range);\n            }\n        }\n        else {\n            setAttributeOnItem(this, key, value, itemOrRange);\n        }\n    }\n    /**\n     * Sets values of attributes on a {@link module:engine/model/item~Item model item}\n     * or on a {@link module:engine/model/range~Range range}.\n     *\n     * ```ts\n     * writer.setAttributes( {\n     * \tbold: true,\n     * \titalic: true\n     * }, range );\n     * ```\n     *\n     * @param attributes Attributes keys and values.\n     * @param itemOrRange Model item or range on which the attributes will be set.\n     */\n    setAttributes(attributes, itemOrRange) {\n        for (const [key, val] of toMap(attributes)) {\n            this.setAttribute(key, val, itemOrRange);\n        }\n    }\n    /**\n     * Removes an attribute with given key from a {@link module:engine/model/item~Item model item}\n     * or from a {@link module:engine/model/range~Range range}.\n     *\n     * @param key Attribute key.\n     * @param itemOrRange Model item or range from which the attribute will be removed.\n     */\n    removeAttribute(key, itemOrRange) {\n        this._assertWriterUsedCorrectly();\n        if (itemOrRange instanceof Range) {\n            const ranges = itemOrRange.getMinimalFlatRanges();\n            for (const range of ranges) {\n                setAttributeOnRange(this, key, null, range);\n            }\n        }\n        else {\n            setAttributeOnItem(this, key, null, itemOrRange);\n        }\n    }\n    /**\n     * Removes all attributes from all elements in the range or from the given item.\n     *\n     * @param itemOrRange Model item or range from which all attributes will be removed.\n     */\n    clearAttributes(itemOrRange) {\n        this._assertWriterUsedCorrectly();\n        const removeAttributesFromItem = (item) => {\n            for (const attribute of item.getAttributeKeys()) {\n                this.removeAttribute(attribute, item);\n            }\n        };\n        if (!(itemOrRange instanceof Range)) {\n            removeAttributesFromItem(itemOrRange);\n        }\n        else {\n            for (const item of itemOrRange.getItems()) {\n                removeAttributesFromItem(item);\n            }\n        }\n    }\n    /**\n     * Moves all items in the source range to the target position.\n     *\n     * ```ts\n     * writer.move( sourceRange, targetPosition );\n     * ```\n     *\n     * Instead of the target position you can use parent and offset or define that range should be moved to the end\n     * or before or after chosen item:\n     *\n     * ```ts\n     * // Moves all items in the range to the paragraph at offset 5:\n     * writer.move( sourceRange, paragraph, 5 );\n     * // Moves all items in the range to the end of a blockquote:\n     * writer.move( sourceRange, blockquote, 'end' );\n     * // Moves all items in the range to a position after an image:\n     * writer.move( sourceRange, image, 'after' );\n     * ```\n     *\n     * These parameters work the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n     *\n     * Note that items can be moved only within the same tree. It means that you can move items within the same root\n     * (element or document fragment) or between {@link module:engine/model/document~Document#roots documents roots},\n     * but you can not move items from document fragment to the document or from one detached element to another. Use\n     * {@link module:engine/model/writer~Writer#insert} in such cases.\n     *\n     * @param range Source range.\n     * @param offset Offset or one of the flags. Used only when second parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    move(range, itemOrPosition, offset) {\n        this._assertWriterUsedCorrectly();\n        if (!(range instanceof Range)) {\n            /**\n             * Invalid range to move.\n             *\n             * @error writer-move-invalid-range\n             */\n            throw new CKEditorError('writer-move-invalid-range', this);\n        }\n        if (!range.isFlat) {\n            /**\n             * Range to move is not flat.\n             *\n             * @error writer-move-range-not-flat\n             */\n            throw new CKEditorError('writer-move-range-not-flat', this);\n        }\n        const position = Position._createAt(itemOrPosition, offset);\n        // Do not move anything if the move target is same as moved range start.\n        if (position.isEqual(range.start)) {\n            return;\n        }\n        // If part of the marker is removed, create additional marker operation for undo purposes.\n        this._addOperationForAffectedMarkers('move', range);\n        if (!isSameTree(range.root, position.root)) {\n            /**\n             * Range is going to be moved within not the same document. Please use\n             * {@link module:engine/model/writer~Writer#insert insert} instead.\n             *\n             * @error writer-move-different-document\n             */\n            throw new CKEditorError('writer-move-different-document', this);\n        }\n        const version = range.root.document ? range.root.document.version : null;\n        const operation = new MoveOperation(range.start, range.end.offset - range.start.offset, position, version);\n        this.batch.addOperation(operation);\n        this.model.applyOperation(operation);\n    }\n    /**\n     * Removes given model {@link module:engine/model/item~Item item} or {@link module:engine/model/range~Range range}.\n     *\n     * @param itemOrRange Model item or range to remove.\n     */\n    remove(itemOrRange) {\n        this._assertWriterUsedCorrectly();\n        const rangeToRemove = itemOrRange instanceof Range ? itemOrRange : Range._createOn(itemOrRange);\n        const ranges = rangeToRemove.getMinimalFlatRanges().reverse();\n        for (const flat of ranges) {\n            // If part of the marker is removed, create additional marker operation for undo purposes.\n            this._addOperationForAffectedMarkers('move', flat);\n            applyRemoveOperation(flat.start, flat.end.offset - flat.start.offset, this.batch, this.model);\n        }\n    }\n    /**\n     * Merges two siblings at the given position.\n     *\n     * Node before and after the position have to be an element. Otherwise `writer-merge-no-element-before` or\n     * `writer-merge-no-element-after` error will be thrown.\n     *\n     * @param position Position between merged elements.\n     */\n    merge(position) {\n        this._assertWriterUsedCorrectly();\n        const nodeBefore = position.nodeBefore;\n        const nodeAfter = position.nodeAfter;\n        // If part of the marker is removed, create additional marker operation for undo purposes.\n        this._addOperationForAffectedMarkers('merge', position);\n        if (!(nodeBefore instanceof Element)) {\n            /**\n             * Node before merge position must be an element.\n             *\n             * @error writer-merge-no-element-before\n             */\n            throw new CKEditorError('writer-merge-no-element-before', this);\n        }\n        if (!(nodeAfter instanceof Element)) {\n            /**\n             * Node after merge position must be an element.\n             *\n             * @error writer-merge-no-element-after\n             */\n            throw new CKEditorError('writer-merge-no-element-after', this);\n        }\n        if (!position.root.document) {\n            this._mergeDetached(position);\n        }\n        else {\n            this._merge(position);\n        }\n    }\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionFromPath `Model#createPositionFromPath()`}.\n     *\n     * @param root Root of the position.\n     * @param path Position path. See {@link module:engine/model/position~Position#path}.\n     * @param stickiness Position stickiness. See {@link module:engine/model/position~PositionStickiness}.\n     */\n    createPositionFromPath(root, path, stickiness) {\n        return this.model.createPositionFromPath(root, path, stickiness);\n    }\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionAt `Model#createPositionAt()`}.\n     *\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    createPositionAt(itemOrPosition, offset) {\n        return this.model.createPositionAt(itemOrPosition, offset);\n    }\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionAfter `Model#createPositionAfter()`}.\n     *\n     * @param item Item after which the position should be placed.\n     */\n    createPositionAfter(item) {\n        return this.model.createPositionAfter(item);\n    }\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createPositionBefore `Model#createPositionBefore()`}.\n     *\n     * @param item Item after which the position should be placed.\n     */\n    createPositionBefore(item) {\n        return this.model.createPositionBefore(item);\n    }\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createRange `Model#createRange()`}.\n     *\n     * @param start Start position.\n     * @param end End position. If not set, range will be collapsed at `start` position.\n     */\n    createRange(start, end) {\n        return this.model.createRange(start, end);\n    }\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createRangeIn `Model#createRangeIn()`}.\n     *\n     * @param element Element which is a parent for the range.\n     */\n    createRangeIn(element) {\n        return this.model.createRangeIn(element);\n    }\n    /**\n     * Shortcut for {@link module:engine/model/model~Model#createRangeOn `Model#createRangeOn()`}.\n     *\n     * @param element Element which is a parent for the range.\n     */\n    createRangeOn(element) {\n        return this.model.createRangeOn(element);\n    }\n    createSelection(...args) {\n        return this.model.createSelection(...args);\n    }\n    /**\n     * Performs merge action in a detached tree.\n     *\n     * @param position Position between merged elements.\n     */\n    _mergeDetached(position) {\n        const nodeBefore = position.nodeBefore;\n        const nodeAfter = position.nodeAfter;\n        this.move(Range._createIn(nodeAfter), Position._createAt(nodeBefore, 'end'));\n        this.remove(nodeAfter);\n    }\n    /**\n     * Performs merge action in a non-detached tree.\n     *\n     * @param position Position between merged elements.\n     */\n    _merge(position) {\n        const targetPosition = Position._createAt(position.nodeBefore, 'end');\n        const sourcePosition = Position._createAt(position.nodeAfter, 0);\n        const graveyard = position.root.document.graveyard;\n        const graveyardPosition = new Position(graveyard, [0]);\n        const version = position.root.document.version;\n        const merge = new MergeOperation(sourcePosition, position.nodeAfter.maxOffset, targetPosition, graveyardPosition, version);\n        this.batch.addOperation(merge);\n        this.model.applyOperation(merge);\n    }\n    /**\n     * Renames the given element.\n     *\n     * @param element The element to rename.\n     * @param newName New element name.\n     */\n    rename(element, newName) {\n        this._assertWriterUsedCorrectly();\n        if (!(element instanceof Element)) {\n            /**\n             * Trying to rename an object which is not an instance of Element.\n             *\n             * @error writer-rename-not-element-instance\n             */\n            throw new CKEditorError('writer-rename-not-element-instance', this);\n        }\n        const version = element.root.document ? element.root.document.version : null;\n        const renameOperation = new RenameOperation(Position._createBefore(element), element.name, newName, version);\n        this.batch.addOperation(renameOperation);\n        this.model.applyOperation(renameOperation);\n    }\n    /**\n     * Splits elements starting from the given position and going to the top of the model tree as long as given\n     * `limitElement` is reached. When `limitElement` is not defined then only the parent of the given position will be split.\n     *\n     * The element needs to have a parent. It cannot be a root element nor a document fragment.\n     * The `writer-split-element-no-parent` error will be thrown if you try to split an element with no parent.\n     *\n     * @param position Position of split.\n     * @param limitElement Stop splitting when this element will be reached.\n     * @returns Split result with properties:\n     * * `position` - Position between split elements.\n     * * `range` - Range that stars from the end of the first split element and ends at the beginning of the first copy element.\n     */\n    split(position, limitElement) {\n        this._assertWriterUsedCorrectly();\n        let splitElement = position.parent;\n        if (!splitElement.parent) {\n            /**\n             * Element with no parent can not be split.\n             *\n             * @error writer-split-element-no-parent\n             */\n            throw new CKEditorError('writer-split-element-no-parent', this);\n        }\n        // When limit element is not defined lets set splitElement parent as limit.\n        if (!limitElement) {\n            limitElement = splitElement.parent;\n        }\n        if (!position.parent.getAncestors({ includeSelf: true }).includes(limitElement)) {\n            /**\n             * Limit element is not a position ancestor.\n             *\n             * @error writer-split-invalid-limit-element\n             */\n            throw new CKEditorError('writer-split-invalid-limit-element', this);\n        }\n        // We need to cache elements that will be created as a result of the first split because\n        // we need to create a range from the end of the first split element to the beginning of the\n        // first copy element. This should be handled by LiveRange but it doesn't work on detached nodes.\n        let firstSplitElement;\n        let firstCopyElement;\n        do {\n            const version = splitElement.root.document ? splitElement.root.document.version : null;\n            const howMany = splitElement.maxOffset - position.offset;\n            const insertionPosition = SplitOperation.getInsertionPosition(position);\n            const split = new SplitOperation(position, howMany, insertionPosition, null, version);\n            this.batch.addOperation(split);\n            this.model.applyOperation(split);\n            // Cache result of the first split.\n            if (!firstSplitElement && !firstCopyElement) {\n                firstSplitElement = splitElement;\n                firstCopyElement = position.parent.nextSibling;\n            }\n            position = this.createPositionAfter(position.parent);\n            splitElement = position.parent;\n        } while (splitElement !== limitElement);\n        return {\n            position,\n            range: new Range(Position._createAt(firstSplitElement, 'end'), Position._createAt(firstCopyElement, 0))\n        };\n    }\n    /**\n     * Wraps the given range with the given element or with a new element (if a string was passed).\n     *\n     * **Note:** range to wrap should be a \"flat range\" (see {@link module:engine/model/range~Range#isFlat `Range#isFlat`}).\n     * If not, an error will be thrown.\n     *\n     * @param range Range to wrap.\n     * @param elementOrString Element or name of element to wrap the range with.\n     */\n    wrap(range, elementOrString) {\n        this._assertWriterUsedCorrectly();\n        if (!range.isFlat) {\n            /**\n             * Range to wrap is not flat.\n             *\n             * @error writer-wrap-range-not-flat\n             */\n            throw new CKEditorError('writer-wrap-range-not-flat', this);\n        }\n        const element = elementOrString instanceof Element ? elementOrString : new Element(elementOrString);\n        if (element.childCount > 0) {\n            /**\n             * Element to wrap with is not empty.\n             *\n             * @error writer-wrap-element-not-empty\n             */\n            throw new CKEditorError('writer-wrap-element-not-empty', this);\n        }\n        if (element.parent !== null) {\n            /**\n             * Element to wrap with is already attached to a tree model.\n             *\n             * @error writer-wrap-element-attached\n             */\n            throw new CKEditorError('writer-wrap-element-attached', this);\n        }\n        this.insert(element, range.start);\n        // Shift the range-to-wrap because we just inserted an element before that range.\n        const shiftedRange = new Range(range.start.getShiftedBy(1), range.end.getShiftedBy(1));\n        this.move(shiftedRange, Position._createAt(element, 0));\n    }\n    /**\n     * Unwraps children of the given element – all its children are moved before it and then the element is removed.\n     * Throws error if you try to unwrap an element which does not have a parent.\n     *\n     * @param element Element to unwrap.\n     */\n    unwrap(element) {\n        this._assertWriterUsedCorrectly();\n        if (element.parent === null) {\n            /**\n             * Trying to unwrap an element which has no parent.\n             *\n             * @error writer-unwrap-element-no-parent\n             */\n            throw new CKEditorError('writer-unwrap-element-no-parent', this);\n        }\n        this.move(Range._createIn(element), this.createPositionAfter(element));\n        this.remove(element);\n    }\n    /**\n     * Adds a {@link module:engine/model/markercollection~Marker marker}. Marker is a named range, which tracks\n     * changes in the document and updates its range automatically, when model tree changes.\n     *\n     * As the first parameter you can set marker name.\n     *\n     * The required `options.usingOperation` parameter lets you decide if the marker should be managed by operations or not. See\n     * {@link module:engine/model/markercollection~Marker marker class description} to learn about the difference between\n     * markers managed by operations and not-managed by operations.\n     *\n     * The `options.affectsData` parameter, which defaults to `false`, allows you to define if a marker affects the data. It should be\n     * `true` when the marker change changes the data returned by the\n     * {@link module:core/editor/editor~Editor#getData `editor.getData()`} method.\n     * When set to `true` it fires the {@link module:engine/model/document~Document#event:change:data `change:data`} event.\n     * When set to `false` it fires the {@link module:engine/model/document~Document#event:change `change`} event.\n     *\n     * Create marker directly base on marker's name:\n     *\n     * ```ts\n     * addMarker( markerName, { range, usingOperation: false } );\n     * ```\n     *\n     * Create marker using operation:\n     *\n     * ```ts\n     * addMarker( markerName, { range, usingOperation: true } );\n     * ```\n     *\n     * Create marker that affects the editor data:\n     *\n     * ```ts\n     * addMarker( markerName, { range, usingOperation: false, affectsData: true } );\n     * ```\n     *\n     * Note: For efficiency reasons, it's best to create and keep as little markers as possible.\n     *\n     * @see module:engine/model/markercollection~Marker\n     * @param name Name of a marker to create - must be unique.\n     * @param options.usingOperation Flag indicating that the marker should be added by MarkerOperation.\n     * See {@link module:engine/model/markercollection~Marker#managedUsingOperations}.\n     * @param options.range Marker range.\n     * @param options.affectsData Flag indicating that the marker changes the editor data.\n     * @returns Marker that was set.\n     */\n    addMarker(name, options) {\n        this._assertWriterUsedCorrectly();\n        if (!options || typeof options.usingOperation != 'boolean') {\n            /**\n             * The `options.usingOperation` parameter is required when adding a new marker.\n             *\n             * @error writer-addmarker-no-usingoperation\n             */\n            throw new CKEditorError('writer-addmarker-no-usingoperation', this);\n        }\n        const usingOperation = options.usingOperation;\n        const range = options.range;\n        const affectsData = options.affectsData === undefined ? false : options.affectsData;\n        if (this.model.markers.has(name)) {\n            /**\n             * Marker with provided name already exists.\n             *\n             * @error writer-addmarker-marker-exists\n             */\n            throw new CKEditorError('writer-addmarker-marker-exists', this);\n        }\n        if (!range) {\n            /**\n             * Range parameter is required when adding a new marker.\n             *\n             * @error writer-addmarker-no-range\n             */\n            throw new CKEditorError('writer-addmarker-no-range', this);\n        }\n        if (!usingOperation) {\n            return this.model.markers._set(name, range, usingOperation, affectsData);\n        }\n        applyMarkerOperation(this, name, null, range, affectsData);\n        return this.model.markers.get(name);\n    }\n    /**\n     * Adds, updates or refreshes a {@link module:engine/model/markercollection~Marker marker}. Marker is a named range, which tracks\n     * changes in the document and updates its range automatically, when model tree changes. Still, it is possible to change the\n     * marker's range directly using this method.\n     *\n     * As the first parameter you can set marker name or instance. If none of them is provided, new marker, with a unique\n     * name is created and returned.\n     *\n     * **Note**: If you want to change the {@link module:engine/view/element~Element view element} of the marker while its data in the model\n     * remains the same, use the dedicated {@link module:engine/controller/editingcontroller~EditingController#reconvertMarker} method.\n     *\n     * The `options.usingOperation` parameter lets you change if the marker should be managed by operations or not. See\n     * {@link module:engine/model/markercollection~Marker marker class description} to learn about the difference between\n     * markers managed by operations and not-managed by operations. It is possible to change this option for an existing marker.\n     *\n     * The `options.affectsData` parameter, which defaults to `false`, allows you to define if a marker affects the data. It should be\n     * `true` when the marker change changes the data returned by\n     * the {@link module:core/editor/editor~Editor#getData `editor.getData()`} method.\n     * When set to `true` it fires the {@link module:engine/model/document~Document#event:change:data `change:data`} event.\n     * When set to `false` it fires the {@link module:engine/model/document~Document#event:change `change`} event.\n     *\n     * Update marker directly base on marker's name:\n     *\n     * ```ts\n     * updateMarker( markerName, { range } );\n     * ```\n     *\n     * Update marker using operation:\n     *\n     * ```ts\n     * updateMarker( marker, { range, usingOperation: true } );\n     * updateMarker( markerName, { range, usingOperation: true } );\n     * ```\n     *\n     * Change marker's option (start using operations to manage it):\n     *\n     * ```ts\n     * updateMarker( marker, { usingOperation: true } );\n     * ```\n     *\n     * Change marker's option (inform the engine, that the marker does not affect the data anymore):\n     *\n     * ```ts\n     * updateMarker( markerName, { affectsData: false } );\n     * ```\n     *\n     * @see module:engine/model/markercollection~Marker\n     * @param markerOrName Name of a marker to update, or a marker instance.\n     * @param options If options object is not defined then marker will be refreshed by triggering\n     * downcast conversion for this marker with the same data.\n     * @param options.range Marker range to update.\n     * @param options.usingOperation Flag indicated whether the marker should be added by MarkerOperation.\n     * See {@link module:engine/model/markercollection~Marker#managedUsingOperations}.\n     * @param options.affectsData Flag indicating that the marker changes the editor data.\n     */\n    updateMarker(markerOrName, options) {\n        this._assertWriterUsedCorrectly();\n        const markerName = typeof markerOrName == 'string' ? markerOrName : markerOrName.name;\n        const currentMarker = this.model.markers.get(markerName);\n        if (!currentMarker) {\n            /**\n             * Marker with provided name does not exist and will not be updated.\n             *\n             * @error writer-updatemarker-marker-not-exists\n             */\n            throw new CKEditorError('writer-updatemarker-marker-not-exists', this);\n        }\n        if (!options) {\n            /**\n             * The usage of `writer.updateMarker()` only to reconvert (refresh) a\n             * {@link module:engine/model/markercollection~Marker model marker} was deprecated and may not work in the future.\n             * Please update your code to use\n             * {@link module:engine/controller/editingcontroller~EditingController#reconvertMarker `editor.editing.reconvertMarker()`}\n             * instead.\n             *\n             * @error writer-updatemarker-reconvert-using-editingcontroller\n             * @param markerName The name of the updated marker.\n             */\n            logWarning('writer-updatemarker-reconvert-using-editingcontroller', { markerName });\n            this.model.markers._refresh(currentMarker);\n            return;\n        }\n        const hasUsingOperationDefined = typeof options.usingOperation == 'boolean';\n        const affectsDataDefined = typeof options.affectsData == 'boolean';\n        // Use previously defined marker's affectsData if the property is not provided.\n        const affectsData = affectsDataDefined ? options.affectsData : currentMarker.affectsData;\n        if (!hasUsingOperationDefined && !options.range && !affectsDataDefined) {\n            /**\n             * One of the options is required - provide range, usingOperations or affectsData.\n             *\n             * @error writer-updatemarker-wrong-options\n             */\n            throw new CKEditorError('writer-updatemarker-wrong-options', this);\n        }\n        const currentRange = currentMarker.getRange();\n        const updatedRange = options.range ? options.range : currentRange;\n        if (hasUsingOperationDefined && options.usingOperation !== currentMarker.managedUsingOperations) {\n            // The marker type is changed so it's necessary to create proper operations.\n            if (options.usingOperation) {\n                // If marker changes to a managed one treat this as synchronizing existing marker.\n                // Create `MarkerOperation` with `oldRange` set to `null`, so reverse operation will remove the marker.\n                applyMarkerOperation(this, markerName, null, updatedRange, affectsData);\n            }\n            else {\n                // If marker changes to a marker that do not use operations then we need to create additional operation\n                // that removes that marker first.\n                applyMarkerOperation(this, markerName, currentRange, null, affectsData);\n                // Although not managed the marker itself should stay in model and its range should be preserver or changed to passed range.\n                this.model.markers._set(markerName, updatedRange, undefined, affectsData);\n            }\n            return;\n        }\n        // Marker's type doesn't change so update it accordingly.\n        if (currentMarker.managedUsingOperations) {\n            applyMarkerOperation(this, markerName, currentRange, updatedRange, affectsData);\n        }\n        else {\n            this.model.markers._set(markerName, updatedRange, undefined, affectsData);\n        }\n    }\n    /**\n     * Removes given {@link module:engine/model/markercollection~Marker marker} or marker with given name.\n     * The marker is removed accordingly to how it has been created, so if the marker was created using operation,\n     * it will be destroyed using operation.\n     *\n     * @param markerOrName Marker or marker name to remove.\n     */\n    removeMarker(markerOrName) {\n        this._assertWriterUsedCorrectly();\n        const name = typeof markerOrName == 'string' ? markerOrName : markerOrName.name;\n        if (!this.model.markers.has(name)) {\n            /**\n             * Trying to remove marker which does not exist.\n             *\n             * @error writer-removemarker-no-marker\n             */\n            throw new CKEditorError('writer-removemarker-no-marker', this);\n        }\n        const marker = this.model.markers.get(name);\n        if (!marker.managedUsingOperations) {\n            this.model.markers._remove(name);\n            return;\n        }\n        const oldRange = marker.getRange();\n        applyMarkerOperation(this, name, oldRange, null, marker.affectsData);\n    }\n    /**\n     * Adds a new root to the document (or re-attaches a {@link #detachRoot detached root}).\n     *\n     * Throws an error, if trying to add a root that is already added and attached.\n     *\n     * @param rootName Name of the added root.\n     * @param elementName The element name. Defaults to `'$root'` which also has some basic schema defined\n     * (e.g. `$block` elements are allowed inside the `$root`). Make sure to define a proper schema if you use a different name.\n     * @returns The added root element.\n     */\n    addRoot(rootName, elementName = '$root') {\n        this._assertWriterUsedCorrectly();\n        const root = this.model.document.getRoot(rootName);\n        if (root && root.isAttached()) {\n            /**\n             * Root with provided name already exists and is attached.\n             *\n             * @error writer-addroot-root-exists\n             */\n            throw new CKEditorError('writer-addroot-root-exists', this);\n        }\n        const document = this.model.document;\n        const operation = new RootOperation(rootName, elementName, true, document, document.version);\n        this.batch.addOperation(operation);\n        this.model.applyOperation(operation);\n        return this.model.document.getRoot(rootName);\n    }\n    /**\n     * Detaches the root from the document.\n     *\n     * All content and markers are removed from the root upon detaching. New content and new markers cannot be added to the root, as long\n     * as it is detached.\n     *\n     * A root cannot be fully removed from the document, it can be only detached. A root is permanently removed only after you\n     * re-initialize the editor and do not specify the root in the initial data.\n     *\n     * A detached root can be re-attached using {@link #addRoot}.\n     *\n     * Throws an error if the root does not exist or the root is already detached.\n     *\n     * @param rootOrName Name of the detached root.\n     */\n    detachRoot(rootOrName) {\n        this._assertWriterUsedCorrectly();\n        const root = typeof rootOrName == 'string' ? this.model.document.getRoot(rootOrName) : rootOrName;\n        if (!root || !root.isAttached()) {\n            /**\n             * Root with provided name does not exist or is already detached.\n             *\n             * @error writer-detachroot-no-root\n             */\n            throw new CKEditorError('writer-detachroot-no-root', this);\n        }\n        // First, remove all markers from the root. It is better to do it before removing stuff for undo purposes.\n        // However, looking through all the markers may not be the best performance wise. But there's no better solution for now.\n        for (const marker of this.model.markers) {\n            if (marker.getRange().root === root) {\n                this.removeMarker(marker);\n            }\n        }\n        // Remove all attributes from the root.\n        for (const key of root.getAttributeKeys()) {\n            this.removeAttribute(key, root);\n        }\n        // Remove all contents of the root.\n        this.remove(this.createRangeIn(root));\n        // Finally, detach the root.\n        const document = this.model.document;\n        const operation = new RootOperation(root.rootName, root.name, false, document, document.version);\n        this.batch.addOperation(operation);\n        this.model.applyOperation(operation);\n    }\n    setSelection(...args) {\n        this._assertWriterUsedCorrectly();\n        this.model.document.selection._setTo(...args);\n    }\n    /**\n     * Moves {@link module:engine/model/documentselection~DocumentSelection#focus} to the specified location.\n     *\n     * The location can be specified in the same form as\n     * {@link #createPositionAt `writer.createPositionAt()`} parameters.\n     *\n     * @param itemOrPosition\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    setSelectionFocus(itemOrPosition, offset) {\n        this._assertWriterUsedCorrectly();\n        this.model.document.selection._setFocus(itemOrPosition, offset);\n    }\n    setSelectionAttribute(keyOrObjectOrIterable, value) {\n        this._assertWriterUsedCorrectly();\n        if (typeof keyOrObjectOrIterable === 'string') {\n            this._setSelectionAttribute(keyOrObjectOrIterable, value);\n        }\n        else {\n            for (const [key, value] of toMap(keyOrObjectOrIterable)) {\n                this._setSelectionAttribute(key, value);\n            }\n        }\n    }\n    /**\n     * Removes attribute(s) with given key(s) from the selection.\n     *\n     * Remove one attribute:\n     *\n     * ```ts\n     * writer.removeSelectionAttribute( 'italic' );\n     * ```\n     *\n     * Remove multiple attributes:\n     *\n     * ```ts\n     * writer.removeSelectionAttribute( [ 'italic', 'bold' ] );\n     * ```\n     *\n     * @param keyOrIterableOfKeys Key of the attribute to remove or an iterable of attribute keys to remove.\n     */\n    removeSelectionAttribute(keyOrIterableOfKeys) {\n        this._assertWriterUsedCorrectly();\n        if (typeof keyOrIterableOfKeys === 'string') {\n            this._removeSelectionAttribute(keyOrIterableOfKeys);\n        }\n        else {\n            for (const key of keyOrIterableOfKeys) {\n                this._removeSelectionAttribute(key);\n            }\n        }\n    }\n    /**\n     * Temporarily changes the {@link module:engine/model/documentselection~DocumentSelection#isGravityOverridden gravity}\n     * of the selection from left to right.\n     *\n     * The gravity defines from which direction the selection inherits its attributes. If it's the default left gravity,\n     * then the selection (after being moved by the user) inherits attributes from its left-hand side.\n     * This method allows to temporarily override this behavior by forcing the gravity to the right.\n     *\n     * For the following model fragment:\n     *\n     * ```xml\n     * <$text bold=\"true\" linkHref=\"url\">bar[]</$text><$text bold=\"true\">biz</$text>\n     * ```\n     *\n     * * Default gravity: selection will have the `bold` and `linkHref` attributes.\n     * * Overridden gravity: selection will have `bold` attribute.\n     *\n     * **Note**: It returns an unique identifier which is required to restore the gravity. It guarantees the symmetry\n     * of the process.\n     *\n     * @returns The unique id which allows restoring the gravity.\n     */\n    overrideSelectionGravity() {\n        return this.model.document.selection._overrideGravity();\n    }\n    /**\n     * Restores {@link ~Writer#overrideSelectionGravity} gravity to default.\n     *\n     * Restoring the gravity is only possible using the unique identifier returned by\n     * {@link ~Writer#overrideSelectionGravity}. Note that the gravity remains overridden as long as won't be restored\n     * the same number of times it was overridden.\n     *\n     * @param uid The unique id returned by {@link ~Writer#overrideSelectionGravity}.\n     */\n    restoreSelectionGravity(uid) {\n        this.model.document.selection._restoreGravity(uid);\n    }\n    /**\n     * @param key Key of the attribute to remove.\n     * @param value Attribute value.\n     */\n    _setSelectionAttribute(key, value) {\n        const selection = this.model.document.selection;\n        // Store attribute in parent element if the selection is collapsed in an empty node.\n        if (selection.isCollapsed && selection.anchor.parent.isEmpty) {\n            const storeKey = DocumentSelection._getStoreAttributeKey(key);\n            this.setAttribute(storeKey, value, selection.anchor.parent);\n        }\n        selection._setAttribute(key, value);\n    }\n    /**\n     * @param key Key of the attribute to remove.\n     */\n    _removeSelectionAttribute(key) {\n        const selection = this.model.document.selection;\n        // Remove stored attribute from parent element if the selection is collapsed in an empty node.\n        if (selection.isCollapsed && selection.anchor.parent.isEmpty) {\n            const storeKey = DocumentSelection._getStoreAttributeKey(key);\n            this.removeAttribute(storeKey, selection.anchor.parent);\n        }\n        selection._removeAttribute(key);\n    }\n    /**\n     * Throws `writer-detached-writer-tries-to-modify-model` error when the writer is used outside of the `change()` block.\n     */\n    _assertWriterUsedCorrectly() {\n        /**\n         * Trying to use a writer outside a {@link module:engine/model/model~Model#change `change()`} or\n         * {@link module:engine/model/model~Model#enqueueChange `enqueueChange()`} blocks.\n         *\n         * The writer can only be used inside these blocks which ensures that the model\n         * can only be changed during such \"sessions\".\n         *\n         * @error writer-incorrect-use\n         */\n        if (this.model._currentWriter !== this) {\n            throw new CKEditorError('writer-incorrect-use', this);\n        }\n    }\n    /**\n     * For given action `type` and `positionOrRange` where the action happens, this function finds all affected markers\n     * and applies a marker operation with the new marker range equal to the current range. Thanks to this, the marker range\n     * can be later correctly processed during undo.\n     *\n     * @param type Writer action type.\n     * @param positionOrRange Position or range where the writer action happens.\n     */\n    _addOperationForAffectedMarkers(type, positionOrRange) {\n        for (const marker of this.model.markers) {\n            if (!marker.managedUsingOperations) {\n                continue;\n            }\n            const markerRange = marker.getRange();\n            let isAffected = false;\n            if (type === 'move') {\n                const range = positionOrRange;\n                isAffected =\n                    range.containsPosition(markerRange.start) ||\n                        range.start.isEqual(markerRange.start) ||\n                        range.containsPosition(markerRange.end) ||\n                        range.end.isEqual(markerRange.end);\n            }\n            else {\n                // if type === 'merge'.\n                const position = positionOrRange;\n                const elementBefore = position.nodeBefore;\n                const elementAfter = position.nodeAfter;\n                //               Start:  <p>Foo[</p><p>Bar]</p>\n                //         After merge:  <p>Foo[Bar]</p>\n                // After undoing split:  <p>Foo</p><p>[Bar]</p>     <-- incorrect, needs remembering for undo.\n                //\n                const affectedInLeftElement = markerRange.start.parent == elementBefore && markerRange.start.isAtEnd;\n                //               Start:  <p>[Foo</p><p>]Bar</p>\n                //         After merge:  <p>[Foo]Bar</p>\n                // After undoing split:  <p>[Foo]</p><p>Bar</p>     <-- incorrect, needs remembering for undo.\n                //\n                const affectedInRightElement = markerRange.end.parent == elementAfter && markerRange.end.offset == 0;\n                //               Start:  <p>[Foo</p>]<p>Bar</p>\n                //         After merge:  <p>[Foo]Bar</p>\n                // After undoing split:  <p>[Foo]</p><p>Bar</p>     <-- incorrect, needs remembering for undo.\n                //\n                const affectedAfterLeftElement = markerRange.end.nodeAfter == elementAfter;\n                //               Start:  <p>Foo</p>[<p>Bar]</p>\n                //         After merge:  <p>Foo[Bar]</p>\n                // After undoing split:  <p>Foo</p><p>[Bar]</p>     <-- incorrect, needs remembering for undo.\n                //\n                const affectedBeforeRightElement = markerRange.start.nodeAfter == elementAfter;\n                isAffected = affectedInLeftElement || affectedInRightElement || affectedAfterLeftElement || affectedBeforeRightElement;\n            }\n            if (isAffected) {\n                this.updateMarker(marker.name, { range: markerRange });\n            }\n        }\n    }\n}\n/**\n * Sets given attribute to each node in given range. When attribute value is null then attribute will be removed.\n *\n * Because attribute operation needs to have the same attribute value on the whole range, this function splits\n * the range into smaller parts.\n *\n * Given `range` must be flat.\n */\nfunction setAttributeOnRange(writer, key, value, range) {\n    const model = writer.model;\n    const doc = model.document;\n    // Position of the last split, the beginning of the new range.\n    let lastSplitPosition = range.start;\n    // Currently position in the scanning range. Because we need value after the position, it is not a current\n    // position of the iterator but the previous one (we need to iterate one more time to get the value after).\n    let position;\n    // Value before the currently position.\n    let valueBefore;\n    // Value after the currently position.\n    let valueAfter;\n    for (const val of range.getWalker({ shallow: true })) {\n        valueAfter = val.item.getAttribute(key);\n        // At the first run of the iterator the position in undefined. We also do not have a valueBefore, but\n        // because valueAfter may be null, valueBefore may be equal valueAfter ( undefined == null ).\n        if (position && valueBefore != valueAfter) {\n            // if valueBefore == value there is nothing to change, so we add operation only if these values are different.\n            if (valueBefore != value) {\n                addOperation();\n            }\n            lastSplitPosition = position;\n        }\n        position = val.nextPosition;\n        valueBefore = valueAfter;\n    }\n    // Because position in the loop is not the iterator position (see let position comment), the last position in\n    // the while loop will be last but one position in the range. We need to check the last position manually.\n    if (position instanceof Position && position != lastSplitPosition && valueBefore != value) {\n        addOperation();\n    }\n    function addOperation() {\n        const range = new Range(lastSplitPosition, position);\n        const version = range.root.document ? doc.version : null;\n        const operation = new AttributeOperation(range, key, valueBefore, value, version);\n        writer.batch.addOperation(operation);\n        model.applyOperation(operation);\n    }\n}\n/**\n * Sets given attribute to the given node. When attribute value is null then attribute will be removed.\n */\nfunction setAttributeOnItem(writer, key, value, item) {\n    const model = writer.model;\n    const doc = model.document;\n    const previousValue = item.getAttribute(key);\n    let range, operation;\n    if (previousValue != value) {\n        const isRootChanged = item.root === item;\n        if (isRootChanged) {\n            // If we change attributes of root element, we have to use `RootAttributeOperation`.\n            const version = item.document ? doc.version : null;\n            operation = new RootAttributeOperation(item, key, previousValue, value, version);\n        }\n        else {\n            range = new Range(Position._createBefore(item), writer.createPositionAfter(item));\n            const version = range.root.document ? doc.version : null;\n            operation = new AttributeOperation(range, key, previousValue, value, version);\n        }\n        writer.batch.addOperation(operation);\n        model.applyOperation(operation);\n    }\n}\n/**\n * Creates and applies marker operation to {@link module:engine/model/operation/operation~Operation operation}.\n */\nfunction applyMarkerOperation(writer, name, oldRange, newRange, affectsData) {\n    const model = writer.model;\n    const doc = model.document;\n    const operation = new MarkerOperation(name, oldRange, newRange, model.markers, !!affectsData, doc.version);\n    writer.batch.addOperation(operation);\n    model.applyOperation(operation);\n}\n/**\n * Creates `MoveOperation` or `DetachOperation` that removes `howMany` nodes starting from `position`.\n * The operation will be applied on given model instance and added to given operation instance.\n *\n * @param position Position from which nodes are removed.\n * @param howMany Number of nodes to remove.\n * @param batch Batch to which the operation will be added.\n * @param model Model instance on which operation will be applied.\n */\nfunction applyRemoveOperation(position, howMany, batch, model) {\n    let operation;\n    if (position.root.document) {\n        const doc = model.document;\n        const graveyardPosition = new Position(doc.graveyard, [0]);\n        operation = new MoveOperation(position, howMany, graveyardPosition, doc.version);\n    }\n    else {\n        operation = new DetachOperation(position, howMany);\n    }\n    batch.addOperation(operation);\n    model.applyOperation(operation);\n}\n/**\n * Returns `true` if both root elements are the same element or both are documents root elements.\n *\n * Elements in the same tree can be moved (for instance you can move element form one documents root to another, or\n * within the same document fragment), but when element supposed to be moved from document fragment to the document, or\n * to another document it should be removed and inserted to avoid problems with OT. This is because features like undo or\n * collaboration may track changes on the document but ignore changes on detached fragments and should not get\n * unexpected `move` operation.\n */\nfunction isSameTree(rootA, rootB) {\n    // If it is the same root this is the same tree.\n    if (rootA === rootB) {\n        return true;\n    }\n    // If both roots are documents root it is operation within the document what we still treat as the same tree.\n    if (rootA instanceof RootElement && rootB instanceof RootElement) {\n        return true;\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/utils/deletecontent\n */\nimport DocumentSelection from '../documentselection.js';\nimport LivePosition from '../liveposition.js';\nimport Range from '../range.js';\n/**\n * Deletes content of the selection and merge siblings. The resulting selection is always collapsed.\n *\n * **Note:** Use {@link module:engine/model/model~Model#deleteContent} instead of this function.\n * This function is only exposed to be reusable in algorithms\n * which change the {@link module:engine/model/model~Model#deleteContent}\n * method's behavior.\n *\n * @param model The model in context of which the insertion should be performed.\n * @param selection Selection of which the content should be deleted.\n * @param options.leaveUnmerged Whether to merge elements after removing the content of the selection.\n *\n * For example `<heading>x[x</heading><paragraph>y]y</paragraph>` will become:\n *\n * * `<heading>x^y</heading>` with the option disabled (`leaveUnmerged == false`)\n * * `<heading>x^</heading><paragraph>y</paragraph>` with enabled (`leaveUnmerged == true`).\n *\n * Note: {@link module:engine/model/schema~Schema#isObject object} and {@link module:engine/model/schema~Schema#isLimit limit}\n * elements will not be merged.\n *\n * @param options.doNotResetEntireContent Whether to skip replacing the entire content with a\n * paragraph when the entire content was selected.\n *\n * For example `<heading>[x</heading><paragraph>y]</paragraph>` will become:\n *\n * * `<paragraph>^</paragraph>` with the option disabled (`doNotResetEntireContent == false`)\n * * `<heading>^</heading>` with enabled (`doNotResetEntireContent == true`).\n *\n * @param options.doNotAutoparagraph Whether to create a paragraph if after content deletion selection is moved\n * to a place where text cannot be inserted.\n *\n * For example `<paragraph>x</paragraph>[<imageBlock src=\"foo.jpg\"></imageBlock>]` will become:\n *\n * * `<paragraph>x</paragraph><paragraph>[]</paragraph>` with the option disabled (`doNotAutoparagraph == false`)\n * * `<paragraph>x</paragraph>[]` with the option enabled (`doNotAutoparagraph == true`).\n *\n * If you use this option you need to make sure to handle invalid selections yourself or leave\n * them to the selection post-fixer (may not always work).\n *\n * **Note:** If there is no valid position for the selection, the paragraph will always be created:\n *\n * `[<imageBlock src=\"foo.jpg\"></imageBlock>]` -> `<paragraph>[]</paragraph>`.\n */\nexport default function deleteContent(model, selection, options = {}) {\n    if (selection.isCollapsed) {\n        return;\n    }\n    const selRange = selection.getFirstRange();\n    // If the selection is already removed, don't do anything.\n    if (selRange.root.rootName == '$graveyard') {\n        return;\n    }\n    const schema = model.schema;\n    model.change(writer => {\n        // 1. Replace the entire content with paragraph.\n        // See: https://github.com/ckeditor/ckeditor5-engine/issues/1012#issuecomment-315017594.\n        if (!options.doNotResetEntireContent && shouldEntireContentBeReplacedWithParagraph(schema, selection)) {\n            replaceEntireContentWithParagraph(writer, selection);\n            return;\n        }\n        // Collect attributes to copy in case of autoparagraphing.\n        const attributesForAutoparagraph = {};\n        if (!options.doNotAutoparagraph) {\n            const selectedElement = selection.getSelectedElement();\n            if (selectedElement) {\n                Object.assign(attributesForAutoparagraph, schema.getAttributesWithProperty(selectedElement, 'copyOnReplace', true));\n            }\n        }\n        // Get the live positions for the range adjusted to span only blocks selected from the user perspective.\n        const [startPosition, endPosition] = getLivePositionsForSelectedBlocks(selRange);\n        // 2. Remove the content if there is any.\n        if (!startPosition.isTouching(endPosition)) {\n            writer.remove(writer.createRange(startPosition, endPosition));\n        }\n        // 3. Merge elements in the right branch to the elements in the left branch.\n        // The only reasonable (in terms of data and selection correctness) case in which we need to do that is:\n        //\n        // <heading type=1>Fo[</heading><paragraph>]ar</paragraph> => <heading type=1>Fo^ar</heading>\n        //\n        // However, the algorithm supports also merging deeper structures (up to the depth of the shallower branch),\n        // as it's hard to imagine what should actually be the default behavior. Usually, specific features will\n        // want to override that behavior anyway.\n        if (!options.leaveUnmerged) {\n            mergeBranches(writer, startPosition, endPosition);\n            // TMP this will be replaced with a postfixer.\n            // We need to check and strip disallowed attributes in all nested nodes because after merge\n            // some attributes could end up in a path where are disallowed.\n            //\n            // e.g. bold is disallowed for <H1>\n            // <h1>Fo{o</h1><p>b}a<b>r</b><p> -> <h1>Fo{}a<b>r</b><h1> -> <h1>Fo{}ar<h1>.\n            schema.removeDisallowedAttributes(startPosition.parent.getChildren(), writer);\n        }\n        collapseSelectionAt(writer, selection, startPosition);\n        // 4. Add a paragraph to set selection in it.\n        // Check if a text is allowed in the new container. If not, try to create a new paragraph (if it's allowed here).\n        // If autoparagraphing is off, we assume that you know what you do so we leave the selection wherever it was.\n        if (!options.doNotAutoparagraph && shouldAutoparagraph(schema, startPosition)) {\n            insertParagraph(writer, startPosition, selection, attributesForAutoparagraph);\n        }\n        startPosition.detach();\n        endPosition.detach();\n    });\n}\n/**\n * Returns the live positions for the range adjusted to span only blocks selected from the user perspective. Example:\n *\n * ```\n * <heading1>[foo</heading1>\n * <paragraph>bar</paragraph>\n * <heading1>]abc</heading1>  <-- this block is not considered as selected\n * ```\n *\n * This is the same behavior as in Selection#getSelectedBlocks() \"special case\".\n */\nfunction getLivePositionsForSelectedBlocks(range) {\n    const model = range.root.document.model;\n    const startPosition = range.start;\n    let endPosition = range.end;\n    // If the end of selection is at the start position of last block in the selection, then\n    // shrink it to not include that trailing block. Note that this should happen only for not empty selection.\n    if (model.hasContent(range, { ignoreMarkers: true })) {\n        const endBlock = getParentBlock(endPosition);\n        if (endBlock && endPosition.isTouching(model.createPositionAt(endBlock, 0))) {\n            // Create forward selection as a probe to find a valid position after excluding last block from the range.\n            const selection = model.createSelection(range);\n            // Modify the forward selection in backward direction to shrink it and remove first position of following block from it.\n            // This is how modifySelection works and here we are making use of it.\n            model.modifySelection(selection, { direction: 'backward' });\n            const newEndPosition = selection.getLastPosition();\n            // For such a model and selection:\n            //     <paragraph>A[</paragraph><imageBlock></imageBlock><paragraph>]B</paragraph>\n            //\n            // After modifySelection(), we would end up with this:\n            //     <paragraph>A[</paragraph>]<imageBlock></imageBlock><paragraph>B</paragraph>\n            //\n            // So we need to check if there is no content in the skipped range (because we want to include the <imageBlock>).\n            const skippedRange = model.createRange(newEndPosition, endPosition);\n            if (!model.hasContent(skippedRange, { ignoreMarkers: true })) {\n                endPosition = newEndPosition;\n            }\n        }\n    }\n    return [\n        LivePosition.fromPosition(startPosition, 'toPrevious'),\n        LivePosition.fromPosition(endPosition, 'toNext')\n    ];\n}\n/**\n * Finds the lowest element in position's ancestors which is a block.\n * Returns null if a limit element is encountered before reaching a block element.\n */\nfunction getParentBlock(position) {\n    const element = position.parent;\n    const schema = element.root.document.model.schema;\n    const ancestors = element.getAncestors({ parentFirst: true, includeSelf: true });\n    for (const element of ancestors) {\n        if (schema.isLimit(element)) {\n            return null;\n        }\n        if (schema.isBlock(element)) {\n            return element;\n        }\n    }\n}\n/**\n * This function is a result of reaching the Ballmer's peak for just the right amount of time.\n * Even I had troubles documenting it after a while and after reading it again I couldn't believe that it really works.\n */\nfunction mergeBranches(writer, startPosition, endPosition) {\n    const model = writer.model;\n    // Verify if there is a need and possibility to merge.\n    if (!checkShouldMerge(writer.model.schema, startPosition, endPosition)) {\n        return;\n    }\n    // If the start element on the common ancestor level is empty, and the end element on the same level is not empty\n    // then merge those to the right element so that it's properties are preserved (name, attributes).\n    // Because of OT merging is used instead of removing elements.\n    //\n    // Merge left:\n    //     <heading1>foo[</heading1>    ->  <heading1>foo[]bar</heading1>\n    //     <paragraph>]bar</paragraph>  ->               --^\n    //\n    // Merge right:\n    //     <heading1>[</heading1>       ->\n    //     <paragraph>]bar</paragraph>  ->  <paragraph>[]bar</paragraph>\n    //\n    // Merge left:\n    //     <blockQuote>                     ->  <blockQuote>\n    //         <heading1>foo[</heading1>    ->      <heading1>foo[]bar</heading1>\n    //         <paragraph>]bar</paragraph>  ->                   --^\n    //     </blockQuote>                    ->  </blockQuote>\n    //\n    // Merge right:\n    //     <blockQuote>                     ->  <blockQuote>\n    //         <heading1>[</heading1>       ->\n    //         <paragraph>]bar</paragraph>  ->      <paragraph>[]bar</paragraph>\n    //     </blockQuote>                    ->  </blockQuote>\n    // Merging should not go deeper than common ancestor.\n    const [startAncestor, endAncestor] = getAncestorsJustBelowCommonAncestor(startPosition, endPosition);\n    // Branches can't be merged if one of the positions is directly inside a common ancestor.\n    //\n    // Example:\n    //     <blockQuote>\n    //         <paragraph>[foo</paragraph>]\n    //         <table> ... </table>\n    //     <blockQuote>\n    //\n    if (!startAncestor || !endAncestor) {\n        return;\n    }\n    if (!model.hasContent(startAncestor, { ignoreMarkers: true }) && model.hasContent(endAncestor, { ignoreMarkers: true })) {\n        mergeBranchesRight(writer, startPosition, endPosition, startAncestor.parent);\n    }\n    else {\n        mergeBranchesLeft(writer, startPosition, endPosition, startAncestor.parent);\n    }\n}\n/**\n * Merging blocks to the left (properties of the left block are preserved).\n * Simple example:\n *\n * ```\n * <heading1>foo[</heading1>    ->  <heading1>foo[bar</heading1>]\n * <paragraph>]bar</paragraph>  ->              --^\n * ```\n *\n * Nested example:\n *\n * ```\n * <blockQuote>                     ->  <blockQuote>\n *     <heading1>foo[</heading1>    ->      <heading1>foo[bar</heading1>\n * </blockQuote>                    ->  </blockQuote>]    ^\n * <blockBlock>                     ->                    |\n *     <paragraph>]bar</paragraph>  ->                 ---\n * </blockBlock>                    ->\n * ```\n */\nfunction mergeBranchesLeft(writer, startPosition, endPosition, commonAncestor) {\n    const startElement = startPosition.parent;\n    const endElement = endPosition.parent;\n    // Merging reached the common ancestor element, stop here.\n    if (startElement == commonAncestor || endElement == commonAncestor) {\n        return;\n    }\n    // Remember next positions to merge in next recursive step (also used as modification points pointers).\n    startPosition = writer.createPositionAfter(startElement);\n    endPosition = writer.createPositionBefore(endElement);\n    // Move endElement just after startElement if they aren't siblings.\n    if (!endPosition.isEqual(startPosition)) {\n        //\n        //     <blockQuote>                     ->  <blockQuote>\n        //         <heading1>foo[</heading1>    ->      <heading1>foo</heading1>[<paragraph>bar</paragraph>\n        //     </blockQuote>                    ->  </blockQuote>                ^\n        //     <blockBlock>                     ->  <blockBlock>                 |\n        //         <paragraph>]bar</paragraph>  ->      ]                     ---\n        //     </blockBlock>                    ->  </blockBlock>\n        //\n        writer.insert(endElement, startPosition);\n    }\n    // Merge two siblings (nodes on sides of startPosition):\n    //\n    //     <blockQuote>                                             ->  <blockQuote>\n    //         <heading1>foo</heading1>[<paragraph>bar</paragraph>  ->      <heading1>foo[bar</heading1>\n    //     </blockQuote>                                            ->  </blockQuote>\n    //     <blockBlock>                                             ->  <blockBlock>\n    //         ]                                                    ->      ]\n    //     </blockBlock>                                            ->  </blockBlock>\n    //\n    // Or in simple case (without moving elements in above if):\n    //     <heading1>foo</heading1>[<paragraph>bar</paragraph>]  ->  <heading1>foo[bar</heading1>]\n    //\n    writer.merge(startPosition);\n    // Remove empty end ancestors:\n    //\n    //     <blockQuote>                      ->  <blockQuote>\n    //         <heading1>foo[bar</heading1>  ->      <heading1>foo[bar</heading1>\n    //     </blockQuote>                     ->  </blockQuote>\n    //     <blockBlock>                      ->\n    //         ]                             ->  ]\n    //     </blockBlock>                     ->\n    //\n    while (endPosition.parent.isEmpty) {\n        const parentToRemove = endPosition.parent;\n        endPosition = writer.createPositionBefore(parentToRemove);\n        writer.remove(parentToRemove);\n    }\n    // Verify if there is a need and possibility to merge next level.\n    if (!checkShouldMerge(writer.model.schema, startPosition, endPosition)) {\n        return;\n    }\n    // Continue merging next level (blockQuote with blockBlock in the examples above if it would not be empty and got removed).\n    mergeBranchesLeft(writer, startPosition, endPosition, commonAncestor);\n}\n/**\n * Merging blocks to the right (properties of the right block are preserved).\n * Simple example:\n *\n * ```\n * <heading1>foo[</heading1>    ->            --v\n * <paragraph>]bar</paragraph>  ->  [<paragraph>foo]bar</paragraph>\n * ```\n *\n * Nested example:\n *\n * ```\n * <blockQuote>                     ->\n *     <heading1>foo[</heading1>    ->              ---\n * </blockQuote>                    ->                 |\n * <blockBlock>                     ->  [<blockBlock>  v\n *     <paragraph>]bar</paragraph>  ->      <paragraph>foo]bar</paragraph>\n * </blockBlock>                    ->  </blockBlock>\n * ```\n */\nfunction mergeBranchesRight(writer, startPosition, endPosition, commonAncestor) {\n    const startElement = startPosition.parent;\n    const endElement = endPosition.parent;\n    // Merging reached the common ancestor element, stop here.\n    if (startElement == commonAncestor || endElement == commonAncestor) {\n        return;\n    }\n    // Remember next positions to merge in next recursive step (also used as modification points pointers).\n    startPosition = writer.createPositionAfter(startElement);\n    endPosition = writer.createPositionBefore(endElement);\n    // Move startElement just before endElement if they aren't siblings.\n    if (!endPosition.isEqual(startPosition)) {\n        //\n        //     <blockQuote>                     ->  <blockQuote>\n        //         <heading1>foo[</heading1>    ->      [                   ---\n        //     </blockQuote>                    ->  </blockQuote>              |\n        //     <blockBlock>                     ->  <blockBlock>               v\n        //         <paragraph>]bar</paragraph>  ->      <heading1>foo</heading1>]<paragraph>bar</paragraph>\n        //     </blockBlock>                    ->  </blockBlock>\n        //\n        writer.insert(startElement, endPosition);\n    }\n    // Remove empty end ancestors:\n    //\n    //     <blockQuote>                                             ->\n    //         [                                                    ->  [\n    //     </blockQuote>                                            ->\n    //     <blockBlock>                                             ->  <blockBlock>\n    //         <heading1>foo</heading1>]<paragraph>bar</paragraph>  ->      <heading1>foo</heading1>]<paragraph>bar</paragraph>\n    //     </blockBlock>                                            ->  </blockBlock>\n    //\n    while (startPosition.parent.isEmpty) {\n        const parentToRemove = startPosition.parent;\n        startPosition = writer.createPositionBefore(parentToRemove);\n        writer.remove(parentToRemove);\n    }\n    // Update endPosition after inserting and removing elements.\n    endPosition = writer.createPositionBefore(endElement);\n    // Merge right two siblings (nodes on sides of endPosition):\n    //                                                              ->\n    //     [                                                        ->  [\n    //                                                              ->\n    //     <blockBlock>                                             ->  <blockBlock>\n    //         <heading1>foo</heading1>]<paragraph>bar</paragraph>  ->      <paragraph>foo]bar</paragraph>\n    //     </blockBlock>                                            ->  </blockBlock>\n    //\n    // Or in simple case (without moving elements in above if):\n    //     [<heading1>foo</heading1>]<paragraph>bar</paragraph>  ->  [<heading1>foo]bar</heading1>\n    //\n    mergeRight(writer, endPosition);\n    // Verify if there is a need and possibility to merge next level.\n    if (!checkShouldMerge(writer.model.schema, startPosition, endPosition)) {\n        return;\n    }\n    // Continue merging next level (blockQuote with blockBlock in the examples above if it would not be empty and got removed).\n    mergeBranchesRight(writer, startPosition, endPosition, commonAncestor);\n}\n/**\n * There is no right merge operation so we need to simulate it.\n */\nfunction mergeRight(writer, position) {\n    const startElement = position.nodeBefore;\n    const endElement = position.nodeAfter;\n    if (startElement.name != endElement.name) {\n        writer.rename(startElement, endElement.name);\n    }\n    writer.clearAttributes(startElement);\n    writer.setAttributes(Object.fromEntries(endElement.getAttributes()), startElement);\n    writer.merge(position);\n}\n/**\n * Verifies if merging is needed and possible. It's not needed if both positions are in the same element\n * and it's not possible if some element is a limit or the range crosses a limit element.\n */\nfunction checkShouldMerge(schema, startPosition, endPosition) {\n    const startElement = startPosition.parent;\n    const endElement = endPosition.parent;\n    // If both positions ended up in the same parent, then there's nothing more to merge:\n    // <$root><p>x[</p><p>]y</p></$root> => <$root><p>xy</p>[]</$root>\n    if (startElement == endElement) {\n        return false;\n    }\n    // If one of the positions is a limit element, then there's nothing to merge because we don't want to cross the limit boundaries.\n    if (schema.isLimit(startElement) || schema.isLimit(endElement)) {\n        return false;\n    }\n    // Check if operations we'll need to do won't need to cross object or limit boundaries.\n    // E.g., we can't merge endElement into startElement in this case:\n    // <limit><startElement>x[</startElement></limit><endElement>]</endElement>\n    return isCrossingLimitElement(startPosition, endPosition, schema);\n}\n/**\n * Returns the elements that are the ancestors of the provided positions that are direct children of the common ancestor.\n */\nfunction getAncestorsJustBelowCommonAncestor(positionA, positionB) {\n    const ancestorsA = positionA.getAncestors();\n    const ancestorsB = positionB.getAncestors();\n    let i = 0;\n    while (ancestorsA[i] && ancestorsA[i] == ancestorsB[i]) {\n        i++;\n    }\n    return [ancestorsA[i], ancestorsB[i]];\n}\nfunction shouldAutoparagraph(schema, position) {\n    const isTextAllowed = schema.checkChild(position, '$text');\n    const isParagraphAllowed = schema.checkChild(position, 'paragraph');\n    return !isTextAllowed && isParagraphAllowed;\n}\n/**\n * Check if parents of two positions can be merged by checking if there are no limit/object\n * boundaries between those two positions.\n *\n * E.g. in <bQ><p>x[]</p></bQ><widget><caption>{}</caption></widget>\n * we'll check <p>, <bQ>, <widget> and <caption>.\n * Usually, widget and caption are marked as objects/limits in the schema, so in this case merging will be blocked.\n */\nfunction isCrossingLimitElement(leftPos, rightPos, schema) {\n    const rangeToCheck = new Range(leftPos, rightPos);\n    for (const value of rangeToCheck.getWalker()) {\n        if (schema.isLimit(value.item)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction insertParagraph(writer, position, selection, attributes = {}) {\n    const paragraph = writer.createElement('paragraph');\n    writer.model.schema.setAllowedAttributes(paragraph, attributes, writer);\n    writer.insert(paragraph, position);\n    collapseSelectionAt(writer, selection, writer.createPositionAt(paragraph, 0));\n}\nfunction replaceEntireContentWithParagraph(writer, selection) {\n    const limitElement = writer.model.schema.getLimitElement(selection);\n    writer.remove(writer.createRangeIn(limitElement));\n    insertParagraph(writer, writer.createPositionAt(limitElement, 0), selection);\n}\n/**\n * We want to replace the entire content with a paragraph when:\n * * the entire content is selected,\n * * selection contains at least two elements,\n * * whether the paragraph is allowed in schema in the common ancestor.\n */\nfunction shouldEntireContentBeReplacedWithParagraph(schema, selection) {\n    const limitElement = schema.getLimitElement(selection);\n    if (!selection.containsEntireContent(limitElement)) {\n        return false;\n    }\n    const range = selection.getFirstRange();\n    if (range.start.parent == range.end.parent) {\n        return false;\n    }\n    return schema.checkChild(limitElement, 'paragraph');\n}\n/**\n * Helper function that sets the selection. Depending whether given `selection` is a document selection or not,\n * uses a different method to set it.\n */\nfunction collapseSelectionAt(writer, selection, positionOrRange) {\n    if (selection instanceof DocumentSelection) {\n        writer.setSelection(positionOrRange);\n    }\n    else {\n        selection.setTo(positionOrRange);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/utils/getselectedcontent\n */\n/**\n * Gets a clone of the selected content.\n *\n * For example, for the following selection:\n *\n * ```html\n * <p>x</p><quote><p>y</p><h>fir[st</h></quote><p>se]cond</p><p>z</p>\n * ```\n *\n * It will return a document fragment with such a content:\n *\n * ```html\n * <quote><h>st</h></quote><p>se</p>\n * ```\n *\n * @param model The model in context of which the selection modification should be performed.\n * @param selection The selection of which content will be returned.\n */\nexport default function getSelectedContent(model, selection) {\n    return model.change(writer => {\n        const frag = writer.createDocumentFragment();\n        const range = selection.getFirstRange();\n        if (!range || range.isCollapsed) {\n            return frag;\n        }\n        const root = range.start.root;\n        const commonPath = range.start.getCommonPath(range.end);\n        const commonParent = root.getNodeByPath(commonPath);\n        // ## 1st step\n        //\n        // First, we'll clone a fragment represented by a minimal flat range\n        // containing the original range to be cloned.\n        // E.g. let's consider such a range:\n        //\n        // <p>x</p><quote><p>y</p><h>fir[st</h></quote><p>se]cond</p><p>z</p>\n        //\n        // A minimal flat range containing this one is:\n        //\n        // <p>x</p>[<quote><p>y</p><h>first</h></quote><p>second</p>]<p>z</p>\n        //\n        // We can easily clone this structure, preserving e.g. the <quote> element.\n        let flatSubtreeRange;\n        if (range.start.parent == range.end.parent) {\n            // The original range is flat, so take it.\n            flatSubtreeRange = range;\n        }\n        else {\n            flatSubtreeRange = writer.createRange(writer.createPositionAt(commonParent, range.start.path[commonPath.length]), writer.createPositionAt(commonParent, range.end.path[commonPath.length] + 1));\n        }\n        const howMany = flatSubtreeRange.end.offset - flatSubtreeRange.start.offset;\n        // Clone the whole contents.\n        for (const item of flatSubtreeRange.getItems({ shallow: true })) {\n            if (item.is('$textProxy')) {\n                writer.appendText(item.data, item.getAttributes(), frag);\n            }\n            else {\n                writer.append(writer.cloneElement(item, true), frag);\n            }\n        }\n        // ## 2nd step\n        //\n        // If the original range wasn't flat, then we need to remove the excess nodes from the both ends of the cloned fragment.\n        //\n        // For example, for the range shown in the 1st step comment, we need to remove these pieces:\n        //\n        // <quote>[<p>y</p>]<h>[fir]st</h></quote><p>se[cond]</p>\n        //\n        // So this will be the final copied content:\n        //\n        // <quote><h>st</h></quote><p>se</p>\n        //\n        // In order to do that, we remove content from these two ranges:\n        //\n        // [<quote><p>y</p><h>fir]st</h></quote><p>se[cond</p>]\n        if (flatSubtreeRange != range) {\n            // Find the position of the original range in the cloned fragment.\n            const newRange = range._getTransformedByMove(flatSubtreeRange.start, writer.createPositionAt(frag, 0), howMany)[0];\n            const leftExcessRange = writer.createRange(writer.createPositionAt(frag, 0), newRange.start);\n            const rightExcessRange = writer.createRange(newRange.end, writer.createPositionAt(frag, 'end'));\n            removeRangeContent(rightExcessRange, writer);\n            removeRangeContent(leftExcessRange, writer);\n        }\n        return frag;\n    });\n}\n// After https://github.com/ckeditor/ckeditor5-engine/issues/690 is fixed,\n// this function will, most likely, be able to rewritten using getMinimalFlatRanges().\nfunction removeRangeContent(range, writer) {\n    const parentsToCheck = [];\n    Array.from(range.getItems({ direction: 'backward' }))\n        // We should better store ranges because text proxies will lose integrity\n        // with the text nodes when we'll start removing content.\n        .map(item => writer.createRangeOn(item))\n        // Filter only these items which are fully contained in the passed range.\n        //\n        // E.g. for the following range: [<quote><p>y</p><h>fir]st</h>\n        // the walker will return the entire <h> element, when only the \"fir\" item inside it is fully contained.\n        .filter(itemRange => {\n        // We should be able to use Range.containsRange, but https://github.com/ckeditor/ckeditor5-engine/issues/691.\n        const contained = (itemRange.start.isAfter(range.start) || itemRange.start.isEqual(range.start)) &&\n            (itemRange.end.isBefore(range.end) || itemRange.end.isEqual(range.end));\n        return contained;\n    })\n        .forEach(itemRange => {\n        parentsToCheck.push(itemRange.start.parent);\n        writer.remove(itemRange);\n    });\n    // Remove ancestors of the removed items if they turned to be empty now\n    // (their whole content was contained in the range).\n    parentsToCheck.forEach(parentToCheck => {\n        let parent = parentToCheck;\n        while (parent.parent && parent.isEmpty) {\n            const removeRange = writer.createRangeOn(parent);\n            parent = parent.parent;\n            writer.remove(removeRange);\n        }\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/utils/insertcontent\n */\nimport DocumentSelection from '../documentselection.js';\nimport Element from '../element.js';\nimport LivePosition from '../liveposition.js';\nimport LiveRange from '../liverange.js';\nimport Position from '../position.js';\nimport Range from '../range.js';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Inserts content into the editor (specified selection) as one would expect the paste functionality to work.\n *\n * It takes care of removing the selected content, splitting elements (if needed), inserting elements and merging elements appropriately.\n *\n * Some examples:\n *\n * ```html\n * <p>x^</p> + <p>y</p> => <p>x</p><p>y</p> => <p>xy[]</p>\n * <p>x^y</p> + <p>z</p> => <p>x</p>^<p>y</p> + <p>z</p> => <p>x</p><p>z</p><p>y</p> => <p>xz[]y</p>\n * <p>x^y</p> + <img /> => <p>x</p>^<p>y</p> + <img /> => <p>x</p><img /><p>y</p>\n * <p>x</p><p>^</p><p>z</p> + <p>y</p> => <p>x</p><p>y[]</p><p>z</p> (no merging)\n * <p>x</p>[<img />]<p>z</p> + <p>y</p> => <p>x</p>^<p>z</p> + <p>y</p> => <p>x</p><p>y[]</p><p>z</p>\n * ```\n *\n * If an instance of {@link module:engine/model/selection~Selection} is passed as `selectable` it will be modified\n * to the insertion selection (equal to a range to be selected after insertion).\n *\n * If `selectable` is not passed, the content will be inserted using the current selection of the model document.\n *\n * **Note:** Use {@link module:engine/model/model~Model#insertContent} instead of this function.\n * This function is only exposed to be reusable in algorithms which change the {@link module:engine/model/model~Model#insertContent}\n * method's behavior.\n *\n * @param model The model in context of which the insertion should be performed.\n * @param content The content to insert.\n * @param selectable Selection into which the content should be inserted.\n * @param placeOrOffset Sets place or offset of the selection.\n * @returns Range which contains all the performed changes. This is a range that, if removed,\n * would return the model to the state before the insertion. If no changes were preformed by `insertContent`, returns a range collapsed\n * at the insertion position.\n */\nexport default function insertContent(model, content, selectable) {\n    return model.change(writer => {\n        const selection = selectable ? selectable : model.document.selection;\n        if (!selection.isCollapsed) {\n            model.deleteContent(selection, { doNotAutoparagraph: true });\n        }\n        const insertion = new Insertion(model, writer, selection.anchor);\n        const fakeMarkerElements = [];\n        let nodesToInsert;\n        if (content.is('documentFragment')) {\n            // If document fragment has any markers, these markers should be inserted into the model as well.\n            if (content.markers.size) {\n                const markersPosition = [];\n                for (const [name, range] of content.markers) {\n                    const { start, end } = range;\n                    const isCollapsed = start.isEqual(end);\n                    markersPosition.push({ position: start, name, isCollapsed }, { position: end, name, isCollapsed });\n                }\n                // Markers position is sorted backwards to ensure that the insertion of fake markers will not change\n                // the position of the next markers.\n                markersPosition.sort(({ position: posA }, { position: posB }) => posA.isBefore(posB) ? 1 : -1);\n                for (const { position, name, isCollapsed } of markersPosition) {\n                    let fakeElement = null;\n                    let collapsed = null;\n                    const isAtBeginning = position.parent === content && position.isAtStart;\n                    const isAtEnd = position.parent === content && position.isAtEnd;\n                    // We have two ways of handling markers. In general, we want to add temporary <$marker> model elements to\n                    // represent marker boundaries. These elements will be inserted into content together with the rest\n                    // of the document fragment. After insertion is done, positions for these elements will be read\n                    // and proper, actual markers will be created in the model and fake elements will be removed.\n                    //\n                    // However, if the <$marker> element is at the beginning or at the end of the document fragment,\n                    // it may affect how the inserted content is merged with current model, impacting the insertion\n                    // result. To avoid that, we don't add <$marker> elements at these positions. Instead, we will use\n                    // `Insertion#getAffectedRange()` to figure out new positions for these marker boundaries.\n                    if (!isAtBeginning && !isAtEnd) {\n                        fakeElement = writer.createElement('$marker');\n                        writer.insert(fakeElement, position);\n                    }\n                    else if (isCollapsed) {\n                        // Save whether the collapsed marker was at the beginning or at the end of document fragment\n                        // to know where to create it after the insertion is done.\n                        collapsed = isAtBeginning ? 'start' : 'end';\n                    }\n                    fakeMarkerElements.push({\n                        name,\n                        element: fakeElement,\n                        collapsed\n                    });\n                }\n            }\n            nodesToInsert = content.getChildren();\n        }\n        else {\n            nodesToInsert = [content];\n        }\n        insertion.handleNodes(nodesToInsert);\n        let newRange = insertion.getSelectionRange();\n        if (content.is('documentFragment') && fakeMarkerElements.length) {\n            // After insertion was done, the selection was set but the model contains fake <$marker> elements.\n            // These <$marker> elements will be now removed. Because of that, we will need to fix the selection.\n            // We will create a live range that will automatically be update as <$marker> elements are removed.\n            const selectionLiveRange = newRange ? LiveRange.fromRange(newRange) : null;\n            // Marker name -> [ start position, end position ].\n            const markersData = {};\n            // Note: `fakeMarkerElements` are sorted backwards. However, now, we want to handle the markers\n            // from the beginning, so that existing <$marker> elements do not affect markers positions.\n            // This is why we iterate from the end to the start.\n            for (let i = fakeMarkerElements.length - 1; i >= 0; i--) {\n                const { name, element, collapsed } = fakeMarkerElements[i];\n                const isStartBoundary = !markersData[name];\n                if (isStartBoundary) {\n                    markersData[name] = [];\n                }\n                if (element) {\n                    // Read fake marker element position to learn where the marker should be created.\n                    const elementPosition = writer.createPositionAt(element, 'before');\n                    markersData[name].push(elementPosition);\n                    writer.remove(element);\n                }\n                else {\n                    // If the fake marker element does not exist, it means that the marker boundary was at the beginning or at the end.\n                    const rangeOnInsertion = insertion.getAffectedRange();\n                    if (!rangeOnInsertion) {\n                        // If affected range is `null` it means that nothing was in the document fragment or all content was filtered out.\n                        // Some markers that were in the filtered content may be removed (partially or totally).\n                        // Let's handle only those markers that were at the beginning or at the end of the document fragment.\n                        if (collapsed) {\n                            markersData[name].push(insertion.position);\n                        }\n                        continue;\n                    }\n                    if (collapsed) {\n                        // If the marker was collapsed at the beginning or at the end of the document fragment,\n                        // put both boundaries at the beginning or at the end of inserted range (to keep the marker collapsed).\n                        markersData[name].push(rangeOnInsertion[collapsed]);\n                    }\n                    else {\n                        markersData[name].push(isStartBoundary ? rangeOnInsertion.start : rangeOnInsertion.end);\n                    }\n                }\n            }\n            for (const [name, [start, end]] of Object.entries(markersData)) {\n                // For now, we ignore markers if they are included in the filtered-out content.\n                // In the future implementation we will improve that case to create markers that are not filtered out completely.\n                if (start && end && start.root === end.root && start.root.document && !writer.model.markers.has(name)) {\n                    writer.addMarker(name, {\n                        usingOperation: true,\n                        affectsData: true,\n                        range: new Range(start, end)\n                    });\n                }\n            }\n            if (selectionLiveRange) {\n                newRange = selectionLiveRange.toRange();\n                selectionLiveRange.detach();\n            }\n        }\n        /* istanbul ignore else -- @preserve */\n        if (newRange) {\n            if (selection instanceof DocumentSelection) {\n                writer.setSelection(newRange);\n            }\n            else {\n                selection.setTo(newRange);\n            }\n        }\n        else {\n            // We are not testing else because it's a safe check for unpredictable edge cases:\n            // an insertion without proper range to select.\n            //\n            // @if CK_DEBUG // console.warn( 'Cannot determine a proper selection range after insertion.' );\n        }\n        const affectedRange = insertion.getAffectedRange() || model.createRange(selection.anchor);\n        insertion.destroy();\n        return affectedRange;\n    });\n}\n/**\n * Utility class for performing content insertion.\n */\nclass Insertion {\n    constructor(model, writer, position) {\n        /**\n         * The reference to the first inserted node.\n         */\n        this._firstNode = null;\n        /**\n         * The reference to the last inserted node.\n         */\n        this._lastNode = null;\n        /**\n         * The reference to the last auto paragraph node.\n         */\n        this._lastAutoParagraph = null;\n        /**\n         * The array of nodes that should be cleaned of not allowed attributes.\n         */\n        this._filterAttributesOf = [];\n        /**\n         * Beginning of the affected range. See {@link module:engine/model/utils/insertcontent~Insertion#getAffectedRange}.\n         */\n        this._affectedStart = null;\n        /**\n         * End of the affected range. See {@link module:engine/model/utils/insertcontent~Insertion#getAffectedRange}.\n         */\n        this._affectedEnd = null;\n        this._nodeToSelect = null;\n        this.model = model;\n        this.writer = writer;\n        this.position = position;\n        this.canMergeWith = new Set([this.position.parent]);\n        this.schema = model.schema;\n        this._documentFragment = writer.createDocumentFragment();\n        this._documentFragmentPosition = writer.createPositionAt(this._documentFragment, 0);\n    }\n    /**\n     * Handles insertion of a set of nodes.\n     *\n     * @param nodes Nodes to insert.\n     */\n    handleNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            this._handleNode(node);\n        }\n        // Insert nodes collected in temporary DocumentFragment.\n        this._insertPartialFragment();\n        // If there was an auto paragraph then we might need to adjust the end of insertion.\n        if (this._lastAutoParagraph) {\n            this._updateLastNodeFromAutoParagraph(this._lastAutoParagraph);\n        }\n        // After the content was inserted we may try to merge it with its next sibling if the selection was in it initially.\n        // Merging with the previous sibling was performed just after inserting the first node to the document.\n        this._mergeOnRight();\n        // TMP this will become a post-fixer.\n        this.schema.removeDisallowedAttributes(this._filterAttributesOf, this.writer);\n        this._filterAttributesOf = [];\n    }\n    /**\n     * Updates the last node after the auto paragraphing.\n     *\n     * @param node The last auto paragraphing node.\n     */\n    _updateLastNodeFromAutoParagraph(node) {\n        const positionAfterLastNode = this.writer.createPositionAfter(this._lastNode);\n        const positionAfterNode = this.writer.createPositionAfter(node);\n        // If the real end was after the last auto paragraph then update relevant properties.\n        if (positionAfterNode.isAfter(positionAfterLastNode)) {\n            this._lastNode = node;\n            /* istanbul ignore if -- @preserve */\n            if (this.position.parent != node || !this.position.isAtEnd) {\n                // Algorithm's correctness check. We should never end up here but it's good to know that we did.\n                // At this point the insertion position should be at the end of the last auto paragraph.\n                // Note: This error is documented in other place in this file.\n                throw new CKEditorError('insertcontent-invalid-insertion-position', this);\n            }\n            this.position = positionAfterNode;\n            this._setAffectedBoundaries(this.position);\n        }\n    }\n    /**\n     * Returns range to be selected after insertion.\n     * Returns `null` if there is no valid range to select after insertion.\n     */\n    getSelectionRange() {\n        if (this._nodeToSelect) {\n            return Range._createOn(this._nodeToSelect);\n        }\n        return this.model.schema.getNearestSelectionRange(this.position);\n    }\n    /**\n     * Returns a range which contains all the performed changes. This is a range that, if removed, would return the model to the state\n     * before the insertion. Returns `null` if no changes were done.\n     */\n    getAffectedRange() {\n        if (!this._affectedStart) {\n            return null;\n        }\n        return new Range(this._affectedStart, this._affectedEnd);\n    }\n    /**\n     * Destroys `Insertion` instance.\n     */\n    destroy() {\n        if (this._affectedStart) {\n            this._affectedStart.detach();\n        }\n        if (this._affectedEnd) {\n            this._affectedEnd.detach();\n        }\n    }\n    /**\n     * Handles insertion of a single node.\n     */\n    _handleNode(node) {\n        // Split the position.parent's branch up to a point where the node can be inserted.\n        // If it isn't allowed in the whole branch, then of course don't split anything.\n        if (!this._checkAndSplitToAllowedPosition(node)) {\n            // Handle element children if it's not an object (strip container).\n            if (!this.schema.isObject(node)) {\n                this._handleDisallowedNode(node);\n            }\n            return;\n        }\n        // Add node to the current temporary DocumentFragment.\n        this._appendToFragment(node);\n        // Store the first and last nodes for easy access for merging with sibling nodes.\n        if (!this._firstNode) {\n            this._firstNode = node;\n        }\n        this._lastNode = node;\n    }\n    /**\n     * Inserts the temporary DocumentFragment into the model.\n     */\n    _insertPartialFragment() {\n        if (this._documentFragment.isEmpty) {\n            return;\n        }\n        const livePosition = LivePosition.fromPosition(this.position, 'toNext');\n        this._setAffectedBoundaries(this.position);\n        // If the very first node of the whole insertion process is inserted, insert it separately for OT reasons (undo).\n        // Note: there can be multiple calls to `_insertPartialFragment()` during one insertion process.\n        // Note: only the very first node can be merged so we have to do separate operation only for it.\n        if (this._documentFragment.getChild(0) == this._firstNode) {\n            this.writer.insert(this._firstNode, this.position);\n            // We must merge the first node just after inserting it to avoid problems with OT.\n            // (See: https://github.com/ckeditor/ckeditor5/pull/8773#issuecomment-760945652).\n            this._mergeOnLeft();\n            this.position = livePosition.toPosition();\n        }\n        // Insert the remaining nodes from document fragment.\n        if (!this._documentFragment.isEmpty) {\n            this.writer.insert(this._documentFragment, this.position);\n        }\n        this._documentFragmentPosition = this.writer.createPositionAt(this._documentFragment, 0);\n        this.position = livePosition.toPosition();\n        livePosition.detach();\n    }\n    /**\n     * @param node The disallowed node which needs to be handled.\n     */\n    _handleDisallowedNode(node) {\n        // If the node is an element, try inserting its children (strip the parent).\n        if (node.is('element')) {\n            this.handleNodes(node.getChildren());\n        }\n    }\n    /**\n     * Append a node to the temporary DocumentFragment.\n     *\n     * @param node The node to insert.\n     */\n    _appendToFragment(node) {\n        /* istanbul ignore if -- @preserve */\n        if (!this.schema.checkChild(this.position, node)) {\n            // Algorithm's correctness check. We should never end up here but it's good to know that we did.\n            // Note that it would often be a silent issue if we insert node in a place where it's not allowed.\n            /**\n             * Given node cannot be inserted on the given position.\n             *\n             * @error insertcontent-wrong-position\n             * @param node Node to insert.\n             * @param position Position to insert the node at.\n             */\n            throw new CKEditorError('insertcontent-wrong-position', this, { node, position: this.position });\n        }\n        this.writer.insert(node, this._documentFragmentPosition);\n        this._documentFragmentPosition = this._documentFragmentPosition.getShiftedBy(node.offsetSize);\n        // The last inserted object should be selected because we can't put a collapsed selection after it.\n        if (this.schema.isObject(node) && !this.schema.checkChild(this.position, '$text')) {\n            this._nodeToSelect = node;\n        }\n        else {\n            this._nodeToSelect = null;\n        }\n        this._filterAttributesOf.push(node);\n    }\n    /**\n     * Sets `_affectedStart` and `_affectedEnd` to the given `position`. Should be used before a change is done during insertion process to\n     * mark the affected range.\n     *\n     * This method is used before inserting a node or splitting a parent node. `_affectedStart` and `_affectedEnd` are also changed\n     * during merging, but the logic there is more complicated so it is left out of this function.\n     */\n    _setAffectedBoundaries(position) {\n        // Set affected boundaries stickiness so that those position will \"expand\" when something is inserted in between them:\n        // <paragraph>Foo][bar</paragraph> -> <paragraph>Foo]xx[bar</paragraph>\n        // This is why it cannot be a range but two separate positions.\n        if (!this._affectedStart) {\n            this._affectedStart = LivePosition.fromPosition(position, 'toPrevious');\n        }\n        // If `_affectedEnd` is before the new boundary position, expand `_affectedEnd`. This can happen if first inserted node was\n        // inserted into the parent but the next node is moved-out of that parent:\n        // (1) <paragraph>Foo][</paragraph> -> <paragraph>Foo]xx[</paragraph>\n        // (2) <paragraph>Foo]xx[</paragraph> -> <paragraph>Foo]xx</paragraph><widget></widget>[\n        if (!this._affectedEnd || this._affectedEnd.isBefore(position)) {\n            if (this._affectedEnd) {\n                this._affectedEnd.detach();\n            }\n            this._affectedEnd = LivePosition.fromPosition(position, 'toNext');\n        }\n    }\n    /**\n     * Merges the previous sibling of the first node if it should be merged.\n     *\n     * After the content was inserted we may try to merge it with its siblings.\n     * This should happen only if the selection was in those elements initially.\n     */\n    _mergeOnLeft() {\n        const node = this._firstNode;\n        if (!(node instanceof Element)) {\n            return;\n        }\n        if (!this._canMergeLeft(node)) {\n            return;\n        }\n        const mergePosLeft = LivePosition._createBefore(node);\n        mergePosLeft.stickiness = 'toNext';\n        const livePosition = LivePosition.fromPosition(this.position, 'toNext');\n        // If `_affectedStart` is sames as merge position, it means that the element \"marked\" by `_affectedStart` is going to be\n        // removed and its contents will be moved. This won't transform `LivePosition` so `_affectedStart` needs to be moved\n        // by hand to properly reflect affected range. (Due to `_affectedStart` and `_affectedEnd` stickiness, the \"range\" is\n        // shown as `][`).\n        //\n        // Example - insert `<paragraph>Abc</paragraph><paragraph>Xyz</paragraph>` at the end of `<paragraph>Foo^</paragraph>`:\n        //\n        // <paragraph>Foo</paragraph><paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo</paragraph>]<paragraph>Abc</paragraph><paragraph>Xyz</paragraph>[<paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo]Abc</paragraph><paragraph>Xyz</paragraph>[<paragraph>Bar</paragraph>\n        //\n        // Note, that if we are here then something must have been inserted, so `_affectedStart` and `_affectedEnd` have to be set.\n        if (this._affectedStart.isEqual(mergePosLeft)) {\n            this._affectedStart.detach();\n            this._affectedStart = LivePosition._createAt(mergePosLeft.nodeBefore, 'end', 'toPrevious');\n        }\n        // We need to update the references to the first and last nodes if they will be merged into the previous sibling node\n        // because the reference would point to the removed node.\n        //\n        // <p>A^A</p> + <p>X</p>\n        //\n        // <p>A</p>^<p>A</p>\n        // <p>A</p><p>X</p><p>A</p>\n        // <p>AX</p><p>A</p>\n        // <p>AXA</p>\n        if (this._firstNode === this._lastNode) {\n            this._firstNode = mergePosLeft.nodeBefore;\n            this._lastNode = mergePosLeft.nodeBefore;\n        }\n        this.writer.merge(mergePosLeft);\n        // If only one element (the merged one) is in the \"affected range\", also move the affected range end appropriately.\n        //\n        // Example - insert `<paragraph>Abc</paragraph>` at the of `<paragraph>Foo^</paragraph>`:\n        //\n        // <paragraph>Foo</paragraph><paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo</paragraph>]<paragraph>Abc</paragraph>[<paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo]Abc</paragraph>[<paragraph>Bar</paragraph>   -->\n        // <paragraph>Foo]Abc[</paragraph><paragraph>Bar</paragraph>\n        if (mergePosLeft.isEqual(this._affectedEnd) && this._firstNode === this._lastNode) {\n            this._affectedEnd.detach();\n            this._affectedEnd = LivePosition._createAt(mergePosLeft.nodeBefore, 'end', 'toNext');\n        }\n        this.position = livePosition.toPosition();\n        livePosition.detach();\n        // After merge elements that were marked by _insert() to be filtered might be gone so\n        // we need to mark the new container.\n        this._filterAttributesOf.push(this.position.parent);\n        mergePosLeft.detach();\n    }\n    /**\n     * Merges the next sibling of the last node if it should be merged.\n     *\n     * After the content was inserted we may try to merge it with its siblings.\n     * This should happen only if the selection was in those elements initially.\n     */\n    _mergeOnRight() {\n        const node = this._lastNode;\n        if (!(node instanceof Element)) {\n            return;\n        }\n        if (!this._canMergeRight(node)) {\n            return;\n        }\n        const mergePosRight = LivePosition._createAfter(node);\n        mergePosRight.stickiness = 'toNext';\n        /* istanbul ignore if -- @preserve */\n        if (!this.position.isEqual(mergePosRight)) {\n            // Algorithm's correctness check. We should never end up here but it's good to know that we did.\n            // At this point the insertion position should be after the node we'll merge. If it isn't,\n            // it should need to be secured as in the left merge case.\n            /**\n             * An internal error occurred when merging inserted content with its siblings.\n             * The insertion position should equal the merge position.\n             *\n             * If you encountered this error, report it back to the CKEditor 5 team\n             * with as many details as possible regarding the content being inserted and the insertion position.\n             *\n             * @error insertcontent-invalid-insertion-position\n             */\n            throw new CKEditorError('insertcontent-invalid-insertion-position', this);\n        }\n        // Move the position to the previous node, so it isn't moved to the graveyard on merge.\n        // <p>x</p>[]<p>y</p> => <p>x[]</p><p>y</p>\n        this.position = Position._createAt(mergePosRight.nodeBefore, 'end');\n        // Explanation of setting position stickiness to `'toPrevious'`:\n        // OK:  <p>xx[]</p> + <p>yy</p> => <p>xx[]yy</p> (when sticks to previous)\n        // NOK: <p>xx[]</p> + <p>yy</p> => <p>xxyy[]</p> (when sticks to next)\n        const livePosition = LivePosition.fromPosition(this.position, 'toPrevious');\n        // See comment in `_mergeOnLeft()` on moving `_affectedStart`.\n        if (this._affectedEnd.isEqual(mergePosRight)) {\n            this._affectedEnd.detach();\n            this._affectedEnd = LivePosition._createAt(mergePosRight.nodeBefore, 'end', 'toNext');\n        }\n        // We need to update the references to the first and last nodes if they will be merged into the previous sibling node\n        // because the reference would point to the removed node.\n        //\n        // <p>A^A</p> + <p>X</p>\n        //\n        // <p>A</p>^<p>A</p>\n        // <p>A</p><p>X</p><p>A</p>\n        // <p>AX</p><p>A</p>\n        // <p>AXA</p>\n        if (this._firstNode === this._lastNode) {\n            this._firstNode = mergePosRight.nodeBefore;\n            this._lastNode = mergePosRight.nodeBefore;\n        }\n        this.writer.merge(mergePosRight);\n        // See comment in `_mergeOnLeft()` on moving `_affectedStart`.\n        if (mergePosRight.getShiftedBy(-1).isEqual(this._affectedStart) && this._firstNode === this._lastNode) {\n            this._affectedStart.detach();\n            this._affectedStart = LivePosition._createAt(mergePosRight.nodeBefore, 0, 'toPrevious');\n        }\n        this.position = livePosition.toPosition();\n        livePosition.detach();\n        // After merge elements that were marked by _insert() to be filtered might be gone so\n        // we need to mark the new container.\n        this._filterAttributesOf.push(this.position.parent);\n        mergePosRight.detach();\n    }\n    /**\n     * Checks whether specified node can be merged with previous sibling element.\n     *\n     * @param node The node which could potentially be merged.\n     */\n    _canMergeLeft(node) {\n        const previousSibling = node.previousSibling;\n        return (previousSibling instanceof Element) &&\n            this.canMergeWith.has(previousSibling) &&\n            this.model.schema.checkMerge(previousSibling, node);\n    }\n    /**\n     * Checks whether specified node can be merged with next sibling element.\n     *\n     * @param node The node which could potentially be merged.\n     */\n    _canMergeRight(node) {\n        const nextSibling = node.nextSibling;\n        return (nextSibling instanceof Element) &&\n            this.canMergeWith.has(nextSibling) &&\n            this.model.schema.checkMerge(node, nextSibling);\n    }\n    /**\n     * Inserts a paragraph and moves the insertion position into it.\n     */\n    _insertAutoParagraph() {\n        // Insert nodes collected in temporary DocumentFragment if the position parent needs change to process further nodes.\n        this._insertPartialFragment();\n        // Insert a paragraph and move insertion position to it.\n        const paragraph = this.writer.createElement('paragraph');\n        this.writer.insert(paragraph, this.position);\n        this._setAffectedBoundaries(this.position);\n        this._lastAutoParagraph = paragraph;\n        this.position = this.writer.createPositionAt(paragraph, 0);\n    }\n    /**\n     * @returns Whether an allowed position was found.\n     * `false` is returned if the node isn't allowed at any position up in the tree, `true` if was.\n     */\n    _checkAndSplitToAllowedPosition(node) {\n        const allowedIn = this._getAllowedIn(this.position.parent, node);\n        if (!allowedIn) {\n            return false;\n        }\n        // Insert nodes collected in temporary DocumentFragment if the position parent needs change to process further nodes.\n        if (allowedIn != this.position.parent) {\n            this._insertPartialFragment();\n        }\n        while (allowedIn != this.position.parent) {\n            if (this.position.isAtStart) {\n                // If insertion position is at the beginning of the parent, move it out instead of splitting.\n                // <p>^Foo</p> -> ^<p>Foo</p>\n                const parent = this.position.parent;\n                this.position = this.writer.createPositionBefore(parent);\n                // Special case – parent is empty (<p>^</p>).\n                //\n                // 1. parent.isEmpty\n                // We can remove the element after moving insertion position out of it.\n                //\n                // 2. parent.parent === allowedIn\n                // However parent should remain in place when allowed element is above limit element in document tree.\n                // For example there shouldn't be allowed to remove empty paragraph from tableCell, when is pasted\n                // content allowed in $root.\n                if (parent.isEmpty && parent.parent === allowedIn) {\n                    this.writer.remove(parent);\n                }\n            }\n            else if (this.position.isAtEnd) {\n                // If insertion position is at the end of the parent, move it out instead of splitting.\n                // <p>Foo^</p> -> <p>Foo</p>^\n                this.position = this.writer.createPositionAfter(this.position.parent);\n            }\n            else {\n                const tempPos = this.writer.createPositionAfter(this.position.parent);\n                this._setAffectedBoundaries(this.position);\n                this.writer.split(this.position);\n                this.position = tempPos;\n                this.canMergeWith.add(this.position.nodeAfter);\n            }\n        }\n        // At this point, we split elements up to the parent in which `node` is allowed.\n        // Note that `_getAllowedIn()` checks if the `node` is allowed either directly, or when auto-paragraphed.\n        // So, let's check if the `node` is allowed directly. If not, we need to auto-paragraph it.\n        if (!this.schema.checkChild(this.position.parent, node)) {\n            this._insertAutoParagraph();\n        }\n        return true;\n    }\n    /**\n     * Gets the element in which the given node is allowed. It checks the passed element and all its ancestors.\n     *\n     * It also verifies if auto-paragraphing could help.\n     *\n     * @param contextElement The element in which context the node should be checked.\n     * @param childNode The node to check.\n     */\n    _getAllowedIn(contextElement, childNode) {\n        // Check if a node can be inserted in the given context...\n        if (this.schema.checkChild(contextElement, childNode)) {\n            return contextElement;\n        }\n        // ...or it would be accepted if a paragraph would be inserted.\n        if (this.schema.checkChild(contextElement, 'paragraph') && this.schema.checkChild('paragraph', childNode)) {\n            return contextElement;\n        }\n        // If the child wasn't allowed in the context element and the element is a limit there's no point in\n        // checking any further towards the root. This is it: the limit is unsplittable and there's nothing\n        // we can do about it. Without this check, the algorithm will analyze parent of the limit and may create\n        // an illusion of the child being allowed. There's no way to insert it down there, though. It results in\n        // infinite loops.\n        if (this.schema.isLimit(contextElement)) {\n            return null;\n        }\n        return this._getAllowedIn(contextElement.parent, childNode);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { CKEditorError, first } from '@ckeditor/ckeditor5-utils';\n/**\n * Inserts an {@glink framework/deep-dive/schema#object-elements object element} at a specific position in the editor content.\n *\n * **Note:** Use {@link module:engine/model/model~Model#insertObject} instead of this function.\n * This function is only exposed to be reusable in algorithms which change the {@link module:engine/model/model~Model#insertObject}\n * method's behavior.\n *\n * **Note**: For more documentation and examples, see {@link module:engine/model/model~Model#insertObject}.\n *\n * @param model The model in context of which the insertion should be performed.\n * @param object An object to be inserted into the model document.\n * @param selectable A selectable where the content should be inserted. If not specified, the current\n * {@link module:engine/model/document~Document#selection document selection} will be used instead.\n * @param placeOrOffset Specifies the exact place or offset for the insertion to take place, relative to `selectable`.\n * @param options Additional options.\n * @param options.findOptimalPosition An option that, when set, adjusts the insertion position (relative to\n * `selectable` and `placeOrOffset`) so that the content of `selectable` is not split upon insertion (a.k.a. non-destructive insertion).\n * * When `'auto'`, the algorithm will decide whether to insert the object before or after `selectable` to avoid content splitting.\n * * When `'before'`, the closest position before `selectable` will be used that will not result in content splitting.\n * * When `'after'`, the closest position after `selectable` will be used that will not result in content splitting.\n *\n * Note that this option works only for block objects. Inline objects are inserted into text and do not split blocks.\n * @param options.setSelection An option that, when set, moves the\n * {@link module:engine/model/document~Document#selection document selection} after inserting the object.\n * * When `'on'`, the document selection will be set on the inserted object.\n * * When `'after'`, the document selection will move to the closest text node after the inserted object. If there is no\n * such text node, a paragraph will be created and the document selection will be moved inside it.\n * @returns A range which contains all the performed changes. This is a range that, if removed,\n * would return the model to the state before the insertion. If no changes were preformed by `insertObject()`, returns a range collapsed\n * at the insertion position.\n */\nexport default function insertObject(model, object, selectable, options = {}) {\n    if (!model.schema.isObject(object)) {\n        /**\n         * Tried to insert an element with {@link module:engine/model/utils/insertobject insertObject()} function\n         * that is not defined as an object in schema.\n         * See {@link module:engine/model/schema~SchemaItemDefinition#isObject `SchemaItemDefinition`}.\n         * If you want to insert content that is not an object you might want to use\n         * {@link module:engine/model/utils/insertcontent insertContent()} function.\n         * @error insertobject-element-not-an-object\n         */\n        throw new CKEditorError('insertobject-element-not-an-object', model, { object });\n    }\n    // Normalize selectable to a selection instance.\n    const originalSelection = selectable ? selectable : model.document.selection;\n    // Adjust the insertion selection.\n    let insertionSelection = originalSelection;\n    if (options.findOptimalPosition && model.schema.isBlock(object)) {\n        insertionSelection = model.createSelection(model.schema.findOptimalInsertionRange(originalSelection, options.findOptimalPosition));\n    }\n    // Collect attributes to be copied on the inserted object.\n    const firstSelectedBlock = first(originalSelection.getSelectedBlocks());\n    const attributesToCopy = {};\n    if (firstSelectedBlock) {\n        Object.assign(attributesToCopy, model.schema.getAttributesWithProperty(firstSelectedBlock, 'copyOnReplace', true));\n    }\n    return model.change(writer => {\n        // Remove the selected content to find out what the parent of the inserted object would be.\n        // It would be removed inside model.insertContent() anyway.\n        if (!insertionSelection.isCollapsed) {\n            model.deleteContent(insertionSelection, { doNotAutoparagraph: true });\n        }\n        let elementToInsert = object;\n        const insertionPositionParent = insertionSelection.anchor.parent;\n        // Autoparagraphing of an inline objects.\n        if (!model.schema.checkChild(insertionPositionParent, object) &&\n            model.schema.checkChild(insertionPositionParent, 'paragraph') &&\n            model.schema.checkChild('paragraph', object)) {\n            elementToInsert = writer.createElement('paragraph');\n            writer.insert(object, elementToInsert);\n        }\n        // Apply attributes that are allowed on the inserted object (or paragraph if autoparagraphed).\n        model.schema.setAllowedAttributes(elementToInsert, attributesToCopy, writer);\n        // Insert the prepared content at the optionally adjusted selection.\n        const affectedRange = model.insertContent(elementToInsert, insertionSelection);\n        // Nothing got inserted.\n        if (affectedRange.isCollapsed) {\n            return affectedRange;\n        }\n        if (options.setSelection) {\n            updateSelection(writer, object, options.setSelection, attributesToCopy);\n        }\n        return affectedRange;\n    });\n}\n/**\n * Updates document selection based on given `place` parameter in relation to `contextElement` element.\n *\n * @param writer An instance of the model writer.\n * @param contextElement An element to set the attributes on.\n * @param place The place where selection should be set in relation to the `contextElement` element.\n * Value `on` will set selection on the passed `contextElement`. Value `after` will set selection after `contextElement`.\n * @param attributes Attributes keys and values to set on a paragraph that this function can create when\n * `place` parameter is equal to `after` but there is no element with `$text` node to set selection in.\n */\nfunction updateSelection(writer, contextElement, place, paragraphAttributes) {\n    const model = writer.model;\n    if (place == 'on') {\n        writer.setSelection(contextElement, 'on');\n        return;\n    }\n    if (place != 'after') {\n        /**\n         * The unsupported `options.setSelection` parameter was passed\n         * to the {@link module:engine/model/utils/insertobject insertObject()} function.\n         * Check the {@link module:engine/model/utils/insertobject insertObject()} API documentation for allowed\n         * `options.setSelection` parameter values.\n         *\n         * @error insertobject-invalid-place-parameter-value\n         */\n        throw new CKEditorError('insertobject-invalid-place-parameter-value', model);\n    }\n    let nextElement = contextElement.nextSibling;\n    if (model.schema.isInline(contextElement)) {\n        writer.setSelection(contextElement, 'after');\n        return;\n    }\n    // Check whether an element next to the inserted element is defined and can contain a text.\n    const canSetSelection = nextElement && model.schema.checkChild(nextElement, '$text');\n    // If the element is missing, but a paragraph could be inserted next to the element, let's add it.\n    if (!canSetSelection && model.schema.checkChild(contextElement.parent, 'paragraph')) {\n        nextElement = writer.createElement('paragraph');\n        model.schema.setAllowedAttributes(nextElement, paragraphAttributes, writer);\n        model.insertContent(nextElement, writer.createPositionAfter(contextElement));\n    }\n    // Put the selection inside the element, at the beginning.\n    if (nextElement) {\n        writer.setSelection(nextElement, 0);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/utils/modifyselection\n */\nimport DocumentSelection from '../documentselection.js';\nimport Position from '../position.js';\nimport Range from '../range.js';\nimport TreeWalker from '../treewalker.js';\nimport { isInsideSurrogatePair, isInsideCombinedSymbol, isInsideEmojiSequence } from '@ckeditor/ckeditor5-utils';\nconst wordBoundaryCharacters = ' ,.?!:;\"-()';\n/**\n * Modifies the selection. Currently, the supported modifications are:\n *\n * * Extending. The selection focus is moved in the specified `options.direction` with a step specified in `options.unit`.\n * Possible values for `unit` are:\n *  * `'character'` (default) - moves selection by one user-perceived character. In most cases this means moving by one\n *  character in `String` sense. However, unicode also defines \"combing marks\". These are special symbols, that combines\n *  with a symbol before it (\"base character\") to create one user-perceived character. For example, `q̣̇` is a normal\n *  letter `q` with two \"combining marks\": upper dot (`Ux0307`) and lower dot (`Ux0323`). For most actions, i.e. extending\n *  selection by one position, it is correct to include both \"base character\" and all of it's \"combining marks\". That is\n *  why `'character'` value is most natural and common method of modifying selection.\n *  * `'codePoint'` - moves selection by one unicode code point. In contrary to, `'character'` unit, this will insert\n *  selection between \"base character\" and \"combining mark\", because \"combining marks\" have their own unicode code points.\n *  However, for technical reasons, unicode code points with values above `UxFFFF` are represented in native `String` by\n *  two characters, called \"surrogate pairs\". Halves of \"surrogate pairs\" have a meaning only when placed next to each other.\n *  For example `𨭎` is represented in `String` by `\\uD862\\uDF4E`. Both `\\uD862` and `\\uDF4E` do not have any meaning\n *  outside the pair (are rendered as ? when alone). Position between them would be incorrect. In this case, selection\n *  extension will include whole \"surrogate pair\".\n *  * `'word'` - moves selection by a whole word.\n *\n * **Note:** if you extend a forward selection in a backward direction you will in fact shrink it.\n *\n * **Note:** Use {@link module:engine/model/model~Model#modifySelection} instead of this function.\n * This function is only exposed to be reusable in algorithms\n * which change the {@link module:engine/model/model~Model#modifySelection}\n * method's behavior.\n *\n * @param model The model in context of which the selection modification should be performed.\n * @param selection The selection to modify.\n * @param options.direction The direction in which the selection should be modified. Default 'forward'.\n * @param options.unit The unit by which selection should be modified. Default 'character'.\n * @param options.treatEmojiAsSingleUnit Whether multi-characer emoji sequences should be handled as single unit.\n */\nexport default function modifySelection(model, selection, options = {}) {\n    const schema = model.schema;\n    const isForward = options.direction != 'backward';\n    const unit = options.unit ? options.unit : 'character';\n    const treatEmojiAsSingleUnit = !!options.treatEmojiAsSingleUnit;\n    const focus = selection.focus;\n    const walker = new TreeWalker({\n        boundaries: getSearchRange(focus, isForward),\n        singleCharacters: true,\n        direction: isForward ? 'forward' : 'backward'\n    });\n    const data = { walker, schema, isForward, unit, treatEmojiAsSingleUnit };\n    let next;\n    while ((next = walker.next())) {\n        if (next.done) {\n            return;\n        }\n        const position = tryExtendingTo(data, next.value);\n        if (position) {\n            if (selection instanceof DocumentSelection) {\n                model.change(writer => {\n                    writer.setSelectionFocus(position);\n                });\n            }\n            else {\n                selection.setFocus(position);\n            }\n            return;\n        }\n    }\n}\n/**\n * Checks whether the selection can be extended to the the walker's next value (next position).\n */\nfunction tryExtendingTo(data, value) {\n    const { isForward, walker, unit, schema, treatEmojiAsSingleUnit } = data;\n    const { type, item, nextPosition } = value;\n    // If found text, we can certainly put the focus in it. Let's just find a correct position\n    // based on the unit.\n    if (type == 'text') {\n        if (data.unit === 'word') {\n            return getCorrectWordBreakPosition(walker, isForward);\n        }\n        return getCorrectPosition(walker, unit, treatEmojiAsSingleUnit);\n    }\n    // Entering an element.\n    if (type == (isForward ? 'elementStart' : 'elementEnd')) {\n        // If it's a selectable, we can select it now.\n        if (schema.isSelectable(item)) {\n            return Position._createAt(item, isForward ? 'after' : 'before');\n        }\n        // If text allowed on this position, extend to this place.\n        if (schema.checkChild(nextPosition, '$text')) {\n            return nextPosition;\n        }\n    }\n    // Leaving an element.\n    else {\n        // If leaving a limit element, stop.\n        if (schema.isLimit(item)) {\n            // NOTE: Fast-forward the walker until the end.\n            walker.skip(() => true);\n            return;\n        }\n        // If text allowed on this position, extend to this place.\n        if (schema.checkChild(nextPosition, '$text')) {\n            return nextPosition;\n        }\n    }\n}\n/**\n * Finds a correct position by walking in a text node and checking whether selection can be extended to given position\n * or should be extended further.\n */\nfunction getCorrectPosition(walker, unit, treatEmojiAsSingleUnit) {\n    const textNode = walker.position.textNode;\n    if (textNode) {\n        const data = textNode.data;\n        let offset = walker.position.offset - textNode.startOffset;\n        while (isInsideSurrogatePair(data, offset) ||\n            (unit == 'character' && isInsideCombinedSymbol(data, offset)) ||\n            (treatEmojiAsSingleUnit && isInsideEmojiSequence(data, offset))) {\n            walker.next();\n            offset = walker.position.offset - textNode.startOffset;\n        }\n    }\n    return walker.position;\n}\n/**\n * Finds a correct position of a word break by walking in a text node and checking whether selection can be extended to given position\n * or should be extended further.\n */\nfunction getCorrectWordBreakPosition(walker, isForward) {\n    let textNode = walker.position.textNode;\n    if (!textNode) {\n        textNode = isForward ? walker.position.nodeAfter : walker.position.nodeBefore;\n    }\n    while (textNode && textNode.is('$text')) {\n        const offset = walker.position.offset - textNode.startOffset;\n        // Check of adjacent text nodes with different attributes (like BOLD).\n        // Example          : 'foofoo []bar<$text bold=\"true\">bar</$text> bazbaz'\n        // should expand to : 'foofoo [bar<$text bold=\"true\">bar</$text>] bazbaz'.\n        if (isAtNodeBoundary(textNode, offset, isForward)) {\n            textNode = isForward ? walker.position.nodeAfter : walker.position.nodeBefore;\n        }\n        // Check if this is a word boundary.\n        else if (isAtWordBoundary(textNode.data, offset, isForward)) {\n            break;\n        }\n        // Maybe one more character.\n        else {\n            walker.next();\n        }\n    }\n    return walker.position;\n}\nfunction getSearchRange(start, isForward) {\n    const root = start.root;\n    const searchEnd = Position._createAt(root, isForward ? 'end' : 0);\n    if (isForward) {\n        return new Range(start, searchEnd);\n    }\n    else {\n        return new Range(searchEnd, start);\n    }\n}\n/**\n * Checks if selection is on word boundary.\n */\nfunction isAtWordBoundary(data, offset, isForward) {\n    // The offset to check depends on direction.\n    const offsetToCheck = offset + (isForward ? 0 : -1);\n    return wordBoundaryCharacters.includes(data.charAt(offsetToCheck));\n}\n/**\n * Checks if selection is on node boundary.\n */\nfunction isAtNodeBoundary(textNode, offset, isForward) {\n    return offset === (isForward ? textNode.offsetSize : 0);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/model/model\n */\nimport Batch from './batch.js';\nimport Document from './document.js';\nimport MarkerCollection from './markercollection.js';\nimport ModelPosition from './position.js';\nimport ModelRange from './range.js';\nimport ModelSelection from './selection.js';\nimport OperationFactory from './operation/operationfactory.js';\nimport DocumentSelection from './documentselection.js';\nimport Schema from './schema.js';\nimport Writer from './writer.js';\nimport Node from './node.js';\nimport { autoParagraphEmptyRoots } from './utils/autoparagraphing.js';\nimport { injectSelectionPostFixer } from './utils/selection-post-fixer.js';\nimport deleteContent from './utils/deletecontent.js';\nimport getSelectedContent from './utils/getselectedcontent.js';\nimport insertContent from './utils/insertcontent.js';\nimport insertObject from './utils/insertobject.js';\nimport modifySelection from './utils/modifyselection.js';\nimport { CKEditorError, ObservableMixin } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_ENGINE // const { dumpTrees, initDocumentDumping } = require( '../dev-utils/utils' );\n// @if CK_DEBUG_ENGINE // const { OperationReplayer } = require( '../dev-utils/operationreplayer' ).default;\n/**\n * Editor's data model. Read about the model in the\n * {@glink framework/architecture/editing-engine engine architecture} guide.\n */\nexport default class Model extends /* #__PURE__ */ ObservableMixin() {\n    // @if CK_DEBUG_ENGINE // private _operationLogs: Array<string>;\n    // @if CK_DEBUG_ENGINE // private _appliedOperations: Array<Operation>;\n    constructor() {\n        super();\n        this.markers = new MarkerCollection();\n        this.document = new Document(this);\n        this.schema = new Schema();\n        this._pendingChanges = [];\n        this._currentWriter = null;\n        ['deleteContent', 'modifySelection', 'getSelectedContent', 'applyOperation']\n            .forEach(methodName => this.decorate(methodName));\n        // Adding operation validation with `highest` priority, so it is called before any other feature would like\n        // to do anything with the operation. If the operation has incorrect parameters it should throw on the earliest occasion.\n        this.on('applyOperation', (evt, args) => {\n            const operation = args[0];\n            operation._validate();\n        }, { priority: 'highest' });\n        // Register some default abstract entities.\n        this.schema.register('$root', {\n            isLimit: true\n        });\n        this.schema.register('$container', {\n            allowIn: ['$root', '$container']\n        });\n        this.schema.register('$block', {\n            allowIn: ['$root', '$container'],\n            isBlock: true\n        });\n        this.schema.register('$blockObject', {\n            allowWhere: '$block',\n            isBlock: true,\n            isObject: true\n        });\n        this.schema.register('$inlineObject', {\n            allowWhere: '$text',\n            allowAttributesOf: '$text',\n            isInline: true,\n            isObject: true\n        });\n        this.schema.register('$text', {\n            allowIn: '$block',\n            isInline: true,\n            isContent: true\n        });\n        this.schema.register('$clipboardHolder', {\n            allowContentOf: '$root',\n            allowChildren: '$text',\n            isLimit: true\n        });\n        this.schema.register('$documentFragment', {\n            allowContentOf: '$root',\n            allowChildren: '$text',\n            isLimit: true\n        });\n        // An element needed by the `upcastElementToMarker` converter.\n        // This element temporarily represents a marker boundary during the conversion process and is removed\n        // at the end of the conversion. `UpcastDispatcher` or at least `Conversion` class looks like a\n        // better place for this registration but both know nothing about `Schema`.\n        this.schema.register('$marker');\n        this.schema.addChildCheck(() => true, '$marker'); // Allow everywhere.\n        injectSelectionPostFixer(this);\n        // Post-fixer which takes care of adding empty paragraph elements to the empty roots.\n        this.document.registerPostFixer(autoParagraphEmptyRoots);\n        // The base implementation for \"decorated\" method with remapped arguments.\n        this.on('insertContent', (evt, [content, selectable]) => {\n            evt.return = insertContent(this, content, selectable);\n        });\n        // The base implementation for \"decorated\" method with remapped arguments.\n        this.on('insertObject', (evt, [element, selection, options]) => {\n            evt.return = insertObject(this, element, selection, options);\n        });\n        // The base implementation for \"decorated\" method with remapped arguments.\n        this.on('canEditAt', evt => {\n            const canEditAt = !this.document.isReadOnly;\n            evt.return = canEditAt;\n            if (!canEditAt) {\n                // Prevent further processing if the selection is at non-editable place.\n                evt.stop();\n            }\n        });\n        // @if CK_DEBUG_ENGINE // initDocumentDumping( this.document );\n        // @if CK_DEBUG_ENGINE // this.on( 'applyOperation', () => {\n        // @if CK_DEBUG_ENGINE // \tdumpTrees( this.document, this.document.version );\n        // @if CK_DEBUG_ENGINE // }, { priority: 'lowest' } );\n        // @if CK_DEBUG_ENGINE // this._operationLogs = [];\n        // @if CK_DEBUG_ENGINE // this._appliedOperations = [];\n    }\n    /**\n     * The `change()` method is the primary way of changing the model. You should use it to modify all document nodes\n     * (including detached nodes – i.e. nodes not added to the {@link module:engine/model/model~Model#document model document}),\n     * the {@link module:engine/model/document~Document#selection document's selection}, and\n     * {@link module:engine/model/model~Model#markers model markers}.\n     *\n     * ```ts\n     * model.change( writer => {\n     * \twriter.insertText( 'foo', paragraph, 'end' );\n     * } );\n     * ```\n     *\n     * All changes inside the change block use the same {@link module:engine/model/batch~Batch} so they are combined\n     * into a single undo step.\n     *\n     * ```ts\n     * model.change( writer => {\n     * \twriter.insertText( 'foo', paragraph, 'end' ); // foo.\n     *\n     * \tmodel.change( writer => {\n     * \t\twriter.insertText( 'bar', paragraph, 'end' ); // foobar.\n     * \t} );\n     *\n     * \twriter.insertText( 'bom', paragraph, 'end' ); // foobarbom.\n     * } );\n     * ```\n     *\n     * The callback of the `change()` block is executed synchronously.\n     *\n     * You can also return a value from the change block.\n     *\n     * ```ts\n     * const img = model.change( writer => {\n     * \treturn writer.createElement( 'img' );\n     * } );\n     * ```\n     *\n     * @see #enqueueChange\n     * @typeParam TReturn The return type of the provided callback.\n     * @param callback Callback function which may modify the model.\n     */\n    change(callback) {\n        try {\n            if (this._pendingChanges.length === 0) {\n                // If this is the outermost block, create a new batch and start `_runPendingChanges` execution flow.\n                this._pendingChanges.push({ batch: new Batch(), callback });\n                return this._runPendingChanges()[0];\n            }\n            else {\n                // If this is not the outermost block, just execute the callback.\n                return callback(this._currentWriter);\n            }\n        }\n        catch (err) {\n            // @if CK_DEBUG // throw err;\n            /* istanbul ignore next -- @preserve */\n            CKEditorError.rethrowUnexpectedError(err, this);\n        }\n    }\n    enqueueChange(batchOrType, callback) {\n        try {\n            if (!batchOrType) {\n                batchOrType = new Batch();\n            }\n            else if (typeof batchOrType === 'function') {\n                callback = batchOrType;\n                batchOrType = new Batch();\n            }\n            else if (!(batchOrType instanceof Batch)) {\n                batchOrType = new Batch(batchOrType);\n            }\n            this._pendingChanges.push({ batch: batchOrType, callback });\n            if (this._pendingChanges.length == 1) {\n                this._runPendingChanges();\n            }\n        }\n        catch (err) {\n            // @if CK_DEBUG // throw err;\n            /* istanbul ignore next -- @preserve */\n            CKEditorError.rethrowUnexpectedError(err, this);\n        }\n    }\n    /**\n     * {@link module:utils/observablemixin~Observable#decorate Decorated} function for applying\n     * {@link module:engine/model/operation/operation~Operation operations} to the model.\n     *\n     * This is a low-level way of changing the model. It is exposed for very specific use cases (like the undo feature).\n     * Normally, to modify the model, you will want to use {@link module:engine/model/writer~Writer `Writer`}.\n     * See also {@glink framework/architecture/editing-engine#changing-the-model Changing the model} section\n     * of the {@glink framework/architecture/editing-engine Editing architecture} guide.\n     *\n     * @param operation The operation to apply.\n     */\n    applyOperation(operation) {\n        // @if CK_DEBUG_ENGINE // console.log( 'Applying ' + operation );\n        // @if CK_DEBUG_ENGINE // this._operationLogs.push( JSON.stringify( operation ) );\n        // @if CK_DEBUG_ENGINE // this._appliedOperations.push( operation );\n        operation._execute();\n    }\n    // @if CK_DEBUG_ENGINE // public getAppliedOperation(): string {\n    // @if CK_DEBUG_ENGINE // \tif ( !this._appliedOperations ) {\n    // @if CK_DEBUG_ENGINE // \t\treturn '';\n    // @if CK_DEBUG_ENGINE // \t}\n    // @if CK_DEBUG_ENGINE // \treturn this._appliedOperations.map( operation => JSON.stringify( operation ) ).join( '-------' );\n    // @if CK_DEBUG_ENGINE // }\n    // @if CK_DEBUG_ENGINE // public createReplayer( stringifiedOperations: string ): typeof OperationReplayer {\n    // @if CK_DEBUG_ENGINE // \treturn new OperationReplayer( this, '-------', stringifiedOperations );\n    // @if CK_DEBUG_ENGINE // }\n    /**\n     * Inserts content at the position in the editor specified by the selection, as one would expect the paste\n     * functionality to work.\n     *\n     * **Note**: If you want to insert an {@glink framework/deep-dive/schema#object-elements object element}\n     * (e.g. a {@link module:widget/utils~toWidget widget}), see {@link #insertObject} instead.\n     *\n     * This is a high-level method. It takes the {@link #schema schema} into consideration when inserting\n     * the content, clears the given selection's content before inserting nodes and moves the selection\n     * to its target position at the end of the process.\n     * It can split elements, merge them, wrap bare text nodes with paragraphs, etc. &ndash; just like the\n     * pasting feature should do.\n     *\n     * For lower-level methods see {@link module:engine/model/writer~Writer `Writer`}.\n     *\n     * This method, unlike {@link module:engine/model/writer~Writer `Writer`}'s methods, does not have to be used\n     * inside a {@link #change `change()` block}.\n     *\n     * # Conversion and schema\n     *\n     * Inserting elements and text nodes into the model is not enough to make CKEditor 5 render that content\n     * to the user. CKEditor 5 implements a model-view-controller architecture and what `model.insertContent()` does\n     * is only adding nodes to the model. Additionally, you need to define\n     * {@glink framework/architecture/editing-engine#conversion converters} between the model and view\n     * and define those nodes in the {@glink framework/architecture/editing-engine#schema schema}.\n     *\n     * So, while this method may seem similar to CKEditor 4 `editor.insertHtml()` (in fact, both methods\n     * are used for paste-like content insertion), the CKEditor 5 method cannot be use to insert arbitrary HTML\n     * unless converters are defined for all elements and attributes in that HTML.\n     *\n     * # Examples\n     *\n     * Using `insertContent()` with a manually created model structure:\n     *\n     * ```ts\n     * // Let's create a document fragment containing such content as:\n     * //\n     * // <paragraph>foo</paragraph>\n     * // <blockQuote>\n     * //    <paragraph>bar</paragraph>\n     * // </blockQuote>\n     * const docFrag = editor.model.change( writer => {\n     * \tconst p1 = writer.createElement( 'paragraph' );\n     * \tconst p2 = writer.createElement( 'paragraph' );\n     * \tconst blockQuote = writer.createElement( 'blockQuote' );\n     * \tconst docFrag = writer.createDocumentFragment();\n     *\n     * \twriter.append( p1, docFrag );\n     * \twriter.append( blockQuote, docFrag );\n     * \twriter.append( p2, blockQuote );\n     * \twriter.insertText( 'foo', p1 );\n     * \twriter.insertText( 'bar', p2 );\n     *\n     * \treturn docFrag;\n     * } );\n     *\n     * // insertContent() does not have to be used in a change() block. It can, though,\n     * // so this code could be moved to the callback defined above.\n     * editor.model.insertContent( docFrag );\n     * ```\n     *\n     * Using `insertContent()` with an HTML string converted to a model document fragment (similar to the pasting mechanism):\n     *\n     * ```ts\n     * // You can create your own HtmlDataProcessor instance or use editor.data.processor\n     * // if you have not overridden the default one (which is the HtmlDataProcessor instance).\n     * const htmlDP = new HtmlDataProcessor( viewDocument );\n     *\n     * // Convert an HTML string to a view document fragment:\n     * const viewFragment = htmlDP.toView( htmlString );\n     *\n     * // Convert the view document fragment to a model document fragment\n     * // in the context of $root. This conversion takes the schema into\n     * // account so if, for example, the view document fragment contained a bare text node,\n     * // this text node cannot be a child of $root, so it will be automatically\n     * // wrapped with a <paragraph>. You can define the context yourself (in the second parameter),\n     * // and e.g. convert the content like it would happen in a <paragraph>.\n     * // Note: The clipboard feature uses a custom context called $clipboardHolder\n     * // which has a loosened schema.\n     * const modelFragment = editor.data.toModel( viewFragment );\n     *\n     * editor.model.insertContent( modelFragment );\n     * ```\n     *\n     * By default this method will use the document selection but it can also be used with a position, range or selection instance.\n     *\n     * ```ts\n     * // Insert text at the current document selection position.\n     * editor.model.change( writer => {\n     * \teditor.model.insertContent( writer.createText( 'x' ) );\n     * } );\n     *\n     * // Insert text at a given position - the document selection will not be modified.\n     * editor.model.change( writer => {\n     * \teditor.model.insertContent( writer.createText( 'x' ), doc.getRoot(), 2 );\n     *\n     * \t// Which is a shorthand for:\n     * \teditor.model.insertContent( writer.createText( 'x' ), writer.createPositionAt( doc.getRoot(), 2 ) );\n     * } );\n     * ```\n     *\n     * If you want the document selection to be moved to the inserted content, use the\n     * {@link module:engine/model/writer~Writer#setSelection `setSelection()`} method of the writer after inserting\n     * the content:\n     *\n     * ```ts\n     * editor.model.change( writer => {\n     * \tconst paragraph = writer.createElement( 'paragraph' );\n     *\n     * \t// Insert an empty paragraph at the beginning of the root.\n     * \teditor.model.insertContent( paragraph, writer.createPositionAt( editor.model.document.getRoot(), 0 ) );\n     *\n     * \t// Move the document selection to the inserted paragraph.\n     * \twriter.setSelection( paragraph, 'in' );\n     * } );\n     * ```\n     *\n     * If an instance of the {@link module:engine/model/selection~Selection model selection} is passed as `selectable`,\n     * the new content will be inserted at the passed selection (instead of document selection):\n     *\n     * ```ts\n     * editor.model.change( writer => {\n     * \t// Create a selection in a paragraph that will be used as a place of insertion.\n     * \tconst selection = writer.createSelection( paragraph, 'in' );\n     *\n     * \t// Insert the new text at the created selection.\n     * \teditor.model.insertContent( writer.createText( 'x' ), selection );\n     *\n     * \t// insertContent() modifies the passed selection instance so it can be used to set the document selection.\n     * \t// Note: This is not necessary when you passed the document selection to insertContent().\n     * \twriter.setSelection( selection );\n     * } );\n     * ```\n     *\n     * @fires insertContent\n     * @param content The content to insert.\n     * @param selectable The selection into which the content should be inserted.\n     * If not provided the current model document selection will be used.\n     * @param placeOrOffset To be used when a model item was passed as `selectable`.\n     * This param defines a position in relation to that item.\n     * at the insertion position.\n     */\n    insertContent(content, selectable, placeOrOffset, ...rest) {\n        const selection = normalizeSelectable(selectable, placeOrOffset);\n        // Passing all call arguments so it acts like decorated method.\n        return this.fire('insertContent', [content, selection, placeOrOffset, ...rest]);\n    }\n    /**\n     * Inserts an {@glink framework/deep-dive/schema#object-elements object element} at a specific position in the editor content.\n     *\n     * This is a high-level API:\n     * * It takes the {@link #schema schema} into consideration,\n     * * It clears the content of passed `selectable` before inserting,\n     * * It can move the selection at the end of the process,\n     * * It will copy the selected block's attributes to preserve them upon insertion,\n     * * It can split elements or wrap inline objects with paragraphs if they are not allowed in target position,\n     * * etc.\n     *\n     * # Notes\n     *\n     * * If you want to insert a non-object content, see {@link #insertContent} instead.\n     * * For lower-level API, see {@link module:engine/model/writer~Writer `Writer`}.\n     * * Unlike {@link module:engine/model/writer~Writer `Writer`}, this method does not have to be used inside\n     * a {@link #change `change()` block}.\n     * * Inserting object into the model is not enough to make CKEditor 5 render that content to the user.\n     * CKEditor 5 implements a model-view-controller architecture and what `model.insertObject()` does\n     * is only adding nodes to the model. Additionally, you need to define\n     * {@glink framework/architecture/editing-engine#conversion converters} between the model and view\n     * and define those nodes in the {@glink framework/architecture/editing-engine#schema schema}.\n     *\n     * # Examples\n     *\n     * Use the following code to insert an object at the current selection and keep the selection on the inserted element:\n     *\n     * ```ts\n     * const rawHtmlEmbedElement = writer.createElement( 'rawHtml' );\n     *\n     * model.insertObject( rawHtmlEmbedElement, null, null, {\n     * \tsetSelection: 'on'\n     * } );\n     * ```\n     *\n     * Use the following code to insert an object at the current selection and nudge the selection after the inserted object:\n     *\n     * ```ts\n     * const pageBreakElement = writer.createElement( 'pageBreak' );\n     *\n     * model.insertObject( pageBreakElement, null, null, {\n     * \tsetSelection: 'after'\n     * } );\n     * ```\n     *\n     * Use the following code to insert an object at the current selection and avoid splitting the content (non-destructive insertion):\n     *\n     * ```ts\n     * const tableElement = writer.createElement( 'table' );\n     *\n     * model.insertObject( tableElement, null, null, {\n     * \tfindOptimalPosition: 'auto'\n     * } );\n     * ```\n     *\n     * Use the following code to insert an object at the specific range (also: replace the content of the range):\n     *\n     * ```ts\n     * const tableElement = writer.createElement( 'table' );\n     * const range = model.createRangeOn( model.document.getRoot().getChild( 1 ) );\n     *\n     * model.insertObject( tableElement, range );\n     * ```\n     *\n     * @param element An object to be inserted into the model document.\n     * @param selectable A selectable where the content should be inserted. If not specified, the current\n     * {@link module:engine/model/document~Document#selection document selection} will be used instead.\n     * @param placeOrOffset Specifies the exact place or offset for the insertion to take place, relative to `selectable`.\n     * @param options Additional options.\n     * @param options.findOptimalPosition An option that, when set, adjusts the insertion position (relative to\n     * `selectable` and `placeOrOffset`) so that the content of `selectable` is not split upon insertion (a.k.a. non-destructive insertion).\n     * * When `'auto'`, the algorithm will decide whether to insert the object before or after `selectable` to avoid content splitting.\n     * * When `'before'`, the closest position before `selectable` will be used that will not result in content splitting.\n     * * When `'after'`, the closest position after `selectable` will be used that will not result in content splitting.\n     *\n     * Note that this option only works for block objects. Inline objects are inserted into text and do not split blocks.\n     * @param options.setSelection An option that, when set, moves the\n     * {@link module:engine/model/document~Document#selection document selection} after inserting the object.\n     * * When `'on'`, the document selection will be set on the inserted object.\n     * * When `'after'`, the document selection will move to the closest text node after the inserted object. If there is no\n     * such text node, a paragraph will be created and the document selection will be moved inside it.\n     * at the insertion position.\n     */\n    insertObject(element, selectable, placeOrOffset, options, ...rest) {\n        const selection = normalizeSelectable(selectable, placeOrOffset);\n        // Note that options are fired as 2 arguments for backward compatibility with the decorated method.\n        // Passing all call arguments so it acts like decorated method.\n        return this.fire('insertObject', [element, selection, options, options, ...rest]);\n    }\n    /**\n     * Deletes content of the selection and merge siblings. The resulting selection is always collapsed.\n     *\n     * **Note:** For the sake of predictability, the resulting selection should always be collapsed.\n     * In cases where a feature wants to modify deleting behavior so selection isn't collapsed\n     * (e.g. a table feature may want to keep row selection after pressing <kbd>Backspace</kbd>),\n     * then that behavior should be implemented in the view's listener. At the same time, the table feature\n     * will need to modify this method's behavior too, e.g. to \"delete contents and then collapse\n     * the selection inside the last selected cell\" or \"delete the row and collapse selection somewhere near\".\n     * That needs to be done in order to ensure that other features which use `deleteContent()` will work well with tables.\n     *\n     * @fires deleteContent\n     * @param selection Selection of which the content should be deleted.\n     * @param options.leaveUnmerged Whether to merge elements after removing the content of the selection.\n     *\n     * For example `<heading1>x[x</heading1><paragraph>y]y</paragraph>` will become:\n     *\n     * * `<heading1>x^y</heading1>` with the option disabled (`leaveUnmerged == false`)\n     * * `<heading1>x^</heading1><paragraph>y</paragraph>` with enabled (`leaveUnmerged == true`).\n     *\n     * Note: {@link module:engine/model/schema~Schema#isObject object} and {@link module:engine/model/schema~Schema#isLimit limit}\n     * elements will not be merged.\n     *\n     * @param options.doNotResetEntireContent Whether to skip replacing the entire content with a\n     * paragraph when the entire content was selected.\n     *\n     * For example `<heading1>[x</heading1><paragraph>y]</paragraph>` will become:\n     *\n     * * `<paragraph>^</paragraph>` with the option disabled (`doNotResetEntireContent == false`)\n     * * `<heading1>^</heading1>` with enabled (`doNotResetEntireContent == true`)\n     *\n     * @param options.doNotAutoparagraph Whether to create a paragraph if after content deletion selection is moved\n     * to a place where text cannot be inserted.\n     *\n     * For example `<paragraph>x</paragraph>[<imageBlock src=\"foo.jpg\"></imageBlock>]` will become:\n     *\n     * * `<paragraph>x</paragraph><paragraph>[]</paragraph>` with the option disabled (`doNotAutoparagraph == false`)\n     * * `<paragraph>x[]</paragraph>` with the option enabled (`doNotAutoparagraph == true`).\n     *\n     * **Note:** if there is no valid position for the selection, the paragraph will always be created:\n     *\n     * `[<imageBlock src=\"foo.jpg\"></imageBlock>]` -> `<paragraph>[]</paragraph>`.\n     *\n     * @param options.direction The direction in which the content is being consumed.\n     * Deleting backward corresponds to using the <kbd>Backspace</kbd> key, while deleting content forward corresponds to\n     * the <kbd>Shift</kbd>+<kbd>Backspace</kbd> keystroke.\n     */\n    deleteContent(selection, options) {\n        deleteContent(this, selection, options);\n    }\n    /**\n     * Modifies the selection. Currently, the supported modifications are:\n     *\n     * * Extending. The selection focus is moved in the specified `options.direction` with a step specified in `options.unit`.\n     * Possible values for `unit` are:\n     *  * `'character'` (default) - moves selection by one user-perceived character. In most cases this means moving by one\n     *  character in `String` sense. However, unicode also defines \"combing marks\". These are special symbols, that combines\n     *  with a symbol before it (\"base character\") to create one user-perceived character. For example, `q̣̇` is a normal\n     *  letter `q` with two \"combining marks\": upper dot (`Ux0307`) and lower dot (`Ux0323`). For most actions, i.e. extending\n     *  selection by one position, it is correct to include both \"base character\" and all of it's \"combining marks\". That is\n     *  why `'character'` value is most natural and common method of modifying selection.\n     *  * `'codePoint'` - moves selection by one unicode code point. In contrary to, `'character'` unit, this will insert\n     *  selection between \"base character\" and \"combining mark\", because \"combining marks\" have their own unicode code points.\n     *  However, for technical reasons, unicode code points with values above `UxFFFF` are represented in native `String` by\n     *  two characters, called \"surrogate pairs\". Halves of \"surrogate pairs\" have a meaning only when placed next to each other.\n     *  For example `𨭎` is represented in `String` by `\\uD862\\uDF4E`. Both `\\uD862` and `\\uDF4E` do not have any meaning\n     *  outside the pair (are rendered as ? when alone). Position between them would be incorrect. In this case, selection\n     *  extension will include whole \"surrogate pair\".\n     *  * `'word'` - moves selection by a whole word.\n     *\n     * **Note:** if you extend a forward selection in a backward direction you will in fact shrink it.\n     *\n     * @fires modifySelection\n     * @param selection The selection to modify.\n     * @param options.direction The direction in which the selection should be modified.\n     * @param options.unit The unit by which selection should be modified.\n     * @param options.treatEmojiAsSingleUnit Whether multi-characer emoji sequences should be handled as single unit.\n     */\n    modifySelection(selection, options) {\n        modifySelection(this, selection, options);\n    }\n    /**\n     * Gets a clone of the selected content.\n     *\n     * For example, for the following selection:\n     *\n     * ```html\n     * <paragraph>x</paragraph>\n     * <blockQuote>\n     * \t<paragraph>y</paragraph>\n     * \t<heading1>fir[st</heading1>\n     * </blockQuote>\n     * <paragraph>se]cond</paragraph>\n     * <paragraph>z</paragraph>\n     * ```\n     *\n     * It will return a document fragment with such a content:\n     *\n     * ```html\n     * <blockQuote>\n     * \t<heading1>st</heading1>\n     * </blockQuote>\n     * <paragraph>se</paragraph>\n     * ```\n     *\n     * @fires getSelectedContent\n     * @param selection The selection of which content will be returned.\n     */\n    getSelectedContent(selection) {\n        return getSelectedContent(this, selection);\n    }\n    /**\n     * Checks whether the given {@link module:engine/model/range~Range range} or\n     * {@link module:engine/model/element~Element element} has any meaningful content.\n     *\n     * Meaningful content is:\n     *\n     * * any text node (`options.ignoreWhitespaces` allows controlling whether this text node must also contain\n     * any non-whitespace characters),\n     * * or any {@link module:engine/model/schema~Schema#isContent content element},\n     * * or any {@link module:engine/model/markercollection~Marker marker} which\n     * {@link module:engine/model/markercollection~Marker#_affectsData affects data}.\n     *\n     * This means that a range containing an empty `<paragraph></paragraph>` is not considered to have a meaningful content.\n     * However, a range containing an `<imageBlock></imageBlock>` (which would normally be marked in the schema as an object element)\n     * is considered non-empty.\n     *\n     * @param rangeOrElement Range or element to check.\n     * @param options.ignoreWhitespaces Whether text node with whitespaces only should be considered empty.\n     * @param options.ignoreMarkers Whether markers should be ignored.\n     */\n    hasContent(rangeOrElement, options = {}) {\n        const range = rangeOrElement instanceof ModelRange ? rangeOrElement : ModelRange._createIn(rangeOrElement);\n        if (range.isCollapsed) {\n            return false;\n        }\n        const { ignoreWhitespaces = false, ignoreMarkers = false } = options;\n        // Check if there are any markers which affects data in this given range.\n        if (!ignoreMarkers) {\n            for (const intersectingMarker of this.markers.getMarkersIntersectingRange(range)) {\n                if (intersectingMarker.affectsData) {\n                    return true;\n                }\n            }\n        }\n        for (const item of range.getItems()) {\n            if (this.schema.isContent(item)) {\n                if (item.is('$textProxy')) {\n                    if (!ignoreWhitespaces) {\n                        return true;\n                    }\n                    else if (item.data.search(/\\S/) !== -1) {\n                        return true;\n                    }\n                }\n                else {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n    /**\n     * Check whether given selectable is at a place in the model where it can be edited (returns `true`) or not (returns `false`).\n     *\n     * Should be used instead of {@link module:core/editor/editor~Editor#isReadOnly} to check whether a user action can happen at\n     * given selectable. It may be decorated and used differently in different environment (e.g. multi-root editor can disable\n     * a particular root).\n     *\n     * This method is decorated. Although this method accepts any parameter of `Selectable` type, the\n     * {@link ~Model#event:canEditAt `canEditAt` event} is fired with `selectable` normalized to an instance of\n     * {@link module:engine/model/selection~Selection} or {@link module:engine/model/documentselection~DocumentSelection}\n     *\n     * @fires canEditAt\n     */\n    canEditAt(selectable) {\n        const selection = normalizeSelectable(selectable);\n        return this.fire('canEditAt', [selection]);\n    }\n    /**\n     * Creates a position from the given root and path in that root.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionFromPath `Writer#createPositionFromPath()`}.\n     *\n     * @param root Root of the position.\n     * @param path Position path. See {@link module:engine/model/position~Position#path}.\n     * @param stickiness Position stickiness. See {@link module:engine/model/position~PositionStickiness}.\n     */\n    createPositionFromPath(root, path, stickiness) {\n        return new ModelPosition(root, path, stickiness);\n    }\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/model/position~Position position},\n     * * a parent element and offset in that element,\n     * * a parent element and `'end'` (the position will be set at the end of that element),\n     * * a {@link module:engine/model/item~Item model item} and `'before'` or `'after'`\n     * (the position will be set before or after the given model item).\n     *\n     * This method is a shortcut to other factory methods such as:\n     *\n     * * {@link module:engine/model/model~Model#createPositionBefore `createPositionBefore()`},\n     * * {@link module:engine/model/model~Model#createPositionAfter `createPositionAfter()`}.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionAt `Writer#createPositionAt()`},\n     *\n     * @param itemOrPosition\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n     */\n    createPositionAt(itemOrPosition, offset) {\n        return ModelPosition._createAt(itemOrPosition, offset);\n    }\n    /**\n     * Creates a new position after the given {@link module:engine/model/item~Item model item}.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionAfter `Writer#createPositionAfter()`}.\n     *\n     * @param item Item after which the position should be placed.\n     */\n    createPositionAfter(item) {\n        return ModelPosition._createAfter(item);\n    }\n    /**\n     * Creates a new position before the given {@link module:engine/model/item~Item model item}.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createPositionBefore `Writer#createPositionBefore()`}.\n     *\n     * @param item Item before which the position should be placed.\n     */\n    createPositionBefore(item) {\n        return ModelPosition._createBefore(item);\n    }\n    /**\n     * Creates a range spanning from the `start` position to the `end` position.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createRange `Writer#createRange()`}:\n     *\n     * ```ts\n     * model.change( writer => {\n     * \tconst range = writer.createRange( start, end );\n     * } );\n     * ```\n     *\n     * @param start Start position.\n     * @param end End position. If not set, the range will be collapsed to the `start` position.\n     */\n    createRange(start, end) {\n        return new ModelRange(start, end);\n    }\n    /**\n     * Creates a range inside the given element which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * Note: This method is also available as\n     * {@link module:engine/model/writer~Writer#createRangeIn `Writer#createRangeIn()`}:\n     *\n     * ```ts\n     * model.change( writer => {\n     * \tconst range = writer.createRangeIn( paragraph );\n     * } );\n     * ```\n     *\n     * @param element Element which is a parent for the range.\n     */\n    createRangeIn(element) {\n        return ModelRange._createIn(element);\n    }\n    /**\n     * Creates a range that starts before the given {@link module:engine/model/item~Item model item} and ends after it.\n     *\n     * Note: This method is also available on `writer` instance as\n     * {@link module:engine/model/writer~Writer#createRangeOn `Writer.createRangeOn()`}:\n     *\n     * ```ts\n     * model.change( writer => {\n     * \tconst range = writer.createRangeOn( paragraph );\n     * } );\n     * ```\n     *\n     * @param item\n     */\n    createRangeOn(item) {\n        return ModelRange._createOn(item);\n    }\n    createSelection(...args) {\n        return new ModelSelection(...args);\n    }\n    /**\n     * Creates a {@link module:engine/model/batch~Batch} instance.\n     *\n     * **Note:** In most cases creating a batch instance is not necessary as they are created when using:\n     *\n     * * {@link #change `change()`},\n     * * {@link #enqueueChange `enqueueChange()`}.\n     *\n     * @param type {@link module:engine/model/batch~Batch#constructor The type} of the batch.\n     */\n    createBatch(type) {\n        return new Batch(type);\n    }\n    /**\n     * Creates an operation instance from a JSON object (parsed JSON string).\n     *\n     * This is an alias for {@link module:engine/model/operation/operationfactory~OperationFactory.fromJSON `OperationFactory.fromJSON()`}.\n     *\n     * @param json Deserialized JSON object.\n     */\n    createOperationFromJSON(json) {\n        return OperationFactory.fromJSON(json, this.document);\n    }\n    /**\n     * Removes all events listeners set by model instance and destroys {@link module:engine/model/document~Document}.\n     */\n    destroy() {\n        this.document.destroy();\n        this.stopListening();\n    }\n    /**\n     * Common part of {@link module:engine/model/model~Model#change} and {@link module:engine/model/model~Model#enqueueChange}\n     * which calls callbacks and returns array of values returned by these callbacks.\n     */\n    _runPendingChanges() {\n        const ret = [];\n        this.fire('_beforeChanges');\n        try {\n            while (this._pendingChanges.length) {\n                // Create a new writer using batch instance created for this chain of changes.\n                const currentBatch = this._pendingChanges[0].batch;\n                this._currentWriter = new Writer(this, currentBatch);\n                // Execute changes callback and gather the returned value.\n                const callbackReturnValue = this._pendingChanges[0].callback(this._currentWriter);\n                ret.push(callbackReturnValue);\n                this.document._handleChangeBlock(this._currentWriter);\n                this._pendingChanges.shift();\n                this._currentWriter = null;\n            }\n        }\n        finally {\n            this._pendingChanges.length = 0;\n            this._currentWriter = null;\n            this.fire('_afterChanges');\n        }\n        return ret;\n    }\n}\n/**\n * Normalizes a selectable to a Selection or DocumentSelection.\n */\nfunction normalizeSelectable(selectable, placeOrOffset) {\n    if (!selectable) {\n        return;\n    }\n    if (selectable instanceof ModelSelection || selectable instanceof DocumentSelection) {\n        return selectable;\n    }\n    if (selectable instanceof Node) {\n        if (placeOrOffset || placeOrOffset === 0) {\n            return new ModelSelection(selectable, placeOrOffset);\n        }\n        else if (selectable.is('rootElement')) {\n            return new ModelSelection(selectable, 'in');\n        }\n        else {\n            return new ModelSelection(selectable, 'on');\n        }\n    }\n    return new ModelSelection(selectable);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/clickobserver\n */\nimport DomEventObserver from './domeventobserver.js';\n/**\n * {@link module:engine/view/document~Document#event:click Click} event observer.\n *\n * Note that this observer is not available by default. To make it available it needs to be added to\n * {@link module:engine/view/view~View view controller} by a {@link module:engine/view/view~View#addObserver} method.\n */\nexport default class ClickObserver extends DomEventObserver {\n    constructor() {\n        super(...arguments);\n        /**\n         * @inheritDoc\n         */\n        this.domEventType = 'click';\n    }\n    /**\n     * @inheritDoc\n     */\n    onDomEvent(domEvent) {\n        this.fire(domEvent.type, domEvent);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/observer/mouseobserver\n */\nimport DomEventObserver from './domeventobserver.js';\n/**\n * Mouse events observer.\n *\n * Note that this observer is not available by default. To make it available it needs to be added to\n * {@link module:engine/view/view~View} by {@link module:engine/view/view~View#addObserver} method.\n */\nexport default class MouseObserver extends DomEventObserver {\n    constructor() {\n        super(...arguments);\n        /**\n         * @inheritDoc\n         */\n        this.domEventType = ['mousedown', 'mouseup', 'mouseover', 'mouseout'];\n    }\n    /**\n     * @inheritDoc\n     */\n    onDomEvent(domEvent) {\n        this.fire(domEvent.type, domEvent);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module engine/view/upcastwriter\n */\nimport DocumentFragment from './documentfragment.js';\nimport Element from './element.js';\nimport Text from './text.js';\nimport { isPlainObject } from 'lodash-es';\nimport Position from './position.js';\nimport Range from './range.js';\nimport Selection from './selection.js';\n/**\n * View upcast writer. It provides a set of methods used to manipulate non-semantic view trees.\n *\n * It should be used only while working on a non-semantic view\n * (e.g. a view created from HTML string on paste).\n * To manipulate a view which was or is being downcasted from the the model use the\n * {@link module:engine/view/downcastwriter~DowncastWriter downcast writer}.\n *\n * Read more about changing the view in the {@glink framework/architecture/editing-engine#changing-the-view Changing the view}\n * section of the {@glink framework/architecture/editing-engine Editing engine architecture} guide.\n *\n * Unlike `DowncastWriter`, which is available in the {@link module:engine/view/view~View#change `View#change()`} block,\n * `UpcastWriter` can be created wherever you need it:\n *\n * ```ts\n * const writer = new UpcastWriter( viewDocument );\n * const text = writer.createText( 'foo!' );\n *\n * writer.appendChild( text, someViewElement );\n * ```\n */\nexport default class UpcastWriter {\n    /**\n     * @param document The view document instance in which this upcast writer operates.\n     */\n    constructor(document) {\n        this.document = document;\n    }\n    /**\n     * Creates a new {@link module:engine/view/documentfragment~DocumentFragment} instance.\n     *\n     * @param children A list of nodes to be inserted into the created document fragment.\n     * @returns The created document fragment.\n     */\n    createDocumentFragment(children) {\n        return new DocumentFragment(this.document, children);\n    }\n    /**\n     * Creates a new {@link module:engine/view/element~Element} instance.\n     *\n     * Attributes can be passed in various formats:\n     *\n     * ```ts\n     * upcastWriter.createElement( 'div', { class: 'editor', contentEditable: 'true' } ); // object\n     * upcastWriter.createElement( 'div', [ [ 'class', 'editor' ], [ 'contentEditable', 'true' ] ] ); // map-like iterator\n     * upcastWriter.createElement( 'div', mapOfAttributes ); // map\n     * ```\n     *\n     * @param name Node name.\n     * @param attrs Collection of attributes.\n     * @param children A list of nodes to be inserted into created element.\n     * @returns Created element.\n     */\n    createElement(name, attrs, children) {\n        return new Element(this.document, name, attrs, children);\n    }\n    /**\n     * Creates a new {@link module:engine/view/text~Text} instance.\n     *\n     * @param data The text's data.\n     * @returns The created text node.\n     */\n    createText(data) {\n        return new Text(this.document, data);\n    }\n    /**\n     * Clones the provided element.\n     *\n     * @see module:engine/view/element~Element#_clone\n     * @param element Element to be cloned.\n     * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n     * element will be cloned without any children.\n     * @returns Clone of this element.\n     */\n    clone(element, deep = false) {\n        return element._clone(deep);\n    }\n    /**\n     * Appends a child node or a list of child nodes at the end of this node\n     * and sets the parent of these nodes to this element.\n     *\n     * @see module:engine/view/element~Element#_appendChild\n     * @param items Items to be inserted.\n     * @param element Element to which items will be appended.\n     * @returns Number of appended nodes.\n     */\n    appendChild(items, element) {\n        return element._appendChild(items);\n    }\n    /**\n     * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n     * this element.\n     *\n     * @see module:engine/view/element~Element#_insertChild\n     * @param index Offset at which nodes should be inserted.\n     * @param items Items to be inserted.\n     * @param element Element to which items will be inserted.\n     * @returns Number of inserted nodes.\n     */\n    insertChild(index, items, element) {\n        return element._insertChild(index, items);\n    }\n    /**\n     * Removes the given number of child nodes starting at the given index and set the parent of these nodes to `null`.\n     *\n     * @see module:engine/view/element~Element#_removeChildren\n     * @param index Offset from which nodes will be removed.\n     * @param howMany Number of nodes to remove.\n     * @param element Element which children will be removed.\n     * @returns The array containing removed nodes.\n     */\n    removeChildren(index, howMany, element) {\n        return element._removeChildren(index, howMany);\n    }\n    /**\n     * Removes given element from the view structure. Will not have effect on detached elements.\n     *\n     * @param element Element which will be removed.\n     * @returns The array containing removed nodes.\n     */\n    remove(element) {\n        const parent = element.parent;\n        if (parent) {\n            return this.removeChildren(parent.getChildIndex(element), 1, parent);\n        }\n        return [];\n    }\n    /**\n     * Replaces given element with the new one in the view structure. Will not have effect on detached elements.\n     *\n     * @param oldElement Element which will be replaced.\n     * @param newElement Element which will be inserted in the place of the old element.\n     * @returns Whether old element was successfully replaced.\n     */\n    replace(oldElement, newElement) {\n        const parent = oldElement.parent;\n        if (parent) {\n            const index = parent.getChildIndex(oldElement);\n            this.removeChildren(index, 1, parent);\n            this.insertChild(index, newElement, parent);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Removes given element from view structure and places its children in its position.\n     * It does nothing if element has no parent.\n     *\n     * @param element Element to unwrap.\n     */\n    unwrapElement(element) {\n        const parent = element.parent;\n        if (parent) {\n            const index = parent.getChildIndex(element);\n            this.remove(element);\n            this.insertChild(index, element.getChildren(), parent);\n        }\n    }\n    /**\n     * Renames element by creating a copy of a given element but with its name changed and then moving contents of the\n     * old element to the new one.\n     *\n     * Since this function creates a new element and removes the given one, the new element is returned to keep reference.\n     *\n     * @param newName New element name.\n     * @param  element Element to be renamed.\n     * @returns New element or null if the old element was not replaced (happens for detached elements).\n     */\n    rename(newName, element) {\n        const newElement = new Element(this.document, newName, element.getAttributes(), element.getChildren());\n        return this.replace(element, newElement) ? newElement : null;\n    }\n    /**\n     * Adds or overwrites element's attribute with a specified key and value.\n     *\n     * ```ts\n     * writer.setAttribute( 'href', 'http://ckeditor.com', linkElement );\n     * ```\n     *\n     * @see module:engine/view/element~Element#_setAttribute\n     * @param key Attribute key.\n     * @param value Attribute value.\n     * @param element Element for which attribute will be set.\n     */\n    setAttribute(key, value, element) {\n        element._setAttribute(key, value);\n    }\n    /**\n     * Removes attribute from the element.\n     *\n     * ```ts\n     * writer.removeAttribute( 'href', linkElement );\n     * ```\n     *\n     * @see module:engine/view/element~Element#_removeAttribute\n     * @param key Attribute key.\n     * @param element Element from which attribute will be removed.\n     */\n    removeAttribute(key, element) {\n        element._removeAttribute(key);\n    }\n    /**\n     * Adds specified class to the element.\n     *\n     * ```ts\n     * writer.addClass( 'foo', linkElement );\n     * writer.addClass( [ 'foo', 'bar' ], linkElement );\n     * ```\n     *\n     * @see module:engine/view/element~Element#_addClass\n     * @param className Single class name or array of class names which will be added.\n     * @param element Element for which class will be added.\n     */\n    addClass(className, element) {\n        element._addClass(className);\n    }\n    /**\n     * Removes specified class from the element.\n     *\n     * ```ts\n     * writer.removeClass( 'foo', linkElement );\n     * writer.removeClass( [ 'foo', 'bar' ], linkElement );\n     * ```\n     *\n     * @see module:engine/view/element~Element#_removeClass\n     * @param className Single class name or array of class names which will be removed.\n     * @param element Element from which class will be removed.\n     */\n    removeClass(className, element) {\n        element._removeClass(className);\n    }\n    setStyle(property, valueOrElement, element) {\n        if (isPlainObject(property) && element === undefined) {\n            valueOrElement._setStyle(property);\n        }\n        else {\n            element._setStyle(property, valueOrElement);\n        }\n    }\n    /**\n     * Removes specified style from the element.\n     *\n     * ```ts\n     * writer.removeStyle( 'color', element );  // Removes 'color' style.\n     * writer.removeStyle( [ 'color', 'border-top' ], element ); // Removes both 'color' and 'border-top' styles.\n     * ```\n     *\n     * **Note**: This method can work with normalized style names if\n     * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n     * See {@link module:engine/view/stylesmap~StylesMap#remove `StylesMap#remove()`} for details.\n     *\n     * @see module:engine/view/element~Element#_removeStyle\n     * @param property Style property name or names to be removed.\n     * @param element Element from which style will be removed.\n     */\n    removeStyle(property, element) {\n        element._removeStyle(property);\n    }\n    /**\n     * Sets a custom property on element. Unlike attributes, custom properties are not rendered to the DOM,\n     * so they can be used to add special data to elements.\n     *\n     * @see module:engine/view/element~Element#_setCustomProperty\n     * @param key Custom property name/key.\n     * @param value Custom property value to be stored.\n     * @param element Element for which custom property will be set.\n     */\n    setCustomProperty(key, value, element) {\n        element._setCustomProperty(key, value);\n    }\n    /**\n     * Removes a custom property stored under the given key.\n     *\n     * @see module:engine/view/element~Element#_removeCustomProperty\n     * @param key Name/key of the custom property to be removed.\n     * @param element Element from which the custom property will be removed.\n     * @returns Returns true if property was removed.\n     */\n    removeCustomProperty(key, element) {\n        return element._removeCustomProperty(key);\n    }\n    /**\n     * Creates position at the given location. The location can be specified as:\n     *\n     * * a {@link module:engine/view/position~Position position},\n     * * parent element and offset (offset defaults to `0`),\n     * * parent element and `'end'` (sets position at the end of that element),\n     * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n     *\n     * This method is a shortcut to other constructors such as:\n     *\n     * * {@link #createPositionBefore},\n     * * {@link #createPositionAfter},\n     *\n     * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n     */\n    createPositionAt(itemOrPosition, offset) {\n        return Position._createAt(itemOrPosition, offset);\n    }\n    /**\n     * Creates a new position after given view item.\n     *\n     * @param item View item after which the position should be located.\n     */\n    createPositionAfter(item) {\n        return Position._createAfter(item);\n    }\n    /**\n     * Creates a new position before given view item.\n     *\n     * @param item View item before which the position should be located.\n     */\n    createPositionBefore(item) {\n        return Position._createBefore(item);\n    }\n    /**\n     * Creates a range spanning from `start` position to `end` position.\n     *\n     * **Note:** This factory method creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n     *\n     * @param start Start position.\n     * @param end End position. If not set, range will be collapsed at `start` position.\n     */\n    createRange(start, end) {\n        return new Range(start, end);\n    }\n    /**\n     * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n     */\n    createRangeOn(item) {\n        return Range._createOn(item);\n    }\n    /**\n     * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n     * that element and ends after the last child of that element.\n     *\n     * @param element Element which is a parent for the range.\n     */\n    createRangeIn(element) {\n        return Range._createIn(element);\n    }\n    createSelection(...args) {\n        return new Selection(...args);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nconst HEX_COLOR_REGEXP = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst RGB_COLOR_REGEXP = /^rgb\\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\\)$/i;\nconst RGBA_COLOR_REGEXP = /^rgba\\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\\.?[0-9]+)\\)$/i;\nconst HSL_COLOR_REGEXP = /^hsl\\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\\.?[0-9]+)?\\)$/i;\nconst HSLA_COLOR_REGEXP = /^hsla\\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\\.?[0-9]+)\\)$/i;\n// Note: This regexp hardcodes a single level of nested () for values such as `calc( var( ...) + ...)`.\n// If this gets more complex, a proper parser should be used instead.\nconst CSS_SHORTHAND_VALUE_REGEXP = /\\w+\\((?:[^()]|\\([^()]*\\))*\\)|\\S+/gi;\nconst COLOR_NAMES = new Set([\n    // CSS Level 1\n    'black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia',\n    'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua',\n    // CSS Level 2 (Revision 1)\n    'orange',\n    // CSS Color Module Level 3\n    'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown',\n    'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan',\n    'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta',\n    'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue',\n    'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey',\n    'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod',\n    'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush',\n    'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray',\n    'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray',\n    'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine',\n    'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen',\n    'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite',\n    'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred',\n    'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon',\n    'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow',\n    'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen',\n    // CSS Color Module Level 3 (System Colors)\n    'activeborder', 'activecaption', 'appworkspace', 'background', 'buttonface', 'buttonhighlight', 'buttonshadow',\n    'buttontext', 'captiontext', 'graytext', 'highlight', 'highlighttext', 'inactiveborder', 'inactivecaption',\n    'inactivecaptiontext', 'infobackground', 'infotext', 'menu', 'menutext', 'scrollbar', 'threeddarkshadow',\n    'threedface', 'threedhighlight', 'threedlightshadow', 'threedshadow', 'window', 'windowframe', 'windowtext',\n    // CSS Color Module Level 4\n    'rebeccapurple',\n    // Keywords\n    'currentcolor', 'transparent'\n]);\n/**\n * Checks if string contains [color](https://developer.mozilla.org/en-US/docs/Web/CSS/color) CSS value.\n *\n * ```ts\n * isColor( '#f00' );\t\t\t\t\t\t// true\n * isColor( '#AA00BB33' );\t\t\t\t\t// true\n * isColor( 'rgb(0, 0, 250)' );\t\t\t\t// true\n * isColor( 'hsla(240, 100%, 50%, .7)' );\t// true\n * isColor( 'deepskyblue' );\t\t\t\t// true\n * ```\n *\n * **Note**: It does not support CSS Level 4 whitespace syntax, system colors and radius values for HSL colors.\n */\nexport function isColor(string) {\n    // As far as I was able to test checking some pre-conditions is faster than joining each test with ||.\n    if (string.startsWith('#')) {\n        return HEX_COLOR_REGEXP.test(string);\n    }\n    if (string.startsWith('rgb')) {\n        return RGB_COLOR_REGEXP.test(string) || RGBA_COLOR_REGEXP.test(string);\n    }\n    if (string.startsWith('hsl')) {\n        return HSL_COLOR_REGEXP.test(string) || HSLA_COLOR_REGEXP.test(string);\n    }\n    // Array check > RegExp test.\n    return COLOR_NAMES.has(string.toLowerCase());\n}\nconst lineStyleValues = ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset'];\n/**\n * Checks if string contains [line style](https://developer.mozilla.org/en-US/docs/Web/CSS/border-style) CSS value.\n */\nexport function isLineStyle(string) {\n    return lineStyleValues.includes(string);\n}\nconst lengthRegExp = /^([+-]?[0-9]*([.][0-9]+)?(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/;\n/**\n * Checks if string contains [length](https://developer.mozilla.org/en-US/docs/Web/CSS/length) CSS value.\n */\nexport function isLength(string) {\n    return lengthRegExp.test(string);\n}\nconst PERCENTAGE_VALUE_REGEXP = /^[+-]?[0-9]*([.][0-9]+)?%$/;\n/**\n * Checks if string contains [percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/percentage) CSS value.\n */\nexport function isPercentage(string) {\n    return PERCENTAGE_VALUE_REGEXP.test(string);\n}\nconst repeatValues = ['repeat-x', 'repeat-y', 'repeat', 'space', 'round', 'no-repeat'];\n/**\n * Checks if string contains [background repeat](https://developer.mozilla.org/en-US/docs/Web/CSS/background-repeat) CSS value.\n */\nexport function isRepeat(string) {\n    return repeatValues.includes(string);\n}\nconst positionValues = ['center', 'top', 'bottom', 'left', 'right'];\n/**\n * Checks if string contains [background position](https://developer.mozilla.org/en-US/docs/Web/CSS/background-position) CSS value.\n */\nexport function isPosition(string) {\n    return positionValues.includes(string);\n}\nconst attachmentValues = ['fixed', 'scroll', 'local'];\n/**\n * Checks if string contains [background attachment](https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment) CSS value.\n */\nexport function isAttachment(string) {\n    return attachmentValues.includes(string);\n}\nconst urlRegExp = /^url\\(/;\n/**\n * Checks if string contains [URL](https://developer.mozilla.org/en-US/docs/Web/CSS/url) CSS value.\n */\nexport function isURL(string) {\n    return urlRegExp.test(string);\n}\n/**\n * Parses box sides as individual values.\n */\nexport function getBoxSidesValues(value = '') {\n    if (value === '') {\n        return { top: undefined, right: undefined, bottom: undefined, left: undefined };\n    }\n    const values = getShorthandValues(value);\n    const top = values[0];\n    const bottom = values[2] || top;\n    const right = values[1] || top;\n    const left = values[3] || right;\n    return { top, bottom, right, left };\n}\n/**\n * Default reducer for CSS properties that concerns edges of a box\n * [shorthand](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties) notations:\n *\n * ```ts\n * stylesProcessor.setReducer( 'padding', getBoxSidesValueReducer( 'padding' ) );\n * ```\n */\nexport function getBoxSidesValueReducer(styleShorthand) {\n    return (value) => {\n        const { top, right, bottom, left } = value;\n        const reduced = [];\n        if (![top, right, left, bottom].every(value => !!value)) {\n            if (top) {\n                reduced.push([styleShorthand + '-top', top]);\n            }\n            if (right) {\n                reduced.push([styleShorthand + '-right', right]);\n            }\n            if (bottom) {\n                reduced.push([styleShorthand + '-bottom', bottom]);\n            }\n            if (left) {\n                reduced.push([styleShorthand + '-left', left]);\n            }\n        }\n        else {\n            reduced.push([styleShorthand, getBoxSidesShorthandValue(value)]);\n        }\n        return reduced;\n    };\n}\n/**\n * Returns a [shorthand](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties) notation\n * of a CSS property value.\n *\n * ```ts\n * getBoxSidesShorthandValue( { top: '1px', right: '1px', bottom: '2px', left: '1px' } );\n * // will return '1px 1px 2px'\n * ```\n */\nexport function getBoxSidesShorthandValue({ top, right, bottom, left }) {\n    const out = [];\n    if (left !== right) {\n        out.push(top, right, bottom, left);\n    }\n    else if (bottom !== top) {\n        out.push(top, right, bottom);\n    }\n    else if (right !== top) {\n        out.push(top, right);\n    }\n    else {\n        out.push(top);\n    }\n    return out.join(' ');\n}\n/**\n * Creates a normalizer for a [shorthand](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties) 1-to-4 value.\n *\n * ```ts\n * stylesProcessor.setNormalizer( 'margin', getPositionShorthandNormalizer( 'margin' ) );\n * ```\n */\nexport function getPositionShorthandNormalizer(shorthand) {\n    return (value) => {\n        return {\n            path: shorthand,\n            value: getBoxSidesValues(value)\n        };\n    };\n}\n/**\n * Parses parts of a 1-to-4 value notation - handles some CSS values with spaces (like RGB()).\n *\n * ```ts\n * getShorthandValues( 'red blue RGB(0, 0, 0)');\n * // will return [ 'red', 'blue', 'RGB(0, 0, 0)' ]\n * ```\n */\nexport function getShorthandValues(string) {\n    const matches = string.trim().slice(0, 1500).matchAll(CSS_SHORTHAND_VALUE_REGEXP);\n    return Array.from(matches).map(i => i[0]);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { getShorthandValues, isAttachment, isColor, isPosition, isRepeat, isURL } from './utils.js';\n/**\n * Adds a background CSS styles processing rules.\n *\n * ```ts\n * editor.data.addStyleProcessorRules( addBackgroundRules );\n * ```\n *\n * The normalized value is stored as:\n *\n * ```ts\n * const styles = {\n * \tbackground: {\n * \t\tcolor,\n * \t\trepeat,\n * \t\tposition,\n * \t\tattachment,\n * \t\timage\n * \t}\n * };\n * ````\n *\n * **Note**: Currently only `'background-color'` longhand value is parsed besides `'background'` shorthand. The reducer also supports only\n * `'background-color'` value.\n */\nexport function addBackgroundRules(stylesProcessor) {\n    stylesProcessor.setNormalizer('background', getBackgroundNormalizer());\n    stylesProcessor.setNormalizer('background-color', getBackgroundColorNormalizer());\n    stylesProcessor.setReducer('background', getBackgroundReducer());\n    stylesProcessor.setStyleRelation('background', ['background-color']);\n}\nfunction getBackgroundNormalizer() {\n    return value => {\n        const background = {};\n        const parts = getShorthandValues(value);\n        for (const part of parts) {\n            if (isRepeat(part)) {\n                background.repeat = background.repeat || [];\n                background.repeat.push(part);\n            }\n            else if (isPosition(part)) {\n                background.position = background.position || [];\n                background.position.push(part);\n            }\n            else if (isAttachment(part)) {\n                background.attachment = part;\n            }\n            else if (isColor(part)) {\n                background.color = part;\n            }\n            else if (isURL(part)) {\n                background.image = part;\n            }\n        }\n        return {\n            path: 'background',\n            value: background\n        };\n    };\n}\nfunction getBackgroundColorNormalizer() {\n    return value => ({ path: 'background.color', value });\n}\nfunction getBackgroundReducer() {\n    return value => {\n        const ret = [];\n        ret.push(['background-color', value.color]);\n        return ret;\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { getShorthandValues, getBoxSidesValueReducer, getBoxSidesValues, isLength, isLineStyle } from './utils.js';\n/**\n * Adds a border CSS styles processing rules.\n *\n * ```ts\n * editor.data.addStyleProcessorRules( addBorderRules );\n * ```\n *\n * This rules merges all [border](https://developer.mozilla.org/en-US/docs/Web/CSS/border) styles notation shorthands:\n *\n * - border\n * - border-top\n * - border-right\n * - border-bottom\n * - border-left\n * - border-color\n * - border-style\n * - border-width\n *\n * and all corresponding longhand forms (like `border-top-color`, `border-top-style`, etc).\n *\n * It does not handle other shorthands (like `border-radius` or `border-image`).\n *\n * The normalized model stores border values as:\n *\n * ```ts\n * const styles = {\n * \tborder: {\n * \t\tcolor: { top, right, bottom, left },\n * \t\tstyle: { top, right, bottom, left },\n * \t\twidth: { top, right, bottom, left },\n * \t}\n * };\n * ```\n */\nexport function addBorderRules(stylesProcessor) {\n    stylesProcessor.setNormalizer('border', getBorderNormalizer());\n    // Border-position shorthands.\n    stylesProcessor.setNormalizer('border-top', getBorderPositionNormalizer('top'));\n    stylesProcessor.setNormalizer('border-right', getBorderPositionNormalizer('right'));\n    stylesProcessor.setNormalizer('border-bottom', getBorderPositionNormalizer('bottom'));\n    stylesProcessor.setNormalizer('border-left', getBorderPositionNormalizer('left'));\n    // Border-property shorthands.\n    stylesProcessor.setNormalizer('border-color', getBorderPropertyNormalizer('color'));\n    stylesProcessor.setNormalizer('border-width', getBorderPropertyNormalizer('width'));\n    stylesProcessor.setNormalizer('border-style', getBorderPropertyNormalizer('style'));\n    // Border longhands.\n    stylesProcessor.setNormalizer('border-top-color', getBorderPropertyPositionNormalizer('color', 'top'));\n    stylesProcessor.setNormalizer('border-top-style', getBorderPropertyPositionNormalizer('style', 'top'));\n    stylesProcessor.setNormalizer('border-top-width', getBorderPropertyPositionNormalizer('width', 'top'));\n    stylesProcessor.setNormalizer('border-right-color', getBorderPropertyPositionNormalizer('color', 'right'));\n    stylesProcessor.setNormalizer('border-right-style', getBorderPropertyPositionNormalizer('style', 'right'));\n    stylesProcessor.setNormalizer('border-right-width', getBorderPropertyPositionNormalizer('width', 'right'));\n    stylesProcessor.setNormalizer('border-bottom-color', getBorderPropertyPositionNormalizer('color', 'bottom'));\n    stylesProcessor.setNormalizer('border-bottom-style', getBorderPropertyPositionNormalizer('style', 'bottom'));\n    stylesProcessor.setNormalizer('border-bottom-width', getBorderPropertyPositionNormalizer('width', 'bottom'));\n    stylesProcessor.setNormalizer('border-left-color', getBorderPropertyPositionNormalizer('color', 'left'));\n    stylesProcessor.setNormalizer('border-left-style', getBorderPropertyPositionNormalizer('style', 'left'));\n    stylesProcessor.setNormalizer('border-left-width', getBorderPropertyPositionNormalizer('width', 'left'));\n    stylesProcessor.setExtractor('border-top', getBorderPositionExtractor('top'));\n    stylesProcessor.setExtractor('border-right', getBorderPositionExtractor('right'));\n    stylesProcessor.setExtractor('border-bottom', getBorderPositionExtractor('bottom'));\n    stylesProcessor.setExtractor('border-left', getBorderPositionExtractor('left'));\n    stylesProcessor.setExtractor('border-top-color', 'border.color.top');\n    stylesProcessor.setExtractor('border-right-color', 'border.color.right');\n    stylesProcessor.setExtractor('border-bottom-color', 'border.color.bottom');\n    stylesProcessor.setExtractor('border-left-color', 'border.color.left');\n    stylesProcessor.setExtractor('border-top-width', 'border.width.top');\n    stylesProcessor.setExtractor('border-right-width', 'border.width.right');\n    stylesProcessor.setExtractor('border-bottom-width', 'border.width.bottom');\n    stylesProcessor.setExtractor('border-left-width', 'border.width.left');\n    stylesProcessor.setExtractor('border-top-style', 'border.style.top');\n    stylesProcessor.setExtractor('border-right-style', 'border.style.right');\n    stylesProcessor.setExtractor('border-bottom-style', 'border.style.bottom');\n    stylesProcessor.setExtractor('border-left-style', 'border.style.left');\n    stylesProcessor.setReducer('border-color', getBoxSidesValueReducer('border-color'));\n    stylesProcessor.setReducer('border-style', getBoxSidesValueReducer('border-style'));\n    stylesProcessor.setReducer('border-width', getBoxSidesValueReducer('border-width'));\n    stylesProcessor.setReducer('border-top', getBorderPositionReducer('top'));\n    stylesProcessor.setReducer('border-right', getBorderPositionReducer('right'));\n    stylesProcessor.setReducer('border-bottom', getBorderPositionReducer('bottom'));\n    stylesProcessor.setReducer('border-left', getBorderPositionReducer('left'));\n    stylesProcessor.setReducer('border', getBorderReducer());\n    stylesProcessor.setStyleRelation('border', [\n        'border-color', 'border-style', 'border-width',\n        'border-top', 'border-right', 'border-bottom', 'border-left',\n        'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color',\n        'border-top-style', 'border-right-style', 'border-bottom-style', 'border-left-style',\n        'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width'\n    ]);\n    stylesProcessor.setStyleRelation('border-color', [\n        'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color'\n    ]);\n    stylesProcessor.setStyleRelation('border-style', [\n        'border-top-style', 'border-right-style', 'border-bottom-style', 'border-left-style'\n    ]);\n    stylesProcessor.setStyleRelation('border-width', [\n        'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width'\n    ]);\n    stylesProcessor.setStyleRelation('border-top', ['border-top-color', 'border-top-style', 'border-top-width']);\n    stylesProcessor.setStyleRelation('border-right', ['border-right-color', 'border-right-style', 'border-right-width']);\n    stylesProcessor.setStyleRelation('border-bottom', ['border-bottom-color', 'border-bottom-style', 'border-bottom-width']);\n    stylesProcessor.setStyleRelation('border-left', ['border-left-color', 'border-left-style', 'border-left-width']);\n}\nfunction getBorderNormalizer() {\n    return value => {\n        const { color, style, width } = normalizeBorderShorthand(value);\n        return {\n            path: 'border',\n            value: {\n                color: getBoxSidesValues(color),\n                style: getBoxSidesValues(style),\n                width: getBoxSidesValues(width)\n            }\n        };\n    };\n}\nfunction getBorderPositionNormalizer(side) {\n    return value => {\n        const { color, style, width } = normalizeBorderShorthand(value);\n        const border = {};\n        if (color !== undefined) {\n            border.color = { [side]: color };\n        }\n        if (style !== undefined) {\n            border.style = { [side]: style };\n        }\n        if (width !== undefined) {\n            border.width = { [side]: width };\n        }\n        return {\n            path: 'border',\n            value: border\n        };\n    };\n}\nfunction getBorderPropertyNormalizer(propertyName) {\n    return value => {\n        return {\n            path: 'border',\n            value: toBorderPropertyShorthand(value, propertyName)\n        };\n    };\n}\nfunction toBorderPropertyShorthand(value, property) {\n    return {\n        [property]: getBoxSidesValues(value)\n    };\n}\nfunction getBorderPropertyPositionNormalizer(property, side) {\n    return value => {\n        return {\n            path: 'border',\n            value: {\n                [property]: {\n                    [side]: value\n                }\n            }\n        };\n    };\n}\nfunction getBorderPositionExtractor(which) {\n    return (name, styles) => {\n        if (styles.border) {\n            return extractBorderPosition(styles.border, which);\n        }\n    };\n}\nfunction extractBorderPosition(border, which) {\n    const value = {};\n    if (border.width && border.width[which]) {\n        value.width = border.width[which];\n    }\n    if (border.style && border.style[which]) {\n        value.style = border.style[which];\n    }\n    if (border.color && border.color[which]) {\n        value.color = border.color[which];\n    }\n    return value;\n}\nfunction normalizeBorderShorthand(string) {\n    const result = {};\n    const parts = getShorthandValues(string);\n    for (const part of parts) {\n        if (isLength(part) || /thin|medium|thick/.test(part)) {\n            result.width = part;\n        }\n        else if (isLineStyle(part)) {\n            result.style = part;\n        }\n        else {\n            result.color = part;\n        }\n    }\n    return result;\n}\n/**\n * The border reducer factory.\n *\n * It tries to produce the most optimal output for the specified styles.\n *\n * For a border style:\n *\n * ```css\n * style: {top: \"solid\", bottom: \"solid\", right: \"solid\", left: \"solid\"}\n * ```\n *\n * It will produce: `border-style: solid`.\n * For a border style and color:\n *\n * ```css\n * color: {top: \"#ff0\", bottom: \"#ff0\", right: \"#ff0\", left: \"#ff0\"}\n * style: {top: \"solid\", bottom: \"solid\", right: \"solid\", left: \"solid\"}\n * ```\n *\n * It will produce: `border-color: #ff0; border-style: solid`.\n * If all border parameters are specified:\n *\n * ```css\n * color: {top: \"#ff0\", bottom: \"#ff0\", right: \"#ff0\", left: \"#ff0\"}\n * style: {top: \"solid\", bottom: \"solid\", right: \"solid\", left: \"solid\"}\n * width: {top: \"2px\", bottom: \"2px\", right: \"2px\", left: \"2px\"}\n * ```\n *\n * It will combine everything into a single property: `border: 2px solid #ff0`.\n *\n * The definitions are merged only if all border selectors have the same values.\n */\nfunction getBorderReducer() {\n    return value => {\n        const topStyles = extractBorderPosition(value, 'top');\n        const rightStyles = extractBorderPosition(value, 'right');\n        const bottomStyles = extractBorderPosition(value, 'bottom');\n        const leftStyles = extractBorderPosition(value, 'left');\n        const borderStyles = [topStyles, rightStyles, bottomStyles, leftStyles];\n        const borderStylesByType = {\n            width: getReducedStyleValueForType(borderStyles, 'width'),\n            style: getReducedStyleValueForType(borderStyles, 'style'),\n            color: getReducedStyleValueForType(borderStyles, 'color')\n        };\n        // Try reducing to a single `border:` property.\n        const reducedBorderStyle = reduceBorderPosition(borderStylesByType, 'all');\n        if (reducedBorderStyle.length) {\n            return reducedBorderStyle;\n        }\n        // Try reducing to `border-style:`, `border-width:`, `border-color:` properties.\n        const reducedStyleTypes = Object.entries(borderStylesByType).reduce((reducedStyleTypes, [type, value]) => {\n            if (value) {\n                reducedStyleTypes.push([`border-${type}`, value]);\n                // Remove it from the full set to not include it in the most specific properties later.\n                borderStyles.forEach(style => delete style[type]);\n            }\n            return reducedStyleTypes;\n        }, []);\n        // The reduced properties (by type) and all that remains that could not be reduced.\n        return [\n            ...reducedStyleTypes,\n            ...reduceBorderPosition(topStyles, 'top'),\n            ...reduceBorderPosition(rightStyles, 'right'),\n            ...reduceBorderPosition(bottomStyles, 'bottom'),\n            ...reduceBorderPosition(leftStyles, 'left')\n        ];\n    };\n    /**\n     * @param styles The array of objects with `style`, `color`, `width` properties.\n     */\n    function getReducedStyleValueForType(styles, type) {\n        return styles\n            .map(style => style[type])\n            .reduce((result, style) => result == style ? result : null);\n    }\n}\nfunction getBorderPositionReducer(which) {\n    return value => reduceBorderPosition(value, which);\n}\n/**\n * Returns an array with reduced border styles depending on the specified values.\n *\n * If all border properties (width, style, color) are specified, the returned selector will be\n * merged into a group: `border-*: [width] [style] [color]`.\n *\n * Otherwise, the specific definitions will be returned: `border-(width|style|color)-*: [value]`.\n *\n * @param value Styles if defined.\n * @param which The border position.\n */\nfunction reduceBorderPosition(value, which) {\n    const borderTypes = [];\n    if (value && (value.width)) {\n        borderTypes.push('width');\n    }\n    if (value && (value.style)) {\n        borderTypes.push('style');\n    }\n    if (value && (value.color)) {\n        borderTypes.push('color');\n    }\n    if (borderTypes.length == 3) {\n        const borderValue = borderTypes.map(item => value[item]).join(' ');\n        return [\n            which == 'all' ? ['border', borderValue] : [`border-${which}`, borderValue]\n        ];\n    }\n    // We are unable to reduce to a single `border:` property.\n    if (which == 'all') {\n        return [];\n    }\n    return borderTypes.map(type => {\n        return [`border-${which}-${type}`, value[type]];\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { getPositionShorthandNormalizer, getBoxSidesValueReducer } from './utils.js';\n/**\n * Adds a margin CSS styles processing rules.\n *\n * ```ts\n * editor.data.addStyleProcessorRules( addMarginRules );\n * ```\n *\n * The normalized value is stored as:\n *\n * ```ts\n * const styles = {\n * \tmargin: {\n * \t\ttop,\n * \t\tright,\n * \t\tbottom,\n * \t\tleft\n * \t}\n * };\n * ```\n */\nexport function addMarginRules(stylesProcessor) {\n    stylesProcessor.setNormalizer('margin', getPositionShorthandNormalizer('margin'));\n    stylesProcessor.setNormalizer('margin-top', value => ({ path: 'margin.top', value }));\n    stylesProcessor.setNormalizer('margin-right', value => ({ path: 'margin.right', value }));\n    stylesProcessor.setNormalizer('margin-bottom', value => ({ path: 'margin.bottom', value }));\n    stylesProcessor.setNormalizer('margin-left', value => ({ path: 'margin.left', value }));\n    stylesProcessor.setReducer('margin', getBoxSidesValueReducer('margin'));\n    stylesProcessor.setStyleRelation('margin', ['margin-top', 'margin-right', 'margin-bottom', 'margin-left']);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { getPositionShorthandNormalizer, getBoxSidesValueReducer } from './utils.js';\n/**\n * Adds a padding CSS styles processing rules.\n *\n * ```ts\n * editor.data.addStyleProcessorRules( addPaddingRules );\n * ```\n *\n * The normalized value is stored as:\n *\n * ```ts\n * const styles = {\n * \tpadding: {\n * \t\ttop,\n * \t\tright,\n * \t\tbottom,\n * \t\tleft\n * \t}\n * };\n * ```\n */\nexport function addPaddingRules(stylesProcessor) {\n    stylesProcessor.setNormalizer('padding', getPositionShorthandNormalizer('padding'));\n    stylesProcessor.setNormalizer('padding-top', value => ({ path: 'padding.top', value }));\n    stylesProcessor.setNormalizer('padding-right', value => ({ path: 'padding.right', value }));\n    stylesProcessor.setNormalizer('padding-bottom', value => ({ path: 'padding.bottom', value }));\n    stylesProcessor.setNormalizer('padding-left', value => ({ path: 'padding.left', value }));\n    stylesProcessor.setReducer('padding', getBoxSidesValueReducer('padding'));\n    stylesProcessor.setStyleRelation('padding', ['padding-top', 'padding-right', 'padding-bottom', 'padding-left']);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * An abstract watchdog class that handles most of the error handling process and the state of the underlying component.\n *\n * See the {@glink features/watchdog Watchdog feature guide} to learn the rationale behind it and how to use it.\n *\n * @internal\n */\nexport default class Watchdog {\n    /**\n     * @param {module:watchdog/watchdog~WatchdogConfig} config The watchdog plugin configuration.\n     */\n    constructor(config) {\n        /**\n         * An array of crashes saved as an object with the following properties:\n         *\n         * * `message`: `String`,\n         * * `stack`: `String`,\n         * * `date`: `Number`,\n         * * `filename`: `String | undefined`,\n         * * `lineno`: `Number | undefined`,\n         * * `colno`: `Number | undefined`,\n         */\n        this.crashes = [];\n        /**\n         * Specifies the state of the item watched by the watchdog. The state can be one of the following values:\n         *\n         * * `initializing` &ndash; Before the first initialization, and after crashes, before the item is ready.\n         * * `ready` &ndash; A state when the user can interact with the item.\n         * * `crashed` &ndash; A state when an error occurs. It quickly changes to `initializing` or `crashedPermanently`\n         * depending on how many and how frequent errors have been caught recently.\n         * * `crashedPermanently` &ndash; A state when the watchdog stops reacting to errors and keeps the item it is watching crashed,\n         * * `destroyed` &ndash; A state when the item is manually destroyed by the user after calling `watchdog.destroy()`.\n         */\n        this.state = 'initializing';\n        /**\n         * Returns the result of the `Date.now()` call. It can be overridden in tests to mock time as some popular\n         * approaches like `sinon.useFakeTimers()` do not work well with error handling.\n         */\n        this._now = Date.now;\n        this.crashes = [];\n        this._crashNumberLimit = typeof config.crashNumberLimit === 'number' ? config.crashNumberLimit : 3;\n        this._minimumNonErrorTimePeriod = typeof config.minimumNonErrorTimePeriod === 'number' ? config.minimumNonErrorTimePeriod : 5000;\n        this._boundErrorHandler = evt => {\n            // `evt.error` is exposed by EventError while `evt.reason` is available in PromiseRejectionEvent.\n            const error = 'error' in evt ? evt.error : evt.reason;\n            // Note that `evt.reason` might be everything that is in the promise rejection.\n            // Similarly everything that is thrown lands in `evt.error`.\n            if (error instanceof Error) {\n                this._handleError(error, evt);\n            }\n        };\n        this._listeners = {};\n        if (!this._restart) {\n            throw new Error('The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. ' +\n                'Please, use `EditorWatchdog` if you have used the `Watchdog` class previously.');\n        }\n    }\n    /**\n     * Destroys the watchdog and releases the resources.\n     */\n    destroy() {\n        this._stopErrorHandling();\n        this._listeners = {};\n    }\n    /**\n     * Starts listening to a specific event name by registering a callback that will be executed\n     * whenever an event with a given name fires.\n     *\n     * Note that this method differs from the CKEditor 5's default `EventEmitterMixin` implementation.\n     *\n     * @param eventName The event name.\n     * @param callback A callback which will be added to event listeners.\n     */\n    on(eventName, callback) {\n        if (!this._listeners[eventName]) {\n            this._listeners[eventName] = [];\n        }\n        this._listeners[eventName].push(callback);\n    }\n    /**\n     * Stops listening to the specified event name by removing the callback from event listeners.\n     *\n     * Note that this method differs from the CKEditor 5's default `EventEmitterMixin` implementation.\n     *\n     * @param eventName The event name.\n     * @param callback A callback which will be removed from event listeners.\n     */\n    off(eventName, callback) {\n        this._listeners[eventName] = this._listeners[eventName]\n            .filter(cb => cb !== callback);\n    }\n    /**\n     * Fires an event with a given event name and arguments.\n     *\n     * Note that this method differs from the CKEditor 5's default `EventEmitterMixin` implementation.\n     */\n    _fire(eventName, ...args) {\n        const callbacks = this._listeners[eventName] || [];\n        for (const callback of callbacks) {\n            callback.apply(this, [null, ...args]);\n        }\n    }\n    /**\n     * Starts error handling by attaching global error handlers.\n     */\n    _startErrorHandling() {\n        window.addEventListener('error', this._boundErrorHandler);\n        window.addEventListener('unhandledrejection', this._boundErrorHandler);\n    }\n    /**\n     * Stops error handling by detaching global error handlers.\n     */\n    _stopErrorHandling() {\n        window.removeEventListener('error', this._boundErrorHandler);\n        window.removeEventListener('unhandledrejection', this._boundErrorHandler);\n    }\n    /**\n     * Checks if an error comes from the watched item and restarts it.\n     * It reacts to {@link module:utils/ckeditorerror~CKEditorError `CKEditorError` errors} only.\n     *\n     * @fires error\n     * @param error Error.\n     * @param evt An error event.\n     */\n    _handleError(error, evt) {\n        // @if CK_DEBUG // const err = error as CKEditorError;\n        // @if CK_DEBUG // if ( err.is && err.is( 'CKEditorError' ) && err.context === undefined ) {\n        // @if CK_DEBUG // console.warn( 'The error is missing its context and Watchdog cannot restart the proper item.' );\n        // @if CK_DEBUG // }\n        if (this._shouldReactToError(error)) {\n            this.crashes.push({\n                message: error.message,\n                stack: error.stack,\n                // `evt.filename`, `evt.lineno` and `evt.colno` are available only in ErrorEvent events\n                filename: evt instanceof ErrorEvent ? evt.filename : undefined,\n                lineno: evt instanceof ErrorEvent ? evt.lineno : undefined,\n                colno: evt instanceof ErrorEvent ? evt.colno : undefined,\n                date: this._now()\n            });\n            const causesRestart = this._shouldRestart();\n            this.state = 'crashed';\n            this._fire('stateChange');\n            this._fire('error', { error, causesRestart });\n            if (causesRestart) {\n                this._restart();\n            }\n            else {\n                this.state = 'crashedPermanently';\n                this._fire('stateChange');\n            }\n        }\n    }\n    /**\n     * Checks whether an error should be handled by the watchdog.\n     *\n     * @param error An error that was caught by the error handling process.\n     */\n    _shouldReactToError(error) {\n        return (error.is &&\n            error.is('CKEditorError') &&\n            error.context !== undefined &&\n            // In some cases the watched item should not be restarted - e.g. during the item initialization.\n            // That's why the `null` was introduced as a correct error context which does cause restarting.\n            error.context !== null &&\n            // Do not react to errors if the watchdog is in states other than `ready`.\n            this.state === 'ready' &&\n            this._isErrorComingFromThisItem(error));\n    }\n    /**\n     * Checks if the watchdog should restart the underlying item.\n     */\n    _shouldRestart() {\n        if (this.crashes.length <= this._crashNumberLimit) {\n            return true;\n        }\n        const lastErrorTime = this.crashes[this.crashes.length - 1].date;\n        const firstMeaningfulErrorTime = this.crashes[this.crashes.length - 1 - this._crashNumberLimit].date;\n        const averageNonErrorTimePeriod = (lastErrorTime - firstMeaningfulErrorTime) / this._crashNumberLimit;\n        return averageNonErrorTimePeriod > this._minimumNonErrorTimePeriod;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module watchdog/utils/getsubnodes\n */\n/* globals EventTarget, Event */\nexport default function getSubNodes(head, excludedProperties = new Set()) {\n    const nodes = [head];\n    // @if CK_DEBUG_WATCHDOG // const prevNodeMap = new Map();\n    // Nodes are stored to prevent infinite looping.\n    const subNodes = new Set();\n    let nodeIndex = 0;\n    while (nodes.length > nodeIndex) {\n        // Incrementing the iterator is much faster than changing size of the array with Array.prototype.shift().\n        const node = nodes[nodeIndex++];\n        if (subNodes.has(node) || !shouldNodeBeIncluded(node) || excludedProperties.has(node)) {\n            continue;\n        }\n        subNodes.add(node);\n        // Handle arrays, maps, sets, custom collections that implements `[ Symbol.iterator ]()`, etc.\n        if (Symbol.iterator in node) {\n            // The custom editor iterators might cause some problems if the editor is crashed.\n            try {\n                for (const n of node) {\n                    nodes.push(n);\n                    // @if CK_DEBUG_WATCHDOG // if ( !prevNodeMap.has( n ) ) {\n                    // @if CK_DEBUG_WATCHDOG // \tprevNodeMap.set( n, node );\n                    // @if CK_DEBUG_WATCHDOG // }\n                }\n            }\n            catch (err) {\n                // Do not log errors for broken structures\n                // since we are in the error handling process already.\n                // eslint-disable-line no-empty\n            }\n        }\n        else {\n            for (const key in node) {\n                // We share a reference via the protobuf library within the editors,\n                // hence the shared value should be skipped. Although, it's not a perfect\n                // solution since new places like that might occur in the future.\n                if (key === 'defaultValue') {\n                    continue;\n                }\n                nodes.push(node[key]);\n                // @if CK_DEBUG_WATCHDOG // if ( !prevNodeMap.has( node[ key ] ) ) {\n                // @if CK_DEBUG_WATCHDOG // \tprevNodeMap.set( node[ key ], node );\n                // @if CK_DEBUG_WATCHDOG // }\n            }\n        }\n    }\n    // @if CK_DEBUG_WATCHDOG // return { subNodes, prevNodeMap } as any;\n    return subNodes;\n}\nfunction shouldNodeBeIncluded(node) {\n    const type = Object.prototype.toString.call(node);\n    const typeOfNode = typeof node;\n    return !(typeOfNode === 'number' ||\n        typeOfNode === 'boolean' ||\n        typeOfNode === 'string' ||\n        typeOfNode === 'symbol' ||\n        typeOfNode === 'function' ||\n        type === '[object Date]' ||\n        type === '[object RegExp]' ||\n        type === '[object Module]' ||\n        node === undefined ||\n        node === null ||\n        // This flag is meant to exclude singletons shared across editor instances. So when an error is thrown in one editor,\n        // the other editors connected through the reference to the same singleton are not restarted. This is a temporary workaround\n        // until a better solution is found.\n        // More in https://github.com/ckeditor/ckeditor5/issues/12292.\n        node._watchdogExcluded ||\n        // Skip native DOM objects, e.g. Window, nodes, events, etc.\n        node instanceof EventTarget ||\n        node instanceof Event);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module watchdog/utils/areconnectedthroughproperties\n */\n/* globals console */\nimport getSubNodes from './getsubnodes.js';\n/**\n * Traverses both structures to find out whether there is a reference that is shared between both structures.\n */\nexport default function areConnectedThroughProperties(target1, target2, excludedNodes = new Set()) {\n    if (target1 === target2 && isObject(target1)) {\n        return true;\n    }\n    // @if CK_DEBUG_WATCHDOG // return checkConnectionBetweenProps( target1, target2, excludedNodes );\n    const subNodes1 = getSubNodes(target1, excludedNodes);\n    const subNodes2 = getSubNodes(target2, excludedNodes);\n    for (const node of subNodes1) {\n        if (subNodes2.has(node)) {\n            return true;\n        }\n    }\n    return false;\n}\n/* istanbul ignore next -- @preserve */\n// eslint-disable-next-line\nfunction checkConnectionBetweenProps(target1, target2, excludedNodes) {\n    const { subNodes: subNodes1, prevNodeMap: prevNodeMap1 } = getSubNodes(target1, excludedNodes.subNodes);\n    const { subNodes: subNodes2, prevNodeMap: prevNodeMap2 } = getSubNodes(target2, excludedNodes.subNodes);\n    for (const sharedNode of subNodes1) {\n        if (subNodes2.has(sharedNode)) {\n            const connection = [];\n            connection.push(sharedNode);\n            let node = prevNodeMap1.get(sharedNode);\n            while (node && node !== target1) {\n                connection.push(node);\n                node = prevNodeMap1.get(node);\n            }\n            node = prevNodeMap2.get(sharedNode);\n            while (node && node !== target2) {\n                connection.unshift(node);\n                node = prevNodeMap2.get(node);\n            }\n            console.log('--------');\n            console.log({ target1 });\n            console.log({ sharedNode });\n            console.log({ target2 });\n            console.log({ connection });\n            return true;\n        }\n    }\n    return false;\n}\nfunction isObject(structure) {\n    return typeof structure === 'object' && structure !== null;\n}\n", "import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nexport default throttle;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport areConnectedThroughProperties from './utils/areconnectedthroughproperties.js';\nimport Watchdog from './watchdog.js';\nimport { throttle, cloneDeepWith, isElement } from 'lodash-es';\n/**\n * A watchdog for CKEditor 5 editors.\n *\n * See the {@glink features/watchdog Watchdog feature guide} to learn the rationale behind it and\n * how to use it.\n */\nexport default class EditorWatchdog extends Watchdog {\n    /**\n     * @param Editor The editor class.\n     * @param watchdogConfig The watchdog plugin configuration.\n     */\n    constructor(Editor, watchdogConfig = {}) {\n        super(watchdogConfig);\n        /**\n         * The current editor instance.\n         */\n        this._editor = null;\n        /**\n         * A promise associated with the life cycle of the editor (creation or destruction processes).\n         *\n         * It is used to prevent the initialization of the editor if the previous instance has not been destroyed yet,\n         * and conversely, to prevent the destruction of the editor if it has not been initialized.\n         */\n        this._lifecyclePromise = null;\n        /**\n         * Specifies whether the editor was initialized using document data (`true`) or HTML elements (`false`).\n         */\n        this._initUsingData = true;\n        /**\n         * The latest record of the editor editable elements. Used to restart the editor.\n         */\n        this._editables = {};\n        // this._editorClass = Editor;\n        this._throttledSave = throttle(this._save.bind(this), typeof watchdogConfig.saveInterval === 'number' ? watchdogConfig.saveInterval : 5000);\n        // Set default creator and destructor functions:\n        if (Editor) {\n            this._creator = ((elementOrData, config) => Editor.create(elementOrData, config));\n        }\n        this._destructor = editor => editor.destroy();\n    }\n    /**\n     * The current editor instance.\n     */\n    get editor() {\n        return this._editor;\n    }\n    /**\n     * @internal\n     */\n    get _item() {\n        return this._editor;\n    }\n    /**\n     * Sets the function that is responsible for the editor creation.\n     * It expects a function that should return a promise.\n     *\n     * ```ts\n     * watchdog.setCreator( ( element, config ) => ClassicEditor.create( element, config ) );\n     * ```\n     */\n    setCreator(creator) {\n        this._creator = creator;\n    }\n    /**\n     * Sets the function that is responsible for the editor destruction.\n     * Overrides the default destruction function, which destroys only the editor instance.\n     * It expects a function that should return a promise or `undefined`.\n     *\n     * ```ts\n     * watchdog.setDestructor( editor => {\n     * \t// Do something before the editor is destroyed.\n     *\n     * \treturn editor\n     * \t\t.destroy()\n     * \t\t.then( () => {\n     * \t\t\t// Do something after the editor is destroyed.\n     * \t\t} );\n     * } );\n     * ```\n     */\n    setDestructor(destructor) {\n        this._destructor = destructor;\n    }\n    /**\n     * Restarts the editor instance. This method is called whenever an editor error occurs. It fires the `restart` event and changes\n     * the state to `initializing`.\n     *\n     * @fires restart\n     */\n    _restart() {\n        return Promise.resolve()\n            .then(() => {\n            this.state = 'initializing';\n            this._fire('stateChange');\n            return this._destroy();\n        })\n            .catch(err => {\n            console.error('An error happened during the editor destroying.', err);\n        })\n            .then(() => {\n            // Pre-process some data from the original editor config.\n            // Our goal here is to make sure that the restarted editor will be reinitialized with correct set of roots.\n            // We are not interested in any data set in config or in `.create()` first parameter. It will be replaced anyway.\n            // But we need to set them correctly to make sure that proper roots are created.\n            //\n            // Since a different set of roots will be created, `lazyRoots` and `rootsAttributes` properties must be managed too.\n            // Keys are root names, values are ''. Used when the editor was initialized by setting the first parameter to document data.\n            const existingRoots = {};\n            // Keeps lazy roots. They may be different when compared to initial config if some of the roots were loaded.\n            const lazyRoots = [];\n            // Roots attributes from the old config. Will be referred when setting new attributes.\n            const oldRootsAttributes = this._config.rootsAttributes || {};\n            // New attributes to be set. Is filled only for roots that still exist in the document.\n            const rootsAttributes = {};\n            // Traverse through the roots saved when the editor crashed and set up the discussed values.\n            for (const [rootName, rootData] of Object.entries(this._data.roots)) {\n                if (rootData.isLoaded) {\n                    existingRoots[rootName] = '';\n                    rootsAttributes[rootName] = oldRootsAttributes[rootName] || {};\n                }\n                else {\n                    lazyRoots.push(rootName);\n                }\n            }\n            const updatedConfig = {\n                ...this._config,\n                extraPlugins: this._config.extraPlugins || [],\n                lazyRoots,\n                rootsAttributes,\n                _watchdogInitialData: this._data\n            };\n            // Delete `initialData` as it is not needed. Data will be set by the watchdog based on `_watchdogInitialData`.\n            // First parameter of the editor `.create()` will be used to set up initial roots.\n            delete updatedConfig.initialData;\n            updatedConfig.extraPlugins.push(EditorWatchdogInitPlugin);\n            if (this._initUsingData) {\n                return this.create(existingRoots, updatedConfig, updatedConfig.context);\n            }\n            else {\n                // Set correct editables to make sure that proper roots are created and linked with DOM elements.\n                // No need to set initial data, as it would be discarded anyway.\n                //\n                // If one element was initially set in `elementOrData`, then use that original element to restart the editor.\n                // This is for compatibility purposes with single-root editor types.\n                if (isElement(this._elementOrData)) {\n                    return this.create(this._elementOrData, updatedConfig, updatedConfig.context);\n                }\n                else {\n                    return this.create(this._editables, updatedConfig, updatedConfig.context);\n                }\n            }\n        })\n            .then(() => {\n            this._fire('restart');\n        });\n    }\n    /**\n     * Creates the editor instance and keeps it running, using the defined creator and destructor.\n     *\n     * @param elementOrData The editor source element or the editor data.\n     * @param config The editor configuration.\n     * @param context A context for the editor.\n     */\n    create(elementOrData = this._elementOrData, config = this._config, context) {\n        this._lifecyclePromise = Promise.resolve(this._lifecyclePromise)\n            .then(() => {\n            super._startErrorHandling();\n            this._elementOrData = elementOrData;\n            // Use document data in the first parameter of the editor `.create()` call only if it was used like this originally.\n            // Use document data if a string or object with strings was passed.\n            this._initUsingData = typeof elementOrData == 'string' ||\n                (Object.keys(elementOrData).length > 0 && typeof Object.values(elementOrData)[0] == 'string');\n            // Clone configuration because it might be shared within multiple watchdog instances. Otherwise,\n            // when an error occurs in one of these editors, the watchdog will restart all of them.\n            this._config = this._cloneEditorConfiguration(config) || {};\n            this._config.context = context;\n            return this._creator(elementOrData, this._config);\n        })\n            .then(editor => {\n            this._editor = editor;\n            editor.model.document.on('change:data', this._throttledSave);\n            this._lastDocumentVersion = editor.model.document.version;\n            this._data = this._getData();\n            if (!this._initUsingData) {\n                this._editables = this._getEditables();\n            }\n            this.state = 'ready';\n            this._fire('stateChange');\n        }).finally(() => {\n            this._lifecyclePromise = null;\n        });\n        return this._lifecyclePromise;\n    }\n    /**\n     * Destroys the watchdog and the current editor instance. It fires the callback\n     * registered in {@link #setDestructor `setDestructor()`} and uses it to destroy the editor instance.\n     * It also sets the state to `destroyed`.\n     */\n    destroy() {\n        this._lifecyclePromise = Promise.resolve(this._lifecyclePromise)\n            .then(() => {\n            this.state = 'destroyed';\n            this._fire('stateChange');\n            super.destroy();\n            return this._destroy();\n        }).finally(() => {\n            this._lifecyclePromise = null;\n        });\n        return this._lifecyclePromise;\n    }\n    _destroy() {\n        return Promise.resolve()\n            .then(() => {\n            this._stopErrorHandling();\n            this._throttledSave.cancel();\n            const editor = this._editor;\n            this._editor = null;\n            // Remove the `change:data` listener before destroying the editor.\n            // Incorrectly written plugins may trigger firing `change:data` events during the editor destruction phase\n            // causing the watchdog to call `editor.getData()` when some parts of editor are already destroyed.\n            editor.model.document.off('change:data', this._throttledSave);\n            return this._destructor(editor);\n        });\n    }\n    /**\n     * Saves the editor data, so it can be restored after the crash even if the data cannot be fetched at\n     * the moment of the crash.\n     */\n    _save() {\n        const version = this._editor.model.document.version;\n        try {\n            this._data = this._getData();\n            if (!this._initUsingData) {\n                this._editables = this._getEditables();\n            }\n            this._lastDocumentVersion = version;\n        }\n        catch (err) {\n            console.error(err, 'An error happened during restoring editor data. ' +\n                'Editor will be restored from the previously saved data.');\n        }\n    }\n    /**\n     * @internal\n     */\n    _setExcludedProperties(props) {\n        this._excludedProps = props;\n    }\n    /**\n     * Gets all data that is required to reinitialize editor instance.\n     */\n    _getData() {\n        const editor = this._editor;\n        const roots = editor.model.document.roots.filter(root => root.isAttached() && root.rootName != '$graveyard');\n        const { plugins } = editor;\n        // `as any` to avoid linking from external private repo.\n        const commentsRepository = plugins.has('CommentsRepository') && plugins.get('CommentsRepository');\n        const trackChanges = plugins.has('TrackChanges') && plugins.get('TrackChanges');\n        const data = {\n            roots: {},\n            markers: {},\n            commentThreads: JSON.stringify([]),\n            suggestions: JSON.stringify([])\n        };\n        roots.forEach(root => {\n            data.roots[root.rootName] = {\n                content: JSON.stringify(Array.from(root.getChildren())),\n                attributes: JSON.stringify(Array.from(root.getAttributes())),\n                isLoaded: root._isLoaded\n            };\n        });\n        for (const marker of editor.model.markers) {\n            if (!marker._affectsData) {\n                continue;\n            }\n            data.markers[marker.name] = {\n                rangeJSON: marker.getRange().toJSON(),\n                usingOperation: marker._managedUsingOperations,\n                affectsData: marker._affectsData\n            };\n        }\n        if (commentsRepository) {\n            data.commentThreads = JSON.stringify(commentsRepository.getCommentThreads({ toJSON: true, skipNotAttached: true }));\n        }\n        if (trackChanges) {\n            data.suggestions = JSON.stringify(trackChanges.getSuggestions({ toJSON: true, skipNotAttached: true }));\n        }\n        return data;\n    }\n    /**\n     * For each attached model root, returns its HTML editable element (if available).\n     */\n    _getEditables() {\n        const editables = {};\n        for (const rootName of this.editor.model.document.getRootNames()) {\n            const editable = this.editor.ui.getEditableElement(rootName);\n            if (editable) {\n                editables[rootName] = editable;\n            }\n        }\n        return editables;\n    }\n    /**\n     * Traverses the error context and the current editor to find out whether these structures are connected\n     * to each other via properties.\n     *\n     * @internal\n     */\n    _isErrorComingFromThisItem(error) {\n        return areConnectedThroughProperties(this._editor, error.context, this._excludedProps);\n    }\n    /**\n     * Clones the editor configuration.\n     */\n    _cloneEditorConfiguration(config) {\n        return cloneDeepWith(config, (value, key) => {\n            // Leave DOM references.\n            if (isElement(value)) {\n                return value;\n            }\n            if (key === 'context') {\n                return value;\n            }\n        });\n    }\n}\n/**\n * Internal plugin that is used to stop the default editor initialization and restoring the editor state\n * based on the `editor.config._watchdogInitialData` data.\n */\nclass EditorWatchdogInitPlugin {\n    constructor(editor) {\n        this.editor = editor;\n        this._data = editor.config.get('_watchdogInitialData');\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        // Stops the default editor initialization and use the saved data to restore the editor state.\n        // Some of data could not be initialize as a config properties. It is important to keep the data\n        // in the same form as it was before the restarting.\n        this.editor.data.on('init', evt => {\n            evt.stop();\n            this.editor.model.enqueueChange({ isUndoable: false }, writer => {\n                this._restoreCollaborationData();\n                this._restoreEditorData(writer);\n            });\n            this.editor.data.fire('ready');\n            // Keep priority `'high' - 1` to be sure that RTC initialization will be first.\n        }, { priority: 1000 - 1 });\n    }\n    /**\n     * Creates a model node (element or text) based on provided JSON.\n     */\n    _createNode(writer, jsonNode) {\n        if ('name' in jsonNode) {\n            // If child has name property, it is an Element.\n            const element = writer.createElement(jsonNode.name, jsonNode.attributes);\n            if (jsonNode.children) {\n                for (const child of jsonNode.children) {\n                    element._appendChild(this._createNode(writer, child));\n                }\n            }\n            return element;\n        }\n        else {\n            // Otherwise, it is a Text node.\n            return writer.createText(jsonNode.data, jsonNode.attributes);\n        }\n    }\n    /**\n     * Restores the editor by setting the document data, roots attributes and markers.\n     */\n    _restoreEditorData(writer) {\n        const editor = this.editor;\n        Object.entries(this._data.roots).forEach(([rootName, { content, attributes }]) => {\n            const parsedNodes = JSON.parse(content);\n            const parsedAttributes = JSON.parse(attributes);\n            const rootElement = editor.model.document.getRoot(rootName);\n            for (const [key, value] of parsedAttributes) {\n                writer.setAttribute(key, value, rootElement);\n            }\n            for (const child of parsedNodes) {\n                const node = this._createNode(writer, child);\n                writer.insert(node, rootElement, 'end');\n            }\n        });\n        Object.entries(this._data.markers).forEach(([markerName, markerOptions]) => {\n            const { document } = editor.model;\n            const { rangeJSON: { start, end }, ...options } = markerOptions;\n            const root = document.getRoot(start.root);\n            const startPosition = writer.createPositionFromPath(root, start.path, start.stickiness);\n            const endPosition = writer.createPositionFromPath(root, end.path, end.stickiness);\n            const range = writer.createRange(startPosition, endPosition);\n            writer.addMarker(markerName, {\n                range,\n                ...options\n            });\n        });\n    }\n    /**\n     * Restores the editor collaboration data - comment threads and suggestions.\n     */\n    _restoreCollaborationData() {\n        // `as any` to avoid linking from external private repo.\n        const parsedCommentThreads = JSON.parse(this._data.commentThreads);\n        const parsedSuggestions = JSON.parse(this._data.suggestions);\n        parsedCommentThreads.forEach(commentThreadData => {\n            const channelId = this.editor.config.get('collaboration.channelId');\n            const commentsRepository = this.editor.plugins.get('CommentsRepository');\n            if (commentsRepository.hasCommentThread(commentThreadData.threadId)) {\n                const commentThread = commentsRepository.getCommentThread(commentThreadData.threadId);\n                commentThread.remove();\n            }\n            commentsRepository.addCommentThread({ channelId, ...commentThreadData });\n        });\n        parsedSuggestions.forEach(suggestionData => {\n            const trackChangesEditing = this.editor.plugins.get('TrackChangesEditing');\n            if (trackChangesEditing.hasSuggestion(suggestionData.id)) {\n                const suggestion = trackChangesEditing.getSuggestion(suggestionData.id);\n                suggestion.attributes = suggestionData.attributes;\n            }\n            else {\n                trackChangesEditing.addSuggestionData(suggestionData);\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport Watchdog from './watchdog.js';\nimport EditorWatchdog from './editorwatchdog.js';\nimport areConnectedThroughProperties from './utils/areconnectedthroughproperties.js';\nimport getSubNodes from './utils/getsubnodes.js';\nconst mainQueueId = Symbol('MainQueueId');\n/**\n * A watchdog for the {@link module:core/context~Context} class.\n *\n * See the {@glink features/watchdog Watchdog feature guide} to learn the rationale behind it and\n * how to use it.\n */\nexport default class ContextWatchdog extends Watchdog {\n    /**\n     * The context watchdog class constructor.\n     *\n     * ```ts\n     * const watchdog = new ContextWatchdog( Context );\n     *\n     * await watchdog.create( contextConfiguration );\n     *\n     * await watchdog.add( item );\n     * ```\n     *\n     * See the {@glink features/watchdog Watchdog feature guide} to learn more how to use this feature.\n     *\n     * @param Context The {@link module:core/context~Context} class.\n     * @param watchdogConfig The watchdog configuration.\n     */\n    constructor(Context, watchdogConfig = {}) {\n        super(watchdogConfig);\n        /**\n         * A map of internal watchdogs for added items.\n         */\n        this._watchdogs = new Map();\n        /**\n         * The current context instance.\n         */\n        this._context = null;\n        /**\n         * Context properties (nodes/references) that are gathered during the initial context creation\n         * and are used to distinguish the origin of an error.\n         */\n        this._contextProps = new Set();\n        /**\n         * An action queue, which is used to handle async functions queuing.\n         */\n        this._actionQueues = new ActionQueues();\n        this._watchdogConfig = watchdogConfig;\n        // Default creator and destructor.\n        this._creator = contextConfig => Context.create(contextConfig);\n        this._destructor = context => context.destroy();\n        this._actionQueues.onEmpty(() => {\n            if (this.state === 'initializing') {\n                this.state = 'ready';\n                this._fire('stateChange');\n            }\n        });\n    }\n    /**\n     * Sets the function that is responsible for the context creation.\n     * It expects a function that should return a promise (or `undefined`).\n     *\n     * ```ts\n     * watchdog.setCreator( config => Context.create( config ) );\n     * ```\n     */\n    setCreator(creator) {\n        this._creator = creator;\n    }\n    /**\n     * Sets the function that is responsible for the context destruction.\n     * Overrides the default destruction function, which destroys only the context instance.\n     * It expects a function that should return a promise (or `undefined`).\n     *\n     * ```ts\n     * watchdog.setDestructor( context => {\n     * \t// Do something before the context is destroyed.\n     *\n     * \treturn context\n     * \t\t.destroy()\n     * \t\t.then( () => {\n     * \t\t\t// Do something after the context is destroyed.\n     * \t\t} );\n     * } );\n     * ```\n     */\n    setDestructor(destructor) {\n        this._destructor = destructor;\n    }\n    /**\n     * The context instance. Keep in mind that this property might be changed when the context watchdog restarts,\n     * so do not keep this instance internally. Always operate on the `ContextWatchdog#context` property.\n     */\n    get context() {\n        return this._context;\n    }\n    /**\n     * Initializes the context watchdog. Once it is created, the watchdog takes care about\n     * recreating the context and the provided items, and starts the error handling mechanism.\n     *\n     * ```ts\n     * await watchdog.create( {\n     * \tplugins: []\n     * } );\n     * ```\n     *\n     * @param contextConfig The context configuration. See {@link module:core/context~Context}.\n     */\n    create(contextConfig = {}) {\n        return this._actionQueues.enqueue(mainQueueId, () => {\n            this._contextConfig = contextConfig;\n            return this._create();\n        });\n    }\n    /**\n     * Returns an item instance with the given `itemId`.\n     *\n     * ```ts\n     * const editor1 = watchdog.getItem( 'editor1' );\n     * ```\n     *\n     * @param itemId The item ID.\n     * @returns The item instance or `undefined` if an item with a given ID has not been found.\n     */\n    getItem(itemId) {\n        const watchdog = this._getWatchdog(itemId);\n        return watchdog._item;\n    }\n    /**\n     * Gets the state of the given item. See {@link #state} for a list of available states.\n     *\n     * ```ts\n     * const editor1State = watchdog.getItemState( 'editor1' );\n     * ```\n     *\n     * @param itemId Item ID.\n     * @returns The state of the item.\n     */\n    getItemState(itemId) {\n        const watchdog = this._getWatchdog(itemId);\n        return watchdog.state;\n    }\n    /**\n     * Adds items to the watchdog. Once created, instances of these items will be available using the {@link #getItem} method.\n     *\n     * Items can be passed together as an array of objects:\n     *\n     * ```ts\n     * await watchdog.add( [ {\n     * \tid: 'editor1',\n     * \ttype: 'editor',\n     * \tsourceElementOrData: document.querySelector( '#editor' ),\n     * \tconfig: {\n     * \t\tplugins: [ Essentials, Paragraph, Bold, Italic ],\n     * \t\ttoolbar: [ 'bold', 'italic', 'alignment' ]\n     * \t},\n     * \tcreator: ( element, config ) => ClassicEditor.create( element, config )\n     * } ] );\n     * ```\n     *\n     * Or one by one as objects:\n     *\n     * ```ts\n     * await watchdog.add( {\n     * \tid: 'editor1',\n     * \ttype: 'editor',\n     * \tsourceElementOrData: document.querySelector( '#editor' ),\n     * \tconfig: {\n     * \t\tplugins: [ Essentials, Paragraph, Bold, Italic ],\n     * \t\ttoolbar: [ 'bold', 'italic', 'alignment' ]\n     * \t},\n     * \tcreator: ( element, config ) => ClassicEditor.create( element, config )\n     * ] );\n     * ```\n     *\n     * Then an instance can be retrieved using the {@link #getItem} method:\n     *\n     * ```ts\n     * const editor1 = watchdog.getItem( 'editor1' );\n     * ```\n     *\n     * Note that this method can be called multiple times, but for performance reasons it is better\n     * to pass all items together.\n     *\n     * @param itemConfigurationOrItemConfigurations An item configuration object or an array of item configurations.\n     */\n    add(itemConfigurationOrItemConfigurations) {\n        const itemConfigurations = toArray(itemConfigurationOrItemConfigurations);\n        return Promise.all(itemConfigurations.map(item => {\n            return this._actionQueues.enqueue(item.id, () => {\n                if (this.state === 'destroyed') {\n                    throw new Error('Cannot add items to destroyed watchdog.');\n                }\n                if (!this._context) {\n                    throw new Error('Context was not created yet. You should call the `ContextWatchdog#create()` method first.');\n                }\n                let watchdog;\n                if (this._watchdogs.has(item.id)) {\n                    throw new Error(`Item with the given id is already added: '${item.id}'.`);\n                }\n                if (item.type === 'editor') {\n                    watchdog = new EditorWatchdog(null, this._watchdogConfig);\n                    watchdog.setCreator(item.creator);\n                    watchdog._setExcludedProperties(this._contextProps);\n                    if (item.destructor) {\n                        watchdog.setDestructor(item.destructor);\n                    }\n                    this._watchdogs.set(item.id, watchdog);\n                    // Enqueue the internal watchdog errors within the main queue.\n                    // And propagate the internal `error` events as `itemError` event.\n                    watchdog.on('error', (evt, { error, causesRestart }) => {\n                        this._fire('itemError', { itemId: item.id, error });\n                        // Do not enqueue the item restart action if the item will not restart.\n                        if (!causesRestart) {\n                            return;\n                        }\n                        this._actionQueues.enqueue(item.id, () => new Promise(res => {\n                            const rethrowRestartEventOnce = () => {\n                                watchdog.off('restart', rethrowRestartEventOnce);\n                                this._fire('itemRestart', { itemId: item.id });\n                                res();\n                            };\n                            watchdog.on('restart', rethrowRestartEventOnce);\n                        }));\n                    });\n                    return watchdog.create(item.sourceElementOrData, item.config, this._context);\n                }\n                else {\n                    throw new Error(`Not supported item type: '${item.type}'.`);\n                }\n            });\n        }));\n    }\n    /**\n     * Removes and destroys item(s) with given ID(s).\n     *\n     * ```ts\n     * await watchdog.remove( 'editor1' );\n     * ```\n     *\n     * Or\n     *\n     * ```ts\n     * await watchdog.remove( [ 'editor1', 'editor2' ] );\n     * ```\n     *\n     * @param itemIdOrItemIds Item ID or an array of item IDs.\n     */\n    remove(itemIdOrItemIds) {\n        const itemIds = toArray(itemIdOrItemIds);\n        return Promise.all(itemIds.map(itemId => {\n            return this._actionQueues.enqueue(itemId, () => {\n                const watchdog = this._getWatchdog(itemId);\n                this._watchdogs.delete(itemId);\n                return watchdog.destroy();\n            });\n        }));\n    }\n    /**\n     * Destroys the context watchdog and all added items.\n     * Once the context watchdog is destroyed, new items cannot be added.\n     *\n     * ```ts\n     * await watchdog.destroy();\n     * ```\n     */\n    destroy() {\n        return this._actionQueues.enqueue(mainQueueId, () => {\n            this.state = 'destroyed';\n            this._fire('stateChange');\n            super.destroy();\n            return this._destroy();\n        });\n    }\n    /**\n     * Restarts the context watchdog.\n     */\n    _restart() {\n        return this._actionQueues.enqueue(mainQueueId, () => {\n            this.state = 'initializing';\n            this._fire('stateChange');\n            return this._destroy()\n                .catch(err => {\n                console.error('An error happened during destroying the context or items.', err);\n            })\n                .then(() => this._create())\n                .then(() => this._fire('restart'));\n        });\n    }\n    /**\n     * Initializes the context watchdog.\n     */\n    _create() {\n        return Promise.resolve()\n            .then(() => {\n            this._startErrorHandling();\n            return this._creator(this._contextConfig);\n        })\n            .then(context => {\n            this._context = context;\n            this._contextProps = getSubNodes(this._context);\n            return Promise.all(Array.from(this._watchdogs.values())\n                .map(watchdog => {\n                watchdog._setExcludedProperties(this._contextProps);\n                return watchdog.create(undefined, undefined, this._context);\n            }));\n        });\n    }\n    /**\n     * Destroys the context instance and all added items.\n     */\n    _destroy() {\n        return Promise.resolve()\n            .then(() => {\n            this._stopErrorHandling();\n            const context = this._context;\n            this._context = null;\n            this._contextProps = new Set();\n            return Promise.all(Array.from(this._watchdogs.values())\n                .map(watchdog => watchdog.destroy()))\n                // Context destructor destroys each editor.\n                .then(() => this._destructor(context));\n        });\n    }\n    /**\n     * Returns the watchdog for a given item ID.\n     *\n     * @param itemId Item ID.\n     */\n    _getWatchdog(itemId) {\n        const watchdog = this._watchdogs.get(itemId);\n        if (!watchdog) {\n            throw new Error(`Item with the given id was not registered: ${itemId}.`);\n        }\n        return watchdog;\n    }\n    /**\n     * Checks whether an error comes from the context instance and not from the item instances.\n     *\n     * @internal\n     */\n    _isErrorComingFromThisItem(error) {\n        for (const watchdog of this._watchdogs.values()) {\n            if (watchdog._isErrorComingFromThisItem(error)) {\n                return false;\n            }\n        }\n        return areConnectedThroughProperties(this._context, error.context);\n    }\n}\n/**\n * Manager of action queues that allows queuing async functions.\n */\nclass ActionQueues {\n    constructor() {\n        this._onEmptyCallbacks = [];\n        this._queues = new Map();\n        this._activeActions = 0;\n    }\n    /**\n     * Used to register callbacks that will be run when the queue becomes empty.\n     *\n     * @param onEmptyCallback A callback that will be run whenever the queue becomes empty.\n     */\n    onEmpty(onEmptyCallback) {\n        this._onEmptyCallbacks.push(onEmptyCallback);\n    }\n    /**\n     * It adds asynchronous actions (functions) to the proper queue and runs them one by one.\n     *\n     * @param queueId The action queue ID.\n     * @param action A function that should be enqueued.\n     */\n    enqueue(queueId, action) {\n        const isMainAction = queueId === mainQueueId;\n        this._activeActions++;\n        if (!this._queues.get(queueId)) {\n            this._queues.set(queueId, Promise.resolve());\n        }\n        // List all sources of actions that the current action needs to await for.\n        // For the main action wait for all other actions.\n        // For the item action wait only for the item queue and the main queue.\n        const awaitedActions = isMainAction ?\n            Promise.all(this._queues.values()) :\n            Promise.all([this._queues.get(mainQueueId), this._queues.get(queueId)]);\n        const queueWithAction = awaitedActions.then(action);\n        // Catch all errors in the main queue to stack promises even if an error occurred in the past.\n        const nonErrorQueue = queueWithAction.catch(() => { });\n        this._queues.set(queueId, nonErrorQueue);\n        return queueWithAction.finally(() => {\n            this._activeActions--;\n            if (this._queues.get(queueId) === nonErrorQueue && this._activeActions === 0) {\n                this._onEmptyCallbacks.forEach(cb => cb());\n            }\n        });\n    }\n}\n/**\n * Transforms any value to an array. If the provided value is already an array, it is returned unchanged.\n *\n * @param elementOrArray The value to transform to an array.\n * @returns An array created from data.\n */\nfunction toArray(elementOrArray) {\n    return Array.isArray(elementOrArray) ? elementOrArray : [elementOrArray];\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/commandcollection\n */\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Collection of commands. Its instance is available in {@link module:core/editor/editor~Editor#commands `editor.commands`}.\n */\nexport default class CommandCollection {\n    /**\n     * Creates collection instance.\n     */\n    constructor() {\n        this._commands = new Map();\n    }\n    /**\n     * Registers a new command.\n     *\n     * @param commandName The name of the command.\n     */\n    add(commandName, command) {\n        this._commands.set(commandName, command);\n    }\n    /**\n     * Retrieves a command from the collection.\n     *\n     * @param commandName The name of the command.\n     */\n    get(commandName) {\n        return this._commands.get(commandName);\n    }\n    /**\n     * Executes a command.\n     *\n     * @param commandName The name of the command.\n     * @param commandParams Command parameters.\n     * @returns The value returned by the {@link module:core/command~Command#execute `command.execute()`}.\n     */\n    execute(commandName, ...commandParams) {\n        const command = this.get(commandName);\n        if (!command) {\n            /**\n             * Command does not exist.\n             *\n             * @error commandcollection-command-not-found\n             * @param commandName Name of the command.\n             */\n            throw new CKEditorError('commandcollection-command-not-found', this, { commandName });\n        }\n        return command.execute(...commandParams);\n    }\n    /**\n     * Returns iterator of command names.\n     */\n    *names() {\n        yield* this._commands.keys();\n    }\n    /**\n     * Returns iterator of command instances.\n     */\n    *commands() {\n        yield* this._commands.values();\n    }\n    /**\n     * Iterable interface.\n     *\n     * Returns `[ commandName, commandInstance ]` pairs.\n     */\n    [Symbol.iterator]() {\n        return this._commands[Symbol.iterator]();\n    }\n    /**\n     * Destroys all collection commands.\n     */\n    destroy() {\n        for (const command of this.commands()) {\n            command.destroy();\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/editingkeystrokehandler\n */\nimport { KeystrokeHandler } from '@ckeditor/ckeditor5-utils';\n/**\n * A keystroke handler for editor editing. Its instance is available\n * in {@link module:core/editor/editor~Editor#keystrokes} so plugins\n * can register their keystrokes.\n *\n * E.g. an undo plugin would do this:\n *\n * ```ts\n * editor.keystrokes.set( 'Ctrl+Z', 'undo' );\n * editor.keystrokes.set( 'Ctrl+Shift+Z', 'redo' );\n * editor.keystrokes.set( 'Ctrl+Y', 'redo' );\n * ```\n */\nexport default class EditingKeystrokeHandler extends KeystrokeHandler {\n    /**\n     * Creates an instance of the keystroke handler.\n     */\n    constructor(editor) {\n        super();\n        this.editor = editor;\n    }\n    /**\n     * Registers a handler for the specified keystroke.\n     *\n     * The handler can be specified as a command name or a callback.\n     *\n     * @param keystroke Keystroke defined in a format accepted by\n     * the {@link module:utils/keyboard~parseKeystroke} function.\n     * @param callback If a string is passed, then the keystroke will\n     * {@link module:core/editor/editor~Editor#execute execute a command}.\n     * If a function, then it will be called with the\n     * {@link module:engine/view/observer/keyobserver~KeyEventData key event data} object and\n     * a `cancel()` helper to both `preventDefault()` and `stopPropagation()` of the event.\n     * @param options Additional options.\n     * @param options.priority The priority of the keystroke callback. The higher the priority value\n     * the sooner the callback will be executed. Keystrokes having the same priority\n     * are called in the order they were added.\n     */\n    set(keystroke, callback, options = {}) {\n        if (typeof callback == 'string') {\n            const commandName = callback;\n            callback = (evtData, cancel) => {\n                this.editor.execute(commandName);\n                cancel();\n            };\n        }\n        super.set(keystroke, callback, options);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/accessibility\n */\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\nconst DEFAULT_CATEGORY_ID = 'contentEditing';\nexport const DEFAULT_GROUP_ID = 'common';\n/**\n * A common namespace for various accessibility features of the editor.\n *\n * **Information about editor keystrokes**\n *\n * * The information about keystrokes available in the editor is stored in the {@link #keystrokeInfos} property.\n * * New info entries can be added using the {@link #addKeystrokeInfoCategory}, {@link #addKeystrokeInfoGroup},\n * and {@link #addKeystrokeInfos} methods.\n */\nexport default class Accessibility {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        /**\n         * Stores information about keystrokes brought by editor features for the users to interact with the editor, mainly\n         * keystroke combinations and their accessible labels.\n         *\n         * This information is particularly useful for screen reader and other assistive technology users. It gets displayed\n         * by the {@link module:ui/editorui/accessibilityhelp/accessibilityhelp~AccessibilityHelp Accessibility help} dialog.\n         *\n         * Keystrokes are organized in categories and groups. They can be added using ({@link #addKeystrokeInfoCategory},\n         * {@link #addKeystrokeInfoGroup}, and {@link #addKeystrokeInfos}) methods.\n         *\n         * Please note that:\n         * * two categories are always available:\n         *   * `'contentEditing'` for keystrokes related to content creation,\n         *   * `'navigation'` for keystrokes related to navigation in the UI and the content.\n         * * unless specified otherwise, new keystrokes are added into the `'contentEditing'` category and the `'common'`\n         * keystroke group within that category while using the {@link #addKeystrokeInfos} method.\n         */\n        this.keystrokeInfos = new Map();\n        this._editor = editor;\n        const isMenuBarVisible = editor.config.get('menuBar.isVisible');\n        const t = editor.locale.t;\n        this.addKeystrokeInfoCategory({\n            id: DEFAULT_CATEGORY_ID,\n            label: t('Content editing keystrokes'),\n            description: t('These keyboard shortcuts allow for quick access to content editing features.')\n        });\n        const navigationKeystrokes = [\n            {\n                label: t('Close contextual balloons, dropdowns, and dialogs'),\n                keystroke: 'Esc'\n            },\n            {\n                label: t('Open the accessibility help dialog'),\n                keystroke: 'Alt+0'\n            },\n            {\n                label: t('Move focus between form fields (inputs, buttons, etc.)'),\n                keystroke: [['Tab'], ['Shift+Tab']]\n            },\n            {\n                label: t('Move focus to the toolbar, navigate between toolbars'),\n                keystroke: 'Alt+F10',\n                mayRequireFn: true\n            },\n            {\n                label: t('Navigate through the toolbar or menu bar'),\n                keystroke: [['arrowup'], ['arrowright'], ['arrowdown'], ['arrowleft']]\n            },\n            {\n                // eslint-disable-next-line max-len\n                label: t('Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.'),\n                keystroke: [['Enter'], ['Space']]\n            }\n        ];\n        if (isMenuBarVisible) {\n            navigationKeystrokes.push({\n                label: t('Move focus to the menu bar, navigate between menu bars'),\n                keystroke: 'Alt+F9',\n                mayRequireFn: true\n            });\n        }\n        this.addKeystrokeInfoCategory({\n            id: 'navigation',\n            label: t('User interface and content navigation keystrokes'),\n            description: t('Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.'),\n            groups: [\n                {\n                    id: 'common',\n                    keystrokes: navigationKeystrokes\n                }\n            ]\n        });\n    }\n    /**\n     * Adds a top-level category in the {@link #keystrokeInfos keystroke information database} with a label and optional description.\n     *\n     * Categories organize keystrokes and help users to find the right keystroke. Each category can have multiple groups\n     * of keystrokes that narrow down the context in which the keystrokes are available. Every keystroke category comes\n     * with a `'common'` group by default.\n     *\n     * By default, two categories are available:\n     * * `'contentEditing'` for keystrokes related to content creation,\n     * * `'navigation'` for keystrokes related to navigation in the UI and the content.\n     *\n     * To create a new keystroke category with new groups, use the following code:\n     *\n     * ```js\n     * class MyPlugin extends Plugin {\n     * \t// ...\n     * \tinit() {\n     * \t\tconst editor = this.editor;\n     * \t\tconst t = editor.t;\n     *\n     * \t\t// ...\n     *\n     * \t\teditor.accessibility.addKeystrokeInfoCategory( {\n     * \t\t\tid: 'myCategory',\n     * \t\t\tlabel: t( 'My category' ),\n     * \t\t\tdescription: t( 'My category description.' ),\n     * \t\t\tgroups: [\n     * \t\t\t\t{\n     * \t\t\t\t\tid: 'myGroup',\n     * \t\t\t\t\tlabel: t( 'My keystroke group' ),\n     * \t\t\t\t\tkeystrokes: [\n     * \t\t\t\t\t\t{\n     * \t\t\t\t\t\t\tlabel: t( 'Keystroke label 1' ),\n     * \t\t\t\t\t\t\tkeystroke: 'Ctrl+Shift+N'\n     * \t\t\t\t\t\t},\n     * \t\t\t\t\t\t{\n     * \t\t\t\t\t\t\tlabel: t( 'Keystroke label 2' ),\n     * \t\t\t\t\t\t\tkeystroke: 'Ctrl+Shift+M'\n     * \t\t\t\t\t\t}\n     * \t\t\t\t\t]\n     * \t\t\t\t}\n     * \t\t\t]\n     * \t\t};\n     * \t}\n     * }\n     * ```\n     *\n     * See {@link #keystrokeInfos}, {@link #addKeystrokeInfoGroup}, and {@link #addKeystrokeInfos}.\n     */\n    addKeystrokeInfoCategory({ id, label, description, groups }) {\n        this.keystrokeInfos.set(id, {\n            id,\n            label,\n            description,\n            groups: new Map()\n        });\n        this.addKeystrokeInfoGroup({\n            categoryId: id,\n            id: DEFAULT_GROUP_ID\n        });\n        if (groups) {\n            groups.forEach(group => {\n                this.addKeystrokeInfoGroup({\n                    categoryId: id,\n                    ...group\n                });\n            });\n        }\n    }\n    /**\n     * Adds a group of keystrokes in a specific category to the {@link #keystrokeInfos keystroke information database}.\n     *\n     * Groups narrow down the context in which the keystrokes are available. When `categoryId` is not specified,\n     * the group goes to the `'contentEditing'` category (default).\n     *\n     * To create a new group within an existing category, use the following code:\n     *\n     * ```js\n     * class MyPlugin extends Plugin {\n     * \t// ...\n     * \tinit() {\n     * \t\tconst editor = this.editor;\n     * \t\tconst t = editor.t;\n     *\n     * \t\t// ...\n     *\n     * \t\teditor.accessibility.addKeystrokeInfoGroup( {\n     * \t\t\tid: 'myGroup',\n     * \t\t\tcategoryId: 'navigation',\n     * \t\t\tlabel: t( 'My keystroke group' ),\n     * \t\t\tkeystrokes: [\n     * \t\t\t\t{\n     * \t\t\t\t\tlabel: t( 'Keystroke label 1' ),\n     * \t\t\t\t\tkeystroke: 'Ctrl+Shift+N'\n     * \t\t\t\t},\n     * \t\t\t\t{\n     * \t\t\t\t\tlabel: t( 'Keystroke label 2' ),\n     * \t\t\t\t\tkeystroke: 'Ctrl+Shift+M'\n     * \t\t\t\t}\n     * \t\t\t]\n     * \t\t} );\n     * \t}\n     * }\n     * ```\n     *\n     * See {@link #keystrokeInfos}, {@link #addKeystrokeInfoCategory}, and {@link #addKeystrokeInfos}.\n     */\n    addKeystrokeInfoGroup({ categoryId = DEFAULT_CATEGORY_ID, id, label, keystrokes }) {\n        const category = this.keystrokeInfos.get(categoryId);\n        if (!category) {\n            throw new CKEditorError('accessibility-unknown-keystroke-info-category', this._editor, { groupId: id, categoryId });\n        }\n        category.groups.set(id, {\n            id,\n            label,\n            keystrokes: keystrokes || []\n        });\n    }\n    /**\n     * Adds information about keystrokes to the {@link #keystrokeInfos keystroke information database}.\n     *\n     * Keystrokes without specified `groupId` or `categoryId` go to the `'common'` group in the `'contentEditing'` category (default).\n     *\n     * To add a keystroke brought by your plugin (using default group and category), use the following code:\n     *\n     * ```js\n     * class MyPlugin extends Plugin {\n     * \t// ...\n     * \tinit() {\n     * \t\tconst editor = this.editor;\n     * \t\tconst t = editor.t;\n     *\n     * \t\t// ...\n     *\n     * \t\teditor.accessibility.addKeystrokeInfos( {\n     * \t\t\tkeystrokes: [\n     * \t\t\t\t{\n     * \t\t\t\t\tlabel: t( 'Keystroke label' ),\n     * \t\t\t\t\tkeystroke: 'CTRL+B'\n     * \t\t\t\t}\n     * \t\t\t]\n     * \t\t} );\n     * \t}\n     * }\n     * ```\n     * To add a keystroke in a specific existing `'widget'` group in the default `'contentEditing'` category:\n     *\n     * ```js\n     * class MyPlugin extends Plugin {\n     * \t// ...\n     * \tinit() {\n     * \t\tconst editor = this.editor;\n     * \t\tconst t = editor.t;\n     *\n     * \t\t// ...\n     *\n     * \t\teditor.accessibility.addKeystrokeInfos( {\n     * \t\t\t// Add a keystroke to the existing \"widget\" group.\n     * \t\t\tgroupId: 'widget',\n     * \t\t\tkeystrokes: [\n     * \t\t\t\t{\n     * \t\t\t\t\tlabel: t( 'A an action on a selected widget' ),\n     * \t\t\t\t\tkeystroke: 'Ctrl+D',\n     * \t\t\t\t}\n     * \t\t\t]\n     * \t\t} );\n     * \t}\n     * }\n     * ```\n     *\n     * To add a keystroke to another existing category (using default group):\n     *\n     * ```js\n     * class MyPlugin extends Plugin {\n     * \t// ...\n     * \tinit() {\n     * \t\tconst editor = this.editor;\n     * \t\tconst t = editor.t;\n     *\n     * \t\t// ...\n     *\n     * \t\teditor.accessibility.addKeystrokeInfos( {\n     * \t\t\t// Add keystrokes to the \"navigation\" category (one of defaults).\n     * \t\t\tcategoryId: 'navigation',\n     * \t\t\tkeystrokes: [\n     * \t\t\t\t{\n     * \t\t\t\t\tlabel: t( 'Keystroke label' ),\n     * \t\t\t\t\tkeystroke: 'CTRL+B'\n     * \t\t\t\t}\n     * \t\t\t]\n     * \t\t} );\n     * \t}\n     * }\n     * ```\n     *\n     * See {@link #keystrokeInfos}, {@link #addKeystrokeInfoGroup}, and {@link #addKeystrokeInfoCategory}.\n     */\n    addKeystrokeInfos({ categoryId = DEFAULT_CATEGORY_ID, groupId = DEFAULT_GROUP_ID, keystrokes }) {\n        if (!this.keystrokeInfos.has(categoryId)) {\n            /**\n             * Cannot add keystrokes in an unknown category. Use\n             * {@link module:core/accessibility~Accessibility#addKeystrokeInfoCategory}\n             * to add a new category or make sure the specified category exists.\n             *\n             * @error accessibility-unknown-keystroke-info-category\n             * @param categoryId The id of the unknown keystroke category.\n             * @param keystrokes Keystroke definitions about to be added.\n             */\n            throw new CKEditorError('accessibility-unknown-keystroke-info-category', this._editor, { categoryId, keystrokes });\n        }\n        const category = this.keystrokeInfos.get(categoryId);\n        if (!category.groups.has(groupId)) {\n            /**\n             * Cannot add keystrokes to an unknown group.\n             *\n             * Use {@link module:core/accessibility~Accessibility#addKeystrokeInfoGroup}\n             * to add a new group or make sure the specified group exists.\n             *\n             * @error accessibility-unknown-keystroke-info-group\n             * @param groupId The id of the unknown keystroke group.\n             * @param categoryId The id of category the unknown group should belong to.\n             * @param keystrokes Keystroke definitions about to be added.\n             */\n            throw new CKEditorError('accessibility-unknown-keystroke-info-group', this._editor, { groupId, categoryId, keystrokes });\n        }\n        category.groups.get(groupId).keystrokes.push(...keystrokes);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/editor/editor\n */\nimport { Config, CKEditorError, ObservableMixin } from '@ckeditor/ckeditor5-utils';\nimport { Conversion, DataController, EditingController, Model, StylesProcessor } from '@ckeditor/ckeditor5-engine';\nimport { ContextWatchdog, EditorWatchdog } from '@ckeditor/ckeditor5-watchdog';\nimport Context from '../context.js';\nimport PluginCollection from '../plugincollection.js';\nimport CommandCollection from '../commandcollection.js';\nimport EditingKeystrokeHandler from '../editingkeystrokehandler.js';\nimport Accessibility from '../accessibility.js';\n/**\n * The class representing a basic, generic editor.\n *\n * Check out the list of its subclasses to learn about specific editor implementations.\n *\n * All editor implementations (like {@link module:editor-classic/classiceditor~ClassicEditor} or\n * {@link module:editor-inline/inlineeditor~InlineEditor}) should extend this class. They can add their\n * own methods and properties.\n *\n * When you are implementing a plugin, this editor represents the API\n * which your plugin can expect to get when using its {@link module:core/plugin~Plugin#editor} property.\n *\n * This API should be sufficient in order to implement the \"editing\" part of your feature\n * (schema definition, conversion, commands, keystrokes, etc.).\n * It does not define the editor UI, which is available only if\n * the specific editor implements also the {@link ~Editor#ui} property\n * (as most editor implementations do).\n */\nclass Editor extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a new instance of the editor class.\n     *\n     * Usually, not to be used directly. See the static {@link module:core/editor/editor~Editor.create `create()`} method.\n     *\n     * @param config The editor configuration.\n     */\n    constructor(config = {}) {\n        super();\n        if ('sanitizeHtml' in config) {\n            /**\n             * Configuration property `config.sanitizeHtml` was removed in CKEditor version 43.1.0 and is no longer supported.\n             *\n             * Please use `config.htmlEmbed.sanitizeHtml` and/or `config.mergeFields.sanitizeHtml` instead.\n             *\n             * @error editor-config-sanitizehtml-not-supported\n             */\n            throw new CKEditorError('editor-config-sanitizehtml-not-supported');\n        }\n        const constructor = this.constructor;\n        // We don't pass translations to the config, because its behavior of splitting keys\n        // with dots (e.g. `resize.width` => `resize: { width }`) breaks the translations.\n        const { translations: defaultTranslations, ...defaultConfig } = constructor.defaultConfig || {};\n        const { translations = defaultTranslations, ...rest } = config;\n        // Prefer the language passed as the argument to the constructor instead of the constructor's `defaultConfig`, if both are set.\n        const language = config.language || defaultConfig.language;\n        this._context = config.context || new Context({ language, translations });\n        this._context._addEditor(this, !config.context);\n        // Clone the plugins to make sure that the plugin array will not be shared\n        // between editors and make the watchdog feature work correctly.\n        const availablePlugins = Array.from(constructor.builtinPlugins || []);\n        this.config = new Config(rest, defaultConfig);\n        this.config.define('plugins', availablePlugins);\n        this.config.define(this._context._getEditorConfig());\n        this.plugins = new PluginCollection(this, availablePlugins, this._context.plugins);\n        this.locale = this._context.locale;\n        this.t = this.locale.t;\n        this._readOnlyLocks = new Set();\n        this.commands = new CommandCollection();\n        this.set('state', 'initializing');\n        this.once('ready', () => (this.state = 'ready'), { priority: 'high' });\n        this.once('destroy', () => (this.state = 'destroyed'), { priority: 'high' });\n        this.model = new Model();\n        this.on('change:isReadOnly', () => {\n            this.model.document.isReadOnly = this.isReadOnly;\n        });\n        const stylesProcessor = new StylesProcessor();\n        this.data = new DataController(this.model, stylesProcessor);\n        this.editing = new EditingController(this.model, stylesProcessor);\n        this.editing.view.document.bind('isReadOnly').to(this);\n        this.conversion = new Conversion([this.editing.downcastDispatcher, this.data.downcastDispatcher], this.data.upcastDispatcher);\n        this.conversion.addAlias('dataDowncast', this.data.downcastDispatcher);\n        this.conversion.addAlias('editingDowncast', this.editing.downcastDispatcher);\n        this.keystrokes = new EditingKeystrokeHandler(this);\n        this.keystrokes.listenTo(this.editing.view.document);\n        this.accessibility = new Accessibility(this);\n    }\n    /**\n     * Defines whether the editor is in the read-only mode.\n     *\n     * In read-only mode the editor {@link #commands commands} are disabled so it is not possible\n     * to modify the document by using them. Also, the editable element(s) become non-editable.\n     *\n     * In order to make the editor read-only, you need to call the {@link #enableReadOnlyMode} method:\n     *\n     * ```ts\n     * editor.enableReadOnlyMode( 'feature-id' );\n     * ```\n     *\n     * Later, to turn off the read-only mode, call {@link #disableReadOnlyMode}:\n     *\n     * ```ts\n     * editor.disableReadOnlyMode( 'feature-id' );\n     * ```\n     *\n     * @readonly\n     * @observable\n     */\n    get isReadOnly() {\n        return this._readOnlyLocks.size > 0;\n    }\n    set isReadOnly(value) {\n        /**\n         * The {@link module:core/editor/editor~Editor#isReadOnly Editor#isReadOnly} property is read-only since version `34.0.0`\n         * and can be set only using {@link module:core/editor/editor~Editor#enableReadOnlyMode `Editor#enableReadOnlyMode( lockId )`} and\n         * {@link module:core/editor/editor~Editor#disableReadOnlyMode `Editor#disableReadOnlyMode( lockId )`}.\n         *\n         * Usage before version `34.0.0`:\n         *\n         * ```ts\n         * editor.isReadOnly = true;\n         * editor.isReadOnly = false;\n         * ```\n         *\n         * Usage since version `34.0.0`:\n         *\n         * ```ts\n         * editor.enableReadOnlyMode( 'my-feature-id' );\n         * editor.disableReadOnlyMode( 'my-feature-id' );\n         * ```\n         *\n         * @error editor-isreadonly-has-no-setter\n         */\n        throw new CKEditorError('editor-isreadonly-has-no-setter');\n    }\n    /**\n     * Turns on the read-only mode in the editor.\n     *\n     * Editor can be switched to or out of the read-only mode by many features, under various circumstances. The editor supports locking\n     * mechanism for the read-only mode. It enables easy control over the read-only mode when many features wants to turn it on or off at\n     * the same time, without conflicting with each other. It guarantees that you will not make the editor editable accidentally (which\n     * could lead to errors).\n     *\n     * Each read-only mode request is identified by a unique id (also called \"lock\"). If multiple plugins requested to turn on the\n     * read-only mode, then, the editor will become editable only after all these plugins turn the read-only mode off (using the same ids).\n     *\n     * Note, that you cannot force the editor to disable the read-only mode if other plugins set it.\n     *\n     * After the first `enableReadOnlyMode()` call, the {@link #isReadOnly `isReadOnly` property} will be set to `true`:\n     *\n     * ```ts\n     * editor.isReadOnly; // `false`.\n     * editor.enableReadOnlyMode( 'my-feature-id' );\n     * editor.isReadOnly; // `true`.\n     * ```\n     *\n     * You can turn off the read-only mode (\"clear the lock\") using the {@link #disableReadOnlyMode `disableReadOnlyMode()`} method:\n     *\n     * ```ts\n     * editor.enableReadOnlyMode( 'my-feature-id' );\n     * // ...\n     * editor.disableReadOnlyMode( 'my-feature-id' );\n     * editor.isReadOnly; // `false`.\n     * ```\n     *\n     * All \"locks\" need to be removed to enable editing:\n     *\n     * ```ts\n     * editor.enableReadOnlyMode( 'my-feature-id' );\n     * editor.enableReadOnlyMode( 'my-other-feature-id' );\n     * // ...\n     * editor.disableReadOnlyMode( 'my-feature-id' );\n     * editor.isReadOnly; // `true`.\n     * editor.disableReadOnlyMode( 'my-other-feature-id' );\n     * editor.isReadOnly; // `false`.\n     * ```\n     *\n     * @param lockId A unique ID for setting the editor to the read-only state.\n     */\n    enableReadOnlyMode(lockId) {\n        if (typeof lockId !== 'string' && typeof lockId !== 'symbol') {\n            /**\n             * The lock ID is missing or it is not a string or symbol.\n             *\n             * @error editor-read-only-lock-id-invalid\n             */\n            throw new CKEditorError('editor-read-only-lock-id-invalid', null, { lockId });\n        }\n        if (this._readOnlyLocks.has(lockId)) {\n            return;\n        }\n        this._readOnlyLocks.add(lockId);\n        if (this._readOnlyLocks.size === 1) {\n            // Manually fire the `change:isReadOnly` event as only getter is provided.\n            this.fire('change:isReadOnly', 'isReadOnly', true, false);\n        }\n    }\n    /**\n     * Removes the read-only lock from the editor with given lock ID.\n     *\n     * When no lock is present on the editor anymore, then the {@link #isReadOnly `isReadOnly` property} will be set to `false`.\n     *\n     * @param lockId The lock ID for setting the editor to the read-only state.\n     */\n    disableReadOnlyMode(lockId) {\n        if (typeof lockId !== 'string' && typeof lockId !== 'symbol') {\n            throw new CKEditorError('editor-read-only-lock-id-invalid', null, { lockId });\n        }\n        if (!this._readOnlyLocks.has(lockId)) {\n            return;\n        }\n        this._readOnlyLocks.delete(lockId);\n        if (this._readOnlyLocks.size === 0) {\n            // Manually fire the `change:isReadOnly` event as only getter is provided.\n            this.fire('change:isReadOnly', 'isReadOnly', false, true);\n        }\n    }\n    /**\n     * Sets the data in the editor.\n     *\n     * ```ts\n     * editor.setData( '<p>This is editor!</p>' );\n     * ```\n     *\n     * If your editor implementation uses multiple roots, you should pass an object with keys corresponding\n     * to the editor root names and values equal to the data that should be set in each root:\n     *\n     * ```ts\n     * editor.setData( {\n     *     header: '<p>Content for header part.</p>',\n     *     content: '<p>Content for main part.</p>',\n     *     footer: '<p>Content for footer part.</p>'\n     * } );\n     * ```\n     *\n     * By default the editor accepts HTML. This can be controlled by injecting a different data processor.\n     * See the {@glink features/markdown Markdown output} guide for more details.\n     *\n     * @param data Input data.\n     */\n    setData(data) {\n        this.data.set(data);\n    }\n    /**\n     * Gets the data from the editor.\n     *\n     * ```ts\n     * editor.getData(); // -> '<p>This is editor!</p>'\n     * ```\n     *\n     * If your editor implementation uses multiple roots, you should pass root name as one of the options:\n     *\n     * ```ts\n     * editor.getData( { rootName: 'header' } ); // -> '<p>Content for header part.</p>'\n     * ```\n     *\n     * By default, the editor outputs HTML. This can be controlled by injecting a different data processor.\n     * See the {@glink features/markdown Markdown output} guide for more details.\n     *\n     * A warning is logged when you try to retrieve data for a detached root, as most probably this is a mistake. A detached root should\n     * be treated like it is removed, and you should not save its data. Note, that the detached root data is always an empty string.\n     *\n     * @param options Additional configuration for the retrieved data.\n     * Editor features may introduce more configuration options that can be set through this parameter.\n     * @param options.rootName Root name. Defaults to `'main'`.\n     * @param options.trim Whether returned data should be trimmed. This option is set to `'empty'` by default,\n     * which means that whenever editor content is considered empty, an empty string is returned. To turn off trimming\n     * use `'none'`. In such cases exact content will be returned (for example `'<p>&nbsp;</p>'` for an empty editor).\n     * @returns Output data.\n     */\n    getData(options) {\n        return this.data.get(options);\n    }\n    /**\n     * Loads and initializes plugins specified in the configuration.\n     *\n     * @returns A promise which resolves once the initialization is completed, providing an array of loaded plugins.\n     */\n    initPlugins() {\n        const config = this.config;\n        const plugins = config.get('plugins');\n        const removePlugins = config.get('removePlugins') || [];\n        const extraPlugins = config.get('extraPlugins') || [];\n        const substitutePlugins = config.get('substitutePlugins') || [];\n        return this.plugins.init(plugins.concat(extraPlugins), removePlugins, substitutePlugins);\n    }\n    /**\n     * Destroys the editor instance, releasing all resources used by it.\n     *\n     * **Note** The editor cannot be destroyed during the initialization phase so if it is called\n     * while the editor {@link #state is being initialized}, it will wait for the editor initialization before destroying it.\n     *\n     * @fires destroy\n     * @returns A promise that resolves once the editor instance is fully destroyed.\n     */\n    destroy() {\n        let readyPromise = Promise.resolve();\n        if (this.state == 'initializing') {\n            readyPromise = new Promise(resolve => this.once('ready', resolve));\n        }\n        return readyPromise\n            .then(() => {\n            this.fire('destroy');\n            this.stopListening();\n            this.commands.destroy();\n        })\n            .then(() => this.plugins.destroy())\n            .then(() => {\n            this.model.destroy();\n            this.data.destroy();\n            this.editing.destroy();\n            this.keystrokes.destroy();\n        })\n            // Remove the editor from the context.\n            // When the context was created by this editor, the context will be destroyed.\n            .then(() => this._context._removeEditor(this));\n    }\n    /**\n     * Executes the specified command with given parameters.\n     *\n     * Shorthand for:\n     *\n     * ```ts\n     * editor.commands.get( commandName ).execute( ... );\n     * ```\n     *\n     * @param commandName The name of the command to execute.\n     * @param commandParams Command parameters.\n     * @returns The value returned by the {@link module:core/commandcollection~CommandCollection#execute `commands.execute()`}.\n     */\n    execute(commandName, ...commandParams) {\n        try {\n            return this.commands.execute(commandName, ...commandParams);\n        }\n        catch (err) {\n            // @if CK_DEBUG // throw err;\n            /* istanbul ignore next -- @preserve */\n            CKEditorError.rethrowUnexpectedError(err, this);\n        }\n    }\n    /**\n     * Focuses the editor.\n     *\n     * **Note** To explicitly focus the editing area of the editor, use the\n     * {@link module:engine/view/view~View#focus `editor.editing.view.focus()`} method of the editing view.\n     *\n     * Check out the {@glink framework/deep-dive/ui/focus-tracking#focus-in-the-editor-ui Focus in the editor UI} section\n     * of the {@glink framework/deep-dive/ui/focus-tracking Deep dive into focus tracking} guide to learn more.\n     */\n    focus() {\n        this.editing.view.focus();\n    }\n    /* istanbul ignore next -- @preserve */\n    /**\n     * Creates and initializes a new editor instance.\n     *\n     * This is an abstract method. Every editor type needs to implement its own initialization logic.\n     *\n     * See the `create()` methods of the existing editor types to learn how to use them:\n     *\n     * * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`}\n     * * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}\n     * * {@link module:editor-decoupled/decouplededitor~DecoupledEditor.create `DecoupledEditor.create()`}\n     * * {@link module:editor-inline/inlineeditor~InlineEditor.create `InlineEditor.create()`}\n     */\n    static create(...args) {\n        throw new Error('This is an abstract method.');\n    }\n}\n/**\n * The {@link module:core/context~Context} class.\n *\n * Exposed as static editor field for easier access in editor builds.\n */\nEditor.Context = Context;\n/**\n * The {@link module:watchdog/editorwatchdog~EditorWatchdog} class.\n *\n * Exposed as static editor field for easier access in editor builds.\n */\nEditor.EditorWatchdog = EditorWatchdog;\n/**\n * The {@link module:watchdog/contextwatchdog~ContextWatchdog} class.\n *\n * Exposed as static editor field for easier access in editor builds.\n */\nEditor.ContextWatchdog = ContextWatchdog;\nexport default Editor;\n/**\n * This error is thrown when trying to pass a `<textarea>` element to a `create()` function of an editor class.\n *\n * The only editor type which can be initialized on `<textarea>` elements is\n * the {@glink getting-started/setup/editor-types#classic-editor classic editor}.\n * This editor hides the passed element and inserts its own UI next to it. Other types of editors reuse the passed element as their root\n * editable element and therefore `<textarea>` is not appropriate for them. Use a `<div>` or another text container instead:\n *\n * ```html\n * <div id=\"editor\">\n * \t<p>Initial content.</p>\n * </div>\n * ```\n *\n * @error editor-wrong-element\n */\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/editor/utils/elementapimixin\n */\nimport { CKEditorError, setDataInElement } from '@ckeditor/ckeditor5-utils';\n/**\n * Implementation of the {@link module:core/editor/utils/elementapimixin~ElementApi}.\n */\nexport default function ElementApiMixin(base) {\n    class Mixin extends base {\n        updateSourceElement(data) {\n            if (!this.sourceElement) {\n                /**\n                 * Cannot update the source element of a detached editor.\n                 *\n                 * The {@link module:core/editor/utils/elementapimixin~ElementApi#updateSourceElement `updateSourceElement()`}\n                 * method cannot be called if you did not pass an element to `Editor.create()`.\n                 *\n                 * @error editor-missing-sourceelement\n                 */\n                throw new CKEditorError('editor-missing-sourceelement', this);\n            }\n            const shouldUpdateSourceElement = this.config.get('updateSourceElementOnDestroy');\n            const isSourceElementTextArea = this.sourceElement instanceof HTMLTextAreaElement;\n            // The data returned by the editor might be unsafe, so we want to prevent rendering\n            // unsafe content inside the source element different than <textarea>, which is considered\n            // secure. This behavior could be changed by setting the `updateSourceElementOnDestroy`\n            // configuration option to `true`.\n            if (!shouldUpdateSourceElement && !isSourceElementTextArea) {\n                setDataInElement(this.sourceElement, '');\n                return;\n            }\n            const dataToSet = typeof data === 'string' ? data : this.data.get();\n            setDataInElement(this.sourceElement, dataToSet);\n        }\n    }\n    return Mixin;\n}\n// Backward compatibility with `mix`.\nElementApiMixin.updateSourceElement = ElementApiMixin(Object).prototype.updateSourceElement;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/pendingactions\n */\nimport ContextPlugin from './contextplugin.js';\nimport { CKEditorError, Collection, ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * The list of pending editor actions.\n *\n * This plugin should be used to synchronise plugins that execute long-lasting actions\n * (e.g. file upload) with the editor integration. It gives the developer who integrates the editor\n * an easy way to check if there are any actions pending whenever such information is needed.\n * All plugins that register a pending action also provide a message about the action that is ongoing\n * which can be displayed to the user. This lets them decide if they want to interrupt the action or wait.\n *\n * Adding and updating a pending action:\n *\n * ```ts\n * const pendingActions = editor.plugins.get( 'PendingActions' );\n * const action = pendingActions.add( 'Upload in progress: 0%.' );\n *\n * // You can update the message:\n * action.message = 'Upload in progress: 10%.';\n * ```\n *\n * Removing a pending action:\n *\n * ```ts\n * const pendingActions = editor.plugins.get( 'PendingActions' );\n * const action = pendingActions.add( 'Unsaved changes.' );\n *\n * pendingActions.remove( action );\n * ```\n *\n * Getting pending actions:\n *\n * ```ts\n * const pendingActions = editor.plugins.get( 'PendingActions' );\n *\n * const action1 = pendingActions.add( 'Action 1' );\n * const action2 = pendingActions.add( 'Action 2' );\n *\n * pendingActions.first; // Returns action1\n * Array.from( pendingActions ); // Returns [ action1, action2 ]\n * ```\n *\n * This plugin is used by features like {@link module:upload/filerepository~FileRepository} to register their ongoing actions\n * and by features like {@link module:autosave/autosave~Autosave} to detect whether there are any ongoing actions.\n * Read more about saving the data in the\n * {@glink getting-started/setup/getting-and-setting-data Saving and getting data} guide.\n */\nexport default class PendingActions extends ContextPlugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'PendingActions';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        this.set('hasAny', false);\n        this._actions = new Collection({ idProperty: '_id' });\n        this._actions.delegate('add', 'remove').to(this);\n    }\n    /**\n     * Adds an action to the list of pending actions.\n     *\n     * This method returns an action object with an observable message property.\n     * The action object can be later used in the {@link #remove} method. It also allows you to change the message.\n     *\n     * @param message The action message.\n     * @returns An observable object that represents a pending action.\n     */\n    add(message) {\n        if (typeof message !== 'string') {\n            /**\n             * The message must be a string.\n             *\n             * @error pendingactions-add-invalid-message\n             */\n            throw new CKEditorError('pendingactions-add-invalid-message', this);\n        }\n        const action = new (ObservableMixin())();\n        action.set('message', message);\n        this._actions.add(action);\n        this.hasAny = true;\n        return action;\n    }\n    /**\n     * Removes an action from the list of pending actions.\n     *\n     * @param action An action object.\n     */\n    remove(action) {\n        this._actions.remove(action);\n        this.hasAny = !!this._actions.length;\n    }\n    /**\n     * Returns the first action from the list or null if the list is empty\n     *\n     * @returns The pending action object.\n     */\n    get first() {\n        return this._actions.get(0);\n    }\n    /**\n     * Iterable interface.\n     */\n    [Symbol.iterator]() {\n        return this._actions[Symbol.iterator]();\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m11.591 10.177 4.243 4.242a1 1 0 0 1-1.415 1.415l-4.242-4.243-4.243 4.243a1 1 0 0 1-1.414-1.415l4.243-4.242L4.52 5.934A1 1 0 0 1 5.934 4.52l4.243 4.243 4.242-4.243a1 1 0 1 1 1.415 1.414l-4.243 4.243z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core\n */\nexport { default as Plugin } from './plugin.js';\nexport { default as Command } from './command.js';\nexport { default as MultiCommand } from './multicommand.js';\nexport { default as Context } from './context.js';\nexport { default as ContextPlugin } from './contextplugin.js';\nexport { default as Editor } from './editor/editor.js';\nexport { default as attachToForm } from './editor/utils/attachtoform.js';\nexport { default as DataApiMixin } from './editor/utils/dataapimixin.js';\nexport { default as ElementApiMixin } from './editor/utils/elementapimixin.js';\nexport { default as secureSourceElement } from './editor/utils/securesourceelement.js';\nexport { default as PendingActions } from './pendingactions.js';\nimport cancel from './../theme/icons/cancel.svg';\nimport caption from './../theme/icons/caption.svg';\nimport check from './../theme/icons/check.svg';\nimport cog from './../theme/icons/cog.svg';\nimport colorPalette from './../theme/icons/color-palette.svg';\nimport eraser from './../theme/icons/eraser.svg';\nimport history from './../theme/icons/history.svg';\nimport lowVision from './../theme/icons/low-vision.svg';\nimport textAlternative from './../theme/icons/text-alternative.svg';\nimport loupe from './../theme/icons/loupe.svg';\nimport previousArrow from './../theme/icons/previous-arrow.svg';\nimport nextArrow from './../theme/icons/next-arrow.svg';\nimport image from './../theme/icons/image.svg';\nimport imageUpload from './../theme/icons/image-upload.svg';\nimport imageAssetManager from './../theme/icons/image-asset-manager.svg';\nimport imageUrl from './../theme/icons/image-url.svg';\nimport alignBottom from './../theme/icons/align-bottom.svg';\nimport alignMiddle from './../theme/icons/align-middle.svg';\nimport alignTop from './../theme/icons/align-top.svg';\nimport alignLeft from './../theme/icons/align-left.svg';\nimport alignCenter from './../theme/icons/align-center.svg';\nimport alignRight from './../theme/icons/align-right.svg';\nimport alignJustify from './../theme/icons/align-justify.svg';\nimport objectBlockLeft from './../theme/icons/object-left.svg';\nimport objectCenter from './../theme/icons/object-center.svg';\nimport objectBlockRight from './../theme/icons/object-right.svg';\nimport objectFullWidth from './../theme/icons/object-full-width.svg';\nimport objectInline from './../theme/icons/object-inline.svg';\nimport objectLeft from './../theme/icons/object-inline-left.svg';\nimport objectRight from './../theme/icons/object-inline-right.svg';\nimport objectSizeFull from './../theme/icons/object-size-full.svg';\nimport objectSizeCustom from './../theme/icons/object-size-custom.svg';\nimport objectSizeLarge from './../theme/icons/object-size-large.svg';\nimport objectSizeSmall from './../theme/icons/object-size-small.svg';\nimport objectSizeMedium from './../theme/icons/object-size-medium.svg';\nimport pencil from './../theme/icons/pencil.svg';\nimport pilcrow from './../theme/icons/pilcrow.svg';\nimport quote from './../theme/icons/quote.svg';\nimport threeVerticalDots from './../theme/icons/three-vertical-dots.svg';\nimport dragIndicator from './../theme/icons/drag-indicator.svg';\nimport bold from './../theme/icons/bold.svg';\nimport paragraph from './../theme/icons/paragraph.svg';\nimport plus from './../theme/icons/plus.svg';\nimport text from './../theme/icons/text.svg';\nimport importExport from './../theme/icons/importexport.svg';\nimport redo from './../theme/icons/redo.svg';\nimport undo from './../theme/icons/undo.svg';\nimport bulletedList from './../theme/icons/bulletedlist.svg';\nimport numberedList from './../theme/icons/numberedlist.svg';\nimport todoList from './../theme/icons/todolist.svg';\nimport codeBlock from './../theme/icons/codeblock.svg';\nimport browseFiles from './../theme/icons/browse-files.svg';\nimport heading1 from './../theme/icons/heading1.svg';\nimport heading2 from './../theme/icons/heading2.svg';\nimport heading3 from './../theme/icons/heading3.svg';\nimport heading4 from './../theme/icons/heading4.svg';\nimport heading5 from './../theme/icons/heading5.svg';\nimport heading6 from './../theme/icons/heading6.svg';\nimport horizontalLine from './../theme/icons/horizontalline.svg';\nimport html from './../theme/icons/html.svg';\nimport indent from './../theme/icons/indent.svg';\nimport outdent from './../theme/icons/outdent.svg';\nimport table from './../theme/icons/table.svg';\nexport const icons = {\n    bold,\n    cancel,\n    caption,\n    check,\n    cog,\n    colorPalette,\n    eraser,\n    history,\n    image,\n    imageUpload,\n    imageAssetManager,\n    imageUrl,\n    lowVision,\n    textAlternative,\n    loupe,\n    previousArrow,\n    nextArrow,\n    importExport,\n    paragraph,\n    plus,\n    text,\n    alignBottom,\n    alignMiddle,\n    alignTop,\n    alignLeft,\n    alignCenter,\n    alignRight,\n    alignJustify,\n    objectLeft,\n    objectCenter,\n    objectRight,\n    objectFullWidth,\n    objectInline,\n    objectBlockLeft,\n    objectBlockRight,\n    objectSizeCustom,\n    objectSizeFull,\n    objectSizeLarge,\n    objectSizeSmall,\n    objectSizeMedium,\n    pencil,\n    pilcrow,\n    quote,\n    threeVerticalDots,\n    dragIndicator,\n    redo,\n    undo,\n    bulletedList,\n    numberedList,\n    todoList,\n    codeBlock,\n    browseFiles,\n    heading1,\n    heading2,\n    heading3,\n    heading4,\n    heading5,\n    heading6,\n    horizontalLine,\n    html,\n    indent,\n    outdent,\n    table\n};\nimport './augmentation.js';\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10.187 17H5.773c-.637 0-1.092-.138-1.364-.415-.273-.277-.409-.718-.409-1.323V4.738c0-.617.14-1.062.419-1.332.279-.27.73-.406 1.354-.406h4.68c.69 0 1.288.041 1.793.124.506.083.96.242 1.36.478.341.197.644.447.906.75a3.262 3.262 0 0 1 .808 2.162c0 1.401-.722 2.426-2.167 3.075C15.05 10.175 16 11.315 16 13.01a3.756 3.756 0 0 1-2.296 3.504 6.1 6.1 0 0 1-1.517.377c-.571.073-1.238.11-2 .11zm-.217-6.217H7v4.087h3.069c1.977 0 2.965-.69 2.965-2.072 0-.707-.256-1.22-.768-1.537-.512-.319-1.277-.478-2.296-.478zM7 5.13v3.619h2.606c.729 0 1.292-.067 1.69-.2a1.6 1.6 0 0 0 .91-.765c.165-.267.247-.566.247-.897 0-.707-.26-1.176-.778-1.409-.519-.232-1.31-.348-2.375-.348H7z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2 16h9a1 1 0 0 1 0 2H2a1 1 0 0 1 0-2z\\\"/><path d=\\\"M17 1a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h14zm0 1.5H3a.5.5 0 0 0-.492.41L2.5 3v9a.5.5 0 0 0 .41.492L3 12.5h14a.5.5 0 0 0 .492-.41L17.5 12V3a.5.5 0 0 0-.41-.492L17 2.5z\\\" fill-opacity=\\\".6\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.972 16.615a.997.997 0 0 1-.744-.292l-4.596-4.596a1 1 0 1 1 1.414-1.414l3.926 3.926 9.937-9.937a1 1 0 0 1 1.414 1.415L7.717 16.323a.997.997 0 0 1-.745.292z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10.209 18.717A8.5 8.5 0 1 1 18.686 9.6h-.008l.002.12a3 3 0 0 1-2.866 2.997h-.268l-.046-.002v.002h-4.791a2 2 0 1 0 0 4 1 1 0 1 1-.128 1.992 8.665 8.665 0 0 1-.372.008Zm-3.918-7.01a1.25 1.25 0 1 0-2.415-.648 1.25 1.25 0 0 0 2.415.647ZM5.723 8.18a1.25 1.25 0 1 0 .647-2.414 1.25 1.25 0 0 0-.647 2.414ZM9.76 6.155a1.25 1.25 0 1 0 .647-2.415 1.25 1.25 0 0 0-.647 2.415Zm4.028 1.759a1.25 1.25 0 1 0 .647-2.415 1.25 1.25 0 0 0-.647 2.415Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m8.636 9.531-2.758 3.94a.5.5 0 0 0 .122.696l3.224 2.284h1.314l2.636-3.736L8.636 9.53zm.288 8.451L5.14 15.396a2 2 0 0 1-.491-2.786l6.673-9.53a2 2 0 0 1 2.785-.49l3.742 2.62a2 2 0 0 1 .491 2.785l-7.269 10.053-2.147-.066z\\\"/><path d=\\\"M4 18h5.523v-1H4zm-2 0h1v-1H2z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.66 9.118a.693.693 0 0 1 .956.032l3.65 3.411 2.422-2.238a.695.695 0 0 1 .945 0L17.5 13.6V2.5h-15v11.1l4.16-4.482ZM17.8 1c.652 0 1.2.47 1.2 1.1v14.362c0 .64-.532 1.038-1.184 1.038H2.184C1.532 17.5 1 17.103 1 16.462V2.1C1 1.47 1.537 1 2.2 1h15.6Zm-5.655 6a2.128 2.128 0 0 1 .157-2.364A2.133 2.133 0 1 1 12.145 7Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M1.201 1C.538 1 0 1.47 0 2.1v14.363c0 .64.534 1.037 1.186 1.037h9.494a2.97 2.97 0 0 1-.414-.287 2.998 2.998 0 0 1-1.055-2.03 3.003 3.003 0 0 1 .693-2.185l.383-.455-.02.018-3.65-3.41a.695.695 0 0 0-.957-.034L1.5 13.6V2.5h15v5.535a2.97 2.97 0 0 1 1.412.932l.088.105V2.1c0-.63-.547-1.1-1.2-1.1H1.202Zm11.713 2.803a2.146 2.146 0 0 0-2.049 1.992 2.14 2.14 0 0 0 1.28 2.096 2.13 2.13 0 0 0 2.644-3.11 2.134 2.134 0 0 0-1.875-.978Z\\\"/><path d=\\\"M15.522 19.1a.79.79 0 0 0 .79-.79v-5.373l2.059 2.455a.79.79 0 1 0 1.211-1.015l-3.352-3.995a.79.79 0 0 0-.995-.179.784.784 0 0 0-.299.221l-3.35 3.99a.79.79 0 1 0 1.21 1.017l1.936-2.306v5.185c0 .436.353.79.79.79Z\\\"/><path d=\\\"M15.522 19.1a.79.79 0 0 0 .79-.79v-5.373l2.059 2.455a.79.79 0 1 0 1.211-1.015l-3.352-3.995a.79.79 0 0 0-.995-.179.784.784 0 0 0-.299.221l-3.35 3.99a.79.79 0 1 0 1.21 1.017l1.936-2.306v5.185c0 .436.353.79.79.79Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M3.035 1C2.446 1 2 1.54 2 2.098V10.5h1.5v-8h13v8H18V2.098C18 1.539 17.48 1 16.9 1H3.035Zm10.453 2.61a1.885 1.885 0 0 0-1.442.736 1.89 1.89 0 0 0 1.011 2.976 1.903 1.903 0 0 0 2.253-1.114 1.887 1.887 0 0 0-1.822-2.598ZM7.463 8.163a.611.611 0 0 0-.432.154L5.071 10.5h5.119L7.88 8.348a.628.628 0 0 0-.417-.185Zm6.236 1.059a.62.62 0 0 0-.42.164L12.07 10.5h2.969l-.92-1.113a.618.618 0 0 0-.42-.165ZM.91 11.5a.91.91 0 0 0-.91.912v6.877c0 .505.405.91.91.91h18.178a.91.91 0 0 0 .912-.91v-6.877a.908.908 0 0 0-.912-.912H.91ZM3.668 13h1.947l2.135 5.7H5.898l-.28-.946H3.601l-.278.945H1.516L3.668 13Zm4.947 0h1.801v4.3h2.7v1.4h-4.5V13h-.001Zm4.5 0h5.4v1.4h-1.798v4.3h-1.701v-4.3h-1.9V13h-.001Zm-8.517 1.457-.614 2.059h1.262l-.648-2.059Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12.68 13.74h-.001l4.209 4.208a1 1 0 1 0 1.414-1.414l-4.267-4.268a6 6 0 1 0-1.355 1.474ZM13 9a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.463 5.187a.888.888 0 1 1 1.254 1.255L9.16 10l3.557 3.557a.888.888 0 1 1-1.254 1.255L7.26 10.61a.888.888 0 0 1 .16-1.382l4.043-4.042z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M8.537 14.813a.888.888 0 1 1-1.254-1.255L10.84 10 7.283 6.442a.888.888 0 1 1 1.254-1.255L12.74 9.39a.888.888 0 0 1-.16 1.382l-4.043 4.042z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M19 4.5 14 0H3v12.673l.868-1.041c.185-.222.4-.402.632-.54V1.5h8v5h5v7.626a2.24 2.24 0 0 1 1.5.822V4.5ZM14 5V2l3.3 3H14Zm-3.692 12.5c.062.105.133.206.213.303L11.52 19H8v-.876a2.243 2.243 0 0 0 1.82-.624h.488Zm7.518-.657a.75.75 0 0 0-1.152-.96L15.5 17.29V12H14v5.29l-1.174-1.408a.75.75 0 0 0-1.152.96l2.346 2.816a.95.95 0 0 0 1.46 0l2.346-2.815Zm-15.056-.38a.75.75 0 0 1-.096-1.056l2.346-2.815a.95.95 0 0 1 1.46 0l2.346 2.815a.75.75 0 1 1-1.152.96L6.5 14.96V20H5v-5.04l-1.174 1.408a.75.75 0 0 1-1.056.096Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10.5 5.5H7v5h3.5a2.5 2.5 0 1 0 0-5zM5 3h6.5v.025a5 5 0 0 1 0 9.95V13H7v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10 2a1 1 0 0 0-1 1v6H3a1 1 0 1 0 0 2h6v6a1 1 0 1 0 2 0v-6h6a1 1 0 1 0 0-2h-6V3a1 1 0 0 0-1-1Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M9.816 11.5 7.038 4.785 4.261 11.5h5.555Zm.62 1.5H3.641l-1.666 4.028H.312l5.789-14h1.875l5.789 14h-1.663L10.436 13Z\\\"/><path d=\\\"m12.09 17-.534-1.292.848-1.971.545 1.319L12.113 17h-.023Zm1.142-5.187.545 1.319L15.5 9.13l1.858 4.316h-3.45l.398.965h3.467L18.887 17H20l-3.873-9h-1.254l-1.641 3.813Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m9.239 13.938-2.88-1.663a.75.75 0 0 1 .75-1.3L9 12.067V4.75a.75.75 0 1 1 1.5 0v7.318l1.89-1.093a.75.75 0 0 1 .75 1.3l-2.879 1.663a.752.752 0 0 1-.511.187.752.752 0 0 1-.511-.187zM4.25 17a.75.75 0 1 1 0-1.5h10.5a.75.75 0 0 1 0 1.5H4.25z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M9.75 11.875a.752.752 0 0 1 .508.184l2.883 1.666a.75.75 0 0 1-.659 1.344l-.091-.044-1.892-1.093.001 4.318a.75.75 0 1 1-1.5 0v-4.317l-1.89 1.092a.75.75 0 0 1-.75-1.3l2.879-1.663a.752.752 0 0 1 .51-.187zM15.25 9a.75.75 0 1 1 0 1.5H4.75a.75.75 0 1 1 0-1.5h10.5zM9.75.375a.75.75 0 0 1 .75.75v4.318l1.89-1.093.092-.045a.75.75 0 0 1 .659 1.344l-2.883 1.667a.752.752 0 0 1-.508.184.752.752 0 0 1-.511-.187L6.359 5.65a.75.75 0 0 1 .75-1.299L9 5.442V1.125a.75.75 0 0 1 .75-.75z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m10.261 7.062 2.88 1.663a.75.75 0 0 1-.75 1.3L10.5 8.933v7.317a.75.75 0 1 1-1.5 0V8.932l-1.89 1.093a.75.75 0 0 1-.75-1.3l2.879-1.663a.752.752 0 0 1 .511-.187.752.752 0 0 1 .511.187zM15.25 4a.75.75 0 1 1 0 1.5H4.75a.75.75 0 0 1 0-1.5h10.5z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 4c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm2.286 4c0 .414.336.75.75.75h9.928a.75.75 0 1 0 0-1.5H5.036a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h9.928a.75.75 0 1 0 0-1.5H5.036a.75.75 0 0 0-.75.75z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M18 3.75a.75.75 0 0 1-.75.75H2.75a.75.75 0 1 1 0-1.5h14.5a.75.75 0 0 1 .75.75zm0 8a.75.75 0 0 1-.75.75H2.75a.75.75 0 1 1 0-1.5h14.5a.75.75 0 0 1 .75.75zm0 4a.75.75 0 0 1-.75.75H7.321a.75.75 0 1 1 0-1.5h9.929a.75.75 0 0 1 .75.75zm0-8a.75.75 0 0 1-.75.75H7.321a.75.75 0 1 1 0-1.5h9.929a.75.75 0 0 1 .75.75z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 4c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path opacity=\\\".5\\\" d=\\\"M2 3h16v1.5H2zm11.5 9H18v1.5h-4.5zm0-3H18v1.5h-4.5zm0-3H18v1.5h-4.5zM2 15h16v1.5H2z\\\"/><path d=\\\"M12.003 7v5.5a1 1 0 0 1-1 1H2.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H3.5V12h6.997V7.5z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path opacity=\\\".5\\\" d=\\\"M2 3h16v1.5H2zm0 12h16v1.5H2z\\\"/><path d=\\\"M15.003 7v5.5a1 1 0 0 1-1 1H5.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H6.5V12h6.997V7.5z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path opacity=\\\".5\\\" d=\\\"M2 3h16v1.5H2zm0 12h16v1.5H2zm0-9h5v1.5H2zm0 3h5v1.5H2zm0 3h5v1.5H2z\\\"/><path d=\\\"M18.003 7v5.5a1 1 0 0 1-1 1H8.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H9.5V12h6.997V7.5z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path opacity=\\\".5\\\" d=\\\"M2 3h16v1.5H2zm0 12h16v1.5H2z\\\"/><path d=\\\"M18 7v5.5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1zm-1.505.5H3.504V12h12.991V7.5z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path opacity=\\\".5\\\" d=\\\"M2 3h16v1.5H2zm11.5 9H18v1.5h-4.5zM2 15h16v1.5H2z\\\"/><path d=\\\"M12.003 7v5.5a1 1 0 0 1-1 1H2.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H3.5V12h6.997V7.5z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path opacity=\\\".5\\\" d=\\\"M2 3h16v1.5H2zm0 12h16v1.5H2z\\\"/><path d=\\\"M12.003 7v5.5a1 1 0 0 1-1 1H2.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H3.5V12h6.997V7.5z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path opacity=\\\".5\\\" d=\\\"M2 3h16v1.5H2zm0 12h16v1.5H2z\\\"/><path d=\\\"M18.003 7v5.5a1 1 0 0 1-1 1H8.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H9.5V12h6.997V7.5z\\\"/></svg>\";", "export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:v=\\\"https://vecta.io/nano\\\" viewBox=\\\"0 0 20 20\\\"><path d=\\\"M.95 1.43a.95.95 0 0 0-.95.95v3.1a.95.95 0 0 0 .95.95h.75v6.3H.95a.95.95 0 0 0-.95.95v3.1a.95.95 0 0 0 .95.95h3.1a.95.95 0 0 0 .95-.95v-.65h1.932l1.539-1.5H5v-.95a.95.95 0 0 0-.95-.95H3.2v-6.3h.85A.95.95 0 0 0 5 5.48v-.55h10v.55a.95.95 0 0 0 .95.95h3.1a.95.95 0 0 0 .95-.95v-3.1a.95.95 0 0 0-.95-.95h-3.1a.95.95 0 0 0-.95.95v1.05H5V2.38a.95.95 0 0 0-.95-.95H.95zm.55 3.5v-2h2v2h-2zm0 9.3v2h2v-2h-2zm15-11.3v2h2v-2h-2z\\\"/><path d=\\\"M8.139 20.004v-2.388l7.045-7.048 2.391 2.391-7.046 7.046h-2.39zm11.421-9.101a.64.64 0 0 1-.138.206l-1.165 1.168-2.391-2.391 1.167-1.163a.63.63 0 0 1 .206-.138.635.635 0 0 1 .243-.049.63.63 0 0 1 .449.187l1.491 1.488c.059.059.108.129.138.206s.049.16.049.243a.6.6 0 0 1-.049.243z\\\"/></svg>\";", "export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 20 20\\\"><path d=\\\"M2.5 17v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zM1 15.5v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm0-2v1h-1v-1h1zm-19 0v1H0v-1h1zM14.5 2v1h-1V2h1zm2 0v1h-1V2h1zm2 0v1h-1V2h1zm-8 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm8 0v1h-1V2h1zm-10 0v1h-1V2h1z\\\"/><path d=\\\"M18.095 2H1.905C.853 2 0 2.895 0 4v12c0 1.105.853 2 1.905 2h16.19C19.147 18 20 17.105 20 16V4c0-1.105-.853-2-1.905-2zm0 1.5c.263 0 .476.224.476.5v12c0 .276-.213.5-.476.5H1.905a.489.489 0 0 1-.476-.5V4c0-.276.213-.5.476-.5h16.19z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2.5 16.5v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1ZM1 15v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 13v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 11v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 9v1H0V9h1Zm19 0v1h-1V9h1ZM1 7v1H0V7h1Zm19 0v1h-1V7h1ZM1 5v1H0V5h1Zm19 0v1h-1V5h1Zm0-2v1h-1V3h1ZM1 3v1H0V3h1Zm13.5-1.5v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm-8 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm8 0v1h-1v-1h1Zm-10 0v1h-1v-1h1Z\\\"/><path d=\\\"M13 5.5H2a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2v-8a2 2 0 0 0-2-2ZM13 7a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5H2a.5.5 0 0 1-.5-.5v-8A.5.5 0 0 1 2 7h11Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2.5 16.5v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1ZM1 15v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 13v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 11v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 9v1H0V9h1Zm19 0v1h-1V9h1ZM1 7v1H0V7h1Zm19 0v1h-1V7h1ZM1 5v1H0V5h1Zm19 0v1h-1V5h1Zm0-2v1h-1V3h1ZM1 3v1H0V3h1Zm13.5-1.5v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm-8 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm8 0v1h-1v-1h1Zm-10 0v1h-1v-1h1Z\\\"/><path d=\\\"M7 9.5H2a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2ZM7 11a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H2a.5.5 0 0 1-.5-.5v-4A.5.5 0 0 1 2 11h5Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2.5 16.5v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1ZM1 15v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 13v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 11v1H0v-1h1Zm19 0v1h-1v-1h1ZM1 9v1H0V9h1Zm19 0v1h-1V9h1ZM1 7v1H0V7h1Zm19 0v1h-1V7h1ZM1 5v1H0V5h1Zm19 0v1h-1V5h1Zm0-2v1h-1V3h1ZM1 3v1H0V3h1Zm13.5-1.5v1h-1v-1h1Zm2 0v1h-1v-1h1Zm2 0v1h-1v-1h1Zm-8 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm-2 0v1h-1v-1h1Zm8 0v1h-1v-1h1Zm-10 0v1h-1v-1h1Z\\\"/><path d=\\\"M10 7.5H2a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2ZM10 9a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-.5.5H2a.5.5 0 0 1-.5-.5v-6A.5.5 0 0 1 2 9h8Z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m7.3 17.37-.061.088a1.518 1.518 0 0 1-.934.535l-4.178.663-.806-4.153a1.495 1.495 0 0 1 .187-1.058l.056-.086L8.77 2.639c.958-1.351 2.803-1.076 4.296-.03 1.497 1.047 2.387 2.693 1.433 4.055L7.3 17.37zM9.14 4.728l-5.545 8.346 3.277 2.294 5.544-8.346L9.14 4.728zM6.07 16.512l-3.276-2.295.53 2.73 2.746-.435zM9.994 3.506 13.271 5.8c.316-.452-.16-1.333-1.065-1.966-.905-.634-1.895-.78-2.212-.328zM8 18.5 9.375 17H19v1.5H8z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.999 2H15a1 1 0 0 1 0 2h-1.004v13a1 1 0 1 1-2 0V4H8.999v13a1 1 0 1 1-2 0v-7A4 4 0 0 1 3 6a4 4 0 0 1 3.999-4z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle cx=\\\"9.5\\\" cy=\\\"4.5\\\" r=\\\"1.5\\\"/><circle cx=\\\"9.5\\\" cy=\\\"10.5\\\" r=\\\"1.5\\\"/><circle cx=\\\"9.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M5 3.25a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0\\\"/><path d=\\\"M12 3.25a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0\\\"/><path d=\\\"M5 10a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0\\\"/><path d=\\\"M12 10a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0\\\"/><path d=\\\"M5 16.75a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0\\\"/><path d=\\\"M12 16.75a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m14.958 9.367-2.189 1.837a.75.75 0 0 0 .965 1.149l3.788-3.18a.747.747 0 0 0 .21-.284.75.75 0 0 0-.17-.945L13.77 4.762a.75.75 0 1 0-.964 1.15l2.331 1.955H6.22A.75.75 0 0 0 6 7.9a4 4 0 1 0 1.477 7.718l-.344-1.489A2.5 2.5 0 1 1 6.039 9.4l-.008-.032h8.927z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m5.042 9.367 2.189 1.837a.75.75 0 0 1-.965 1.149l-3.788-3.18a.747.747 0 0 1-.21-.284.75.75 0 0 1 .17-.945L6.23 4.762a.75.75 0 1 1 .964 1.15L4.863 7.866h8.917A.75.75 0 0 1 14 7.9a4 4 0 1 1-1.477 7.718l.344-1.489a2.5 2.5 0 1 0 1.094-4.73l.008-.032H5.042z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0C1 4.784 1.777 4 2.75 4c.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75C1.784 7.5 1 6.723 1 5.75zm6 9c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0c0-.966.777-1.75 1.75-1.75.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75-.966 0-1.75-.777-1.75-1.75z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM3.5 3v5H2V3.7H1v-1h2.5V3zM.343 17.857l2.59-3.257H2.92a.6.6 0 1 0-1.04 0H.302a2 2 0 1 1 3.995 0h-.001c-.048.405-.16.734-.333.988-.175.254-.59.692-1.244 1.312H4.3v1h-4l.043-.043zM7 14.75a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm5 6c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM2.75 16.5h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 1 0 0 1.5zM1.632 6.95 5.02 9.358a.4.4 0 0 1-.013.661l-3.39 2.207A.4.4 0 0 1 1 11.892V7.275a.4.4 0 0 1 .632-.326z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm5 6c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM2.75 16.5h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 1 0 0 1.5zm1.618-9.55L.98 9.358a.4.4 0 0 0 .013.661l3.39 2.207A.4.4 0 0 0 5 11.892V7.275a.4.4 0 0 0-.632-.326z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M3 5.5v3h4v-3H3Zm0 4v3h4v-3H3Zm0 4v3h4v-3H3Zm5 3h4v-3H8v3Zm5 0h4v-3h-4v3Zm4-4v-3h-4v3h4Zm0-4v-3h-4v3h4Zm1.5 8A1.5 1.5 0 0 1 17 18H3a1.5 1.5 0 0 1-1.5-1.5V3c.222-.863 1.068-1.5 2-1.5h13c.932 0 1.778.637 2 1.5v13.5Zm-6.5-4v-3H8v3h4Zm0-4v-3H8v3h4Z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { CKEditorError, logWarning } from 'ckeditor5/src/utils.js';\n/**\n * @module alignment/utils\n */\n/**\n * The list of supported alignment options:\n *\n * * `'left'`,\n * * `'right'`,\n * * `'center'`,\n * * `'justify'`\n */\nexport const supportedOptions = ['left', 'right', 'center', 'justify'];\n/**\n * Checks whether the passed option is supported by {@link module:alignment/alignmentediting~AlignmentEditing}.\n *\n * @param option The option value to check.\n */\nexport function isSupported(option) {\n    return supportedOptions.includes(option);\n}\n/**\n * Checks whether alignment is the default one considering the direction\n * of the editor content.\n *\n * @param alignment The name of the alignment to check.\n * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n */\nexport function isDefault(alignment, locale) {\n    // Right now only LTR is supported so the 'left' value is always the default one.\n    if (locale.contentLanguageDirection == 'rtl') {\n        return alignment === 'right';\n    }\n    else {\n        return alignment === 'left';\n    }\n}\n/**\n * Brings the configuration to the common form, an array of objects.\n *\n * @param configuredOptions Alignment plugin configuration.\n * @returns Normalized object holding the configuration.\n */\nexport function normalizeAlignmentOptions(configuredOptions) {\n    const normalizedOptions = configuredOptions\n        .map(option => {\n        let result;\n        if (typeof option == 'string') {\n            result = { name: option };\n        }\n        else {\n            result = option;\n        }\n        return result;\n    })\n        // Remove all unknown options.\n        .filter(option => {\n        const isNameValid = supportedOptions.includes(option.name);\n        if (!isNameValid) {\n            /**\n             * The `name` in one of the `alignment.options` is not recognized.\n             * The available options are: `'left'`, `'right'`, `'center'` and `'justify'`.\n             *\n             * @error alignment-config-name-not-recognized\n             * @param option Options with unknown value of the `name` property.\n             */\n            logWarning('alignment-config-name-not-recognized', { option });\n        }\n        return isNameValid;\n    });\n    const classNameCount = normalizedOptions.filter(option => Boolean(option.className)).length;\n    // We either use classes for all styling options or for none.\n    if (classNameCount && classNameCount < normalizedOptions.length) {\n        /**\n         * The `className` property has to be defined for all options once at least one option declares `className`.\n         *\n         * @error alignment-config-classnames-are-missing\n         * @param configuredOptions Contents of `alignment.options`.\n         */\n        throw new CKEditorError('alignment-config-classnames-are-missing', { configuredOptions });\n    }\n    // Validate resulting config.\n    normalizedOptions.forEach((option, index, allOptions) => {\n        const succeedingOptions = allOptions.slice(index + 1);\n        const nameAlreadyExists = succeedingOptions.some(item => item.name == option.name);\n        if (nameAlreadyExists) {\n            /**\n             * The same `name` in one of the `alignment.options` was already declared.\n             * Each `name` representing one alignment option can be set exactly once.\n             *\n             * @error alignment-config-name-already-defined\n             * @param option First option that declares given `name`.\n             * @param configuredOptions Contents of `alignment.options`.\n             */\n            throw new CKEditorError('alignment-config-name-already-defined', { option, configuredOptions });\n        }\n        // The `className` property is present. Check for duplicates then.\n        if (option.className) {\n            const classNameAlreadyExists = succeedingOptions.some(item => item.className == option.className);\n            if (classNameAlreadyExists) {\n                /**\n                 * The same `className` in one of the `alignment.options` was already declared.\n                 *\n                 * @error alignment-config-classname-already-defined\n                 * @param option First option that declares given `className`.\n                 * @param configuredOptions\n                 * Contents of `alignment.options`.\n                 */\n                throw new CKEditorError('alignment-config-classname-already-defined', { option, configuredOptions });\n            }\n        }\n    });\n    return normalizedOptions;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module alignment/alignmentcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { first } from 'ckeditor5/src/utils.js';\nimport { isDefault } from './utils.js';\nconst ALIGNMENT = 'alignment';\n/**\n * The alignment command plugin.\n */\nexport default class AlignmentCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const firstBlock = first(this.editor.model.document.selection.getSelectedBlocks());\n        // As first check whether to enable or disable the command as the value will always be false if the command cannot be enabled.\n        this.isEnabled = Boolean(firstBlock) && this._canBeAligned(firstBlock);\n        if (this.isEnabled && firstBlock.hasAttribute('alignment')) {\n            this.value = firstBlock.getAttribute('alignment');\n        }\n        else {\n            this.value = locale.contentLanguageDirection === 'rtl' ? 'right' : 'left';\n        }\n    }\n    /**\n     * Executes the command. Applies the alignment `value` to the selected blocks.\n     * If no `value` is passed, the `value` is the default one or it is equal to the currently selected block's alignment attribute,\n     * the command will remove the attribute from the selected blocks.\n     *\n     * @param options Options for the executed command.\n     * @param options.value The value to apply.\n     * @fires execute\n     */\n    execute(options = {}) {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const model = editor.model;\n        const doc = model.document;\n        const value = options.value;\n        model.change(writer => {\n            // Get only those blocks from selected that can have alignment set\n            const blocks = Array.from(doc.selection.getSelectedBlocks()).filter(block => this._canBeAligned(block));\n            const currentAlignment = blocks[0].getAttribute('alignment');\n            // Remove alignment attribute if current alignment is:\n            // - default (should not be stored in model as it will bloat model data)\n            // - equal to currently set\n            // - or no value is passed - denotes default alignment.\n            const removeAlignment = isDefault(value, locale) || currentAlignment === value || !value;\n            if (removeAlignment) {\n                removeAlignmentFromSelection(blocks, writer);\n            }\n            else {\n                setAlignmentOnSelection(blocks, writer, value);\n            }\n        });\n    }\n    /**\n     * Checks whether a block can have alignment set.\n     *\n     * @param block The block to be checked.\n     */\n    _canBeAligned(block) {\n        return this.editor.model.schema.checkAttribute(block, ALIGNMENT);\n    }\n}\n/**\n * Removes the alignment attribute from blocks.\n */\nfunction removeAlignmentFromSelection(blocks, writer) {\n    for (const block of blocks) {\n        writer.removeAttribute(ALIGNMENT, block);\n    }\n}\n/**\n * Sets the alignment attribute on blocks.\n */\nfunction setAlignmentOnSelection(blocks, writer, alignment) {\n    for (const block of blocks) {\n        writer.setAttribute(ALIGNMENT, alignment, block);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module alignment/alignmentediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport AlignmentCommand from './alignmentcommand.js';\nimport { isDefault, isSupported, normalizeAlignmentOptions, supportedOptions } from './utils.js';\n/**\n * The alignment editing feature. It introduces the {@link module:alignment/alignmentcommand~AlignmentCommand command} and adds\n * the `alignment` attribute for block elements in the {@link module:engine/model/model~Model model}.\n */\nexport default class AlignmentEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'AlignmentEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('alignment', {\n            options: supportedOptions.map(option => ({ name: option }))\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const schema = editor.model.schema;\n        const options = normalizeAlignmentOptions(editor.config.get('alignment.options'));\n        // Filter out unsupported options and those that are redundant, e.g. `left` in LTR / `right` in RTL mode.\n        const optionsToConvert = options.filter(option => isSupported(option.name) && !isDefault(option.name, locale));\n        // Once there is at least one `className` defined, we switch to alignment with classes.\n        const shouldUseClasses = optionsToConvert.some(option => !!option.className);\n        // Allow alignment attribute on all blocks.\n        schema.extend('$block', { allowAttributes: 'alignment' });\n        editor.model.schema.setAttributeProperties('alignment', { isFormatting: true });\n        if (shouldUseClasses) {\n            editor.conversion.attributeToAttribute(buildClassDefinition(optionsToConvert));\n        }\n        else {\n            // Downcast inline styles.\n            editor.conversion.for('downcast').attributeToAttribute(buildDowncastInlineDefinition(optionsToConvert));\n        }\n        const upcastInlineDefinitions = buildUpcastInlineDefinitions(optionsToConvert);\n        // Always upcast from inline styles.\n        for (const definition of upcastInlineDefinitions) {\n            editor.conversion.for('upcast').attributeToAttribute(definition);\n        }\n        const upcastCompatibilityDefinitions = buildUpcastCompatibilityDefinitions(optionsToConvert);\n        // Always upcast from deprecated `align` attribute.\n        for (const definition of upcastCompatibilityDefinitions) {\n            editor.conversion.for('upcast').attributeToAttribute(definition);\n        }\n        editor.commands.add('alignment', new AlignmentCommand(editor));\n    }\n}\n/**\n * Prepare downcast conversion definition for inline alignment styling.\n */\nfunction buildDowncastInlineDefinition(options) {\n    const view = {};\n    for (const { name } of options) {\n        view[name] = {\n            key: 'style',\n            value: {\n                'text-align': name\n            }\n        };\n    }\n    const definition = {\n        model: {\n            key: 'alignment',\n            values: options.map(option => option.name)\n        },\n        view\n    };\n    return definition;\n}\n/**\n * Prepare upcast definitions for inline alignment styles.\n */\nfunction buildUpcastInlineDefinitions(options) {\n    const definitions = [];\n    for (const { name } of options) {\n        definitions.push({\n            view: {\n                key: 'style',\n                value: {\n                    'text-align': name\n                }\n            },\n            model: {\n                key: 'alignment',\n                value: name\n            }\n        });\n    }\n    return definitions;\n}\n/**\n * Prepare upcast definitions for deprecated `align` attribute.\n */\nfunction buildUpcastCompatibilityDefinitions(options) {\n    const definitions = [];\n    for (const { name } of options) {\n        definitions.push({\n            view: {\n                key: 'align',\n                value: name\n            },\n            model: {\n                key: 'alignment',\n                value: name\n            }\n        });\n    }\n    return definitions;\n}\n/**\n * Prepare conversion definitions for upcast and downcast alignment with classes.\n */\nfunction buildClassDefinition(options) {\n    const view = {};\n    for (const option of options) {\n        view[option.name] = {\n            key: 'class',\n            value: option.className\n        };\n    }\n    const definition = {\n        model: {\n            key: 'alignment',\n            values: options.map(option => option.name)\n        },\n        view\n    };\n    return definition;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/viewcollection\n */\nimport { CKEditorError, Collection } from '@ckeditor/ckeditor5-utils';\n/**\n * Collects {@link module:ui/view~View} instances.\n *\n * ```ts\n * const parentView = new ParentView( locale );\n * const collection = new ViewCollection( locale );\n *\n * collection.setParent( parentView.element );\n *\n * const viewA = new ChildView( locale );\n * const viewB = new ChildView( locale );\n * ```\n *\n * View collection renders and manages view {@link module:ui/view~View#element elements}:\n *\n * ```ts\n * collection.add( viewA );\n * collection.add( viewB );\n *\n * console.log( parentView.element.firsChild ); // -> viewA.element\n * console.log( parentView.element.lastChild ); // -> viewB.element\n * ```\n *\n * It {@link module:ui/viewcollection~ViewCollection#delegate propagates} DOM events too:\n *\n * ```ts\n * // Delegate #click and #keydown events from viewA and viewB to the parentView.\n * collection.delegate( 'click' ).to( parentView );\n *\n * parentView.on( 'click', ( evt ) => {\n * \tconsole.log( `${ evt.source } has been clicked.` );\n * } );\n *\n * // This event will be delegated to the parentView.\n * viewB.fire( 'click' );\n * ```\n *\n * **Note**: A view collection can be used directly in the {@link module:ui/template~TemplateDefinition definition}\n * of a {@link module:ui/template~Template template}.\n */\nexport default class ViewCollection extends Collection {\n    /**\n     * Creates a new instance of the {@link module:ui/viewcollection~ViewCollection}.\n     *\n     * @param initialItems The initial items of the collection.\n     */\n    constructor(initialItems = []) {\n        super(initialItems, {\n            // An #id Number attribute should be legal and not break the `ViewCollection` instance.\n            // https://github.com/ckeditor/ckeditor5-ui/issues/93\n            idProperty: 'viewUid'\n        });\n        // Handle {@link module:ui/view~View#element} in DOM when a new view is added to the collection.\n        this.on('add', (evt, view, index) => {\n            this._renderViewIntoCollectionParent(view, index);\n        });\n        // Handle {@link module:ui/view~View#element} in DOM when a view is removed from the collection.\n        this.on('remove', (evt, view) => {\n            if (view.element && this._parentElement) {\n                view.element.remove();\n            }\n        });\n        this._parentElement = null;\n    }\n    /**\n     * Destroys the view collection along with child views.\n     * See the view {@link module:ui/view~View#destroy} method.\n     */\n    destroy() {\n        this.map(view => view.destroy());\n    }\n    /**\n     * Sets the parent HTML element of this collection. When parent is set, {@link #add adding} and\n     * {@link #remove removing} views in the collection synchronizes their\n     * {@link module:ui/view~View#element elements} in the parent element.\n     *\n     * @param element A new parent element.\n     */\n    setParent(elementOrDocFragment) {\n        this._parentElement = elementOrDocFragment;\n        // Take care of the initial collection items passed to the constructor.\n        for (const view of this) {\n            this._renderViewIntoCollectionParent(view);\n        }\n    }\n    /**\n     * Delegates selected events coming from within views in the collection to any\n     * {@link module:utils/emittermixin~Emitter}.\n     *\n     * For the following views and collection:\n     *\n     * ```ts\n     * const viewA = new View();\n     * const viewB = new View();\n     * const viewC = new View();\n     *\n     * const views = parentView.createCollection();\n     *\n     * views.delegate( 'eventX' ).to( viewB );\n     * views.delegate( 'eventX', 'eventY' ).to( viewC );\n     *\n     * views.add( viewA );\n     * ```\n     *\n     * the `eventX` is delegated (fired by) `viewB` and `viewC` along with `customData`:\n     *\n     * ```ts\n     * viewA.fire( 'eventX', customData );\n     * ```\n     *\n     * and `eventY` is delegated (fired by) `viewC` along with `customData`:\n     *\n     * ```ts\n     * viewA.fire( 'eventY', customData );\n     * ```\n     *\n     * See {@link module:utils/emittermixin~Emitter#delegate}.\n     *\n     * @param events {@link module:ui/view~View} event names to be delegated to another\n     * {@link module:utils/emittermixin~Emitter}.\n     * @returns Object with `to` property, a function which accepts the destination\n     * of {@link module:utils/emittermixin~Emitter#delegate delegated} events.\n     */\n    delegate(...events) {\n        if (!events.length || !isStringArray(events)) {\n            /**\n             * All event names must be strings.\n             *\n             * @error ui-viewcollection-delegate-wrong-events\n             */\n            throw new CKEditorError('ui-viewcollection-delegate-wrong-events', this);\n        }\n        return {\n            to: dest => {\n                // Activate delegating on existing views in this collection.\n                for (const view of this) {\n                    for (const evtName of events) {\n                        view.delegate(evtName).to(dest);\n                    }\n                }\n                // Activate delegating on future views in this collection.\n                this.on('add', (evt, view) => {\n                    for (const evtName of events) {\n                        view.delegate(evtName).to(dest);\n                    }\n                });\n                // Deactivate delegating when view is removed from this collection.\n                this.on('remove', (evt, view) => {\n                    for (const evtName of events) {\n                        view.stopDelegating(evtName, dest);\n                    }\n                });\n            }\n        };\n    }\n    /**\n     * This method {@link module:ui/view~View#render renders} a new view added to the collection.\n     *\n     * If the {@link #_parentElement parent element} of the collection is set, this method also adds\n     * the view's {@link module:ui/view~View#element} as a child of the parent in DOM at a specified index.\n     *\n     * **Note**: If index is not specified, the view's element is pushed as the last child\n     * of the parent element.\n     *\n     * @param view A new view added to the collection.\n     * @param index An index the view holds in the collection. When not specified,\n     * the view is added at the end.\n     */\n    _renderViewIntoCollectionParent(view, index) {\n        if (!view.isRendered) {\n            view.render();\n        }\n        if (view.element && this._parentElement) {\n            this._parentElement.insertBefore(view.element, this._parentElement.children[index]);\n        }\n    }\n    /**\n     * Removes a child view from the collection. If the {@link #setParent parent element} of the\n     * collection has been set, the {@link module:ui/view~View#element element} of the view is also removed\n     * in DOM, reflecting the order of the collection.\n     *\n     * See the {@link #add} method.\n     *\n     * @param subject The view to remove, its id or index in the collection.\n     * @returns The removed view.\n     */\n    remove(subject) {\n        return super.remove(subject);\n    }\n}\n/**\n * Check if all entries of the array are of `String` type.\n *\n * @param arr An array to be checked.\n */\nfunction isStringArray(arr) {\n    return arr.every(a => typeof a == 'string');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/template\n */\n/* global document */\nimport View from './view.js';\nimport ViewCollection from './viewcollection.js';\nimport { CKEditorError, EmitterMixin, isNode, toArray } from '@ckeditor/ckeditor5-utils';\nimport { isObject, cloneDeepWith } from 'lodash-es';\nconst xhtmlNs = 'http://www.w3.org/1999/xhtml';\n/**\n * A basic Template class. It renders a DOM HTML element or text from a\n * {@link module:ui/template~TemplateDefinition definition} and supports element attributes, children,\n * bindings to {@link module:utils/observablemixin~Observable observables} and DOM event propagation.\n *\n * A simple template can look like this:\n *\n * ```ts\n * const bind = Template.bind( observable, emitter );\n *\n * new Template( {\n * \ttag: 'p',\n * \tattributes: {\n * \t\tclass: 'foo',\n * \t\tstyle: {\n * \t\t\tbackgroundColor: 'yellow'\n * \t\t}\n * \t},\n * \ton: {\n * \t\tclick: bind.to( 'clicked' )\n * \t},\n * \tchildren: [\n * \t\t'A paragraph.'\n * \t]\n * } ).render();\n * ```\n *\n * and it will render the following HTML element:\n *\n * ```html\n * <p class=\"foo\" style=\"background-color: yellow;\">A paragraph.</p>\n * ```\n *\n * Additionally, the `observable` will always fire `clicked` upon clicking `<p>` in the DOM.\n *\n * See {@link module:ui/template~TemplateDefinition} to know more about templates and complex\n * template definitions.\n */\nexport default class Template extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates an instance of the {@link ~Template} class.\n     *\n     * @param def The definition of the template.\n     */\n    constructor(def) {\n        super();\n        Object.assign(this, normalize(clone(def)));\n        this._isRendered = false;\n        this._revertData = null;\n    }\n    /**\n     * Renders a DOM Node (an HTML element or text) out of the template.\n     *\n     * ```ts\n     * const domNode = new Template( { ... } ).render();\n     * ```\n     *\n     * See: {@link #apply}.\n     */\n    render() {\n        const node = this._renderNode({\n            intoFragment: true\n        });\n        this._isRendered = true;\n        return node;\n    }\n    /**\n     * Applies the template to an existing DOM Node, either HTML element or text.\n     *\n     * **Note:** No new DOM nodes will be created. Applying extends:\n     *\n     * {@link module:ui/template~TemplateDefinition attributes},\n     * {@link module:ui/template~TemplateDefinition event listeners}, and\n     * `textContent` of {@link module:ui/template~TemplateDefinition children} only.\n     *\n     * **Note:** Existing `class` and `style` attributes are extended when a template\n     * is applied to an HTML element, while other attributes and `textContent` are overridden.\n     *\n     * **Note:** The process of applying a template can be easily reverted using the\n     * {@link module:ui/template~Template#revert} method.\n     *\n     * ```ts\n     * const element = document.createElement( 'div' );\n     * const observable = new Model( { divClass: 'my-div' } );\n     * const emitter = Object.create( EmitterMixin );\n     * const bind = Template.bind( observable, emitter );\n     *\n     * new Template( {\n     * \tattributes: {\n     * \t\tid: 'first-div',\n     * \t\tclass: bind.to( 'divClass' )\n     * \t},\n     * \ton: {\n     * \t\tclick: bind( 'elementClicked' ) // Will be fired by the observable.\n     * \t},\n     * \tchildren: [\n     * \t\t'Div text.'\n     * \t]\n     * } ).apply( element );\n     *\n     * console.log( element.outerHTML ); // -> '<div id=\"first-div\" class=\"my-div\"></div>'\n     * ```\n     *\n     * @see module:ui/template~Template#render\n     * @see module:ui/template~Template#revert\n     * @param node Root node for the template to apply.\n     */\n    apply(node) {\n        this._revertData = getEmptyRevertData();\n        this._renderNode({\n            node,\n            intoFragment: false,\n            isApplying: true,\n            revertData: this._revertData\n        });\n        return node;\n    }\n    /**\n     * Reverts a template {@link module:ui/template~Template#apply applied} to a DOM node.\n     *\n     * @param node The root node for the template to revert. In most of the cases, it is the\n     * same node used by {@link module:ui/template~Template#apply}.\n     */\n    revert(node) {\n        if (!this._revertData) {\n            /**\n             * Attempting to revert a template which has not been applied yet.\n             *\n             * @error ui-template-revert-not-applied\n             */\n            throw new CKEditorError('ui-template-revert-not-applied', [this, node]);\n        }\n        this._revertTemplateFromNode(node, this._revertData);\n    }\n    /**\n     * Returns an iterator which traverses the template in search of {@link module:ui/view~View}\n     * instances and returns them one by one.\n     *\n     * ```ts\n     * const viewFoo = new View();\n     * const viewBar = new View();\n     * const viewBaz = new View();\n     * const template = new Template( {\n     * \ttag: 'div',\n     * \tchildren: [\n     * \t\tviewFoo,\n     * \t\t{\n     * \t\t\ttag: 'div',\n     * \t\t\tchildren: [\n     * \t\t\t\tviewBar\n     * \t\t\t]\n     * \t\t},\n     * \t\tviewBaz\n     * \t]\n     * } );\n     *\n     * // Logs: viewFoo, viewBar, viewBaz\n     * for ( const view of template.getViews() ) {\n     * \tconsole.log( view );\n     * }\n     * ```\n     */\n    *getViews() {\n        function* search(def) {\n            if (def.children) {\n                for (const child of def.children) {\n                    if (isView(child)) {\n                        yield child;\n                    }\n                    else if (isTemplate(child)) {\n                        yield* search(child);\n                    }\n                }\n            }\n        }\n        yield* search(this);\n    }\n    /**\n     * An entry point to the interface which binds DOM nodes to\n     * {@link module:utils/observablemixin~Observable observables}.\n     * There are two types of bindings:\n     *\n     * * HTML element attributes or text `textContent` synchronized with attributes of an\n     * {@link module:utils/observablemixin~Observable}. Learn more about {@link module:ui/template~BindChain#to}\n     * and {@link module:ui/template~BindChain#if}.\n     *\n     * ```ts\n     * const bind = Template.bind( observable, emitter );\n     *\n     * new Template( {\n     * \tattributes: {\n     * \t\t// Binds the element \"class\" attribute to observable#classAttribute.\n     * \t\tclass: bind.to( 'classAttribute' )\n     * \t}\n     * } ).render();\n     * ```\n     *\n     * * DOM events fired on HTML element propagated through\n     * {@link module:utils/observablemixin~Observable}. Learn more about {@link module:ui/template~BindChain#to}.\n     *\n     * ```ts\n     * const bind = Template.bind( observable, emitter );\n     *\n     * new Template( {\n     * \ton: {\n     * \t\t// Will be fired by the observable.\n     * \t\tclick: bind( 'elementClicked' )\n     * \t}\n     * } ).render();\n     * ```\n     *\n     * Also see {@link module:ui/view~View#bindTemplate}.\n     *\n     * @param observable An observable which provides boundable attributes.\n     * @param emitter An emitter that listens to observable attribute\n     * changes or DOM Events (depending on the kind of the binding). Usually, a {@link module:ui/view~View} instance.\n     */\n    static bind(observable, emitter) {\n        return {\n            to(eventNameOrFunctionOrAttribute, callback) {\n                return new TemplateToBinding({\n                    eventNameOrFunction: eventNameOrFunctionOrAttribute,\n                    attribute: eventNameOrFunctionOrAttribute,\n                    observable, emitter, callback\n                });\n            },\n            if(attribute, valueIfTrue, callback) {\n                return new TemplateIfBinding({\n                    observable, emitter, attribute, valueIfTrue, callback\n                });\n            }\n        };\n    }\n    /**\n     * Extends an existing {@link module:ui/template~Template} instance with some additional content\n     * from another {@link module:ui/template~TemplateDefinition}.\n     *\n     * ```ts\n     * const bind = Template.bind( observable, emitter );\n     *\n     * const template = new Template( {\n     * \ttag: 'p',\n     * \tattributes: {\n     * \t\tclass: 'a',\n     * \t\tdata-x: bind.to( 'foo' )\n     * \t},\n     * \tchildren: [\n     * \t\t{\n     * \t\t\ttag: 'span',\n     * \t\t\tattributes: {\n     * \t\t\t\tclass: 'b'\n     * \t\t\t},\n     * \t\t\tchildren: [\n     * \t\t\t\t'Span'\n     * \t\t\t]\n     * \t\t}\n     * \t]\n     *  } );\n     *\n     * // Instance-level extension.\n     * Template.extend( template, {\n     * \tattributes: {\n     * \t\tclass: 'b',\n     * \t\tdata-x: bind.to( 'bar' )\n     * \t},\n     * \tchildren: [\n     * \t\t{\n     * \t\t\tattributes: {\n     * \t\t\t\tclass: 'c'\n     * \t\t\t}\n     * \t\t}\n     * \t]\n     * } );\n     *\n     * // Child extension.\n     * Template.extend( template.children[ 0 ], {\n     * \tattributes: {\n     * \t\tclass: 'd'\n     * \t}\n     * } );\n     * ```\n     *\n     * the `outerHTML` of `template.render()` is:\n     *\n     * ```html\n     * <p class=\"a b\" data-x=\"{ observable.foo } { observable.bar }\">\n     * \t<span class=\"b c d\">Span</span>\n     * </p>\n     * ```\n     *\n     * @param template An existing template instance to be extended.\n     * @param def Additional definition to be applied to a template.\n     */\n    static extend(template, def) {\n        if (template._isRendered) {\n            /**\n             * Extending a template after rendering may not work as expected. To make sure\n             * the {@link module:ui/template~Template.extend extending} works for an element,\n             * make sure it happens before {@link module:ui/template~Template#render} is called.\n             *\n             * @error template-extend-render\n             */\n            throw new CKEditorError('template-extend-render', [this, template]);\n        }\n        extendTemplate(template, normalize(clone(def)));\n    }\n    /**\n     * Renders a DOM Node (either an HTML element or text) out of the template.\n     *\n     * @param data Rendering data.\n     */\n    _renderNode(data) {\n        let isInvalid;\n        if (data.node) {\n            // When applying, a definition cannot have \"tag\" and \"text\" at the same time.\n            isInvalid = this.tag && this.text;\n        }\n        else {\n            // When rendering, a definition must have either \"tag\" or \"text\": XOR( this.tag, this.text ).\n            isInvalid = this.tag ? this.text : !this.text;\n        }\n        if (isInvalid) {\n            /**\n             * Node definition cannot have the \"tag\" and \"text\" properties at the same time.\n             * Node definition must have either \"tag\" or \"text\" when rendering a new Node.\n             *\n             * @error ui-template-wrong-syntax\n             */\n            throw new CKEditorError('ui-template-wrong-syntax', this);\n        }\n        if (this.text) {\n            return this._renderText(data);\n        }\n        else {\n            return this._renderElement(data);\n        }\n    }\n    /**\n     * Renders an HTML element out of the template.\n     *\n     * @param data Rendering data.\n     */\n    _renderElement(data) {\n        let node = data.node;\n        if (!node) {\n            node = data.node = document.createElementNS(this.ns || xhtmlNs, this.tag);\n        }\n        this._renderAttributes(data);\n        this._renderElementChildren(data);\n        this._setUpListeners(data);\n        return node;\n    }\n    /**\n     * Renders a text node out of {@link module:ui/template~Template#text}.\n     *\n     * @param data Rendering data.\n     */\n    _renderText(data) {\n        let node = data.node;\n        // Save the original textContent to revert it in #revert().\n        if (node) {\n            data.revertData.text = node.textContent;\n        }\n        else {\n            node = data.node = document.createTextNode('');\n        }\n        // Check if this Text Node is bound to Observable. Cases:\n        //\n        //\t\ttext: [ Template.bind( ... ).to( ... ) ]\n        //\n        //\t\ttext: [\n        //\t\t\t'foo',\n        //\t\t\tTemplate.bind( ... ).to( ... ),\n        //\t\t\t...\n        //\t\t]\n        //\n        if (hasTemplateBinding(this.text)) {\n            this._bindToObservable({\n                schema: this.text,\n                updater: getTextUpdater(node),\n                data\n            });\n        }\n        // Simply set text. Cases:\n        //\n        //\t\ttext: [ 'all', 'are', 'static' ]\n        //\n        //\t\ttext: [ 'foo' ]\n        //\n        else {\n            node.textContent = this.text.join('');\n        }\n        return node;\n    }\n    /**\n     * Renders HTML element attributes out of {@link module:ui/template~Template#attributes}.\n     *\n     * @param data Rendering data.\n     */\n    _renderAttributes(data) {\n        if (!this.attributes) {\n            return;\n        }\n        const node = data.node;\n        const revertData = data.revertData;\n        for (const attrName in this.attributes) {\n            // Current attribute value in DOM.\n            const domAttrValue = node.getAttribute(attrName);\n            // The value to be set.\n            const attrValue = this.attributes[attrName];\n            // Save revert data.\n            if (revertData) {\n                revertData.attributes[attrName] = domAttrValue;\n            }\n            // Detect custom namespace:\n            //\n            //\t\tclass: {\n            //\t\t\tns: 'abc',\n            //\t\t\tvalue: Template.bind( ... ).to( ... )\n            //\t\t}\n            //\n            const attrNs = isNamespaced(attrValue) ? attrValue[0].ns : null;\n            // Activate binding if one is found. Cases:\n            //\n            //\t\tclass: [\n            //\t\t\tTemplate.bind( ... ).to( ... )\n            //\t\t]\n            //\n            //\t\tclass: [\n            //\t\t\t'bar',\n            //\t\t\tTemplate.bind( ... ).to( ... ),\n            //\t\t\t'baz'\n            //\t\t]\n            //\n            //\t\tclass: {\n            //\t\t\tns: 'abc',\n            //\t\t\tvalue: Template.bind( ... ).to( ... )\n            //\t\t}\n            //\n            if (hasTemplateBinding(attrValue)) {\n                // Normalize attributes with additional data like namespace:\n                //\n                //\t\tclass: {\n                //\t\t\tns: 'abc',\n                //\t\t\tvalue: [ ... ]\n                //\t\t}\n                //\n                const valueToBind = isNamespaced(attrValue) ? attrValue[0].value : attrValue;\n                // Extend the original value of attributes like \"style\" and \"class\",\n                // don't override them.\n                if (revertData && shouldExtend(attrName)) {\n                    valueToBind.unshift(domAttrValue);\n                }\n                this._bindToObservable({\n                    schema: valueToBind,\n                    updater: getAttributeUpdater(node, attrName, attrNs),\n                    data\n                });\n            }\n            // Style attribute could be an Object so it needs to be parsed in a specific way.\n            //\n            //\t\tstyle: {\n            //\t\t\twidth: '100px',\n            //\t\t\theight: Template.bind( ... ).to( ... )\n            //\t\t}\n            //\n            else if (attrName == 'style' && typeof attrValue[0] !== 'string') {\n                this._renderStyleAttribute(attrValue[0], data);\n            }\n            // Otherwise simply set the static attribute:\n            //\n            //\t\tclass: [ 'foo' ]\n            //\n            //\t\tclass: [ 'all', 'are', 'static' ]\n            //\n            //\t\tclass: [\n            //\t\t\t{\n            //\t\t\t\tns: 'abc',\n            //\t\t\t\tvalue: [ 'foo' ]\n            //\t\t\t}\n            //\t\t]\n            //\n            else {\n                // Extend the original value of attributes like \"style\" and \"class\",\n                // don't override them.\n                if (revertData && domAttrValue && shouldExtend(attrName)) {\n                    attrValue.unshift(domAttrValue);\n                }\n                const value = attrValue\n                    // Retrieve \"values\" from:\n                    //\n                    //\t\tclass: [\n                    //\t\t\t{\n                    //\t\t\t\tns: 'abc',\n                    //\t\t\t\tvalue: [ ... ]\n                    //\t\t\t}\n                    //\t\t]\n                    //\n                    .map((val) => val ? (val.value || val) : val)\n                    // Flatten the array.\n                    .reduce((prev, next) => prev.concat(next), [])\n                    // Convert into string.\n                    .reduce(arrayValueReducer, '');\n                if (!isFalsy(value)) {\n                    node.setAttributeNS(attrNs, attrName, value);\n                }\n            }\n        }\n    }\n    /**\n     * Renders the `style` attribute of an HTML element based on\n     * {@link module:ui/template~Template#attributes}.\n     *\n     * A style attribute is an object with static values:\n     *\n     * ```ts\n     * attributes: {\n     * \tstyle: {\n     * \t\tcolor: 'red'\n     * \t}\n     * }\n     * ```\n     *\n     * or values bound to {@link module:ui/model~Model} properties:\n     *\n     * ```ts\n     * attributes: {\n     * \tstyle: {\n     * \t\tcolor: bind.to( ... )\n     * \t}\n     * }\n     * ```\n     *\n     * Note: The `style` attribute is rendered without setting the namespace. It does not seem to be\n     * needed.\n     *\n     * @param styles Styles located in `attributes.style` of {@link module:ui/template~TemplateDefinition}.\n     * @param data Rendering data.\n     */\n    _renderStyleAttribute(styles, data) {\n        const node = data.node;\n        for (const styleName in styles) {\n            const styleValue = styles[styleName];\n            // Cases:\n            //\n            //\t\tstyle: {\n            //\t\t\tcolor: bind.to( 'attribute' )\n            //\t\t}\n            //\n            if (hasTemplateBinding(styleValue)) {\n                this._bindToObservable({\n                    schema: [styleValue],\n                    updater: getStyleUpdater(node, styleName),\n                    data\n                });\n            }\n            // Cases:\n            //\n            //\t\tstyle: {\n            //\t\t\tcolor: 'red'\n            //\t\t}\n            //\n            else {\n                node.style[styleName] = styleValue;\n            }\n        }\n    }\n    /**\n     * Recursively renders HTML element's children from {@link module:ui/template~Template#children}.\n     *\n     * @param data Rendering data.\n     */\n    _renderElementChildren(data) {\n        const node = data.node;\n        const container = data.intoFragment ? document.createDocumentFragment() : node;\n        const isApplying = data.isApplying;\n        let childIndex = 0;\n        for (const child of this.children) {\n            if (isViewCollection(child)) {\n                if (!isApplying) {\n                    child.setParent(node);\n                    // Note: ViewCollection renders its children.\n                    for (const view of child) {\n                        container.appendChild(view.element);\n                    }\n                }\n            }\n            else if (isView(child)) {\n                if (!isApplying) {\n                    if (!child.isRendered) {\n                        child.render();\n                    }\n                    container.appendChild(child.element);\n                }\n            }\n            else if (isNode(child)) {\n                container.appendChild(child);\n            }\n            else {\n                if (isApplying) {\n                    const revertData = data.revertData;\n                    const childRevertData = getEmptyRevertData();\n                    revertData.children.push(childRevertData);\n                    child._renderNode({\n                        intoFragment: false,\n                        node: container.childNodes[childIndex++],\n                        isApplying: true,\n                        revertData: childRevertData\n                    });\n                }\n                else {\n                    container.appendChild(child.render());\n                }\n            }\n        }\n        if (data.intoFragment) {\n            node.appendChild(container);\n        }\n    }\n    /**\n     * Activates `on` event listeners from the {@link module:ui/template~TemplateDefinition}\n     * on an HTML element.\n     *\n     * @param data Rendering data.\n     */\n    _setUpListeners(data) {\n        if (!this.eventListeners) {\n            return;\n        }\n        for (const key in this.eventListeners) {\n            const revertBindings = this.eventListeners[key].map(schemaItem => {\n                const [domEvtName, domSelector] = key.split('@');\n                return schemaItem.activateDomEventListener(domEvtName, domSelector, data);\n            });\n            if (data.revertData) {\n                data.revertData.bindings.push(revertBindings);\n            }\n        }\n    }\n    /**\n     * For a given {@link module:ui/template~TemplateValueSchema} containing {@link module:ui/template~TemplateBinding}\n     * activates the binding and sets its initial value.\n     *\n     * Note: {@link module:ui/template~TemplateValueSchema} can be for HTML element attributes or\n     * text node `textContent`.\n     *\n     * @param options Binding options.\n     * @param options.updater A function which updates the DOM (like attribute or text).\n     * @param options.data Rendering data.\n     */\n    _bindToObservable({ schema, updater, data }) {\n        const revertData = data.revertData;\n        // Set initial values.\n        syncValueSchemaValue(schema, updater, data);\n        const revertBindings = schema\n            // Filter \"falsy\" (false, undefined, null, '') value schema components out.\n            .filter(item => !isFalsy(item))\n            // Filter inactive bindings from schema, like static strings ('foo'), numbers (42), etc.\n            .filter((item) => item.observable)\n            // Once only the actual binding are left, let the emitter listen to observable change:attribute event.\n            // TODO: Reduce the number of listeners attached as many bindings may listen\n            // to the same observable attribute.\n            .map(templateBinding => templateBinding.activateAttributeListener(schema, updater, data));\n        if (revertData) {\n            revertData.bindings.push(revertBindings);\n        }\n    }\n    /**\n     * Reverts {@link module:ui/template~RenderData#revertData template data} from a node to\n     * return it to the original state.\n     *\n     * @param node A node to be reverted.\n     * @param revertData An object that stores information about what changes have been made by\n     * {@link #apply} to the node. See {@link module:ui/template~RenderData#revertData} for more information.\n     */\n    _revertTemplateFromNode(node, revertData) {\n        for (const binding of revertData.bindings) {\n            // Each binding may consist of several observable+observable#attribute.\n            // like the following has 2:\n            //\n            //\t\tclass: [\n            //\t\t\t'x',\n            //\t\t\tbind.to( 'foo' ),\n            //\t\t\t'y',\n            //\t\t\tbind.to( 'bar' )\n            //\t\t]\n            //\n            for (const revertBinding of binding) {\n                revertBinding();\n            }\n        }\n        if (revertData.text) {\n            node.textContent = revertData.text;\n            return;\n        }\n        const element = node;\n        for (const attrName in revertData.attributes) {\n            const attrValue = revertData.attributes[attrName];\n            // When the attribute has **not** been set before #apply().\n            if (attrValue === null) {\n                element.removeAttribute(attrName);\n            }\n            else {\n                element.setAttribute(attrName, attrValue);\n            }\n        }\n        for (let i = 0; i < revertData.children.length; ++i) {\n            this._revertTemplateFromNode(element.childNodes[i], revertData.children[i]);\n        }\n    }\n}\n/**\n * Describes a binding created by the {@link module:ui/template~Template.bind} interface.\n *\n * @internal\n */\nexport class TemplateBinding {\n    /**\n     * Creates an instance of the {@link module:ui/template~TemplateBinding} class.\n     *\n     * @param def The definition of the binding.\n     */\n    constructor(def) {\n        this.attribute = def.attribute;\n        this.observable = def.observable;\n        this.emitter = def.emitter;\n        this.callback = def.callback;\n    }\n    /**\n     * Returns the value of the binding. It is the value of the {@link module:ui/template~TemplateBinding#attribute} in\n     * {@link module:ui/template~TemplateBinding#observable}. The value may be processed by the\n     * {@link module:ui/template~TemplateBinding#callback}, if such has been passed to the binding.\n     *\n     * @param node A native DOM node, passed to the custom {@link module:ui/template~TemplateBinding#callback}.\n     * @returns The value of {@link module:ui/template~TemplateBinding#attribute} in\n     * {@link module:ui/template~TemplateBinding#observable}.\n     */\n    getValue(node) {\n        const value = this.observable[this.attribute];\n        return this.callback ? this.callback(value, node) : value;\n    }\n    /**\n     * Activates the listener which waits for changes of the {@link module:ui/template~TemplateBinding#attribute} in\n     * {@link module:ui/template~TemplateBinding#observable}, then updates the DOM with the aggregated\n     * value of {@link module:ui/template~TemplateValueSchema}.\n     *\n     * @param schema A full schema to generate an attribute or text in the DOM.\n     * @param updater A DOM updater function used to update the native DOM attribute or text.\n     * @param data Rendering data.\n     * @returns A function to sever the listener binding.\n     */\n    activateAttributeListener(schema, updater, data) {\n        const callback = () => syncValueSchemaValue(schema, updater, data);\n        this.emitter.listenTo(this.observable, `change:${this.attribute}`, callback);\n        // Allows revert of the listener.\n        return () => {\n            this.emitter.stopListening(this.observable, `change:${this.attribute}`, callback);\n        };\n    }\n}\n/**\n * Describes either:\n *\n * * a binding to an {@link module:utils/observablemixin~Observable},\n * * or a native DOM event binding.\n *\n * It is created by the {@link module:ui/template~BindChain#to} method.\n *\n * @internal\n */\nexport class TemplateToBinding extends TemplateBinding {\n    constructor(def) {\n        super(def);\n        this.eventNameOrFunction = def.eventNameOrFunction;\n    }\n    /**\n     * Activates the listener for the native DOM event, which when fired, is propagated by\n     * the {@link module:ui/template~TemplateBinding#emitter}.\n     *\n     * @param domEvtName The name of the native DOM event.\n     * @param domSelector The selector in the DOM to filter delegated events.\n     * @param data Rendering data.\n     * @returns A function to sever the listener binding.\n     */\n    activateDomEventListener(domEvtName, domSelector, data) {\n        const callback = (evt, domEvt) => {\n            if (!domSelector || domEvt.target.matches(domSelector)) {\n                if (typeof this.eventNameOrFunction == 'function') {\n                    this.eventNameOrFunction(domEvt);\n                }\n                else {\n                    this.observable.fire(this.eventNameOrFunction, domEvt);\n                }\n            }\n        };\n        this.emitter.listenTo(data.node, domEvtName, callback);\n        // Allows revert of the listener.\n        return () => {\n            this.emitter.stopListening(data.node, domEvtName, callback);\n        };\n    }\n}\n/**\n * Describes a binding to {@link module:utils/observablemixin~Observable} created by the {@link module:ui/template~BindChain#if}\n * method.\n *\n * @internal\n */\nexport class TemplateIfBinding extends TemplateBinding {\n    constructor(def) {\n        super(def);\n        this.valueIfTrue = def.valueIfTrue;\n    }\n    /**\n     * @inheritDoc\n     */\n    getValue(node) {\n        const value = super.getValue(node);\n        return isFalsy(value) ? false : (this.valueIfTrue || true);\n    }\n}\n/**\n * Checks whether given {@link module:ui/template~TemplateValueSchema} contains a\n * {@link module:ui/template~TemplateBinding}.\n */\nfunction hasTemplateBinding(schema) {\n    if (!schema) {\n        return false;\n    }\n    // Normalize attributes with additional data like namespace:\n    //\n    //\t\tclass: {\n    //\t\t\tns: 'abc',\n    //\t\t\tvalue: [ ... ]\n    //\t\t}\n    //\n    if (schema.value) {\n        schema = schema.value;\n    }\n    if (Array.isArray(schema)) {\n        return schema.some(hasTemplateBinding);\n    }\n    else if (schema instanceof TemplateBinding) {\n        return true;\n    }\n    return false;\n}\n/**\n * Assembles the value using {@link module:ui/template~TemplateValueSchema} and stores it in a form of\n * an Array. Each entry of the Array corresponds to one of {@link module:ui/template~TemplateValueSchema}\n * items.\n *\n * @param node DOM Node updated when {@link module:utils/observablemixin~Observable} changes.\n */\nfunction getValueSchemaValue(schema, node) {\n    return schema.map(schemaItem => {\n        // Process {@link module:ui/template~TemplateBinding} bindings.\n        if (schemaItem instanceof TemplateBinding) {\n            return schemaItem.getValue(node);\n        }\n        // All static values like strings, numbers, and \"falsy\" values (false, null, undefined, '', etc.) just pass.\n        return schemaItem;\n    });\n}\n/**\n * A function executed each time the bound Observable attribute changes, which updates the DOM with a value\n * constructed from {@link module:ui/template~TemplateValueSchema}.\n *\n * @param updater A function which updates the DOM (like attribute or text).\n * @param node DOM Node updated when {@link module:utils/observablemixin~Observable} changes.\n */\nfunction syncValueSchemaValue(schema, updater, { node }) {\n    const values = getValueSchemaValue(schema, node);\n    let value;\n    // Check if schema is a single Template.bind.if, like:\n    //\n    //\t\tclass: Template.bind.if( 'foo' )\n    //\n    if (schema.length == 1 && schema[0] instanceof TemplateIfBinding) {\n        value = values[0];\n    }\n    else {\n        value = values.reduce(arrayValueReducer, '');\n    }\n    if (isFalsy(value)) {\n        updater.remove();\n    }\n    else {\n        updater.set(value);\n    }\n}\n/**\n * Returns an object consisting of `set` and `remove` functions, which\n * can be used in the context of DOM Node to set or reset `textContent`.\n * @see module:ui/view~View#_bindToObservable\n *\n * @param node DOM Node to be modified.\n */\nfunction getTextUpdater(node) {\n    return {\n        set(value) {\n            node.textContent = value;\n        },\n        remove() {\n            node.textContent = '';\n        }\n    };\n}\n/**\n * Returns an object consisting of `set` and `remove` functions, which\n * can be used in the context of DOM Node to set or reset an attribute.\n * @see module:ui/view~View#_bindToObservable\n *\n * @param el DOM Node to be modified.\n * @param attrName Name of the attribute to be modified.\n * @param ns Namespace to use.\n */\nfunction getAttributeUpdater(el, attrName, ns) {\n    return {\n        set(value) {\n            el.setAttributeNS(ns, attrName, value);\n        },\n        remove() {\n            el.removeAttributeNS(ns, attrName);\n        }\n    };\n}\n/**\n * Returns an object consisting of `set` and `remove` functions, which\n * can be used in the context of CSSStyleDeclaration to set or remove a style.\n * @see module:ui/view~View#_bindToObservable\n *\n * @param el DOM Node to be modified.\n * @param styleName Name of the style to be modified.\n */\nfunction getStyleUpdater(el, styleName) {\n    return {\n        set(value) {\n            el.style[styleName] = value;\n        },\n        remove() {\n            el.style[styleName] = null;\n        }\n    };\n}\n/**\n * Clones definition of the template.\n */\nfunction clone(def) {\n    const clone = cloneDeepWith(def, value => {\n        // Don't clone the `Template.bind`* bindings because of the references to Observable\n        // and DomEmitterMixin instances inside, which would also be traversed and cloned by greedy\n        // cloneDeepWith algorithm. There's no point in cloning Observable/DomEmitterMixins\n        // along with the definition.\n        //\n        // Don't clone Template instances if provided as a child. They're simply #render()ed\n        // and nothing should interfere.\n        //\n        // Also don't clone View instances if provided as a child of the Template. The template\n        // instance will be extracted from the View during the normalization and there's no need\n        // to clone it.\n        if (value && (value instanceof TemplateBinding || isTemplate(value) || isView(value) || isViewCollection(value))) {\n            return value;\n        }\n    });\n    return clone;\n}\n/**\n * Normalizes given {@link module:ui/template~TemplateDefinition}.\n *\n * See:\n *  * {@link normalizeAttributes}\n *  * {@link normalizeListeners}\n *  * {@link normalizePlainTextDefinition}\n *  * {@link normalizeTextDefinition}\n *\n * @param def A template definition.\n * @returns Normalized definition.\n */\nfunction normalize(def) {\n    if (typeof def == 'string') {\n        def = normalizePlainTextDefinition(def);\n    }\n    else if (def.text) {\n        normalizeTextDefinition(def);\n    }\n    if (def.on) {\n        def.eventListeners = normalizeListeners(def.on);\n        // Template mixes EmitterMixin, so delete #on to avoid collision.\n        delete def.on;\n    }\n    if (!def.text) {\n        if (def.attributes) {\n            normalizeAttributes(def.attributes);\n        }\n        const children = [];\n        if (def.children) {\n            if (isViewCollection(def.children)) {\n                children.push(def.children);\n            }\n            else {\n                for (const child of def.children) {\n                    if (isTemplate(child) || isView(child) || isNode(child)) {\n                        children.push(child);\n                    }\n                    else {\n                        children.push(new Template(child));\n                    }\n                }\n            }\n        }\n        def.children = children;\n    }\n    return def;\n}\n/**\n * Normalizes \"attributes\" section of {@link module:ui/template~TemplateDefinition}.\n *\n * ```\n * attributes: {\n * \ta: 'bar',\n * \tb: {@link module:ui/template~TemplateBinding},\n * \tc: {\n * \t\tvalue: 'bar'\n * \t}\n * }\n * ```\n *\n * becomes\n *\n * ```\n * attributes: {\n * \ta: [ 'bar' ],\n * \tb: [ {@link module:ui/template~TemplateBinding} ],\n * \tc: {\n * \t\tvalue: [ 'bar' ]\n * \t}\n * }\n * ```\n */\nfunction normalizeAttributes(attributes) {\n    for (const a in attributes) {\n        if (attributes[a].value) {\n            attributes[a].value = toArray(attributes[a].value);\n        }\n        arrayify(attributes, a);\n    }\n}\n/**\n * Normalizes \"on\" section of {@link module:ui/template~TemplateDefinition}.\n *\n * ```\n * on: {\n * \ta: 'bar',\n * \tb: {@link module:ui/template~TemplateBinding},\n * \tc: [ {@link module:ui/template~TemplateBinding}, () => { ... } ]\n * }\n * ```\n *\n * becomes\n *\n * ```\n * on: {\n * \ta: [ 'bar' ],\n * \tb: [ {@link module:ui/template~TemplateBinding} ],\n * \tc: [ {@link module:ui/template~TemplateBinding}, () => { ... } ]\n * }\n * ```\n *\n * @returns Object containing normalized listeners.\n */\nfunction normalizeListeners(listeners) {\n    for (const l in listeners) {\n        arrayify(listeners, l);\n    }\n    return listeners;\n}\n/**\n * Normalizes \"string\" {@link module:ui/template~TemplateDefinition}.\n *\n * ```\n * \"foo\"\n * ```\n *\n * becomes\n *\n * ```\n * { text: [ 'foo' ] },\n * ```\n *\n * @returns Normalized template definition.\n */\nfunction normalizePlainTextDefinition(def) {\n    return {\n        text: [def]\n    };\n}\n/**\n * Normalizes text {@link module:ui/template~TemplateDefinition}.\n *\n * ```\n * children: [\n * \t{ text: 'def' },\n * \t{ text: {@link module:ui/template~TemplateBinding} }\n * ]\n * ```\n *\n * becomes\n *\n * ```\n * children: [\n * \t{ text: [ 'def' ] },\n * \t{ text: [ {@link module:ui/template~TemplateBinding} ] }\n * ]\n * ```\n */\nfunction normalizeTextDefinition(def) {\n    def.text = toArray(def.text);\n}\n/**\n * Wraps an entry in Object in an Array, if not already one.\n *\n * ```\n * {\n * \tx: 'y',\n * \ta: [ 'b' ]\n * }\n * ```\n *\n * becomes\n *\n * ```\n * {\n * \tx: [ 'y' ],\n * \ta: [ 'b' ]\n * }\n * ```\n */\nfunction arrayify(obj, key) {\n    obj[key] = toArray(obj[key]);\n}\n/**\n * A helper which concatenates the value avoiding unwanted\n * leading white spaces.\n */\nfunction arrayValueReducer(prev, cur) {\n    if (isFalsy(cur)) {\n        return prev;\n    }\n    else if (isFalsy(prev)) {\n        return cur;\n    }\n    else {\n        return `${prev} ${cur}`;\n    }\n}\n/**\n * Extends one object defined in the following format:\n *\n * ```\n * {\n * \tkey1: [Array1],\n * \tkey2: [Array2],\n * \t...\n * \tkeyN: [ArrayN]\n * }\n * ```\n *\n * with another object of the same data format.\n *\n * @param obj Base object.\n * @param ext Object extending base.\n */\nfunction extendObjectValueArray(obj, ext) {\n    for (const a in ext) {\n        if (obj[a]) {\n            obj[a].push(...ext[a]);\n        }\n        else {\n            obj[a] = ext[a];\n        }\n    }\n}\n/**\n * A helper for {@link module:ui/template~Template#extend}. Recursively extends {@link module:ui/template~Template} instance\n * with content from {@link module:ui/template~TemplateDefinition}. See {@link module:ui/template~Template#extend} to learn more.\n *\n * @param def A template instance to be extended.\n * @param def A definition which is to extend the template instance.\n * @param Error context.\n */\nfunction extendTemplate(template, def) {\n    if (def.attributes) {\n        if (!template.attributes) {\n            template.attributes = {};\n        }\n        extendObjectValueArray(template.attributes, def.attributes);\n    }\n    if (def.eventListeners) {\n        if (!template.eventListeners) {\n            template.eventListeners = {};\n        }\n        extendObjectValueArray(template.eventListeners, def.eventListeners);\n    }\n    if (def.text) {\n        template.text.push(...def.text);\n    }\n    if (def.children && def.children.length) {\n        if (template.children.length != def.children.length) {\n            /**\n             * The number of children in extended definition does not match.\n             *\n             * @error ui-template-extend-children-mismatch\n             */\n            throw new CKEditorError('ui-template-extend-children-mismatch', template);\n        }\n        let childIndex = 0;\n        for (const childDef of def.children) {\n            extendTemplate(template.children[childIndex++], childDef);\n        }\n    }\n}\n/**\n * Checks if value is \"falsy\".\n * Note: 0 (Number) is not \"falsy\" in this context.\n *\n * @param value Value to be checked.\n */\nfunction isFalsy(value) {\n    return !value && value !== 0;\n}\n/**\n * Checks if the item is an instance of {@link module:ui/view~View}\n *\n * @param value Value to be checked.\n */\nfunction isView(item) {\n    return item instanceof View;\n}\n/**\n * Checks if the item is an instance of {@link module:ui/template~Template}\n *\n * @param value Value to be checked.\n */\nfunction isTemplate(item) {\n    return item instanceof Template;\n}\n/**\n * Checks if the item is an instance of {@link module:ui/viewcollection~ViewCollection}\n *\n * @param value Value to be checked.\n */\nfunction isViewCollection(item) {\n    return item instanceof ViewCollection;\n}\n/**\n * Checks if value array contains the one with namespace.\n */\nfunction isNamespaced(attrValue) {\n    return isObject(attrValue[0]) && attrValue[0].ns;\n}\n/**\n * Creates an empty skeleton for {@link module:ui/template~Template#revert}\n * data.\n */\nfunction getEmptyRevertData() {\n    return {\n        children: [],\n        bindings: [],\n        attributes: {}\n    };\n}\n/**\n * Checks whether an attribute should be extended when\n * {@link module:ui/template~Template#apply} is called.\n *\n * @param attrName Attribute name to check.\n */\nfunction shouldExtend(attrName) {\n    return attrName == 'class' || attrName == 'style';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* eslint-disable @typescript-eslint/no-invalid-void-type */\n/**\n * @module ui/view\n */\nimport ViewCollection from './viewcollection.js';\nimport Template from './template.js';\nimport { CKEditorError, Collection, DomEmitterMixin, ObservableMixin, isIterable } from '@ckeditor/ckeditor5-utils';\nimport '../theme/globals/globals.css';\n/**\n * The basic view class, which represents an HTML element created out of a\n * {@link module:ui/view~View#template}. Views are building blocks of the user interface and handle\n * interaction\n *\n * Views {@link module:ui/view~View#registerChild aggregate} children in\n * {@link module:ui/view~View#createCollection collections} and manage the life cycle of DOM\n * listeners e.g. by handling rendering and destruction.\n *\n * See the {@link module:ui/template~TemplateDefinition} syntax to learn more about shaping view\n * elements, attributes and listeners.\n *\n * ```ts\n * class SampleView extends View {\n * \tconstructor( locale ) {\n * \t\tsuper( locale );\n *\n * \t\tconst bind = this.bindTemplate;\n *\n * \t\t// Views define their interface (state) using observable attributes.\n * \t\tthis.set( 'elementClass', 'bar' );\n *\n * \t\tthis.setTemplate( {\n * \t\t\ttag: 'p',\n *\n * \t\t\t// The element of the view can be defined with its children.\n * \t\t\tchildren: [\n * \t\t\t\t'Hello',\n * \t\t\t\t{\n * \t\t\t\t\ttag: 'b',\n * \t\t\t\t\tchildren: [ 'world!' ]\n * \t\t\t\t}\n * \t\t\t],\n * \t\t\tattributes: {\n * \t\t\t\tclass: [\n * \t\t\t\t\t'foo',\n *\n * \t\t\t\t\t// Observable attributes control the state of the view in DOM.\n * \t\t\t\t\tbind.to( 'elementClass' )\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\ton: {\n * \t\t\t\t// Views listen to DOM events and propagate them.\n * \t\t\t\tclick: bind.to( 'clicked' )\n * \t\t\t}\n * \t\t} );\n * \t}\n * }\n *\n * const view = new SampleView( locale );\n *\n * view.render();\n *\n * // Append <p class=\"foo bar\">Hello<b>world</b></p> to the <body>\n * document.body.appendChild( view.element );\n *\n * // Change the class attribute to <p class=\"foo baz\">Hello<b>world</b></p>\n * view.elementClass = 'baz';\n *\n * // Respond to the \"click\" event in DOM by executing a custom action.\n * view.on( 'clicked', () => {\n * \tconsole.log( 'The view has been clicked!' );\n * } );\n * ```\n */\nexport default class View extends /* #__PURE__ */ DomEmitterMixin(/* #__PURE__ */ ObservableMixin()) {\n    /**\n     * Creates an instance of the {@link module:ui/view~View} class.\n     *\n     * Also see {@link #render}.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super();\n        this.element = null;\n        this.isRendered = false;\n        this.locale = locale;\n        this.t = locale && locale.t;\n        this._viewCollections = new Collection();\n        this._unboundChildren = this.createCollection();\n        // Pass parent locale to its children.\n        this._viewCollections.on('add', (evt, collection) => {\n            collection.locale = locale;\n            collection.t = locale && locale.t;\n        });\n        this.decorate('render');\n    }\n    /**\n     * Shorthand for {@link module:ui/template~Template.bind}, a binding\n     * {@link module:ui/template~BindChain interface} pre–configured for the view instance.\n     *\n     * It provides {@link module:ui/template~BindChain#to `to()`} and\n     * {@link module:ui/template~BindChain#if `if()`} methods that initialize bindings with\n     * observable attributes and attach DOM listeners.\n     *\n     * ```ts\n     * class SampleView extends View {\n     * \tconstructor( locale ) {\n     * \t\tsuper( locale );\n     *\n     * \t\tconst bind = this.bindTemplate;\n     *\n     * \t\t// These {@link module:utils/observablemixin~Observable observable} attributes will control\n     * \t\t// the state of the view in DOM.\n     * \t\tthis.set( {\n     * \t\t\telementClass: 'foo',\n     * \t\t \tisEnabled: true\n     * \t\t } );\n     *\n     * \t\tthis.setTemplate( {\n     * \t\t\ttag: 'p',\n     *\n     * \t\t\tattributes: {\n     * \t\t\t\t// The class HTML attribute will follow elementClass\n     * \t\t\t\t// and isEnabled view attributes.\n     * \t\t\t\tclass: [\n     * \t\t\t\t\tbind.to( 'elementClass' )\n     * \t\t\t\t\tbind.if( 'isEnabled', 'present-when-enabled' )\n     * \t\t\t\t]\n     * \t\t\t},\n     *\n     * \t\t\ton: {\n     * \t\t\t\t// The view will fire the \"clicked\" event upon clicking <p> in DOM.\n     * \t\t\t\tclick: bind.to( 'clicked' )\n     * \t\t\t}\n     * \t\t} );\n     * \t}\n     * }\n     * ```\n     */\n    get bindTemplate() {\n        if (this._bindTemplate) {\n            return this._bindTemplate;\n        }\n        return (this._bindTemplate = Template.bind(this, this));\n    }\n    /**\n     * Creates a new collection of views, which can be used as\n     * {@link module:ui/template~Template#children} of this view.\n     *\n     * ```ts\n     * class SampleView extends View {\n     * \tconstructor( locale ) {\n     * \t\tsuper( locale );\n     *\n     * \t\tconst child = new ChildView( locale );\n     * \t\tthis.items = this.createCollection( [ child ] );\n     *\n     * \t\tthis.setTemplate( {\n     * \t\t\ttag: 'p',\n     *\n     * \t\t\t// `items` collection will render here.\n     * \t\t\tchildren: this.items\n     * \t\t} );\n     * \t}\n     * }\n     *\n     * const view = new SampleView( locale );\n     * view.render();\n     *\n     * // It will append <p><child#element></p> to the <body>.\n     * document.body.appendChild( view.element );\n     * ```\n     *\n     * @param views Initial views of the collection.\n     * @returns A new collection of view instances.\n     */\n    createCollection(views) {\n        const collection = new ViewCollection(views);\n        this._viewCollections.add(collection);\n        return collection;\n    }\n    /**\n     * Registers a new child view under the view instance. Once registered, a child\n     * view is managed by its parent, including {@link #render rendering}\n     * and {@link #destroy destruction}.\n     *\n     * To revert this, use {@link #deregisterChild}.\n     *\n     * ```ts\n     * class SampleView extends View {\n     * \tconstructor( locale ) {\n     * \t\tsuper( locale );\n     *\n     * \t\tthis.childA = new SomeChildView( locale );\n     * \t\tthis.childB = new SomeChildView( locale );\n     *\n     * \t\tthis.setTemplate( { tag: 'p' } );\n     *\n     * \t\t// Register the children.\n     * \t\tthis.registerChild( [ this.childA, this.childB ] );\n     * \t}\n     *\n     * \trender() {\n     * \t\tsuper.render();\n     *\n     * \t\tthis.element.appendChild( this.childA.element );\n     * \t\tthis.element.appendChild( this.childB.element );\n     * \t}\n     * }\n     *\n     * const view = new SampleView( locale );\n     *\n     * view.render();\n     *\n     * // Will append <p><childA#element><b></b><childB#element></p>.\n     * document.body.appendChild( view.element );\n     * ```\n     *\n     * **Note**: There's no need to add child views if they're already referenced in the\n     * {@link #template}:\n     *\n     * ```ts\n     * class SampleView extends View {\n     * \tconstructor( locale ) {\n     * \t\tsuper( locale );\n     *\n     * \t\tthis.childA = new SomeChildView( locale );\n     * \t\tthis.childB = new SomeChildView( locale );\n     *\n     * \t\tthis.setTemplate( {\n     * \t\t\ttag: 'p',\n     *\n     * \t\t\t// These children will be added automatically. There's no\n     * \t\t\t// need to call {@link #registerChild} for any of them.\n     * \t\t\tchildren: [ this.childA, this.childB ]\n     * \t\t} );\n     * \t}\n     *\n     * \t// ...\n     * }\n     * ```\n     *\n     * @param children Children views to be registered.\n     */\n    registerChild(children) {\n        if (!isIterable(children)) {\n            children = [children];\n        }\n        for (const child of children) {\n            this._unboundChildren.add(child);\n        }\n    }\n    /**\n     * The opposite of {@link #registerChild}. Removes a child view from this view instance.\n     * Once removed, the child is no longer managed by its parent, e.g. it can safely\n     * become a child of another parent view.\n     *\n     * @see #registerChild\n     * @param children Child views to be removed.\n     */\n    deregisterChild(children) {\n        if (!isIterable(children)) {\n            children = [children];\n        }\n        for (const child of children) {\n            this._unboundChildren.remove(child);\n        }\n    }\n    /**\n     * Sets the {@link #template} of the view with with given definition.\n     *\n     * A shorthand for:\n     *\n     * ```ts\n     * view.setTemplate( definition );\n     * ```\n     *\n     * @param definition Definition of view's template.\n     */\n    setTemplate(definition) {\n        this.template = new Template(definition);\n    }\n    /**\n     * {@link module:ui/template~Template.extend Extends} the {@link #template} of the view with\n     * with given definition.\n     *\n     * A shorthand for:\n     *\n     * ```ts\n     * Template.extend( view.template, definition );\n     * ```\n     *\n     * **Note**: Is requires the {@link #template} to be already set. See {@link #setTemplate}.\n     *\n     * @param definition Definition which extends the {@link #template}.\n     */\n    extendTemplate(definition) {\n        Template.extend(this.template, definition);\n    }\n    /**\n     * Recursively renders the view.\n     *\n     * Once the view is rendered:\n     * * the {@link #element} becomes an HTML element out of {@link #template},\n     * * the {@link #isRendered} flag is set `true`.\n     *\n     * **Note**: The children of the view:\n     * * defined directly in the {@link #template}\n     * * residing in collections created by the {@link #createCollection} method,\n     * * and added by {@link #registerChild}\n     * are also rendered in the process.\n     *\n     * In general, `render()` method is the right place to keep the code which refers to the\n     * {@link #element} and should be executed at the very beginning of the view's life cycle.\n     *\n     * It is possible to {@link module:ui/template~Template.extend} the {@link #template} before\n     * the view is rendered. To allow an early customization of the view (e.g. by its parent),\n     * such references should be done in `render()`.\n     *\n     * ```ts\n     * class SampleView extends View {\n     * \tconstructor() {\n     * \t\tthis.setTemplate( {\n     * \t\t\t// ...\n     * \t\t} );\n     * \t},\n     *\n     * \trender() {\n     * \t\t// View#element becomes available.\n     * \t\tsuper.render();\n     *\n     * \t\t// The \"scroll\" listener depends on #element.\n     * \t\tthis.listenTo( window, 'scroll', () => {\n     * \t\t\t// A reference to #element would render the #template and make it non-extendable.\n     * \t\t\tif ( window.scrollY > 0 ) {\n     * \t\t\t\tthis.element.scrollLeft = 100;\n     * \t\t\t} else {\n     * \t\t\t\tthis.element.scrollLeft = 0;\n     * \t\t\t}\n     * \t\t} );\n     * \t}\n     * }\n     *\n     * const view = new SampleView();\n     *\n     * // Let's customize the view before it gets rendered.\n     * view.extendTemplate( {\n     * \tattributes: {\n     * \t\tclass: [\n     * \t\t\t'additional-class'\n     * \t\t]\n     * \t}\n     * } );\n     *\n     * // Late rendering allows customization of the view.\n     * view.render();\n     * ```\n     */\n    render() {\n        if (this.isRendered) {\n            /**\n             * This View has already been rendered.\n             *\n             * @error ui-view-render-already-rendered\n             */\n            throw new CKEditorError('ui-view-render-already-rendered', this);\n        }\n        // Render #element of the view.\n        if (this.template) {\n            this.element = this.template.render();\n            // Auto–register view children from #template.\n            this.registerChild(this.template.getViews());\n        }\n        this.isRendered = true;\n    }\n    /**\n     * Recursively destroys the view instance and child views added by {@link #registerChild} and\n     * residing in collections created by the {@link #createCollection}.\n     *\n     * Destruction disables all event listeners:\n     * * created on the view, e.g. `view.on( 'event', () => {} )`,\n     * * defined in the {@link #template} for DOM events.\n     */\n    destroy() {\n        this.stopListening();\n        this._viewCollections.map(c => c.destroy());\n        // Template isn't obligatory for views.\n        if (this.template && this.template._revertData) {\n            this.template.revert(this.element);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* global document */\n/**\n * Handles clicking **outside** of a specified set of elements, then fires an action.\n *\n * **Note**: Actually, the action is executed upon `mousedown`, not `click`. It prevents\n * certain issues when the user keeps holding the mouse button and the UI cannot react\n * properly.\n *\n * @param options Configuration options.\n * @param options.emitter The emitter to which this behavior should be added.\n * @param options.activator Function returning a `Boolean`, to determine whether the handler is active.\n * @param options.contextElements Array of HTML elements or a callback returning an array of HTML elements\n * that determine the scope of the handler. Clicking any of them or their descendants will **not** fire the callback.\n * @param options.callback An action executed by the handler.\n * @param options.listenerOptions Additional options for the listener (like priority).\n */\nexport default function clickOutsideHandler({ emitter, activator, callback, contextElements, listenerOptions }) {\n    emitter.listenTo(document, 'mousedown', (evt, domEvt) => {\n        if (!activator()) {\n            return;\n        }\n        // Check if `composedPath` is `undefined` in case the browser does not support native shadow DOM.\n        // Can be removed when all supported browsers support native shadow DOM.\n        const path = typeof domEvt.composedPath == 'function' ? domEvt.composedPath() : [];\n        const contextElementsList = typeof contextElements == 'function' ? contextElements() : contextElements;\n        for (const contextElement of contextElementsList) {\n            if (contextElement.contains(domEvt.target) || path.includes(contextElement)) {\n                return;\n            }\n        }\n        callback();\n    }, listenerOptions);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * A mixin that brings the possibility to temporarily disable CSS transitions using\n * {@link module:ui/view~View} methods. It is helpful when, for instance, the transitions should not happen\n * when the view is first displayed but they should work normal in other cases.\n *\n * The methods to control the CSS transitions are:\n * * `disableCssTransitions()` – Adds the `.ck-transitions-disabled` class to the\n * {@link module:ui/view~View#element view element}.\n * * `enableCssTransitions()` – Removes the `.ck-transitions-disabled` class from the\n * {@link module:ui/view~View#element view element}.\n *\n * The usage comes down to:\n *\n * ```ts\n * const MyViewWithCssTransitionDisabler = CssTransitionDisablerMixin( MyView );\n * const view = new MyViewWithCssTransitionDisabler();\n *\n * // ...\n *\n * view.disableCssTransitions();\n * view.show();\n * view.enableCssTransitions();\n * ```\n *\n * @param view View instance that should get this functionality.\n */\nexport default function CssTransitionDisablerMixin(view) {\n    class Mixin extends view {\n        disableCssTransitions() {\n            this._isCssTransitionsDisabled = true;\n        }\n        enableCssTransitions() {\n            this._isCssTransitionsDisabled = false;\n        }\n        constructor(...args) {\n            super(...args);\n            this.set('_isCssTransitionsDisabled', false);\n            this.initializeCssTransitionDisablerMixin();\n        }\n        initializeCssTransitionDisablerMixin() {\n            this.extendTemplate({\n                attributes: {\n                    class: [\n                        this.bindTemplate.if('_isCssTransitionsDisabled', 'ck-transitions-disabled')\n                    ]\n                }\n            });\n        }\n    }\n    return Mixin;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * A handler useful for {@link module:ui/view~View views} working as HTML forms. It intercepts a native DOM\n * `submit` event, prevents the default web browser behavior (navigation and page reload) and\n * fires the `submit` event on a view instead. Such a custom event can be then used by any\n * {@link module:utils/dom/emittermixin~DomEmitter emitter}, e.g. to serialize the form data.\n *\n * ```ts\n * import submitHandler from '@ckeditor/ckeditor5-ui/src/bindings/submithandler';\n *\n * // ...\n *\n * class AnyFormView extends View {\n * \tconstructor() {\n * \t\tsuper();\n *\n * \t\t// ...\n *\n * \t\tsubmitHandler( {\n * \t\t\tview: this\n * \t\t} );\n * \t}\n * }\n *\n * // ...\n *\n * const view = new AnyFormView();\n *\n * // A sample listener attached by an emitter working with the view.\n * this.listenTo( view, 'submit', () => {\n * \tsaveTheFormData();\n * \thideTheForm();\n * } );\n * ```\n *\n * @param options Configuration options.\n * @param options.view The view which DOM `submit` events should be handled.\n */\nexport default function submitHandler({ view }) {\n    view.listenTo(view.element, 'submit', (evt, domEvt) => {\n        domEvt.preventDefault();\n        view.fire('submit');\n    }, { useCapture: true });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * A helper that adds a keyboard navigation support (arrow up/down/left/right) for grids.\n *\n * @param options Configuration options.\n * @param options.keystrokeHandler Keystroke handler to register navigation with arrow keys.\n * @param options.focusTracker A focus tracker for grid elements.\n * @param options.gridItems A collection of grid items.\n * @param options.numberOfColumns Number of columns in the grid. Can be specified as a function that returns\n * the number (e.g. for responsive grids).\n * @param options.uiLanguageDirection String of ui language direction.\n */\nexport default function addKeyboardHandlingForGrid({ keystrokeHandler, focusTracker, gridItems, numberOfColumns, uiLanguageDirection }) {\n    const getNumberOfColumns = typeof numberOfColumns === 'number' ? () => numberOfColumns : numberOfColumns;\n    keystrokeHandler.set('arrowright', getGridItemFocuser((focusedElementIndex, gridItems) => {\n        return uiLanguageDirection === 'rtl' ?\n            getLeftElementIndex(focusedElementIndex, gridItems.length) :\n            getRightElementIndex(focusedElementIndex, gridItems.length);\n    }));\n    keystrokeHandler.set('arrowleft', getGridItemFocuser((focusedElementIndex, gridItems) => {\n        return uiLanguageDirection === 'rtl' ?\n            getRightElementIndex(focusedElementIndex, gridItems.length) :\n            getLeftElementIndex(focusedElementIndex, gridItems.length);\n    }));\n    keystrokeHandler.set('arrowup', getGridItemFocuser((focusedElementIndex, gridItems) => {\n        let nextIndex = focusedElementIndex - getNumberOfColumns();\n        if (nextIndex < 0) {\n            nextIndex = focusedElementIndex + getNumberOfColumns() * Math.floor(gridItems.length / getNumberOfColumns());\n            if (nextIndex > gridItems.length - 1) {\n                nextIndex -= getNumberOfColumns();\n            }\n        }\n        return nextIndex;\n    }));\n    keystrokeHandler.set('arrowdown', getGridItemFocuser((focusedElementIndex, gridItems) => {\n        let nextIndex = focusedElementIndex + getNumberOfColumns();\n        if (nextIndex > gridItems.length - 1) {\n            nextIndex = focusedElementIndex % getNumberOfColumns();\n        }\n        return nextIndex;\n    }));\n    function getGridItemFocuser(getIndexToFocus) {\n        return (evt) => {\n            const focusedElement = gridItems.find(item => item.element === focusTracker.focusedElement);\n            const focusedElementIndex = gridItems.getIndex(focusedElement);\n            const nextIndexToFocus = getIndexToFocus(focusedElementIndex, gridItems);\n            gridItems.get(nextIndexToFocus).focus();\n            evt.stopPropagation();\n            evt.preventDefault();\n        };\n    }\n    /**\n     * Function returning the next index.\n     *\n     * ```\n     * before: [ ][x][ ]\tafter: [ ][ ][x]\n     * index = 1            index = 2\n     * ```\n     *\n     * If current index is last, function returns first index.\n     *\n     * ```\n     * before: [ ][ ][x]\tafter: [x][ ][ ]\n     * index = 2            index = 0\n     * ```\n     *\n     * @param elementIndex Number of current index.\n     * @param collectionLength A count of collection items.\n     */\n    function getRightElementIndex(elementIndex, collectionLength) {\n        if (elementIndex === collectionLength - 1) {\n            return 0;\n        }\n        else {\n            return elementIndex + 1;\n        }\n    }\n    /**\n     * Function returning the previous index.\n     *\n     * ```\n     * before: [ ][x][ ]\tafter: [x][ ][ ]\n     * index = 1            index = 0\n     * ```\n     *\n     * If current index is first, function returns last index.\n     *\n     * ```\n     * before: [x][ ][ ]\tafter: [ ][ ][x]\n     * index = 0            index = 2\n     * ```\n     *\n     * @param elementIndex Number of current index.\n     * @param collectionLength A count of collection items.\n     */\n    function getLeftElementIndex(elementIndex, collectionLength) {\n        if (elementIndex === 0) {\n            return collectionLength - 1;\n        }\n        else {\n            return elementIndex - 1;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* global DOMParser */\n/**\n * @module ui/icon/iconview\n */\nimport View from '../view.js';\nimport '../../theme/components/icon/icon.css';\n/**\n * The icon view class.\n */\nclass IconView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor() {\n        super();\n        const bind = this.bindTemplate;\n        this.set('content', '');\n        this.set('viewBox', '0 0 20 20');\n        this.set('fillColor', '');\n        this.set('isColorInherited', true);\n        this.set('isVisible', true);\n        this.setTemplate({\n            tag: 'svg',\n            ns: 'http://www.w3.org/2000/svg',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-icon',\n                    bind.if('isVisible', 'ck-hidden', value => !value),\n                    // Exclude icon internals from the CSS reset to allow rich (non-monochromatic) icons\n                    // (https://github.com/ckeditor/ckeditor5/issues/12599).\n                    'ck-reset_all-excluded',\n                    // The class to remove the dynamic color inheritance is toggleable\n                    // (https://github.com/ckeditor/ckeditor5/issues/12599).\n                    bind.if('isColorInherited', 'ck-icon_inherit-color')\n                ],\n                viewBox: bind.to('viewBox')\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this._updateXMLContent();\n        this._colorFillPaths();\n        // This is a hack for lack of innerHTML binding.\n        // See: https://github.com/ckeditor/ckeditor5-ui/issues/99.\n        this.on('change:content', () => {\n            this._updateXMLContent();\n            this._colorFillPaths();\n        });\n        this.on('change:fillColor', () => {\n            this._colorFillPaths();\n        });\n    }\n    /**\n     * Updates the {@link #element} with the value of {@link #content}.\n     */\n    _updateXMLContent() {\n        if (this.content) {\n            const parsed = new DOMParser().parseFromString(this.content.trim(), 'image/svg+xml');\n            const svg = parsed.querySelector('svg');\n            const viewBox = svg.getAttribute('viewBox');\n            if (viewBox) {\n                this.viewBox = viewBox;\n            }\n            // Preserve presentational attributes of the <svg> element from the source.\n            // They can affect rendering of the entire icon (https://github.com/ckeditor/ckeditor5/issues/12597).\n            for (const { name, value } of Array.from(svg.attributes)) {\n                if (IconView.presentationalAttributeNames.includes(name)) {\n                    this.element.setAttribute(name, value);\n                }\n            }\n            while (this.element.firstChild) {\n                this.element.removeChild(this.element.firstChild);\n            }\n            while (svg.childNodes.length > 0) {\n                this.element.appendChild(svg.childNodes[0]);\n            }\n        }\n    }\n    /**\n     * Fills all child `path.ck-icon__fill` with the `#fillColor`.\n     */\n    _colorFillPaths() {\n        if (this.fillColor) {\n            this.element.querySelectorAll('.ck-icon__fill').forEach(path => {\n                path.style.fill = this.fillColor;\n            });\n        }\n    }\n}\n/**\n * A list of presentational attributes that can be set on the `<svg>` element and should be preserved\n * when the icon {@link module:ui/icon/iconview~IconView#content content} is loaded.\n *\n * See the [specification](https://www.w3.org/TR/SVG/styling.html#TermPresentationAttribute) to learn more.\n */\nIconView.presentationalAttributeNames = [\n    'alignment-baseline', 'baseline-shift', 'clip-path', 'clip-rule', 'color', 'color-interpolation',\n    'color-interpolation-filters', 'color-rendering', 'cursor', 'direction', 'display', 'dominant-baseline', 'fill', 'fill-opacity',\n    'fill-rule', 'filter', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style',\n    'font-variant', 'font-weight', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start',\n    'mask', 'opacity', 'overflow', 'paint-order', 'pointer-events', 'shape-rendering', 'stop-color', 'stop-opacity', 'stroke',\n    'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width',\n    'text-anchor', 'text-decoration', 'text-overflow', 'text-rendering', 'transform', 'unicode-bidi', 'vector-effect',\n    'visibility', 'white-space', 'word-spacing', 'writing-mode'\n];\nexport default IconView;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/button/buttonlabelview\n */\nimport View from '../view.js';\n/**\n * A default implementation of the button view's label. It comes with a dynamic text support\n * via {@link module:ui/button/buttonlabelview~ButtonLabelView#text} property.\n */\nexport default class ButtonLabelView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor() {\n        super();\n        this.set({\n            style: undefined,\n            text: undefined,\n            id: undefined\n        });\n        const bind = this.bindTemplate;\n        this.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-button__label'\n                ],\n                style: bind.to('style'),\n                id: bind.to('id')\n            },\n            children: [\n                {\n                    text: bind.to('text')\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/button/buttonview\n */\nimport View from '../view.js';\nimport IconView from '../icon/iconview.js';\nimport ButtonLabelView from './buttonlabelview.js';\nimport { env, getEnvKeystrokeText, uid, delay } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/components/button/button.css';\n/**\n * The button view class.\n *\n * ```ts\n * const view = new ButtonView();\n *\n * view.set( {\n * \tlabel: 'A button',\n * \tkeystroke: 'Ctrl+B',\n * \ttooltip: true,\n * \twithText: true\n * } );\n *\n * view.render();\n *\n * document.body.append( view.element );\n * ```\n */\nexport default class ButtonView extends View {\n    /**\n     * Creates an instance of the button view class.\n     *\n     * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n     * @param labelView The instance of the button's label. If not provided, an instance of\n     * {@link module:ui/button/buttonlabelview~ButtonLabelView} is used.\n     */\n    constructor(locale, labelView = new ButtonLabelView()) {\n        super(locale);\n        /**\n         * Delayed focus function for focus handling in Safari.\n         */\n        this._focusDelayed = null;\n        const bind = this.bindTemplate;\n        const ariaLabelUid = uid();\n        // Implement the Button interface.\n        this.set('_ariaPressed', false);\n        this.set('_ariaChecked', false);\n        this.set('ariaLabel', undefined);\n        this.set('ariaLabelledBy', `ck-editor__aria-label_${ariaLabelUid}`);\n        this.set('class', undefined);\n        this.set('labelStyle', undefined);\n        this.set('icon', undefined);\n        this.set('isEnabled', true);\n        this.set('isOn', false);\n        this.set('isVisible', true);\n        this.set('isToggleable', false);\n        this.set('keystroke', undefined);\n        this.set('label', undefined);\n        this.set('role', undefined);\n        this.set('tabindex', -1);\n        this.set('tooltip', false);\n        this.set('tooltipPosition', 's');\n        this.set('type', 'button');\n        this.set('withText', false);\n        this.set('withKeystroke', false);\n        this.children = this.createCollection();\n        this.labelView = this._setupLabelView(labelView);\n        this.iconView = new IconView();\n        this.iconView.extendTemplate({\n            attributes: {\n                class: 'ck-button__icon'\n            }\n        });\n        this.keystrokeView = this._createKeystrokeView();\n        this.bind('_tooltipString').to(this, 'tooltip', this, 'label', this, 'keystroke', this._getTooltipString.bind(this));\n        const template = {\n            tag: 'button',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-button',\n                    bind.to('class'),\n                    bind.if('isEnabled', 'ck-disabled', value => !value),\n                    bind.if('isVisible', 'ck-hidden', value => !value),\n                    bind.to('isOn', value => value ? 'ck-on' : 'ck-off'),\n                    bind.if('withText', 'ck-button_with-text'),\n                    bind.if('withKeystroke', 'ck-button_with-keystroke')\n                ],\n                role: bind.to('role'),\n                type: bind.to('type', value => value ? value : 'button'),\n                tabindex: bind.to('tabindex'),\n                'aria-checked': bind.to('_ariaChecked'),\n                'aria-pressed': bind.to('_ariaPressed'),\n                'aria-label': bind.to('ariaLabel'),\n                'aria-labelledby': bind.to('ariaLabelledBy'),\n                'aria-disabled': bind.if('isEnabled', true, value => !value),\n                'data-cke-tooltip-text': bind.to('_tooltipString'),\n                'data-cke-tooltip-position': bind.to('tooltipPosition')\n            },\n            children: this.children,\n            on: {\n                click: bind.to(evt => {\n                    // We can't make the button disabled using the disabled attribute, because it won't be focusable.\n                    // Though, shouldn't this condition be moved to the button controller?\n                    if (this.isEnabled) {\n                        this.fire('execute');\n                    }\n                    else {\n                        // Prevent the default when button is disabled, to block e.g.\n                        // automatic form submitting. See ckeditor/ckeditor5-link#74.\n                        evt.preventDefault();\n                    }\n                })\n            }\n        };\n        this.bind('_ariaPressed').to(this, 'isOn', this, 'isToggleable', this, 'role', (isOn, isToggleable, role) => {\n            if (!isToggleable || isCheckableRole(role)) {\n                return false;\n            }\n            return String(!!isOn);\n        });\n        this.bind('_ariaChecked').to(this, 'isOn', this, 'isToggleable', this, 'role', (isOn, isToggleable, role) => {\n            if (!isToggleable || !isCheckableRole(role)) {\n                return false;\n            }\n            return String(!!isOn);\n        });\n        // On Safari we have to force the focus on a button on click as it's the only browser\n        // that doesn't do that automatically. See #12115.\n        if (env.isSafari) {\n            if (!this._focusDelayed) {\n                this._focusDelayed = delay(() => this.focus(), 0);\n            }\n            template.on.mousedown = bind.to(() => {\n                this._focusDelayed();\n            });\n            template.on.mouseup = bind.to(() => {\n                this._focusDelayed.cancel();\n            });\n        }\n        this.setTemplate(template);\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        if (this.icon) {\n            this.iconView.bind('content').to(this, 'icon');\n            this.children.add(this.iconView);\n        }\n        this.children.add(this.labelView);\n        if (this.withKeystroke && this.keystroke) {\n            this.children.add(this.keystrokeView);\n        }\n    }\n    /**\n     * Focuses the {@link #element} of the button.\n     */\n    focus() {\n        this.element.focus();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        if (this._focusDelayed) {\n            this._focusDelayed.cancel();\n        }\n        super.destroy();\n    }\n    /**\n     * Binds the label view instance it with button attributes.\n     */\n    _setupLabelView(labelView) {\n        labelView.bind('text', 'style', 'id').to(this, 'label', 'labelStyle', 'ariaLabelledBy');\n        return labelView;\n    }\n    /**\n     * Creates a view that displays a keystroke next to a {@link #labelView label }\n     * and binds it with button attributes.\n     */\n    _createKeystrokeView() {\n        const keystrokeView = new View();\n        keystrokeView.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-button__keystroke'\n                ]\n            },\n            children: [\n                {\n                    text: this.bindTemplate.to('keystroke', text => getEnvKeystrokeText(text))\n                }\n            ]\n        });\n        return keystrokeView;\n    }\n    /**\n     * Gets the text for the tooltip from the combination of\n     * {@link #tooltip}, {@link #label} and {@link #keystroke} attributes.\n     *\n     * @see #tooltip\n     * @see #_tooltipString\n     * @param tooltip Button tooltip.\n     * @param label Button label.\n     * @param keystroke Button keystroke.\n     */\n    _getTooltipString(tooltip, label, keystroke) {\n        if (tooltip) {\n            if (typeof tooltip == 'string') {\n                return tooltip;\n            }\n            else {\n                if (keystroke) {\n                    keystroke = getEnvKeystrokeText(keystroke);\n                }\n                if (tooltip instanceof Function) {\n                    return tooltip(label, keystroke);\n                }\n                else {\n                    return `${label}${keystroke ? ` (${keystroke})` : ''}`;\n                }\n            }\n        }\n        return '';\n    }\n}\n/**\n * Checks if `aria-checkbox` can be used with specified role.\n */\nfunction isCheckableRole(role) {\n    switch (role) {\n        case 'radio':\n        case 'checkbox':\n        case 'option':\n        case 'switch':\n        case 'menuitemcheckbox':\n        case 'menuitemradio':\n            return true;\n        default:\n            return false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/formheader/formheaderview\n */\nimport View from '../view.js';\nimport IconView from '../icon/iconview.js';\nimport '../../theme/components/formheader/formheader.css';\n/**\n * The class component representing a form header view. It should be used in more advanced forms to\n * describe the main purpose of the form.\n *\n * By default the component contains a bolded label view that has to be set. The label is usually a short (at most 3-word) string.\n * The component can also be extended by any other elements, like: icons, dropdowns, etc.\n *\n * It is used i.a.\n * by {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView}.\n *\n * The latter is an example, where the component has been extended by {@link module:ui/dropdown/dropdownview~DropdownView} view.\n */\nexport default class FormHeaderView extends View {\n    /**\n     * Creates an instance of the form header class.\n     *\n     * @param locale The locale instance.\n     * @param options.label A label.\n     * @param options.class An additional class.\n     */\n    constructor(locale, options = {}) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('label', options.label || '');\n        this.set('class', options.class || null);\n        this.children = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-form__header',\n                    bind.to('class')\n                ]\n            },\n            children: this.children\n        });\n        if (options.icon) {\n            this.iconView = new IconView();\n            this.iconView.content = options.icon;\n            this.children.add(this.iconView);\n        }\n        const label = new View(locale);\n        label.setTemplate({\n            tag: 'h2',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-form__header__label'\n                ],\n                role: 'presentation'\n            },\n            children: [\n                { text: bind.to('label') }\n            ]\n        });\n        this.children.add(label);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/focuscycler\n */\nimport { isVisible, EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * A utility class that helps cycling over {@link module:ui/focuscycler~FocusableView focusable views} in a\n * {@link module:ui/viewcollection~ViewCollection} when the focus is tracked by the\n * {@link module:utils/focustracker~FocusTracker} instance. It helps implementing keyboard\n * navigation in HTML forms, toolbars, lists and the like.\n *\n * To work properly it requires:\n * * a collection of focusable (HTML `tabindex` attribute) views that implement the `focus()` method,\n * * an associated focus tracker to determine which view is focused.\n *\n * A simple cycler setup can look like this:\n *\n * ```ts\n * const focusables = new ViewCollection<FocusableView>();\n * const focusTracker = new FocusTracker();\n *\n * // Add focusable views to the focus tracker.\n * focusTracker.add( ... );\n * ```\n *\n * Then, the cycler can be used manually:\n *\n * ```ts\n * const cycler = new FocusCycler( { focusables, focusTracker } );\n *\n * // Will focus the first focusable view in #focusables.\n * cycler.focusFirst();\n *\n * // Will log the next focusable item in #focusables.\n * console.log( cycler.next );\n * ```\n *\n * Alternatively, it can work side by side with the {@link module:utils/keystrokehandler~KeystrokeHandler}:\n *\n * ```ts\n * const keystrokeHandler = new KeystrokeHandler();\n *\n * // Activate the keystroke handler.\n * keystrokeHandler.listenTo( sourceOfEvents );\n *\n * const cycler = new FocusCycler( {\n * \tfocusables, focusTracker, keystrokeHandler,\n * \tactions: {\n * \t\t// When arrowup of arrowleft is detected by the #keystrokeHandler,\n * \t\t// focusPrevious() will be called on the cycler.\n * \t\tfocusPrevious: [ 'arrowup', 'arrowleft' ],\n * \t}\n * } );\n * ```\n *\n * Check out the {@glink framework/deep-dive/ui/focus-tracking \"Deep dive into focus tracking\"} guide to learn more.\n */\nexport default class FocusCycler extends /* #__PURE__ */ EmitterMixin() {\n    /**\n     * Creates an instance of the focus cycler utility.\n     *\n     * @param options Configuration options.\n     */\n    constructor(options) {\n        super();\n        this.focusables = options.focusables;\n        this.focusTracker = options.focusTracker;\n        this.keystrokeHandler = options.keystrokeHandler;\n        this.actions = options.actions;\n        if (options.actions && options.keystrokeHandler) {\n            for (const methodName in options.actions) {\n                let actions = options.actions[methodName];\n                if (typeof actions == 'string') {\n                    actions = [actions];\n                }\n                for (const keystroke of actions) {\n                    options.keystrokeHandler.set(keystroke, (data, cancel) => {\n                        this[methodName]();\n                        cancel();\n                    }, options.keystrokeHandlerOptions);\n                }\n            }\n        }\n        this.on('forwardCycle', () => this.focusFirst(), { priority: 'low' });\n        this.on('backwardCycle', () => this.focusLast(), { priority: 'low' });\n    }\n    /**\n     * Returns the first focusable view in {@link #focusables}.\n     * Returns `null` if there is none.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    get first() {\n        return (this.focusables.find(isDomFocusable) || null);\n    }\n    /**\n     * Returns the last focusable view in {@link #focusables}.\n     * Returns `null` if there is none.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    get last() {\n        return (this.focusables.filter(isDomFocusable).slice(-1)[0] || null);\n    }\n    /**\n     * Returns the next focusable view in {@link #focusables} based on {@link #current}.\n     * Returns `null` if there is none.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    get next() {\n        return this._getDomFocusableItem(1);\n    }\n    /**\n     * Returns the previous focusable view in {@link #focusables} based on {@link #current}.\n     * Returns `null` if there is none.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    get previous() {\n        return this._getDomFocusableItem(-1);\n    }\n    /**\n     * An index of the view in the {@link #focusables} which is focused according\n     * to {@link #focusTracker}. Returns `null` when there is no such view.\n     */\n    get current() {\n        let index = null;\n        // There's no focused view in the focusables.\n        if (this.focusTracker.focusedElement === null) {\n            return null;\n        }\n        this.focusables.find((view, viewIndex) => {\n            const focused = view.element === this.focusTracker.focusedElement;\n            if (focused) {\n                index = viewIndex;\n            }\n            return focused;\n        });\n        return index;\n    }\n    /**\n     * Focuses the {@link #first} item in {@link #focusables}.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    focusFirst() {\n        this._focus(this.first, 1);\n    }\n    /**\n     * Focuses the {@link #last} item in {@link #focusables}.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    focusLast() {\n        this._focus(this.last, -1);\n    }\n    /**\n     * Focuses the {@link #next} item in {@link #focusables}.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    focusNext() {\n        const next = this.next;\n        // If there's only one focusable item, we need to let the outside world know\n        // that the next cycle is about to happen. This may be useful\n        // e.g. if you want to move the focus to the parent focus cycler.\n        // Note that the focus is not actually moved in this case.\n        if (next && this.focusables.getIndex(next) === this.current) {\n            this.fire('forwardCycle');\n            return;\n        }\n        if (next === this.first) {\n            this.fire('forwardCycle');\n        }\n        else {\n            this._focus(next, 1);\n        }\n    }\n    /**\n     * Focuses the {@link #previous} item in {@link #focusables}.\n     *\n     * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n     */\n    focusPrevious() {\n        const previous = this.previous;\n        if (previous && this.focusables.getIndex(previous) === this.current) {\n            this.fire('backwardCycle');\n            return;\n        }\n        if (previous === this.last) {\n            this.fire('backwardCycle');\n        }\n        else {\n            this._focus(previous, -1);\n        }\n    }\n    /**\n     * Allows for creating continuous focus cycling across multiple focus cyclers and their collections of {@link #focusables}.\n     *\n     * It starts listening to the {@link module:ui/focuscycler~FocusCyclerForwardCycleEvent} and\n     * {@link module:ui/focuscycler~FocusCyclerBackwardCycleEvent} events of the chained focus cycler and engages,\n     * whenever the user reaches the last (forwards navigation) or first (backwards navigation) focusable view\n     * and would normally start over. Instead, the navigation continues on the higher level (flattens).\n     *\n     * For instance, for the following nested focus navigation structure, the focus would get stuck the moment\n     * the AB gets focused and its focus cycler starts managing it:\n     *\n     *\t   ┌────────────┐   ┌──────────────────────────────────┐   ┌────────────┐\n     *\t   │ AA         │   │ AB                               │   │ AC         │\n     *\t   │            │   │                                  │   │            │\n     *\t   │            │   │    ┌─────┐  ┌─────┐  ┌─────┐     │   │            │\n     *\t   │            │   │ ┌──► ABA ├──► ABB ├──► ABC ├───┐ │   │            │\n     *\t   │            ├───► │  └─────┘  └─────┘  └─────┘   │ │   │            │\n     *\t   │            │   │ │                              │ │   │            │\n     *\t   │            │   │ │                              │ │   │            │\n     *\t   │            │   │ └──────────────────────────────┘ │   │            │\n     *\t   │            │   │                                  │   │            │\n     *\t   └────────────┘   └──────────────────────────────────┘   └────────────┘\n     *\n     * Chaining a focus tracker that manages AA, AB, and AC with the focus tracker that manages ABA, ABB, and ABC\n     * creates a seamless navigation experience instead:\n     *\n     *\t   ┌────────────┐   ┌──────────────────────────────────┐   ┌────────────┐\n     *\t   │ AA         │   │ AB                               │   │ AC         │\n     *\t   │            │   │                                  │   │            │\n     *\t   │            │   │    ┌─────┐  ┌─────┐  ┌─────┐     │   │            │\n     *\t   │            │   │ ┌──► ABA ├──► ABB ├──► ABC ├──┐  │   │            │\n     *\t┌──►            ├───┼─┘  └─────┘  └─────┘  └─────┘  └──┼───►            ├──┐\n     *\t│  │            │   │                                  │   │            │  │\n     *\t│  │            │   │                                  │   │            │  │\n     *\t│  │            │   │                                  │   │            │  │\n     *\t│  │            │   │                                  │   │            │  │\n     *\t│  └────────────┘   └──────────────────────────────────┘   └────────────┘  │\n     *\t│                                                                          │\n     *\t│                                                                          │\n     *\t└──────────────────────────────────────────────────────────────────────────┘\n     *\n     * See {@link #unchain} to reverse the chaining.\n     */\n    chain(chainedFocusCycler) {\n        const getCurrentFocusedView = () => {\n            // This may happen when one focus cycler does not include focusables of the other (horizontal case).\n            if (this.current === null) {\n                return null;\n            }\n            return this.focusables.get(this.current);\n        };\n        this.listenTo(chainedFocusCycler, 'forwardCycle', evt => {\n            const oldCurrent = getCurrentFocusedView();\n            this.focusNext();\n            // Stop the event propagation only if an attempt at focusing the view actually moved the focus.\n            // If not, let the otherFocusCycler handle the event.\n            if (oldCurrent !== getCurrentFocusedView()) {\n                evt.stop();\n            }\n            // The priority is critical for cycling across multiple chain levels when there's a single view at some of them only.\n        }, { priority: 'low' });\n        this.listenTo(chainedFocusCycler, 'backwardCycle', evt => {\n            const oldCurrent = getCurrentFocusedView();\n            this.focusPrevious();\n            // Stop the event propagation only if an attempt at focusing the view actually moved the focus.\n            // If not, let the otherFocusCycler handle the event.\n            if (oldCurrent !== getCurrentFocusedView()) {\n                evt.stop();\n            }\n            // The priority is critical for cycling across multiple chain levels when there's a single view at some of them only.\n        }, { priority: 'low' });\n    }\n    /**\n     * Reverses a chaining made by {@link #chain}.\n     */\n    unchain(otherFocusCycler) {\n        this.stopListening(otherFocusCycler);\n    }\n    /**\n     * Focuses the given view if it exists.\n     *\n     * @param view The view to be focused\n     * @param direction The direction of the focus if the view has focusable children.\n     * @returns\n     */\n    _focus(view, direction) {\n        // Don't fire focus events if the view is already focused.\n        // Such attempt may occur when cycling with only one focusable item:\n        // even though `focusNext()` method returns without changing focus,\n        // the `forwardCycle` event is fired, triggering the `focusFirst()` method.\n        if (view && this.focusTracker.focusedElement !== view.element) {\n            view.focus(direction);\n        }\n    }\n    /**\n     * Returns the next or previous focusable view in {@link #focusables} with respect\n     * to {@link #current}.\n     *\n     * @param step Either `1` for checking forward from {@link #current} or `-1` for checking backwards.\n     */\n    _getDomFocusableItem(step) {\n        // Cache for speed.\n        const collectionLength = this.focusables.length;\n        if (!collectionLength) {\n            return null;\n        }\n        const current = this.current;\n        // Start from the beginning if no view is focused.\n        // https://github.com/ckeditor/ckeditor5-ui/issues/206\n        if (current === null) {\n            return this[step === 1 ? 'first' : 'last'];\n        }\n        // Note: If current is the only focusable view, it will also be returned for the given step.\n        let focusableItem = this.focusables.get(current);\n        // Cycle in both directions.\n        let index = (current + collectionLength + step) % collectionLength;\n        do {\n            const focusableItemCandidate = this.focusables.get(index);\n            if (isDomFocusable(focusableItemCandidate)) {\n                focusableItem = focusableItemCandidate;\n                break;\n            }\n            // Cycle in both directions.\n            index = (index + collectionLength + step) % collectionLength;\n        } while (index !== current);\n        return focusableItem;\n    }\n}\n/**\n * Checks whether a view can be focused (has `focus()` method and is visible).\n *\n * @param view A view to be checked.\n */\nfunction isDomFocusable(view) {\n    return isFocusable(view) && isVisible(view.element);\n}\n/**\n * Checks whether a view is {@link ~FocusableView}.\n *\n * @param view A view to be checked.\n */\nexport function isFocusable(view) {\n    return !!('focus' in view && typeof view.focus == 'function');\n}\n/**\n * Checks whether a view is an instance of {@link ~ViewWithFocusCycler}.\n *\n * @param view A view to be checked.\n */\nexport function isViewWithFocusCycler(view) {\n    return isFocusable(view) && 'focusCycler' in view && view.focusCycler instanceof FocusCycler;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { global } from '@ckeditor/ckeditor5-utils';\n/**\n * A mixin that brings the possibility to observe dragging of the view element.\n * The view has to implement the {@link ~DraggableView} interface to use it:\n *\n * ```js\n * export default class MyDraggableView extends DraggableViewMixin( View ) implements DraggableView {\n * \t\t// ...\n * }\n * ```\n *\n * Creating a class extending it attaches a set of mouse and touch listeners allowing to observe dragging of the view element:\n * * `mousedown` and `touchstart` on the view element - starting the dragging.\n * * `mousemove` and `touchmove` on the document - updating the view coordinates.\n * * `mouseup` and `touchend` on the document - stopping the dragging.\n *\n * The mixin itself does not provide a visual feedback (that is, the dragged element does not change its position) -\n * it is up to the developer to implement it.\n */\nexport default function DraggableViewMixin(view) {\n    class DraggableMixin extends view {\n        /**\n         * @inheritDoc\n         */\n        constructor(...args) {\n            super(...args);\n            /**\n             * A bound version of {@link #_onDrag}.\n             */\n            this._onDragBound = this._onDrag.bind(this);\n            /**\n             * A bound version of {@link #_onDragEnd}.\n             */\n            this._onDragEndBound = this._onDragEnd.bind(this);\n            /**\n             * The last coordinates of the view. It is updated on every mouse move.\n             */\n            this._lastDraggingCoordinates = { x: 0, y: 0 };\n            this.on('render', () => {\n                this._attachListeners();\n            });\n            this.set('isDragging', false);\n        }\n        /**\n         * Attaches the listeners for the drag start.\n         */\n        _attachListeners() {\n            this.listenTo(this.element, 'mousedown', this._onDragStart.bind(this));\n            this.listenTo(this.element, 'touchstart', this._onDragStart.bind(this));\n        }\n        /**\n         * Attaches the listeners for the dragging and drag end.\n         */\n        _attachDragListeners() {\n            this.listenTo(global.document, 'mouseup', this._onDragEndBound);\n            this.listenTo(global.document, 'touchend', this._onDragEndBound);\n            this.listenTo(global.document, 'mousemove', this._onDragBound);\n            this.listenTo(global.document, 'touchmove', this._onDragBound);\n        }\n        /**\n         * Detaches the listeners after the drag end.\n         */\n        _detachDragListeners() {\n            this.stopListening(global.document, 'mouseup', this._onDragEndBound);\n            this.stopListening(global.document, 'touchend', this._onDragEndBound);\n            this.stopListening(global.document, 'mousemove', this._onDragBound);\n            this.stopListening(global.document, 'touchmove', this._onDragBound);\n        }\n        /**\n         * Starts the dragging listeners and sets the initial view coordinates.\n         */\n        _onDragStart(evt, domEvt) {\n            if (!this._isHandleElementPressed(domEvt)) {\n                return;\n            }\n            this._attachDragListeners();\n            let x = 0;\n            let y = 0;\n            // If dragging is performed with a mouse, there is only one set of coordinates available.\n            // But when using a touch device, there may be many of them, so use the coordinates from the first touch.\n            if (domEvt instanceof MouseEvent) {\n                x = domEvt.clientX;\n                y = domEvt.clientY;\n            }\n            else {\n                x = domEvt.touches[0].clientX;\n                y = domEvt.touches[0].clientY;\n            }\n            this._lastDraggingCoordinates = { x, y };\n            this.isDragging = true;\n        }\n        /**\n         * Updates the view coordinates and fires the `drag` event.\n         */\n        _onDrag(evt, domEvt) {\n            // If dragging was stopped by some external intervention, stop listening.\n            if (!this.isDragging) {\n                this._detachDragListeners();\n                return;\n            }\n            let newX = 0;\n            let newY = 0;\n            // If dragging is performed with a mouse, there is only one set of coordinates available.\n            // But when using a touch device, there may be many of them, so use the coordinates from the first touch.\n            if (domEvt instanceof MouseEvent) {\n                newX = domEvt.clientX;\n                newY = domEvt.clientY;\n            }\n            else {\n                newX = domEvt.touches[0].clientX;\n                newY = domEvt.touches[0].clientY;\n            }\n            // Prevents selection of text while dragging on Safari.\n            domEvt.preventDefault();\n            this.fire('drag', {\n                deltaX: Math.round(newX - this._lastDraggingCoordinates.x),\n                deltaY: Math.round(newY - this._lastDraggingCoordinates.y)\n            });\n            this._lastDraggingCoordinates = { x: newX, y: newY };\n        }\n        /**\n         * Stops the dragging and detaches the listeners.\n         */\n        _onDragEnd() {\n            this._detachDragListeners();\n            this.isDragging = false;\n        }\n        /**\n         * Checks if the drag handle element was pressed.\n         */\n        _isHandleElementPressed(domEvt) {\n            if (!this.dragHandleElement) {\n                return false;\n            }\n            return this.dragHandleElement === domEvt.target ||\n                (domEvt.target instanceof HTMLElement && this.dragHandleElement.contains(domEvt.target));\n        }\n    }\n    return DraggableMixin;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dialog/dialogactionsview\n */\nimport { FocusTracker, KeystrokeHandler } from '@ckeditor/ckeditor5-utils';\nimport ButtonView from '../button/buttonview.js';\nimport View from '../view.js';\nimport ViewCollection from '../viewcollection.js';\nimport FocusCycler from '../focuscycler.js';\nimport '../../theme/components/dialog/dialogactions.css';\n/**\n * A dialog actions view class. It contains button views which are used to execute dialog actions.\n */\nexport default class DialogActionsView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.children = this.createCollection();\n        this.keystrokes = new KeystrokeHandler();\n        this._focusTracker = new FocusTracker();\n        this._focusables = new ViewCollection();\n        this.focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this._focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-dialog__actions'\n                ]\n            },\n            children: this.children\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * Creates the button views based on the given definitions.\n     * Then adds them to the {@link #children} collection and to the focus cycler.\n     */\n    setButtons(definitions) {\n        for (const definition of definitions) {\n            const button = new ButtonView(this.locale);\n            let property;\n            button.on('execute', () => definition.onExecute());\n            if (definition.onCreate) {\n                definition.onCreate(button);\n            }\n            for (property in definition) {\n                if (property != 'onExecute' && property != 'onCreate') {\n                    button.set(property, definition[property]);\n                }\n            }\n            this.children.add(button);\n        }\n        this._updateFocusCyclableItems();\n    }\n    /**\n     * @inheritDoc\n     */\n    focus(direction) {\n        if (direction === -1) {\n            this.focusCycler.focusLast();\n        }\n        else {\n            this.focusCycler.focusFirst();\n        }\n    }\n    /**\n     * Adds all elements from the {@link #children} collection to the {@link #_focusables} collection\n     * and to the {@link #_focusTracker} instance.\n     */\n    _updateFocusCyclableItems() {\n        Array.from(this.children).forEach(v => {\n            this._focusables.add(v);\n            this._focusTracker.add(v.element);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dialog/dialogcontentview\n */\nimport View from '../view.js';\n/**\n * A dialog content view class.\n */\nexport default class DialogContentView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.children = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: ['ck', 'ck-dialog__content']\n            },\n            children: this.children\n        });\n    }\n    /**\n     * Removes all the child views.\n     */\n    reset() {\n        while (this.children.length) {\n            this.children.remove(0);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dialog/dialogview\n */\nimport { KeystrokeHandler, FocusTracker, Rect, global, toUnit } from '@ckeditor/ckeditor5-utils';\nimport { icons } from '@ckeditor/ckeditor5-core';\nimport ViewCollection from '../viewcollection.js';\nimport View from '../view.js';\nimport FormHeaderView from '../formheader/formheaderview.js';\nimport ButtonView from '../button/buttonview.js';\nimport FocusCycler, { isViewWithFocusCycler, isFocusable } from '../focuscycler.js';\nimport DraggableViewMixin from '../bindings/draggableviewmixin.js';\nimport DialogActionsView from './dialogactionsview.js';\nimport DialogContentView from './dialogcontentview.js';\nimport '../../theme/components/dialog/dialog.css';\n// @if CK_DEBUG_DIALOG // const RectDrawer = require( '@ckeditor/ckeditor5-utils/tests/_utils/rectdrawer' ).default;\n/**\n * Available dialog view positions:\n *\n * * `DialogViewPosition.SCREEN_CENTER` &ndash; A fixed position in the center of the screen.\n * * `DialogViewPosition.EDITOR_CENTER` &ndash; A dynamic position in the center of the editor editable area.\n * * `DialogViewPosition.EDITOR_TOP_SIDE` &ndash; A dynamic position at the top-right (for the left-to-right languages)\n * or top-left (for right-to-left languages) corner of the editor editable area.\n * * `DialogViewPosition.EDITOR_TOP_CENTER` &ndash; A dynamic position at the top-center of the editor editable area.\n * * `DialogViewPosition.EDITOR_BOTTOM_CENTER` &ndash; A dynamic position at the bottom-center of the editor editable area.\n * * `DialogViewPosition.EDITOR_ABOVE_CENTER` &ndash; A dynamic position centered above the editor editable area.\n * * `DialogViewPosition.EDITOR_BELOW_CENTER` &ndash; A dynamic position centered below the editor editable area.\n *\n * The position of a dialog is specified by a {@link module:ui/dialog/dialog~DialogDefinition#position `position` property} of a\n * definition passed to the {@link module:ui/dialog/dialog~Dialog#show} method.\n */\nexport const DialogViewPosition = {\n    SCREEN_CENTER: 'screen-center',\n    EDITOR_CENTER: 'editor-center',\n    EDITOR_TOP_SIDE: 'editor-top-side',\n    EDITOR_TOP_CENTER: 'editor-top-center',\n    EDITOR_BOTTOM_CENTER: 'editor-bottom-center',\n    EDITOR_ABOVE_CENTER: 'editor-above-center',\n    EDITOR_BELOW_CENTER: 'editor-below-center'\n};\nconst toPx = /* #__PURE__ */ toUnit('px');\n/**\n * A dialog view class.\n */\nclass DialogView extends /* #__PURE__ */ DraggableViewMixin(View) {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, { getCurrentDomRoot, getViewportOffset }) {\n        super(locale);\n        /**\n         * A flag indicating if the dialog was moved manually. If so, its position\n         * will not be updated automatically upon window resize or document scroll.\n         */\n        this.wasMoved = false;\n        const bind = this.bindTemplate;\n        const t = locale.t;\n        this.set('className', '');\n        this.set('ariaLabel', t('Editor dialog'));\n        this.set('isModal', false);\n        this.set('position', DialogViewPosition.SCREEN_CENTER);\n        this.set('_isVisible', false);\n        this.set('_isTransparent', false);\n        this.set('_top', 0);\n        this.set('_left', 0);\n        this._getCurrentDomRoot = getCurrentDomRoot;\n        this._getViewportOffset = getViewportOffset;\n        this.decorate('moveTo');\n        this.parts = this.createCollection();\n        this.keystrokes = new KeystrokeHandler();\n        this.focusTracker = new FocusTracker();\n        this._focusables = new ViewCollection();\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-dialog-overlay',\n                    bind.if('isModal', 'ck-dialog-overlay__transparent', isModal => !isModal),\n                    bind.if('_isVisible', 'ck-hidden', value => !value)\n                ],\n                // Prevent from editor losing focus when clicking on the modal overlay.\n                tabindex: '-1'\n            },\n            children: [\n                {\n                    tag: 'div',\n                    attributes: {\n                        tabindex: '-1',\n                        class: [\n                            'ck',\n                            'ck-dialog',\n                            bind.if('isModal', 'ck-dialog_modal'),\n                            bind.to('className')\n                        ],\n                        role: 'dialog',\n                        'aria-label': bind.to('ariaLabel'),\n                        style: {\n                            top: bind.to('_top', top => toPx(top)),\n                            left: bind.to('_left', left => toPx(left)),\n                            visibility: bind.if('_isTransparent', 'hidden')\n                        }\n                    },\n                    children: this.parts\n                }\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.keystrokes.set('Esc', (data, cancel) => {\n            this.fire('close', { source: 'escKeyPress' });\n            cancel();\n        });\n        // Support for dragging the modal.\n        this.on('drag', (evt, { deltaX, deltaY }) => {\n            this.wasMoved = true;\n            this.moveBy(deltaX, deltaY);\n        });\n        // Update dialog position upon window resize, if the position was not changed manually.\n        this.listenTo(global.window, 'resize', () => {\n            if (this._isVisible && !this.wasMoved) {\n                this.updatePosition();\n            }\n        });\n        // Update dialog position upon document scroll, if the position was not changed manually.\n        this.listenTo(global.document, 'scroll', () => {\n            if (this._isVisible && !this.wasMoved) {\n                this.updatePosition();\n            }\n        });\n        this.on('change:_isVisible', (evt, name, isVisible) => {\n            if (isVisible) {\n                // Let the content render first, then apply the position. Otherwise, the calculated DOM Rects\n                // will not reflect the final look of the dialog. Note that we're not using #_moveOffScreen() here because\n                // it causes a violent movement of the viewport on iOS (because the dialog still keeps the DOM focus).\n                this._isTransparent = true;\n                // FYI: RAF is too short. We need to wait a bit longer.\n                setTimeout(() => {\n                    this.updatePosition();\n                    this._isTransparent = false;\n                    // The view must get the focus after it gets visible. But this is only possible\n                    // after the dialog is no longer transparent.\n                    this.focus();\n                }, 10);\n            }\n        });\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * Returns the element that should be used as a drag handle.\n     */\n    get dragHandleElement() {\n        // Modals should not be draggable.\n        if (this.headerView && !this.isModal) {\n            return this.headerView.element;\n        }\n        else {\n            return null;\n        }\n    }\n    /**\n     * Creates the dialog parts. Which of them are created depends on the arguments passed to the method.\n     * There are no rules regarding the dialog construction, that is, no part is mandatory.\n     * Each part can only be created once.\n     *\n     * @internal\n     */\n    setupParts({ icon, title, hasCloseButton = true, content, actionButtons }) {\n        if (title) {\n            this.headerView = new FormHeaderView(this.locale, { icon });\n            if (hasCloseButton) {\n                this.closeButtonView = this._createCloseButton();\n                this.headerView.children.add(this.closeButtonView);\n            }\n            this.headerView.label = title;\n            this.ariaLabel = title;\n            this.parts.add(this.headerView, 0);\n        }\n        if (content) {\n            // Normalize the content specified in the arguments.\n            if (content instanceof View) {\n                content = [content];\n            }\n            this.contentView = new DialogContentView(this.locale);\n            this.contentView.children.addMany(content);\n            this.parts.add(this.contentView);\n        }\n        if (actionButtons) {\n            this.actionsView = new DialogActionsView(this.locale);\n            this.actionsView.setButtons(actionButtons);\n            this.parts.add(this.actionsView);\n        }\n        this._updateFocusCyclableItems();\n    }\n    /**\n     * Focuses the first focusable element inside the dialog.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Normalizes the passed coordinates to make sure the dialog view\n     * is displayed within the visible viewport and moves it there.\n     *\n     * @internal\n     */\n    moveTo(left, top) {\n        const viewportRect = this._getViewportRect();\n        const dialogRect = this._getDialogRect();\n        // Don't let the dialog go beyond the right edge of the viewport.\n        if (left + dialogRect.width > viewportRect.right) {\n            left = viewportRect.right - dialogRect.width;\n        }\n        // Don't let the dialog go beyond the left edge of the viewport.\n        if (left < viewportRect.left) {\n            left = viewportRect.left;\n        }\n        // Don't let the dialog go beyond the top edge of the viewport.\n        if (top < viewportRect.top) {\n            top = viewportRect.top;\n        }\n        // Note: We don't do the same for the bottom edge to allow users to resize the window vertically\n        // and let the dialog to stay put instead of covering the editing root.\n        this._moveTo(left, top);\n    }\n    /**\n     * Moves the dialog to the specified coordinates.\n     */\n    _moveTo(left, top) {\n        this._left = left;\n        this._top = top;\n    }\n    /**\n     * Moves the dialog by the specified offset.\n     *\n     * @internal\n     */\n    moveBy(left, top) {\n        this.moveTo(this._left + left, this._top + top);\n    }\n    /**\n     * Moves the dialog view to the off-screen position.\n     * Used when there is no space to display the dialog.\n     */\n    _moveOffScreen() {\n        this._moveTo(-9999, -9999);\n    }\n    /**\n     * Recalculates the dialog according to the set position and viewport,\n     * and moves it to the new position.\n     */\n    updatePosition() {\n        if (!this.element || !this.element.parentNode) {\n            return;\n        }\n        const viewportRect = this._getViewportRect();\n        // Actual position may be different from the configured one if there's no DOM root.\n        let configuredPosition = this.position;\n        let domRootRect;\n        if (!this._getCurrentDomRoot()) {\n            configuredPosition = DialogViewPosition.SCREEN_CENTER;\n        }\n        else {\n            domRootRect = this._getVisibleDomRootRect(viewportRect);\n        }\n        const defaultOffset = DialogView.defaultOffset;\n        const dialogRect = this._getDialogRect();\n        // @if CK_DEBUG_DIALOG // RectDrawer.clear();\n        // @if CK_DEBUG_DIALOG // RectDrawer.draw( viewportRect, { outlineColor: 'blue' }, 'Viewport' );\n        switch (configuredPosition) {\n            case DialogViewPosition.EDITOR_TOP_SIDE: {\n                // @if CK_DEBUG_DIALOG // if ( domRootRect ) {\n                // @if CK_DEBUG_DIALOG // \tRectDrawer.draw( domRootRect, { outlineColor: 'red', zIndex: 9999999 }, 'DOM ROOT' );\n                // @if CK_DEBUG_DIALOG // }\n                if (domRootRect) {\n                    const leftCoordinate = this.locale.contentLanguageDirection === 'ltr' ?\n                        domRootRect.right - dialogRect.width - defaultOffset :\n                        domRootRect.left + defaultOffset;\n                    this.moveTo(leftCoordinate, domRootRect.top + defaultOffset);\n                }\n                else {\n                    this._moveOffScreen();\n                }\n                break;\n            }\n            case DialogViewPosition.EDITOR_CENTER: {\n                if (domRootRect) {\n                    this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), Math.round(domRootRect.top + domRootRect.height / 2 - dialogRect.height / 2));\n                }\n                else {\n                    this._moveOffScreen();\n                }\n                break;\n            }\n            case DialogViewPosition.SCREEN_CENTER: {\n                this.moveTo(Math.round((viewportRect.width - dialogRect.width) / 2), Math.round((viewportRect.height - dialogRect.height) / 2));\n                break;\n            }\n            case DialogViewPosition.EDITOR_TOP_CENTER: {\n                // @if CK_DEBUG_DIALOG // if ( domRootRect ) {\n                // @if CK_DEBUG_DIALOG // \tRectDrawer.draw( domRootRect, { outlineColor: 'red', zIndex: 9999999 }, 'DOM ROOT' );\n                // @if CK_DEBUG_DIALOG // }\n                if (domRootRect) {\n                    this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.top + defaultOffset);\n                }\n                else {\n                    this._moveOffScreen();\n                }\n                break;\n            }\n            case DialogViewPosition.EDITOR_BOTTOM_CENTER: {\n                // @if CK_DEBUG_DIALOG // if ( domRootRect ) {\n                // @if CK_DEBUG_DIALOG // \tRectDrawer.draw( domRootRect, { outlineColor: 'red', zIndex: 9999999 }, 'DOM ROOT' );\n                // @if CK_DEBUG_DIALOG // }\n                if (domRootRect) {\n                    this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.bottom - dialogRect.height - defaultOffset);\n                }\n                else {\n                    this._moveOffScreen();\n                }\n                break;\n            }\n            case DialogViewPosition.EDITOR_ABOVE_CENTER: {\n                // @if CK_DEBUG_DIALOG // if ( domRootRect ) {\n                // @if CK_DEBUG_DIALOG // \tRectDrawer.draw( domRootRect, { outlineColor: 'red', zIndex: 9999999 }, 'DOM ROOT' );\n                // @if CK_DEBUG_DIALOG // }\n                if (domRootRect) {\n                    this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.top - dialogRect.height - defaultOffset);\n                }\n                else {\n                    this._moveOffScreen();\n                }\n                break;\n            }\n            case DialogViewPosition.EDITOR_BELOW_CENTER: {\n                // @if CK_DEBUG_DIALOG // if ( domRootRect ) {\n                // @if CK_DEBUG_DIALOG // \tRectDrawer.draw( domRootRect, { outlineColor: 'red', zIndex: 9999999 }, 'DOM ROOT' );\n                // @if CK_DEBUG_DIALOG // }\n                if (domRootRect) {\n                    this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.bottom + defaultOffset);\n                }\n                else {\n                    this._moveOffScreen();\n                }\n                break;\n            }\n        }\n    }\n    /**\n     * Calculates the visible DOM root part.\n     */\n    _getVisibleDomRootRect(viewportRect) {\n        let visibleDomRootRect = new Rect(this._getCurrentDomRoot()).getVisible();\n        if (!visibleDomRootRect) {\n            return null;\n        }\n        else {\n            visibleDomRootRect = viewportRect.getIntersection(visibleDomRootRect);\n            if (!visibleDomRootRect) {\n                return null;\n            }\n        }\n        return visibleDomRootRect;\n    }\n    /**\n     * Calculates the dialog element rect.\n     */\n    _getDialogRect() {\n        return new Rect(this.element.firstElementChild);\n    }\n    /**\n     * Returns a viewport `Rect` shrunk by the viewport offset config from all sides.\n     *\n     * TODO: This is a duplicate from position.ts module. It should either be exported there or land somewhere in utils.\n     */\n    _getViewportRect() {\n        const viewportRect = new Rect(global.window);\n        // Modals should not be restricted by the viewport offsets as they are always displayed on top of the page.\n        if (this.isModal) {\n            return viewportRect;\n        }\n        const viewportOffset = {\n            top: 0,\n            bottom: 0,\n            left: 0,\n            right: 0,\n            ...this._getViewportOffset()\n        };\n        viewportRect.top += viewportOffset.top;\n        viewportRect.height -= viewportOffset.top;\n        viewportRect.bottom -= viewportOffset.bottom;\n        viewportRect.height -= viewportOffset.bottom;\n        viewportRect.left += viewportOffset.left;\n        viewportRect.right -= viewportOffset.right;\n        viewportRect.width -= viewportOffset.left + viewportOffset.right;\n        return viewportRect;\n    }\n    /**\n     * Collects all focusable elements inside the dialog parts\n     * and adds them to the focus tracker and focus cycler.\n     */\n    _updateFocusCyclableItems() {\n        const focusables = [];\n        if (this.contentView) {\n            for (const child of this.contentView.children) {\n                if (isFocusable(child)) {\n                    focusables.push(child);\n                }\n            }\n        }\n        if (this.actionsView) {\n            focusables.push(this.actionsView);\n        }\n        if (this.closeButtonView) {\n            focusables.push(this.closeButtonView);\n        }\n        focusables.forEach(focusable => {\n            this._focusables.add(focusable);\n            this.focusTracker.add(focusable.element);\n            if (isViewWithFocusCycler(focusable)) {\n                this._focusCycler.chain(focusable.focusCycler);\n            }\n        });\n    }\n    /**\n     * Creates the close button view that is displayed in the header view corner.\n     */\n    _createCloseButton() {\n        const buttonView = new ButtonView(this.locale);\n        const t = this.locale.t;\n        buttonView.set({\n            label: t('Close'),\n            tooltip: true,\n            icon: icons.cancel\n        });\n        buttonView.on('execute', () => this.fire('close', { source: 'closeButton' }));\n        return buttonView;\n    }\n}\n/**\n * A default dialog element offset from the reference element (e.g. editor editable area).\n */\nDialogView.defaultOffset = 15;\nexport default DialogView;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport DialogView, { DialogViewPosition } from './dialogview.js';\n/**\n * The dialog controller class. It is used to show and hide the {@link module:ui/dialog/dialogview~DialogView}.\n */\nexport default class Dialog extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Dialog';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        const t = editor.t;\n        this._initShowHideListeners();\n        this._initFocusToggler();\n        this._initMultiRootIntegration();\n        this.set({\n            id: null,\n            isOpen: false\n        });\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            categoryId: 'navigation',\n            keystrokes: [{\n                    label: t('Move focus in and out of an active dialog window'),\n                    keystroke: 'Ctrl+F6',\n                    mayRequireFn: true\n                }]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this._unlockBodyScroll();\n    }\n    /**\n     * Initiates listeners for the `show` and `hide` events emitted by this plugin.\n     *\n     * We could not simply decorate the {@link #show} and {@link #hide} methods to fire events,\n     * because they would be fired in the wrong order &ndash; first would be `show` and then `hide`\n     * (because showing the dialog actually starts with hiding the previously visible one).\n     * Hence, we added private methods {@link #_show} and {@link #_hide} which are called on events\n     * in the desired sequence.\n     */\n    _initShowHideListeners() {\n        this.on('show', (evt, args) => {\n            this._show(args);\n        });\n        // 'low' priority allows to add custom callback between `_show()` and `onShow()`.\n        this.on('show', (evt, args) => {\n            if (args.onShow) {\n                args.onShow(this);\n            }\n        }, { priority: 'low' });\n        this.on('hide', () => {\n            if (Dialog._visibleDialogPlugin) {\n                Dialog._visibleDialogPlugin._hide();\n            }\n        });\n        // 'low' priority allows to add custom callback between `_hide()` and `onHide()`.\n        this.on('hide', () => {\n            if (this._onHide) {\n                this._onHide(this);\n                this._onHide = undefined;\n            }\n        }, { priority: 'low' });\n    }\n    /**\n     * Initiates keystroke handler for toggling the focus between the editor and the dialog view.\n     */\n    _initFocusToggler() {\n        const editor = this.editor;\n        editor.keystrokes.set('Ctrl+F6', (data, cancel) => {\n            if (!this.isOpen || this.view.isModal) {\n                return;\n            }\n            if (this.view.focusTracker.isFocused) {\n                editor.editing.view.focus();\n            }\n            else {\n                this.view.focus();\n            }\n            cancel();\n        });\n    }\n    /**\n     * Provides an integration between the root attaching and detaching and positioning of the view.\n     */\n    _initMultiRootIntegration() {\n        const model = this.editor.model;\n        model.document.on('change:data', () => {\n            if (!this.view) {\n                return;\n            }\n            const changedRoots = model.document.differ.getChangedRoots();\n            for (const changes of changedRoots) {\n                if (changes.state) {\n                    this.view.updatePosition();\n                }\n            }\n        });\n    }\n    /**\n     * Displays a dialog window.\n     *\n     * This method requires a {@link ~DialogDefinition} that defines the dialog's content, title, icon, action buttons, etc.\n     *\n     * For example, the following definition will create a dialog with:\n     * * A header consisting of an icon, a title, and a \"Close\" button (it is added by default).\n     * * A content consisting of a view with a single paragraph.\n     * * A footer consisting of two buttons: \"Yes\" and \"No\".\n     *\n     * ```js\n     * // Create the view that will be used as the dialog's content.\n     * const textView = new View( locale );\n     *\n     * textView.setTemplate( {\n     * \ttag: 'div',\n     * \tattributes: {\n     * \t\tstyle: {\n     * \t\t\tpadding: 'var(--ck-spacing-large)',\n     * \t\t\twhiteSpace: 'initial',\n     * \t\t\twidth: '100%',\n     * \t\t\tmaxWidth: '500px'\n     * \t\t},\n     * \t\ttabindex: -1\n     * \t},\n     * \tchildren: [\n     * \t\t'Lorem ipsum dolor sit amet...'\n     * \t]\n     * } );\n     *\n     * // Show the dialog.\n     * editor.plugins.get( 'Dialog' ).show( {\n     *\tid: 'myDialog',\n     * \ticon: 'myIcon', // This should be an SVG string.\n     * \ttitle: 'My dialog',\n     * \tcontent: textView,\n     * \tactionButtons: [\n     *\t\t{\n     *\t\t\tlabel: t( 'Yes' ),\n     *\t\t\tclass: 'ck-button-action',\n     *\t\t\twithText: true,\n     *\t\t\tonExecute: () => dialog.hide()\n     *\t\t},\n     *\t\t{\n     *\t\t\tlabel: t( 'No' ),\n     *\t\t\twithText: true,\n     *\t\t\tonExecute: () => dialog.hide()\n     *\t\t}\n     *\t]\n     * } );\n     * ```\n     *\n     * By specifying the {@link ~DialogDefinition#onShow} and {@link ~DialogDefinition#onHide} callbacks\n     * it is also possible to add callbacks that will be called when the dialog is shown or hidden.\n     *\n     * For example, the callbacks in the following definition:\n     * * Disable the default behavior of the <kbd>Esc</kbd> key.\n     * * Fire a custom event when the dialog gets hidden.\n     *\n     * ```js\n     * editor.plugins.get( 'Dialog' ).show( {\n     * \t// ...\n     * \tonShow: dialog => {\n     * \t\tdialog.view.on( 'close', ( evt, data ) => {\n     * \t\t\t// Only prevent the event from the \"Esc\" key - do not affect the other ways of closing the dialog.\n     * \t\t\tif ( data.source === 'escKeyPress' ) {\n     * \t\t\t\tevt.stop();\n     * \t\t\t}\n     * \t\t} );\n     * \t},\n     * \tonHide: dialog => {\n     * \t\tdialog.fire( 'dialogDestroyed' );\n     * \t}\n     * } );\n     * ```\n     *\n     * Internally, calling this method:\n     * 1. Hides the currently visible dialog (if any) calling the {@link #hide} method\n     * (fires the {@link ~DialogHideEvent hide event}).\n     * 2. Fires the {@link ~DialogShowEvent show event} which allows for adding callbacks that customize the\n     * behavior of the dialog.\n     * 3. Shows the dialog.\n     */\n    show(dialogDefinition) {\n        this.hide();\n        this.fire(`show:${dialogDefinition.id}`, dialogDefinition);\n    }\n    /**\n     * Handles creating the {@link module:ui/dialog/dialogview~DialogView} instance and making it visible.\n     */\n    _show({ id, icon, title, hasCloseButton = true, content, actionButtons, className, isModal, position, onHide }) {\n        const editor = this.editor;\n        this.view = new DialogView(editor.locale, {\n            getCurrentDomRoot: () => {\n                return editor.editing.view.getDomRoot(editor.model.document.selection.anchor.root.rootName);\n            },\n            getViewportOffset: () => {\n                return editor.ui.viewportOffset;\n            }\n        });\n        const view = this.view;\n        view.on('close', () => {\n            this.hide();\n        });\n        editor.ui.view.body.add(view);\n        editor.keystrokes.listenTo(view.element);\n        // Unless the user specified a position, modals should always be centered on the screen.\n        // Otherwise, let's keep dialogs centered in the editing root by default.\n        if (!position) {\n            position = isModal ? DialogViewPosition.SCREEN_CENTER : DialogViewPosition.EDITOR_CENTER;\n        }\n        if (isModal) {\n            this._lockBodyScroll();\n        }\n        view.set({\n            position,\n            _isVisible: true,\n            className,\n            isModal\n        });\n        view.setupParts({\n            icon,\n            title,\n            hasCloseButton,\n            content,\n            actionButtons\n        });\n        this.id = id;\n        if (onHide) {\n            this._onHide = onHide;\n        }\n        this.isOpen = true;\n        Dialog._visibleDialogPlugin = this;\n    }\n    /**\n     * Hides the dialog. This method is decorated to enable interacting on the {@link ~DialogHideEvent hide event}.\n     *\n     * See {@link #show}.\n     */\n    hide() {\n        if (Dialog._visibleDialogPlugin) {\n            Dialog._visibleDialogPlugin.fire(`hide:${Dialog._visibleDialogPlugin.id}`);\n        }\n    }\n    /**\n     * Destroys the {@link module:ui/dialog/dialogview~DialogView} and cleans up the stored dialog state.\n     */\n    _hide() {\n        if (!this.view) {\n            return;\n        }\n        const editor = this.editor;\n        const view = this.view;\n        if (view.isModal) {\n            this._unlockBodyScroll();\n        }\n        // Reset the content view to prevent its children from being destroyed in the standard\n        // View#destroy() (and collections) chain. If the content children were left in there,\n        // they would have to be re-created by the feature using the dialog every time the dialog\n        // shows up.\n        if (view.contentView) {\n            view.contentView.reset();\n        }\n        editor.ui.view.body.remove(view);\n        editor.ui.focusTracker.remove(view.element);\n        editor.keystrokes.stopListening(view.element);\n        view.destroy();\n        editor.editing.view.focus();\n        this.id = null;\n        this.isOpen = false;\n        Dialog._visibleDialogPlugin = null;\n    }\n    /**\n     * Makes the <body> unscrollable (e.g. when the modal shows up).\n     */\n    _lockBodyScroll() {\n        document.documentElement.classList.add('ck-dialog-scroll-locked');\n    }\n    /**\n     * Makes the <body> scrollable again (e.g. once the modal hides).\n     */\n    _unlockBodyScroll() {\n        document.documentElement.classList.remove('ck-dialog-scroll-locked');\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { icons } from '@ckeditor/ckeditor5-core';\nimport ButtonView from './buttonview.js';\nimport ButtonLabelView from './buttonlabelview.js';\nimport IconView from '../icon/iconview.js';\nimport View from '../view.js';\nimport '../../theme/components/button/listitembutton.css';\n/**\n * Button that is used as dropdown list item entry.\n */\nexport default class ListItemButtonView extends ButtonView {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, labelView = new ButtonLabelView()) {\n        super(locale, labelView);\n        /**\n         * Holds the view for the check icon of a button list item.\n         */\n        this._checkIconHolderView = new CheckIconHolderView();\n        this.set({\n            hasCheckSpace: false,\n            _hasCheck: this.isToggleable\n        });\n        const bind = this.bindTemplate;\n        this.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-list-item-button',\n                    bind.if('isToggleable', 'ck-list-item-button_toggleable')\n                ]\n            }\n        });\n        this.bind('_hasCheck').to(this, 'hasCheckSpace', this, 'isToggleable', (hasCheckSpace, isToggleable) => hasCheckSpace || isToggleable);\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        if (this._hasCheck) {\n            this.children.add(this._checkIconHolderView, 0);\n        }\n        this._watchCheckIconHolderMount();\n    }\n    /**\n     * Renders the check icon if the button is toggleable.\n     */\n    _watchCheckIconHolderMount() {\n        this._checkIconHolderView\n            .bind('isOn')\n            .to(this, 'isOn', value => this.isToggleable && value);\n        this.on('change:_hasCheck', (evt, propertyName, hasCheck) => {\n            const { children, _checkIconHolderView } = this;\n            if (hasCheck) {\n                children.add(_checkIconHolderView, 0);\n            }\n            else {\n                children.remove(_checkIconHolderView);\n            }\n        });\n    }\n}\nexport class CheckIconHolderView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor() {\n        super();\n        /**\n         * The view for the check icon of the button list item.\n         */\n        this._checkIconView = this._createCheckIconView();\n        const bind = this.bindTemplate;\n        this.children = this.createCollection();\n        this.set('isOn', false);\n        this.setTemplate({\n            tag: 'span',\n            children: this.children,\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-list-item-button__check-holder',\n                    bind.to('isOn', isOn => isOn ? 'ck-on' : 'ck-off')\n                ]\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        if (this.isOn) {\n            this.children.add(this._checkIconView, 0);\n        }\n        this._watchCheckIconMount();\n    }\n    /**\n     * Renders the check icon if the button is toggleable.\n     */\n    _watchCheckIconMount() {\n        this.on('change:isOn', (evt, propertyName, isOn) => {\n            const { children, _checkIconView } = this;\n            if (isOn && !children.has(_checkIconView)) {\n                children.add(_checkIconView);\n            }\n            else if (!isOn && children.has(_checkIconView)) {\n                children.remove(_checkIconView);\n            }\n        });\n    }\n    /**\n     * Creates a check icon view.\n     */\n    _createCheckIconView() {\n        const iconView = new IconView();\n        iconView.content = icons.check;\n        iconView.extendTemplate({\n            attributes: {\n                class: 'ck-list-item-button__check-icon'\n            }\n        });\n        return iconView;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport ListItemButtonView from '../button/listitembuttonview.js';\nimport '../../theme/components/menubar/menubarmenulistitembutton.css';\n/**\n * A menu bar list button view. Buttons like this one execute user actions.\n */\nexport default class MenuBarMenuListItemButtonView extends ListItemButtonView {\n    /**\n     * Creates an instance of the menu bar list button view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        this.set({\n            withText: true,\n            withKeystroke: true,\n            tooltip: false,\n            role: 'menuitem'\n        });\n        this.extendTemplate({\n            attributes: {\n                class: ['ck-menu-bar__menu__item__button']\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/label/labelview\n */\nimport View from '../view.js';\nimport { uid } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/components/label/label.css';\n/**\n * The label view class.\n */\nexport default class LabelView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.set('text', undefined);\n        this.set('for', undefined);\n        this.id = `ck-editor__label_${uid()}`;\n        const bind = this.bindTemplate;\n        this.setTemplate({\n            tag: 'label',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-label'\n                ],\n                id: this.id,\n                for: bind.to('for')\n            },\n            children: [\n                {\n                    text: bind.to('text')\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editorui/accessibilityhelp/accessibilityhelpcontentview\n */\nimport { createElement, env, getEnvKeystrokeText } from '@ckeditor/ckeditor5-utils';\nimport View from '../../view.js';\nimport LabelView from '../../label/labelview.js';\n/**\n * The view displaying keystrokes in the Accessibility help dialog.\n */\nexport default class AccessibilityHelpContentView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, keystrokes) {\n        super(locale);\n        const t = locale.t;\n        const helpLabel = new LabelView();\n        helpLabel.text = t('Help Contents. To close this dialog press ESC.');\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: ['ck', 'ck-accessibility-help-dialog__content'],\n                'aria-labelledby': helpLabel.id,\n                role: 'document',\n                tabindex: -1\n            },\n            children: [\n                createElement(document, 'p', {}, t('Below, you can find a list of keyboard shortcuts that can be used in the editor.')),\n                ...this._createCategories(Array.from(keystrokes.values())),\n                helpLabel\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    focus() {\n        this.element.focus();\n    }\n    /**\n     * Creates `<section><h3>Category label</h3>...</section>` elements for each category of keystrokes.\n     */\n    _createCategories(categories) {\n        return categories.map(categoryDefinition => {\n            const elements = [\n                // Category header.\n                createElement(document, 'h3', {}, categoryDefinition.label),\n                // Category definitions (<dl>) and their optional headers (<h4>).\n                ...Array.from(categoryDefinition.groups.values())\n                    .map(groupDefinition => this._createGroup(groupDefinition))\n                    .flat()\n            ];\n            // Category description (<p>).\n            if (categoryDefinition.description) {\n                elements.splice(1, 0, createElement(document, 'p', {}, categoryDefinition.description));\n            }\n            return createElement(document, 'section', {}, elements);\n        });\n    }\n    /**\n     * Creates `[<h4>Optional label</h4>]<dl>...</dl>` elements for each group of keystrokes in a category.\n     */\n    _createGroup(groupDefinition) {\n        const definitionAndDescriptionElements = groupDefinition.keystrokes\n            .sort((a, b) => a.label.localeCompare(b.label))\n            .map(keystrokeDefinition => this._createGroupRow(keystrokeDefinition))\n            .flat();\n        const elements = [\n            createElement(document, 'dl', {}, definitionAndDescriptionElements)\n        ];\n        if (groupDefinition.label) {\n            elements.unshift(createElement(document, 'h4', {}, groupDefinition.label));\n        }\n        return elements;\n    }\n    /**\n     * Creates `<dt>Keystroke label</dt><dd>Keystroke definition</dd>` elements for each keystroke in a group.\n     */\n    _createGroupRow(keystrokeDefinition) {\n        const t = this.locale.t;\n        const dt = createElement(document, 'dt');\n        const dd = createElement(document, 'dd');\n        const normalizedKeystrokeDefinition = normalizeKeystrokeDefinition(keystrokeDefinition.keystroke);\n        const keystrokeAlternativeHTMLs = [];\n        for (const keystrokeAlternative of normalizedKeystrokeDefinition) {\n            keystrokeAlternativeHTMLs.push(keystrokeAlternative.map(keystrokeToEnvKbd).join(''));\n        }\n        dt.innerHTML = keystrokeDefinition.label;\n        dd.innerHTML = keystrokeAlternativeHTMLs.join(', ') +\n            (keystrokeDefinition.mayRequireFn && env.isMac ? ` ${t('(may require <kbd>Fn</kbd>)')}` : '');\n        return [dt, dd];\n    }\n}\nfunction keystrokeToEnvKbd(keystroke) {\n    return getEnvKeystrokeText(keystroke)\n        .split('+')\n        .map(part => `<kbd>${part}</kbd>`)\n        .join('+');\n}\nfunction normalizeKeystrokeDefinition(definition) {\n    if (typeof definition === 'string') {\n        return [[definition]];\n    }\n    if (typeof definition[0] === 'string') {\n        return [definition];\n    }\n    return definition;\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10 6.628a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\\\"/><path d=\\\"M8.5 9.125a.3.3 0 0 0-.253-.296L5.11 8.327a.75.75 0 1 1 .388-1.449l4.04.716c.267.072.624.08.893.009l4.066-.724a.75.75 0 1 1 .388 1.45l-3.132.5a.3.3 0 0 0-.253.296v1.357a.3.3 0 0 0 .018.102l1.615 4.438a.75.75 0 0 1-1.41.513l-1.35-3.71a.3.3 0 0 0-.281-.197h-.209a.3.3 0 0 0-.282.198l-1.35 3.711a.75.75 0 0 1-1.41-.513l1.64-4.509a.3.3 0 0 0 .019-.103V9.125Z\\\"/><path clip-rule=\\\"evenodd\\\" d=\\\"M10 18.5a8.5 8.5 0 1 1 0-17 8.5 8.5 0 0 1 0 17Zm0 1.5c5.523 0 10-4.477 10-10S15.523 0 10 0 0 4.477 0 10s4.477 10 10 10Z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editorui/accessibilityhelp/accessibilityhelp\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport ButtonView from '../../button/buttonview.js';\nimport Dialog from '../../dialog/dialog.js';\nimport MenuBarMenuListItemButtonView from '../../menubar/menubarmenulistitembuttonview.js';\nimport AccessibilityHelpContentView from './accessibilityhelpcontentview.js';\nimport { getEnvKeystrokeText } from '@ckeditor/ckeditor5-utils';\nimport accessibilityIcon from '../../../theme/icons/accessibility.svg';\nimport '../../../theme/components/editorui/accessibilityhelp.css';\n/**\n * A plugin that brings the accessibility help dialog to the editor available under the <kbd>Alt</kbd>+<kbd>0</kbd>\n * keystroke and via the \"Accessibility help\" toolbar button. The dialog displays a list of keystrokes that can be used\n * by the user to perform various actions in the editor.\n *\n * Keystroke information is loaded from {@link module:core/accessibility~Accessibility#keystrokeInfos}. New entries can be\n * added using the API provided by the {@link module:core/accessibility~Accessibility} class.\n */\nexport default class AccessibilityHelp extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * The view that displays the dialog content (list of keystrokes).\n         * Created when the dialog is opened for the first time.\n         */\n        this.contentView = null;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [Dialog];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'AccessibilityHelp';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.locale.t;\n        editor.ui.componentFactory.add('accessibilityHelp', () => {\n            const button = this._createButton(ButtonView);\n            button.set({\n                tooltip: true,\n                withText: false,\n                label: t('Accessibility help')\n            });\n            return button;\n        });\n        editor.ui.componentFactory.add('menuBar:accessibilityHelp', () => {\n            const button = this._createButton(MenuBarMenuListItemButtonView);\n            button.label = t('Accessibility');\n            return button;\n        });\n        editor.keystrokes.set('Alt+0', (evt, cancel) => {\n            this._toggleDialog();\n            cancel();\n        });\n        this._setupRootLabels();\n    }\n    /**\n     * Creates a button to show accessibility help dialog, for use either in toolbar or in menu bar.\n     */\n    _createButton(ButtonClass) {\n        const editor = this.editor;\n        const dialog = editor.plugins.get('Dialog');\n        const locale = editor.locale;\n        const view = new ButtonClass(locale);\n        view.set({\n            keystroke: 'Alt+0',\n            icon: accessibilityIcon,\n            isToggleable: true\n        });\n        view.on('execute', () => this._toggleDialog());\n        view.bind('isOn').to(dialog, 'id', id => id === 'accessibilityHelp');\n        return view;\n    }\n    /**\n     * Injects a help text into each editing root's `aria-label` attribute allowing assistive technology users\n     * to discover the availability of the Accessibility help dialog.\n     */\n    _setupRootLabels() {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        const t = editor.t;\n        editor.ui.on('ready', () => {\n            editingView.change(writer => {\n                for (const root of editingView.document.roots) {\n                    addAriaLabelTextToRoot(writer, root);\n                }\n            });\n            editor.on('addRoot', (evt, modelRoot) => {\n                const viewRoot = editor.editing.view.document.getRoot(modelRoot.rootName);\n                editingView.change(writer => addAriaLabelTextToRoot(writer, viewRoot));\n            }, { priority: 'low' });\n        });\n        function addAriaLabelTextToRoot(writer, viewRoot) {\n            const currentAriaLabel = viewRoot.getAttribute('aria-label');\n            const newAriaLabel = [currentAriaLabel, t('Press %0 for help.', [getEnvKeystrokeText('Alt+0')])]\n                .filter(segment => segment)\n                .join('. ');\n            writer.setAttribute('aria-label', newAriaLabel, viewRoot);\n        }\n    }\n    /**\n     * Shows the accessibility help dialog. Also, creates {@link #contentView} on demand.\n     */\n    _toggleDialog() {\n        const editor = this.editor;\n        const dialog = editor.plugins.get('Dialog');\n        const t = editor.locale.t;\n        if (!this.contentView) {\n            this.contentView = new AccessibilityHelpContentView(editor.locale, editor.accessibility.keystrokeInfos);\n        }\n        if (dialog.id === 'accessibilityHelp') {\n            dialog.hide();\n        }\n        else {\n            dialog.show({\n                id: 'accessibilityHelp',\n                className: 'ck-accessibility-help-dialog',\n                title: t('Accessibility help'),\n                icon: accessibilityIcon,\n                hasCloseButton: true,\n                content: this.contentView\n            });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editorui/bodycollection\n */\n/* globals document */\nimport Template from '../template.js';\nimport ViewCollection from '../viewcollection.js';\nimport { createElement } from '@ckeditor/ckeditor5-utils';\n/**\n * This is a special {@link module:ui/viewcollection~ViewCollection} dedicated to elements that are detached\n * from the DOM structure of the editor, like panels, icons, etc.\n *\n * The body collection is available in the {@link module:ui/editorui/editoruiview~EditorUIView#body `editor.ui.view.body`} property.\n * Any plugin can add a {@link module:ui/view~View view} to this collection.\n * These views will render in a container placed directly in the `<body>` element.\n * The editor will detach and destroy this collection when the editor will be {@link module:core/editor/editor~Editor#destroy destroyed}.\n *\n * If you need to control the life cycle of the body collection on your own, you can create your own instance of this class.\n *\n * A body collection will render itself automatically in the DOM body element as soon as you call {@link ~BodyCollection#attachToDom}.\n * If you create multiple body collections, this class will create a special wrapper element in the DOM to limit the number of\n * elements created directly in the body and remove it when the last body collection will be\n * {@link ~BodyCollection#detachFromDom detached}.\n */\nexport default class BodyCollection extends ViewCollection {\n    /**\n     * Creates a new instance of the {@link module:ui/editorui/bodycollection~BodyCollection}.\n     *\n     * @param locale The {@link module:core/editor/editor~Editor editor's locale} instance.\n     * @param initialItems The initial items of the collection.\n     */\n    constructor(locale, initialItems = []) {\n        super(initialItems);\n        this.locale = locale;\n    }\n    /**\n     * The element holding elements of the body region.\n     */\n    get bodyCollectionContainer() {\n        return this._bodyCollectionContainer;\n    }\n    /**\n     * Attaches the body collection to the DOM body element. You need to execute this method to render the content of\n     * the body collection.\n     */\n    attachToDom() {\n        this._bodyCollectionContainer = new Template({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-reset_all',\n                    'ck-body',\n                    'ck-rounded-corners'\n                ],\n                dir: this.locale.uiLanguageDirection,\n                role: 'application'\n            },\n            children: this\n        }).render();\n        let wrapper = document.querySelector('.ck-body-wrapper');\n        if (!wrapper) {\n            wrapper = createElement(document, 'div', { class: 'ck-body-wrapper' });\n            document.body.appendChild(wrapper);\n        }\n        wrapper.appendChild(this._bodyCollectionContainer);\n    }\n    /**\n     * Detaches the collection from the DOM structure. Use this method when you do not need to use the body collection\n     * anymore to clean-up the DOM structure.\n     */\n    detachFromDom() {\n        super.destroy();\n        if (this._bodyCollectionContainer) {\n            this._bodyCollectionContainer.remove();\n        }\n        const wrapper = document.querySelector('.ck-body-wrapper');\n        if (wrapper && wrapper.childElementCount == 0) {\n            wrapper.remove();\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/button/switchbuttonview\n */\nimport View from '../view.js';\nimport ButtonView from './buttonview.js';\nimport '../../theme/components/button/switchbutton.css';\n/**\n * The switch button view class.\n *\n * ```ts\n * const view = new SwitchButtonView();\n *\n * view.set( {\n * \twithText: true,\n * \tlabel: 'Switch me!'\n * } );\n *\n * view.render();\n *\n * document.body.append( view.element );\n * ```\n */\nexport default class SwitchButtonView extends ButtonView {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.isToggleable = true;\n        this.toggleSwitchView = this._createToggleView();\n        this.extendTemplate({\n            attributes: {\n                class: 'ck-switchbutton'\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.children.add(this.toggleSwitchView);\n    }\n    /**\n     * Creates a toggle child view.\n     */\n    _createToggleView() {\n        const toggleSwitchView = new View();\n        toggleSwitchView.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-button__toggle'\n                ]\n            },\n            children: [\n                {\n                    tag: 'span',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-button__toggle__inner'\n                        ]\n                    }\n                }\n            ]\n        });\n        return toggleSwitchView;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/button/filedialogbuttonview\n */\nimport View from '../view.js';\nimport ButtonView from './buttonview.js';\nimport ListItemButtonView from './listitembuttonview.js';\n/**\n * The file dialog button view.\n *\n * This component provides a button that opens the native file selection dialog.\n * It can be used to implement the UI of a file upload feature.\n *\n * ```ts\n * const view = new FileDialogButtonView( locale );\n *\n * view.set( {\n * \tacceptedType: 'image/*',\n * \tallowMultipleFiles: true\n * \tlabel: t( 'Insert image' ),\n * \ticon: imageIcon,\n * \ttooltip: true\n * } );\n *\n * view.on( 'done', ( evt, files ) => {\n * \tfor ( const file of Array.from( files ) ) {\n * \t\tconsole.log( 'Selected file', file );\n * \t}\n * } );\n * ```\n */\nexport default class FileDialogButtonView extends /* #__PURE__ */ FileDialogViewMixin(ButtonView) {\n}\n/**\n * The file dialog button view used in a lists.\n *\n * This component provides a button that opens the native file selection dialog.\n * It can be used to implement the UI of a file upload feature.\n *\n* ```ts\n * const view = new FileDialogListItemButtonView( locale );\n *\n * view.set( {\n * \tacceptedType: 'image/*',\n * \tallowMultipleFiles: true\n * \tlabel: t( 'Insert image' ),\n * \ticon: imageIcon,\n * \ttooltip: true\n * } );\n *\n * view.on( 'done', ( evt, files ) => {\n * \tfor ( const file of Array.from( files ) ) {\n * \t\tconsole.log( 'Selected file', file );\n * \t}\n * } );\n * ```\n */\nexport class FileDialogListItemButtonView extends /* #__PURE__ */ FileDialogViewMixin(ListItemButtonView) {\n}\n/**\n * Mixin function that enhances a base button view class with file dialog functionality. It is used\n * to create a button view class that opens the native select file dialog when clicked.\n *\n * The enhanced view includes a button and a hidden file input. When the button is clicked, the file dialog is opened.\n * The mixin adds properties and methods to the base class to handle the file selection.\n *\n * @param view The base class to be enhanced with file dialog functionality.\n * @returns A new class that extends the base class and includes the file dialog functionality.\n */\nfunction FileDialogViewMixin(view) {\n    class FileDialogView extends view {\n        /**\n         * @inheritDoc\n         */\n        constructor(...args) {\n            super(...args);\n            // For backward compatibility.\n            this.buttonView = this;\n            this._fileInputView = new FileInputView(this.locale);\n            this._fileInputView.bind('acceptedType').to(this);\n            this._fileInputView.bind('allowMultipleFiles').to(this);\n            this._fileInputView.delegate('done').to(this);\n            this.on('execute', () => {\n                this._fileInputView.open();\n            });\n            this.extendTemplate({\n                attributes: {\n                    class: 'ck-file-dialog-button'\n                }\n            });\n        }\n        /**\n         * @inheritDoc\n         */\n        render() {\n            super.render();\n            this.children.add(this._fileInputView);\n        }\n    }\n    return FileDialogView;\n}\n/**\n * The hidden file input view class.\n */\nclass FileInputView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.set('acceptedType', undefined);\n        this.set('allowMultipleFiles', false);\n        const bind = this.bindTemplate;\n        this.setTemplate({\n            tag: 'input',\n            attributes: {\n                class: [\n                    'ck-hidden'\n                ],\n                type: 'file',\n                tabindex: '-1',\n                accept: bind.to('acceptedType'),\n                multiple: bind.to('allowMultipleFiles')\n            },\n            on: {\n                // Removing from code coverage since we cannot programmatically set input element files.\n                change: bind.to(/* istanbul ignore next -- @preserve */ () => {\n                    if (this.element && this.element.files && this.element.files.length) {\n                        this.fire('done', this.element.files);\n                    }\n                    this.element.value = '';\n                })\n            }\n        });\n    }\n    /**\n     * Opens file dialog.\n     */\n    open() {\n        this.element.click();\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 10 10\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M.941 4.523a.75.75 0 1 1 1.06-1.06l3.006 3.005 3.005-3.005a.75.75 0 1 1 1.06 1.06l-3.549 3.55a.75.75 0 0 1-1.168-.136L.941 4.523z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport View from '../view.js';\nimport ButtonView from '../button/buttonview.js';\nimport dropdownArrowIcon from '../../theme/icons/dropdown-arrow.svg';\nimport '../../theme/components/collapsible/collapsible.css';\n/**\n * A collapsible UI component. Consists of a labeled button and a container which can be collapsed\n * by clicking the button. The collapsible container can be a host to other UI views.\n *\n * @internal\n */\nexport default class CollapsibleView extends View {\n    /**\n     * Creates an instance of the collapsible view.\n     *\n     * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n     * @param childViews An optional array of initial child views to be inserted into the collapsible.\n     */\n    constructor(locale, childViews) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('isCollapsed', false);\n        this.set('label', '');\n        this.buttonView = this._createButtonView();\n        this.children = this.createCollection();\n        this.set('_collapsibleAriaLabelUid', undefined);\n        if (childViews) {\n            this.children.addMany(childViews);\n        }\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-collapsible',\n                    bind.if('isCollapsed', 'ck-collapsible_collapsed')\n                ]\n            },\n            children: [\n                this.buttonView,\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-collapsible__children'\n                        ],\n                        role: 'region',\n                        hidden: bind.if('isCollapsed', 'hidden'),\n                        'aria-labelledby': bind.to('_collapsibleAriaLabelUid')\n                    },\n                    children: this.children\n                }\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this._collapsibleAriaLabelUid = this.buttonView.labelView.element.id;\n    }\n    /**\n     * Focuses the first focusable.\n     */\n    focus() {\n        this.buttonView.focus();\n    }\n    /**\n     * Creates the main {@link #buttonView} of the collapsible.\n     */\n    _createButtonView() {\n        const buttonView = new ButtonView(this.locale);\n        const bind = buttonView.bindTemplate;\n        buttonView.set({\n            withText: true,\n            icon: dropdownArrowIcon\n        });\n        buttonView.extendTemplate({\n            attributes: {\n                'aria-expanded': bind.to('isOn', value => String(value))\n            }\n        });\n        buttonView.bind('label').to(this);\n        buttonView.bind('isOn').to(this, 'isCollapsed', isCollapsed => !isCollapsed);\n        buttonView.on('execute', () => {\n            this.isCollapsed = !this.isCollapsed;\n        });\n        return buttonView;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Returns color configuration options as defined in `editor.config.(fontColor|fontBackgroundColor).colors` or\n * `editor.config.table.(tableProperties|tableCellProperties).(background|border).colors\n * but processed to account for editor localization in the correct language.\n *\n * Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n * when the user configuration is defined because the editor does not exist yet.\n *\n * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n */\nexport function getLocalizedColorOptions(locale, options) {\n    const t = locale.t;\n    const localizedColorNames = {\n        Black: t('Black'),\n        'Dim grey': t('Dim grey'),\n        Grey: t('Grey'),\n        'Light grey': t('Light grey'),\n        White: t('White'),\n        Red: t('Red'),\n        Orange: t('Orange'),\n        Yellow: t('Yellow'),\n        'Light green': t('Light green'),\n        Green: t('Green'),\n        Aquamarine: t('Aquamarine'),\n        Turquoise: t('Turquoise'),\n        'Light blue': t('Light blue'),\n        Blue: t('Blue'),\n        Purple: t('Purple')\n    };\n    return options.map(colorOption => {\n        const label = localizedColorNames[colorOption.label];\n        if (label && label != colorOption.label) {\n            colorOption.label = label;\n        }\n        return colorOption;\n    });\n}\n/**\n * Creates a unified color definition object from color configuration options.\n * The object contains the information necessary to both render the UI and initialize the conversion.\n */\nexport function normalizeColorOptions(options) {\n    return options\n        .map(normalizeSingleColorDefinition)\n        .filter(option => !!option);\n}\n/**\n * Creates a normalized color definition from the user-defined configuration.\n * The \"normalization\" means it will create full\n * {@link module:ui/colorgrid/colorgridview~ColorDefinition `ColorDefinition-like`}\n * object for string values, and add a `view` property, for each definition.\n */\nexport function normalizeSingleColorDefinition(color) {\n    if (typeof color === 'string') {\n        return {\n            model: color,\n            label: color,\n            hasBorder: false,\n            view: {\n                name: 'span',\n                styles: {\n                    color\n                }\n            }\n        };\n    }\n    else {\n        return {\n            model: color.color,\n            label: color.label || color.color,\n            hasBorder: color.hasBorder === undefined ? false : color.hasBorder,\n            view: {\n                name: 'span',\n                styles: {\n                    color: `${color.color}`\n                }\n            }\n        };\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/colorgrid/colortileview\n */\nimport ButtonView from '../button/buttonview.js';\nimport { env } from '@ckeditor/ckeditor5-utils';\nimport checkIcon from '../../theme/icons/color-tile-check.svg';\n/**\n * This class represents a single color tile in the {@link module:ui/colorgrid/colorgridview~ColorGridView}.\n */\nexport default class ColorTileView extends ButtonView {\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('color', undefined);\n        this.set('hasBorder', false);\n        this.icon = checkIcon;\n        this.extendTemplate({\n            attributes: {\n                style: {\n                    // https://github.com/ckeditor/ckeditor5/issues/14907\n                    backgroundColor: bind.to('color', color => env.isMediaForcedColors ? null : color)\n                },\n                class: [\n                    'ck',\n                    'ck-color-grid__tile',\n                    bind.if('hasBorder', 'ck-color-selector__color-tile_bordered')\n                ]\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.iconView.fillColor = 'hsl(0, 0%, 100%)';\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path class=\\\"ck-icon__fill\\\" d=\\\"M16.935 5.328a2 2 0 0 1 0 2.829l-7.778 7.778a2 2 0 0 1-2.829 0L3.5 13.107a1.999 1.999 0 1 1 2.828-2.829l.707.707a1 1 0 0 0 1.414 0l5.658-5.657a2 2 0 0 1 2.828 0z\\\"/><path d=\\\"M14.814 6.035 8.448 12.4a1 1 0 0 1-1.414 0l-1.413-1.415A1 1 0 1 0 4.207 12.4l2.829 2.829a1 1 0 0 0 1.414 0l7.778-7.778a1 1 0 1 0-1.414-1.415z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/colorgrid/colorgridview\n */\nimport View from '../view.js';\nimport ColorTileView from './colortileview.js';\nimport addKeyboardHandlingForGrid from '../bindings/addkeyboardhandlingforgrid.js';\nimport { FocusTracker, KeystrokeHandler } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/components/colorgrid/colorgrid.css';\n/**\n * A grid of {@link module:ui/colorgrid/colortileview~ColorTileView color tiles}.\n */\nexport default class ColorGridView extends View {\n    /**\n     * Creates an instance of a color grid containing {@link module:ui/colorgrid/colortileview~ColorTileView tiles}.\n     *\n     * @fires execute\n     * @param locale The localization services instance.\n     * @param options Component configuration\n     * @param options.colorDefinitions Array with definitions\n     * required to create the {@link module:ui/colorgrid/colortileview~ColorTileView tiles}.\n     * @param options.columns A number of columns to display the tiles.\n     */\n    constructor(locale, options) {\n        super(locale);\n        const colorDefinitions = options && options.colorDefinitions ? options.colorDefinitions : [];\n        this.columns = options && options.columns ? options.columns : 5;\n        const viewStyleAttribute = {\n            gridTemplateColumns: `repeat( ${this.columns}, 1fr)`\n        };\n        this.set('selectedColor', undefined);\n        this.items = this.createCollection();\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.items.on('add', (evt, colorTile) => {\n            colorTile.isOn = colorTile.color === this.selectedColor;\n        });\n        colorDefinitions.forEach(color => {\n            const colorTile = new ColorTileView();\n            colorTile.set({\n                color: color.color,\n                label: color.label,\n                tooltip: true,\n                hasBorder: color.options.hasBorder\n            });\n            colorTile.on('execute', () => {\n                this.fire('execute', {\n                    value: color.color,\n                    hasBorder: color.options.hasBorder,\n                    label: color.label\n                });\n            });\n            this.items.add(colorTile);\n        });\n        this.setTemplate({\n            tag: 'div',\n            children: this.items,\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-color-grid'\n                ],\n                style: viewStyleAttribute\n            }\n        });\n        this.on('change:selectedColor', (evt, name, selectedColor) => {\n            for (const item of this.items) {\n                item.isOn = item.color === selectedColor;\n            }\n        });\n    }\n    /**\n     * Focuses the first focusable in {@link #items}.\n     */\n    focus() {\n        if (this.items.length) {\n            this.items.first.focus();\n        }\n    }\n    /**\n     * Focuses the last focusable in {@link #items}.\n     */\n    focusLast() {\n        if (this.items.length) {\n            this.items.last.focus();\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        // Items added before rendering should be known to the #focusTracker.\n        for (const item of this.items) {\n            this.focusTracker.add(item.element);\n        }\n        this.items.on('add', (evt, item) => {\n            this.focusTracker.add(item.element);\n        });\n        this.items.on('remove', (evt, item) => {\n            this.focusTracker.remove(item.element);\n        });\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n        addKeyboardHandlingForGrid({\n            keystrokeHandler: this.keystrokes,\n            focusTracker: this.focusTracker,\n            gridItems: this.items,\n            numberOfColumns: this.columns,\n            uiLanguageDirection: this.locale && this.locale.uiLanguageDirection\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n}\n", "/**\r\n * @module color-parse\r\n */\r\nimport names from 'color-name'\r\n\r\nexport default parse\r\n\r\n/**\r\n * Base hues\r\n * http://dev.w3.org/csswg/css-color/#typedef-named-hue\r\n */\r\n//FIXME: use external hue detector\r\nvar baseHues = {\r\n\tred: 0,\r\n\torange: 60,\r\n\tyellow: 120,\r\n\tgreen: 180,\r\n\tblue: 240,\r\n\tpurple: 300\r\n}\r\n\r\n/**\r\n * Parse color from the string passed\r\n *\r\n * @return {Object} A space indicator `space`, an array `values` and `alpha`\r\n */\r\nfunction parse (cstr) {\r\n\tvar m, parts = [], alpha = 1, space\r\n\r\n\tif (typeof cstr === 'string') {\r\n\t\t//keyword\r\n\t\tif (names[cstr]) {\r\n\t\t\tparts = names[cstr].slice()\r\n\t\t\tspace = 'rgb'\r\n\t\t}\r\n\r\n\t\t//reserved words\r\n\t\telse if (cstr === 'transparent') {\r\n\t\t\talpha = 0\r\n\t\t\tspace = 'rgb'\r\n\t\t\tparts = [0,0,0]\r\n\t\t}\r\n\r\n\t\t//hex\r\n\t\telse if (/^#[A-Fa-f0-9]+$/.test(cstr)) {\r\n\t\t\tvar base = cstr.slice(1)\r\n\t\t\tvar size = base.length\r\n\t\t\tvar isShort = size <= 4\r\n\t\t\talpha = 1\r\n\r\n\t\t\tif (isShort) {\r\n\t\t\t\tparts = [\r\n\t\t\t\t\tparseInt(base[0] + base[0], 16),\r\n\t\t\t\t\tparseInt(base[1] + base[1], 16),\r\n\t\t\t\t\tparseInt(base[2] + base[2], 16)\r\n\t\t\t\t]\r\n\t\t\t\tif (size === 4) {\r\n\t\t\t\t\talpha = parseInt(base[3] + base[3], 16) / 255\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tparts = [\r\n\t\t\t\t\tparseInt(base[0] + base[1], 16),\r\n\t\t\t\t\tparseInt(base[2] + base[3], 16),\r\n\t\t\t\t\tparseInt(base[4] + base[5], 16)\r\n\t\t\t\t]\r\n\t\t\t\tif (size === 8) {\r\n\t\t\t\t\talpha = parseInt(base[6] + base[7], 16) / 255\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!parts[0]) parts[0] = 0\r\n\t\t\tif (!parts[1]) parts[1] = 0\r\n\t\t\tif (!parts[2]) parts[2] = 0\r\n\r\n\t\t\tspace = 'rgb'\r\n\t\t}\r\n\r\n\t\t//color space\r\n\t\telse if (m = /^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\\s*\\(([^\\)]*)\\)/.exec(cstr)) {\r\n\t\t\tvar name = m[1]\r\n\t\t\tvar isRGB = name === 'rgb'\r\n\t\t\tvar base = name.replace(/a$/, '')\r\n\t\t\tspace = base\r\n\t\t\tvar size = base === 'cmyk' ? 4 : base === 'gray' ? 1 : 3\r\n\t\t\tparts = m[2].trim()\r\n\t\t\t\t.split(/\\s*[,\\/]\\s*|\\s+/)\r\n\t\t\t\t.map(function (x, i) {\r\n\t\t\t\t\t//<percentage>\r\n\t\t\t\t\tif (/%$/.test(x)) {\r\n\t\t\t\t\t\t//alpha\r\n\t\t\t\t\t\tif (i === size)\treturn parseFloat(x) / 100\r\n\t\t\t\t\t\t//rgb\r\n\t\t\t\t\t\tif (base === 'rgb') return parseFloat(x) * 255 / 100\r\n\t\t\t\t\t\treturn parseFloat(x)\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//hue\r\n\t\t\t\t\telse if (base[i] === 'h') {\r\n\t\t\t\t\t\t//<deg>\r\n\t\t\t\t\t\tif (/deg$/.test(x)) {\r\n\t\t\t\t\t\t\treturn parseFloat(x)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//<base-hue>\r\n\t\t\t\t\t\telse if (baseHues[x] !== undefined) {\r\n\t\t\t\t\t\t\treturn baseHues[x]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn parseFloat(x)\r\n\t\t\t\t})\r\n\r\n\t\t\tif (name === base) parts.push(1)\r\n\t\t\talpha = (isRGB) ? 1 : (parts[size] === undefined) ? 1 : parts[size]\r\n\t\t\tparts = parts.slice(0, size)\r\n\t\t}\r\n\r\n\t\t//named channels case\r\n\t\telse if (cstr.length > 10 && /[0-9](?:\\s|\\/)/.test(cstr)) {\r\n\t\t\tparts = cstr.match(/([0-9]+)/g).map(function (value) {\r\n\t\t\t\treturn parseFloat(value)\r\n\t\t\t})\r\n\r\n\t\t\tspace = cstr.match(/([a-z])/ig).join('').toLowerCase()\r\n\t\t}\r\n\t}\r\n\r\n\t//numeric case\r\n\telse if (!isNaN(cstr)) {\r\n\t\tspace = 'rgb'\r\n\t\tparts = [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff]\r\n\t}\r\n\r\n\t//array-like\r\n\telse if (Array.isArray(cstr) || cstr.length) {\r\n\t\tparts = [cstr[0], cstr[1], cstr[2]]\r\n\t\tspace = 'rgb'\r\n\t\talpha = cstr.length === 4 ? cstr[3] : 1\r\n\t}\r\n\r\n\t//object case - detects css cases of rgb and hsl\r\n\telse if (cstr instanceof Object) {\r\n\t\tif (cstr.r != null || cstr.red != null || cstr.R != null) {\r\n\t\t\tspace = 'rgb'\r\n\t\t\tparts = [\r\n\t\t\t\tcstr.r || cstr.red || cstr.R || 0,\r\n\t\t\t\tcstr.g || cstr.green || cstr.G || 0,\r\n\t\t\t\tcstr.b || cstr.blue || cstr.B || 0\r\n\t\t\t]\r\n\t\t}\r\n\t\telse {\r\n\t\t\tspace = 'hsl'\r\n\t\t\tparts = [\r\n\t\t\t\tcstr.h || cstr.hue || cstr.H || 0,\r\n\t\t\t\tcstr.s || cstr.saturation || cstr.S || 0,\r\n\t\t\t\tcstr.l || cstr.lightness || cstr.L || cstr.b || cstr.brightness\r\n\t\t\t]\r\n\t\t}\r\n\r\n\t\talpha = cstr.a || cstr.alpha || cstr.opacity || 1\r\n\r\n\t\tif (cstr.opacity != null) alpha /= 100\r\n\t}\r\n\r\n\treturn {\r\n\t\tspace: space,\r\n\t\tvalues: parts,\r\n\t\talpha: alpha\r\n\t}\r\n}\r\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/colorpicker/utils\n */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n// There are no available types for 'color-parse' module.\n// @ts-ignore\nimport { default as parse } from 'color-parse';\nimport * as convert from 'color-convert';\n/**\n * Parses and converts the color string to requested format. Handles variety of color spaces\n * like `hsl`, `hex` or `rgb`.\n *\n * @param color\n * @returns A color string.\n */\nexport function convertColor(color, outputFormat) {\n    if (!color) {\n        return '';\n    }\n    const colorObject = parseColorString(color);\n    if (!colorObject) {\n        return '';\n    }\n    if (colorObject.space === outputFormat) {\n        return color;\n    }\n    if (!canConvertParsedColor(colorObject)) {\n        return '';\n    }\n    const fromColorSpace = convert[colorObject.space];\n    const toColorSpace = fromColorSpace[outputFormat];\n    if (!toColorSpace) {\n        return '';\n    }\n    const convertedColorChannels = toColorSpace(colorObject.space === 'hex' ? colorObject.hexValue : colorObject.values);\n    return formatColorOutput(convertedColorChannels, outputFormat);\n}\n/**\n * Converts a color string to hex format.\n *\n * @param color\n * @returns A color string.\n */\nexport function convertToHex(color) {\n    if (!color) {\n        return '';\n    }\n    const colorObject = parseColorString(color);\n    if (!colorObject) {\n        return '#000';\n    }\n    if (colorObject.space === 'hex') {\n        return colorObject.hexValue;\n    }\n    return convertColor(color, 'hex');\n}\n/**\n * Registers the custom element in the\n * [CustomElementsRegistry](https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry).\n */\nexport function registerCustomElement(elementName, constructor) {\n    if (customElements.get(elementName) === undefined) {\n        customElements.define(elementName, constructor);\n    }\n}\n/**\n * Formats the passed color channels according to the requested format.\n *\n * @param values\n * @param format\n * @returns A color string.\n */\nfunction formatColorOutput(values, format) {\n    switch (format) {\n        case 'hex': return `#${values}`;\n        case 'rgb': return `rgb( ${values[0]}, ${values[1]}, ${values[2]} )`;\n        case 'hsl': return `hsl( ${values[0]}, ${values[1]}%, ${values[2]}% )`;\n        case 'hwb': return `hwb( ${values[0]}, ${values[1]}, ${values[2]} )`;\n        case 'lab': return `lab( ${values[0]}% ${values[1]} ${values[2]} )`;\n        case 'lch': return `lch( ${values[0]}% ${values[1]} ${values[2]} )`;\n        default: return '';\n    }\n}\nfunction parseColorString(colorString) {\n    // Parser library treats `hex` format as belonging to `rgb` space | which messes up further conversion.\n    // Let's parse such strings on our own.\n    if (colorString.startsWith('#')) {\n        const parsedHex = parse(colorString);\n        return {\n            space: 'hex',\n            values: parsedHex.values,\n            hexValue: colorString,\n            alpha: parsedHex.alpha\n        };\n    }\n    const parsed = parse(colorString);\n    if (!parsed.space) {\n        return null;\n    }\n    return parsed;\n}\nfunction canConvertParsedColor(parsedColor) {\n    return Object.keys(convert).includes(parsedColor.space);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/labeledfield/labeledfieldview\n */\nimport View from '../view.js';\nimport LabelView from '../label/labelview.js';\nimport { uid } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/components/labeledfield/labeledfieldview.css';\n/**\n * The labeled field view class. It can be used to enhance any view with the following features:\n *\n * * a label,\n * * (optional) an error message,\n * * (optional) an info (status) text,\n *\n * all bound logically by proper DOM attributes for UX and accessibility.  It also provides an interface\n * (e.g. observable properties) that allows controlling those additional features.\n *\n * The constructor of this class requires a callback that returns a view to be labeled. The callback\n * is called with unique ids that allow binding of DOM properties:\n *\n * ```ts\n * const labeledInputView = new LabeledFieldView( locale, ( labeledFieldView, viewUid, statusUid ) => {\n * \tconst inputView = new InputTextView( labeledFieldView.locale );\n *\n * \tinputView.set( {\n * \t\tid: viewUid,\n * \t\tariaDescribedById: statusUid\n * \t} );\n *\n * \tinputView.bind( 'isReadOnly' ).to( labeledFieldView, 'isEnabled', value => !value );\n * \tinputView.bind( 'hasError' ).to( labeledFieldView, 'errorText', value => !!value );\n *\n * \treturn inputView;\n * } );\n *\n * labeledInputView.label = 'User name';\n * labeledInputView.infoText = 'Full name like for instance, John Doe.';\n * labeledInputView.render();\n *\n * document.body.append( labeledInputView.element );\n * ```\n *\n * See {@link module:ui/labeledfield/utils} to discover ready–to–use labeled input helpers for common\n * UI components.\n */\nexport default class LabeledFieldView extends View {\n    /**\n     * Creates an instance of the labeled field view class using a provided creator function\n     * that provides the view to be labeled.\n     *\n     * @param locale The locale instance.\n     * @param viewCreator A function that returns a {@link module:ui/view~View}\n     * that will be labeled. The following arguments are passed to the creator function:\n     *\n     * * an instance of the `LabeledFieldView` to allow binding observable properties,\n     * * an UID string that connects the {@link #labelView label} and the labeled field view in DOM,\n     * * an UID string that connects the {@link #statusView status} and the labeled field view in DOM.\n     */\n    constructor(locale, viewCreator) {\n        super(locale);\n        const viewUid = `ck-labeled-field-view-${uid()}`;\n        const statusUid = `ck-labeled-field-view-status-${uid()}`;\n        this.fieldView = viewCreator(this, viewUid, statusUid);\n        this.set('label', undefined);\n        this.set('isEnabled', true);\n        this.set('isEmpty', true);\n        this.set('isFocused', false);\n        this.set('errorText', null);\n        this.set('infoText', null);\n        this.set('class', undefined);\n        this.set('placeholder', undefined);\n        this.labelView = this._createLabelView(viewUid);\n        this.statusView = this._createStatusView(statusUid);\n        this.fieldWrapperChildren = this.createCollection([this.fieldView, this.labelView]);\n        this.bind('_statusText').to(this, 'errorText', this, 'infoText', (errorText, infoText) => errorText || infoText);\n        const bind = this.bindTemplate;\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-labeled-field-view',\n                    bind.to('class'),\n                    bind.if('isEnabled', 'ck-disabled', value => !value),\n                    bind.if('isEmpty', 'ck-labeled-field-view_empty'),\n                    bind.if('isFocused', 'ck-labeled-field-view_focused'),\n                    bind.if('placeholder', 'ck-labeled-field-view_placeholder'),\n                    bind.if('errorText', 'ck-error')\n                ]\n            },\n            children: [\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-labeled-field-view__input-wrapper'\n                        ]\n                    },\n                    children: this.fieldWrapperChildren\n                },\n                this.statusView\n            ]\n        });\n    }\n    /**\n     * Creates label view class instance and bind with view.\n     *\n     * @param id Unique id to set as labelView#for attribute.\n     */\n    _createLabelView(id) {\n        const labelView = new LabelView(this.locale);\n        labelView.for = id;\n        labelView.bind('text').to(this, 'label');\n        return labelView;\n    }\n    /**\n     * Creates the status view instance. It displays {@link #errorText} and {@link #infoText}\n     * next to the {@link #fieldView}. See {@link #_statusText}.\n     *\n     * @param statusUid Unique id of the status, shared with the {@link #fieldView view's}\n     * `aria-describedby` attribute.\n     */\n    _createStatusView(statusUid) {\n        const statusView = new View(this.locale);\n        const bind = this.bindTemplate;\n        statusView.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-labeled-field-view__status',\n                    bind.if('errorText', 'ck-labeled-field-view__status_error'),\n                    bind.if('_statusText', 'ck-hidden', value => !value)\n                ],\n                id: statusUid,\n                role: bind.if('errorText', 'alert')\n            },\n            children: [\n                {\n                    text: bind.to('_statusText')\n                }\n            ]\n        });\n        return statusView;\n    }\n    /**\n     * Focuses the {@link #fieldView}.\n     */\n    focus(direction) {\n        this.fieldView.focus(direction);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/input/inputbase\n */\nimport View from '../view.js';\nimport { FocusTracker } from '@ckeditor/ckeditor5-utils';\n/**\n * The base input view class.\n */\nexport default class InputBase extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.set('value', undefined);\n        this.set('id', undefined);\n        this.set('placeholder', undefined);\n        this.set('tabIndex', undefined);\n        this.set('isReadOnly', false);\n        this.set('hasError', false);\n        this.set('ariaDescribedById', undefined);\n        this.set('ariaLabel', undefined);\n        this.focusTracker = new FocusTracker();\n        this.bind('isFocused').to(this.focusTracker);\n        this.set('isEmpty', true);\n        const bind = this.bindTemplate;\n        this.setTemplate({\n            tag: 'input',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-input',\n                    bind.if('isFocused', 'ck-input_focused'),\n                    bind.if('isEmpty', 'ck-input-text_empty'),\n                    bind.if('hasError', 'ck-error')\n                ],\n                id: bind.to('id'),\n                placeholder: bind.to('placeholder'),\n                tabindex: bind.to('tabIndex'),\n                readonly: bind.to('isReadOnly'),\n                'aria-invalid': bind.if('hasError', true),\n                'aria-describedby': bind.to('ariaDescribedById'),\n                'aria-label': bind.to('ariaLabel')\n            },\n            on: {\n                input: bind.to((...args) => {\n                    this.fire('input', ...args);\n                    this._updateIsEmpty();\n                }),\n                change: bind.to(this._updateIsEmpty.bind(this))\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.focusTracker.add(this.element);\n        this._setDomElementValue(this.value);\n        this._updateIsEmpty();\n        // Bind `this.value` to the DOM element's value.\n        // We cannot use `value` DOM attribute because removing it on Edge does not clear the DOM element's value property.\n        this.on('change:value', (evt, name, value) => {\n            this._setDomElementValue(value);\n            this._updateIsEmpty();\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n    }\n    /**\n     * Moves the focus to the input and selects the value.\n     */\n    select() {\n        this.element.select();\n    }\n    /**\n     * Focuses the input.\n     */\n    focus() {\n        this.element.focus();\n    }\n    /**\n     * Resets the value of the input\n     */\n    reset() {\n        this.value = this.element.value = '';\n        this._updateIsEmpty();\n    }\n    /**\n     * Updates the {@link #isEmpty} property value on demand.\n     */\n    _updateIsEmpty() {\n        this.isEmpty = isInputElementEmpty(this.element);\n    }\n    /**\n     * Sets the `value` property of the {@link #element DOM element} on demand.\n     */\n    _setDomElementValue(value) {\n        this.element.value = (!value && value !== 0) ? '' : value;\n    }\n}\nfunction isInputElementEmpty(domElement) {\n    return !domElement.value;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport InputBase from './inputbase.js';\nimport '../../theme/components/input/input.css';\n/**\n * The input view class.\n */\nexport default class InputView extends InputBase {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.set('inputMode', 'text');\n        const bind = this.bindTemplate;\n        this.extendTemplate({\n            attributes: {\n                inputmode: bind.to('inputMode')\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/inputtext/inputtextview\n */\nimport InputView from '../input/inputview.js';\n/**\n * The text input view class.\n */\nexport default class InputTextView extends InputView {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.extendTemplate({\n            attributes: {\n                type: 'text',\n                class: [\n                    'ck-input-text'\n                ]\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/inputnumber/inputnumberview\n */\nimport InputView from '../input/inputview.js';\n/**\n * The number input view class.\n */\nexport default class InputNumberView extends InputView {\n    /**\n     * Creates an instance of the input number view.\n     *\n     * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n     * @param options The options of the input.\n     * @param options.min The value of the `min` DOM attribute (the lowest accepted value).\n     * @param options.max The value of the `max` DOM attribute (the highest accepted value).\n     * @param options.step The value of the `step` DOM attribute.\n     */\n    constructor(locale, { min, max, step } = {}) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('min', min);\n        this.set('max', max);\n        this.set('step', step);\n        this.extendTemplate({\n            attributes: {\n                type: 'number',\n                class: [\n                    'ck-input-number'\n                ],\n                min: bind.to('min'),\n                max: bind.to('max'),\n                step: bind.to('step')\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/dropdownpanelview\n */\nimport View from '../view.js';\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\n/**\n * The dropdown panel view class.\n *\n * See {@link module:ui/dropdown/dropdownview~DropdownView} to learn about the common usage.\n */\nexport default class DropdownPanelView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('isVisible', false);\n        this.set('position', 'se');\n        this.children = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-reset',\n                    'ck-dropdown__panel',\n                    bind.to('position', value => `ck-dropdown__panel_${value}`),\n                    bind.if('isVisible', 'ck-dropdown__panel-visible')\n                ],\n                tabindex: '-1'\n            },\n            children: this.children,\n            on: {\n                // Drag and drop in the panel should not break the selection in the editor.\n                // https://github.com/ckeditor/ckeditor5-ui/issues/228\n                selectstart: bind.to(evt => {\n                    if (evt.target.tagName.toLocaleLowerCase() === 'input') {\n                        return;\n                    }\n                    evt.preventDefault();\n                })\n            }\n        });\n    }\n    /**\n     * Focuses the first view in the {@link #children} collection.\n     *\n     * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.\n     */\n    focus() {\n        if (this.children.length) {\n            const firstChild = this.children.first;\n            if (typeof firstChild.focus === 'function') {\n                firstChild.focus();\n            }\n            else {\n                /**\n                 * The child view of a dropdown could not be focused because it is missing the `focus()` method.\n                 *\n                 * This warning appears when a dropdown {@link module:ui/dropdown/dropdownview~DropdownView#isOpen gets open} and it\n                 * attempts to focus the {@link module:ui/dropdown/dropdownpanelview~DropdownPanelView#children first child} of its panel\n                 * but the child does not implement the\n                 * {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable focusable interface}.\n                 *\n                 * Focusing the content of a dropdown on open greatly improves the accessibility. Please make sure the view instance\n                 * provides the `focus()` method for the best user experience.\n                 *\n                 * @error ui-dropdown-panel-focus-child-missing-focus\n                 * @param childView\n                 * @param dropdownPanel\n                 */\n                logWarning('ui-dropdown-panel-focus-child-missing-focus', { childView: this.children.first, dropdownPanel: this });\n            }\n        }\n    }\n    /**\n     * Focuses the view element or last item in view collection on opening dropdown's panel.\n     *\n     * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.\n     */\n    focusLast() {\n        if (this.children.length) {\n            const lastChild = this.children.last;\n            if (typeof lastChild.focusLast === 'function') {\n                lastChild.focusLast();\n            }\n            else {\n                lastChild.focus();\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/dropdownview\n */\nimport View from '../view.js';\nimport { KeystrokeHandler, FocusTracker, getOptimalPosition } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/components/dropdown/dropdown.css';\n/**\n * The dropdown view class. It manages the dropdown button and dropdown panel.\n *\n * In most cases, the easiest way to create a dropdown is by using the {@link module:ui/dropdown/utils~createDropdown}\n * util:\n *\n * ```ts\n * const dropdown = createDropdown( locale );\n *\n * // Configure dropdown's button properties:\n * dropdown.buttonView.set( {\n * \tlabel: 'A dropdown',\n * \twithText: true\n * } );\n *\n * dropdown.render();\n *\n * dropdown.panelView.element.textContent = 'Content of the panel';\n *\n * // Will render a dropdown with a panel containing a \"Content of the panel\" text.\n * document.body.appendChild( dropdown.element );\n * ```\n *\n * If you want to add a richer content to the dropdown panel, you can use the {@link module:ui/dropdown/utils~addListToDropdown}\n * and {@link module:ui/dropdown/utils~addToolbarToDropdown} helpers. See more examples in\n * {@link module:ui/dropdown/utils~createDropdown} documentation.\n *\n * If you want to create a completely custom dropdown, then you can compose it manually:\n *\n * ```ts\n * const button = new DropdownButtonView( locale );\n * const panel = new DropdownPanelView( locale );\n * const dropdown = new DropdownView( locale, button, panel );\n *\n * button.set( {\n * \tlabel: 'A dropdown',\n * \twithText: true\n * } );\n *\n * dropdown.render();\n *\n * panel.element.textContent = 'Content of the panel';\n *\n * // Will render a dropdown with a panel containing a \"Content of the panel\" text.\n * document.body.appendChild( dropdown.element );\n * ```\n *\n * However, dropdown created this way will contain little behavior. You will need to implement handlers for actions\n * such as {@link module:ui/bindings/clickoutsidehandler~clickOutsideHandler clicking outside an open dropdown}\n * (which should close it) and support for arrow keys inside the panel. Therefore, unless you really know what\n * you do and you really need to do it, it is recommended to use the {@link module:ui/dropdown/utils~createDropdown} helper.\n */\nclass DropdownView extends View {\n    /**\n     * Creates an instance of the dropdown.\n     *\n     * Also see {@link #render}.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale, buttonView, panelView) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.buttonView = buttonView;\n        this.panelView = panelView;\n        this.set('isOpen', false);\n        this.set('isEnabled', true);\n        this.set('class', undefined);\n        this.set('id', undefined);\n        this.set('panelPosition', 'auto');\n        // Toggle the visibility of the panel when the dropdown becomes open.\n        this.panelView.bind('isVisible').to(this, 'isOpen');\n        this.keystrokes = new KeystrokeHandler();\n        this.focusTracker = new FocusTracker();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-dropdown',\n                    bind.to('class'),\n                    bind.if('isEnabled', 'ck-disabled', value => !value)\n                ],\n                id: bind.to('id'),\n                'aria-describedby': bind.to('ariaDescribedById')\n            },\n            children: [\n                buttonView,\n                panelView\n            ]\n        });\n        buttonView.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-dropdown__button'\n                ],\n                'data-cke-tooltip-disabled': bind.to('isOpen')\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.focusTracker.add(this.buttonView.element);\n        this.focusTracker.add(this.panelView.element);\n        // Toggle the dropdown when its button has been clicked.\n        this.listenTo(this.buttonView, 'open', () => {\n            this.isOpen = !this.isOpen;\n        });\n        // Let the dropdown control the position of the panel. The position must\n        // be updated every time the dropdown is open.\n        this.on('change:isOpen', (evt, name, isOpen) => {\n            if (!isOpen) {\n                return;\n            }\n            // If \"auto\", find the best position of the panel to fit into the viewport.\n            // Otherwise, simply assign the static position.\n            if (this.panelPosition === 'auto') {\n                const optimalPanelPosition = DropdownView._getOptimalPosition({\n                    element: this.panelView.element,\n                    target: this.buttonView.element,\n                    fitInViewport: true,\n                    positions: this._panelPositions\n                });\n                this.panelView.position = (optimalPanelPosition ? optimalPanelPosition.name : this._panelPositions[0].name);\n            }\n            else {\n                this.panelView.position = this.panelPosition;\n            }\n        });\n        // Listen for keystrokes coming from within #element.\n        this.keystrokes.listenTo(this.element);\n        const closeDropdown = (data, cancel) => {\n            if (this.isOpen) {\n                this.isOpen = false;\n                cancel();\n            }\n        };\n        // Open the dropdown panel using the arrow down key, just like with return or space.\n        this.keystrokes.set('arrowdown', (data, cancel) => {\n            // Don't open if the dropdown is disabled or already open.\n            if (this.buttonView.isEnabled && !this.isOpen) {\n                this.isOpen = true;\n                cancel();\n            }\n        });\n        // Block the right arrow key (until nested dropdowns are implemented).\n        this.keystrokes.set('arrowright', (data, cancel) => {\n            if (this.isOpen) {\n                cancel();\n            }\n        });\n        // Close the dropdown using the arrow left/escape key.\n        this.keystrokes.set('arrowleft', closeDropdown);\n        this.keystrokes.set('esc', closeDropdown);\n    }\n    /**\n     * Focuses the {@link #buttonView}.\n     */\n    focus() {\n        this.buttonView.focus();\n    }\n    /**\n     * Returns {@link #panelView panel} positions to be used by the\n     * {@link module:utils/dom/position~getOptimalPosition `getOptimalPosition()`}\n     * utility considering the direction of the language the UI of the editor is displayed in.\n     */\n    get _panelPositions() {\n        const { south, north, southEast, southWest, northEast, northWest, southMiddleEast, southMiddleWest, northMiddleEast, northMiddleWest } = DropdownView.defaultPanelPositions;\n        if (this.locale.uiLanguageDirection !== 'rtl') {\n            return [\n                southEast, southWest, southMiddleEast, southMiddleWest, south,\n                northEast, northWest, northMiddleEast, northMiddleWest, north\n            ];\n        }\n        else {\n            return [\n                southWest, southEast, southMiddleWest, southMiddleEast, south,\n                northWest, northEast, northMiddleWest, northMiddleEast, north\n            ];\n        }\n    }\n}\n/**\n * A set of positioning functions used by the dropdown view to determine\n * the optimal position (i.e. fitting into the browser viewport) of its\n * {@link module:ui/dropdown/dropdownview~DropdownView#panelView panel} when\n * {@link module:ui/dropdown/dropdownview~DropdownView#panelPosition} is set to 'auto'`.\n *\n * The available positioning functions are as follow:\n *\n * **South**\n *\n * * `south`\n *\n * ```\n *\t\t\t[ Button ]\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n * ```\n *\n * * `southEast`\n *\n * ```\n *\t\t[ Button ]\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n * ```\n *\n * * `southWest`\n *\n * ```\n *\t\t         [ Button ]\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n * ```\n *\n * * `southMiddleEast`\n *\n * ```\n *\t\t  [ Button ]\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n * ```\n *\n * * `southMiddleWest`\n *\n * ```\n *\t\t       [ Button ]\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n * ```\n *\n * **North**\n *\n * * `north`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\t\t    [ Button ]\n * ```\n *\n * * `northEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\t\t[ Button ]\n * ```\n *\n * * `northWest`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\t\t         [ Button ]\n * ```\n *\n * * `northMiddleEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\t\t  [ Button ]\n * ```\n *\n * * `northMiddleWest`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|      Panel      |\n *\t\t+-----------------+\n *\t\t       [ Button ]\n * ```\n *\n * Positioning functions are compatible with {@link module:utils/dom/position~DomPoint}.\n *\n * The name that position function returns will be reflected in dropdown panel's class that\n * controls its placement. See {@link module:ui/dropdown/dropdownview~DropdownView#panelPosition}\n * to learn more.\n */\nDropdownView.defaultPanelPositions = {\n    south: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.bottom,\n            left: buttonRect.left - (panelRect.width - buttonRect.width) / 2,\n            name: 's'\n        };\n    },\n    southEast: buttonRect => {\n        return {\n            top: buttonRect.bottom,\n            left: buttonRect.left,\n            name: 'se'\n        };\n    },\n    southWest: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.bottom,\n            left: buttonRect.left - panelRect.width + buttonRect.width,\n            name: 'sw'\n        };\n    },\n    southMiddleEast: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.bottom,\n            left: buttonRect.left - (panelRect.width - buttonRect.width) / 4,\n            name: 'sme'\n        };\n    },\n    southMiddleWest: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.bottom,\n            left: buttonRect.left - (panelRect.width - buttonRect.width) * 3 / 4,\n            name: 'smw'\n        };\n    },\n    north: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left - (panelRect.width - buttonRect.width) / 2,\n            name: 'n'\n        };\n    },\n    northEast: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left,\n            name: 'ne'\n        };\n    },\n    northWest: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left - panelRect.width + buttonRect.width,\n            name: 'nw'\n        };\n    },\n    northMiddleEast: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left - (panelRect.width - buttonRect.width) / 4,\n            name: 'nme'\n        };\n    },\n    northMiddleWest: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left - (panelRect.width - buttonRect.width) * 3 / 4,\n            name: 'nmw'\n        };\n    }\n};\n/**\n * A function used to calculate the optimal position for the dropdown panel.\n */\nDropdownView._getOptimalPosition = getOptimalPosition;\nexport default DropdownView;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/button/dropdownbuttonview\n */\nimport ButtonView from '../../button/buttonview.js';\nimport IconView from '../../icon/iconview.js';\nimport dropdownArrowIcon from '../../../theme/icons/dropdown-arrow.svg';\n/**\n * The default dropdown button view class.\n *\n * ```ts\n * const view = new DropdownButtonView();\n *\n * view.set( {\n * \tlabel: 'A button',\n * \tkeystroke: 'Ctrl+B',\n * \ttooltip: true\n * } );\n *\n * view.render();\n *\n * document.body.append( view.element );\n * ```\n *\n * Also see the {@link module:ui/dropdown/utils~createDropdown `createDropdown()` util}.\n */\nexport default class DropdownButtonView extends ButtonView {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.arrowView = this._createArrowView();\n        this.extendTemplate({\n            attributes: {\n                'aria-haspopup': true,\n                'aria-expanded': this.bindTemplate.to('isOn', value => String(value))\n            }\n        });\n        // The DropdownButton interface expects the open event upon which will open the dropdown.\n        this.delegate('execute').to(this, 'open');\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.children.add(this.arrowView);\n    }\n    /**\n     * Creates a {@link module:ui/icon/iconview~IconView} instance as {@link #arrowView}.\n     */\n    _createArrowView() {\n        const arrowView = new IconView();\n        arrowView.content = dropdownArrowIcon;\n        arrowView.extendTemplate({\n            attributes: {\n                class: 'ck-dropdown__arrow'\n            }\n        });\n        return arrowView;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/menu/dropdownmenubuttonview\n */\nimport IconView from '../../icon/iconview.js';\nimport ListItemButtonView from '../../button/listitembuttonview.js';\nimport dropdownArrowIcon from '../../../theme/icons/dropdown-arrow.svg';\nimport '../../../theme/components/dropdown/menu/dropdownmenubutton.css';\n/**\n * Represents a view for a dropdown menu button.\n */\nexport default class DropdownMenuButtonView extends ListItemButtonView {\n    /**\n     * Creates an instance of the dropdown menu button view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set({\n            withText: true,\n            role: 'menuitem'\n        });\n        this.arrowView = this._createArrowView();\n        this.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-dropdown-menu-list__nested-menu__button'\n                ],\n                'aria-haspopup': true,\n                'aria-expanded': this.bindTemplate.to('isOn', value => String(value)),\n                'data-cke-tooltip-disabled': bind.to('isOn')\n            },\n            on: {\n                'mouseenter': bind.to('mouseenter')\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.children.add(this.arrowView);\n    }\n    /**\n     * Creates the arrow view instance.\n     *\n     * @private\n     */\n    _createArrowView() {\n        const arrowView = new IconView();\n        arrowView.content = dropdownArrowIcon;\n        arrowView.extendTemplate({\n            attributes: {\n                class: 'ck-dropdown-menu-list__nested-menu__button__arrow'\n            }\n        });\n        return arrowView;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/list/listitemview\n */\nimport View from '../view.js';\n/**\n * The list item view class.\n */\nexport default class ListItemView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('isVisible', true);\n        this.children = this.createCollection();\n        this.setTemplate({\n            tag: 'li',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-list__item',\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ],\n                role: 'presentation'\n            },\n            children: this.children\n        });\n    }\n    /**\n     * Focuses the list item.\n     */\n    focus() {\n        if (this.children.first) {\n            this.children.first.focus();\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/list/listseparatorview\n */\nimport View from '../view.js';\n/**\n * The list separator view class.\n */\nexport default class ListSeparatorView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.setTemplate({\n            tag: 'li',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-list__separator'\n                ]\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/list/listitemgroupview\n */\nimport View from '../view.js';\nimport ListView from './listview.js';\nimport LabelView from '../label/labelview.js';\nimport ListSeparatorView from './listseparatorview.js';\n/**\n * The list item group view class.\n */\nexport default class ListItemGroupView extends View {\n    /**\n     * Creates an instance of the list item group view class.\n     *\n     * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n     * @param labelView The instance of the group's label. If not provided, an instance of\n     * {@link module:ui/label/labelview~LabelView} is used.\n     */\n    constructor(locale, labelView = new LabelView()) {\n        super(locale);\n        const bind = this.bindTemplate;\n        const nestedList = new ListView(locale);\n        this.set({\n            label: '',\n            isVisible: true\n        });\n        this.labelView = labelView;\n        this.labelView.bind('text').to(this, 'label');\n        this.children = this.createCollection();\n        this.children.addMany([this.labelView, nestedList]);\n        nestedList.set({\n            role: 'group',\n            ariaLabelledBy: labelView.id\n        });\n        // Disable focus tracking and accessible navigation in the child list.\n        nestedList.focusTracker.destroy();\n        nestedList.keystrokes.destroy();\n        this.items = nestedList.items;\n        this.setTemplate({\n            tag: 'li',\n            attributes: {\n                role: 'presentation',\n                class: [\n                    'ck',\n                    'ck-list__group',\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ]\n            },\n            children: this.children\n        });\n    }\n    /**\n     * Focuses the list item (which is not a separator).\n     */\n    focus() {\n        if (this.items) {\n            const firstListItem = this.items.find(item => !(item instanceof ListSeparatorView));\n            if (firstListItem) {\n                firstListItem.focus();\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/list/listview\n */\nimport View from '../view.js';\nimport FocusCycler from '../focuscycler.js';\nimport ListItemView from './listitemview.js';\nimport ListItemGroupView from './listitemgroupview.js';\nimport ViewCollection from '../viewcollection.js';\nimport { FocusTracker, KeystrokeHandler } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/components/list/list.css';\n/**\n * The list view class.\n */\nexport default class ListView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        /**\n         * A cached map of {@link module:ui/list/listitemgroupview~ListItemGroupView} to `change` event listeners for their `items`.\n         * Used for accessibility and keyboard navigation purposes.\n         */\n        this._listItemGroupToChangeListeners = new WeakMap();\n        const bind = this.bindTemplate;\n        this.focusables = new ViewCollection();\n        this.items = this.createCollection();\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this._focusCycler = new FocusCycler({\n            focusables: this.focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate list items backwards using the arrowup key.\n                focusPrevious: 'arrowup',\n                // Navigate toolbar items forwards using the arrowdown key.\n                focusNext: 'arrowdown'\n            }\n        });\n        this.set('ariaLabel', undefined);\n        this.set('ariaLabelledBy', undefined);\n        this.set('role', undefined);\n        this.setTemplate({\n            tag: 'ul',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-reset',\n                    'ck-list'\n                ],\n                role: bind.to('role'),\n                'aria-label': bind.to('ariaLabel'),\n                'aria-labelledby': bind.to('ariaLabelledBy')\n            },\n            children: this.items\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        // Items added before rendering should be known to the #focusTracker.\n        for (const item of this.items) {\n            if (item instanceof ListItemGroupView) {\n                this._registerFocusableItemsGroup(item);\n            }\n            else if (item instanceof ListItemView) {\n                this._registerFocusableListItem(item);\n            }\n        }\n        this.items.on('change', (evt, data) => {\n            for (const removed of data.removed) {\n                if (removed instanceof ListItemGroupView) {\n                    this._deregisterFocusableItemsGroup(removed);\n                }\n                else if (removed instanceof ListItemView) {\n                    this._deregisterFocusableListItem(removed);\n                }\n            }\n            for (const added of Array.from(data.added).reverse()) {\n                if (added instanceof ListItemGroupView) {\n                    this._registerFocusableItemsGroup(added, data.index);\n                }\n                else {\n                    this._registerFocusableListItem(added, data.index);\n                }\n            }\n        });\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the first focusable in {@link #items}.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Focuses the first focusable in {@link #items}.\n     */\n    focusFirst() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Focuses the last focusable in {@link #items}.\n     */\n    focusLast() {\n        this._focusCycler.focusLast();\n    }\n    /**\n     * Registers a list item view in the focus tracker.\n     *\n     * @param item The list item view to be registered.\n     * @param index Index of the list item view in the {@link #items} collection. If not specified, the item will be added at the end.\n     */\n    _registerFocusableListItem(item, index) {\n        this.focusTracker.add(item.element);\n        this.focusables.add(item, index);\n    }\n    /**\n     * Removes a list item view from the focus tracker.\n     *\n     * @param item The list item view to be removed.\n     */\n    _deregisterFocusableListItem(item) {\n        this.focusTracker.remove(item.element);\n        this.focusables.remove(item);\n    }\n    /**\n     * Gets a callback that will be called when the `items` collection of a {@link module:ui/list/listitemgroupview~ListItemGroupView}\n     * change.\n     *\n     * @param groupView The group view for which the callback will be created.\n     * @returns The callback function to be used for the items `change` event listener in a group.\n     */\n    _getOnGroupItemsChangeCallback(groupView) {\n        return (evt, data) => {\n            for (const removed of data.removed) {\n                this._deregisterFocusableListItem(removed);\n            }\n            for (const added of Array.from(data.added).reverse()) {\n                this._registerFocusableListItem(added, this.items.getIndex(groupView) + data.index);\n            }\n        };\n    }\n    /**\n     * Registers a list item group view (and its children) in the focus tracker.\n     *\n     * @param groupView A group view to be registered.\n     * @param groupIndex Index of the group view in the {@link #items} collection. If not specified, the group will be added at the end.\n     */\n    _registerFocusableItemsGroup(groupView, groupIndex) {\n        Array.from(groupView.items).forEach((child, childIndex) => {\n            const registeredChildIndex = typeof groupIndex !== 'undefined' ? groupIndex + childIndex : undefined;\n            this._registerFocusableListItem(child, registeredChildIndex);\n        });\n        const groupItemsChangeCallback = this._getOnGroupItemsChangeCallback(groupView);\n        // Cache the reference to the callback in case the group is removed (see _deregisterFocusableItemsGroup()).\n        this._listItemGroupToChangeListeners.set(groupView, groupItemsChangeCallback);\n        groupView.items.on('change', groupItemsChangeCallback);\n    }\n    /**\n     * Removes a list item group view (and its children) from the focus tracker.\n     *\n     * @param groupView The group view to be removed.\n     */\n    _deregisterFocusableItemsGroup(groupView) {\n        for (const child of groupView.items) {\n            this._deregisterFocusableListItem(child);\n        }\n        groupView.items.off('change', this._listItemGroupToChangeListeners.get(groupView));\n        this._listItemGroupToChangeListeners.delete(groupView);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport ListView from '../../list/listview.js';\n/**\n * Represents a dropdown menu list view.\n */\nexport default class DropdownMenuListView extends ListView {\n    /**\n     * Creates an instance of the dropdown menu list view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.role = 'menu';\n        this.set('isVisible', true);\n        this.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-dropdown-menu-list',\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ]\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nconst NESTED_PANEL_HORIZONTAL_OFFSET = 5;\n/**\n * Contains every positioning function used by {@link module:ui/dropdown/menu/dropdownmenunestedmenuview~DropdownMenuNestedMenuView} that\n * decides where the {@link module:ui/dropdown/menu/dropdownmenunestedmenuview~DropdownMenuNestedMenuView#panelView} should be placed.\n *\n * Positioning functions:\n *\n *\t┌──────┬───────────────┐\n *\t│      │               │\n *\t└──────┤               │\n *\t       │               │\n *\t       │            ES │\n *\t       └───────────────┘\n *\n *\t┌───────────────┬──────┐\n *\t│               │      │\n *\t│               ├──────┘\n *\t│               │\n *\t│ WS            │\n *\t└───────────────┘\n *\n *\t       ┌───────────────┐\n *\t       │            EN │\n *\t       │               │\n *\t┌──────┤               │\n *\t│      │               │\n *\t└──────┴───────────────┘\n *\n *\t┌───────────────┐\n *\t│ WN            │\n *\t│               │\n *\t│               ├──────┐\n *\t│               │      │\n *\t└───────────────┴──────┘\n */\nexport const DropdownMenuPanelPositioningFunctions = {\n    eastSouth: buttonRect => ({\n        top: buttonRect.top,\n        left: buttonRect.right - NESTED_PANEL_HORIZONTAL_OFFSET,\n        name: 'es'\n    }),\n    eastNorth: (buttonRect, panelRect) => ({\n        top: buttonRect.top - panelRect.height + buttonRect.height,\n        left: buttonRect.right - NESTED_PANEL_HORIZONTAL_OFFSET,\n        name: 'en'\n    }),\n    westSouth: (buttonRect, panelRect) => ({\n        top: buttonRect.top,\n        left: buttonRect.left - panelRect.width + NESTED_PANEL_HORIZONTAL_OFFSET,\n        name: 'ws'\n    }),\n    westNorth: (buttonRect, panelRect) => ({\n        top: buttonRect.top - panelRect.height + buttonRect.height,\n        left: buttonRect.left - panelRect.width + NESTED_PANEL_HORIZONTAL_OFFSET,\n        name: 'wn'\n    })\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport DropdownMenuListItemView from './dropdownmenulistitemview.js';\nexport const DropdownRootMenuBehaviors = {\n    /**\n     * Move focus to a menu item on mouse hover. If it is a button to open a nested menu, open that menu.\n     */\n    toggleMenusAndFocusItemsOnHover(rootList) {\n        rootList.on('menu:mouseenter', evt => {\n            const [pathLeaf] = evt.path;\n            evt.source.focus();\n            for (const menuView of rootList.menus) {\n                const isListItemContainingMenu = pathLeaf instanceof DropdownMenuListItemView && pathLeaf.childView === menuView;\n                menuView.isOpen = (evt.path.includes(menuView) || isListItemContainingMenu) && menuView.isEnabled;\n            }\n        });\n    },\n    /**\n     * Handles the following case:\n     *\n     * 1. Hover to open a sub-menu (A). The button has focus.\n     * 2. Press arrow up/down to move focus to another sub-menu (B) button.\n     * 3. Press arrow right to open the sub-menu (B).\n     * 4. The sub-menu (A) should close (if not, there are two open menus).\n     */\n    closeMenuWhenAnotherOnTheSameLevelOpens(rootList) {\n        rootList.on('menu:change:isOpen', (evt, name, isOpen) => {\n            if (!isOpen) {\n                return;\n            }\n            const evtMenu = evt.source;\n            for (const menuView of rootList.menus) {\n                if (evtMenu.parentMenuView === menuView.parentMenuView && evtMenu !== menuView) {\n                    menuView.isOpen = false;\n                }\n            }\n        });\n    }\n};\nexport const DropdownMenuBehaviors = {\n    /**\n     * Open the menu on the right arrow key press (left, in RTL mode). This allows for navigating to sub-menus using the keyboard.\n     */\n    openOnArrowRightKey(menuView) {\n        const keystroke = menuView.locale.uiLanguageDirection === 'rtl' ? 'arrowleft' : 'arrowright';\n        menuView.keystrokes.set(keystroke, (data, cancel) => {\n            if (menuView.focusTracker.focusedElement !== menuView.buttonView.element || !menuView.isEnabled) {\n                return;\n            }\n            if (!menuView.isOpen) {\n                menuView.isOpen = true;\n            }\n            menuView.panelView.focus();\n            cancel();\n        });\n    },\n    /**\n     * Opens the menu on its button click as well as enter and space keys press (if the button is focused).\n     */\n    openOnButtonClick(menuView) {\n        menuView.buttonView.on('execute', () => {\n            if (menuView.isEnabled) {\n                menuView.isOpen = true;\n            }\n        });\n    },\n    /**\n     * Opens the menu and focuses the panel content upon pressing the Enter key.\n     */\n    openAndFocusOnEnterKeyPress(menuView) {\n        menuView.keystrokes.set('enter', (data, cancel) => {\n            // Engage only for Enter key press when the button is focused. The panel can contain\n            // other UI components and features that rely on the Enter key press.\n            if (menuView.focusTracker.focusedElement !== menuView.buttonView.element) {\n                return;\n            }\n            menuView.isOpen = true;\n            menuView.panelView.focus();\n            cancel();\n        });\n    },\n    /**\n     * Closes the menu on the left key press (right, in RTL mode). This allows for navigating to sub-menus using the keyboard.\n     */\n    closeOnArrowLeftKey(menuView) {\n        const keystroke = menuView.locale.uiLanguageDirection === 'rtl' ? 'arrowright' : 'arrowleft';\n        menuView.keystrokes.set(keystroke, (data, cancel) => {\n            if (menuView.isOpen) {\n                // Focus first, then close the panel. Otherwise, Safari won't send blur events for detached DOM elements, leading to errors.\n                menuView.focus();\n                menuView.isOpen = false;\n                cancel();\n            }\n        });\n    },\n    closeOnEscKey(menuView) {\n        menuView.keystrokes.set('esc', (data, cancel) => {\n            if (menuView.isOpen) {\n                // Focus first, then close the panel. Otherwise, Safari won't send blur events for detached DOM elements, leading to errors.\n                menuView.focus();\n                menuView.isOpen = false;\n                cancel();\n            }\n        });\n    },\n    /**\n     * Closes the menu when its parent menu closes. This prevents from leaving orphaned open menus.\n     */\n    closeOnParentClose(menuView, parentMenuView) {\n        parentMenuView.on('change:isOpen', (evt, name, isOpen) => {\n            // TODO: Remove checking `evt.source` if `change:isOpen` is no longer delegated.\n            if (!isOpen && evt.source === parentMenuView) {\n                menuView.isOpen = false;\n            }\n        });\n    }\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/panel/balloon/balloonpanelview\n */\nimport View from '../../view.js';\nimport { getOptimalPosition, global, isRange, toUnit, isVisible, isText, ResizeObserver } from '@ckeditor/ckeditor5-utils';\nimport { isElement } from 'lodash-es';\nimport '../../../theme/components/panel/balloonpanel.css';\nconst toPx = /* #__PURE__ */ toUnit('px');\n// A static balloon panel positioning function that moves the balloon far off the viewport.\n// It is used as a fallback when there is no way to position the balloon using provided\n// positioning functions (see: `getOptimalPosition()`), for instance, when the target the\n// balloon should be attached to gets obscured by scrollable containers or the viewport.\n//\n// It prevents the balloon from being attached to the void and possible degradation of the UX.\n// At the same time, it keeps the balloon physically visible in the DOM so the focus remains\n// uninterrupted.\nconst POSITION_OFF_SCREEN = {\n    top: -99999,\n    left: -99999,\n    name: 'arrowless',\n    config: {\n        withArrow: false\n    }\n};\n/**\n * The balloon panel view class.\n *\n * A floating container which can\n * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#pin pin} to any\n * {@link module:utils/dom/position~Options#target target} in the DOM and remain in that position\n * e.g. when the web page is scrolled.\n *\n * The balloon panel can be used to display contextual, non-blocking UI like forms, toolbars and\n * the like in its {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#content} view\n * collection.\n *\n * There is a number of {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}\n * that the balloon can use, automatically switching from one to another when the viewport space becomes\n * scarce to keep the balloon visible to the user as long as it is possible. The balloon will also\n * accept any custom position set provided by the user compatible with the\n * {@link module:utils/dom/position~Options options}.\n *\n * ```ts\n * const panel = new BalloonPanelView( locale );\n * const childView = new ChildView();\n * const positions = BalloonPanelView.defaultPositions;\n *\n * panel.render();\n *\n * // Add a child view to the panel's content collection.\n * panel.content.add( childView );\n *\n * // Start pinning the panel to an element with the \"target\" id DOM.\n * // The balloon will remain pinned until unpin() is called.\n * panel.pin( {\n * \ttarget: document.querySelector( '#target' ),\n * \tpositions: [\n * \t\tpositions.northArrowSouth,\n * \t\tpositions.southArrowNorth\n * \t]\n * } );\n * ```\n */\nclass BalloonPanelView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('top', 0);\n        this.set('left', 0);\n        this.set('position', 'arrow_nw');\n        this.set('isVisible', false);\n        this.set('withArrow', true);\n        this.set('class', undefined);\n        this._pinWhenIsVisibleCallback = null;\n        this._resizeObserver = null;\n        this.content = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-balloon-panel',\n                    bind.to('position', value => `ck-balloon-panel_${value}`),\n                    bind.if('isVisible', 'ck-balloon-panel_visible'),\n                    bind.if('withArrow', 'ck-balloon-panel_with-arrow'),\n                    bind.to('class')\n                ],\n                style: {\n                    top: bind.to('top', toPx),\n                    left: bind.to('left', toPx)\n                }\n            },\n            children: this.content\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this.hide();\n        super.destroy();\n    }\n    /**\n     * Shows the panel.\n     *\n     * See {@link #isVisible}.\n     */\n    show() {\n        this.isVisible = true;\n    }\n    /**\n     * Hides the panel.\n     *\n     * See {@link #isVisible}.\n     */\n    hide() {\n        this.isVisible = false;\n    }\n    /**\n     * Attaches the panel to a specified {@link module:utils/dom/position~Options#target} with a\n     * smart positioning heuristics that chooses from available positions to make sure the panel\n     * is visible to the user i.e. within the limits of the viewport.\n     *\n     * This method accepts configuration {@link module:utils/dom/position~Options options}\n     * to set the `target`, optional `limiter` and `positions` the balloon should choose from.\n     *\n     * ```ts\n     * const panel = new BalloonPanelView( locale );\n     * const positions = BalloonPanelView.defaultPositions;\n     *\n     * panel.render();\n     *\n     * // Attach the panel to an element with the \"target\" id DOM.\n     * panel.attachTo( {\n     * \ttarget: document.querySelector( '#target' ),\n     * \tpositions: [\n     * \t\tpositions.northArrowSouth,\n     * \t\tpositions.southArrowNorth\n     * \t]\n     * } );\n     * ```\n     *\n     * **Note**: Attaching the panel will also automatically {@link #show} it.\n     *\n     * **Note**: An attached panel will not follow its target when the window is scrolled or resized.\n     * See the {@link #pin} method for a more permanent positioning strategy.\n     *\n     * @param options Positioning options compatible with {@link module:utils/dom/position~getOptimalPosition}.\n     * Default `positions` array is {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n     * @returns Whether the balloon was shown and successfully attached or not. Attaching can fail if the target\n     * provided in the options is invisible (e.g. element detached from DOM).\n     */\n    attachTo(options) {\n        const target = getDomElement(options.target);\n        if (target && !isVisible(target)) {\n            return false;\n        }\n        this.show();\n        const defaultPositions = BalloonPanelView.defaultPositions;\n        const positionOptions = Object.assign({}, {\n            element: this.element,\n            positions: [\n                defaultPositions.southArrowNorth,\n                defaultPositions.southArrowNorthMiddleWest,\n                defaultPositions.southArrowNorthMiddleEast,\n                defaultPositions.southArrowNorthWest,\n                defaultPositions.southArrowNorthEast,\n                defaultPositions.northArrowSouth,\n                defaultPositions.northArrowSouthMiddleWest,\n                defaultPositions.northArrowSouthMiddleEast,\n                defaultPositions.northArrowSouthWest,\n                defaultPositions.northArrowSouthEast,\n                defaultPositions.viewportStickyNorth\n            ],\n            limiter: global.document.body,\n            fitInViewport: true\n        }, options);\n        const optimalPosition = BalloonPanelView._getOptimalPosition(positionOptions) || POSITION_OFF_SCREEN;\n        // Usually browsers make some problems with super accurate values like 104.345px\n        // so it is better to use int values.\n        const left = parseInt(optimalPosition.left);\n        const top = parseInt(optimalPosition.top);\n        const position = optimalPosition.name;\n        const config = optimalPosition.config || {};\n        const { withArrow = true } = config;\n        this.top = top;\n        this.left = left;\n        this.position = position;\n        this.withArrow = withArrow;\n        return true;\n    }\n    /**\n     * Works the same way as the {@link #attachTo} method except that the position of the panel is\n     * continuously updated when:\n     *\n     * * any ancestor of the {@link module:utils/dom/position~Options#target}\n     * or {@link module:utils/dom/position~Options#limiter} is scrolled,\n     * * the browser window gets resized or scrolled.\n     *\n     * Thanks to that, the panel always sticks to the {@link module:utils/dom/position~Options#target}\n     * and is immune to the changing environment.\n     *\n     * ```ts\n     * const panel = new BalloonPanelView( locale );\n     * const positions = BalloonPanelView.defaultPositions;\n     *\n     * panel.render();\n     *\n     * // Pin the panel to an element with the \"target\" id DOM.\n     * panel.pin( {\n     * \ttarget: document.querySelector( '#target' ),\n     * \tpositions: [\n     * \t\tpositions.northArrowSouth,\n     * \t\tpositions.southArrowNorth\n     * \t]\n     * } );\n     * ```\n     *\n     * To leave the pinned state, use the {@link #unpin} method.\n     *\n     * **Note**: Pinning the panel will also automatically {@link #show} it.\n     *\n     * @param options Positioning options compatible with {@link module:utils/dom/position~getOptimalPosition}.\n     * Default `positions` array is {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n     */\n    pin(options) {\n        this.unpin();\n        if (!this._startPinning(options)) {\n            return;\n        }\n        this._pinWhenIsVisibleCallback = () => {\n            if (this.isVisible) {\n                this._startPinning(options);\n            }\n            else {\n                this._stopPinning();\n            }\n        };\n        // Control the state of the listeners depending on whether the panel is visible\n        // or not.\n        // TODO: Use on() (https://github.com/ckeditor/ckeditor5-utils/issues/144).\n        this.listenTo(this, 'change:isVisible', this._pinWhenIsVisibleCallback);\n    }\n    /**\n     * Stops pinning the panel, as set up by {@link #pin}.\n     */\n    unpin() {\n        if (this._pinWhenIsVisibleCallback) {\n            // Deactivate listeners attached by pin().\n            this._stopPinning();\n            // Deactivate the panel pin() control logic.\n            // TODO: Use off() (https://github.com/ckeditor/ckeditor5-utils/issues/144).\n            this.stopListening(this, 'change:isVisible', this._pinWhenIsVisibleCallback);\n            this._pinWhenIsVisibleCallback = null;\n            this.hide();\n        }\n    }\n    /**\n     * Starts managing the pinned state of the panel. See {@link #pin}.\n     *\n     * @param options Positioning options compatible with {@link module:utils/dom/position~getOptimalPosition}.\n     * @returns Whether the balloon was shown and successfully attached or not. Attaching can fail if the target\n     * provided in the options is invisible (e.g. element detached from DOM).\n     */\n    _startPinning(options) {\n        if (!this.attachTo(options)) {\n            return false;\n        }\n        let targetElement = getDomElement(options.target);\n        const limiterElement = options.limiter ? getDomElement(options.limiter) : global.document.body;\n        // Then we need to listen on scroll event of eny element in the document.\n        this.listenTo(global.document, 'scroll', (evt, domEvt) => {\n            const scrollTarget = domEvt.target;\n            // The position needs to be updated if the positioning target is within the scrolled element.\n            const isWithinScrollTarget = targetElement && scrollTarget.contains(targetElement);\n            // The position needs to be updated if the positioning limiter is within the scrolled element.\n            const isLimiterWithinScrollTarget = limiterElement && scrollTarget.contains(limiterElement);\n            // The positioning target and/or limiter can be a Rect, object etc..\n            // There's no way to optimize the listener then.\n            if (isWithinScrollTarget || isLimiterWithinScrollTarget || !targetElement || !limiterElement) {\n                this.attachTo(options);\n            }\n        }, { useCapture: true });\n        // We need to listen on window resize event and update position.\n        this.listenTo(global.window, 'resize', () => {\n            this.attachTo(options);\n        });\n        // Hide the panel if the target element is no longer visible.\n        if (!this._resizeObserver) {\n            // If the target element is a text node, we need to check the parent element.\n            // It's because `ResizeObserver` accept only elements, not text nodes.\n            if (targetElement && isText(targetElement)) {\n                targetElement = targetElement.parentElement;\n            }\n            if (targetElement) {\n                const checkVisibility = () => {\n                    // If the target element is no longer visible, hide the panel.\n                    if (!isVisible(targetElement)) {\n                        this.unpin();\n                    }\n                };\n                // Element is being resized to 0x0 after it's parent became hidden,\n                // so we need to check size in order to determine if it's visible or not.\n                this._resizeObserver = new ResizeObserver(targetElement, checkVisibility);\n            }\n        }\n        return true;\n    }\n    /**\n     * Stops managing the pinned state of the panel. See {@link #pin}.\n     */\n    _stopPinning() {\n        this.stopListening(global.document, 'scroll');\n        this.stopListening(global.window, 'resize');\n        if (this._resizeObserver) {\n            this._resizeObserver.destroy();\n            this._resizeObserver = null;\n        }\n    }\n    /**\n     * Returns available {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView}\n     * {@link module:utils/dom/position~PositioningFunction positioning functions} adjusted by the specific offsets.\n     *\n     * @internal\n     * @param options Options to generate positions. If not specified, this helper will simply return\n     * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n     * @param options.sideOffset A custom side offset (in pixels) of each position. If\n     * not specified, {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowSideOffset the default value}\n     * will be used.\n     * @param options.heightOffset A custom height offset (in pixels) of each position. If\n     * not specified, {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowHeightOffset the default value}\n     * will be used.\n     * @param options.stickyVerticalOffset A custom offset (in pixels) of the `viewportStickyNorth` positioning function.\n     * If not specified, {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.stickyVerticalOffset the default value}\n     * will be used.\n     * @param options.config Additional configuration of the balloon balloon panel view.\n     * Currently only {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#withArrow} is supported. Learn more\n     * about {@link module:utils/dom/position~PositioningFunction positioning functions}.\n     */\n    static generatePositions(options = {}) {\n        const { sideOffset = BalloonPanelView.arrowSideOffset, heightOffset = BalloonPanelView.arrowHeightOffset, stickyVerticalOffset = BalloonPanelView.stickyVerticalOffset, config } = options;\n        return {\n            // ------- North west\n            northWestArrowSouthWest: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left - sideOffset,\n                name: 'arrow_sw',\n                ...(config && { config })\n            }),\n            northWestArrowSouthMiddleWest: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left - (balloonRect.width * .25) - sideOffset,\n                name: 'arrow_smw',\n                ...(config && { config })\n            }),\n            northWestArrowSouth: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left - balloonRect.width / 2,\n                name: 'arrow_s',\n                ...(config && { config })\n            }),\n            northWestArrowSouthMiddleEast: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left - (balloonRect.width * .75) + sideOffset,\n                name: 'arrow_sme',\n                ...(config && { config })\n            }),\n            northWestArrowSouthEast: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left - balloonRect.width + sideOffset,\n                name: 'arrow_se',\n                ...(config && { config })\n            }),\n            // ------- North\n            northArrowSouthWest: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left + targetRect.width / 2 - sideOffset,\n                name: 'arrow_sw',\n                ...(config && { config })\n            }),\n            northArrowSouthMiddleWest: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left + targetRect.width / 2 - (balloonRect.width * .25) - sideOffset,\n                name: 'arrow_smw',\n                ...(config && { config })\n            }),\n            northArrowSouth: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n                name: 'arrow_s',\n                ...(config && { config })\n            }),\n            northArrowSouthMiddleEast: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left + targetRect.width / 2 - (balloonRect.width * .75) + sideOffset,\n                name: 'arrow_sme',\n                ...(config && { config })\n            }),\n            northArrowSouthEast: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.left + targetRect.width / 2 - balloonRect.width + sideOffset,\n                name: 'arrow_se',\n                ...(config && { config })\n            }),\n            // ------- North east\n            northEastArrowSouthWest: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.right - sideOffset,\n                name: 'arrow_sw',\n                ...(config && { config })\n            }),\n            northEastArrowSouthMiddleWest: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.right - (balloonRect.width * .25) - sideOffset,\n                name: 'arrow_smw',\n                ...(config && { config })\n            }),\n            northEastArrowSouth: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.right - balloonRect.width / 2,\n                name: 'arrow_s',\n                ...(config && { config })\n            }),\n            northEastArrowSouthMiddleEast: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.right - (balloonRect.width * .75) + sideOffset,\n                name: 'arrow_sme',\n                ...(config && { config })\n            }),\n            northEastArrowSouthEast: (targetRect, balloonRect) => ({\n                top: getNorthTop(targetRect, balloonRect),\n                left: targetRect.right - balloonRect.width + sideOffset,\n                name: 'arrow_se',\n                ...(config && { config })\n            }),\n            // ------- South west\n            southWestArrowNorthWest: targetRect => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left - sideOffset,\n                name: 'arrow_nw',\n                ...(config && { config })\n            }),\n            southWestArrowNorthMiddleWest: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left - (balloonRect.width * .25) - sideOffset,\n                name: 'arrow_nmw',\n                ...(config && { config })\n            }),\n            southWestArrowNorth: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left - balloonRect.width / 2,\n                name: 'arrow_n',\n                ...(config && { config })\n            }),\n            southWestArrowNorthMiddleEast: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left - (balloonRect.width * .75) + sideOffset,\n                name: 'arrow_nme',\n                ...(config && { config })\n            }),\n            southWestArrowNorthEast: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left - balloonRect.width + sideOffset,\n                name: 'arrow_ne',\n                ...(config && { config })\n            }),\n            // ------- South\n            southArrowNorthWest: targetRect => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left + targetRect.width / 2 - sideOffset,\n                name: 'arrow_nw',\n                ...(config && { config })\n            }),\n            southArrowNorthMiddleWest: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left + targetRect.width / 2 - (balloonRect.width * 0.25) - sideOffset,\n                name: 'arrow_nmw',\n                ...(config && { config })\n            }),\n            southArrowNorth: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n                name: 'arrow_n',\n                ...(config && { config })\n            }),\n            southArrowNorthMiddleEast: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left + targetRect.width / 2 - (balloonRect.width * 0.75) + sideOffset,\n                name: 'arrow_nme',\n                ...(config && { config })\n            }),\n            southArrowNorthEast: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.left + targetRect.width / 2 - balloonRect.width + sideOffset,\n                name: 'arrow_ne',\n                ...(config && { config })\n            }),\n            // ------- South east\n            southEastArrowNorthWest: targetRect => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.right - sideOffset,\n                name: 'arrow_nw',\n                ...(config && { config })\n            }),\n            southEastArrowNorthMiddleWest: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.right - (balloonRect.width * .25) - sideOffset,\n                name: 'arrow_nmw',\n                ...(config && { config })\n            }),\n            southEastArrowNorth: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.right - balloonRect.width / 2,\n                name: 'arrow_n',\n                ...(config && { config })\n            }),\n            southEastArrowNorthMiddleEast: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.right - (balloonRect.width * .75) + sideOffset,\n                name: 'arrow_nme',\n                ...(config && { config })\n            }),\n            southEastArrowNorthEast: (targetRect, balloonRect) => ({\n                top: getSouthTop(targetRect),\n                left: targetRect.right - balloonRect.width + sideOffset,\n                name: 'arrow_ne',\n                ...(config && { config })\n            }),\n            // ------- West\n            westArrowEast: (targetRect, balloonRect) => ({\n                top: targetRect.top + targetRect.height / 2 - balloonRect.height / 2,\n                left: targetRect.left - balloonRect.width - heightOffset,\n                name: 'arrow_e',\n                ...(config && { config })\n            }),\n            // ------- East\n            eastArrowWest: (targetRect, balloonRect) => ({\n                top: targetRect.top + targetRect.height / 2 - balloonRect.height / 2,\n                left: targetRect.right + heightOffset,\n                name: 'arrow_w',\n                ...(config && { config })\n            }),\n            // ------- Sticky\n            viewportStickyNorth: (targetRect, balloonRect, viewportRect, limiterRect) => {\n                const boundaryRect = limiterRect || viewportRect;\n                if (!targetRect.getIntersection(boundaryRect)) {\n                    return null;\n                }\n                // Engage when the target top and bottom edges are close or off the boundary.\n                // By close, it means there's not enough space for the balloon arrow (offset).\n                if (boundaryRect.height - targetRect.height > stickyVerticalOffset) {\n                    return null;\n                }\n                return {\n                    top: boundaryRect.top + stickyVerticalOffset,\n                    left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n                    name: 'arrowless',\n                    config: {\n                        withArrow: false,\n                        ...config\n                    }\n                };\n            }\n        };\n        /**\n         * Returns the top coordinate for positions starting with `north*`.\n         *\n         * @param targetRect A rect of the target.\n         * @param balloonRect A rect of the balloon.\n         */\n        function getNorthTop(targetRect, balloonRect) {\n            return targetRect.top - balloonRect.height - heightOffset;\n        }\n        /**\n         * Returns the top coordinate for positions starting with `south*`.\n         *\n         * @param targetRect A rect of the target.\n         */\n        function getSouthTop(targetRect) {\n            return targetRect.bottom + heightOffset;\n        }\n    }\n}\n/**\n * A side offset of the arrow tip from the edge of the balloon. Controlled by CSS.\n *\n * ```\n *\t\t ┌───────────────────────┐\n *\t\t │                       │\n *\t\t │         Balloon       │\n *\t\t │         Content       │\n *\t\t │                       │\n *\t\t └──+    +───────────────┘\n *\t\t |   \\  /\n *\t\t |    \\/\n *\t\t>┼─────┼< ─────────────────────── side offset\n *\n * ```\n *\n * @default 25\n */\nBalloonPanelView.arrowSideOffset = 25;\n/**\n * A height offset of the arrow from the edge of the balloon. Controlled by CSS.\n *\n * ```\n *\t\t ┌───────────────────────┐\n *\t\t │                       │\n *\t\t │         Balloon       │\n *\t\t │         Content       │      ╱-- arrow height offset\n *\t\t │                       │      V\n *\t\t └──+    +───────────────┘ --- ─┼───────\n *\t\t     \\  /                       │\n *\t\t      \\/                        │\n *\t\t────────────────────────────────┼───────\n *\t\t                                ^\n *\n *\n *\t\t>┼────┼<  arrow height offset\n *\t\t │    │\n *\t\t │    ┌────────────────────────┐\n *\t\t │    │                        │\n *\t\t │   ╱                         │\n *\t\t │ ╱            Balloon        │\n *\t\t │ ╲            Content        │\n *\t\t │   ╲                         │\n *\t\t │    │                        │\n *\t\t │    └────────────────────────┘\n * ```\n *\n * @default 10\n*/\nBalloonPanelView.arrowHeightOffset = 10;\n/**\n * A vertical offset of the balloon panel from the edge of the viewport if sticky.\n * It helps in accessing toolbar buttons underneath the balloon panel.\n *\n * ```\n *\t\t  ┌───────────────────────────────────────────────────┐\n *\t\t  │                      Target                       │\n *\t\t  │                                                   │\n *\t\t  │                            /── vertical offset    │\n *\t\t┌─────────────────────────────V─────────────────────────┐\n *\t\t│ Toolbar            ┌─────────────┐                    │\n *\t\t├────────────────────│   Balloon   │────────────────────┤\n *\t\t│ │                  └─────────────┘                  │ │\n *\t\t│ │                                                   │ │\n *\t\t│ │                                                   │ │\n *\t\t│ │                                                   │ │\n *\t\t│ └───────────────────────────────────────────────────┘ │\n *\t\t│                        Viewport                       │\n *\t\t└───────────────────────────────────────────────────────┘\n * ```\n *\n * @default 20\n */\nBalloonPanelView.stickyVerticalOffset = 20;\n/**\n * Function used to calculate the optimal position for the balloon.\n */\nBalloonPanelView._getOptimalPosition = getOptimalPosition;\n/**\n * A default set of positioning functions used by the balloon panel view\n * when attaching using the {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#attachTo} method.\n *\n * The available positioning functions are as follows:\n *\n * **North west**\n *\n * * `northWestArrowSouthWest`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t V\n *\t\t [ Target ]\n * ```\n *\n * * `northWestArrowSouthMiddleWest`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t    V\n *\t\t    [ Target ]\n * ```\n *\n * * `northWestArrowSouth`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t         V\n *\t\t         [ Target ]\n * ```\n *\n * * `northWestArrowSouthMiddleEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t             V\n *\t\t             [ Target ]\n * ```\n *\n * * `northWestArrowSouthEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t                 V\n *\t\t                 [ Target ]\n * ```\n *\n * **North**\n *\n * * `northArrowSouthWest`\n *\n * ```\n *\t\t    +-----------------+\n *\t\t    |     Balloon     |\n *\t\t    +-----------------+\n *\t\t     V\n *\t\t[ Target ]\n * ```\n *\n * * `northArrowSouthMiddleWest`\n *\n * ```\n *\t\t +-----------------+\n *\t\t |     Balloon     |\n *\t\t +-----------------+\n *\t\t     V\n *\t\t[ Target ]\n * ```\n * * `northArrowSouth`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t         V\n *\t\t    [ Target ]\n * ```\n *\n * * `northArrowSouthMiddleEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t             V\n *\t\t        [ Target ]\n * ```\n *\n * * `northArrowSouthEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t                V\n *\t\t           [ Target ]\n * ```\n *\n * **North east**\n *\n * * `northEastArrowSouthWest`\n *\n * ```\n *\t\t        +-----------------+\n *\t\t        |     Balloon     |\n *\t\t        +-----------------+\n *\t\t         V\n *\t\t[ Target ]\n * ```\n *\n * * `northEastArrowSouthMiddleWest`\n *\n * ```\n *\t\t     +-----------------+\n *\t\t     |     Balloon     |\n *\t\t     +-----------------+\n *\t\t         V\n *\t\t[ Target ]\n * ```\n *\n * * `northEastArrowSouth`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t         V\n *\t\t[ Target ]\n * ```\n *\n * * `northEastArrowSouthMiddleEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t             V\n *\t\t    [ Target ]\n * ```\n *\n * * `northEastArrowSouthEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n *\t\t                 V\n *\t\t        [ Target ]\n * ```\n *\n * **South**\n *\n * * `southArrowNorthWest`\n *\n * ```\n *\t\t[ Target ]\n *\t\t     ^\n *\t\t    +-----------------+\n *\t\t    |     Balloon     |\n *\t\t    +-----------------+\n * ```\n *\n * * `southArrowNorthMiddleWest`\n *\n * ```\n *\t\t   [ Target ]\n *\t\t        ^\n *\t\t    +-----------------+\n *\t\t    |     Balloon     |\n *\t\t    +-----------------+\n * ```\n *\n * * `southArrowNorth`\n *\n * ```\n *\t\t    [ Target ]\n *\t\t         ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * * `southArrowNorthMiddleEast`\n *\n * ```\n *\t\t            [ Target ]\n *\t\t                 ^\n *\t\t   +-----------------+\n *\t\t   |     Balloon     |\n *\t\t   +-----------------+\n * ```\n *\n * * `southArrowNorthEast`\n *\n * ```\n *\t\t            [ Target ]\n *\t\t                 ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * **South west**\n *\n * * `southWestArrowNorthWest`\n *\n *\n * ```\n *\t\t [ Target ]\n *\t\t ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * * `southWestArrowNorthMiddleWest`\n *\n * ```\n *\t\t     [ Target ]\n *\t\t     ^\n *\t\t +-----------------+\n *\t\t |     Balloon     |\n *\t\t +-----------------+\n * ```\n *\n * * `southWestArrowNorth`\n *\n * ```\n *\t\t         [ Target ]\n *\t\t         ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * * `southWestArrowNorthMiddleEast`\n *\n * ```\n *\t\t              [ Target ]\n *\t\t              ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * * `southWestArrowNorthEast`\n *\n * ```\n *\t\t                 [ Target ]\n *\t\t                 ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * **South east**\n *\n * * `southEastArrowNorthWest`\n *\n * ```\n *\t\t[ Target ]\n *\t\t         ^\n *\t\t        +-----------------+\n *\t\t        |     Balloon     |\n *\t\t        +-----------------+\n * ```\n *\n * * `southEastArrowNorthMiddleWest`\n *\n * ```\n *\t\t   [ Target ]\n *\t\t            ^\n *\t\t        +-----------------+\n *\t\t        |     Balloon     |\n *\t\t        +-----------------+\n * ```\n *\n * * `southEastArrowNorth`\n *\n * ```\n *\t\t[ Target ]\n *\t\t         ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * * `southEastArrowNorthMiddleEast`\n *\n * ```\n *\t\t     [ Target ]\n *\t\t              ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * * `southEastArrowNorthEast`\n *\n * ```\n *\t\t        [ Target ]\n *\t\t                 ^\n *\t\t+-----------------+\n *\t\t|     Balloon     |\n *\t\t+-----------------+\n * ```\n *\n * **West**\n *\n * * `westArrowEast`\n *\n * ```\n *\t\t+-----------------+\n *\t\t|     Balloon     |>[ Target ]\n *\t\t+-----------------+\n * ```\n *\n * **East**\n *\n * * `eastArrowWest`\n *\n * ```\n *\t\t           +-----------------+\n *\t\t[ Target ]<|     Balloon     |\n *\t\t           +-----------------+\n * ```\n *\n * **Sticky**\n *\n * * `viewportStickyNorth`\n *\n * ```\n *\t\t    +---------------------------+\n *\t\t    |        [ Target ]         |\n *\t\t    |                           |\n *\t\t+-----------------------------------+\n *\t\t|   |    +-----------------+    |   |\n *\t\t|   |    |     Balloon     |    |   |\n *\t\t|   |    +-----------------+    |   |\n *\t\t|   |                           |   |\n *\t\t|   |                           |   |\n *\t\t|   |                           |   |\n *\t\t|   |                           |   |\n *\t\t|   +---------------------------+   |\n *\t\t|             Viewport              |\n *\t\t+-----------------------------------+\n * ```\n *\n * See {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#attachTo}.\n *\n * Positioning functions must be compatible with {@link module:utils/dom/position~DomPoint}.\n *\n * Default positioning functions with customized offsets can be generated using\n * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.generatePositions}.\n *\n * The name that the position function returns will be reflected in the balloon panel's class that\n * controls the placement of the \"arrow\". See {@link #position} to learn more.\n */\nBalloonPanelView.defaultPositions = BalloonPanelView.generatePositions();\nexport default BalloonPanelView;\n/**\n * Returns the DOM element for given object or null, if there is none,\n * e.g. when the passed object is a Rect instance or so.\n */\nfunction getDomElement(object) {\n    if (isElement(object)) {\n        return object;\n    }\n    if (isRange(object)) {\n        return object.commonAncestorContainer;\n    }\n    if (typeof object == 'function') {\n        return getDomElement(object());\n    }\n    return null;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport BalloonPanelView from '../../panel/balloon/balloonpanelview.js';\nimport '../../../theme/components/dropdown/menu/dropdownmenupanel.css';\n/**\n * Represents the view for the dropdown menu panel.\n */\nexport default class DropdownMenuNestedMenuPanelView extends BalloonPanelView {\n    /**\n     * Creates an instance of the menu panel view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set({\n            isVisible: false,\n            position: 'se',\n            class: null,\n            top: 0,\n            left: 0\n        });\n        this.extendTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck-reset',\n                    'ck-dropdown-menu__nested-menu__panel'\n                ],\n                tabindex: '-1'\n            },\n            on: {\n                // Drag and drop in the panel should not break the selection in the editor.\n                // https://github.com/ckeditor/ckeditor5-ui/issues/228\n                selectstart: bind.to(evt => {\n                    if (evt.target.tagName.toLocaleLowerCase() === 'input') {\n                        return;\n                    }\n                    evt.preventDefault();\n                })\n            }\n        });\n    }\n    /**\n     * Focuses the first child of the panel (default) or the last one if the `direction` is `-1`.\n     *\n     * @param direction The direction to focus. Default is `1`.\n     */\n    focus(direction = 1) {\n        const { content } = this;\n        if (content.length) {\n            if (direction === 1) {\n                content.first.focus();\n            }\n            else {\n                content.last.focus();\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/menu/dropdownmenunestedmenuview\n */\nimport { FocusTracker, KeystrokeHandler, global } from '@ckeditor/ckeditor5-utils';\nimport DropdownMenuButtonView from './dropdownmenubuttonview.js';\nimport DropdownMenuListView from './dropdownmenulistview.js';\nimport { DropdownMenuPanelPositioningFunctions } from './utils.js';\nimport { DropdownMenuBehaviors } from './dropdownmenubehaviors.js';\nimport View from '../../view.js';\nimport DropdownMenuNestedMenuPanelView from './dropdownmenunestedmenupanelview.js';\nimport '../../../theme/components/dropdown/menu/dropdownmenu.css';\n/**\n * Represents a nested menu view.\n */\nclass DropdownMenuNestedMenuView extends View {\n    /**\n     * Creates a new instance of the DropdownMenuView class.\n     *\n     * @param locale\n     * @param bodyCollection\n     * @param id\n     * @param label The label for the dropdown menu button.\n     * @param parentMenuView The parent dropdown menu view, if any.\n     */\n    constructor(locale, bodyCollection, id, label, parentMenuView) {\n        super(locale);\n        this._bodyCollection = bodyCollection;\n        this.id = id;\n        this.set({\n            isOpen: false,\n            isEnabled: true,\n            panelPosition: 'w',\n            class: undefined,\n            parentMenuView: null\n        });\n        this.keystrokes = new KeystrokeHandler();\n        this.focusTracker = new FocusTracker();\n        this.buttonView = new DropdownMenuButtonView(locale);\n        this.buttonView.delegate('mouseenter').to(this);\n        this.buttonView.bind('isOn', 'isEnabled').to(this, 'isOpen', 'isEnabled');\n        this.buttonView.label = label;\n        this.panelView = new DropdownMenuNestedMenuPanelView(locale);\n        this.panelView.isVisible = true;\n        this.listView = new DropdownMenuListView(locale);\n        this.listView.bind('ariaLabel').to(this.buttonView, 'label');\n        this.panelView.content.add(this.listView);\n        const bind = this.bindTemplate;\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-dropdown-menu-list__nested-menu',\n                    bind.to('class'),\n                    bind.if('isEnabled', 'ck-disabled', value => !value)\n                ],\n                role: 'presentation'\n            },\n            children: [\n                this.buttonView\n            ]\n        });\n        this.parentMenuView = parentMenuView;\n        if (this.parentMenuView) {\n            this._handleParentMenuView();\n        }\n        this._attachBehaviors();\n    }\n    /**\n     * An array of positioning functions used to determine the position of the dropdown menu panel.\n     * The order of the functions in the array determines the priority of the positions to be tried.\n     * The first function that returns a valid position will be used.\n     *\n     * @returns {Array<PositioningFunction>} An array of positioning functions.\n     * @internal\n     */\n    get _panelPositions() {\n        const { westSouth, eastSouth, westNorth, eastNorth } = DropdownMenuPanelPositioningFunctions;\n        if (this.locale.uiLanguageDirection === 'ltr') {\n            return [eastSouth, eastNorth, westSouth, westNorth];\n        }\n        else {\n            return [westSouth, westNorth, eastSouth, eastNorth];\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.panelView.render();\n        this.focusTracker.add(this.buttonView.element);\n        this.focusTracker.add(this.panelView.element);\n        this.focusTracker.add(this.listView);\n        // Listen for keystrokes coming from within #element.\n        this.keystrokes.listenTo(this.element);\n        this._mountPanelOnOpen();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this._removePanelFromBody();\n        this.panelView.destroy();\n        super.destroy();\n    }\n    /**\n     * @inheritDoc\n     */\n    focus() {\n        this.buttonView.focus();\n    }\n    _handleParentMenuView() {\n        // Propagate events from this component to parent-menu.\n        this.delegate(...DropdownMenuNestedMenuView.DELEGATED_EVENTS).to(this.parentMenuView);\n        // Close this menu if its parent closes.\n        DropdownMenuBehaviors.closeOnParentClose(this, this.parentMenuView);\n    }\n    /**\n     * Attach all keyboard behaviors for the menu view.\n     */\n    _attachBehaviors() {\n        DropdownMenuBehaviors.openOnButtonClick(this);\n        DropdownMenuBehaviors.openAndFocusOnEnterKeyPress(this);\n        DropdownMenuBehaviors.openOnArrowRightKey(this);\n        DropdownMenuBehaviors.closeOnEscKey(this);\n        DropdownMenuBehaviors.closeOnArrowLeftKey(this);\n    }\n    /**\n     * Mounts the portal view in the body when the menu is open and removes it when the menu is closed.\n     * Binds keystrokes to the portal view when the menu is open.\n     */\n    _mountPanelOnOpen() {\n        const { panelView } = this;\n        this.on('change:isOpen', (evt, name, isOpen) => {\n            // Ensure that the event was triggered by this instance.\n            // TODO: Remove checking `evt.source` if `change:isOpen` is no longer delegated.\n            if (evt.source !== this) {\n                return;\n            }\n            // Removes the panel view from the body when the menu is closed.\n            if (!isOpen && this._bodyCollection.has(panelView)) {\n                this._removePanelFromBody();\n                return;\n            }\n            // Adds the panel view to the body when the menu is open.\n            if (isOpen && !this._bodyCollection.has(panelView)) {\n                this._addPanelToBody();\n            }\n        });\n    }\n    /**\n     * Removes the panel view from the editor's body and removes it from the focus tracker.\n     */\n    _removePanelFromBody() {\n        const { panelView, keystrokes } = this;\n        if (this._bodyCollection.has(panelView)) {\n            this._bodyCollection.remove(panelView);\n            keystrokes.stopListening(panelView.element);\n        }\n    }\n    /**\n     * Adds the panel view to the editor's body and sets up event listeners.\n     */\n    _addPanelToBody() {\n        const { panelView, buttonView, keystrokes } = this;\n        if (!this._bodyCollection.has(panelView)) {\n            this._bodyCollection.add(panelView);\n            keystrokes.listenTo(panelView.element);\n            panelView.pin({\n                positions: this._panelPositions,\n                limiter: global.document.body,\n                element: panelView.element,\n                target: buttonView.element,\n                fitInViewport: true\n            });\n        }\n    }\n}\n/**\n * An array of delegated events for the dropdown menu definition controller.\n * These events are delegated to the dropdown menu element.\n */\n// Due to some spaghetti code we need to delegate `change:isOpen`.\nDropdownMenuNestedMenuView.DELEGATED_EVENTS = [\n    'mouseenter', 'execute', 'change:isOpen'\n];\nexport default DropdownMenuNestedMenuView;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/toolbar/toolbarseparatorview\n */\nimport View from '../view.js';\n/**\n * The toolbar separator view class.\n */\nexport default class ToolbarSeparatorView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-toolbar__separator'\n                ]\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/toolbar/toolbarlinebreakview\n */\nimport View from '../view.js';\n/**\n * The toolbar line break view class.\n */\nexport default class ToolbarLineBreakView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-toolbar__line-break'\n                ]\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/toolbar/normalizetoolbarconfig\n */\n/**\n * Normalizes the toolbar configuration (`config.toolbar`), which:\n *\n * * may be defined as an `Array`:\n *\n * ```\n * toolbar: [ 'heading', 'bold', 'italic', 'link', ... ]\n * ```\n *\n * * or an `Object`:\n *\n * ```\n * toolbar: {\n * \titems: [ 'heading', 'bold', 'italic', 'link', ... ],\n * \tremoveItems: [ 'bold' ],\n * \t...\n * }\n * ```\n *\n * * or may not be defined at all (`undefined`)\n *\n * and returns it in the object form.\n *\n * @param config The value of `config.toolbar`.\n * @returns A normalized toolbar config object.\n */\nexport default function normalizeToolbarConfig(config) {\n    if (Array.isArray(config)) {\n        return {\n            items: config,\n            removeItems: []\n        };\n    }\n    const predefinedConfigOptions = {\n        items: [],\n        removeItems: []\n    };\n    if (!config) {\n        return predefinedConfigOptions;\n    }\n    return {\n        ...predefinedConfigOptions,\n        ...config\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/toolbar/toolbarview\n */\nimport View from '../view.js';\nimport FocusCycler, { isFocusable } from '../focuscycler.js';\nimport ToolbarSeparatorView from './toolbarseparatorview.js';\nimport ToolbarLineBreakView from './toolbarlinebreakview.js';\nimport preventDefault from '../bindings/preventdefault.js';\nimport { createDropdown, addToolbarToDropdown } from '../dropdown/utils.js';\nimport normalizeToolbarConfig from './normalizetoolbarconfig.js';\nimport { FocusTracker, KeystrokeHandler, Rect, ResizeObserver, global, isVisible, logWarning } from '@ckeditor/ckeditor5-utils';\nimport { icons } from '@ckeditor/ckeditor5-core';\nimport { isObject } from 'lodash-es';\nimport '../../theme/components/toolbar/toolbar.css';\nexport const NESTED_TOOLBAR_ICONS = /* #__PURE__ */ (() => ({\n    alignLeft: icons.alignLeft,\n    bold: icons.bold,\n    importExport: icons.importExport,\n    paragraph: icons.paragraph,\n    plus: icons.plus,\n    text: icons.text,\n    threeVerticalDots: icons.threeVerticalDots,\n    pilcrow: icons.pilcrow,\n    dragIndicator: icons.dragIndicator\n}))();\n/**\n * The toolbar view class.\n */\nexport default class ToolbarView extends View {\n    /**\n     * Creates an instance of the {@link module:ui/toolbar/toolbarview~ToolbarView} class.\n     *\n     * Also see {@link #render}.\n     *\n     * @param locale The localization services instance.\n     * @param options Configuration options of the toolbar.\n     */\n    constructor(locale, options) {\n        super(locale);\n        const bind = this.bindTemplate;\n        const t = this.t;\n        this.options = options || {};\n        this.set('ariaLabel', t('Editor toolbar'));\n        this.set('maxWidth', 'auto');\n        this.items = this.createCollection();\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.set('class', undefined);\n        this.set('isCompact', false);\n        this.itemsView = new ItemsView(locale);\n        this.children = this.createCollection();\n        this.children.add(this.itemsView);\n        this.focusables = this.createCollection();\n        const isRtl = locale.uiLanguageDirection === 'rtl';\n        this._focusCycler = new FocusCycler({\n            focusables: this.focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate toolbar items backwards using the arrow[left,up] keys.\n                focusPrevious: [isRtl ? 'arrowright' : 'arrowleft', 'arrowup'],\n                // Navigate toolbar items forwards using the arrow[right,down] keys.\n                focusNext: [isRtl ? 'arrowleft' : 'arrowright', 'arrowdown']\n            }\n        });\n        const classes = [\n            'ck',\n            'ck-toolbar',\n            bind.to('class'),\n            bind.if('isCompact', 'ck-toolbar_compact')\n        ];\n        if (this.options.shouldGroupWhenFull && this.options.isFloating) {\n            classes.push('ck-toolbar_floating');\n        }\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: classes,\n                role: 'toolbar',\n                'aria-label': bind.to('ariaLabel'),\n                style: {\n                    maxWidth: bind.to('maxWidth')\n                },\n                tabindex: -1\n            },\n            children: this.children,\n            on: {\n                // https://github.com/ckeditor/ckeditor5-ui/issues/206\n                mousedown: preventDefault(this)\n            }\n        });\n        this._behavior = this.options.shouldGroupWhenFull ? new DynamicGrouping(this) : new StaticLayout(this);\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.focusTracker.add(this.element);\n        // Children added before rendering should be known to the #focusTracker.\n        for (const item of this.items) {\n            this.focusTracker.add(item);\n        }\n        this.items.on('add', (evt, item) => {\n            this.focusTracker.add(item);\n        });\n        this.items.on('remove', (evt, item) => {\n            this.focusTracker.remove(item);\n        });\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n        this._behavior.render(this);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this._behavior.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n        return super.destroy();\n    }\n    /**\n     * Focuses the first focusable in {@link #focusables}.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Focuses the last focusable in {@link #focusables}.\n     */\n    focusLast() {\n        this._focusCycler.focusLast();\n    }\n    /**\n     * A utility that expands the plain toolbar configuration into\n     * {@link module:ui/toolbar/toolbarview~ToolbarView#items} using a given component factory.\n     *\n     * @param itemsOrConfig The toolbar items or the entire toolbar configuration object.\n     * @param factory A factory producing toolbar items.\n     * @param removeItems An array of items names to be removed from the configuration. When present, applies\n     * to this toolbar and all nested ones as well.\n     */\n    fillFromConfig(itemsOrConfig, factory, removeItems) {\n        this.items.addMany(this._buildItemsFromConfig(itemsOrConfig, factory, removeItems));\n    }\n    /**\n     * A utility that expands the plain toolbar configuration into a list of view items using a given component factory.\n     *\n     * @param itemsOrConfig The toolbar items or the entire toolbar configuration object.\n     * @param factory A factory producing toolbar items.\n     * @param removeItems An array of items names to be removed from the configuration. When present, applies\n     * to this toolbar and all nested ones as well.\n     */\n    _buildItemsFromConfig(itemsOrConfig, factory, removeItems) {\n        const config = normalizeToolbarConfig(itemsOrConfig);\n        const normalizedRemoveItems = removeItems || config.removeItems;\n        const itemsToAdd = this._cleanItemsConfiguration(config.items, factory, normalizedRemoveItems)\n            .map(item => {\n            if (isObject(item)) {\n                return this._createNestedToolbarDropdown(item, factory, normalizedRemoveItems);\n            }\n            else if (item === '|') {\n                return new ToolbarSeparatorView();\n            }\n            else if (item === '-') {\n                return new ToolbarLineBreakView();\n            }\n            return factory.create(item);\n        })\n            .filter((item) => !!item);\n        return itemsToAdd;\n    }\n    /**\n     * Cleans up the {@link module:ui/toolbar/toolbarview~ToolbarView#items} of the toolbar by removing unwanted items and\n     * duplicated (obsolete) separators or line breaks.\n     *\n     * @param items The toolbar items configuration.\n     * @param factory A factory producing toolbar items.\n     * @param removeItems An array of items names to be removed from the configuration.\n     * @returns Items after the clean-up.\n     */\n    _cleanItemsConfiguration(items, factory, removeItems) {\n        const filteredItems = items\n            .filter((item, idx, items) => {\n            if (item === '|') {\n                return true;\n            }\n            // Items listed in `config.removeItems` should not be added to the toolbar.\n            if (removeItems.indexOf(item) !== -1) {\n                return false;\n            }\n            if (item === '-') {\n                // The toolbar line breaks must not be rendered when toolbar grouping is enabled.\n                // (https://github.com/ckeditor/ckeditor5/issues/8582)\n                if (this.options.shouldGroupWhenFull) {\n                    /**\n                     * The toolbar multiline breaks (`-` items) only work when the automatic button grouping\n                     * is disabled in the toolbar configuration.\n                     * To do this, set the `shouldNotGroupWhenFull` option to `true` in the editor configuration:\n                     *\n                     * ```ts\n                     * const config = {\n                     * \ttoolbar: {\n                     * \t\titems: [ ... ],\n                     * \t\tshouldNotGroupWhenFull: true\n                     * \t}\n                     * }\n                     * ```\n                     *\n                     * Learn more about {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar configuration}.\n                     *\n                     * @error toolbarview-line-break-ignored-when-grouping-items\n                     */\n                    logWarning('toolbarview-line-break-ignored-when-grouping-items', items);\n                    return false;\n                }\n                return true;\n            }\n            // For the items that cannot be instantiated we are sending warning message. We also filter them out.\n            if (!isObject(item) && !factory.has(item)) {\n                /**\n                 * There was a problem processing the configuration of the toolbar. The item with the given\n                 * name does not exist so it was omitted when rendering the toolbar.\n                 *\n                 * This warning usually shows up when the {@link module:core/plugin~Plugin} which is supposed\n                 * to provide a toolbar item has not been loaded or there is a typo in the\n                 * {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar configuration}.\n                 *\n                 * Make sure the plugin responsible for this toolbar item is loaded and the toolbar configuration\n                 * is correct, e.g. {@link module:basic-styles/bold~Bold} is loaded for the `'bold'` toolbar item.\n                 *\n                 * You can use the following snippet to retrieve all available toolbar items:\n                 *\n                 * ```ts\n                 * Array.from( editor.ui.componentFactory.names() );\n                 * ```\n                 *\n                 * @error toolbarview-item-unavailable\n                 * @param item The name of the component or nested toolbar definition.\n                 */\n                logWarning('toolbarview-item-unavailable', { item });\n                return false;\n            }\n            return true;\n        });\n        return this._cleanSeparatorsAndLineBreaks(filteredItems);\n    }\n    /**\n     * Remove leading, trailing, and duplicated separators (`-` and `|`).\n     *\n     * @returns Toolbar items after the separator and line break clean-up.\n     */\n    _cleanSeparatorsAndLineBreaks(items) {\n        const nonSeparatorPredicate = (item) => (item !== '-' && item !== '|');\n        const count = items.length;\n        // Find an index of the first item that is not a separator.\n        const firstCommandItemIndex = items.findIndex(nonSeparatorPredicate);\n        // Items include separators only. There is no point in displaying them.\n        if (firstCommandItemIndex === -1) {\n            return [];\n        }\n        // Search from the end of the list, then convert found index back to the original direction.\n        const lastCommandItemIndex = count - items\n            .slice()\n            .reverse()\n            .findIndex(nonSeparatorPredicate);\n        return items\n            // Return items without the leading and trailing separators.\n            .slice(firstCommandItemIndex, lastCommandItemIndex)\n            // Remove duplicated separators.\n            .filter((name, idx, items) => {\n            // Filter only separators.\n            if (nonSeparatorPredicate(name)) {\n                return true;\n            }\n            const isDuplicated = idx > 0 && items[idx - 1] === name;\n            return !isDuplicated;\n        });\n    }\n    /**\n     * Creates a user-defined dropdown containing a toolbar with items.\n     *\n     * @param definition A definition of the nested toolbar dropdown.\n     * @param definition.label A label of the dropdown.\n     * @param definition.icon An icon of the drop-down. One of 'bold', 'plus', 'text', 'importExport', 'alignLeft',\n     * 'paragraph' or an SVG string. When `false` is passed, no icon will be used.\n     * @param definition.withText When set `true`, the label of the dropdown will be visible. See\n     * {@link module:ui/button/buttonview~ButtonView#withText} to learn more.\n     * @param definition.tooltip A tooltip of the dropdown button. See\n     * {@link module:ui/button/buttonview~ButtonView#tooltip} to learn more. Defaults to `true`.\n     * @param componentFactory Component factory used to create items\n     * of the nested toolbar.\n     */\n    _createNestedToolbarDropdown(definition, componentFactory, removeItems) {\n        let { label, icon, items, tooltip = true, withText = false } = definition;\n        items = this._cleanItemsConfiguration(items, componentFactory, removeItems);\n        // There is no point in rendering a dropdown without items.\n        if (!items.length) {\n            return null;\n        }\n        const locale = this.locale;\n        const dropdownView = createDropdown(locale);\n        if (!label) {\n            /**\n             * A dropdown definition in the toolbar configuration is missing a text label.\n             *\n             * Without a label, the dropdown becomes inaccessible to users relying on assistive technologies.\n             * Make sure the `label` property is set in your drop-down configuration:\n             *\n             * ```json\n             * {\n             * \tlabel: 'A human-readable label',\n             * \ticon: '...',\n             * \titems: [ ... ]\n             * },\n             * ```\n             *\n             * Learn more about {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar configuration}.\n             *\n             * @error toolbarview-nested-toolbar-dropdown-missing-label\n             */\n            logWarning('toolbarview-nested-toolbar-dropdown-missing-label', definition);\n        }\n        dropdownView.class = 'ck-toolbar__nested-toolbar-dropdown';\n        dropdownView.buttonView.set({\n            label,\n            tooltip,\n            withText: !!withText\n        });\n        // Allow disabling icon by passing false.\n        if (icon !== false) {\n            // A pre-defined icon picked by name, SVG string, a fallback (default) icon.\n            dropdownView.buttonView.icon = NESTED_TOOLBAR_ICONS[icon] || icon || icons.threeVerticalDots;\n        }\n        // If the icon is disabled, display the label automatically.\n        else {\n            dropdownView.buttonView.withText = true;\n        }\n        addToolbarToDropdown(dropdownView, () => (dropdownView.toolbarView._buildItemsFromConfig(items, componentFactory, removeItems)));\n        return dropdownView;\n    }\n}\n/**\n * An inner block of the {@link module:ui/toolbar/toolbarview~ToolbarView} hosting its\n * {@link module:ui/toolbar/toolbarview~ToolbarView#items}.\n */\nclass ItemsView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.children = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-toolbar__items'\n                ]\n            },\n            children: this.children\n        });\n    }\n}\n/**\n * A toolbar behavior that makes it static and unresponsive to the changes of the environment.\n * At the same time, it also makes it possible to display a toolbar with a vertical layout\n * using the {@link module:ui/toolbar/toolbarview~ToolbarView#isVertical} property.\n */\nclass StaticLayout {\n    /**\n     * Creates an instance of the {@link module:ui/toolbar/toolbarview~StaticLayout} toolbar\n     * behavior.\n     *\n     * @param view An instance of the toolbar that this behavior is added to.\n     */\n    constructor(view) {\n        const bind = view.bindTemplate;\n        // Static toolbar can be vertical when needed.\n        view.set('isVertical', false);\n        // 1:1 pass–through binding, all ToolbarView#items are visible.\n        view.itemsView.children.bindTo(view.items).using(item => item);\n        // 1:1 pass–through binding, all ToolbarView#items are focusable.\n        view.focusables.bindTo(view.items).using(item => isFocusable(item) ? item : null);\n        view.extendTemplate({\n            attributes: {\n                class: [\n                    // When vertical, the toolbar has an additional CSS class.\n                    bind.if('isVertical', 'ck-toolbar_vertical')\n                ]\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() { }\n    /**\n     * @inheritDoc\n     */\n    destroy() { }\n}\n/**\n * A toolbar behavior that makes the items respond to changes in the geometry.\n *\n * In a nutshell, it groups {@link module:ui/toolbar/toolbarview~ToolbarView#items}\n * that do not fit visually into a single row of the toolbar (due to limited space).\n * Items that do not fit are aggregated in a dropdown displayed at the end of the toolbar.\n *\n * ```\n *\t┌──────────────────────────────────────── ToolbarView ──────────────────────────────────────────┐\n *\t| ┌─────────────────────────────────────── #children ─────────────────────────────────────────┐ |\n *\t| |   ┌─────── #itemsView ────────┐ ┌──────────────────────┐ ┌── #groupedItemsDropdown ───┐   | |\n *\t| |   |       #ungroupedItems     | | ToolbarSeparatorView | |        #groupedItems       |   | |\n *\t| |   └──────────────────────────-┘ └──────────────────────┘ └────────────────────────────┘   | |\n *\t| |                                  \\---------- only when toolbar items overflow -------/    | |\n *\t| └───────────────────────────────────────────────────────────────────────────────────────────┘ |\n *\t└───────────────────────────────────────────────────────────────────────────────────────────────┘\n * ```\n */\nclass DynamicGrouping {\n    /**\n     * Creates an instance of the {@link module:ui/toolbar/toolbarview~DynamicGrouping} toolbar\n     * behavior.\n     *\n     * @param view An instance of the toolbar that this behavior is added to.\n     */\n    constructor(view) {\n        /**\n         * An instance of the resize observer that helps dynamically determine the geometry of the toolbar\n         * and manage items that do not fit into a single row.\n         *\n         * **Note:** Created in {@link #_enableGroupingOnResize}.\n         *\n         * @readonly\n         */\n        this.resizeObserver = null;\n        /**\n         * A cached value of the horizontal padding style used by {@link #_updateGrouping}\n         * to manage the {@link module:ui/toolbar/toolbarview~ToolbarView#items} that do not fit into\n         * a single toolbar line. This value can be reused between updates because it is unlikely that\n         * the padding will change and re–using `Window.getComputedStyle()` is expensive.\n         *\n         * @readonly\n         */\n        this.cachedPadding = null;\n        /**\n         * A flag indicating that an items grouping update has been queued (e.g. due to the toolbar being visible)\n         * and should be executed immediately the next time the toolbar shows up.\n         *\n         * @readonly\n         */\n        this.shouldUpdateGroupingOnNextResize = false;\n        this.view = view;\n        this.viewChildren = view.children;\n        this.viewFocusables = view.focusables;\n        this.viewItemsView = view.itemsView;\n        this.viewFocusTracker = view.focusTracker;\n        this.viewLocale = view.locale;\n        this.ungroupedItems = view.createCollection();\n        this.groupedItems = view.createCollection();\n        this.groupedItemsDropdown = this._createGroupedItemsDropdown();\n        // Only those items that were not grouped are visible to the user.\n        view.itemsView.children.bindTo(this.ungroupedItems).using(item => item);\n        // Make sure all #items visible in the main space of the toolbar are \"focuscyclable\".\n        this.ungroupedItems.on('change', this._updateFocusCyclableItems.bind(this));\n        // Make sure the #groupedItemsDropdown is also included in cycling when it appears.\n        view.children.on('change', this._updateFocusCyclableItems.bind(this));\n        // ToolbarView#items is dynamic. When an item is added or removed, it should be automatically\n        // represented in either grouped or ungrouped items at the right index.\n        // In other words #items == concat( #ungroupedItems, #groupedItems )\n        // (in length and order).\n        view.items.on('change', (evt, changeData) => {\n            const index = changeData.index;\n            const added = Array.from(changeData.added);\n            // Removing.\n            for (const removedItem of changeData.removed) {\n                if (index >= this.ungroupedItems.length) {\n                    this.groupedItems.remove(removedItem);\n                }\n                else {\n                    this.ungroupedItems.remove(removedItem);\n                }\n            }\n            // Adding.\n            for (let currentIndex = index; currentIndex < index + added.length; currentIndex++) {\n                const addedItem = added[currentIndex - index];\n                if (currentIndex > this.ungroupedItems.length) {\n                    this.groupedItems.add(addedItem, currentIndex - this.ungroupedItems.length);\n                }\n                else {\n                    this.ungroupedItems.add(addedItem, currentIndex);\n                }\n            }\n            // When new ungrouped items join in and land in #ungroupedItems, there's a chance it causes\n            // the toolbar to overflow.\n            // Consequently if removed from grouped or ungrouped items, there is a chance\n            // some new space is available and we could do some ungrouping.\n            this._updateGrouping();\n        });\n        view.extendTemplate({\n            attributes: {\n                class: [\n                    // To group items dynamically, the toolbar needs a dedicated CSS class.\n                    'ck-toolbar_grouping'\n                ]\n            }\n        });\n    }\n    /**\n     * Enables dynamic items grouping based on the dimensions of the toolbar.\n     *\n     * @param view An instance of the toolbar that this behavior is added to.\n     */\n    render(view) {\n        this.viewElement = view.element;\n        this._enableGroupingOnResize();\n        this._enableGroupingOnMaxWidthChange(view);\n    }\n    /**\n     * Cleans up the internals used by this behavior.\n     */\n    destroy() {\n        // The dropdown may not be in ToolbarView#children at the moment of toolbar destruction\n        // so let's make sure it's actually destroyed along with the toolbar.\n        this.groupedItemsDropdown.destroy();\n        this.resizeObserver.destroy();\n    }\n    /**\n     * When called, it will check if any of the {@link #ungroupedItems} do not fit into a single row of the toolbar,\n     * and it will move them to the {@link #groupedItems} when it happens.\n     *\n     * At the same time, it will also check if there is enough space in the toolbar for the first of the\n     * {@link #groupedItems} to be returned back to {@link #ungroupedItems} and still fit into a single row\n     * without the toolbar wrapping.\n     */\n    _updateGrouping() {\n        // Do no grouping–related geometry analysis when the toolbar is detached from visible DOM,\n        // for instance before #render(), or after render but without a parent or a parent detached\n        // from DOM. DOMRects won't work anyway and there will be tons of warning in the console and\n        // nothing else. This happens, for instance, when the toolbar is detached from DOM and\n        // some logic adds or removes its #items.\n        if (!this.viewElement.ownerDocument.body.contains(this.viewElement)) {\n            return;\n        }\n        // Do not update grouping when the element is invisible. Such toolbar has DOMRect filled with zeros\n        // and that would cause all items to be grouped. Instead, queue the grouping so it runs next time\n        // the toolbar is visible (the next ResizeObserver callback execution). This is handy because\n        // the grouping could be caused by increasing the #maxWidth when the toolbar was invisible and the next\n        // time it shows up, some items could actually be ungrouped (https://github.com/ckeditor/ckeditor5/issues/6575).\n        if (!isVisible(this.viewElement)) {\n            this.shouldUpdateGroupingOnNextResize = true;\n            return;\n        }\n        // Remember how many items were initially grouped so at the it is possible to figure out if the number\n        // of grouped items has changed. If the number has changed, geometry of the toolbar has also changed.\n        const initialGroupedItemsCount = this.groupedItems.length;\n        let wereItemsGrouped;\n        // Group #items as long as some wrap to the next row. This will happen, for instance,\n        // when the toolbar is getting narrow and there is not enough space to display all items in\n        // a single row.\n        while (this._areItemsOverflowing) {\n            this._groupLastItem();\n            wereItemsGrouped = true;\n        }\n        // If none were grouped now but there were some items already grouped before,\n        // then, what the hell, maybe let's see if some of them can be ungrouped. This happens when,\n        // for instance, the toolbar is stretching and there's more space in it than before.\n        if (!wereItemsGrouped && this.groupedItems.length) {\n            // Ungroup items as long as none are overflowing or there are none to ungroup left.\n            while (this.groupedItems.length && !this._areItemsOverflowing) {\n                this._ungroupFirstItem();\n            }\n            // If the ungrouping ended up with some item wrapping to the next row,\n            // put it back to the group toolbar (\"undo the last ungroup\"). We don't know whether\n            // an item will wrap or not until we ungroup it (that's a DOM/CSS thing) so this\n            // clean–up is vital for the algorithm.\n            if (this._areItemsOverflowing) {\n                this._groupLastItem();\n            }\n        }\n        if (this.groupedItems.length !== initialGroupedItemsCount) {\n            this.view.fire('groupedItemsUpdate');\n        }\n    }\n    /**\n     * Returns `true` when {@link module:ui/toolbar/toolbarview~ToolbarView#element} children visually overflow,\n     * for instance if the toolbar is narrower than its members. Returns `false` otherwise.\n     */\n    get _areItemsOverflowing() {\n        // An empty toolbar cannot overflow.\n        if (!this.ungroupedItems.length) {\n            return false;\n        }\n        const element = this.viewElement;\n        const uiLanguageDirection = this.viewLocale.uiLanguageDirection;\n        const lastChildRect = new Rect(element.lastChild);\n        const toolbarRect = new Rect(element);\n        if (!this.cachedPadding) {\n            const computedStyle = global.window.getComputedStyle(element);\n            const paddingProperty = uiLanguageDirection === 'ltr' ? 'paddingRight' : 'paddingLeft';\n            // parseInt() is essential because of quirky floating point numbers logic and DOM.\n            // If the padding turned out too big because of that, the grouped items dropdown would\n            // always look (from the Rect perspective) like it overflows (while it's not).\n            this.cachedPadding = Number.parseInt(computedStyle[paddingProperty]);\n        }\n        if (uiLanguageDirection === 'ltr') {\n            return lastChildRect.right > toolbarRect.right - this.cachedPadding;\n        }\n        else {\n            return lastChildRect.left < toolbarRect.left + this.cachedPadding;\n        }\n    }\n    /**\n     * Enables the functionality that prevents {@link #ungroupedItems} from overflowing (wrapping to the next row)\n     * upon resize when there is little space available. Instead, the toolbar items are moved to the\n     * {@link #groupedItems} collection and displayed in a dropdown at the end of the row (which has its own nested toolbar).\n     *\n     * When called, the toolbar will automatically analyze the location of its {@link #ungroupedItems} and \"group\"\n     * them in the dropdown if necessary. It will also observe the browser window for size changes in\n     * the future and respond to them by grouping more items or reverting already grouped back, depending\n     * on the visual space available.\n     */\n    _enableGroupingOnResize() {\n        let previousWidth;\n        // TODO: Consider debounce.\n        this.resizeObserver = new ResizeObserver(this.viewElement, entry => {\n            if (!previousWidth || previousWidth !== entry.contentRect.width || this.shouldUpdateGroupingOnNextResize) {\n                this.shouldUpdateGroupingOnNextResize = false;\n                this._updateGrouping();\n                previousWidth = entry.contentRect.width;\n            }\n        });\n        this._updateGrouping();\n    }\n    /**\n     * Enables the grouping functionality, just like {@link #_enableGroupingOnResize} but the difference is that\n     * it listens to the changes of {@link module:ui/toolbar/toolbarview~ToolbarView#maxWidth} instead.\n     */\n    _enableGroupingOnMaxWidthChange(view) {\n        view.on('change:maxWidth', () => {\n            this._updateGrouping();\n        });\n    }\n    /**\n     * When called, it will remove the last item from {@link #ungroupedItems} and move it back\n     * to the {@link #groupedItems} collection.\n     *\n     * The opposite of {@link #_ungroupFirstItem}.\n     */\n    _groupLastItem() {\n        if (!this.groupedItems.length) {\n            this.viewChildren.add(new ToolbarSeparatorView());\n            this.viewChildren.add(this.groupedItemsDropdown);\n            this.viewFocusTracker.add(this.groupedItemsDropdown.element);\n        }\n        this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last), 0);\n    }\n    /**\n     * Moves the very first item belonging to {@link #groupedItems} back\n     * to the {@link #ungroupedItems} collection.\n     *\n     * The opposite of {@link #_groupLastItem}.\n     */\n    _ungroupFirstItem() {\n        this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first));\n        if (!this.groupedItems.length) {\n            this.viewChildren.remove(this.groupedItemsDropdown);\n            this.viewChildren.remove(this.viewChildren.last);\n            this.viewFocusTracker.remove(this.groupedItemsDropdown.element);\n        }\n    }\n    /**\n     * Creates the {@link #groupedItemsDropdown} that hosts the members of the {@link #groupedItems}\n     * collection when there is not enough space in the toolbar to display all items in a single row.\n     */\n    _createGroupedItemsDropdown() {\n        const locale = this.viewLocale;\n        const t = locale.t;\n        const dropdown = createDropdown(locale);\n        dropdown.class = 'ck-toolbar__grouped-dropdown';\n        // Make sure the dropdown never sticks out to the left/right. It should be under the main toolbar.\n        // (https://github.com/ckeditor/ckeditor5/issues/5608)\n        dropdown.panelPosition = locale.uiLanguageDirection === 'ltr' ? 'sw' : 'se';\n        addToolbarToDropdown(dropdown, this.groupedItems);\n        dropdown.buttonView.set({\n            label: t('Show more items'),\n            tooltip: true,\n            tooltipPosition: locale.uiLanguageDirection === 'rtl' ? 'se' : 'sw',\n            icon: icons.threeVerticalDots\n        });\n        return dropdown;\n    }\n    /**\n     * Updates the {@link module:ui/toolbar/toolbarview~ToolbarView#focusables focus–cyclable items}\n     * collection so it represents the up–to–date state of the UI from the perspective of the user.\n     *\n     * For instance, the {@link #groupedItemsDropdown} can show up and hide but when it is visible,\n     * it must be subject to focus cycling in the toolbar.\n     *\n     * See the {@link module:ui/toolbar/toolbarview~ToolbarView#focusables collection} documentation\n     * to learn more about the purpose of this method.\n     */\n    _updateFocusCyclableItems() {\n        this.viewFocusables.clear();\n        this.ungroupedItems.map(item => {\n            if (isFocusable(item)) {\n                this.viewFocusables.add(item);\n            }\n        });\n        if (this.groupedItems.length) {\n            this.viewFocusables.add(this.groupedItemsDropdown);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * A helper which executes a native `Event.preventDefault()` if the target of an event equals the\n * {@link module:ui/view~View#element element of the view}. It shortens the definition of a\n * {@link module:ui/view~View#template template}.\n *\n * ```ts\n * // In a class extending View.\n * import preventDefault from '@ckeditor/ckeditor5-ui/src/bindings/preventdefault';\n *\n * // ...\n *\n * this.setTemplate( {\n * \ttag: 'div',\n *\n * \ton: {\n * \t\t// Prevent the default mousedown action on this view.\n * \t\tmousedown: preventDefault( this )\n * \t}\n * } );\n * ```\n *\n * @param view View instance that defines the template.\n */\nexport default function preventDefault(view) {\n    return view.bindTemplate.to(evt => {\n        if (evt.target === view.element) {\n            evt.preventDefault();\n        }\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/button/splitbuttonview\n */\nimport View from '../../view.js';\nimport ButtonView from '../../button/buttonview.js';\nimport { KeystrokeHandler, FocusTracker } from '@ckeditor/ckeditor5-utils';\nimport dropdownArrowIcon from '../../../theme/icons/dropdown-arrow.svg';\nimport '../../../theme/components/dropdown/splitbutton.css';\n/**\n * The split button view class.\n *\n * ```ts\n * const view = new SplitButtonView();\n *\n * view.set( {\n * \tlabel: 'A button',\n * \tkeystroke: 'Ctrl+B',\n * \ttooltip: true\n * } );\n *\n * view.render();\n *\n * document.body.append( view.element );\n * ```\n *\n * Also see the {@link module:ui/dropdown/utils~createDropdown `createDropdown()` util}.\n */\nexport default class SplitButtonView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, actionButton) {\n        super(locale);\n        const bind = this.bindTemplate;\n        // Implement the Button interface.\n        this.set('class', undefined);\n        this.set('labelStyle', undefined);\n        this.set('icon', undefined);\n        this.set('isEnabled', true);\n        this.set('isOn', false);\n        this.set('isToggleable', false);\n        this.set('isVisible', true);\n        this.set('keystroke', undefined);\n        this.set('withKeystroke', false);\n        this.set('label', undefined);\n        this.set('tabindex', -1);\n        this.set('tooltip', false);\n        this.set('tooltipPosition', 's');\n        this.set('type', 'button');\n        this.set('withText', false);\n        this.children = this.createCollection();\n        this.actionView = this._createActionView(actionButton);\n        this.arrowView = this._createArrowView();\n        this.keystrokes = new KeystrokeHandler();\n        this.focusTracker = new FocusTracker();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-splitbutton',\n                    bind.to('class'),\n                    bind.if('isVisible', 'ck-hidden', value => !value),\n                    this.arrowView.bindTemplate.if('isOn', 'ck-splitbutton_open')\n                ]\n            },\n            children: this.children\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.children.add(this.actionView);\n        this.children.add(this.arrowView);\n        this.focusTracker.add(this.actionView.element);\n        this.focusTracker.add(this.arrowView.element);\n        this.keystrokes.listenTo(this.element);\n        // Overrides toolbar focus cycling behavior.\n        this.keystrokes.set('arrowright', (evt, cancel) => {\n            if (this.focusTracker.focusedElement === this.actionView.element) {\n                this.arrowView.focus();\n                cancel();\n            }\n        });\n        // Overrides toolbar focus cycling behavior.\n        this.keystrokes.set('arrowleft', (evt, cancel) => {\n            if (this.focusTracker.focusedElement === this.arrowView.element) {\n                this.actionView.focus();\n                cancel();\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the {@link module:ui/button/buttonview~ButtonView#element} of the action part of split button.\n     */\n    focus() {\n        this.actionView.focus();\n    }\n    /**\n     * Creates a {@link module:ui/button/buttonview~ButtonView} instance as {@link #actionView} and binds it with main split button\n     * attributes.\n     */\n    _createActionView(actionButton) {\n        const actionView = actionButton || new ButtonView();\n        if (!actionButton) {\n            actionView.bind('icon', 'isEnabled', 'isOn', 'isToggleable', 'keystroke', 'label', 'tabindex', 'tooltip', 'tooltipPosition', 'type', 'withText').to(this);\n        }\n        actionView.extendTemplate({\n            attributes: {\n                class: 'ck-splitbutton__action'\n            }\n        });\n        actionView.delegate('execute').to(this);\n        return actionView;\n    }\n    /**\n     * Creates a {@link module:ui/button/buttonview~ButtonView} instance as {@link #arrowView} and binds it with main split button\n     * attributes.\n     */\n    _createArrowView() {\n        const arrowView = new ButtonView();\n        const bind = arrowView.bindTemplate;\n        arrowView.icon = dropdownArrowIcon;\n        arrowView.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-splitbutton__arrow'\n                ],\n                'data-cke-tooltip-disabled': bind.to('isOn'),\n                'aria-haspopup': true,\n                'aria-expanded': bind.to('isOn', value => String(value))\n            }\n        });\n        arrowView.bind('isEnabled').to(this);\n        arrowView.bind('label').to(this);\n        arrowView.bind('tooltip').to(this);\n        arrowView.delegate('execute').to(this, 'open');\n        return arrowView;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/dropdown/utils\n */\nimport DropdownPanelView from './dropdownpanelview.js';\nimport DropdownView from './dropdownview.js';\nimport DropdownButtonView from './button/dropdownbuttonview.js';\nimport DropdownMenuRootListView from './menu/dropdownmenurootlistview.js';\nimport ToolbarView from '../toolbar/toolbarview.js';\nimport ListView from '../list/listview.js';\nimport ListItemView from '../list/listitemview.js';\nimport ListSeparatorView from '../list/listseparatorview.js';\nimport SplitButtonView from './button/splitbuttonview.js';\nimport SwitchButtonView from '../button/switchbuttonview.js';\nimport ViewCollection from '../viewcollection.js';\nimport clickOutsideHandler from '../bindings/clickoutsidehandler.js';\nimport { global, priorities, logWarning } from '@ckeditor/ckeditor5-utils';\nimport '../../theme/components/dropdown/toolbardropdown.css';\nimport '../../theme/components/dropdown/listdropdown.css';\nimport ListItemGroupView from '../list/listitemgroupview.js';\nimport ListItemButtonView from '../button/listitembuttonview.js';\n/**\n * A helper for creating dropdowns. It creates an instance of a {@link module:ui/dropdown/dropdownview~DropdownView dropdown},\n * with a {@link module:ui/dropdown/button/dropdownbutton~DropdownButton button},\n * {@link module:ui/dropdown/dropdownpanelview~DropdownPanelView panel} and all standard dropdown's behaviors.\n *\n * # Creating dropdowns\n *\n * By default, the default {@link module:ui/dropdown/button/dropdownbuttonview~DropdownButtonView} class is used as\n * definition of the button:\n *\n * ```ts\n * const dropdown = createDropdown( model );\n *\n * // Configure dropdown's button properties:\n * dropdown.buttonView.set( {\n * \tlabel: 'A dropdown',\n * \twithText: true\n * } );\n *\n * dropdown.render();\n *\n * // Will render a dropdown labeled \"A dropdown\" with an empty panel.\n * document.body.appendChild( dropdown.element );\n * ```\n *\n * You can also provide other button views (they need to implement the\n * {@link module:ui/dropdown/button/dropdownbutton~DropdownButton} interface). For instance, you can use\n * {@link module:ui/dropdown/button/splitbuttonview~SplitButtonView} to create a dropdown with a split button.\n *\n * ```ts\n * const dropdown = createDropdown( locale, SplitButtonView );\n *\n * // Configure dropdown's button properties:\n * dropdown.buttonView.set( {\n * \tlabel: 'A dropdown',\n * \twithText: true\n * } );\n *\n * dropdown.buttonView.on( 'execute', () => {\n * \t// Add the behavior of the \"action part\" of the split button.\n * \t// Split button consists of the \"action part\" and \"arrow part\".\n * \t// The arrow opens the dropdown while the action part can have some other behavior.\n * } );\n *\n * dropdown.render();\n *\n * // Will render a dropdown labeled \"A dropdown\" with an empty panel.\n * document.body.appendChild( dropdown.element );\n * ```\n *\n * # Adding content to the dropdown's panel\n *\n * The content of the panel can be inserted directly into the `dropdown.panelView.element`:\n *\n * ```ts\n * dropdown.panelView.element.textContent = 'Content of the panel';\n * ```\n *\n * However, most of the time you will want to add there either a {@link module:ui/list/listview~ListView list of options}\n * or a list of buttons (i.e. a {@link module:ui/toolbar/toolbarview~ToolbarView toolbar}).\n * To simplify the task, you can use, respectively, {@link module:ui/dropdown/utils~addListToDropdown} or\n * {@link module:ui/dropdown/utils~addToolbarToDropdown} utils.\n *\n * @param locale The locale instance.\n * @param ButtonClassOrInstance The dropdown button view class. Needs to implement the\n * @param behaviorOptions Attributes for the default behavior of the dropdown.\n *\n * {@link module:ui/dropdown/button/dropdownbutton~DropdownButton} interface.\n * @returns The dropdown view instance.\n */\nexport function createDropdown(locale, ButtonClassOrInstance = DropdownButtonView) {\n    const buttonView = typeof ButtonClassOrInstance == 'function' ? new ButtonClassOrInstance(locale) : ButtonClassOrInstance;\n    const panelView = new DropdownPanelView(locale);\n    const dropdownView = new DropdownView(locale, buttonView, panelView);\n    buttonView.bind('isEnabled').to(dropdownView);\n    if (buttonView instanceof SplitButtonView) {\n        buttonView.arrowView.bind('isOn').to(dropdownView, 'isOpen');\n    }\n    else {\n        buttonView.bind('isOn').to(dropdownView, 'isOpen');\n    }\n    addDefaultBehaviors(dropdownView);\n    return dropdownView;\n}\n/**\n * Adds a menu UI component to a dropdown and sets all common behaviors and interactions between the dropdown and the menu.\n *\n * Use this helper to create multi-level dropdown menus that are displayed in a toolbar.\n *\n * Internally, it creates an instance of {@link module:ui/dropdown/menu/dropdownmenurootlistview~DropdownMenuRootListView}.\n *\n * Example:\n *\n * ```ts\n * const definitions = [\n * \t{\n * \t\tid: 'menu_1',\n * \t\tmenu: 'Menu 1',\n * \t\tchildren: [\n * \t\t\t{\n * \t\t\t\tid: 'menu_1_a',\n * \t\t\t\tlabel: 'Item A'\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tid: 'menu_1_b',\n * \t\t\t\tlabel: 'Item B'\n * \t\t\t}\n * \t\t]\n * \t},\n * \t{\n * \t\tid: 'top_a',\n * \t\tlabel: 'Top Item A'\n * \t},\n * \t{\n * \t\tid: 'top_b',\n * \t\tlabel: 'Top Item B'\n * \t}\n * ];\n *\n * const dropdownView = createDropdown( editor.locale );\n *\n * addMenuToDropdown( dropdownView, editor.ui.view.body, definitions );\n * ```\n *\n * After using this helper, the `dropdown` will fire {@link module:ui/dropdown/dropdownview~DropdownViewEvent `execute`} event when\n * a nested menu button is pressed.\n *\n * The helper will make sure that the `dropdownMenuRootListView` is lazy loaded, i.e., the menu component structure will be initialized\n * and rendered only after the `dropdown` is opened for the first time.\n *\n * @param dropdownView A dropdown instance to which the menu component will be added.\n * @param body Body collection to which floating menu panels will be added.\n * @param definition The menu component definition.\n * @param options.ariaLabel Label used by assistive technologies to describe the top-level menu.\n */\nexport function addMenuToDropdown(dropdownView, body, definition, options = {}) {\n    dropdownView.menuView = new DropdownMenuRootListView(dropdownView.locale, body, definition);\n    dropdownView.focusTracker.add(dropdownView.menuView);\n    if (dropdownView.isOpen) {\n        addMenuToOpenDropdown(dropdownView, options);\n    }\n    else {\n        // Load the UI elements only after the dropdown is opened for the first time - lazy loading.\n        dropdownView.once('change:isOpen', () => {\n            addMenuToOpenDropdown(dropdownView, options);\n        }, { priority: 'highest' });\n    }\n}\nfunction addMenuToOpenDropdown(dropdownView, options) {\n    const dropdownMenuRootListView = dropdownView.menuView;\n    const t = dropdownView.locale.t;\n    dropdownMenuRootListView.delegate('menu:execute').to(dropdownView, 'execute');\n    dropdownMenuRootListView.listenTo(dropdownView, 'change:isOpen', (evt, name, isOpen) => {\n        if (!isOpen) {\n            dropdownMenuRootListView.closeMenus();\n        }\n    }, { priority: 'low' }); // Make sure this is fired after `focusDropdownButtonOnClose` behavior.\n    // When `dropdownMenuRootListView` is added as a `panelView` child, it becomes rendered (`panelView` is rendered at this point).\n    dropdownView.panelView.children.add(dropdownMenuRootListView);\n    // Nested menu panels are added to body collection, so they are not children of the `dropdownView` from DOM perspective.\n    // Add these panels to `dropdownView` focus tracker, so they are treated like part of the `dropdownView` for focus-related purposes.\n    for (const menu of dropdownMenuRootListView.menus) {\n        dropdownView.focusTracker.add(menu);\n    }\n    dropdownMenuRootListView.ariaLabel = options.ariaLabel || t('Dropdown menu');\n}\n/**\n * Adds an instance of {@link module:ui/toolbar/toolbarview~ToolbarView} to a dropdown.\n *\n * ```ts\n * const buttonsCreator = () => {\n * \tconst buttons = [];\n *\n * \t// Either create a new ButtonView instance or create existing.\n * \tbuttons.push( new ButtonView() );\n * \tbuttons.push( editor.ui.componentFactory.create( 'someButton' ) );\n * };\n *\n * const dropdown = createDropdown( locale );\n *\n * addToolbarToDropdown( dropdown, buttonsCreator, { isVertical: true } );\n *\n * // Will render a vertical button dropdown labeled \"A button dropdown\"\n * // with a button group in the panel containing two buttons.\n * // Buttons inside the dropdown will be created on first dropdown panel open.\n * dropdown.render()\n * document.body.appendChild( dropdown.element );\n * ```\n *\n * **Note:** To improve the accessibility, you can tell the dropdown to focus the first active button of the toolbar when the dropdown\n * {@link module:ui/dropdown/dropdownview~DropdownView#isOpen gets open}. See the documentation of `options` to learn more.\n *\n * **Note:** Toolbar view will be created on first open of the dropdown.\n *\n * See {@link module:ui/dropdown/utils~createDropdown} and {@link module:ui/toolbar/toolbarview~ToolbarView}.\n *\n * @param dropdownView A dropdown instance to which `ToolbarView` will be added.\n * @param options.enableActiveItemFocusOnDropdownOpen When set `true`, the focus will automatically move to the first\n * active {@link module:ui/toolbar/toolbarview~ToolbarView#items item} of the toolbar upon\n * {@link module:ui/dropdown/dropdownview~DropdownView#isOpen opening} the dropdown. Active items are those with the `isOn` property set\n * `true` (for instance {@link module:ui/button/buttonview~ButtonView buttons}). If no active items is found, the toolbar will be focused\n * as a whole resulting in the focus moving to its first focusable item (default behavior of\n * {@link module:ui/dropdown/dropdownview~DropdownView}).\n * @param options.ariaLabel Label used by assistive technologies to describe toolbar element.\n * @param options.maxWidth The maximum width of the toolbar element.\n * Details: {@link module:ui/toolbar/toolbarview~ToolbarView#maxWidth}.\n * @param options.class An additional CSS class added to the toolbar element.\n * @param options.isCompact When set true, makes the toolbar look compact with toolbar element.\n * @param options.isVertical Controls the orientation of toolbar items.\n */\nexport function addToolbarToDropdown(dropdownView, buttonsOrCallback, options = {}) {\n    dropdownView.extendTemplate({\n        attributes: {\n            class: ['ck-toolbar-dropdown']\n        }\n    });\n    if (dropdownView.isOpen) {\n        addToolbarToOpenDropdown(dropdownView, buttonsOrCallback, options);\n    }\n    else {\n        dropdownView.once('change:isOpen', () => addToolbarToOpenDropdown(dropdownView, buttonsOrCallback, options), { priority: 'highest' });\n    }\n    if (options.enableActiveItemFocusOnDropdownOpen) {\n        // Accessibility: Focus the first active button in the toolbar when the dropdown gets open.\n        focusChildOnDropdownOpen(dropdownView, () => dropdownView.toolbarView.items.find((item) => item.isOn));\n    }\n}\n/**\n * Adds an instance of {@link module:ui/toolbar/toolbarview~ToolbarView} to a dropdown.\n */\nfunction addToolbarToOpenDropdown(dropdownView, buttonsOrCallback, options) {\n    const locale = dropdownView.locale;\n    const t = locale.t;\n    const toolbarView = dropdownView.toolbarView = new ToolbarView(locale);\n    const buttons = typeof buttonsOrCallback == 'function' ? buttonsOrCallback() : buttonsOrCallback;\n    toolbarView.ariaLabel = options.ariaLabel || t('Dropdown toolbar');\n    if (options.maxWidth) {\n        toolbarView.maxWidth = options.maxWidth;\n    }\n    if (options.class) {\n        toolbarView.class = options.class;\n    }\n    if (options.isCompact) {\n        toolbarView.isCompact = options.isCompact;\n    }\n    if (options.isVertical) {\n        toolbarView.isVertical = true;\n    }\n    if (buttons instanceof ViewCollection) {\n        toolbarView.items.bindTo(buttons).using(item => item);\n    }\n    else {\n        toolbarView.items.addMany(buttons);\n    }\n    dropdownView.panelView.children.add(toolbarView);\n    dropdownView.focusTracker.add(toolbarView);\n    toolbarView.items.delegate('execute').to(dropdownView);\n}\n/**\n * Adds an instance of {@link module:ui/list/listview~ListView} to a dropdown.\n *\n * ```ts\n * const items = new Collection<ListDropdownItemDefinition>();\n *\n * items.add( {\n * \ttype: 'button',\n * \tmodel: new Model( {\n * \t\twithText: true,\n * \t\tlabel: 'First item',\n * \t\tlabelStyle: 'color: red'\n * \t} )\n * } );\n *\n * items.add( {\n * \t type: 'button',\n * \t model: new Model( {\n * \t\twithText: true,\n * \t\tlabel: 'Second item',\n * \t\tlabelStyle: 'color: green',\n * \t\tclass: 'foo'\n * \t} )\n * } );\n *\n * const dropdown = createDropdown( locale );\n *\n * addListToDropdown( dropdown, items );\n *\n * // Will render a dropdown with a list in the panel containing two items.\n * dropdown.render()\n * document.body.appendChild( dropdown.element );\n * ```\n *\n * The `items` collection passed to this methods controls the presence and attributes of respective\n * {@link module:ui/list/listitemview~ListItemView list items}.\n *\n * **Note:** To improve the accessibility, when a list is added to the dropdown using this helper the dropdown will automatically attempt\n * to focus the first active item (a host to a {@link module:ui/button/buttonview~ButtonView} with\n * {@link module:ui/button/buttonview~ButtonView#isOn} set `true`) or the very first item when none are active.\n *\n * **Note:** List view will be created on first open of the dropdown.\n *\n * See {@link module:ui/dropdown/utils~createDropdown} and {@link module:list/list~List}.\n *\n * @param dropdownView A dropdown instance to which `ListVIew` will be added.\n * @param itemsOrCallback A collection of the list item definitions or a callback returning a list item definitions to populate the list.\n * @param options.ariaLabel Label used by assistive technologies to describe list element.\n * @param options.role Will be reflected by the `role` DOM attribute in `ListVIew` and used by assistive technologies.\n */\nexport function addListToDropdown(dropdownView, itemsOrCallback, options = {}) {\n    if (dropdownView.isOpen) {\n        addListToOpenDropdown(dropdownView, itemsOrCallback, options);\n    }\n    else {\n        dropdownView.once('change:isOpen', () => addListToOpenDropdown(dropdownView, itemsOrCallback, options), { priority: 'highest' });\n    }\n    // Accessibility: Focus the first active button in the list when the dropdown gets open.\n    focusChildOnDropdownOpen(dropdownView, () => dropdownView.listView.items.find(item => {\n        if (item instanceof ListItemView) {\n            return item.children.first.isOn;\n        }\n        return false;\n    }));\n}\n/**\n * Adds an instance of {@link module:ui/list/listview~ListView} to a dropdown.\n */\nfunction addListToOpenDropdown(dropdownView, itemsOrCallback, options) {\n    const locale = dropdownView.locale;\n    const listView = dropdownView.listView = new ListView(locale);\n    const items = typeof itemsOrCallback == 'function' ? itemsOrCallback() : itemsOrCallback;\n    listView.ariaLabel = options.ariaLabel;\n    listView.role = options.role;\n    bindViewCollectionItemsToDefinitions(dropdownView, listView.items, items, locale);\n    dropdownView.panelView.children.add(listView);\n    listView.items.delegate('execute').to(dropdownView);\n}\n/**\n * A helper to be used on an existing {@link module:ui/dropdown/dropdownview~DropdownView} that focuses\n * a specific child in DOM when the dropdown {@link module:ui/dropdown/dropdownview~DropdownView#isOpen gets open}.\n *\n * @param dropdownView A dropdown instance to which the focus behavior will be added.\n * @param childSelectorCallback A callback executed when the dropdown gets open. It should return a {@link module:ui/view~View}\n * instance (child of {@link module:ui/dropdown/dropdownview~DropdownView#panelView}) that will get focused or a falsy value.\n * If falsy value is returned, a default behavior of the dropdown will engage focusing the first focusable child in\n * the {@link module:ui/dropdown/dropdownview~DropdownView#panelView}.\n */\nexport function focusChildOnDropdownOpen(dropdownView, childSelectorCallback) {\n    dropdownView.on('change:isOpen', () => {\n        if (!dropdownView.isOpen) {\n            return;\n        }\n        const childToFocus = childSelectorCallback();\n        if (!childToFocus) {\n            return;\n        }\n        if (typeof childToFocus.focus === 'function') {\n            childToFocus.focus();\n        }\n        else {\n            /**\n             * The child view of a {@link module:ui/dropdown/dropdownview~DropdownView dropdown} is missing the `focus()` method\n             * and could not be focused when the dropdown got {@link module:ui/dropdown/dropdownview~DropdownView#isOpen open}.\n             *\n             * Making the content of a dropdown focusable in this case greatly improves the accessibility. Please make the view instance\n             * implements the {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable focusable interface} for the best user\n             * experience.\n             *\n             * @error ui-dropdown-focus-child-on-open-child-missing-focus\n             * @param {module:ui/view~View} view\n             */\n            logWarning('ui-dropdown-focus-child-on-open-child-missing-focus', { view: childToFocus });\n        }\n        // * Let the panel show up first (do not focus an invisible element).\n        // * Execute after focusDropdownPanelOnOpen(). See focusDropdownPanelOnOpen() to learn more.\n    }, { priority: priorities.low - 10 });\n}\n/**\n * Add a set of default behaviors to dropdown view.\n */\nfunction addDefaultBehaviors(dropdownView) {\n    closeDropdownOnClickOutside(dropdownView);\n    closeDropdownOnExecute(dropdownView);\n    closeDropdownOnBlur(dropdownView);\n    focusDropdownContentsOnArrows(dropdownView);\n    focusDropdownButtonOnClose(dropdownView);\n    focusDropdownPanelOnOpen(dropdownView);\n}\n/**\n * Adds a behavior to a dropdownView that closes opened dropdown when user clicks outside the dropdown.\n */\nfunction closeDropdownOnClickOutside(dropdownView) {\n    clickOutsideHandler({\n        emitter: dropdownView,\n        activator: () => dropdownView.isRendered && dropdownView.isOpen,\n        callback: () => {\n            dropdownView.isOpen = false;\n        },\n        contextElements: () => [\n            dropdownView.element,\n            // Include all elements connected to the dropdown's focus tracker, but exclude those that are direct children\n            // of DropdownView#element. They would be identified as descendants of #element anyway upon clicking and would\n            // not contribute to the logic.\n            ...getFocusTrackerTreeElements(dropdownView.focusTracker).filter(element => !dropdownView.element.contains(element))\n        ]\n    });\n}\n/**\n * Returns all DOM elements connected to a DropdownView's focus tracker, either directly (same DOM sub-tree)\n * or indirectly (external views registered in the focus tracker).\n */\nfunction getFocusTrackerTreeElements(focusTracker) {\n    return [\n        ...focusTracker.elements,\n        ...focusTracker.externalViews.flatMap(view => getFocusTrackerTreeElements(view.focusTracker))\n    ];\n}\n/**\n * Adds a behavior to a dropdownView that closes the dropdown view on \"execute\" event.\n */\nfunction closeDropdownOnExecute(dropdownView) {\n    // Close the dropdown when one of the list items has been executed.\n    dropdownView.on('execute', evt => {\n        // Toggling a switch button view should not close the dropdown.\n        if (evt.source instanceof SwitchButtonView) {\n            return;\n        }\n        dropdownView.isOpen = false;\n    });\n}\n/**\n * Adds a behavior to a dropdown view that closes opened dropdown when it loses focus.\n */\nfunction closeDropdownOnBlur(dropdownView) {\n    dropdownView.focusTracker.on('change:isFocused', (evt, name, isFocused) => {\n        if (isFocused || !dropdownView.isOpen) {\n            return;\n        }\n        dropdownView.isOpen = false;\n    });\n}\n/**\n * Adds a behavior to a dropdownView that focuses the dropdown's panel view contents on keystrokes.\n */\nfunction focusDropdownContentsOnArrows(dropdownView) {\n    // If the dropdown panel is already open, the arrow down key should focus the first child of the #panelView.\n    dropdownView.keystrokes.set('arrowdown', (data, cancel) => {\n        if (dropdownView.isOpen) {\n            dropdownView.panelView.focus();\n            cancel();\n        }\n    });\n    // If the dropdown panel is already open, the arrow up key should focus the last child of the #panelView.\n    dropdownView.keystrokes.set('arrowup', (data, cancel) => {\n        if (dropdownView.isOpen) {\n            dropdownView.panelView.focusLast();\n            cancel();\n        }\n    });\n}\n/**\n * Adds a behavior that focuses the #buttonView when the dropdown was closed but focus was within the #panelView element.\n * This makes sure the focus is never lost.\n */\nfunction focusDropdownButtonOnClose(dropdownView) {\n    dropdownView.on('change:isOpen', (evt, name, isOpen) => {\n        if (isOpen) {\n            return;\n        }\n        const elements = dropdownView.focusTracker.elements;\n        // If the dropdown was closed, move the focus back to the button (#12125).\n        // Don't touch the focus, if it moved somewhere else (e.g. moved to the editing root on #execute) (#12178).\n        // Note: Don't use the state of the DropdownView#focusTracker here. It fires #blur with the timeout.\n        if (elements.some(element => element.contains(global.document.activeElement))) {\n            dropdownView.buttonView.focus();\n        }\n    });\n}\n/**\n * Adds a behavior that focuses the #panelView when dropdown gets open (accessibility).\n */\nfunction focusDropdownPanelOnOpen(dropdownView) {\n    dropdownView.on('change:isOpen', (evt, name, isOpen) => {\n        if (!isOpen) {\n            return;\n        }\n        // Focus the first item in the dropdown when the dropdown opened.\n        dropdownView.panelView.focus();\n        // * Let the panel show up first (do not focus an invisible element).\n        // * Also, execute before focusChildOnDropdownOpen() to make sure this helper does not break the\n        //   focus of a specific child by kicking in too late and resetting the focus in the panel.\n    }, { priority: 'low' });\n}\n/**\n * This helper populates a dropdown list with items and groups according to the\n * collection of item definitions. A permanent binding is created in this process allowing\n * dynamic management of the dropdown list content.\n *\n * @param dropdownView\n * @param listItems\n * @param definitions\n * @param locale\n */\nfunction bindViewCollectionItemsToDefinitions(dropdownView, listItems, definitions, locale) {\n    // List item checkboxes have a reserved space for the check icon, so we need to know if there are any checkboxes in the list\n    // to adjust the layout accordingly. It'd look weird if the items on the list were not aligned horizontally.\n    //\n    // Possible theoretical performance problem if many items are added one by one, as this will be called for each item.\n    listItems.on('change', () => {\n        // Filter-map. Check all items, leave only these that have buttons and return the buttons.\n        const listItemButtons = [...listItems].reduce((acc, item) => {\n            if (item instanceof ListItemView && item.children.first instanceof ListItemButtonView) {\n                acc.push(item.children.first);\n            }\n            return acc;\n        }, []);\n        const hasAnyCheckboxOnList = listItemButtons.some(button => button.isToggleable);\n        listItemButtons.forEach(item => {\n            item.hasCheckSpace = hasAnyCheckboxOnList;\n        });\n    });\n    listItems.bindTo(definitions).using(def => {\n        if (def.type === 'separator') {\n            return new ListSeparatorView(locale);\n        }\n        else if (def.type === 'group') {\n            const groupView = new ListItemGroupView(locale);\n            groupView.set({ label: def.label });\n            bindViewCollectionItemsToDefinitions(dropdownView, groupView.items, def.items, locale);\n            groupView.items.delegate('execute').to(dropdownView);\n            return groupView;\n        }\n        else if (def.type === 'button' || def.type === 'switchbutton') {\n            const isToggleable = def.model.role === 'menuitemcheckbox' || def.model.role === 'menuitemradio';\n            const listItemView = new ListItemView(locale);\n            let buttonView;\n            if (def.type === 'button') {\n                buttonView = new ListItemButtonView(locale);\n                buttonView.set({\n                    isToggleable\n                });\n            }\n            else {\n                buttonView = new SwitchButtonView(locale);\n            }\n            // Bind all model properties to the button view.\n            buttonView.bind(...Object.keys(def.model)).to(def.model);\n            buttonView.delegate('execute').to(listItemView);\n            listItemView.children.add(buttonView);\n            return listItemView;\n        }\n        return null;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/labeledfield/utils\n */\nimport InputTextView from '../inputtext/inputtextview.js';\nimport InputNumberView from '../inputnumber/inputnumberview.js';\nimport TextareaView from '../textarea/textareaview.js';\nimport { createDropdown } from '../dropdown/utils.js';\n/**\n * A helper for creating labeled inputs.\n *\n * It creates an instance of a {@link module:ui/inputtext/inputtextview~InputTextView input text} that is\n * logically related to a {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView labeled view} in DOM.\n *\n * The helper does the following:\n *\n * * It sets input's `id` and `ariaDescribedById` attributes.\n * * It binds input's `isReadOnly` to the labeled view.\n * * It binds input's `hasError` to the labeled view.\n * * It enables a logic that cleans up the error when user starts typing in the input.\n *\n * Usage:\n *\n * ```ts\n * const labeledInputView = new LabeledFieldView( locale, createLabeledInputText );\n * console.log( labeledInputView.fieldView ); // A text input instance.\n * ```\n *\n * @param labeledFieldView The instance of the labeled field view.\n * @param viewUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#labelView labeled view's label} and the input.\n * @param statusUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#statusView labeled view's status} and the input.\n * @returns The input text view instance.\n */\nconst createLabeledInputText = (labeledFieldView, viewUid, statusUid) => {\n    const inputView = new InputTextView(labeledFieldView.locale);\n    inputView.set({\n        id: viewUid,\n        ariaDescribedById: statusUid\n    });\n    inputView.bind('isReadOnly').to(labeledFieldView, 'isEnabled', value => !value);\n    inputView.bind('hasError').to(labeledFieldView, 'errorText', value => !!value);\n    inputView.on('input', () => {\n        // UX: Make the error text disappear and disable the error indicator as the user\n        // starts fixing the errors.\n        labeledFieldView.errorText = null;\n    });\n    labeledFieldView.bind('isEmpty', 'isFocused', 'placeholder').to(inputView);\n    return inputView;\n};\n/**\n * A helper for creating labeled number inputs.\n *\n * It creates an instance of a {@link module:ui/inputnumber/inputnumberview~InputNumberView input number} that is\n * logically related to a {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView labeled view} in DOM.\n *\n * The helper does the following:\n *\n * * It sets input's `id` and `ariaDescribedById` attributes.\n * * It binds input's `isReadOnly` to the labeled view.\n * * It binds input's `hasError` to the labeled view.\n * * It enables a logic that cleans up the error when user starts typing in the input.\n *\n * Usage:\n *\n * ```ts\n * const labeledInputView = new LabeledFieldView( locale, createLabeledInputNumber );\n * console.log( labeledInputView.fieldView ); // A number input instance.\n * ```\n *\n * @param labeledFieldView The instance of the labeled field view.\n * @param viewUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#labelView labeled view's label} and the input.\n * @param statusUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#statusView labeled view's status} and the input.\n * @returns The input number view instance.\n */\nconst createLabeledInputNumber = (labeledFieldView, viewUid, statusUid) => {\n    const inputView = new InputNumberView(labeledFieldView.locale);\n    inputView.set({\n        id: viewUid,\n        ariaDescribedById: statusUid,\n        inputMode: 'numeric'\n    });\n    inputView.bind('isReadOnly').to(labeledFieldView, 'isEnabled', value => !value);\n    inputView.bind('hasError').to(labeledFieldView, 'errorText', value => !!value);\n    inputView.on('input', () => {\n        // UX: Make the error text disappear and disable the error indicator as the user\n        // starts fixing the errors.\n        labeledFieldView.errorText = null;\n    });\n    labeledFieldView.bind('isEmpty', 'isFocused', 'placeholder').to(inputView);\n    return inputView;\n};\n/**\n * A helper for creating labeled textarea.\n *\n * It creates an instance of a {@link module:ui/textarea/textareaview~TextareaView textarea} that is\n * logically related to a {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView labeled view} in DOM.\n *\n * The helper does the following:\n *\n * * It sets textarea's `id` and `ariaDescribedById` attributes.\n * * It binds textarea's `isReadOnly` to the labeled view.\n * * It binds textarea's `hasError` to the labeled view.\n * * It enables a logic that cleans up the error when user starts typing in the textarea.\n *\n * Usage:\n *\n * ```ts\n * const labeledTextarea = new LabeledFieldView( locale, createLabeledTextarea );\n * console.log( labeledTextarea.fieldView ); // A textarea instance.\n * ```\n *\n * @param labeledFieldView The instance of the labeled field view.\n * @param viewUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#labelView labeled view's label} and the textarea.\n * @param statusUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#statusView labeled view's status} and the textarea.\n * @returns The textarea view instance.\n */\nconst createLabeledTextarea = (labeledFieldView, viewUid, statusUid) => {\n    const textareaView = new TextareaView(labeledFieldView.locale);\n    textareaView.set({\n        id: viewUid,\n        ariaDescribedById: statusUid\n    });\n    textareaView.bind('isReadOnly').to(labeledFieldView, 'isEnabled', value => !value);\n    textareaView.bind('hasError').to(labeledFieldView, 'errorText', value => !!value);\n    textareaView.on('input', () => {\n        // UX: Make the error text disappear and disable the error indicator as the user\n        // starts fixing the errors.\n        labeledFieldView.errorText = null;\n    });\n    labeledFieldView.bind('isEmpty', 'isFocused', 'placeholder').to(textareaView);\n    return textareaView;\n};\n/**\n * A helper for creating labeled dropdowns.\n *\n * It creates an instance of a {@link module:ui/dropdown/dropdownview~DropdownView dropdown} that is\n * logically related to a {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView labeled field view}.\n *\n * The helper does the following:\n *\n * * It sets dropdown's `id` and `ariaDescribedById` attributes.\n * * It binds input's `isEnabled` to the labeled view.\n *\n * Usage:\n *\n * ```ts\n * const labeledInputView = new LabeledFieldView( locale, createLabeledDropdown );\n * console.log( labeledInputView.fieldView ); // A dropdown instance.\n * ```\n *\n * @param labeledFieldView The instance of the labeled field view.\n * @param viewUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#labelView labeled view label} and the dropdown.\n * @param statusUid A UID string that allows DOM logical connection between the\n * {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView#statusView labeled view status} and the dropdown.\n * @returns The dropdown view instance.\n */\nconst createLabeledDropdown = (labeledFieldView, viewUid, statusUid) => {\n    const dropdownView = createDropdown(labeledFieldView.locale);\n    dropdownView.set({\n        id: viewUid,\n        ariaDescribedById: statusUid\n    });\n    dropdownView.bind('isEnabled').to(labeledFieldView);\n    return dropdownView;\n};\nexport { createLabeledInputNumber, createLabeledInputText, createLabeledTextarea, createLabeledDropdown };\n", "// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport const clamp = (number, min = 0, max = 1) => {\n    return number > max ? max : number < min ? min : number;\n};\nexport const round = (number, digits = 0, base = Math.pow(10, digits)) => {\n    return Math.round(base * number) / base;\n};\n//# sourceMappingURL=math.js.map", "import { round } from './math.js';\n/**\n * Valid CSS <angle> units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nconst angleUnits = {\n    grad: 360 / 400,\n    turn: 360,\n    rad: 360 / (Math.PI * 2)\n};\nexport const hexToHsva = (hex) => rgbaToHsva(hexToRgba(hex));\nexport const hexToRgba = (hex) => {\n    if (hex[0] === '#')\n        hex = hex.substring(1);\n    if (hex.length < 6) {\n        return {\n            r: parseInt(hex[0] + hex[0], 16),\n            g: parseInt(hex[1] + hex[1], 16),\n            b: parseInt(hex[2] + hex[2], 16),\n            a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1\n        };\n    }\n    return {\n        r: parseInt(hex.substring(0, 2), 16),\n        g: parseInt(hex.substring(2, 4), 16),\n        b: parseInt(hex.substring(4, 6), 16),\n        a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1\n    };\n};\nexport const parseHue = (value, unit = 'deg') => {\n    return Number(value) * (angleUnits[unit] || 1);\n};\nexport const hslaStringToHsva = (hslString) => {\n    const matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n    const match = matcher.exec(hslString);\n    if (!match)\n        return { h: 0, s: 0, v: 0, a: 1 };\n    return hslaToHsva({\n        h: parseHue(match[1], match[2]),\n        s: Number(match[3]),\n        l: Number(match[4]),\n        a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1)\n    });\n};\nexport const hslStringToHsva = hslaStringToHsva;\nexport const hslaToHsva = ({ h, s, l, a }) => {\n    s *= (l < 50 ? l : 100 - l) / 100;\n    return {\n        h: h,\n        s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0,\n        v: l + s,\n        a\n    };\n};\nexport const hsvaToHex = (hsva) => rgbaToHex(hsvaToRgba(hsva));\nexport const hsvaToHsla = ({ h, s, v, a }) => {\n    const hh = ((200 - s) * v) / 100;\n    return {\n        h: round(h),\n        s: round(hh > 0 && hh < 200 ? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100 : 0),\n        l: round(hh / 2),\n        a: round(a, 2)\n    };\n};\nexport const hsvaToHsvString = (hsva) => {\n    const { h, s, v } = roundHsva(hsva);\n    return `hsv(${h}, ${s}%, ${v}%)`;\n};\nexport const hsvaToHsvaString = (hsva) => {\n    const { h, s, v, a } = roundHsva(hsva);\n    return `hsva(${h}, ${s}%, ${v}%, ${a})`;\n};\nexport const hsvaToHslString = (hsva) => {\n    const { h, s, l } = hsvaToHsla(hsva);\n    return `hsl(${h}, ${s}%, ${l}%)`;\n};\nexport const hsvaToHslaString = (hsva) => {\n    const { h, s, l, a } = hsvaToHsla(hsva);\n    return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n};\nexport const hsvaToRgba = ({ h, s, v, a }) => {\n    h = (h / 360) * 6;\n    s = s / 100;\n    v = v / 100;\n    const hh = Math.floor(h), b = v * (1 - s), c = v * (1 - (h - hh) * s), d = v * (1 - (1 - h + hh) * s), module = hh % 6;\n    return {\n        r: round([v, c, b, b, d, v][module] * 255),\n        g: round([d, v, v, c, b, b][module] * 255),\n        b: round([b, b, d, v, v, c][module] * 255),\n        a: round(a, 2)\n    };\n};\nexport const hsvaToRgbString = (hsva) => {\n    const { r, g, b } = hsvaToRgba(hsva);\n    return `rgb(${r}, ${g}, ${b})`;\n};\nexport const hsvaToRgbaString = (hsva) => {\n    const { r, g, b, a } = hsvaToRgba(hsva);\n    return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\nexport const hsvaStringToHsva = (hsvString) => {\n    const matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n    const match = matcher.exec(hsvString);\n    if (!match)\n        return { h: 0, s: 0, v: 0, a: 1 };\n    return roundHsva({\n        h: parseHue(match[1], match[2]),\n        s: Number(match[3]),\n        v: Number(match[4]),\n        a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1)\n    });\n};\nexport const hsvStringToHsva = hsvaStringToHsva;\nexport const rgbaStringToHsva = (rgbaString) => {\n    const matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n    const match = matcher.exec(rgbaString);\n    if (!match)\n        return { h: 0, s: 0, v: 0, a: 1 };\n    return rgbaToHsva({\n        r: Number(match[1]) / (match[2] ? 100 / 255 : 1),\n        g: Number(match[3]) / (match[4] ? 100 / 255 : 1),\n        b: Number(match[5]) / (match[6] ? 100 / 255 : 1),\n        a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1)\n    });\n};\nexport const rgbStringToHsva = rgbaStringToHsva;\nconst format = (number) => {\n    const hex = number.toString(16);\n    return hex.length < 2 ? '0' + hex : hex;\n};\nexport const rgbaToHex = ({ r, g, b, a }) => {\n    const alphaHex = a < 1 ? format(round(a * 255)) : '';\n    return '#' + format(r) + format(g) + format(b) + alphaHex;\n};\nexport const rgbaToHsva = ({ r, g, b, a }) => {\n    const max = Math.max(r, g, b);\n    const delta = max - Math.min(r, g, b);\n    // prettier-ignore\n    const hh = delta\n        ? max === r\n            ? (g - b) / delta\n            : max === g\n                ? 2 + (b - r) / delta\n                : 4 + (r - g) / delta\n        : 0;\n    return {\n        h: round(60 * (hh < 0 ? hh + 6 : hh)),\n        s: round(max ? (delta / max) * 100 : 0),\n        v: round((max / 255) * 100),\n        a\n    };\n};\nexport const roundHsva = (hsva) => ({\n    h: round(hsva.h),\n    s: round(hsva.s),\n    v: round(hsva.v),\n    a: round(hsva.a, 2)\n});\nexport const rgbaToRgb = ({ r, g, b }) => ({ r, g, b });\nexport const hslaToHsl = ({ h, s, l }) => ({ h, s, l });\nexport const hsvaToHsv = (hsva) => {\n    const { h, s, v } = roundHsva(hsva);\n    return { h, s, v };\n};\n//# sourceMappingURL=convert.js.map", "import { hexToRgba } from './convert.js';\nexport const equalColorObjects = (first, second) => {\n    if (first === second)\n        return true;\n    for (const prop in first) {\n        // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n        // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n        // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n        // we must cast our object to unknown (as RGB demands `r` be a key, while `Record<string, x>` does not care if\n        // there is or not), and then as a type TS can iterate over.\n        if (first[prop] !==\n            second[prop])\n            return false;\n    }\n    return true;\n};\nexport const equalColorString = (first, second) => {\n    return first.replace(/\\s/g, '') === second.replace(/\\s/g, '');\n};\nexport const equalHex = (first, second) => {\n    if (first.toLowerCase() === second.toLowerCase())\n        return true;\n    // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n    return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\n//# sourceMappingURL=compare.js.map", "const cache = {};\nexport const tpl = (html) => {\n    let template = cache[html];\n    if (!template) {\n        template = document.createElement('template');\n        template.innerHTML = html;\n        cache[html] = template;\n    }\n    return template;\n};\nexport const fire = (target, type, detail) => {\n    target.dispatchEvent(new CustomEvent(type, {\n        bubbles: true,\n        detail\n    }));\n};\n//# sourceMappingURL=dom.js.map", "import { fire, tpl } from '../utils/dom.js';\nimport { clamp } from '../utils/math.js';\nlet hasTouched = false;\n// Check if an event was triggered by touch\nconst isTouch = (e) => 'touches' in e;\n// Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n// If we detected a touch interaction before, we prefer reacting to touch events only.\nconst isValid = (event) => {\n    if (hasTouched && !isTouch(event))\n        return false;\n    if (!hasTouched)\n        hasTouched = isTouch(event);\n    return true;\n};\nconst pointerMove = (target, event) => {\n    const pointer = isTouch(event) ? event.touches[0] : event;\n    const rect = target.el.getBoundingClientRect();\n    fire(target.el, 'move', target.getMove({\n        x: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\n        y: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height)\n    }));\n};\nconst keyMove = (target, event) => {\n    // We use `keyCode` instead of `key` to reduce the size of the library.\n    const keyCode = event.keyCode;\n    // Ignore all keys except arrow ones, Page Up, Page Down, Home and End.\n    if (keyCode > 40 || (target.xy && keyCode < 37) || keyCode < 33)\n        return;\n    // Do not scroll page by keys when color picker element has focus.\n    event.preventDefault();\n    // Send relative offset to the parent component.\n    fire(target.el, 'move', target.getMove({\n        x: keyCode === 39 // Arrow Right\n            ? 0.01\n            : keyCode === 37 // Arrow Left\n                ? -0.01\n                : keyCode === 34 // Page Down\n                    ? 0.05\n                    : keyCode === 33 // Page Up\n                        ? -0.05\n                        : keyCode === 35 // End\n                            ? 1\n                            : keyCode === 36 // Home\n                                ? -1\n                                : 0,\n        y: keyCode === 40 // Arrow down\n            ? 0.01\n            : keyCode === 38 // Arrow Up\n                ? -0.01\n                : 0\n    }, true));\n};\nexport class Slider {\n    constructor(root, part, aria, xy) {\n        const template = tpl(`<div role=\"slider\" tabindex=\"0\" part=\"${part}\" ${aria}><div part=\"${part}-pointer\"></div></div>`);\n        root.appendChild(template.content.cloneNode(true));\n        const el = root.querySelector(`[part=${part}]`);\n        el.addEventListener('mousedown', this);\n        el.addEventListener('touchstart', this);\n        el.addEventListener('keydown', this);\n        this.el = el;\n        this.xy = xy;\n        this.nodes = [el.firstChild, el];\n    }\n    set dragging(state) {\n        const toggleEvent = state ? document.addEventListener : document.removeEventListener;\n        toggleEvent(hasTouched ? 'touchmove' : 'mousemove', this);\n        toggleEvent(hasTouched ? 'touchend' : 'mouseup', this);\n    }\n    handleEvent(event) {\n        switch (event.type) {\n            case 'mousedown':\n            case 'touchstart':\n                event.preventDefault();\n                // event.button is 0 in mousedown for left button activation\n                if (!isValid(event) || (!hasTouched && event.button != 0))\n                    return;\n                this.el.focus();\n                pointerMove(this, event);\n                this.dragging = true;\n                break;\n            case 'mousemove':\n            case 'touchmove':\n                event.preventDefault();\n                pointerMove(this, event);\n                break;\n            case 'mouseup':\n            case 'touchend':\n                this.dragging = false;\n                break;\n            case 'keydown':\n                keyMove(this, event);\n                break;\n        }\n    }\n    style(styles) {\n        styles.forEach((style, i) => {\n            for (const p in style) {\n                this.nodes[i].style.setProperty(p, style[p]);\n            }\n        });\n    }\n}\n//# sourceMappingURL=slider.js.map", "import { Slider } from './slider.js';\nimport { hsvaToHslString } from '../utils/convert.js';\nimport { clamp, round } from '../utils/math.js';\nexport class Hue extends Slider {\n    constructor(root) {\n        super(root, 'hue', 'aria-label=\"Hue\" aria-valuemin=\"0\" aria-valuemax=\"360\"', false);\n    }\n    update({ h }) {\n        this.h = h;\n        this.style([\n            {\n                left: `${(h / 360) * 100}%`,\n                color: hsvaToHslString({ h, s: 100, v: 100, a: 1 })\n            }\n        ]);\n        this.el.setAttribute('aria-valuenow', `${round(h)}`);\n    }\n    getMove(offset, key) {\n        // Hue measured in degrees of the color circle ranging from 0 to 360\n        return { h: key ? clamp(this.h + offset.x * 360, 0, 360) : 360 * offset.x };\n    }\n}\n//# sourceMappingURL=hue.js.map", "import { Slider } from './slider.js';\nimport { hsvaToHslString } from '../utils/convert.js';\nimport { clamp, round } from '../utils/math.js';\nexport class Saturation extends Slider {\n    constructor(root) {\n        super(root, 'saturation', 'aria-label=\"Color\"', true);\n    }\n    update(hsva) {\n        this.hsva = hsva;\n        this.style([\n            {\n                top: `${100 - hsva.v}%`,\n                left: `${hsva.s}%`,\n                color: hsvaToHslString(hsva)\n            },\n            {\n                'background-color': hsvaToHslString({ h: hsva.h, s: 100, v: 100, a: 1 })\n            }\n        ]);\n        this.el.setAttribute('aria-valuetext', `Saturation ${round(hsva.s)}%, Brightness ${round(hsva.v)}%`);\n    }\n    getMove(offset, key) {\n        // Saturation and brightness always fit into [0, 100] range\n        return {\n            s: key ? clamp(this.hsva.s + offset.x * 100, 0, 100) : offset.x * 100,\n            v: key ? clamp(this.hsva.v - offset.y * 100, 0, 100) : Math.round(100 - offset.y * 100)\n        };\n    }\n}\n//# sourceMappingURL=saturation.js.map", "export default `:host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;display:flex;place-content:center center;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{content:\"\";width:100%;height:100%;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}`;\n//# sourceMappingURL=color-picker.js.map", "import { equalColorObjects } from '../utils/compare.js';\nimport { fire, tpl } from '../utils/dom.js';\nimport { Hue } from './hue.js';\nimport { Saturation } from './saturation.js';\nimport css from '../styles/color-picker.js';\nimport hueCss from '../styles/hue.js';\nimport saturationCss from '../styles/saturation.js';\nconst $isSame = Symbol('same');\nconst $color = Symbol('color');\nconst $hsva = Symbol('hsva');\nconst $update = Symbol('update');\nconst $parts = Symbol('parts');\nexport const $css = Symbol('css');\nexport const $sliders = Symbol('sliders');\nexport class ColorPicker extends HTMLElement {\n    static get observedAttributes() {\n        return ['color'];\n    }\n    get [$css]() {\n        return [css, hueCss, saturationCss];\n    }\n    get [$sliders]() {\n        return [Saturation, Hue];\n    }\n    get color() {\n        return this[$color];\n    }\n    set color(newColor) {\n        if (!this[$isSame](newColor)) {\n            const newHsva = this.colorModel.toHsva(newColor);\n            this[$update](newHsva);\n            this[$color] = newColor;\n        }\n    }\n    constructor() {\n        super();\n        const template = tpl(`<style>${this[$css].join('')}</style>`);\n        const root = this.attachShadow({ mode: 'open' });\n        root.appendChild(template.content.cloneNode(true));\n        root.addEventListener('move', this);\n        this[$parts] = this[$sliders].map((slider) => new slider(root));\n    }\n    connectedCallback() {\n        // A user may set a property on an _instance_ of an element,\n        // before its prototype has been connected to this class.\n        // If so, we need to run it through the proper class setter.\n        if (this.hasOwnProperty('color')) {\n            const value = this.color;\n            delete this['color'];\n            this.color = value;\n        }\n        else if (!this.color) {\n            this.color = this.colorModel.defaultColor;\n        }\n    }\n    attributeChangedCallback(_attr, _oldVal, newVal) {\n        const color = this.colorModel.fromAttr(newVal);\n        if (!this[$isSame](color)) {\n            this.color = color;\n        }\n    }\n    handleEvent(event) {\n        // Merge the current HSV color object with updated params.\n        const oldHsva = this[$hsva];\n        const newHsva = { ...oldHsva, ...event.detail };\n        this[$update](newHsva);\n        let newColor;\n        if (!equalColorObjects(newHsva, oldHsva) &&\n            !this[$isSame]((newColor = this.colorModel.fromHsva(newHsva)))) {\n            this[$color] = newColor;\n            fire(this, 'color-changed', { value: newColor });\n        }\n    }\n    [$isSame](color) {\n        return this.color && this.colorModel.equal(color, this.color);\n    }\n    [$update](hsva) {\n        this[$hsva] = hsva;\n        this[$parts].forEach((part) => part.update(hsva));\n    }\n}\n//# sourceMappingURL=color-picker.js.map", "export default `[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}`;\n//# sourceMappingURL=hue.js.map", "export default `[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}`;\n//# sourceMappingURL=saturation.js.map", "import { ColorPicker } from '../components/color-picker.js';\nimport { hexToHsva, hsvaToHex } from '../utils/convert.js';\nimport { equalHex } from '../utils/compare.js';\nconst colorModel = {\n    defaultColor: '#000',\n    toHsva: hexToHsva,\n    fromHsva: ({ h, s, v }) => hsvaToHex({ h, s, v, a: 1 }),\n    equal: equalHex,\n    fromAttr: (color) => color\n};\nexport class HexBase extends ColorPicker {\n    get colorModel() {\n        return colorModel;\n    }\n}\n//# sourceMappingURL=hex.js.map", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/colorpicker/colorpickerview\n */\nimport { convertColor, convertToHex, registerCustomElement } from './utils.js';\nimport { global, env } from '@ckeditor/ckeditor5-utils';\nimport { debounce } from 'lodash-es';\nimport View from '../view.js';\nimport LabeledFieldView from '../labeledfield/labeledfieldview.js';\nimport { createLabeledInputText } from '../labeledfield/utils.js';\n// Custom export due to https://github.com/ckeditor/ckeditor5/issues/15698.\nimport { HexBase } from 'vanilla-colorful/lib/entrypoints/hex';\nimport '../../theme/components/colorpicker/colorpicker.css';\nconst waitingTime = 150;\n/**\n * A class which represents a color picker with an input field for defining custom colors.\n */\nexport default class ColorPickerView extends View {\n    /**\n     * Creates a view of color picker.\n     *\n     * @param locale\n     * @param config\n     */\n    constructor(locale, config = {}) {\n        super(locale);\n        this.set({\n            color: '',\n            _hexColor: ''\n        });\n        this.hexInputRow = this._createInputRow();\n        const children = this.createCollection();\n        if (!config.hideInput) {\n            children.add(this.hexInputRow);\n        }\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: ['ck', 'ck-color-picker'],\n                tabindex: -1\n            },\n            children\n        });\n        this._config = config;\n        this._debounceColorPickerEvent = debounce((color) => {\n            // At first, set the color internally in the component. It's converted to the configured output format.\n            this.set('color', color);\n            // Then let the outside world know that the user changed the color.\n            this.fire('colorSelected', { color: this.color });\n        }, waitingTime, {\n            leading: true\n        });\n        // The `color` property holds the color in the configured output format.\n        // Ensure it before actually setting the value.\n        this.on('set:color', (evt, propertyName, newValue) => {\n            evt.return = convertColor(newValue, this._config.format || 'hsl');\n        });\n        // The `_hexColor` property is bound to the `color` one, but requires conversion.\n        this.on('change:color', () => {\n            this._hexColor = convertColorToCommonHexFormat(this.color);\n        });\n        this.on('change:_hexColor', () => {\n            // Update the selected color in the color picker palette when it's not focused.\n            // It means the user typed the color in the input.\n            if (document.activeElement !== this.picker) {\n                this.picker.setAttribute('color', this._hexColor);\n            }\n            // There has to be two way binding between properties.\n            // Extra precaution has to be taken to trigger change back only when the color really changes.\n            if (convertColorToCommonHexFormat(this.color) != convertColorToCommonHexFormat(this._hexColor)) {\n                this.color = this._hexColor;\n            }\n        });\n    }\n    /**\n     * Renders color picker in the view.\n     */\n    render() {\n        super.render();\n        // Extracted to the helper to make it testable.\n        registerCustomElement('hex-color-picker', HexBase);\n        this.picker = global.document.createElement('hex-color-picker');\n        this.picker.setAttribute('class', 'hex-color-picker');\n        this.picker.setAttribute('tabindex', '-1');\n        this._createSlidersView();\n        if (this.element) {\n            if (this.hexInputRow.element) {\n                this.element.insertBefore(this.picker, this.hexInputRow.element);\n            }\n            else {\n                this.element.appendChild(this.picker);\n            }\n            // Create custom stylesheet with a look of focused pointer in color picker and append it into the color picker shadowDom\n            const styleSheetForFocusedColorPicker = document.createElement('style');\n            styleSheetForFocusedColorPicker.textContent = '[role=\"slider\"]:focus [part$=\"pointer\"] {' +\n                'border: 1px solid #fff;' +\n                'outline: 1px solid var(--ck-color-focus-border);' +\n                'box-shadow: 0 0 0 2px #fff;' +\n                '}';\n            this.picker.shadowRoot.appendChild(styleSheetForFocusedColorPicker);\n        }\n        this.picker.addEventListener('color-changed', event => {\n            const color = event.detail.value;\n            this._debounceColorPickerEvent(color);\n        });\n    }\n    /**\n     * Focuses the first pointer in color picker.\n     *\n     */\n    focus() {\n        // In some browsers we need to move the focus to the input first.\n        // Otherwise, the color picker doesn't behave as expected.\n        // In FF, after selecting the color via slider, it instantly moves back to the previous color.\n        // In all iOS browsers and desktop Safari, once the saturation slider is moved for the first time,\n        // editor collapses the selection and doesn't apply the color change.\n        // See: https://github.com/cksource/ckeditor5-internal/issues/3245, https://github.com/ckeditor/ckeditor5/issues/14119,\n        // https://github.com/cksource/ckeditor5-internal/issues/3268.\n        /* istanbul ignore next -- @preserve */\n        if (!this._config.hideInput && (env.isGecko || env.isiOS || env.isSafari)) {\n            const input = this.hexInputRow.children.get(1);\n            input.focus();\n        }\n        const firstSlider = this.slidersView.first;\n        firstSlider.focus();\n    }\n    /**\n     * Creates collection of sliders in color picker.\n     *\n     * @private\n     */\n    _createSlidersView() {\n        const colorPickersChildren = [...this.picker.shadowRoot.children];\n        const sliders = colorPickersChildren.filter(item => item.getAttribute('role') === 'slider');\n        const slidersView = sliders.map(slider => {\n            const view = new SliderView(slider);\n            return view;\n        });\n        this.slidersView = this.createCollection();\n        slidersView.forEach(item => {\n            this.slidersView.add(item);\n        });\n    }\n    /**\n     * Creates input row for defining custom colors in color picker.\n     *\n     * @private\n     */\n    _createInputRow() {\n        const colorInput = this._createColorInput();\n        return new ColorPickerInputRowView(this.locale, colorInput);\n    }\n    /**\n     * Creates the input where user can type or paste the color in hex format.\n     *\n     * @private\n     */\n    _createColorInput() {\n        const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n        const { t } = this.locale;\n        labeledInput.set({\n            label: t('HEX'),\n            class: 'color-picker-hex-input'\n        });\n        labeledInput.fieldView.bind('value').to(this, '_hexColor', pickerColor => {\n            if (labeledInput.isFocused) {\n                // Text field shouldn't be updated with color change if the text field is focused.\n                // Imagine user typing hex code and getting the value of field changed.\n                return labeledInput.fieldView.value;\n            }\n            else {\n                return pickerColor.startsWith('#') ? pickerColor.substring(1) : pickerColor;\n            }\n        });\n        // Only accept valid hex colors as input.\n        labeledInput.fieldView.on('input', () => {\n            const inputValue = labeledInput.fieldView.element.value;\n            if (inputValue) {\n                const maybeHexColor = tryParseHexColor(inputValue);\n                if (maybeHexColor) {\n                    // If so, set the color.\n                    // Otherwise, do nothing.\n                    this._debounceColorPickerEvent(maybeHexColor);\n                }\n            }\n        });\n        return labeledInput;\n    }\n    /**\n     * Validates the view and returns `false` when some fields are invalid.\n     */\n    isValid() {\n        const { t } = this.locale;\n        // If the input is hidden, it's always valid, because there is no way to select\n        // invalid color value using diagram color picker.\n        if (this._config.hideInput) {\n            return true;\n        }\n        this.resetValidationStatus();\n        // One error per field is enough.\n        if (!this.hexInputRow.getParsedColor()) {\n            // Apply updated error.\n            this.hexInputRow.inputView.errorText = t('Please enter a valid color (e.g. \"ff0000\").');\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Cleans up the supplementary error and information text of input inside the {@link #hexInputRow}\n     * bringing them back to the state when the form has been displayed for the first time.\n     *\n     * See {@link #isValid}.\n     */\n    resetValidationStatus() {\n        this.hexInputRow.inputView.errorText = null;\n    }\n}\n// Converts any color format to a unified hex format.\n//\n// @param inputColor\n// @returns An unified hex string.\nfunction convertColorToCommonHexFormat(inputColor) {\n    let ret = convertToHex(inputColor);\n    if (!ret) {\n        ret = '#000';\n    }\n    if (ret.length === 4) {\n        // Unfold shortcut format.\n        ret = '#' + [ret[1], ret[1], ret[2], ret[2], ret[3], ret[3]].join('');\n    }\n    return ret.toLowerCase();\n}\n// View abstraction over pointer in color picker.\nclass SliderView extends View {\n    /**\n     * @param element HTML element of slider in color picker.\n     */\n    constructor(element) {\n        super();\n        this.element = element;\n    }\n    /**\n     * Focuses element.\n     */\n    focus() {\n        this.element.focus();\n    }\n}\n// View abstraction over the `#` character before color input.\nclass HashView extends View {\n    constructor(locale) {\n        super(locale);\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-color-picker__hash-view'\n                ]\n            },\n            children: '#'\n        });\n    }\n}\n// The class representing a row containing hex color input field.\n// **Note**: For now this class is private. When more use cases appear (beyond `ckeditor5-table` and `ckeditor5-image`),\n// it will become a component in `ckeditor5-ui`.\n//\n// @private\nclass ColorPickerInputRowView extends View {\n    /**\n     * Creates an instance of the form row class.\n     *\n     * @param locale The locale instance.\n     * @param inputView Hex color input element.\n     */\n    constructor(locale, inputView) {\n        super(locale);\n        this.inputView = inputView;\n        this.children = this.createCollection([\n            new HashView(),\n            this.inputView\n        ]);\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-color-picker__row'\n                ]\n            },\n            children: this.children\n        });\n    }\n    /**\n     * Returns false if color input value is not in hex format.\n     */\n    getParsedColor() {\n        return tryParseHexColor(this.inputView.fieldView.element.value);\n    }\n}\n/**\n * Trim spaces from provided color and check if hex is valid.\n *\n * @param color Unsafe color string.\n * @returns Null if provided color is not hex value.\n * @export\n */\nexport function tryParseHexColor(color) {\n    if (!color) {\n        return null;\n    }\n    const hashLessColor = color.trim().replace(/^#/, '');\n    // Incorrect length.\n    if (![3, 4, 6, 8].includes(hashLessColor.length)) {\n        return null;\n    }\n    // Incorrect characters.\n    if (!/^(([0-9a-fA-F]{2}){3,4}|([0-9a-fA-F]){3,4})$/.test(hashLessColor)) {\n        return null;\n    }\n    return `#${hashLessColor}`;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Collection, ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * A collection to store document colors. It enforces colors to be unique.\n */\nexport default class DocumentColorCollection extends /* #__PURE__ */ ObservableMixin((Collection)) {\n    constructor(options) {\n        super(options);\n        this.set('isEmpty', true);\n        this.on('change', () => {\n            this.set('isEmpty', this.length === 0);\n        });\n    }\n    /**\n     * Adds a color to the document color collection.\n     *\n     * This method ensures that no color duplicates are inserted (compared using\n     * the color value of the {@link module:ui/colorgrid/colorgridview~ColorDefinition}).\n     *\n     * If the item does not have an ID, it will be automatically generated and set on the item.\n     *\n     * @param index The position of the item in the collection. The item is pushed to the collection when `index` is not specified.\n     * @fires add\n     * @fires change\n     */\n    add(item, index) {\n        if (this.find(element => element.color === item.color)) {\n            // No duplicates are allowed.\n            return this;\n        }\n        return super.add(item, index);\n    }\n    /**\n     * Checks if an object with given colors is present in the document color collection.\n     */\n    hasColor(color) {\n        return !!this.find(item => item.color === color);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/colorselector/colorgridsfragmentview\n */\nimport View from '../view.js';\nimport ButtonView from '../button/buttonview.js';\nimport ColorGridView from '../colorgrid/colorgridview.js';\nimport ColorTileView from '../colorgrid/colortileview.js';\nimport Template from '../template.js';\nimport DocumentColorCollection from './documentcolorcollection.js';\nimport { icons } from '@ckeditor/ckeditor5-core';\n/**\n * One of the fragments of {@link module:ui/colorselector/colorselectorview~ColorSelectorView}.\n *\n * It provides a UI that allows users to select colors from the a predefined set and from existing document colors.\n *\n * It consists of the following sub–components:\n *\n * * A \"Remove color\" button,\n * * A static {@link module:ui/colorgrid/colorgridview~ColorGridView} of colors defined in the configuration,\n * * A dynamic {@link module:ui/colorgrid/colorgridview~ColorGridView} of colors used in the document.\n * * If color picker is configured, the \"Color Picker\" button is visible too.\n */\nexport default class ColorGridsFragmentView extends View {\n    /**\n     * Creates an instance of the view.\n     *\n     * @param locale The localization services instance.\n     * @param colors An array with definitions of colors to be displayed in the table.\n     * @param columns The number of columns in the color grid.\n     * @param removeButtonLabel The label of the button responsible for removing the color.\n     * @param colorPickerLabel The label of the button responsible for color picker appearing.\n     * @param documentColorsLabel The label for the section with the document colors.\n     * @param documentColorsCount The number of colors in the document colors section inside the color dropdown.\n     * @param focusTracker Tracks information about the DOM focus in the list.\n     * @param focusables A collection of views that can be focused in the view.\n     */\n    constructor(locale, { colors, columns, removeButtonLabel, documentColorsLabel, documentColorsCount, colorPickerLabel, focusTracker, focusables }) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('isVisible', true);\n        this.focusTracker = focusTracker;\n        this.items = this.createCollection();\n        this.colorDefinitions = colors;\n        this.columns = columns;\n        this.documentColors = new DocumentColorCollection();\n        this.documentColorsCount = documentColorsCount;\n        this._focusables = focusables;\n        this._removeButtonLabel = removeButtonLabel;\n        this._colorPickerLabel = colorPickerLabel;\n        this._documentColorsLabel = documentColorsLabel;\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck-color-grids-fragment',\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ]\n            },\n            children: this.items\n        });\n        this.removeColorButtonView = this._createRemoveColorButton();\n        this.items.add(this.removeColorButtonView);\n    }\n    /**\n     * Scans through the editor model and searches for text node attributes with the given attribute name.\n     * Found entries are set as document colors.\n     *\n     * All the previously stored document colors will be lost in the process.\n     *\n     * @param model The model used as a source to obtain the document colors.\n     * @param attributeName Determines the name of the related model's attribute for a given dropdown.\n     */\n    updateDocumentColors(model, attributeName) {\n        const document = model.document;\n        const maxCount = this.documentColorsCount;\n        this.documentColors.clear();\n        for (const root of document.getRoots()) {\n            const range = model.createRangeIn(root);\n            for (const node of range.getItems()) {\n                if (node.is('$textProxy') && node.hasAttribute(attributeName)) {\n                    this._addColorToDocumentColors(node.getAttribute(attributeName));\n                    if (this.documentColors.length >= maxCount) {\n                        return;\n                    }\n                }\n            }\n        }\n    }\n    /**\n     * Refreshes the state of the selected color in one or both {@link module:ui/colorgrid/colorgridview~ColorGridView}s\n     * available in the {@link module:ui/colorselector/colorselectorview~ColorSelectorView}. It guarantees that the selection will\n     * occur only in one of them.\n     */\n    updateSelectedColors() {\n        const documentColorsGrid = this.documentColorsGrid;\n        const staticColorsGrid = this.staticColorsGrid;\n        const selectedColor = this.selectedColor;\n        staticColorsGrid.selectedColor = selectedColor;\n        if (documentColorsGrid) {\n            documentColorsGrid.selectedColor = selectedColor;\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.staticColorsGrid = this._createStaticColorsGrid();\n        this.items.add(this.staticColorsGrid);\n        if (this.documentColorsCount) {\n            // Create a label for document colors.\n            const bind = Template.bind(this.documentColors, this.documentColors);\n            const label = new View(this.locale);\n            label.setTemplate({\n                tag: 'span',\n                attributes: {\n                    class: [\n                        'ck',\n                        'ck-color-grid__label',\n                        bind.if('isEmpty', 'ck-hidden')\n                    ]\n                },\n                children: [\n                    {\n                        text: this._documentColorsLabel\n                    }\n                ]\n            });\n            this.items.add(label);\n            this.documentColorsGrid = this._createDocumentColorsGrid();\n            this.items.add(this.documentColorsGrid);\n        }\n        this._createColorPickerButton();\n        this._addColorSelectorElementsToFocusTracker();\n    }\n    /**\n     * Focuses the component.\n     */\n    focus() {\n        this.removeColorButtonView.focus();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n    }\n    /**\n     * Handles displaying the color picker button (if it was previously created) and making it focusable.\n     */\n    addColorPickerButton() {\n        if (this.colorPickerButtonView) {\n            this.items.add(this.colorPickerButtonView);\n            this.focusTracker.add(this.colorPickerButtonView.element);\n            this._focusables.add(this.colorPickerButtonView);\n        }\n    }\n    /**\n     * Adds color selector elements to focus tracker.\n     */\n    _addColorSelectorElementsToFocusTracker() {\n        this.focusTracker.add(this.removeColorButtonView.element);\n        this._focusables.add(this.removeColorButtonView);\n        if (this.staticColorsGrid) {\n            this.focusTracker.add(this.staticColorsGrid.element);\n            this._focusables.add(this.staticColorsGrid);\n        }\n        if (this.documentColorsGrid) {\n            this.focusTracker.add(this.documentColorsGrid.element);\n            this._focusables.add(this.documentColorsGrid);\n        }\n    }\n    /**\n     * Creates the button responsible for displaying the color picker component.\n     */\n    _createColorPickerButton() {\n        this.colorPickerButtonView = new ButtonView();\n        this.colorPickerButtonView.set({\n            label: this._colorPickerLabel,\n            withText: true,\n            icon: icons.colorPalette,\n            class: 'ck-color-selector__color-picker'\n        });\n        this.colorPickerButtonView.on('execute', () => {\n            this.fire('colorPicker:show');\n        });\n    }\n    /**\n     * Adds the remove color button as a child of the current view.\n     */\n    _createRemoveColorButton() {\n        const buttonView = new ButtonView();\n        buttonView.set({\n            withText: true,\n            icon: icons.eraser,\n            label: this._removeButtonLabel\n        });\n        buttonView.class = 'ck-color-selector__remove-color';\n        buttonView.on('execute', () => {\n            this.fire('execute', {\n                value: null,\n                source: 'removeColorButton'\n            });\n        });\n        buttonView.render();\n        return buttonView;\n    }\n    /**\n     * Creates a static color grid based on the editor configuration.\n     */\n    _createStaticColorsGrid() {\n        const colorGrid = new ColorGridView(this.locale, {\n            colorDefinitions: this.colorDefinitions,\n            columns: this.columns\n        });\n        colorGrid.on('execute', (evt, data) => {\n            this.fire('execute', {\n                value: data.value,\n                source: 'staticColorsGrid'\n            });\n        });\n        return colorGrid;\n    }\n    /**\n     * Creates the document colors section view and binds it to {@link #documentColors}.\n     */\n    _createDocumentColorsGrid() {\n        const bind = Template.bind(this.documentColors, this.documentColors);\n        const documentColorsGrid = new ColorGridView(this.locale, {\n            columns: this.columns\n        });\n        documentColorsGrid.extendTemplate({\n            attributes: {\n                class: bind.if('isEmpty', 'ck-hidden')\n            }\n        });\n        documentColorsGrid.items.bindTo(this.documentColors).using(colorObj => {\n            const colorTile = new ColorTileView();\n            colorTile.set({\n                color: colorObj.color,\n                hasBorder: colorObj.options && colorObj.options.hasBorder\n            });\n            if (colorObj.label) {\n                colorTile.set({\n                    label: colorObj.label,\n                    tooltip: true\n                });\n            }\n            colorTile.on('execute', () => {\n                this.fire('execute', {\n                    value: colorObj.color,\n                    source: 'documentColorsGrid'\n                });\n            });\n            return colorTile;\n        });\n        // Selected color should be cleared when document colors became empty.\n        this.documentColors.on('change:isEmpty', (evt, name, val) => {\n            if (val) {\n                documentColorsGrid.selectedColor = null;\n            }\n        });\n        return documentColorsGrid;\n    }\n    /**\n     * Adds a given color to the document colors list. If possible, the method will attempt to use\n     * data from the {@link #colorDefinitions} (label, color options).\n     *\n     * @param color A string that stores the value of the recently applied color.\n     */\n    _addColorToDocumentColors(color) {\n        const predefinedColor = this.colorDefinitions\n            .find(definition => definition.color === color);\n        if (!predefinedColor) {\n            this.documentColors.add({\n                color,\n                label: color,\n                options: {\n                    hasBorder: false\n                }\n            });\n        }\n        else {\n            this.documentColors.add(Object.assign({}, predefinedColor));\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/colorselector/colorpickerfragmentview\n */\nimport View from '../view.js';\nimport ButtonView from '../button/buttonview.js';\nimport { default as ColorPickerView } from '../colorpicker/colorpickerview.js';\nimport { icons } from '@ckeditor/ckeditor5-core';\n/**\n * One of the fragments of {@link module:ui/colorselector/colorselectorview~ColorSelectorView}.\n *\n * It allows users to select a color from a color picker.\n *\n * It consists of the following sub–components:\n *\n * * A color picker saturation and hue sliders,\n * * A text input accepting colors in HEX format,\n * * \"Save\" and \"Cancel\" action buttons.\n */\nexport default class ColorPickerFragmentView extends View {\n    /**\n     * Creates an instance of the view.\n     *\n     * @param locale The localization services instance.\n     * @param focusTracker Tracks information about the DOM focus in the list.\n     * @param focusables A collection of views that can be focused in the view..\n     * @param keystrokes An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n     * @param colorPickerViewConfig The configuration of color picker feature. If set to `false`, the color picker\n     * will not be rendered.\n     */\n    constructor(locale, { focusTracker, focusables, keystrokes, colorPickerViewConfig }) {\n        super(locale);\n        this.items = this.createCollection();\n        this.focusTracker = focusTracker;\n        this.keystrokes = keystrokes;\n        this.set('isVisible', false);\n        this.set('selectedColor', undefined);\n        this._focusables = focusables;\n        this._colorPickerViewConfig = colorPickerViewConfig;\n        const bind = this.bindTemplate;\n        const { saveButtonView, cancelButtonView } = this._createActionButtons();\n        this.saveButtonView = saveButtonView;\n        this.cancelButtonView = cancelButtonView;\n        this.actionBarView = this._createActionBarView({ saveButtonView, cancelButtonView });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck-color-picker-fragment',\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ]\n            },\n            children: this.items\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        const colorPickerView = new ColorPickerView(this.locale, {\n            ...this._colorPickerViewConfig\n        });\n        this.colorPickerView = colorPickerView;\n        this.colorPickerView.render();\n        if (this.selectedColor) {\n            colorPickerView.color = this.selectedColor;\n        }\n        this.listenTo(this, 'change:selectedColor', (evt, name, value) => {\n            colorPickerView.color = value;\n        });\n        this.items.add(this.colorPickerView);\n        this.items.add(this.actionBarView);\n        this._addColorPickersElementsToFocusTracker();\n        this._stopPropagationOnArrowsKeys();\n        this._executeOnEnterPress();\n        this._executeUponColorChange();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n    }\n    /**\n     * Focuses the color picker.\n     */\n    focus() {\n        this.colorPickerView.focus();\n    }\n    /**\n     * Reset validation messages.\n     */\n    resetValidationStatus() {\n        this.colorPickerView.resetValidationStatus();\n    }\n    /**\n     * When color picker is focused and \"enter\" is pressed it executes command.\n     */\n    _executeOnEnterPress() {\n        this.keystrokes.set('enter', evt => {\n            if (this.isVisible && this.focusTracker.focusedElement !== this.cancelButtonView.element && this.colorPickerView.isValid()) {\n                this.fire('execute', {\n                    value: this.selectedColor\n                });\n                evt.stopPropagation();\n                evt.preventDefault();\n            }\n        });\n    }\n    /**\n     * Removes default behavior of arrow keys in dropdown.\n     */\n    _stopPropagationOnArrowsKeys() {\n        const stopPropagation = (data) => data.stopPropagation();\n        this.keystrokes.set('arrowright', stopPropagation);\n        this.keystrokes.set('arrowleft', stopPropagation);\n        this.keystrokes.set('arrowup', stopPropagation);\n        this.keystrokes.set('arrowdown', stopPropagation);\n    }\n    /**\n     * Adds color picker elements to focus tracker.\n     */\n    _addColorPickersElementsToFocusTracker() {\n        for (const slider of this.colorPickerView.slidersView) {\n            this.focusTracker.add(slider.element);\n            this._focusables.add(slider);\n        }\n        const input = this.colorPickerView.hexInputRow.children.get(1);\n        if (input.element) {\n            this.focusTracker.add(input.element);\n            this._focusables.add(input);\n        }\n        this.focusTracker.add(this.saveButtonView.element);\n        this._focusables.add(this.saveButtonView);\n        this.focusTracker.add(this.cancelButtonView.element);\n        this._focusables.add(this.cancelButtonView);\n    }\n    /**\n     * Creates bar containing \"Save\" and \"Cancel\" buttons.\n     */\n    _createActionBarView({ saveButtonView, cancelButtonView }) {\n        const actionBarRow = new View();\n        const children = this.createCollection();\n        children.add(saveButtonView);\n        children.add(cancelButtonView);\n        actionBarRow.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-color-selector_action-bar'\n                ]\n            },\n            children\n        });\n        return actionBarRow;\n    }\n    /**\n     * Creates \"Save\" and \"Cancel\" buttons.\n     */\n    _createActionButtons() {\n        const locale = this.locale;\n        const t = locale.t;\n        const saveButtonView = new ButtonView(locale);\n        const cancelButtonView = new ButtonView(locale);\n        saveButtonView.set({\n            icon: icons.check,\n            class: 'ck-button-save',\n            type: 'button',\n            withText: false,\n            label: t('Accept')\n        });\n        cancelButtonView.set({\n            icon: icons.cancel,\n            class: 'ck-button-cancel',\n            type: 'button',\n            withText: false,\n            label: t('Cancel')\n        });\n        saveButtonView.on('execute', () => {\n            if (this.colorPickerView.isValid()) {\n                this.fire('execute', {\n                    source: 'colorPickerSaveButton',\n                    value: this.selectedColor\n                });\n            }\n        });\n        cancelButtonView.on('execute', () => {\n            this.fire('colorPicker:cancel');\n        });\n        return {\n            saveButtonView, cancelButtonView\n        };\n    }\n    /**\n     * Fires the `execute` event if color in color picker has been changed\n     * by the user.\n     */\n    _executeUponColorChange() {\n        this.colorPickerView.on('colorSelected', (evt, data) => {\n            this.fire('execute', {\n                value: data.color,\n                source: 'colorPicker'\n            });\n            this.set('selectedColor', data.color);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/colorselector/colorselectorview\n */\nimport FocusCycler from '../focuscycler.js';\nimport View from '../view.js';\nimport ViewCollection from '../viewcollection.js';\nimport { FocusTracker, KeystrokeHandler } from '@ckeditor/ckeditor5-utils';\nimport ColorGridsFragmentView from './colorgridsfragmentview.js';\nimport ColorPickerFragmentView from './colorpickerfragmentview.js';\nimport '../../theme/components/colorselector/colorselector.css';\n/**\n * The configurable color selector view class. It allows users to select colors from a predefined set of colors as well as from\n * a color picker.\n *\n * This meta-view is is made of two components (fragments):\n *\n * * {@link module:ui/colorselector/colorselectorview~ColorSelectorView#colorGridsFragmentView},\n * * {@link module:ui/colorselector/colorselectorview~ColorSelectorView#colorPickerFragmentView}.\n *\n * ```ts\n * const colorDefinitions = [\n * \t{ color: '#000', label: 'Black', options: { hasBorder: false } },\n * \t{ color: 'rgb(255, 255, 255)', label: 'White', options: { hasBorder: true } },\n * \t{ color: 'red', label: 'Red', options: { hasBorder: false } }\n * ];\n *\n * const selectorView = new ColorSelectorView( locale, {\n * \tcolors: colorDefinitions,\n * \tcolumns: 5,\n * \tremoveButtonLabel: 'Remove color',\n * \tdocumentColorsLabel: 'Document colors',\n * \tdocumentColorsCount: 4,\n * \tcolorPickerViewConfig: {\n * \t\tformat: 'hsl'\n * \t}\n * } );\n *\n * selectorView.appendUI();\n * selectorView.selectedColor = 'red';\n * selectorView.updateSelectedColors();\n *\n * selectorView.on<ColorSelectorExecuteEvent>( 'execute', ( evt, data ) => {\n * \tconsole.log( 'Color changed', data.value, data.source );\n * } );\n *\n * selectorView.on<ColorSelectorColorPickerShowEvent>( 'colorPicker:show', ( evt ) => {\n * \tconsole.log( 'Color picker showed up', evt );\n * } );\n *\n * selectorView.on<ColorSelectorColorPickerCancelEvent>( 'colorPicker:cancel', ( evt ) => {\n * \tconsole.log( 'Color picker cancel', evt );\n * } );\n *\n * selectorView.render();\n *\n * document.body.appendChild( selectorView.element );\n * ```\n */\nexport default class ColorSelectorView extends View {\n    /**\n     * Creates a view to be inserted as a child of {@link module:ui/dropdown/dropdownview~DropdownView}.\n     *\n     * @param locale The localization services instance.\n     * @param colors An array with definitions of colors to be displayed in the table.\n     * @param columns The number of columns in the color grid.\n     * @param removeButtonLabel The label of the button responsible for removing the color.\n     * @param colorPickerLabel The label of the button responsible for color picker appearing.\n     * @param documentColorsLabel The label for the section with the document colors.\n     * @param documentColorsCount The number of colors in the document colors section inside the color dropdown.\n     * @param colorPickerViewConfig The configuration of color picker feature. If set to `false`, the color picker will be hidden.\n     */\n    constructor(locale, { colors, columns, removeButtonLabel, documentColorsLabel, documentColorsCount, colorPickerLabel, colorPickerViewConfig }) {\n        super(locale);\n        this.items = this.createCollection();\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this._focusables = new ViewCollection();\n        this._colorPickerViewConfig = colorPickerViewConfig;\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate list items backwards using the <kbd>Shift</kbd> + <kbd>Tab</kbd> keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate list items forwards using the <kbd>Tab</kbd> key.\n                focusNext: 'tab'\n            }\n        });\n        this.colorGridsFragmentView = new ColorGridsFragmentView(locale, {\n            colors, columns, removeButtonLabel, documentColorsLabel, documentColorsCount, colorPickerLabel,\n            focusTracker: this.focusTracker,\n            focusables: this._focusables\n        });\n        this.colorPickerFragmentView = new ColorPickerFragmentView(locale, {\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokes: this.keystrokes,\n            colorPickerViewConfig\n        });\n        this.set('_isColorGridsFragmentVisible', true);\n        this.set('_isColorPickerFragmentVisible', false);\n        this.set('selectedColor', undefined);\n        this.colorGridsFragmentView.bind('isVisible').to(this, '_isColorGridsFragmentVisible');\n        this.colorPickerFragmentView.bind('isVisible').to(this, '_isColorPickerFragmentVisible');\n        /**\n         * This is kind of bindings. Unfortunately we could not use this.bind() method because the same property\n         * can not be bound twice. So this is work around how to bind 'selectedColor' property between components.\n         */\n        this.on('change:selectedColor', (evt, evtName, data) => {\n            this.colorGridsFragmentView.set('selectedColor', data);\n            this.colorPickerFragmentView.set('selectedColor', data);\n        });\n        this.colorGridsFragmentView.on('change:selectedColor', (evt, evtName, data) => {\n            this.set('selectedColor', data);\n        });\n        this.colorPickerFragmentView.on('change:selectedColor', (evt, evtName, data) => {\n            this.set('selectedColor', data);\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-color-selector'\n                ]\n            },\n            children: this.items\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Renders the internals of the component on demand:\n     * * {@link #colorPickerFragmentView},\n     * * {@link #colorGridsFragmentView}.\n     *\n     * It allows for deferring component initialization to improve the performance.\n     *\n     * See {@link #showColorPickerFragment}, {@link #showColorGridsFragment}.\n     */\n    appendUI() {\n        this._appendColorGridsFragment();\n        if (this._colorPickerViewConfig) {\n            this._appendColorPickerFragment();\n        }\n    }\n    /**\n     * Shows the {@link #colorPickerFragmentView} and hides the {@link #colorGridsFragmentView}.\n     *\n     * **Note**: It requires {@link #appendUI} to be called first.\n     *\n     * See {@link #showColorGridsFragment}, {@link ~ColorSelectorView#event:colorPicker:show}.\n     */\n    showColorPickerFragment() {\n        if (!this.colorPickerFragmentView.colorPickerView || this._isColorPickerFragmentVisible) {\n            return;\n        }\n        this._isColorPickerFragmentVisible = true;\n        this.colorPickerFragmentView.focus();\n        this.colorPickerFragmentView.resetValidationStatus();\n        this._isColorGridsFragmentVisible = false;\n    }\n    /**\n     * Shows the {@link #colorGridsFragmentView} and hides the {@link #colorPickerFragmentView}.\n     *\n     * See {@link #showColorPickerFragment}.\n     *\n     * **Note**: It requires {@link #appendUI} to be called first.\n     */\n    showColorGridsFragment() {\n        if (this._isColorGridsFragmentVisible) {\n            return;\n        }\n        this._isColorGridsFragmentVisible = true;\n        this.colorGridsFragmentView.focus();\n        this._isColorPickerFragmentVisible = false;\n    }\n    /**\n     * Focuses the first focusable element in {@link #items}.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Focuses the last focusable element in {@link #items}.\n     */\n    focusLast() {\n        this._focusCycler.focusLast();\n    }\n    /**\n     * Scans through the editor model and searches for text node attributes with the given `attributeName`.\n     * Found entries are set as document colors in {@link #colorGridsFragmentView}.\n     *\n     * All the previously stored document colors will be lost in the process.\n     *\n     * @param model The model used as a source to obtain the document colors.\n     * @param attributeName Determines the name of the related model's attribute for a given dropdown.\n     */\n    updateDocumentColors(model, attributeName) {\n        this.colorGridsFragmentView.updateDocumentColors(model, attributeName);\n    }\n    /**\n     * Refreshes the state of the selected color in one or both grids located in {@link #colorGridsFragmentView}.\n     *\n     * It guarantees that the selection will occur only in one of them.\n     */\n    updateSelectedColors() {\n        this.colorGridsFragmentView.updateSelectedColors();\n    }\n    /**\n     * Appends the view containing static and document color grid views.\n     */\n    _appendColorGridsFragment() {\n        if (this.items.length) {\n            return;\n        }\n        this.items.add(this.colorGridsFragmentView);\n        this.colorGridsFragmentView.delegate('execute').to(this);\n        this.colorGridsFragmentView.delegate('colorPicker:show').to(this);\n    }\n    /**\n     * Appends the view with the color picker.\n     */\n    _appendColorPickerFragment() {\n        if (this.items.length === 2) {\n            return;\n        }\n        this.items.add(this.colorPickerFragmentView);\n        if (this.colorGridsFragmentView.colorPickerButtonView) {\n            this.colorGridsFragmentView.colorPickerButtonView.on('execute', () => {\n                this.showColorPickerFragment();\n            });\n        }\n        this.colorGridsFragmentView.addColorPickerButton();\n        this.colorPickerFragmentView.delegate('execute').to(this);\n        this.colorPickerFragmentView.delegate('colorPicker:cancel').to(this);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/componentfactory\n */\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * A helper class implementing the UI component ({@link module:ui/view~View view}) factory.\n *\n * It allows functions producing specific UI components to be registered under their unique names\n * in the factory. A registered component can be then instantiated by providing its name.\n * Note that the names are case insensitive.\n *\n * ```ts\n * // The editor provides localization tools for the factory.\n * const factory = new ComponentFactory( editor );\n *\n * factory.add( 'foo', locale => new FooView( locale ) );\n * factory.add( 'bar', locale => new BarView( locale ) );\n *\n * // An instance of FooView.\n * const fooInstance = factory.create( 'foo' );\n *\n * // Names are case insensitive so this is also allowed:\n * const barInstance = factory.create( 'Bar' );\n * ```\n *\n * The {@link module:core/editor/editor~Editor#locale editor locale} is passed to the factory\n * function when {@link module:ui/componentfactory~ComponentFactory#create} is called.\n */\nexport default class ComponentFactory {\n    /**\n     * Creates an instance of the factory.\n     *\n     * @param editor The editor instance.\n     */\n    constructor(editor) {\n        /**\n         * Registered component factories.\n         */\n        this._components = new Map();\n        this.editor = editor;\n    }\n    /**\n     * Returns an iterator of registered component names. Names are returned in lower case.\n     */\n    *names() {\n        for (const value of this._components.values()) {\n            yield value.originalName;\n        }\n    }\n    /**\n     * Registers a component factory function that will be used by the\n     * {@link #create create} method and called with the\n     * {@link module:core/editor/editor~Editor#locale editor locale} as an argument,\n     * allowing localization of the {@link module:ui/view~View view}.\n     *\n     * @param name The name of the component.\n     * @param callback The callback that returns the component.\n     */\n    add(name, callback) {\n        this._components.set(getNormalized(name), { callback, originalName: name });\n    }\n    /**\n     * Creates an instance of a component registered in the factory under a specific name.\n     *\n     * When called, the {@link module:core/editor/editor~Editor#locale editor locale} is passed to\n     * the previously {@link #add added} factory function, allowing localization of the\n     * {@link module:ui/view~View view}.\n     *\n     * @param name The name of the component.\n     * @returns The instantiated component view.\n     */\n    create(name) {\n        if (!this.has(name)) {\n            /**\n             * The required component is not registered in the component factory. Please make sure\n             * the provided name is correct and the component has been correctly\n             * {@link module:ui/componentfactory~ComponentFactory#add added} to the factory.\n             *\n             * @error componentfactory-item-missing\n             * @param name The name of the missing component.\n             */\n            throw new CKEditorError('componentfactory-item-missing', this, { name });\n        }\n        return this._components.get(getNormalized(name)).callback(this.editor.locale);\n    }\n    /**\n     * Checks if a component of a given name is registered in the factory.\n     *\n     * @param name The name of the component.\n     */\n    has(name) {\n        return this._components.has(getNormalized(name));\n    }\n}\n/**\n * Ensures that the component name used as the key in the internal map is in lower case.\n */\nfunction getNormalized(name) {\n    return String(name).toLowerCase();\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/tooltipmanager\n */\nimport View from './view.js';\nimport BalloonPanelView from './panel/balloon/balloonpanelview.js';\nimport { DomEmitterMixin, first, global, isVisible } from '@ckeditor/ckeditor5-utils';\nimport { isElement, debounce } from 'lodash-es';\nimport '../theme/components/tooltip/tooltip.css';\nconst BALLOON_CLASS = 'ck-tooltip';\n/**\n * A tooltip manager class for the UI of the editor.\n *\n * **Note**: Most likely you do not have to use the `TooltipManager` API listed below in order to display tooltips. Popular\n * {@glink framework/architecture/ui-library UI components} support tooltips out-of-the-box via observable properties\n * (see {@link module:ui/button/buttonview~ButtonView#tooltip} and {@link module:ui/button/buttonview~ButtonView#tooltipPosition}).\n *\n * # Displaying tooltips\n *\n * To display a tooltip, set `data-cke-tooltip-text` attribute on any DOM element:\n *\n * ```ts\n * domElement.dataset.ckeTooltipText = 'My tooltip';\n * ```\n *\n * The tooltip will show up whenever the user moves the mouse over the element or the element gets focus in DOM.\n *\n * # Positioning tooltips\n *\n * To change the position of the tooltip, use the `data-cke-tooltip-position` attribute (`s`, `se`, `sw`, `n`, `e`, or `w`):\n *\n * ```ts\n * domElement.dataset.ckeTooltipText = 'Tooltip to the north';\n * domElement.dataset.ckeTooltipPosition = 'n';\n * ```\n *\n * # Disabling tooltips\n *\n * In order to disable the tooltip  temporarily, use the `data-cke-tooltip-disabled` attribute:\n *\n * ```ts\n * domElement.dataset.ckeTooltipText = 'Disabled. For now.';\n * domElement.dataset.ckeTooltipDisabled = 'true';\n * ```\n *\n * # Styling tooltips\n *\n * By default, the tooltip has `.ck-tooltip` class and its text inner `.ck-tooltip__text`.\n *\n * If your tooltip requires custom styling, using `data-cke-tooltip-class` attribute will add additional class to the balloon\n * displaying the tooltip:\n *\n * ```ts\n * domElement.dataset.ckeTooltipText = 'Tooltip with a red text';\n * domElement.dataset.ckeTooltipClass = 'my-class';\n * ```\n *\n * ```css\n * .ck.ck-tooltip.my-class { color: red }\n * ```\n *\n * **Note**: This class is a singleton. All editor instances re-use the same instance loaded by\n * {@link module:ui/editorui/editorui~EditorUI} of the first editor.\n */\nclass TooltipManager extends /* #__PURE__ */ DomEmitterMixin() {\n    /**\n     * Creates an instance of the tooltip manager.\n     */\n    constructor(editor) {\n        super();\n        /**\n         * Stores the reference to the DOM element the tooltip is attached to. `null` when there's no tooltip\n         * in the UI.\n         */\n        this._currentElementWithTooltip = null;\n        /**\n         * Stores the current tooltip position. `null` when there's no tooltip in the UI.\n         */\n        this._currentTooltipPosition = null;\n        /**\n         * An instance of the mutation observer that keeps track on target element attributes changes.\n         */\n        this._mutationObserver = null;\n        TooltipManager._editors.add(editor);\n        // TooltipManager must be a singleton. Multiple instances would mean multiple tooltips attached\n        // to the same DOM element with data-cke-tooltip-* attributes.\n        if (TooltipManager._instance) {\n            return TooltipManager._instance;\n        }\n        TooltipManager._instance = this;\n        this.tooltipTextView = new View(editor.locale);\n        this.tooltipTextView.set('text', '');\n        this.tooltipTextView.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-tooltip__text'\n                ]\n            },\n            children: [\n                {\n                    text: this.tooltipTextView.bindTemplate.to('text')\n                }\n            ]\n        });\n        this.balloonPanelView = new BalloonPanelView(editor.locale);\n        this.balloonPanelView.class = BALLOON_CLASS;\n        this.balloonPanelView.content.add(this.tooltipTextView);\n        this._mutationObserver = createMutationObserver(() => {\n            this._updateTooltipPosition();\n        });\n        this._pinTooltipDebounced = debounce(this._pinTooltip, 600);\n        this._unpinTooltipDebounced = debounce(this._unpinTooltip, 400);\n        this.listenTo(global.document, 'keydown', this._onKeyDown.bind(this), { useCapture: true });\n        this.listenTo(global.document, 'mouseenter', this._onEnterOrFocus.bind(this), { useCapture: true });\n        this.listenTo(global.document, 'mouseleave', this._onLeaveOrBlur.bind(this), { useCapture: true });\n        this.listenTo(global.document, 'focus', this._onEnterOrFocus.bind(this), { useCapture: true });\n        this.listenTo(global.document, 'blur', this._onLeaveOrBlur.bind(this), { useCapture: true });\n        this.listenTo(global.document, 'scroll', this._onScroll.bind(this), { useCapture: true });\n        // Because this class is a singleton, its only instance is shared across all editors and connects them through the reference.\n        // This causes issues with the ContextWatchdog. When an error is thrown in one editor, the watchdog traverses the references\n        // and (because of shared tooltip manager) figures that the error affects all editors and restarts them all.\n        // This flag, excludes tooltip manager instance from the traversal and brings ContextWatchdog back to normal.\n        // More in https://github.com/ckeditor/ckeditor5/issues/12292.\n        this._watchdogExcluded = true;\n    }\n    /**\n     * Destroys the tooltip manager.\n     *\n     * **Note**: The manager singleton cannot be destroyed until all editors that use it are destroyed.\n     *\n     * @param editor The editor the manager was created for.\n     */\n    destroy(editor) {\n        const editorBodyViewCollection = editor.ui.view && editor.ui.view.body;\n        TooltipManager._editors.delete(editor);\n        this.stopListening(editor.ui);\n        // Prevent the balloon panel from being destroyed in the EditorUI#destroy() cascade. It should be destroyed along\n        // with the last editor only (https://github.com/ckeditor/ckeditor5/issues/12602).\n        if (editorBodyViewCollection && editorBodyViewCollection.has(this.balloonPanelView)) {\n            editorBodyViewCollection.remove(this.balloonPanelView);\n        }\n        if (!TooltipManager._editors.size) {\n            this._unpinTooltip();\n            this.balloonPanelView.destroy();\n            this.stopListening();\n            TooltipManager._instance = null;\n        }\n    }\n    /**\n     * Returns {@link #balloonPanelView} {@link module:utils/dom/position~PositioningFunction positioning functions} for a given position\n     * name.\n     *\n     * @param position Name of the position (`s`, `se`, `sw`, `n`, `e`, or `w`).\n     * @returns Positioning functions to be used by the {@link #balloonPanelView}.\n     */\n    static getPositioningFunctions(position) {\n        const defaultPositions = TooltipManager.defaultBalloonPositions;\n        return {\n            // South is most popular. We can use positioning heuristics to avoid clipping by the viewport with the sane fallback.\n            s: [\n                defaultPositions.southArrowNorth,\n                defaultPositions.southArrowNorthEast,\n                defaultPositions.southArrowNorthWest\n            ],\n            n: [defaultPositions.northArrowSouth],\n            e: [defaultPositions.eastArrowWest],\n            w: [defaultPositions.westArrowEast],\n            sw: [defaultPositions.southArrowNorthEast],\n            se: [defaultPositions.southArrowNorthWest]\n        }[position];\n    }\n    /**\n     * Handles hiding tooltips on `keydown` in DOM.\n     *\n     * @param evt An object containing information about the fired event.\n     * @param domEvent The DOM event.\n     */\n    _onKeyDown(evt, domEvent) {\n        if (domEvent.key === 'Escape' && this._currentElementWithTooltip) {\n            this._unpinTooltip();\n            domEvent.stopPropagation();\n        }\n    }\n    /**\n     * Handles displaying tooltips on `mouseenter` and `focus` in DOM.\n     *\n     * @param evt An object containing information about the fired event.\n     * @param domEvent The DOM event.\n     */\n    _onEnterOrFocus(evt, { target }) {\n        const elementWithTooltipAttribute = getDescendantWithTooltip(target);\n        // Abort when there's no descendant needing tooltip.\n        if (!elementWithTooltipAttribute) {\n            // Unpin if element is focused, regardless of whether it contains a label or not.\n            // It also prevents tooltips from overlapping the menu bar\n            if (evt.name === 'focus') {\n                this._unpinTooltip();\n            }\n            return;\n        }\n        // Abort to avoid flashing when, for instance:\n        // * a tooltip is displayed for a focused element, then the same element gets mouseentered,\n        // * a tooltip is displayed for an element via mouseenter, then the focus moves to the same element.\n        if (elementWithTooltipAttribute === this._currentElementWithTooltip) {\n            return;\n        }\n        this._unpinTooltip();\n        // The tooltip should be pinned immediately when the element gets focused using keyboard.\n        // If it is focused using the mouse, the tooltip should be pinned after a delay to prevent flashing.\n        // See https://github.com/ckeditor/ckeditor5/issues/16383\n        if (evt.name === 'focus' && !elementWithTooltipAttribute.matches(':hover')) {\n            this._pinTooltip(elementWithTooltipAttribute, getTooltipData(elementWithTooltipAttribute));\n        }\n        else {\n            this._pinTooltipDebounced(elementWithTooltipAttribute, getTooltipData(elementWithTooltipAttribute));\n        }\n    }\n    /**\n     * Handles hiding tooltips on `mouseleave` and `blur` in DOM.\n     *\n     * @param evt An object containing information about the fired event.\n     * @param domEvent The DOM event.\n     */\n    _onLeaveOrBlur(evt, { target, relatedTarget }) {\n        if (evt.name === 'mouseleave') {\n            // Don't act when the event does not concern a DOM element (e.g. a mouseleave out of an entire document),\n            if (!isElement(target)) {\n                return;\n            }\n            const balloonElement = this.balloonPanelView.element;\n            const isEnteringBalloon = balloonElement && (balloonElement === relatedTarget || balloonElement.contains(relatedTarget));\n            const isLeavingBalloon = !isEnteringBalloon && target === balloonElement;\n            // Do not hide the tooltip when the user moves the cursor over it.\n            if (isEnteringBalloon) {\n                this._unpinTooltipDebounced.cancel();\n                return;\n            }\n            // If a tooltip is currently visible, don't act for a targets other than the one it is attached to.\n            // The only exception is leaving balloon, in this scenario tooltip should be closed.\n            // For instance, a random mouseleave far away in the page should not unpin the tooltip that was pinned because\n            // of a previous focus. Only leaving the same element should hide the tooltip.\n            if (!isLeavingBalloon && this._currentElementWithTooltip && target !== this._currentElementWithTooltip) {\n                return;\n            }\n            const descendantWithTooltip = getDescendantWithTooltip(target);\n            const relatedDescendantWithTooltip = getDescendantWithTooltip(relatedTarget);\n            // Unpin when the mouse was leaving element with a tooltip to a place which does not have or has a different tooltip.\n            // Note that this should happen whether the tooltip is already visible or not, for instance,\n            // it could be invisible but queued (debounced): it should get canceled.\n            if (isLeavingBalloon || (descendantWithTooltip && descendantWithTooltip !== relatedDescendantWithTooltip)) {\n                this._unpinTooltipDebounced();\n            }\n        }\n        else {\n            // If a tooltip is currently visible, don't act for a targets other than the one it is attached to.\n            // For instance, a random blur in the web page should not unpin the tooltip that was pinned because of a previous mouseenter.\n            if (this._currentElementWithTooltip && target !== this._currentElementWithTooltip) {\n                return;\n            }\n            // Note that unpinning should happen whether the tooltip is already visible or not, for instance, it could be invisible but\n            // queued (debounced): it should get canceled (e.g. quick focus then quick blur using the keyboard).\n            this._unpinTooltipDebounced();\n        }\n    }\n    /**\n     * Handles hiding tooltips on `scroll` in DOM.\n     *\n     * @param evt An object containing information about the fired event.\n     * @param domEvent The DOM event.\n     */\n    _onScroll(evt, { target }) {\n        // No tooltip, no reason to react on scroll.\n        if (!this._currentElementWithTooltip) {\n            return;\n        }\n        // When scrolling a container that has both the balloon and the current element (common ancestor), the balloon can remain\n        // visible (e.g. scrolling ≤body>). Otherwise, to avoid glitches (clipping, lagging) better just hide the tooltip.\n        // Also, don't do anything when scrolling an unrelated DOM element that has nothing to do with the current element and the balloon.\n        if (target.contains(this.balloonPanelView.element) && target.contains(this._currentElementWithTooltip)) {\n            return;\n        }\n        this._unpinTooltip();\n    }\n    /**\n     * Pins the tooltip to a specific DOM element.\n     *\n     * @param options.text Text of the tooltip to display.\n     * @param options.position The position of the tooltip.\n     * @param options.cssClass Additional CSS class of the balloon with the tooltip.\n     */\n    _pinTooltip(targetDomElement, { text, position, cssClass }) {\n        this._unpinTooltip();\n        // Use the body collection of the first editor.\n        const bodyViewCollection = first(TooltipManager._editors.values()).ui.view.body;\n        if (!bodyViewCollection.has(this.balloonPanelView)) {\n            bodyViewCollection.add(this.balloonPanelView);\n        }\n        this.tooltipTextView.text = text;\n        this.balloonPanelView.class = [BALLOON_CLASS, cssClass]\n            .filter(className => className)\n            .join(' ');\n        // Ensure that all changes to the tooltip are set before pinning it.\n        // Setting class or text after pinning can cause the tooltip to be pinned in the wrong position.\n        // It happens especially often when tooltip has class modified (like adding `ck-tooltip_multi-line`).\n        // See https://github.com/ckeditor/ckeditor5/issues/16365\n        this.balloonPanelView.pin({\n            target: targetDomElement,\n            positions: TooltipManager.getPositioningFunctions(position)\n        });\n        this._mutationObserver.attach(targetDomElement);\n        // Start responding to changes in editor UI or content layout. For instance, when collaborators change content\n        // and a contextual toolbar attached to a content starts to move (and so should move the tooltip).\n        // Note: Using low priority to let other listeners that position contextual toolbars etc. to react first.\n        for (const editor of TooltipManager._editors) {\n            this.listenTo(editor.ui, 'update', this._updateTooltipPosition.bind(this), { priority: 'low' });\n        }\n        this._currentElementWithTooltip = targetDomElement;\n        this._currentTooltipPosition = position;\n    }\n    /**\n     * Unpins the tooltip and cancels all queued pinning.\n     */\n    _unpinTooltip() {\n        this._unpinTooltipDebounced.cancel();\n        this._pinTooltipDebounced.cancel();\n        this.balloonPanelView.unpin();\n        for (const editor of TooltipManager._editors) {\n            this.stopListening(editor.ui, 'update');\n        }\n        this._currentElementWithTooltip = null;\n        this._currentTooltipPosition = null;\n        this.tooltipTextView.text = '';\n        this._mutationObserver.detach();\n    }\n    /**\n     * Updates the position of the tooltip so it stays in sync with the element it is pinned to.\n     *\n     * Hides the tooltip when the element is no longer visible in DOM or the tooltip text was removed.\n     */\n    _updateTooltipPosition() {\n        // The tooltip might get removed by focus listener triggered by the same UI `update` event.\n        // See https://github.com/ckeditor/ckeditor5/pull/16363.\n        if (!this._currentElementWithTooltip) {\n            return;\n        }\n        const tooltipData = getTooltipData(this._currentElementWithTooltip);\n        // This could happen if the tooltip was attached somewhere in a contextual content toolbar and the toolbar\n        // disappeared (e.g. removed an image), or the tooltip text was removed.\n        if (!isVisible(this._currentElementWithTooltip) || !tooltipData.text) {\n            this._unpinTooltip();\n            return;\n        }\n        this.balloonPanelView.pin({\n            target: this._currentElementWithTooltip,\n            positions: TooltipManager.getPositioningFunctions(tooltipData.position)\n        });\n    }\n}\n/**\n * A set of default {@link module:utils/dom/position~PositioningFunction positioning functions} used by the `TooltipManager`\n * to pin tooltips in different positions.\n */\nTooltipManager.defaultBalloonPositions = BalloonPanelView.generatePositions({\n    heightOffset: 5,\n    sideOffset: 13\n});\n/**\n * A set of editors the single tooltip manager instance must listen to.\n * This is mostly to handle `EditorUI#update` listeners from individual editors.\n */\nTooltipManager._editors = new Set();\n/**\n * A reference to the `TooltipManager` instance. The class is a singleton and as such,\n * successive attempts at creating instances should return this instance.\n */\nTooltipManager._instance = null;\nexport default TooltipManager;\nfunction getDescendantWithTooltip(element) {\n    if (!isElement(element)) {\n        return null;\n    }\n    return element.closest('[data-cke-tooltip-text]:not([data-cke-tooltip-disabled])');\n}\nfunction getTooltipData(element) {\n    return {\n        text: element.dataset.ckeTooltipText,\n        position: (element.dataset.ckeTooltipPosition || 's'),\n        cssClass: element.dataset.ckeTooltipClass || ''\n    };\n}\n// Creates a simple `MutationObserver` instance wrapper that observes changes in the tooltip-related attributes of the given element.\n// Used instead of the `MutationObserver` from the engine for simplicity.\nfunction createMutationObserver(callback) {\n    const mutationObserver = new MutationObserver(() => {\n        callback();\n    });\n    return {\n        attach(element) {\n            mutationObserver.observe(element, {\n                attributes: true,\n                attributeFilter: ['data-cke-tooltip-text', 'data-cke-tooltip-position']\n            });\n        },\n        detach() {\n            mutationObserver.disconnect();\n        }\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { DomEmitterMixin, Rect, verifyLicense } from '@ckeditor/ckeditor5-utils';\nimport BalloonPanelView from '../panel/balloon/balloonpanelview.js';\nimport IconView from '../icon/iconview.js';\nimport View from '../view.js';\nimport { throttle } from 'lodash-es';\nimport poweredByIcon from '../../theme/icons/project-logo.svg';\nconst ICON_WIDTH = 53;\nconst ICON_HEIGHT = 10;\n// ⚠ Note, whenever changing the threshold, make sure to update the docs/support/managing-ckeditor-logo.md docs\n// as this information is also mentioned there ⚠.\nconst NARROW_ROOT_HEIGHT_THRESHOLD = 50;\nconst NARROW_ROOT_WIDTH_THRESHOLD = 350;\nconst DEFAULT_LABEL = 'Powered by';\n/**\n * A helper that enables the \"powered by\" feature in the editor and renders a link to the project's\n * webpage next to the bottom of the editable element (editor root, source editing area, etc.) when the editor is focused.\n *\n * @private\n */\nexport default class PoweredBy extends /* #__PURE__ */ DomEmitterMixin() {\n    /**\n     * Creates a \"powered by\" helper for a given editor. The feature is initialized on Editor#ready\n     * event.\n     *\n     * @param editor\n     */\n    constructor(editor) {\n        super();\n        this.editor = editor;\n        this._balloonView = null;\n        this._lastFocusedEditableElement = null;\n        this._showBalloonThrottled = throttle(this._showBalloon.bind(this), 50, { leading: true });\n        editor.on('ready', this._handleEditorReady.bind(this));\n    }\n    /**\n     * Destroys the \"powered by\" helper along with its view.\n     */\n    destroy() {\n        const balloon = this._balloonView;\n        if (balloon) {\n            // Balloon gets destroyed by the body collection.\n            // The powered by view gets destroyed by the balloon.\n            balloon.unpin();\n            this._balloonView = null;\n        }\n        this._showBalloonThrottled.cancel();\n        this.stopListening();\n    }\n    /**\n     * Enables \"powered by\" label once the editor (ui) is ready.\n     */\n    _handleEditorReady() {\n        const editor = this.editor;\n        const forceVisible = !!editor.config.get('ui.poweredBy.forceVisible');\n        /* istanbul ignore next -- @preserve */\n        if (!forceVisible && verifyLicense(editor.config.get('licenseKey')) === 'VALID') {\n            return;\n        }\n        // No view means no body collection to append the powered by balloon to.\n        if (!editor.ui.view) {\n            return;\n        }\n        editor.ui.focusTracker.on('change:isFocused', (evt, data, isFocused) => {\n            this._updateLastFocusedEditableElement();\n            if (isFocused) {\n                this._showBalloon();\n            }\n            else {\n                this._hideBalloon();\n            }\n        });\n        editor.ui.focusTracker.on('change:focusedElement', (evt, data, focusedElement) => {\n            this._updateLastFocusedEditableElement();\n            if (focusedElement) {\n                this._showBalloon();\n            }\n        });\n        editor.ui.on('update', () => {\n            this._showBalloonThrottled();\n        });\n    }\n    /**\n     * Creates an instance of the {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView balloon panel}\n     * with the \"powered by\" view inside ready for positioning.\n     */\n    _createBalloonView() {\n        const editor = this.editor;\n        const balloon = this._balloonView = new BalloonPanelView();\n        const poweredByConfig = getNormalizedConfig(editor);\n        const view = new PoweredByView(editor.locale, poweredByConfig.label);\n        balloon.content.add(view);\n        balloon.set({\n            class: 'ck-powered-by-balloon'\n        });\n        editor.ui.view.body.add(balloon);\n        this._balloonView = balloon;\n    }\n    /**\n     * Attempts to display the balloon with the \"powered by\" view.\n     */\n    _showBalloon() {\n        if (!this._lastFocusedEditableElement) {\n            return;\n        }\n        const attachOptions = getBalloonAttachOptions(this.editor, this._lastFocusedEditableElement);\n        if (attachOptions) {\n            if (!this._balloonView) {\n                this._createBalloonView();\n            }\n            this._balloonView.pin(attachOptions);\n        }\n    }\n    /**\n     * Hides the \"powered by\" balloon if already visible.\n     */\n    _hideBalloon() {\n        if (this._balloonView) {\n            this._balloonView.unpin();\n        }\n    }\n    /**\n     * Updates the {@link #_lastFocusedEditableElement} based on the state of the global focus tracker.\n     */\n    _updateLastFocusedEditableElement() {\n        const editor = this.editor;\n        const isFocused = editor.ui.focusTracker.isFocused;\n        const focusedElement = editor.ui.focusTracker.focusedElement;\n        if (!isFocused || !focusedElement) {\n            this._lastFocusedEditableElement = null;\n            return;\n        }\n        const editableEditorElements = Array.from(editor.ui.getEditableElementsNames()).map(name => {\n            return editor.ui.getEditableElement(name);\n        });\n        if (editableEditorElements.includes(focusedElement)) {\n            this._lastFocusedEditableElement = focusedElement;\n        }\n        else {\n            // If it's none of the editable element, then the focus is somewhere in the UI. Let's display powered by\n            // over the first element then.\n            this._lastFocusedEditableElement = editableEditorElements[0];\n        }\n    }\n}\n/**\n * A view displaying a \"powered by\" label and project logo wrapped in a link.\n */\nclass PoweredByView extends View {\n    /**\n     * Created an instance of the \"powered by\" view.\n     *\n     * @param locale The localization services instance.\n     * @param label The label text.\n     */\n    constructor(locale, label) {\n        super(locale);\n        const iconView = new IconView();\n        const bind = this.bindTemplate;\n        iconView.set({\n            content: poweredByIcon,\n            isColorInherited: false\n        });\n        iconView.extendTemplate({\n            attributes: {\n                style: {\n                    width: ICON_WIDTH + 'px',\n                    height: ICON_HEIGHT + 'px'\n                }\n            }\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: ['ck', 'ck-powered-by'],\n                'aria-hidden': true\n            },\n            children: [\n                {\n                    tag: 'a',\n                    attributes: {\n                        href: 'https://ckeditor.com/powered-by-ckeditor/?utm_source=ckeditor&' +\n                            'utm_medium=referral&utm_campaign=701Dn000000hVgmIAE_powered_by_ckeditor_logo',\n                        target: '_blank',\n                        tabindex: '-1'\n                    },\n                    children: [\n                        ...label ? [\n                            {\n                                tag: 'span',\n                                attributes: {\n                                    class: ['ck', 'ck-powered-by__label']\n                                },\n                                children: [label]\n                            }\n                        ] : [],\n                        iconView\n                    ],\n                    on: {\n                        dragstart: bind.to(evt => evt.preventDefault())\n                    }\n                }\n            ]\n        });\n    }\n}\nfunction getBalloonAttachOptions(editor, focusedEditableElement) {\n    const poweredByConfig = getNormalizedConfig(editor);\n    const positioningFunction = poweredByConfig.side === 'right' ?\n        getLowerRightCornerPosition(focusedEditableElement, poweredByConfig) :\n        getLowerLeftCornerPosition(focusedEditableElement, poweredByConfig);\n    return {\n        target: focusedEditableElement,\n        positions: [positioningFunction]\n    };\n}\nfunction getLowerRightCornerPosition(focusedEditableElement, config) {\n    return getLowerCornerPosition(focusedEditableElement, config, (rootRect, balloonRect) => {\n        return rootRect.left + rootRect.width - balloonRect.width - config.horizontalOffset;\n    });\n}\nfunction getLowerLeftCornerPosition(focusedEditableElement, config) {\n    return getLowerCornerPosition(focusedEditableElement, config, rootRect => rootRect.left + config.horizontalOffset);\n}\nfunction getLowerCornerPosition(focusedEditableElement, config, getBalloonLeft) {\n    return (visibleEditableElementRect, balloonRect) => {\n        const editableElementRect = new Rect(focusedEditableElement);\n        if (editableElementRect.width < NARROW_ROOT_WIDTH_THRESHOLD || editableElementRect.height < NARROW_ROOT_HEIGHT_THRESHOLD) {\n            return null;\n        }\n        let balloonTop;\n        if (config.position === 'inside') {\n            balloonTop = editableElementRect.bottom - balloonRect.height;\n        }\n        else {\n            balloonTop = editableElementRect.bottom - balloonRect.height / 2;\n        }\n        balloonTop -= config.verticalOffset;\n        const balloonLeft = getBalloonLeft(editableElementRect, balloonRect);\n        // Clone the editable element rect and place it where the balloon would be placed.\n        // This will allow getVisible() to work from editable element's perspective (rect source).\n        // and yield a result as if the balloon was on the same (scrollable) layer as the editable element.\n        const newBalloonPositionRect = visibleEditableElementRect\n            .clone()\n            .moveTo(balloonLeft, balloonTop)\n            .getIntersection(balloonRect.clone().moveTo(balloonLeft, balloonTop));\n        const newBalloonPositionVisibleRect = newBalloonPositionRect.getVisible();\n        if (!newBalloonPositionVisibleRect || newBalloonPositionVisibleRect.getArea() < balloonRect.getArea()) {\n            return null;\n        }\n        return {\n            top: balloonTop,\n            left: balloonLeft,\n            name: `position_${config.position}-side_${config.side}`,\n            config: {\n                withArrow: false\n            }\n        };\n    };\n}\nfunction getNormalizedConfig(editor) {\n    const userConfig = editor.config.get('ui.poweredBy');\n    const position = userConfig && userConfig.position || 'border';\n    return {\n        position,\n        label: DEFAULT_LABEL,\n        verticalOffset: position === 'inside' ? 5 : 0,\n        horizontalOffset: 5,\n        side: editor.locale.contentLanguageDirection === 'ltr' ? 'right' : 'left',\n        ...userConfig\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module utils/verifylicense\n */\nimport { releaseDate } from './version.js';\n/**\n * Checks whether the given string contains information that allows you to verify the license status.\n *\n * @param token The string to check.\n * @returns String that represents the state of given `token` parameter.\n */\nexport default function verifyLicense(token) {\n    // This function implements naive and partial license key check mechanism,\n    // used only to decide whether to show or hide the \"Powered by CKEditor\" logo.\n    //\n    // You can read the reasoning behind showing the logo to unlicensed (GPL) users\n    // in this thread: https://github.com/ckeditor/ckeditor5/issues/14082.\n    //\n    // We firmly believe in the values behind creating open-source software, even when that\n    // means keeping the license verification logic open for everyone to see.\n    //\n    // Please keep this code intact. Thank you for your understanding.\n    function oldTokenCheck(token) {\n        if (token.length >= 40 && token.length <= 255) {\n            return 'VALID';\n        }\n        else {\n            return 'INVALID';\n        }\n    }\n    // TODO: issue ci#3175\n    if (!token) {\n        return 'INVALID';\n    }\n    let decryptedData = '';\n    try {\n        decryptedData = atob(token);\n    }\n    catch (e) {\n        return 'INVALID';\n    }\n    const splittedDecryptedData = decryptedData.split('-');\n    const firstElement = splittedDecryptedData[0];\n    const secondElement = splittedDecryptedData[1];\n    if (!secondElement) {\n        return oldTokenCheck(token);\n    }\n    try {\n        atob(secondElement);\n    }\n    catch (e) {\n        try {\n            atob(firstElement);\n            if (!atob(firstElement).length) {\n                return oldTokenCheck(token);\n            }\n        }\n        catch (e) {\n            return oldTokenCheck(token);\n        }\n    }\n    if (firstElement.length < 40 || firstElement.length > 255) {\n        return 'INVALID';\n    }\n    let decryptedSecondElement = '';\n    try {\n        atob(firstElement);\n        decryptedSecondElement = atob(secondElement);\n    }\n    catch (e) {\n        return 'INVALID';\n    }\n    if (decryptedSecondElement.length !== 8) {\n        return 'INVALID';\n    }\n    const year = Number(decryptedSecondElement.substring(0, 4));\n    const monthIndex = Number(decryptedSecondElement.substring(4, 6)) - 1;\n    const day = Number(decryptedSecondElement.substring(6, 8));\n    const date = new Date(year, monthIndex, day);\n    if (date < releaseDate || isNaN(Number(date))) {\n        return 'INVALID';\n    }\n    return 'VALID';\n}\n", "export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"53\\\" height=\\\"10\\\" viewBox=\\\"0 0 53 10\\\"><path fill=\\\"#1C2331\\\" d=\\\"M31.724 1.492a15.139 15.139 0 0 0 .045 1.16 2.434 2.434 0 0 0-.687-.34 3.68 3.68 0 0 0-1.103-.166 2.332 2.332 0 0 0-1.14.255 1.549 1.549 0 0 0-.686.87c-.15.41-.225.98-.225 1.712 0 .939.148 1.659.444 2.161.297.503.792.754 1.487.754.452.015.9-.094 1.294-.316.296-.174.557-.4.771-.669l.14.852h1.282V.007h-1.623v1.485ZM31 6.496a1.77 1.77 0 0 1-.494.061.964.964 0 0 1-.521-.127.758.758 0 0 1-.296-.466 3.984 3.984 0 0 1-.093-.992 4.208 4.208 0 0 1 .098-1.052.753.753 0 0 1 .307-.477 1.08 1.08 0 0 1 .55-.122c.233-.004.466.026.69.089l.483.144v2.553c-.11.076-.213.143-.307.2a1.73 1.73 0 0 1-.417.189ZM35.68 0l-.702.004c-.322.002-.482.168-.48.497l.004.581c.002.33.164.493.486.49l.702-.004c.322-.002.481-.167.48-.496L36.165.49c-.002-.33-.164-.493-.486-.491ZM36.145 2.313l-1.612.01.034 5.482 1.613-.01-.035-5.482ZM39.623.79 37.989.8 38 2.306l-.946.056.006 1.009.949-.006.024 2.983c.003.476.143.844.419 1.106.275.26.658.39 1.148.387.132 0 .293-.01.483-.03.19-.02.38-.046.57-.08.163-.028.324-.068.482-.119l-.183-1.095-.702.004a.664.664 0 0 1-.456-.123.553.553 0 0 1-.14-.422l-.016-2.621 1.513-.01-.006-1.064-1.514.01-.01-1.503ZM46.226 2.388c-.41-.184-.956-.274-1.636-.27-.673.004-1.215.101-1.627.29-.402.179-.72.505-.888.91-.18.419-.268.979-.264 1.68.004.688.1 1.24.285 1.655.172.404.495.724.9.894.414.18.957.268 1.63.264.68-.004 1.224-.099 1.632-.284.4-.176.714-.501.878-.905.176-.418.263-.971.258-1.658-.004-.702-.097-1.261-.28-1.677a1.696 1.696 0 0 0-.888-.9Zm-.613 3.607a.77.77 0 0 1-.337.501 1.649 1.649 0 0 1-1.317.009.776.776 0 0 1-.343-.497 4.066 4.066 0 0 1-.105-1.02 4.136 4.136 0 0 1 .092-1.03.786.786 0 0 1 .337-.507 1.59 1.59 0 0 1 1.316-.008.79.79 0 0 1 .344.502c.078.337.113.683.105 1.03.012.343-.019.685-.092 1.02ZM52.114 2.07a2.67 2.67 0 0 0-1.128.278c-.39.191-.752.437-1.072.73l-.157-.846-1.273.008.036 5.572 1.623-.01-.024-3.78c.35-.124.646-.22.887-.286.26-.075.53-.114.8-.118l.45-.003.144-1.546-.286.001ZM22.083 7.426l-1.576-2.532a2.137 2.137 0 0 0-.172-.253 1.95 1.95 0 0 0-.304-.29.138.138 0 0 1 .042-.04 1.7 1.7 0 0 0 .328-.374l1.75-2.71c.01-.015.025-.028.024-.048-.01-.01-.021-.007-.031-.007L20.49 1.17a.078.078 0 0 0-.075.045l-.868 1.384c-.23.366-.46.732-.688 1.099a.108.108 0 0 1-.112.06c-.098-.005-.196-.001-.294-.002-.018 0-.038.006-.055-.007.002-.02.002-.039.005-.058a4.6 4.6 0 0 0 .046-.701V1.203c0-.02-.009-.032-.03-.03h-.033L16.93 1.17c-.084 0-.073-.01-.073.076v6.491c-.001.018.006.028.025.027h1.494c.083 0 .072.007.072-.071v-2.19c0-.055-.003-.11-.004-.166a3.366 3.366 0 0 0-.05-.417h.06c.104 0 .209.002.313-.002a.082.082 0 0 1 .084.05c.535.913 1.07 1.824 1.607 2.736a.104.104 0 0 0 .103.062c.554-.003 1.107-.002 1.66-.002l.069-.003-.019-.032-.188-.304ZM27.112 6.555c-.005-.08-.004-.08-.082-.08h-2.414c-.053 0-.106-.003-.159-.011a.279.279 0 0 1-.246-.209.558.558 0 0 1-.022-.15c0-.382 0-.762-.002-1.143 0-.032.007-.049.042-.044h2.504c.029.003.037-.012.034-.038V3.814c0-.089.013-.078-.076-.078h-2.44c-.07 0-.062.003-.062-.06v-.837c0-.047.004-.093.013-.14a.283.283 0 0 1 .241-.246.717.717 0 0 1 .146-.011h2.484c.024.002.035-.009.036-.033l.003-.038.03-.496c.01-.183.024-.365.034-.548.005-.085.003-.087-.082-.094-.218-.018-.437-.038-.655-.05a17.845 17.845 0 0 0-.657-.026 72.994 72.994 0 0 0-1.756-.016 1.7 1.7 0 0 0-.471.064 1.286 1.286 0 0 0-.817.655c-.099.196-.149.413-.145.633v3.875c0 .072.003.144.011.216a1.27 1.27 0 0 0 .711 1.029c.228.113.48.167.734.158.757-.005 1.515.002 2.272-.042.274-.016.548-.034.82-.053.03-.002.043-.008.04-.041-.008-.104-.012-.208-.019-.312a69.964 69.964 0 0 1-.05-.768ZM16.14 7.415l-.127-1.075c-.004-.03-.014-.04-.044-.037a13.125 13.125 0 0 1-.998.073c-.336.01-.672.02-1.008.016-.116-.001-.233-.014-.347-.039a.746.746 0 0 1-.45-.262c-.075-.1-.132-.211-.167-.33a3.324 3.324 0 0 1-.126-.773 9.113 9.113 0 0 1-.015-.749c0-.285.022-.57.065-.852.023-.158.066-.312.127-.46a.728.728 0 0 1 .518-.443 1.64 1.64 0 0 1 .397-.048c.628-.001 1.255.003 1.882.05.022.001.033-.006.036-.026l.003-.031.06-.55c.019-.177.036-.355.057-.532.004-.034-.005-.046-.04-.056a5.595 5.595 0 0 0-1.213-.21 10.783 10.783 0 0 0-.708-.02c-.24-.003-.48.01-.719.041a3.477 3.477 0 0 0-.625.14 1.912 1.912 0 0 0-.807.497c-.185.2-.33.433-.424.688a4.311 4.311 0 0 0-.24 1.096c-.031.286-.045.572-.042.86-.006.43.024.86.091 1.286.04.25.104.497.193.734.098.279.26.53.473.734.214.205.473.358.756.446.344.11.702.17 1.063.177a8.505 8.505 0 0 0 1.578-.083 6.11 6.11 0 0 0 .766-.18c.03-.008.047-.023.037-.057a.157.157 0 0 1-.003-.025Z\\\"/><path fill=\\\"#AFE229\\\" d=\\\"M6.016 6.69a1.592 1.592 0 0 0-.614.21c-.23.132-.422.32-.56.546-.044.072-.287.539-.287.539l-.836 1.528.009.006c.038.025.08.046.123.063.127.046.26.07.395.073.505.023 1.011-.007 1.517-.003.29.009.58.002.869-.022a.886.886 0 0 0 .395-.116.962.962 0 0 0 .312-.286c.056-.083.114-.163.164-.249.24-.408.48-.816.718-1.226.075-.128.148-.257.222-.386l.112-.192a1.07 1.07 0 0 0 .153-.518l-1.304.023s-1.258-.005-1.388.01Z\\\"/><path fill=\\\"#771BFF\\\" d=\\\"m2.848 9.044.76-1.39.184-.352c-.124-.067-.245-.14-.367-.21-.346-.204-.706-.384-1.045-.6a.984.984 0 0 1-.244-.207c-.108-.134-.136-.294-.144-.46-.021-.409-.002-.818-.009-1.227-.003-.195 0-.39.003-.585.004-.322.153-.553.427-.713l.833-.488c.22-.13.44-.257.662-.385.05-.029.105-.052.158-.077.272-.128.519-.047.76.085l.044.028c.123.06.242.125.358.196.318.178.635.357.952.537.095.056.187.117.275.184.194.144.254.35.266.578.016.284.007.569.006.853-.001.28.004.558 0 .838.592-.003 1.259 0 1.259 0l.723-.013c-.003-.292-.007-.584-.007-.876 0-.524.015-1.048-.016-1.571-.024-.42-.135-.8-.492-1.067a5.02 5.02 0 0 0-.506-.339A400.52 400.52 0 0 0 5.94.787C5.722.664 5.513.524 5.282.423 5.255.406 5.228.388 5.2.373 4.758.126 4.305-.026 3.807.21c-.097.046-.197.087-.29.14A699.896 699.896 0 0 0 .783 1.948c-.501.294-.773.717-.778 1.31-.004.36-.009.718-.001 1.077.016.754-.017 1.508.024 2.261.016.304.07.6.269.848.127.15.279.28.448.382.622.4 1.283.734 1.92 1.11l.183.109Z\\\"/></svg>\\n\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport View from './view.js';\nimport '../theme/components/arialiveannouncer/arialiveannouncer.css';\n/**\n * The politeness level of an `aria-live` announcement.\n *\n * Available keys are:\n * * `AriaLiveAnnouncerPoliteness.POLITE`,\n * * `AriaLiveAnnouncerPoliteness.ASSERTIVE`\n *\n * [Learn more](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions#Politeness_levels).\n */\nexport const AriaLiveAnnouncerPoliteness = {\n    POLITE: 'polite',\n    ASSERTIVE: 'assertive'\n};\n/**\n * An accessibility helper that manages all ARIA live regions associated with an editor instance. ARIA live regions announce changes\n * to the state of the editor features.\n *\n * These announcements are consumed and propagated by screen readers and give users a better understanding of the current\n * state of the editor.\n *\n * To announce a state change to an editor use the {@link #announce} method:\n *\n * ```ts\n * editor.ui.ariaLiveAnnouncer.announce( 'Text of an announcement.' );\n * ```\n */\nexport default class AriaLiveAnnouncer {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        this.editor = editor;\n        /**\n         * Some screen readers only look at changes in the aria-live region.\n         * They might not read a region that already has content when it is added.\n         * To stop this problem, make sure to set up regions for all politeness settings when the editor starts.\n         */\n        editor.once('ready', () => {\n            for (const politeness of Object.values(AriaLiveAnnouncerPoliteness)) {\n                this.announce('', politeness);\n            }\n        });\n    }\n    /**\n     * Sets an announcement text to an aria region that is then announced by a screen reader to the user.\n     *\n     * If the aria region of a specified politeness does not exist, it will be created and can be re-used later.\n     *\n     * The default announcement politeness level is `'polite'`.\n     *\n     * ```ts\n     * // Most screen readers will queue announcements from multiple aria-live regions and read them out in the order they were emitted.\n     * editor.ui.ariaLiveAnnouncer.announce( 'Image uploaded.' );\n     * editor.ui.ariaLiveAnnouncer.announce( 'Connection lost. Reconnecting.' );\n     * ```\n     */\n    announce(announcement, attributes = AriaLiveAnnouncerPoliteness.POLITE) {\n        const editor = this.editor;\n        if (!editor.ui.view) {\n            return;\n        }\n        if (!this.view) {\n            this.view = new AriaLiveAnnouncerView(editor.locale);\n            editor.ui.view.body.add(this.view);\n        }\n        const { politeness, isUnsafeHTML } = typeof attributes === 'string' ? {\n            politeness: attributes\n        } : attributes;\n        let politenessRegionView = this.view.regionViews.find(view => view.politeness === politeness);\n        if (!politenessRegionView) {\n            politenessRegionView = new AriaLiveAnnouncerRegionView(editor, politeness);\n            this.view.regionViews.add(politenessRegionView);\n        }\n        politenessRegionView.announce({\n            announcement,\n            isUnsafeHTML\n        });\n    }\n}\n/**\n * The view that aggregates all `aria-live` regions.\n */\nexport class AriaLiveAnnouncerView extends View {\n    constructor(locale) {\n        super(locale);\n        this.regionViews = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-aria-live-announcer'\n                ]\n            },\n            children: this.regionViews\n        });\n    }\n}\n/**\n * The view that represents a single `aria-live`.\n */\nexport class AriaLiveAnnouncerRegionView extends View {\n    constructor(editor, politeness) {\n        super(editor.locale);\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                'aria-live': politeness,\n                'aria-relevant': 'additions'\n            },\n            children: [\n                {\n                    tag: 'ul',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-aria-live-region-list'\n                        ]\n                    }\n                }\n            ]\n        });\n        editor.on('destroy', () => {\n            if (this._pruneAnnouncementsInterval !== null) {\n                clearInterval(this._pruneAnnouncementsInterval);\n                this._pruneAnnouncementsInterval = null;\n            }\n        });\n        this.politeness = politeness;\n        this._domConverter = editor.data.htmlProcessor.domConverter;\n        this._pruneAnnouncementsInterval = setInterval(() => {\n            if (this.element && this._listElement.firstChild) {\n                this._listElement.firstChild.remove();\n            }\n        }, 5000);\n    }\n    /**\n     * Appends new announcement to region.\n     */\n    announce({ announcement, isUnsafeHTML }) {\n        if (!announcement.trim().length) {\n            return;\n        }\n        const messageListItem = document.createElement('li');\n        if (isUnsafeHTML) {\n            this._domConverter.setContentOf(messageListItem, announcement);\n        }\n        else {\n            messageListItem.innerText = announcement;\n        }\n        this._listElement.appendChild(messageListItem);\n    }\n    /**\n     * Return current announcements list HTML element.\n     */\n    get _listElement() {\n        return this.element.querySelector('ul');\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport ListItemView from '../list/listitemview.js';\nimport '../../theme/components/menubar/menubarmenulistitem.css';\n/**\n * A menu bar list item view, a child of {@link module:ui/menubar/menubarmenulistview~MenuBarMenuListView}.\n *\n * Populate this item with a {@link module:ui/menubar/menubarmenulistitembuttonview~MenuBarMenuListItemButtonView} instance\n * or a {@link module:ui/menubar/menubarmenuview~MenuBarMenuView} instance to create a sub-menu.\n */\nexport default class MenuBarMenuListItemView extends ListItemView {\n    /**\n     * Creates an instance of the list item view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale, parentMenuView) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-menu-bar__menu__item'\n                ]\n            },\n            on: {\n                'mouseenter': bind.to('mouseenter')\n            }\n        });\n        this.delegate('mouseenter').to(parentMenuView);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/menubar/utils\n */\nimport MenuBarMenuListItemView from './menubarmenulistitemview.js';\nimport clickOutsideHandler from '../bindings/clickoutsidehandler.js';\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\nimport { cloneDeep } from 'lodash-es';\nconst NESTED_PANEL_HORIZONTAL_OFFSET = 5;\n/**\n * Behaviors of the {@link module:ui/menubar/menubarview~MenuBarView} component.\n */\nexport const MenuBarBehaviors = {\n    /**\n     * When the bar is already open:\n     * * Opens the menu when the user hovers over its button.\n     * * Closes open menu when another menu's button gets hovered.\n     */\n    toggleMenusAndFocusItemsOnHover(menuBarView) {\n        menuBarView.on('menu:mouseenter', evt => {\n            // This behavior should be activated when one of condition is present:\n            // 1. The user opened any submenu of menubar and hover over items in the menu bar.\n            // 2. The user focused whole menubar using keyboard interaction and enabled focus borders and hover over items in the menu bar.\n            if (!menuBarView.isFocusBorderEnabled && !menuBarView.isOpen) {\n                return;\n            }\n            if (menuBarView.isOpen) {\n                for (const menuView of menuBarView.menus) {\n                    // @if CK_DEBUG_MENU_BAR // const wasOpen = menuView.isOpen;\n                    const pathLeaf = evt.path[0];\n                    const isListItemContainingMenu = pathLeaf instanceof MenuBarMenuListItemView && pathLeaf.children.first === menuView;\n                    menuView.isOpen = (evt.path.includes(menuView) || isListItemContainingMenu) && menuView.isEnabled;\n                    // @if CK_DEBUG_MENU_BAR // if ( wasOpen !== menuView.isOpen ) {\n                    // @if CK_DEBUG_MENU_BAR // console.log( '[BEHAVIOR] toggleMenusAndFocusItemsOnHover(): Toggle',\n                    // @if CK_DEBUG_MENU_BAR // \tlogMenu( menuView ), 'isOpen', menuView.isOpen\n                    // @if CK_DEBUG_MENU_BAR // );\n                    // @if CK_DEBUG_MENU_BAR // }\n                }\n            }\n            evt.source.focus();\n        });\n    },\n    /**\n     * Moves between top-level menus using the arrow left and right keys.\n     *\n     * If the menubar has already been open, the arrow keys move focus between top-level menu buttons and open them.\n     * If the menubar is closed, the arrow keys only move focus between top-level menu buttons.\n     */\n    focusCycleMenusOnArrows(menuBarView) {\n        const isContentRTL = menuBarView.locale.uiLanguageDirection === 'rtl';\n        menuBarView.on('menu:arrowright', evt => {\n            cycleTopLevelMenus(evt.source, isContentRTL ? -1 : 1);\n        });\n        menuBarView.on('menu:arrowleft', evt => {\n            cycleTopLevelMenus(evt.source, isContentRTL ? 1 : -1);\n        });\n        function cycleTopLevelMenus(currentMenuView, step) {\n            const currentIndex = menuBarView.children.getIndex(currentMenuView);\n            const isCurrentMenuViewOpen = currentMenuView.isOpen;\n            const menusCount = menuBarView.children.length;\n            const menuViewToOpen = menuBarView.children.get((currentIndex + menusCount + step) % menusCount);\n            currentMenuView.isOpen = false;\n            if (isCurrentMenuViewOpen) {\n                menuViewToOpen.isOpen = true;\n            }\n            menuViewToOpen.buttonView.focus();\n        }\n    },\n    /**\n     * Closes the entire sub-menu structure when the bar is closed. This prevents sub-menus from being open if the user\n     * closes the entire bar, and then re-opens some top-level menu.\n     */\n    closeMenusWhenTheBarCloses(menuBarView) {\n        menuBarView.on('change:isOpen', () => {\n            if (!menuBarView.isOpen) {\n                menuBarView.menus.forEach(menuView => {\n                    menuView.isOpen = false;\n                    // @if CK_DEBUG_MENU_BAR // console.log( '[BEHAVIOR] closeMenusWhenTheBarCloses(): Closing', logMenu( menuView ) );\n                });\n            }\n        });\n    },\n    /**\n     * Handles the following case:\n     * 1. Hover to open a sub-menu (A). The button has focus.\n     * 2. Press arrow up/down to move focus to another sub-menu (B) button.\n     * 3. Press arrow right to open the sub-menu (B).\n     * 4. The sub-menu (A) should close as it would with `toggleMenusAndFocusItemsOnHover()`.\n     */\n    closeMenuWhenAnotherOnTheSameLevelOpens(menuBarView) {\n        menuBarView.on('menu:change:isOpen', (evt, name, isOpen) => {\n            if (isOpen) {\n                menuBarView.menus\n                    .filter(menuView => {\n                    return evt.source.parentMenuView === menuView.parentMenuView &&\n                        evt.source !== menuView &&\n                        menuView.isOpen;\n                }).forEach(menuView => {\n                    menuView.isOpen = false;\n                    // @if CK_DEBUG_MENU_BAR // console.log( '[BEHAVIOR] closeMenuWhenAnotherOpens(): Closing', logMenu( menuView ) );\n                });\n            }\n        });\n    },\n    /**\n     * Closes the bar when the user clicked outside of it (page body, editor root, etc.).\n     */\n    closeOnClickOutside(menuBarView) {\n        clickOutsideHandler({\n            emitter: menuBarView,\n            activator: () => menuBarView.isOpen,\n            callback: () => menuBarView.close(),\n            contextElements: () => menuBarView.children.map(child => child.element)\n        });\n    },\n    /**\n     * Tracks the keyboard focus interaction on the menu bar view. It is used to determine if the nested items\n     * of the menu bar should render focus rings after first interaction with the keyboard.\n     */\n    enableFocusHighlightOnInteraction(menuBarView) {\n        let isKeyPressed = false;\n        menuBarView.on('change:isOpen', (_, evt, isOpen) => {\n            if (!isOpen) {\n                // Keep the focus border if the menu bar was closed by a keyboard interaction (Esc key).\n                // The user remains in the keyboard navigation mode and can traverse the main categories.\n                // See https://github.com/ckeditor/ckeditor5/issues/16719.\n                if (!isKeyPressed) {\n                    menuBarView.isFocusBorderEnabled = false;\n                }\n                // Reset the flag when the menu bar is closed, menu items tend to intercept `keyup` event\n                // and sometimes, after pressing `enter` on focused item, `isKeyPressed` stuck in `true` state.\n                isKeyPressed = false;\n            }\n        });\n        menuBarView.listenTo(menuBarView.element, 'keydown', () => {\n            isKeyPressed = true;\n        }, { useCapture: true });\n        menuBarView.listenTo(menuBarView.element, 'keyup', () => {\n            isKeyPressed = false;\n        }, { useCapture: true });\n        menuBarView.listenTo(menuBarView.element, 'focus', () => {\n            if (isKeyPressed) {\n                menuBarView.isFocusBorderEnabled = true;\n            }\n        }, { useCapture: true });\n    }\n};\n/**\n * Behaviors of the {@link module:ui/menubar/menubarmenuview~MenuBarMenuView} component.\n */\nexport const MenuBarMenuBehaviors = {\n    /**\n     * If the button of the menu is focused, pressing the arrow down key should open the panel and focus it.\n     * This is analogous to the {@link module:ui/dropdown/dropdownview~DropdownView}.\n     */\n    openAndFocusPanelOnArrowDownKey(menuView) {\n        menuView.keystrokes.set('arrowdown', (data, cancel) => {\n            if (menuView.focusTracker.focusedElement === menuView.buttonView.element) {\n                if (!menuView.isOpen) {\n                    menuView.isOpen = true;\n                }\n                menuView.panelView.focus();\n                cancel();\n            }\n        });\n    },\n    /**\n     * Open the menu on the right arrow key press. This allows for navigating to sub-menus using the keyboard.\n     */\n    openOnArrowRightKey(menuView) {\n        const keystroke = menuView.locale.uiLanguageDirection === 'rtl' ? 'arrowleft' : 'arrowright';\n        menuView.keystrokes.set(keystroke, (data, cancel) => {\n            if (menuView.focusTracker.focusedElement !== menuView.buttonView.element || !menuView.isEnabled) {\n                return;\n            }\n            // @if CK_DEBUG_MENU_BAR // console.log( '[BEHAVIOR] openOnArrowRightKey(): Opening', logMenu( menuView ) );\n            if (!menuView.isOpen) {\n                menuView.isOpen = true;\n            }\n            menuView.panelView.focus();\n            cancel();\n        });\n    },\n    /**\n     * Opens the menu on its button click. Note that this behavior only opens but never closes the menu (unlike\n     * {@link module:ui/dropdown/dropdownview~DropdownView}).\n     */\n    openOnButtonClick(menuView) {\n        menuView.buttonView.on('execute', () => {\n            menuView.isOpen = true;\n        });\n    },\n    /**\n     * Toggles the menu on its button click. This behavior is analogous to {@link module:ui/dropdown/dropdownview~DropdownView}.\n     */\n    toggleOnButtonClick(menuView) {\n        menuView.buttonView.on('execute', () => {\n            menuView.isOpen = !menuView.isOpen;\n        });\n    },\n    /**\n     * Opens the menu and focuses the panel content upon pressing the Enter key.\n     */\n    openAndFocusOnEnterKeyPress(menuView) {\n        menuView.keystrokes.set('enter', (data, cancel) => {\n            // Engage only for Enter key press when the button is focused. The panel can contain\n            // other UI components and features that rely on the Enter key press.\n            if (menuView.focusTracker.focusedElement !== menuView.buttonView.element) {\n                return;\n            }\n            menuView.isOpen = true;\n            menuView.panelView.focus();\n            cancel();\n        });\n    },\n    /**\n     * Closes the menu on the right left key press. This allows for navigating to sub-menus using the keyboard.\n     */\n    closeOnArrowLeftKey(menuView) {\n        const keystroke = menuView.locale.uiLanguageDirection === 'rtl' ? 'arrowright' : 'arrowleft';\n        menuView.keystrokes.set(keystroke, (data, cancel) => {\n            if (menuView.isOpen) {\n                menuView.isOpen = false;\n                menuView.focus();\n                cancel();\n            }\n        });\n    },\n    /**\n     * Closes the menu on the esc key press. This allows for navigating to sub-menus using the keyboard.\n     */\n    closeOnEscKey(menuView) {\n        menuView.keystrokes.set('esc', (data, cancel) => {\n            if (menuView.isOpen) {\n                menuView.isOpen = false;\n                menuView.focus();\n                cancel();\n            }\n        });\n    },\n    /**\n     * Closes the menu when its parent menu also closed. This prevents from orphaned open menus when the parent menu re-opens.\n     */\n    closeOnParentClose(menuView) {\n        menuView.parentMenuView.on('change:isOpen', (evt, name, isOpen) => {\n            if (!isOpen && evt.source === menuView.parentMenuView) {\n                // @if CK_DEBUG_MENU_BAR // console.log( '[BEHAVIOR] closeOnParentClose(): Closing', logMenu( menuView ) );\n                menuView.isOpen = false;\n            }\n        });\n    }\n};\n// @if CK_DEBUG_MENU_BAR // function logMenu( menuView: MenuBarMenuView ) {\n// @if CK_DEBUG_MENU_BAR //\treturn `\"${ menuView.buttonView.label }\"`;\n// @if CK_DEBUG_MENU_BAR // }\n/**\n * Contains every positioning function used by {@link module:ui/menubar/menubarmenuview~MenuBarMenuView} that decides where the\n * {@link module:ui/menubar/menubarmenuview~MenuBarMenuView#panelView} should be placed.\n *\n * Top-level menu positioning functions:\n *\n *\t┌──────┐\n *\t│      │\n *\t├──────┴────────┐\n *\t│               │\n *\t│               │\n *\t│               │\n *\t│            SE │\n *\t└───────────────┘\n *\n *\t         ┌──────┐\n *\t         │      │\n *\t┌────────┴──────┤\n *\t│               │\n *\t│               │\n *\t│               │\n *\t│ SW            │\n *\t└───────────────┘\n *\n *\t┌───────────────┐\n *\t│ NW            │\n *\t│               │\n *\t│               │\n *\t│               │\n *\t└────────┬──────┤\n *\t         │      │\n *\t         └──────┘\n *\n *\t┌───────────────┐\n *\t│            NE │\n *\t│               │\n *\t│               │\n *\t│               │\n *\t├──────┬────────┘\n *\t│      │\n *\t└──────┘\n *\n * Sub-menu positioning functions:\n *\n *\t┌──────┬───────────────┐\n *\t│      │               │\n *\t└──────┤               │\n *\t       │               │\n *\t       │            ES │\n *\t       └───────────────┘\n *\n *\t┌───────────────┬──────┐\n *\t│               │      │\n *\t│               ├──────┘\n *\t│               │\n *\t│ WS            │\n *\t└───────────────┘\n *\n *\t       ┌───────────────┐\n *\t       │            EN │\n *\t       │               │\n *\t┌──────┤               │\n *\t│      │               │\n *\t└──────┴───────────────┘\n *\n *\t┌───────────────┐\n *\t│ WN            │\n *\t│               │\n *\t│               ├──────┐\n *\t│               │      │\n *\t└───────────────┴──────┘\n */\nexport const MenuBarMenuViewPanelPositioningFunctions = {\n    southEast: buttonRect => {\n        return {\n            top: buttonRect.bottom,\n            left: buttonRect.left,\n            name: 'se'\n        };\n    },\n    southWest: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.bottom,\n            left: buttonRect.left - panelRect.width + buttonRect.width,\n            name: 'sw'\n        };\n    },\n    northEast: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left,\n            name: 'ne'\n        };\n    },\n    northWest: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left - panelRect.width + buttonRect.width,\n            name: 'nw'\n        };\n    },\n    eastSouth: buttonRect => {\n        return {\n            top: buttonRect.top,\n            left: buttonRect.right - NESTED_PANEL_HORIZONTAL_OFFSET,\n            name: 'es'\n        };\n    },\n    eastNorth: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.right - NESTED_PANEL_HORIZONTAL_OFFSET,\n            name: 'en'\n        };\n    },\n    westSouth: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top,\n            left: buttonRect.left - panelRect.width + NESTED_PANEL_HORIZONTAL_OFFSET,\n            name: 'ws'\n        };\n    },\n    westNorth: (buttonRect, panelRect) => {\n        return {\n            top: buttonRect.top - panelRect.height,\n            left: buttonRect.left - panelRect.width + NESTED_PANEL_HORIZONTAL_OFFSET,\n            name: 'wn'\n        };\n    }\n};\n/**\n * The default items {@link module:core/editor/editorconfig~EditorConfig#menuBar configuration} of the\n * {@link module:ui/menubar/menubarview~MenuBarView} component. It contains names of all menu bar components\n * registered in the {@link module:ui/componentfactory~ComponentFactory component factory} (available in the project).\n *\n * **Note**: Menu bar component names provided by core editor features are prefixed with `menuBar:` in order to distinguish\n * them from components referenced by the {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar configuration}, for instance,\n * `'menuBar:bold'` is a menu bar button but `'bold'` is a toolbar button.\n *\n * Below is the preset menu bar structure (the default value of `config.menuBar.items` property):\n *\n * ```ts\n * [\n * \t{\n * \t\tmenuId: 'file',\n * \t\tlabel: 'File',\n * \t\tgroups: [\n * \t\t\t{\n * \t\t\t\tgroupId: 'export',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:exportPdf',\n * \t\t\t\t\t'menuBar:exportWord'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'import',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:importWord'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'revisionHistory',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:revisionHistory'\n * \t\t\t\t]\n * \t\t\t}\n * \t\t]\n * \t},\n * \t{\n * \t\tmenuId: 'edit',\n * \t\tlabel: 'Edit',\n * \t\tgroups: [\n * \t\t\t{\n * \t\t\t\tgroupId: 'undo',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:undo',\n * \t\t\t\t\t'menuBar:redo'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'selectAll',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:selectAll'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'findAndReplace',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:findAndReplace'\n * \t\t\t\t]\n * \t\t\t}\n * \t\t]\n * \t},\n * \t{\n * \t\tmenuId: 'view',\n * \t\tlabel: 'View',\n * \t\tgroups: [\n * \t\t\t{\n * \t\t\t\tgroupId: 'sourceEditing',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:sourceEditing'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'showBlocks',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:showBlocks'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'previewMergeFields',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:previewMergeFields'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'restrictedEditingException',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:restrictedEditingException'\n * \t\t\t\t]\n * \t\t\t}\n * \t\t]\n * \t},\n * \t{\n * \t\tmenuId: 'insert',\n * \t\tlabel: 'Insert',\n * \t\tgroups: [\n * \t\t\t{\n * \t\t\t\tgroupId: 'insertMainWidgets',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:insertImage',\n * \t\t\t\t\t'menuBar:ckbox',\n * \t\t\t\t\t'menuBar:ckfinder',\n * \t\t\t\t\t'menuBar:insertTable'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'insertInline',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:link',\n * \t\t\t\t\t'menuBar:comment',\n * \t\t\t\t\t'menuBar:insertMergeField'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'insertMinorWidgets',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:mediaEmbed',\n * \t\t\t\t\t'menuBar:insertTemplate',\n * \t\t\t\t\t'menuBar:blockQuote',\n * \t\t\t\t\t'menuBar:codeBlock',\n * \t\t\t\t\t'menuBar:htmlEmbed'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'insertStructureWidgets',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:horizontalLine',\n * \t\t\t\t\t'menuBar:pageBreak',\n * \t\t\t\t\t'menuBar:tableOfContents'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'restrictedEditing',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:restrictedEditing'\n * \t\t\t\t]\n * \t\t\t}\n * \t\t]\n * \t},\n * \t{\n * \t\tmenuId: 'format',\n * \t\tlabel: 'Format',\n * \t\tgroups: [\n * \t\t\t{\n * \t\t\t\tgroupId: 'textAndFont',\n * \t\t\t\titems: [\n * \t\t\t\t\t{\n * \t\t\t\t\t\tmenuId: 'text',\n * \t\t\t\t\t\tlabel: 'Text',\n * \t\t\t\t\t\tgroups: [\n * \t\t\t\t\t\t\t{\n * \t\t\t\t\t\t\t\tgroupId: 'basicStyles',\n * \t\t\t\t\t\t\t\titems: [\n * \t\t\t\t\t\t\t\t\t'menuBar:bold',\n * \t\t\t\t\t\t\t\t\t'menuBar:italic',\n * \t\t\t\t\t\t\t\t\t'menuBar:underline',\n * \t\t\t\t\t\t\t\t\t'menuBar:strikethrough',\n * \t\t\t\t\t\t\t\t\t'menuBar:superscript',\n * \t\t\t\t\t\t\t\t\t'menuBar:subscript',\n * \t\t\t\t\t\t\t\t\t'menuBar:code'\n * \t\t\t\t\t\t\t\t]\n * \t\t\t\t\t\t\t},\n * \t\t\t\t\t\t\t{\n * \t\t\t\t\t\t\t\tgroupId: 'textPartLanguage',\n * \t\t\t\t\t\t\t\titems: [\n * \t\t\t\t\t\t\t\t\t'menuBar:textPartLanguage'\n * \t\t\t\t\t\t\t\t]\n * \t\t\t\t\t\t\t}\n * \t\t\t\t\t\t]\n * \t\t\t\t\t},\n * \t\t\t\t\t{\n * \t\t\t\t\t\tmenuId: 'font',\n * \t\t\t\t\t\tlabel: 'Font',\n * \t\t\t\t\t\tgroups: [\n * \t\t\t\t\t\t\t{\n * \t\t\t\t\t\t\t\tgroupId: 'fontProperties',\n * \t\t\t\t\t\t\t\titems: [\n * \t\t\t\t\t\t\t\t\t'menuBar:fontSize',\n * \t\t\t\t\t\t\t\t\t'menuBar:fontFamily'\n * \t\t\t\t\t\t\t\t]\n * \t\t\t\t\t\t\t},\n * \t\t\t\t\t\t\t{\n * \t\t\t\t\t\t\t\tgroupId: 'fontColors',\n * \t\t\t\t\t\t\t\titems: [\n * \t\t\t\t\t\t\t\t\t'menuBar:fontColor',\n * \t\t\t\t\t\t\t\t\t'menuBar:fontBackgroundColor'\n * \t\t\t\t\t\t\t\t]\n * \t\t\t\t\t\t\t},\n * \t\t\t\t\t\t\t{\n * \t\t\t\t\t\t\t\tgroupId: 'highlight',\n * \t\t\t\t\t\t\t\titems: [\n * \t\t\t\t\t\t\t\t\t'menuBar:highlight'\n * \t\t\t\t\t\t\t\t]\n * \t\t\t\t\t\t\t}\n * \t\t\t\t\t\t]\n * \t\t\t\t\t},\n * \t\t\t\t\t'menuBar:heading'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'list',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:bulletedList',\n * \t\t\t\t\t'menuBar:numberedList',\n * \t\t\t\t\t'menuBar:multiLevelList',\n * \t\t\t\t\t'menuBar:todoList'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'indent',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:alignment',\n * \t\t\t\t\t'menuBar:indent',\n * \t\t\t\t\t'menuBar:outdent'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'caseChange',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:caseChange'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'removeFormat',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:removeFormat'\n * \t\t\t\t]\n * \t\t\t}\n * \t\t]\n * \t},\n * \t{\n * \t\tmenuId: 'tools',\n * \t\tlabel: 'Tools',\n * \t\tgroups: [\n * \t\t\t{\n * \t\t\t\tgroupId: 'aiTools',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:aiAssistant',\n * \t\t\t\t\t'menuBar:aiCommands'\n * \t\t\t\t]\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\tgroupId: 'tools',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:trackChanges',\n * \t\t\t\t\t'menuBar:commentsArchive'\n * \t\t\t\t]\n * \t\t\t}\n * \t\t]\n * \t},\n * \t{\n * \t\tmenuId: 'help',\n * \t\tlabel: 'Help',\n * \t\tgroups: [\n * \t\t\t{\n * \t\t\t\tgroupId: 'help',\n * \t\t\t\titems: [\n * \t\t\t\t\t'menuBar:accessibilityHelp'\n * \t\t\t\t]\n * \t\t\t}\n * \t\t]\n * \t}\n * ];\n * ```\n *\n * The menu bar can be customized using the `config.menuBar.removeItems` and `config.menuBar.addItems` properties.\n */\n// **NOTE: Whenever you make changes to this value, reflect it in the documentation above!**\nexport const DefaultMenuBarItems = [\n    {\n        menuId: 'file',\n        label: 'File',\n        groups: [\n            {\n                groupId: 'export',\n                items: [\n                    'menuBar:exportPdf',\n                    'menuBar:exportWord'\n                ]\n            },\n            {\n                groupId: 'import',\n                items: [\n                    'menuBar:importWord'\n                ]\n            },\n            {\n                groupId: 'revisionHistory',\n                items: [\n                    'menuBar:revisionHistory'\n                ]\n            }\n        ]\n    },\n    {\n        menuId: 'edit',\n        label: 'Edit',\n        groups: [\n            {\n                groupId: 'undo',\n                items: [\n                    'menuBar:undo',\n                    'menuBar:redo'\n                ]\n            },\n            {\n                groupId: 'selectAll',\n                items: [\n                    'menuBar:selectAll'\n                ]\n            },\n            {\n                groupId: 'findAndReplace',\n                items: [\n                    'menuBar:findAndReplace'\n                ]\n            }\n        ]\n    },\n    {\n        menuId: 'view',\n        label: 'View',\n        groups: [\n            {\n                groupId: 'sourceEditing',\n                items: [\n                    'menuBar:sourceEditing'\n                ]\n            },\n            {\n                groupId: 'showBlocks',\n                items: [\n                    'menuBar:showBlocks'\n                ]\n            },\n            {\n                groupId: 'previewMergeFields',\n                items: [\n                    'menuBar:previewMergeFields'\n                ]\n            },\n            {\n                groupId: 'restrictedEditing',\n                items: [\n                    'menuBar:restrictedEditing'\n                ]\n            }\n        ]\n    },\n    {\n        menuId: 'insert',\n        label: 'Insert',\n        groups: [\n            {\n                groupId: 'insertMainWidgets',\n                items: [\n                    'menuBar:insertImage',\n                    'menuBar:ckbox',\n                    'menuBar:ckfinder',\n                    'menuBar:insertTable'\n                ]\n            },\n            {\n                groupId: 'insertInline',\n                items: [\n                    'menuBar:link',\n                    'menuBar:comment',\n                    'menuBar:insertMergeField'\n                ]\n            },\n            {\n                groupId: 'insertMinorWidgets',\n                items: [\n                    'menuBar:mediaEmbed',\n                    'menuBar:insertTemplate',\n                    'menuBar:specialCharacters',\n                    'menuBar:blockQuote',\n                    'menuBar:codeBlock',\n                    'menuBar:htmlEmbed'\n                ]\n            },\n            {\n                groupId: 'insertStructureWidgets',\n                items: [\n                    'menuBar:horizontalLine',\n                    'menuBar:pageBreak',\n                    'menuBar:tableOfContents'\n                ]\n            },\n            {\n                groupId: 'restrictedEditingException',\n                items: [\n                    'menuBar:restrictedEditingException'\n                ]\n            }\n        ]\n    },\n    {\n        menuId: 'format',\n        label: 'Format',\n        groups: [\n            {\n                groupId: 'textAndFont',\n                items: [\n                    {\n                        menuId: 'text',\n                        label: 'Text',\n                        groups: [\n                            {\n                                groupId: 'basicStyles',\n                                items: [\n                                    'menuBar:bold',\n                                    'menuBar:italic',\n                                    'menuBar:underline',\n                                    'menuBar:strikethrough',\n                                    'menuBar:superscript',\n                                    'menuBar:subscript',\n                                    'menuBar:code'\n                                ]\n                            },\n                            {\n                                groupId: 'textPartLanguage',\n                                items: [\n                                    'menuBar:textPartLanguage'\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        menuId: 'font',\n                        label: 'Font',\n                        groups: [\n                            {\n                                groupId: 'fontProperties',\n                                items: [\n                                    'menuBar:fontSize',\n                                    'menuBar:fontFamily'\n                                ]\n                            },\n                            {\n                                groupId: 'fontColors',\n                                items: [\n                                    'menuBar:fontColor',\n                                    'menuBar:fontBackgroundColor'\n                                ]\n                            },\n                            {\n                                groupId: 'highlight',\n                                items: [\n                                    'menuBar:highlight'\n                                ]\n                            }\n                        ]\n                    },\n                    'menuBar:heading'\n                ]\n            },\n            {\n                groupId: 'list',\n                items: [\n                    'menuBar:bulletedList',\n                    'menuBar:numberedList',\n                    'menuBar:multiLevelList',\n                    'menuBar:todoList'\n                ]\n            },\n            {\n                groupId: 'indent',\n                items: [\n                    'menuBar:alignment',\n                    'menuBar:indent',\n                    'menuBar:outdent'\n                ]\n            },\n            {\n                groupId: 'caseChange',\n                items: [\n                    'menuBar:caseChange'\n                ]\n            },\n            {\n                groupId: 'removeFormat',\n                items: [\n                    'menuBar:removeFormat'\n                ]\n            }\n        ]\n    },\n    {\n        menuId: 'tools',\n        label: 'Tools',\n        groups: [\n            {\n                groupId: 'aiTools',\n                items: [\n                    'menuBar:aiAssistant',\n                    'menuBar:aiCommands'\n                ]\n            },\n            {\n                groupId: 'tools',\n                items: [\n                    'menuBar:trackChanges',\n                    'menuBar:commentsArchive'\n                ]\n            }\n        ]\n    },\n    {\n        menuId: 'help',\n        label: 'Help',\n        groups: [\n            {\n                groupId: 'help',\n                items: [\n                    'menuBar:accessibilityHelp'\n                ]\n            }\n        ]\n    }\n];\n/**\n * Performs a cleanup and normalization of the menu bar configuration.\n */\nexport function normalizeMenuBarConfig(config) {\n    let configObject;\n    // The integrator specified the config as an object but without items. Let's give them defaults but respect their\n    // additions and removals.\n    if (!('items' in config) || !config.items) {\n        configObject = {\n            items: cloneDeep(DefaultMenuBarItems),\n            addItems: [],\n            removeItems: [],\n            isVisible: true,\n            isUsingDefaultConfig: true,\n            ...config\n        };\n    }\n    // The integrator specified the config as an object and there are items there. Let's take it as it is.\n    else {\n        configObject = {\n            items: config.items,\n            removeItems: [],\n            addItems: [],\n            isVisible: true,\n            isUsingDefaultConfig: false,\n            ...config\n        };\n    }\n    return configObject;\n}\n/**\n * Processes a normalized menu bar config and returns a config clone with the following modifications:\n *\n * * Removed components that are not available in the component factory,\n * * Removed obsolete separators,\n * * Purged empty menus,\n * * Localized top-level menu labels.\n */\nexport function processMenuBarConfig({ normalizedConfig, locale, componentFactory, extraItems }) {\n    const configClone = cloneDeep(normalizedConfig);\n    handleAdditions(normalizedConfig, configClone, extraItems);\n    handleRemovals(normalizedConfig, configClone);\n    handleAdditions(normalizedConfig, configClone, configClone.addItems);\n    purgeUnavailableComponents(normalizedConfig, configClone, componentFactory);\n    purgeEmptyMenus(normalizedConfig, configClone);\n    localizeMenuLabels(configClone, locale);\n    return configClone;\n}\n/**\n * Removes items from the menu bar config based on user `removeItems` configuration. Users can remove\n * individual items, groups, or entire menus. For each removed item, a warning is logged if the item\n * was not found in the configuration.\n */\nfunction handleRemovals(originalConfig, config) {\n    const itemsToBeRemoved = config.removeItems;\n    const successfullyRemovedItems = [];\n    // Remove top-level menus.\n    config.items = config.items.filter(({ menuId }) => {\n        if (itemsToBeRemoved.includes(menuId)) {\n            successfullyRemovedItems.push(menuId);\n            return false;\n        }\n        return true;\n    });\n    walkConfigMenus(config.items, menuDefinition => {\n        // Remove groups from menus.\n        menuDefinition.groups = menuDefinition.groups.filter(({ groupId }) => {\n            if (itemsToBeRemoved.includes(groupId)) {\n                successfullyRemovedItems.push(groupId);\n                return false;\n            }\n            return true;\n        });\n        // Remove sub-menus and items from groups.\n        for (const groupDefinition of menuDefinition.groups) {\n            groupDefinition.items = groupDefinition.items.filter(item => {\n                const itemId = getIdFromGroupItem(item);\n                if (itemsToBeRemoved.includes(itemId)) {\n                    successfullyRemovedItems.push(itemId);\n                    return false;\n                }\n                return true;\n            });\n        }\n    });\n    for (const itemName of itemsToBeRemoved) {\n        if (!successfullyRemovedItems.includes(itemName)) {\n            /**\n             * There was a problem processing the configuration of the menu bar. The item with the given\n             * name does could not be removed from the menu bar configuration.\n             *\n             * This warning usually shows up when the {@link module:core/plugin~Plugin} which is supposed\n             * to provide a menu bar item has not been loaded or there is a typo in the\n             * {@link module:core/editor/editorconfig~EditorConfig#menuBar menu bar configuration}.\n             *\n             * @error menu-bar-item-could-not-be-removed\n             * @param menuBarConfig The full configuration of the menu bar.\n             * @param itemName The name of the item that was not removed from the menu bar.\n             */\n            logWarning('menu-bar-item-could-not-be-removed', {\n                menuBarConfig: originalConfig,\n                itemName\n            });\n        }\n    }\n}\n/**\n * Adds provided items to config. It allows for adding menus, groups, and items at arbitrary\n * positions in the menu bar. If the position does not exist, a warning is logged.\n */\nfunction handleAdditions(originalConfig, config, items) {\n    const successFullyAddedItems = [];\n    if (items.length == 0) {\n        return;\n    }\n    for (const itemToAdd of items) {\n        const relation = getRelationFromPosition(itemToAdd.position);\n        const relativeId = getRelativeIdFromPosition(itemToAdd.position);\n        // Adding a menu.\n        if (isMenuBarMenuAddition(itemToAdd)) {\n            if (!relativeId) {\n                // Adding a top-level menu at the beginning of the menu bar.\n                if (relation === 'start') {\n                    config.items.unshift(itemToAdd.menu);\n                    successFullyAddedItems.push(itemToAdd);\n                }\n                // Adding a top-level menu at the end of the menu bar.\n                else if (relation === 'end') {\n                    config.items.push(itemToAdd.menu);\n                    successFullyAddedItems.push(itemToAdd);\n                }\n            }\n            else {\n                const topLevelMenuDefinitionIndex = config.items.findIndex(menuDefinition => menuDefinition.menuId === relativeId);\n                // Adding a top-level menu somewhere between existing menu bar menus.\n                if (topLevelMenuDefinitionIndex != -1) {\n                    if (relation === 'before') {\n                        config.items.splice(topLevelMenuDefinitionIndex, 0, itemToAdd.menu);\n                        successFullyAddedItems.push(itemToAdd);\n                    }\n                    else if (relation === 'after') {\n                        config.items.splice(topLevelMenuDefinitionIndex + 1, 0, itemToAdd.menu);\n                        successFullyAddedItems.push(itemToAdd);\n                    }\n                }\n                // Adding a sub-menu to an existing items group.\n                else {\n                    const wasAdded = addMenuOrItemToGroup(config, itemToAdd.menu, relativeId, relation);\n                    if (wasAdded) {\n                        successFullyAddedItems.push(itemToAdd);\n                    }\n                }\n            }\n        }\n        // Adding a group.\n        else if (isMenuBarMenuGroupAddition(itemToAdd)) {\n            walkConfigMenus(config.items, menuDefinition => {\n                if (menuDefinition.menuId === relativeId) {\n                    // Add a group at the start of a menu.\n                    if (relation === 'start') {\n                        menuDefinition.groups.unshift(itemToAdd.group);\n                        successFullyAddedItems.push(itemToAdd);\n                    }\n                    // Add a group at the end of a menu.\n                    else if (relation === 'end') {\n                        menuDefinition.groups.push(itemToAdd.group);\n                        successFullyAddedItems.push(itemToAdd);\n                    }\n                }\n                else {\n                    const relativeGroupIndex = menuDefinition.groups.findIndex(group => group.groupId === relativeId);\n                    if (relativeGroupIndex !== -1) {\n                        // Add a group before an existing group in a menu.\n                        if (relation === 'before') {\n                            menuDefinition.groups.splice(relativeGroupIndex, 0, itemToAdd.group);\n                            successFullyAddedItems.push(itemToAdd);\n                        }\n                        // Add a group after an existing group in a menu.\n                        else if (relation === 'after') {\n                            menuDefinition.groups.splice(relativeGroupIndex + 1, 0, itemToAdd.group);\n                            successFullyAddedItems.push(itemToAdd);\n                        }\n                    }\n                }\n            });\n        }\n        // Adding an item to an existing items group.\n        else {\n            const wasAdded = addMenuOrItemToGroup(config, itemToAdd.item, relativeId, relation);\n            if (wasAdded) {\n                successFullyAddedItems.push(itemToAdd);\n            }\n        }\n    }\n    for (const addedItemConfig of items) {\n        if (!successFullyAddedItems.includes(addedItemConfig)) {\n            /**\n             * There was a problem processing the configuration of the menu bar. The configured item could not be added\n             * because the position it was supposed to be added to does not exist.\n             *\n             * This warning usually shows up when the {@link module:core/plugin~Plugin} which is supposed\n             * to provide a menu bar item has not been loaded or there is a typo in the\n             * {@link module:core/editor/editorconfig~EditorConfig#menuBar menu bar configuration}.\n             *\n             * @error menu-bar-item-could-not-be-removed\n             * @param menuBarConfig The full configuration of the menu bar.\n             * @param itemName The name of the item that was not removed from the menu bar.\n             */\n            logWarning('menu-bar-item-could-not-be-added', {\n                menuBarConfig: originalConfig,\n                addedItemConfig\n            });\n        }\n    }\n}\n/**\n * Handles adding a sub-menu or an item into a group. The logic is the same for both cases.\n */\nfunction addMenuOrItemToGroup(config, itemOrMenuToAdd, relativeId, relation) {\n    let wasAdded = false;\n    walkConfigMenus(config.items, menuDefinition => {\n        for (const { groupId, items: groupItems } of menuDefinition.groups) {\n            // Avoid infinite loops.\n            if (wasAdded) {\n                return;\n            }\n            if (groupId === relativeId) {\n                // Adding an item/menu at the beginning of a group.\n                if (relation === 'start') {\n                    groupItems.unshift(itemOrMenuToAdd);\n                    wasAdded = true;\n                }\n                // Adding an item/menu at the end of a group.\n                else if (relation === 'end') {\n                    groupItems.push(itemOrMenuToAdd);\n                    wasAdded = true;\n                }\n            }\n            else {\n                // Adding an item/menu relative to an existing item/menu.\n                const relativeItemIndex = groupItems.findIndex(groupItem => {\n                    return getIdFromGroupItem(groupItem) === relativeId;\n                });\n                if (relativeItemIndex !== -1) {\n                    if (relation === 'before') {\n                        groupItems.splice(relativeItemIndex, 0, itemOrMenuToAdd);\n                        wasAdded = true;\n                    }\n                    else if (relation === 'after') {\n                        groupItems.splice(relativeItemIndex + 1, 0, itemOrMenuToAdd);\n                        wasAdded = true;\n                    }\n                }\n            }\n        }\n    });\n    return wasAdded;\n}\n/**\n * Removes components from the menu bar configuration that are not available in the factory and would\n * not be instantiated. Warns about missing components if the menu bar configuration was specified by the user.\n */\nfunction purgeUnavailableComponents(originalConfig, config, componentFactory) {\n    walkConfigMenus(config.items, menuDefinition => {\n        for (const groupDefinition of menuDefinition.groups) {\n            groupDefinition.items = groupDefinition.items.filter(item => {\n                const isItemUnavailable = typeof item === 'string' && !componentFactory.has(item);\n                // The default configuration contains all possible editor features. But integrators' editors rarely load\n                // every possible feature. This is why we do not want to log warnings about unavailable items for the default config\n                // because they would show up in almost every integration. If the configuration has been provided by\n                // the integrator, on the other hand, then these warnings bring value.\n                if (isItemUnavailable && !config.isUsingDefaultConfig) {\n                    /**\n                     * There was a problem processing the configuration of the menu bar. The item with the given\n                     * name does not exist so it was omitted when rendering the menu bar.\n                     *\n                     * This warning usually shows up when the {@link module:core/plugin~Plugin} which is supposed\n                     * to provide a menu bar item has not been loaded or there is a typo in the\n                     * {@link module:core/editor/editorconfig~EditorConfig#menuBar menu bar configuration}.\n                     *\n                     * Make sure the plugin responsible for this menu bar item is loaded and the menu bar configuration\n                     * is correct, e.g. {@link module:basic-styles/bold/boldui~BoldUI} is loaded for the `'menuBar:bold'`\n                     * menu bar item.\n                     *\n                     * @error menu-bar-item-unavailable\n                     * @param menuBarConfig The full configuration of the menu bar.\n                     * @param parentMenuConfig The config of the menu the unavailable component was defined in.\n                     * @param componentName The name of the unavailable component.\n                     */\n                    logWarning('menu-bar-item-unavailable', {\n                        menuBarConfig: originalConfig,\n                        parentMenuConfig: cloneDeep(menuDefinition),\n                        componentName: item\n                    });\n                }\n                return !isItemUnavailable;\n            });\n        }\n    });\n}\n/**\n * Removes empty menus from the menu bar configuration to improve the visual UX. Such menus can occur\n * when some plugins responsible for providing menu bar items have not been loaded and some part of\n * the configuration populated menus using these components exclusively.\n */\nfunction purgeEmptyMenus(originalConfig, config) {\n    const isUsingDefaultConfig = config.isUsingDefaultConfig;\n    let wasSubMenuPurged = false;\n    // Purge top-level menus.\n    config.items = config.items.filter(menuDefinition => {\n        if (!menuDefinition.groups.length) {\n            warnAboutEmptyMenu(originalConfig, menuDefinition, isUsingDefaultConfig);\n            return false;\n        }\n        return true;\n    });\n    // Warn if there were no top-level menus left in the menu bar after purging.\n    if (!config.items.length) {\n        warnAboutEmptyMenu(originalConfig, originalConfig, isUsingDefaultConfig);\n        return;\n    }\n    // Purge sub-menus and groups.\n    walkConfigMenus(config.items, menuDefinition => {\n        // Get rid of empty groups.\n        menuDefinition.groups = menuDefinition.groups.filter(groupDefinition => {\n            if (!groupDefinition.items.length) {\n                wasSubMenuPurged = true;\n                return false;\n            }\n            return true;\n        });\n        // Get rid of empty sub-menus.\n        for (const groupDefinition of menuDefinition.groups) {\n            groupDefinition.items = groupDefinition.items.filter(item => {\n                // If no groups were left after removing empty ones.\n                if (isMenuDefinition(item) && !item.groups.length) {\n                    warnAboutEmptyMenu(originalConfig, item, isUsingDefaultConfig);\n                    wasSubMenuPurged = true;\n                    return false;\n                }\n                return true;\n            });\n        }\n    });\n    if (wasSubMenuPurged) {\n        // The config is walked from the root to the leaves so if anything gets removed, we need to re-run the\n        // whole process because it could've affected parents.\n        purgeEmptyMenus(originalConfig, config);\n    }\n}\nfunction warnAboutEmptyMenu(originalConfig, emptyMenuConfig, isUsingDefaultConfig) {\n    if (isUsingDefaultConfig) {\n        return;\n    }\n    /**\n     * There was a problem processing the configuration of the menu bar. One of the menus\n     * is empty so it was omitted when rendering the menu bar.\n     *\n     * This warning usually shows up when some {@link module:core/plugin~Plugin plugins} responsible for\n     * providing menu bar items have not been loaded and the\n     * {@link module:core/editor/editorconfig~EditorConfig#menuBar menu bar configuration} was not updated.\n     *\n     * Make sure all necessary editor plugins are loaded and/or update the menu bar configuration\n     * to account for the missing menu items.\n     *\n     * @error menu-bar-menu-empty\n     * @param menuBarConfig The full configuration of the menu bar.\n     * @param emptyMenuConfig The definition of the menu that has no child items.\n     */\n    logWarning('menu-bar-menu-empty', {\n        menuBarConfig: originalConfig,\n        emptyMenuConfig\n    });\n}\n/**\n * Localizes the user-config using pre-defined localized category labels.\n */\nfunction localizeMenuLabels(config, locale) {\n    const t = locale.t;\n    const localizedCategoryLabels = {\n        // Top-level categories.\n        'File': t({\n            string: 'File',\n            id: 'MENU_BAR_MENU_FILE'\n        }),\n        'Edit': t({\n            string: 'Edit',\n            id: 'MENU_BAR_MENU_EDIT'\n        }),\n        'View': t({\n            string: 'View',\n            id: 'MENU_BAR_MENU_VIEW'\n        }),\n        'Insert': t({\n            string: 'Insert',\n            id: 'MENU_BAR_MENU_INSERT'\n        }),\n        'Format': t({\n            string: 'Format',\n            id: 'MENU_BAR_MENU_FORMAT'\n        }),\n        'Tools': t({\n            string: 'Tools',\n            id: 'MENU_BAR_MENU_TOOLS'\n        }),\n        'Help': t({\n            string: 'Help',\n            id: 'MENU_BAR_MENU_HELP'\n        }),\n        // Sub-menus.\n        'Text': t({\n            string: 'Text',\n            id: 'MENU_BAR_MENU_TEXT'\n        }),\n        'Font': t({\n            string: 'Font',\n            id: 'MENU_BAR_MENU_FONT'\n        })\n    };\n    walkConfigMenus(config.items, definition => {\n        if (definition.label in localizedCategoryLabels) {\n            definition.label = localizedCategoryLabels[definition.label];\n        }\n    });\n}\n/**\n * Recursively visits all menu definitions in the config and calls the callback for each of them.\n */\nfunction walkConfigMenus(definition, callback) {\n    if (Array.isArray(definition)) {\n        for (const topLevelMenuDefinition of definition) {\n            walk(topLevelMenuDefinition);\n        }\n    }\n    function walk(menuDefinition) {\n        callback(menuDefinition);\n        for (const groupDefinition of menuDefinition.groups) {\n            for (const groupItem of groupDefinition.items) {\n                if (isMenuDefinition(groupItem)) {\n                    walk(groupItem);\n                }\n            }\n        }\n    }\n}\nfunction isMenuBarMenuAddition(definition) {\n    return typeof definition === 'object' && 'menu' in definition;\n}\nfunction isMenuBarMenuGroupAddition(definition) {\n    return typeof definition === 'object' && 'group' in definition;\n}\nfunction getRelationFromPosition(position) {\n    if (position.startsWith('start')) {\n        return 'start';\n    }\n    else if (position.startsWith('end')) {\n        return 'end';\n    }\n    else if (position.startsWith('after')) {\n        return 'after';\n    }\n    else {\n        return 'before';\n    }\n}\nfunction getRelativeIdFromPosition(position) {\n    const match = position.match(/^[^:]+:(.+)/);\n    if (match) {\n        return match[1];\n    }\n    return null;\n}\nfunction getIdFromGroupItem(item) {\n    return typeof item === 'string' ? item : item.menuId;\n}\nfunction isMenuDefinition(definition) {\n    return typeof definition === 'object' && 'menuId' in definition;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editorui/editorui\n */\n/* globals console */\nimport ComponentFactory from '../componentfactory.js';\nimport TooltipManager from '../tooltipmanager.js';\nimport PoweredBy from './poweredby.js';\nimport AriaLiveAnnouncer from '../arialiveannouncer.js';\nimport { ObservableMixin, isVisible, FocusTracker } from '@ckeditor/ckeditor5-utils';\nimport { normalizeMenuBarConfig } from '../menubar/utils.js';\n/**\n * A class providing the minimal interface that is required to successfully bootstrap any editor UI.\n */\nexport default class EditorUI extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates an instance of the editor UI class.\n     *\n     * @param editor The editor instance.\n     */\n    constructor(editor) {\n        super();\n        /**\n         * Indicates the UI is ready. Set `true` after {@link #event:ready} event is fired.\n         *\n         * @readonly\n         * @default false\n         */\n        this.isReady = false;\n        /**\n         * Stores all editable elements used by the editor instance.\n         */\n        this._editableElementsMap = new Map();\n        /**\n         * All available & focusable toolbars.\n         */\n        this._focusableToolbarDefinitions = [];\n        /**\n         * All additional menu bar items, groups or menus that have their default location defined.\n         */\n        this._extraMenuBarElements = [];\n        /**\n         * The last focused element to which focus should return on `Esc` press.\n         */\n        this._lastFocusedForeignElement = null;\n        const editingView = editor.editing.view;\n        this.editor = editor;\n        this.componentFactory = new ComponentFactory(editor);\n        this.focusTracker = new FocusTracker();\n        this.tooltipManager = new TooltipManager(editor);\n        this.poweredBy = new PoweredBy(editor);\n        this.ariaLiveAnnouncer = new AriaLiveAnnouncer(editor);\n        this.set('viewportOffset', this._readViewportOffsetFromConfig());\n        this.once('ready', () => {\n            this._bindBodyCollectionWithFocusTracker();\n            this.isReady = true;\n        });\n        // Informs UI components that should be refreshed after layout change.\n        this.listenTo(editingView.document, 'layoutChanged', this.update.bind(this));\n        this.listenTo(editingView, 'scrollToTheSelection', this._handleScrollToTheSelection.bind(this));\n        this._initFocusTracking();\n    }\n    /**\n     * The main (outermost) DOM element of the editor UI.\n     *\n     * For example, in {@link module:editor-classic/classiceditor~ClassicEditor} it is a `<div>` which\n     * wraps the editable element and the toolbar. In {@link module:editor-inline/inlineeditor~InlineEditor}\n     * it is the editable element itself (as there is no other wrapper). However, in\n     * {@link module:editor-decoupled/decouplededitor~DecoupledEditor} it is set to `null` because this editor does not\n     * come with a single \"main\" HTML element (its editable element and toolbar are separate).\n     *\n     * This property can be understood as a shorthand for retrieving the element that a specific editor integration\n     * considers to be its main DOM element.\n     */\n    get element() {\n        return null;\n    }\n    /**\n     * Fires the {@link module:ui/editorui/editorui~EditorUI#event:update `update`} event.\n     *\n     * This method should be called when the editor UI (e.g. positions of its balloons) needs to be updated due to\n     * some environmental change which CKEditor 5 is not aware of (e.g. resize of a container in which it is used).\n     */\n    update() {\n        this.fire('update');\n    }\n    /**\n     * Destroys the UI.\n     */\n    destroy() {\n        this.stopListening();\n        this.focusTracker.destroy();\n        this.tooltipManager.destroy(this.editor);\n        this.poweredBy.destroy();\n        // Clean–up the references to the CKEditor instance stored in the native editable DOM elements.\n        for (const domElement of this._editableElementsMap.values()) {\n            domElement.ckeditorInstance = null;\n            this.editor.keystrokes.stopListening(domElement);\n        }\n        this._editableElementsMap = new Map();\n        this._focusableToolbarDefinitions = [];\n    }\n    /**\n     * Stores the native DOM editable element used by the editor under a unique name.\n     *\n     * Also, registers the element in the editor to maintain the accessibility of the UI. When the user is editing text in a focusable\n     * editable area, they can use the <kbd>Alt</kbd> + <kbd>F10</kbd> keystroke to navigate over editor toolbars. See {@link #addToolbar}.\n     *\n     * @param rootName The unique name of the editable element.\n     * @param domElement The native DOM editable element.\n     */\n    setEditableElement(rootName, domElement) {\n        this._editableElementsMap.set(rootName, domElement);\n        // Put a reference to the CKEditor instance in the editable native DOM element.\n        // It helps 3rd–party software (browser extensions, other libraries) access and recognize\n        // CKEditor 5 instances (editing roots) and use their API (there is no global editor\n        // instance registry).\n        if (!domElement.ckeditorInstance) {\n            domElement.ckeditorInstance = this.editor;\n        }\n        // Register the element, so it becomes available for Alt+F10 and Esc navigation.\n        this.focusTracker.add(domElement);\n        const setUpKeystrokeHandler = () => {\n            // The editing view of the editor is already listening to keystrokes from DOM roots (see: KeyObserver).\n            // Do not duplicate listeners.\n            if (this.editor.editing.view.getDomRoot(rootName)) {\n                return;\n            }\n            this.editor.keystrokes.listenTo(domElement);\n        };\n        // For editable elements set by features after EditorUI is ready (e.g. source editing).\n        if (this.isReady) {\n            setUpKeystrokeHandler();\n        }\n        // For editable elements set while the editor is being created (e.g. DOM roots).\n        else {\n            this.once('ready', setUpKeystrokeHandler);\n        }\n    }\n    /**\n     * Removes the editable from the editor UI. Removes all handlers added by {@link #setEditableElement}.\n     *\n     * @param rootName The name of the editable element to remove.\n     */\n    removeEditableElement(rootName) {\n        const domElement = this._editableElementsMap.get(rootName);\n        if (!domElement) {\n            return;\n        }\n        this._editableElementsMap.delete(rootName);\n        this.editor.keystrokes.stopListening(domElement);\n        this.focusTracker.remove(domElement);\n        domElement.ckeditorInstance = null;\n    }\n    /**\n     * Returns the editable editor element with the given name or null if editable does not exist.\n     *\n     * @param rootName The editable name.\n     */\n    getEditableElement(rootName = 'main') {\n        return this._editableElementsMap.get(rootName);\n    }\n    /**\n     * Returns array of names of all editor editable elements.\n     */\n    getEditableElementsNames() {\n        return this._editableElementsMap.keys();\n    }\n    /**\n     * Adds a toolbar to the editor UI. Used primarily to maintain the accessibility of the UI.\n     *\n     * Focusable toolbars can be accessed (focused) by users by pressing the <kbd>Alt</kbd> + <kbd>F10</kbd> keystroke.\n     * Successive keystroke presses navigate over available toolbars.\n     *\n     * @param toolbarView A instance of the toolbar to be registered.\n     */\n    addToolbar(toolbarView, options = {}) {\n        if (toolbarView.isRendered) {\n            this.focusTracker.add(toolbarView);\n            this.editor.keystrokes.listenTo(toolbarView.element);\n        }\n        else {\n            toolbarView.once('render', () => {\n                this.focusTracker.add(toolbarView);\n                this.editor.keystrokes.listenTo(toolbarView.element);\n            });\n        }\n        this._focusableToolbarDefinitions.push({ toolbarView, options });\n    }\n    /**\n     * Registers an extra menu bar element, which could be a single item, a group of items, or a menu containing groups.\n     *\n     * ```ts\n     * // Register a new menu bar item.\n     * editor.ui.extendMenuBar( {\n     *   item: 'menuBar:customFunctionButton',\n     *   position: 'after:menuBar:bold'\n     * } );\n     *\n     * // Register a new menu bar group.\n     * editor.ui.extendMenuBar( {\n     *   group: {\n     *     groupId: 'customGroup',\n     *     items: [\n     *       'menuBar:customFunctionButton'\n     *     ]\n     *   },\n     *   position: 'start:help'\n     * } );\n     *\n     * // Register a new menu bar menu.\n     * editor.ui.extendMenuBar( {\n     *   menu: {\n     *     menuId: 'customMenu',\n     *     label: 'customMenu',\n     *     groups: [\n     *       {\n     *         groupId: 'customGroup',\n     *         items: [\n     *           'menuBar:customFunctionButton'\n     *         ]\n     *       }\n     *     ]\n     *   },\n     *   position: 'after:help'\n     * } );\n     * ```\n     */\n    extendMenuBar(config) {\n        this._extraMenuBarElements.push(config);\n    }\n    /**\n     * Stores all editable elements used by the editor instance.\n     *\n     * @deprecated\n     */\n    get _editableElements() {\n        /**\n         * The {@link module:ui/editorui/editorui~EditorUI#_editableElements `EditorUI#_editableElements`} property has been\n         * deprecated and will be removed in the near future. Please use\n         * {@link module:ui/editorui/editorui~EditorUI#setEditableElement `setEditableElement()`} and\n         * {@link module:ui/editorui/editorui~EditorUI#getEditableElement `getEditableElement()`} methods instead.\n         *\n         * @error editor-ui-deprecated-editable-elements\n         * @param editorUI Editor UI instance the deprecated property belongs to.\n         */\n        console.warn('editor-ui-deprecated-editable-elements: ' +\n            'The EditorUI#_editableElements property has been deprecated and will be removed in the near future.', { editorUI: this });\n        return this._editableElementsMap;\n    }\n    /**\n     * Initializes menu bar.\n     */\n    _initMenuBar(menuBarView) {\n        const menuBarViewElement = menuBarView.element;\n        this.focusTracker.add(menuBarViewElement);\n        this.editor.keystrokes.listenTo(menuBarViewElement);\n        const normalizedMenuBarConfig = normalizeMenuBarConfig(this.editor.config.get('menuBar') || {});\n        menuBarView.fillFromConfig(normalizedMenuBarConfig, this.componentFactory, this._extraMenuBarElements);\n        this.editor.keystrokes.set('Esc', (data, cancel) => {\n            if (!menuBarViewElement.contains(this.editor.ui.focusTracker.focusedElement)) {\n                return;\n            }\n            // Bring focus back to where it came from before focusing the toolbar:\n            // If it came from outside the engine view (e.g. source editing), move it there.\n            if (this._lastFocusedForeignElement) {\n                this._lastFocusedForeignElement.focus();\n                this._lastFocusedForeignElement = null;\n            }\n            // Else just focus the view editing.\n            else {\n                this.editor.editing.view.focus();\n            }\n            cancel();\n        });\n        this.editor.keystrokes.set('Alt+F9', (data, cancel) => {\n            // If menu bar is already focused do nothing.\n            if (menuBarViewElement.contains(this.editor.ui.focusTracker.focusedElement)) {\n                return;\n            }\n            this._saveLastFocusedForeignElement();\n            menuBarView.isFocusBorderEnabled = true;\n            menuBarView.focus();\n            cancel();\n        });\n    }\n    /**\n     * Returns viewport offsets object:\n     *\n     * ```js\n     * {\n     * \ttop: Number,\n     * \tright: Number,\n     * \tbottom: Number,\n     * \tleft: Number\n     * }\n     * ```\n     *\n     * Only top property is currently supported.\n     */\n    _readViewportOffsetFromConfig() {\n        const editor = this.editor;\n        const viewportOffsetConfig = editor.config.get('ui.viewportOffset');\n        if (viewportOffsetConfig) {\n            return viewportOffsetConfig;\n        }\n        // Not present in EditorConfig type, because it's legacy. Hence the `as` expression.\n        const legacyOffsetConfig = editor.config.get('toolbar.viewportTopOffset');\n        // Fall back to deprecated toolbar config.\n        if (legacyOffsetConfig) {\n            /**\n             * The {@link module:core/editor/editorconfig~EditorConfig#toolbar `EditorConfig#toolbar.viewportTopOffset`}\n             * property has been deprecated and will be removed in the near future. Please use\n             * {@link module:core/editor/editorconfig~EditorConfig#ui `EditorConfig#ui.viewportOffset`} instead.\n             *\n             * @error editor-ui-deprecated-viewport-offset-config\n             */\n            console.warn('editor-ui-deprecated-viewport-offset-config: ' +\n                'The `toolbar.vieportTopOffset` configuration option is deprecated. ' +\n                'It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead.');\n            return { top: legacyOffsetConfig };\n        }\n        // More keys to come in the future.\n        return { top: 0 };\n    }\n    /**\n     * Starts listening for <kbd>Alt</kbd> + <kbd>F10</kbd> and <kbd>Esc</kbd> keystrokes in the context of focusable\n     * {@link #setEditableElement editable elements} and {@link #addToolbar toolbars}\n     * to allow users navigate across the UI.\n     */\n    _initFocusTracking() {\n        const editor = this.editor;\n        let candidateDefinitions;\n        // Focus the next focusable toolbar on <kbd>Alt</kbd> + <kbd>F10</kbd>.\n        editor.keystrokes.set('Alt+F10', (data, cancel) => {\n            this._saveLastFocusedForeignElement();\n            const currentFocusedToolbarDefinition = this._getCurrentFocusedToolbarDefinition();\n            // * When focusing a toolbar for the first time, set the array of definitions for successive presses of Alt+F10.\n            // This ensures, the navigation works always the same and no pair of toolbars takes over\n            // (e.g. image and table toolbars when a selected image is inside a cell).\n            // * It could be that the focus went to the toolbar by clicking a toolbar item (e.g. a dropdown). In this case,\n            // there were no candidates so they must be obtained (#12339).\n            if (!currentFocusedToolbarDefinition || !candidateDefinitions) {\n                candidateDefinitions = this._getFocusableCandidateToolbarDefinitions();\n            }\n            // In a single Alt+F10 press, check all candidates but if none were focused, don't go any further.\n            // This prevents an infinite loop.\n            for (let i = 0; i < candidateDefinitions.length; i++) {\n                const candidateDefinition = candidateDefinitions.shift();\n                // Put the first definition to the back of the array. This allows circular navigation over all toolbars\n                // on successive presses of Alt+F10.\n                candidateDefinitions.push(candidateDefinition);\n                // Don't focus the same toolbar again. If you did, this would move focus from the nth focused toolbar item back to the\n                // first item as per ToolbarView#focus() if the user navigated inside the toolbar.\n                if (candidateDefinition !== currentFocusedToolbarDefinition &&\n                    this._focusFocusableCandidateToolbar(candidateDefinition)) {\n                    // Clean up after a current visible toolbar when switching to the next one.\n                    if (currentFocusedToolbarDefinition && currentFocusedToolbarDefinition.options.afterBlur) {\n                        currentFocusedToolbarDefinition.options.afterBlur();\n                    }\n                    break;\n                }\n            }\n            cancel();\n        });\n        // Blur the focused toolbar on <kbd>Esc</kbd> and bring the focus back to its origin.\n        editor.keystrokes.set('Esc', (data, cancel) => {\n            const focusedToolbarDef = this._getCurrentFocusedToolbarDefinition();\n            if (!focusedToolbarDef) {\n                return;\n            }\n            // Bring focus back to where it came from before focusing the toolbar:\n            // 1. If it came from outside the engine view (e.g. source editing), move it there.\n            if (this._lastFocusedForeignElement) {\n                this._lastFocusedForeignElement.focus();\n                this._lastFocusedForeignElement = null;\n            }\n            // 2. There are two possibilities left:\n            //   2.1. It could be that the focus went from an editable element in the view (root or nested).\n            //   2.2. It could be the focus went straight to the toolbar before even focusing the editing area.\n            // In either case, just focus the view editing. The focus will land where it belongs.\n            else {\n                editor.editing.view.focus();\n            }\n            // Clean up after the toolbar if there is anything to do there.\n            if (focusedToolbarDef.options.afterBlur) {\n                focusedToolbarDef.options.afterBlur();\n            }\n            cancel();\n        });\n    }\n    /**\n     * Saves last focused element that doen not belong to editing view to restore focus on `Esc`.\n     */\n    _saveLastFocusedForeignElement() {\n        const focusedElement = this.focusTracker.focusedElement;\n        // Focus moved out of a DOM element that\n        // * is not a toolbar,\n        // * does not belong to the editing view (e.g. source editing).\n        if (Array.from(this._editableElementsMap.values()).includes(focusedElement) &&\n            !Array.from(this.editor.editing.view.domRoots.values()).includes(focusedElement)) {\n            this._lastFocusedForeignElement = focusedElement;\n        }\n    }\n    /**\n     * Returns definitions of toolbars that could potentially be focused, sorted by their importance for the user.\n     *\n     * Focusable toolbars candidates are either:\n     * * already visible,\n     * * have `beforeFocus()` set in their {@link module:ui/editorui/editorui~FocusableToolbarDefinition definition} that suggests that\n     * they might show up when called. Keep in mind that determining whether a toolbar will show up (and become focusable) is impossible\n     * at this stage because it depends on its implementation, that in turn depends on the editing context (selection).\n     *\n     * **Note**: Contextual toolbars take precedence over regular toolbars.\n     */\n    _getFocusableCandidateToolbarDefinitions() {\n        const definitions = [];\n        for (const toolbarDef of this._focusableToolbarDefinitions) {\n            const { toolbarView, options } = toolbarDef;\n            if (isVisible(toolbarView.element) || options.beforeFocus) {\n                definitions.push(toolbarDef);\n            }\n        }\n        // Contextual and already visible toolbars have higher priority. If both are true, the toolbar will always focus first.\n        // For instance, a selected widget toolbar vs inline editor toolbar: both are visible but the widget toolbar is contextual.\n        definitions.sort((defA, defB) => getToolbarDefinitionWeight(defA) - getToolbarDefinitionWeight(defB));\n        return definitions;\n    }\n    /**\n     * Returns a definition of the toolbar that is currently visible and focused (one of its children has focus).\n     *\n     * `null` is returned when no toolbar is currently focused.\n     */\n    _getCurrentFocusedToolbarDefinition() {\n        for (const definition of this._focusableToolbarDefinitions) {\n            if (definition.toolbarView.element && definition.toolbarView.element.contains(this.focusTracker.focusedElement)) {\n                return definition;\n            }\n        }\n        return null;\n    }\n    /**\n     * Focuses a focusable toolbar candidate using its definition.\n     *\n     * @param candidateToolbarDefinition A definition of the toolbar to focus.\n     * @returns `true` when the toolbar candidate was focused. `false` otherwise.\n     */\n    _focusFocusableCandidateToolbar(candidateToolbarDefinition) {\n        const { toolbarView, options: { beforeFocus } } = candidateToolbarDefinition;\n        if (beforeFocus) {\n            beforeFocus();\n        }\n        // If it didn't show up after beforeFocus(), it's not focusable at all.\n        if (!isVisible(toolbarView.element)) {\n            return false;\n        }\n        toolbarView.focus();\n        return true;\n    }\n    /**\n     * Provides an integration between {@link #viewportOffset} and {@link module:utils/dom/scroll~scrollViewportToShowTarget}.\n     * It allows the UI-agnostic engine method to consider user-configured viewport offsets specific for the integration.\n     *\n     * @param evt The `scrollToTheSelection` event info.\n     * @param data The payload carried by the `scrollToTheSelection` event.\n     */\n    _handleScrollToTheSelection(evt, data) {\n        const configuredViewportOffset = {\n            top: 0,\n            bottom: 0,\n            left: 0,\n            right: 0,\n            ...this.viewportOffset\n        };\n        data.viewportOffset.top += configuredViewportOffset.top;\n        data.viewportOffset.bottom += configuredViewportOffset.bottom;\n        data.viewportOffset.left += configuredViewportOffset.left;\n        data.viewportOffset.right += configuredViewportOffset.right;\n    }\n    /**\n     * Ensures that the focus tracker is aware of all views' DOM elements in the body collection.\n     */\n    _bindBodyCollectionWithFocusTracker() {\n        const body = this.view.body;\n        for (const view of body) {\n            this.focusTracker.add(view.element);\n        }\n        body.on('add', (evt, view) => {\n            this.focusTracker.add(view.element);\n        });\n        body.on('remove', (evt, view) => {\n            this.focusTracker.remove(view.element);\n        });\n    }\n}\n/**\n * Returns a number (weight) for a toolbar definition. Visible toolbars have a higher priority and so do\n * contextual toolbars (displayed in the context of a content, for instance, an image toolbar).\n *\n * A standard invisible toolbar is the heaviest. A visible contextual toolbar is the lightest.\n *\n * @param toolbarDef A toolbar definition to be weighted.\n */\nfunction getToolbarDefinitionWeight(toolbarDef) {\n    const { toolbarView, options } = toolbarDef;\n    let weight = 10;\n    // Prioritize already visible toolbars. They should get focused first.\n    if (isVisible(toolbarView.element)) {\n        weight--;\n    }\n    // Prioritize contextual toolbars. They are displayed at the selection.\n    if (options.isContextual) {\n        weight--;\n    }\n    return weight;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editorui/editoruiview\n */\nimport View from '../view.js';\nimport BodyCollection from './bodycollection.js';\nimport '../../theme/components/editorui/editorui.css';\n/**\n * The editor UI view class. Base class for the editor main views.\n */\nexport default class EditorUIView extends View {\n    /**\n     * Creates an instance of the editor UI view class.\n     *\n     * @param locale The locale instance.\n     */\n    constructor(locale) {\n        super(locale);\n        this.body = new BodyCollection(locale);\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.body.attachToDom();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this.body.detachFromDom();\n        return super.destroy();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editableui/editableuiview\n */\nimport View from '../view.js';\n/**\n * The editable UI view class.\n */\nexport default class EditableUIView extends View {\n    /**\n     * Creates an instance of EditableUIView class.\n     *\n     * @param locale The locale instance.\n     * @param editingView The editing view instance the editable is related to.\n     * @param editableElement The editable element. If not specified, this view\n     * should create it. Otherwise, the existing element should be used.\n     */\n    constructor(locale, editingView, editableElement) {\n        super(locale);\n        /**\n         * The name of the editable UI view.\n         */\n        this.name = null;\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-content',\n                    'ck-editor__editable',\n                    'ck-rounded-corners'\n                ],\n                lang: locale.contentLanguage,\n                dir: locale.contentLanguageDirection\n            }\n        });\n        this.set('isFocused', false);\n        this._editableElement = editableElement;\n        this._hasExternalElement = !!this._editableElement;\n        this._editingView = editingView;\n    }\n    /**\n     * Renders the view by either applying the {@link #template} to the existing\n     * {@link module:ui/editableui/editableuiview~EditableUIView#_editableElement} or assigning {@link #element}\n     * as {@link module:ui/editableui/editableuiview~EditableUIView#_editableElement}.\n     */\n    render() {\n        super.render();\n        if (this._hasExternalElement) {\n            this.template.apply(this.element = this._editableElement);\n        }\n        else {\n            this._editableElement = this.element;\n        }\n        this.on('change:isFocused', () => this._updateIsFocusedClasses());\n        this._updateIsFocusedClasses();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        if (this._hasExternalElement) {\n            this.template.revert(this._editableElement);\n        }\n        super.destroy();\n    }\n    /**\n     * Whether an external {@link #_editableElement} was passed into the constructor, which also means\n     * the view will not render its {@link #template}.\n     */\n    get hasExternalElement() {\n        return this._hasExternalElement;\n    }\n    /**\n     * Updates the `ck-focused` and `ck-blurred` CSS classes on the {@link #element} according to\n     * the {@link #isFocused} property value using the {@link #_editingView editing view} API.\n     */\n    _updateIsFocusedClasses() {\n        const editingView = this._editingView;\n        if (editingView.isRenderingInProgress) {\n            updateAfterRender(this);\n        }\n        else {\n            update(this);\n        }\n        function update(view) {\n            editingView.change(writer => {\n                const viewRoot = editingView.document.getRoot(view.name);\n                writer.addClass(view.isFocused ? 'ck-focused' : 'ck-blurred', viewRoot);\n                writer.removeClass(view.isFocused ? 'ck-blurred' : 'ck-focused', viewRoot);\n            });\n        }\n        // In a case of a multi-root editor, a callback will be attached more than once (one callback for each root).\n        // While executing one callback the `isRenderingInProgress` observable is changing what causes executing another\n        // callback and render is called inside the already pending render.\n        // We need to be sure that callback is executed only when the value has changed from `true` to `false`.\n        // See https://github.com/ckeditor/ckeditor5/issues/1676.\n        function updateAfterRender(view) {\n            editingView.once('change:isRenderingInProgress', (evt, name, value) => {\n                if (!value) {\n                    update(view);\n                }\n                else {\n                    updateAfterRender(view);\n                }\n            });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/editableui/inline/inlineeditableuiview\n */\nimport EditableUIView from '../editableuiview.js';\n/**\n * The inline editable UI class implementing an inline {@link module:ui/editableui/editableuiview~EditableUIView}.\n */\nexport default class InlineEditableUIView extends EditableUIView {\n    /**\n     * Creates an instance of the InlineEditableUIView class.\n     *\n     * @param locale The locale instance.\n     * @param editingView The editing view instance the editable is related to.\n     * @param editableElement The editable element. If not specified, the\n     * {@link module:ui/editableui/editableuiview~EditableUIView}\n     * will create it. Otherwise, the existing element will be used.\n     * @param options Additional configuration of the view.\n     * @param options.label The label of the editable for assistive technologies. If not provided, a default label is used or,\n     * the existing `aria-label` attribute value from the specified `editableElement` is preserved.\n     */\n    constructor(locale, editingView, editableElement, options = {}) {\n        super(locale, editingView, editableElement);\n        this._options = options;\n        this.extendTemplate({\n            attributes: {\n                role: 'textbox',\n                class: 'ck-editor__editable_inline'\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        const editingView = this._editingView;\n        editingView.change(writer => {\n            const viewRoot = editingView.document.getRoot(this.name);\n            writer.setAttribute('aria-label', this.getEditableAriaLabel(), viewRoot);\n        });\n    }\n    /**\n     * Returns a normalized label for the editable view based on the environment.\n     */\n    getEditableAriaLabel() {\n        const t = this.locale.t;\n        const label = this._options.label;\n        const editableElement = this._editableElement;\n        const editableName = this.name;\n        if (typeof label == 'string') {\n            return label;\n        }\n        else if (typeof label === 'object') {\n            return label[editableName];\n        }\n        else if (typeof label === 'function') {\n            return label(this);\n        }\n        else if (editableElement) {\n            const existingLabel = editableElement.getAttribute('aria-label');\n            if (existingLabel) {\n                return existingLabel;\n            }\n        }\n        return t('Rich Text Editor. Editing area: %0', editableName);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/notification/notification\n */\n/* globals window */\nimport { ContextPlugin } from '@ckeditor/ckeditor5-core';\n/**\n * The Notification plugin.\n *\n * This plugin sends a few types of notifications: `success`, `info` and `warning`. The notifications need to be\n * handled and displayed by a plugin responsible for showing the UI of the notifications. Using this plugin for dispatching\n * notifications makes it possible to switch the notifications UI.\n *\n * Note that every unhandled and not stopped `warning` notification will be displayed as a system alert.\n * See {@link module:ui/notification/notification~Notification#showWarning}.\n */\nexport default class Notification extends ContextPlugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Notification';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        // Each unhandled and not stopped `show:warning` event is displayed as a system alert.\n        this.on('show:warning', (evt, data) => {\n            window.alert(data.message); // eslint-disable-line no-alert\n        }, { priority: 'lowest' });\n    }\n    /**\n     * Shows a success notification.\n     *\n     * By default, it fires the {@link #event:show:success `show:success` event} with the given `data`. The event namespace can be extended\n     * using the `data.namespace` option. For example:\n     *\n     * ```ts\n     * showSuccess( 'Image is uploaded.', {\n     * \tnamespace: 'upload:image'\n     * } );\n     * ```\n     *\n     * will fire the `show:success:upload:image` event.\n     *\n     * You can provide the title of the notification:\n     *\n     * ```ts\n     * showSuccess( 'Image is uploaded.', {\n     * \ttitle: 'Image upload success'\n     * } );\n     * ```\n     *\n     * @param message The content of the notification.\n     * @param data Additional data.\n     * @param data.namespace Additional event namespace.\n     * @param data.title The title of the notification.\n     */\n    showSuccess(message, data = {}) {\n        this._showNotification({\n            message,\n            type: 'success',\n            namespace: data.namespace,\n            title: data.title\n        });\n    }\n    /**\n     * Shows an information notification.\n     *\n     * By default, it fires the {@link #event:show:info `show:info` event} with the given `data`. The event namespace can be extended\n     * using the `data.namespace` option. For example:\n     *\n     * ```ts\n     * showInfo( 'Editor is offline.', {\n     * \tnamespace: 'editor:status'\n     * } );\n     * ```\n     *\n     * will fire the `show:info:editor:status` event.\n     *\n     * You can provide the title of the notification:\n     *\n     * ```ts\n     * showInfo( 'Editor is offline.', {\n     * \ttitle: 'Network information'\n     * } );\n     * ```\n     *\n     * @param message The content of the notification.\n     * @param data Additional data.\n     * @param data.namespace Additional event namespace.\n     * @param data.title The title of the notification.\n     */\n    showInfo(message, data = {}) {\n        this._showNotification({\n            message,\n            type: 'info',\n            namespace: data.namespace,\n            title: data.title\n        });\n    }\n    /**\n     * Shows a warning notification.\n     *\n     * By default, it fires the {@link #event:show:warning `show:warning` event}\n     * with the given `data`. The event namespace can be extended using the `data.namespace` option. For example:\n     *\n     * ```ts\n     * showWarning( 'Image upload error.', {\n     * \tnamespace: 'upload:image'\n     * } );\n     * ```\n     *\n     * will fire the `show:warning:upload:image` event.\n     *\n     * You can provide the title of the notification:\n     *\n     * ```ts\n     * showWarning( 'Image upload error.', {\n     * \ttitle: 'Upload failed'\n     * } );\n     * ```\n     *\n     * Note that each unhandled and not stopped `warning` notification will be displayed as a system alert.\n     * The plugin responsible for displaying warnings should `stop()` the event to prevent displaying it as an alert:\n     *\n     * ```ts\n     * notifications.on( 'show:warning', ( evt, data ) => {\n     * \t// Do something with the data.\n     *\n     * \t// Stop this event to prevent displaying it as an alert.\n     * \tevt.stop();\n     * } );\n     * ```\n     *\n     * You can attach many listeners to the same event and `stop()` this event in a listener with a low priority:\n     *\n     * ```ts\n     * notifications.on( 'show:warning', ( evt, data ) => {\n     * \t// Show the warning in the UI, but do not stop it.\n     * } );\n     *\n     * notifications.on( 'show:warning', ( evt, data ) => {\n     * \t// Log the warning to some error tracker.\n     *\n     * \t// Stop this event to prevent displaying it as an alert.\n     * \tevt.stop();\n     * }, { priority: 'low' } );\n     * ```\n     *\n     * @param message The content of the notification.\n     * @param data Additional data.\n     * @param data.namespace Additional event namespace.\n     * @param data.title The title of the notification.\n     */\n    showWarning(message, data = {}) {\n        this._showNotification({\n            message,\n            type: 'warning',\n            namespace: data.namespace,\n            title: data.title\n        });\n    }\n    /**\n     * Fires the `show` event with the specified type, namespace and message.\n     *\n     * @param data The message data.\n     * @param data.message The content of the notification.\n     * @param data.type The type of the message.\n     * @param data.namespace Additional event namespace.\n     * @param data.title The title of the notification.\n     */\n    _showNotification(data) {\n        const event = data.namespace ?\n            `show:${data.type}:${data.namespace}` :\n            `show:${data.type}`;\n        this.fire(event, {\n            message: data.message,\n            type: data.type,\n            title: data.title || ''\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/model\n */\nimport { ObservableMixin } from '@ckeditor/ckeditor5-utils';\nimport { extend } from 'lodash-es';\n/**\n * The base MVC model class.\n */\nexport default class Model extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a new Model instance.\n     *\n     * @param attributes The model state attributes to be defined during the instance creation.\n     * @param properties The (out of state) properties to be appended to the instance during creation.\n     */\n    constructor(attributes, properties) {\n        super();\n        // Extend this instance with the additional (out of state) properties.\n        if (properties) {\n            extend(this, properties);\n        }\n        // Initialize the attributes.\n        if (attributes) {\n            this.set(attributes);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/panel/balloon/contextualballoon\n */\nimport BalloonPanelView from './balloonpanelview.js';\nimport View from '../../view.js';\nimport ButtonView from '../../button/buttonview.js';\nimport { Plugin, icons } from '@ckeditor/ckeditor5-core';\nimport { CKEditorError, FocusTracker, Rect, toUnit } from '@ckeditor/ckeditor5-utils';\nimport '../../../theme/components/panel/balloonrotator.css';\nimport '../../../theme/components/panel/fakepanel.css';\nconst toPx = /* #__PURE__ */ toUnit('px');\n/**\n * Provides the common contextual balloon for the editor.\n *\n * The role of this plugin is to unify the contextual balloons logic, simplify views management and help\n * avoid the unnecessary complexity of handling multiple {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView}\n * instances in the editor.\n *\n * This plugin allows for creating single or multiple panel stacks.\n *\n * Each stack may have multiple views, with the one on the top being visible. When the visible view is removed from the stack,\n * the previous view becomes visible.\n *\n * It might be useful to implement nested navigation in a balloon. For instance, a toolbar view may contain a link button.\n * When you click it, a link view (which lets you set the URL) is created and put on top of the toolbar view, so the link panel\n * is displayed. When you finish editing the link and close (remove) the link view, the toolbar view is visible again.\n *\n * However, there are cases when there are multiple independent balloons to be displayed, for instance, if the selection\n * is inside two inline comments at the same time. For such cases, you can create two independent panel stacks.\n * The contextual balloon plugin will create a navigation bar to let the users switch between these panel stacks using the \"Next\"\n * and \"Previous\" buttons.\n *\n * If there are no views in the current stack, the balloon panel will try to switch to the next stack. If there are no\n * panels in any stack, the balloon panel will be hidden.\n *\n * **Note**: To force the balloon panel to show only one view, even if there are other stacks, use the `singleViewMode=true` option\n * when {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon#add adding} a view to a panel.\n *\n * From the implementation point of view, the contextual ballon plugin is reusing a single\n * {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView} instance to display multiple contextual balloon\n * panels in the editor. It also creates a special {@link module:ui/panel/balloon/contextualballoon~RotatorView rotator view},\n * used to manage multiple panel stacks. Rotator view is a child of the balloon panel view and the parent of the specific\n * view you want to display. If there is more than one panel stack to be displayed, the rotator view will add a\n * navigation bar. If there is only one stack, the rotator view is transparent (it does not add any UI elements).\n */\nexport default class ContextualBalloon extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ContextualBalloon';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        /**\n         * The map of views and their stacks.\n         */\n        this._viewToStack = new Map();\n        /**\n         * The map of IDs and stacks.\n         */\n        this._idToStack = new Map();\n        /**\n         * The common balloon panel view.\n         */\n        this._view = null;\n        /**\n         * Rotator view embedded in the contextual balloon.\n         * Displays the currently visible view in the balloon and provides navigation for switching stacks.\n         */\n        this._rotatorView = null;\n        /**\n         * Displays fake panels under the balloon panel view when multiple stacks are added to the balloon.\n         */\n        this._fakePanelsView = null;\n        this.positionLimiter = () => {\n            const view = this.editor.editing.view;\n            const viewDocument = view.document;\n            const editableElement = viewDocument.selection.editableElement;\n            if (editableElement) {\n                return view.domConverter.mapViewToDom(editableElement.root);\n            }\n            return null;\n        };\n        this.decorate('getPositionOptions');\n        this.set('visibleView', null);\n        this.set('_numberOfStacks', 0);\n        this.set('_singleViewMode', false);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        if (this._view) {\n            this._view.destroy();\n        }\n        if (this._rotatorView) {\n            this._rotatorView.destroy();\n        }\n        if (this._fakePanelsView) {\n            this._fakePanelsView.destroy();\n        }\n    }\n    /**\n     * The common balloon panel view.\n     */\n    get view() {\n        if (!this._view) {\n            this._createPanelView();\n        }\n        return this._view;\n    }\n    /**\n     * Returns `true` when the given view is in one of the stacks. Otherwise returns `false`.\n     */\n    hasView(view) {\n        return Array.from(this._viewToStack.keys()).includes(view);\n    }\n    /**\n     * Adds a new view to the stack and makes it visible if the current stack is visible\n     * or it is the first view in the balloon.\n     *\n     * @param data The configuration of the view.\n     * @param data.stackId The ID of the stack that the view is added to. Defaults to `'main'`.\n     * @param data.view The content of the balloon.\n     * @param data.position Positioning options.\n     * @param data.balloonClassName An additional CSS class added to the {@link #view balloon} when visible.\n     * @param data.withArrow Whether the {@link #view balloon} should be rendered with an arrow. Defaults to `true`.\n     * @param data.singleViewMode Whether the view should be the only visible view even if other stacks were added. Defaults to `false`.\n     */\n    add(data) {\n        if (!this._view) {\n            this._createPanelView();\n        }\n        if (this.hasView(data.view)) {\n            /**\n             * Trying to add configuration of the same view more than once.\n             *\n             * @error contextualballoon-add-view-exist\n             */\n            throw new CKEditorError('contextualballoon-add-view-exist', [this, data]);\n        }\n        const stackId = data.stackId || 'main';\n        // If new stack is added, creates it and show view from this stack.\n        if (!this._idToStack.has(stackId)) {\n            this._idToStack.set(stackId, new Map([[data.view, data]]));\n            this._viewToStack.set(data.view, this._idToStack.get(stackId));\n            this._numberOfStacks = this._idToStack.size;\n            if (!this._visibleStack || data.singleViewMode) {\n                this.showStack(stackId);\n            }\n            return;\n        }\n        const stack = this._idToStack.get(stackId);\n        if (data.singleViewMode) {\n            this.showStack(stackId);\n        }\n        // Add new view to the stack.\n        stack.set(data.view, data);\n        this._viewToStack.set(data.view, stack);\n        // And display it if is added to the currently visible stack.\n        if (stack === this._visibleStack) {\n            this._showView(data);\n        }\n    }\n    /**\n     * Removes the given view from the stack. If the removed view was visible,\n     * the view preceding it in the stack will become visible instead.\n     * When there is no view in the stack, the next stack will be displayed.\n     * When there are no more stacks, the balloon will hide.\n     *\n     * @param view A view to be removed from the balloon.\n     */\n    remove(view) {\n        if (!this.hasView(view)) {\n            /**\n             * Trying to remove the configuration of the view not defined in the stack.\n             *\n             * @error contextualballoon-remove-view-not-exist\n             */\n            throw new CKEditorError('contextualballoon-remove-view-not-exist', [this, view]);\n        }\n        const stack = this._viewToStack.get(view);\n        if (this._singleViewMode && this.visibleView === view) {\n            this._singleViewMode = false;\n        }\n        // When visible view will be removed we need to show a preceding view or next stack\n        // if a view is the only view in the stack.\n        if (this.visibleView === view) {\n            if (stack.size === 1) {\n                if (this._idToStack.size > 1) {\n                    this._showNextStack();\n                }\n                else {\n                    this.view.hide();\n                    this.visibleView = null;\n                    this._rotatorView.hideView();\n                }\n            }\n            else {\n                this._showView(Array.from(stack.values())[stack.size - 2]);\n            }\n        }\n        if (stack.size === 1) {\n            this._idToStack.delete(this._getStackId(stack));\n            this._numberOfStacks = this._idToStack.size;\n        }\n        else {\n            stack.delete(view);\n        }\n        this._viewToStack.delete(view);\n    }\n    /**\n     * Updates the position of the balloon using the position data of the first visible view in the stack.\n     * When new position data is given, the position data of the currently visible view will be updated.\n     *\n     * @param position Position options.\n     */\n    updatePosition(position) {\n        if (position) {\n            this._visibleStack.get(this.visibleView).position = position;\n        }\n        this.view.pin(this.getPositionOptions());\n        this._fakePanelsView.updatePosition();\n    }\n    /**\n     * Returns position options of the last view in the stack.\n     * This keeps the balloon in the same position when the view is changed.\n     */\n    getPositionOptions() {\n        let position = Array.from(this._visibleStack.values()).pop().position;\n        if (position) {\n            // Use the default limiter if none has been specified.\n            if (!position.limiter) {\n                // Don't modify the original options object.\n                position = Object.assign({}, position, {\n                    limiter: this.positionLimiter\n                });\n            }\n            // Don't modify the original options object.\n            position = Object.assign({}, position, {\n                viewportOffsetConfig: this.editor.ui.viewportOffset\n            });\n        }\n        return position;\n    }\n    /**\n     * Shows the last view from the stack of a given ID.\n     */\n    showStack(id) {\n        this.visibleStack = id;\n        const stack = this._idToStack.get(id);\n        if (!stack) {\n            /**\n             * Trying to show a stack that does not exist.\n             *\n             * @error contextualballoon-showstack-stack-not-exist\n             */\n            throw new CKEditorError('contextualballoon-showstack-stack-not-exist', this);\n        }\n        if (this._visibleStack === stack) {\n            return;\n        }\n        this._showView(Array.from(stack.values()).pop());\n    }\n    /**\n     * Initializes view instances.\n     */\n    _createPanelView() {\n        this._view = new BalloonPanelView(this.editor.locale);\n        this.editor.ui.view.body.add(this._view);\n        this._rotatorView = this._createRotatorView();\n        this._fakePanelsView = this._createFakePanelsView();\n    }\n    /**\n     * Returns the stack of the currently visible view.\n     */\n    get _visibleStack() {\n        return this._viewToStack.get(this.visibleView);\n    }\n    /**\n     * Returns the ID of the given stack.\n     */\n    _getStackId(stack) {\n        const entry = Array.from(this._idToStack.entries()).find(entry => entry[1] === stack);\n        return entry[0];\n    }\n    /**\n     * Shows the last view from the next stack.\n     */\n    _showNextStack() {\n        const stacks = Array.from(this._idToStack.values());\n        let nextIndex = stacks.indexOf(this._visibleStack) + 1;\n        if (!stacks[nextIndex]) {\n            nextIndex = 0;\n        }\n        this.showStack(this._getStackId(stacks[nextIndex]));\n    }\n    /**\n     * Shows the last view from the previous stack.\n     */\n    _showPrevStack() {\n        const stacks = Array.from(this._idToStack.values());\n        let nextIndex = stacks.indexOf(this._visibleStack) - 1;\n        if (!stacks[nextIndex]) {\n            nextIndex = stacks.length - 1;\n        }\n        this.showStack(this._getStackId(stacks[nextIndex]));\n    }\n    /**\n     * Creates a rotator view.\n     */\n    _createRotatorView() {\n        const view = new RotatorView(this.editor.locale);\n        const t = this.editor.locale.t;\n        this.view.content.add(view);\n        // Hide navigation when there is only a one stack & not in single view mode.\n        view.bind('isNavigationVisible').to(this, '_numberOfStacks', this, '_singleViewMode', (value, isSingleViewMode) => {\n            return !isSingleViewMode && value > 1;\n        });\n        // Update balloon position after toggling navigation.\n        view.on('change:isNavigationVisible', () => (this.updatePosition()), { priority: 'low' });\n        // Update stacks counter value.\n        view.bind('counter').to(this, 'visibleView', this, '_numberOfStacks', (visibleView, numberOfStacks) => {\n            if (numberOfStacks < 2) {\n                return '';\n            }\n            const current = Array.from(this._idToStack.values()).indexOf(this._visibleStack) + 1;\n            return t('%0 of %1', [current, numberOfStacks]);\n        });\n        view.buttonNextView.on('execute', () => {\n            // When current view has a focus then move focus to the editable before removing it,\n            // otherwise editor will lost focus.\n            if (view.focusTracker.isFocused) {\n                this.editor.editing.view.focus();\n            }\n            this._showNextStack();\n        });\n        view.buttonPrevView.on('execute', () => {\n            // When current view has a focus then move focus to the editable before removing it,\n            // otherwise editor will lost focus.\n            if (view.focusTracker.isFocused) {\n                this.editor.editing.view.focus();\n            }\n            this._showPrevStack();\n        });\n        return view;\n    }\n    /**\n     * Creates a fake panels view.\n     */\n    _createFakePanelsView() {\n        const view = new FakePanelsView(this.editor.locale, this.view);\n        view.bind('numberOfPanels').to(this, '_numberOfStacks', this, '_singleViewMode', (number, isSingleViewMode) => {\n            const showPanels = !isSingleViewMode && number >= 2;\n            return showPanels ? Math.min(number - 1, 2) : 0;\n        });\n        view.listenTo(this.view, 'change:top', () => view.updatePosition());\n        view.listenTo(this.view, 'change:left', () => view.updatePosition());\n        this.editor.ui.view.body.add(view);\n        return view;\n    }\n    /**\n     * Sets the view as the content of the balloon and attaches the balloon using position\n     * options of the first view.\n     *\n     * @param data Configuration.\n     * @param data.view The view to show in the balloon.\n     * @param data.balloonClassName Additional class name which will be added to the {@link #view balloon}.\n     * @param data.withArrow Whether the {@link #view balloon} should be rendered with an arrow.\n     */\n    _showView({ view, balloonClassName = '', withArrow = true, singleViewMode = false }) {\n        this.view.class = balloonClassName;\n        this.view.withArrow = withArrow;\n        this._rotatorView.showView(view);\n        this.visibleView = view;\n        this.view.pin(this.getPositionOptions());\n        this._fakePanelsView.updatePosition();\n        if (singleViewMode) {\n            this._singleViewMode = true;\n        }\n    }\n}\n/**\n * Rotator view is a helper class for the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon ContextualBalloon}.\n * It is used for displaying the last view from the current stack and providing navigation buttons for switching stacks.\n * See the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon ContextualBalloon} documentation to learn more.\n */\nexport class RotatorView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        const t = locale.t;\n        const bind = this.bindTemplate;\n        this.set('isNavigationVisible', true);\n        this.focusTracker = new FocusTracker();\n        this.buttonPrevView = this._createButtonView(t('Previous'), icons.previousArrow);\n        this.buttonNextView = this._createButtonView(t('Next'), icons.nextArrow);\n        this.content = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-balloon-rotator'\n                ],\n                'z-index': '-1'\n            },\n            children: [\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: [\n                            'ck-balloon-rotator__navigation',\n                            bind.to('isNavigationVisible', value => value ? '' : 'ck-hidden')\n                        ]\n                    },\n                    children: [\n                        this.buttonPrevView,\n                        {\n                            tag: 'span',\n                            attributes: {\n                                class: [\n                                    'ck-balloon-rotator__counter'\n                                ]\n                            },\n                            children: [\n                                {\n                                    text: bind.to('counter')\n                                }\n                            ]\n                        },\n                        this.buttonNextView\n                    ]\n                },\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: 'ck-balloon-rotator__content'\n                    },\n                    children: this.content\n                }\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.focusTracker.add(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n    }\n    /**\n     * Shows a given view.\n     *\n     * @param view The view to show.\n     */\n    showView(view) {\n        this.hideView();\n        this.content.add(view);\n    }\n    /**\n     * Hides the currently displayed view.\n     */\n    hideView() {\n        this.content.clear();\n    }\n    /**\n     * Creates a navigation button view.\n     *\n     * @param label The button label.\n     * @param icon The button icon.\n     */\n    _createButtonView(label, icon) {\n        const view = new ButtonView(this.locale);\n        view.set({\n            label,\n            icon,\n            tooltip: true\n        });\n        return view;\n    }\n}\n/**\n * Displays additional layers under the balloon when multiple stacks are added to the balloon.\n */\nclass FakePanelsView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, balloonPanelView) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('top', 0);\n        this.set('left', 0);\n        this.set('height', 0);\n        this.set('width', 0);\n        this.set('numberOfPanels', 0);\n        this.content = this.createCollection();\n        this._balloonPanelView = balloonPanelView;\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck-fake-panel',\n                    bind.to('numberOfPanels', number => number ? '' : 'ck-hidden')\n                ],\n                style: {\n                    top: bind.to('top', toPx),\n                    left: bind.to('left', toPx),\n                    width: bind.to('width', toPx),\n                    height: bind.to('height', toPx)\n                }\n            },\n            children: this.content\n        });\n        this.on('change:numberOfPanels', (evt, name, next, prev) => {\n            if (next > prev) {\n                this._addPanels(next - prev);\n            }\n            else {\n                this._removePanels(prev - next);\n            }\n            this.updatePosition();\n        });\n    }\n    _addPanels(number) {\n        while (number--) {\n            const view = new View();\n            view.setTemplate({ tag: 'div' });\n            this.content.add(view);\n            this.registerChild(view);\n        }\n    }\n    _removePanels(number) {\n        while (number--) {\n            const view = this.content.last;\n            this.content.remove(view);\n            this.deregisterChild(view);\n            view.destroy();\n        }\n    }\n    /**\n     * Updates coordinates of fake panels.\n     */\n    updatePosition() {\n        if (this.numberOfPanels) {\n            const { top, left } = this._balloonPanelView;\n            const { width, height } = new Rect(this._balloonPanelView.element);\n            Object.assign(this, { top, left, width, height });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/panel/sticky/stickypanelview\n */\nimport View from '../../view.js';\nimport Template from '../../template.js';\nimport { global, toUnit, Rect } from '@ckeditor/ckeditor5-utils';\n// @if CK_DEBUG_STICKYPANEL // const {\n// @if CK_DEBUG_STICKYPANEL // \tdefault: RectDrawer,\n// @if CK_DEBUG_STICKYPANEL // \tdiagonalStylesBlack\n// @if CK_DEBUG_STICKYPANEL // } = require( '@ckeditor/ckeditor5-utils/tests/_utils/rectdrawer' );\nimport '../../../theme/components/panel/stickypanel.css';\nconst toPx = /* #__PURE__ */ toUnit('px');\n/**\n * The sticky panel view class.\n */\nexport default class StickyPanelView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('isActive', false);\n        this.set('isSticky', false);\n        this.set('limiterElement', null);\n        this.set('limiterBottomOffset', 50);\n        this.set('viewportTopOffset', 0);\n        this.set('_marginLeft', null);\n        this.set('_isStickyToTheBottomOfLimiter', false);\n        this.set('_stickyTopOffset', null);\n        this.set('_stickyBottomOffset', null);\n        this.content = this.createCollection();\n        this._contentPanelPlaceholder = new Template({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-sticky-panel__placeholder'\n                ],\n                style: {\n                    display: bind.to('isSticky', isSticky => isSticky ? 'block' : 'none'),\n                    height: bind.to('isSticky', isSticky => {\n                        return isSticky ? toPx(this._contentPanelRect.height) : null;\n                    })\n                }\n            }\n        }).render();\n        this.contentPanelElement = new Template({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-sticky-panel__content',\n                    // Toggle class of the panel when \"sticky\" state changes in the view.\n                    bind.if('isSticky', 'ck-sticky-panel__content_sticky'),\n                    bind.if('_isStickyToTheBottomOfLimiter', 'ck-sticky-panel__content_sticky_bottom-limit')\n                ],\n                style: {\n                    width: bind.to('isSticky', isSticky => {\n                        return isSticky ? toPx(this._contentPanelPlaceholder.getBoundingClientRect().width) : null;\n                    }),\n                    top: bind.to('_stickyTopOffset', value => value ? toPx(value) : value),\n                    bottom: bind.to('_stickyBottomOffset', value => value ? toPx(value) : value),\n                    marginLeft: bind.to('_marginLeft')\n                }\n            },\n            children: this.content\n        }).render();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-sticky-panel'\n                ]\n            },\n            children: [\n                this._contentPanelPlaceholder,\n                this.contentPanelElement\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        // Check if the panel should go into the sticky state immediately.\n        this.checkIfShouldBeSticky();\n        // Update sticky state of the panel as the window and ancestors are being scrolled.\n        this.listenTo(global.document, 'scroll', () => {\n            this.checkIfShouldBeSticky();\n        }, { useCapture: true });\n        // Synchronize with `model.isActive` because sticking an inactive panel is pointless.\n        this.listenTo(this, 'change:isActive', () => {\n            this.checkIfShouldBeSticky();\n        });\n    }\n    /**\n     * Analyzes the environment to decide whether the panel should be sticky or not.\n     * Then handles the positioning of the panel.\n     */\n    checkIfShouldBeSticky() {\n        // @if CK_DEBUG_STICKYPANEL // RectDrawer.clear();\n        if (!this.limiterElement || !this.isActive) {\n            this._unstick();\n            return;\n        }\n        const limiterRect = new Rect(this.limiterElement);\n        let visibleLimiterRect = limiterRect.getVisible();\n        if (visibleLimiterRect) {\n            const windowRect = new Rect(global.window);\n            windowRect.top += this.viewportTopOffset;\n            windowRect.height -= this.viewportTopOffset;\n            visibleLimiterRect = visibleLimiterRect.getIntersection(windowRect);\n        }\n        // @if CK_DEBUG_STICKYPANEL // if ( visibleLimiterRect ) {\n        // @if CK_DEBUG_STICKYPANEL // \tRectDrawer.draw( visibleLimiterRect,\n        // @if CK_DEBUG_STICKYPANEL // \t\t{ outlineWidth: '3px', opacity: '.8', outlineColor: 'red', outlineOffset: '-3px' },\n        // @if CK_DEBUG_STICKYPANEL // \t\t'Visible anc'\n        // @if CK_DEBUG_STICKYPANEL // \t);\n        // @if CK_DEBUG_STICKYPANEL // }\n        // @if CK_DEBUG_STICKYPANEL //\n        // @if CK_DEBUG_STICKYPANEL // RectDrawer.draw( limiterRect,\n        // @if CK_DEBUG_STICKYPANEL // \t{ outlineWidth: '3px', opacity: '.8', outlineColor: 'green', outlineOffset: '-3px' },\n        // @if CK_DEBUG_STICKYPANEL // \t'Limiter'\n        // @if CK_DEBUG_STICKYPANEL // );\n        // Stick the panel only if\n        // * the limiter's ancestors are intersecting with each other so that some of their rects are visible,\n        // * and the limiter's top edge is above the visible ancestors' top edge.\n        if (visibleLimiterRect && limiterRect.top < visibleLimiterRect.top) {\n            // @if CK_DEBUG_STICKYPANEL // RectDrawer.draw( visibleLimiterRect,\n            // @if CK_DEBUG_STICKYPANEL // \t{ outlineWidth: '3px', opacity: '.8', outlineColor: 'fuchsia', outlineOffset: '-3px',\n            // @if CK_DEBUG_STICKYPANEL // \t\tbackgroundColor: 'rgba(255, 0, 255, .3)' },\n            // @if CK_DEBUG_STICKYPANEL // \t'Visible limiter'\n            // @if CK_DEBUG_STICKYPANEL // );\n            const visibleLimiterTop = visibleLimiterRect.top;\n            // Check if there's a change the panel can be sticky to the bottom of the limiter.\n            if (visibleLimiterTop + this._contentPanelRect.height + this.limiterBottomOffset > visibleLimiterRect.bottom) {\n                const stickyBottomOffset = Math.max(limiterRect.bottom - visibleLimiterRect.bottom, 0) + this.limiterBottomOffset;\n                // @if CK_DEBUG_STICKYPANEL // const stickyBottomOffsetRect = new Rect( {\n                // @if CK_DEBUG_STICKYPANEL // \ttop: limiterRect.bottom - stickyBottomOffset, left: 0, right: 2000,\n                // @if CK_DEBUG_STICKYPANEL // \tbottom: limiterRect.bottom - stickyBottomOffset, width: 2000, height: 1\n                // @if CK_DEBUG_STICKYPANEL // } );\n                // @if CK_DEBUG_STICKYPANEL // RectDrawer.draw( stickyBottomOffsetRect,\n                // @if CK_DEBUG_STICKYPANEL // \t{ outlineWidth: '1px', opacity: '.8', outlineColor: 'black' },\n                // @if CK_DEBUG_STICKYPANEL // \t'Sticky bottom offset'\n                // @if CK_DEBUG_STICKYPANEL // );\n                // Check if sticking the panel to the bottom of the limiter does not cause it to suddenly\n                // move upwards if there's not enough space for it.\n                if (limiterRect.bottom - stickyBottomOffset > limiterRect.top + this._contentPanelRect.height) {\n                    this._stickToBottomOfLimiter(stickyBottomOffset);\n                }\n                else {\n                    this._unstick();\n                }\n            }\n            else {\n                if (this._contentPanelRect.height + this.limiterBottomOffset < limiterRect.height) {\n                    this._stickToTopOfAncestors(visibleLimiterTop);\n                }\n                else {\n                    this._unstick();\n                }\n            }\n        }\n        else {\n            this._unstick();\n        }\n        // @if CK_DEBUG_STICKYPANEL // console.clear();\n        // @if CK_DEBUG_STICKYPANEL // console.log( 'isSticky', this.isSticky );\n        // @if CK_DEBUG_STICKYPANEL // console.log( '_isStickyToTheBottomOfLimiter', this._isStickyToTheBottomOfLimiter );\n        // @if CK_DEBUG_STICKYPANEL // console.log( '_stickyTopOffset', this._stickyTopOffset );\n        // @if CK_DEBUG_STICKYPANEL // console.log( '_stickyBottomOffset', this._stickyBottomOffset );\n        // @if CK_DEBUG_STICKYPANEL // if ( visibleLimiterRect ) {\n        // @if CK_DEBUG_STICKYPANEL // \tRectDrawer.draw( visibleLimiterRect,\n        // @if CK_DEBUG_STICKYPANEL // \t\t{ ...diagonalStylesBlack,\n        // @if CK_DEBUG_STICKYPANEL // \t\t\toutlineWidth: '3px', opacity: '.8', outlineColor: 'orange', outlineOffset: '-3px',\n        // @if CK_DEBUG_STICKYPANEL // \t\t\tbackgroundColor: 'rgba(0, 0, 255, .2)' },\n        // @if CK_DEBUG_STICKYPANEL // \t\t'visibleLimiterRect'\n        // @if CK_DEBUG_STICKYPANEL // \t);\n        // @if CK_DEBUG_STICKYPANEL // }\n    }\n    /**\n     * Sticks the panel at the given CSS `top` offset.\n     *\n     * @private\n     * @param topOffset\n     */\n    _stickToTopOfAncestors(topOffset) {\n        this.isSticky = true;\n        this._isStickyToTheBottomOfLimiter = false;\n        this._stickyTopOffset = topOffset;\n        this._stickyBottomOffset = null;\n        this._marginLeft = toPx(-global.window.scrollX);\n    }\n    /**\n     * Sticks the panel at the bottom of the limiter with a given CSS `bottom` offset.\n     *\n     * @private\n     * @param stickyBottomOffset\n     */\n    _stickToBottomOfLimiter(stickyBottomOffset) {\n        this.isSticky = true;\n        this._isStickyToTheBottomOfLimiter = true;\n        this._stickyTopOffset = null;\n        this._stickyBottomOffset = stickyBottomOffset;\n        this._marginLeft = toPx(-global.window.scrollX);\n    }\n    /**\n     * Unsticks the panel putting it back to its original position.\n     *\n     * @private\n     */\n    _unstick() {\n        this.isSticky = false;\n        this._isStickyToTheBottomOfLimiter = false;\n        this._stickyTopOffset = null;\n        this._stickyBottomOffset = null;\n        this._marginLeft = null;\n    }\n    /**\n     * Returns the bounding rect of the {@link #contentPanelElement}.\n     *\n     * @private\n     */\n    get _contentPanelRect() {\n        return new Rect(this.contentPanelElement);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/search/text/searchtextqueryview\n */\nimport ButtonView from '../../button/buttonview.js';\nimport IconView from '../../icon/iconview.js';\nimport LabeledFieldView from '../../labeledfield/labeledfieldview.js';\nimport { createLabeledInputText } from '../../labeledfield/utils.js';\nimport { icons } from '@ckeditor/ckeditor5-core';\n/**\n * A search input field for the {@link module:ui/search/text/searchtextview~SearchTextView} component.\n *\n * @internal\n * @extends module:ui/labeledfield/labeledfieldview~LabeledFieldView\n */\nexport default class SearchTextQueryView extends LabeledFieldView {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, config) {\n        const t = locale.t;\n        const viewConfig = Object.assign({}, {\n            showResetButton: true,\n            showIcon: true,\n            creator: createLabeledInputText\n        }, config);\n        super(locale, viewConfig.creator);\n        this.label = config.label;\n        this._viewConfig = viewConfig;\n        if (this._viewConfig.showIcon) {\n            this.iconView = new IconView();\n            this.iconView.content = icons.loupe;\n            this.fieldWrapperChildren.add(this.iconView, 0);\n            this.extendTemplate({\n                attributes: {\n                    class: 'ck-search__query_with-icon'\n                }\n            });\n        }\n        if (this._viewConfig.showResetButton) {\n            this.resetButtonView = new ButtonView(locale);\n            this.resetButtonView.set({\n                label: t('Clear'),\n                icon: icons.cancel,\n                class: 'ck-search__reset',\n                isVisible: false,\n                tooltip: true\n            });\n            this.resetButtonView.on('execute', () => {\n                this.reset();\n                this.focus();\n                this.fire('reset');\n            });\n            this.resetButtonView.bind('isVisible').to(this.fieldView, 'isEmpty', isEmpty => !isEmpty);\n            this.fieldWrapperChildren.add(this.resetButtonView);\n            this.extendTemplate({\n                attributes: {\n                    class: 'ck-search__query_with-reset'\n                }\n            });\n        }\n    }\n    /**\n     * Resets the search field to its default state.\n     */\n    reset() {\n        this.fieldView.reset();\n        if (this._viewConfig.showResetButton) {\n            this.resetButtonView.isVisible = false;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport View from '../view.js';\n/**\n * A view displaying an information text related to different states of {@link module:ui/search/text/searchtextview~SearchTextView}.\n *\n * @internal\n */\nexport default class SearchInfoView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor() {\n        super();\n        const bind = this.bindTemplate;\n        this.set({\n            isVisible: false,\n            primaryText: '',\n            secondaryText: ''\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-search__info',\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ],\n                tabindex: -1\n            },\n            children: [\n                {\n                    tag: 'span',\n                    children: [\n                        {\n                            text: [bind.to('primaryText')]\n                        }\n                    ]\n                },\n                {\n                    tag: 'span',\n                    children: [\n                        {\n                            text: [bind.to('secondaryText')]\n                        }\n                    ]\n                }\n            ]\n        });\n    }\n    /**\n     * Focuses the view\n     */\n    focus() {\n        this.element.focus();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/search/searchresultsview\n */\nimport View from '../view.js';\nimport { FocusTracker } from '@ckeditor/ckeditor5-utils';\nimport { default as FocusCycler } from '../focuscycler.js';\n/**\n * A sub-component of {@link module:ui/search/text/searchtextview~SearchTextView}. It hosts the filtered and the information views.\n */\nexport default class SearchResultsView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.children = this.createCollection();\n        this.focusTracker = new FocusTracker();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-search__results'\n                ],\n                tabindex: -1\n            },\n            children: this.children\n        });\n        this._focusCycler = new FocusCycler({\n            focusables: this.children,\n            focusTracker: this.focusTracker\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        for (const child of this.children) {\n            this.focusTracker.add(child.element);\n        }\n    }\n    /**\n     * Focuses the view.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Focuses the first child view.\n     */\n    focusFirst() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Focuses the last child view.\n     */\n    focusLast() {\n        this._focusCycler.focusLast();\n    }\n}\n", "import toString from './toString.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n    reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n  string = toString(string);\n  return (string && reHasRegExpChar.test(string))\n    ? string.replace(reRegExpChar, '\\\\$&')\n    : string;\n}\n\nexport default escapeRegExp;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/search/text/searchtextview\n*/\nimport { FocusTracker, KeystrokeHandler } from '@ckeditor/ckeditor5-utils';\nimport View from '../../view.js';\nimport { default as SearchTextQueryView } from './searchtextqueryview.js';\nimport SearchInfoView from '../searchinfoview.js';\nimport SearchResultsView from '../searchresultsview.js';\nimport FocusCycler from '../../focuscycler.js';\nimport { escapeRegExp } from 'lodash-es';\nimport '../../../theme/components/search/search.css';\n/**\n * A search component that allows filtering of an arbitrary view based on a search query\n * specified by the user in a text field.\n *\n *```ts\n * // This view must specify the `filter()` and `focus()` methods.\n * const filteredView = ...;\n *\n * const searchView = new SearchTextView( locale, {\n * \tsearchFieldLabel: 'Search list items',\n * \tfilteredView\n * } );\n *\n * view.render();\n *\n * document.body.append( view.element );\n * ```\n */\nexport default class SearchTextView extends View {\n    /**\n     * Creates an instance of the {@link module:ui/search/text/searchtextview~SearchTextView} class.\n     *\n     * @param locale The localization services instance.\n     * @param config Configuration of the view.\n     */\n    constructor(locale, config) {\n        super(locale);\n        this._config = config;\n        this.filteredView = config.filteredView;\n        this.queryView = this._createSearchTextQueryView();\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.resultsView = new SearchResultsView(locale);\n        this.children = this.createCollection();\n        this.focusableChildren = this.createCollection([this.queryView, this.resultsView]);\n        this.set('isEnabled', true);\n        this.set('resultsCount', 0);\n        this.set('totalItemsCount', 0);\n        if (config.infoView && config.infoView.instance) {\n            this.infoView = config.infoView.instance;\n        }\n        else {\n            this.infoView = new SearchInfoView();\n            this._enableDefaultInfoViewBehavior();\n            this.on('render', () => {\n                // Initial search that determines if there are any searchable items\n                // and displays the corresponding info text.\n                this.search('');\n            });\n        }\n        this.resultsView.children.addMany([this.infoView, this.filteredView]);\n        this.focusCycler = new FocusCycler({\n            focusables: this.focusableChildren,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        this.on('search', (evt, { resultsCount, totalItemsCount }) => {\n            this.resultsCount = resultsCount;\n            this.totalItemsCount = totalItemsCount;\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-search',\n                    config.class || null\n                ],\n                tabindex: '-1'\n            },\n            children: this.children\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.children.addMany([\n            this.queryView,\n            this.resultsView\n        ]);\n        const stopPropagation = (data) => data.stopPropagation();\n        for (const focusableChild of this.focusableChildren) {\n            this.focusTracker.add(focusableChild.element);\n        }\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n        // Since the form is in the dropdown panel which is a child of the toolbar, the toolbar's\n        // keystroke handler would take over the key management in the URL input. We need to prevent\n        // this ASAP. Otherwise, the basic caret movement using the arrow keys will be impossible.\n        this.keystrokes.set('arrowright', stopPropagation);\n        this.keystrokes.set('arrowleft', stopPropagation);\n        this.keystrokes.set('arrowup', stopPropagation);\n        this.keystrokes.set('arrowdown', stopPropagation);\n    }\n    /**\n     * Focuses the {@link #queryView}.\n     */\n    focus() {\n        this.queryView.focus();\n    }\n    /**\n     * Resets the component to its initial state.\n     */\n    reset() {\n        this.queryView.reset();\n        this.search('');\n        this.filteredView.element.scrollTo(0, 0);\n    }\n    /**\n     * Searches the {@link #filteredView} for the given query.\n     *\n     * @internal\n     * @param query The search query string.\n     */\n    search(query) {\n        const regExp = query ? new RegExp(escapeRegExp(query), 'ig') : null;\n        const filteringResults = this.filteredView.filter(regExp);\n        this.fire('search', { query, ...filteringResults });\n    }\n    /**\n     * Creates a search field view based on configured creator..\n     */\n    _createSearchTextQueryView() {\n        const queryView = new SearchTextQueryView(this.locale, this._config.queryView);\n        this.listenTo(queryView.fieldView, 'input', () => {\n            this.search(queryView.fieldView.element.value);\n        });\n        queryView.on('reset', () => this.reset());\n        queryView.bind('isEnabled').to(this);\n        return queryView;\n    }\n    /**\n     * Initializes the default {@link #infoView} behavior with default text labels when no custom info view\n     * was specified in the view config.\n     */\n    _enableDefaultInfoViewBehavior() {\n        const t = this.locale.t;\n        const infoView = this.infoView;\n        this.on('search', (evt, data) => {\n            if (!data.resultsCount) {\n                const defaultTextConfig = this._config.infoView && this._config.infoView.text;\n                let primaryText, secondaryText;\n                if (data.totalItemsCount) {\n                    if (defaultTextConfig && defaultTextConfig.notFound) {\n                        primaryText = defaultTextConfig.notFound.primary;\n                        secondaryText = defaultTextConfig.notFound.secondary;\n                    }\n                    else {\n                        primaryText = t('No results found');\n                        secondaryText = '';\n                    }\n                }\n                else {\n                    if (defaultTextConfig && defaultTextConfig.noSearchableItems) {\n                        primaryText = defaultTextConfig.noSearchableItems.primary;\n                        secondaryText = defaultTextConfig.noSearchableItems.secondary;\n                    }\n                    else {\n                        primaryText = t('No searchable items');\n                        secondaryText = '';\n                    }\n                }\n                infoView.set({\n                    primaryText: normalizeInfoText(primaryText, data),\n                    secondaryText: normalizeInfoText(secondaryText, data),\n                    isVisible: true\n                });\n            }\n            else {\n                infoView.set({\n                    isVisible: false\n                });\n            }\n        });\n        function normalizeInfoText(text, { query, resultsCount, totalItemsCount }) {\n            return typeof text === 'function' ? text(query, resultsCount, totalItemsCount) : text;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/autocomplete/autocompleteview\n*/\nimport { getOptimalPosition, global, toUnit, Rect } from '@ckeditor/ckeditor5-utils';\nimport SearchTextView from '../search/text/searchtextview.js';\nimport '../../theme/components/autocomplete/autocomplete.css';\n/**\n * The autocomplete component's view class. It extends the {@link module:ui/search/text/searchtextview~SearchTextView} class\n * with a floating {@link #resultsView} that shows up when the user starts typing and hides when they blur\n * the component.\n */\nclass AutocompleteView extends SearchTextView {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, config) {\n        super(locale, config);\n        this._config = config;\n        const toPx = toUnit('px');\n        this.extendTemplate({\n            attributes: {\n                class: ['ck-autocomplete']\n            }\n        });\n        const bindResultsView = this.resultsView.bindTemplate;\n        this.resultsView.set('isVisible', false);\n        this.resultsView.set('_position', 's');\n        this.resultsView.set('_width', 0);\n        this.resultsView.extendTemplate({\n            attributes: {\n                class: [\n                    bindResultsView.if('isVisible', 'ck-hidden', value => !value),\n                    bindResultsView.to('_position', value => `ck-search__results_${value}`)\n                ],\n                style: {\n                    width: bindResultsView.to('_width', toPx)\n                }\n            }\n        });\n        // Update the visibility of the results view when the user focuses or blurs the component.\n        // This is also integration for the `resetOnBlur` configuration.\n        this.focusTracker.on('change:isFocused', (evt, name, isFocused) => {\n            this._updateResultsVisibility();\n            if (isFocused) {\n                // Reset the scroll position of the results view whenever the autocomplete reopens.\n                this.resultsView.element.scrollTop = 0;\n            }\n            else if (config.resetOnBlur) {\n                this.queryView.reset();\n            }\n        });\n        // Update the visibility of the results view when the user types in the query field.\n        // This is an integration for `queryMinChars` configuration.\n        // This is an integration for search results changing length and the #resultsView requiring to be repositioned.\n        this.on('search', () => {\n            this._updateResultsVisibility();\n            this._updateResultsViewWidthAndPosition();\n        });\n        // Hide the results view when the user presses the ESC key.\n        this.keystrokes.set('esc', (evt, cancel) => {\n            // Let the DOM event pass through if the focus is in the query view.\n            if (!this.resultsView.isVisible) {\n                return;\n            }\n            // Focus the query view first and only then close the results view. Otherwise, if the focus\n            // was in the results view, it will get lost.\n            this.queryView.focus();\n            this.resultsView.isVisible = false;\n            cancel();\n        });\n        // Update the position of the results view when the user scrolls the page.\n        // TODO: This needs to be debounced down the road.\n        this.listenTo(global.document, 'scroll', () => {\n            this._updateResultsViewWidthAndPosition();\n        });\n        // Hide the results when the component becomes disabled.\n        this.on('change:isEnabled', () => {\n            this._updateResultsVisibility();\n        });\n        // Update the value of the query field when the user selects a result.\n        this.filteredView.on('execute', (evt, { value }) => {\n            // Focus the query view first to avoid losing the focus.\n            this.focus();\n            // Resetting the view will ensure that the #queryView will update its empty state correctly.\n            // This prevents bugs related to dynamic labels or auto-grow when re-setting the same value\n            // to #queryView.fieldView.value (which does not trigger empty state change) to an\n            // #queryView.fieldView.element that has been changed by the user.\n            this.reset();\n            // Update the value of the query field.\n            this.queryView.fieldView.value = this.queryView.fieldView.element.value = value;\n            // Finally, hide the results view. The focus has been moved earlier so this is safe.\n            this.resultsView.isVisible = false;\n        });\n        // Update the position and width of the results view when it becomes visible.\n        this.resultsView.on('change:isVisible', () => {\n            this._updateResultsViewWidthAndPosition();\n        });\n    }\n    /**\n     * Updates the position of the results view on demand.\n     */\n    _updateResultsViewWidthAndPosition() {\n        if (!this.resultsView.isVisible) {\n            return;\n        }\n        this.resultsView._width = new Rect(this.queryView.fieldView.element).width;\n        const optimalResultsPosition = AutocompleteView._getOptimalPosition({\n            element: this.resultsView.element,\n            target: this.queryView.element,\n            fitInViewport: true,\n            positions: AutocompleteView.defaultResultsPositions\n        });\n        // _getOptimalPosition will return null if there is no optimal position found (e.g. target is off the viewport).\n        this.resultsView._position = optimalResultsPosition ? optimalResultsPosition.name : 's';\n    }\n    /**\n     * Updates the visibility of the results view on demand.\n     */\n    _updateResultsVisibility() {\n        const queryMinChars = typeof this._config.queryMinChars === 'undefined' ? 0 : this._config.queryMinChars;\n        const queryLength = this.queryView.fieldView.element.value.length;\n        this.resultsView.isVisible = this.focusTracker.isFocused && this.isEnabled && queryLength >= queryMinChars;\n    }\n}\n/**\n * Positions for the autocomplete results view. Two positions are defined by default:\n * * `s` - below the search field,\n * * `n` - above the search field.\n */\nAutocompleteView.defaultResultsPositions = [\n    (fieldRect => {\n        return {\n            top: fieldRect.bottom,\n            left: fieldRect.left,\n            name: 's'\n        };\n    }),\n    ((fieldRect, resultsRect) => {\n        return {\n            top: fieldRect.top - resultsRect.height,\n            left: fieldRect.left,\n            name: 'n'\n        };\n    })\n];\n/**\n * A function used to calculate the optimal position for the dropdown panel.\n */\nAutocompleteView._getOptimalPosition = getOptimalPosition;\nexport default AutocompleteView;\n", "/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default basePropertyOf;\n", "import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map characters to HTML entities. */\nvar htmlEscapes = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;'\n};\n\n/**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nvar escapeHtmlChar = basePropertyOf(htmlEscapes);\n\nexport default escapeHtmlChar;\n", "import escapeHtmlChar from './_escapeHtmlChar.js';\nimport toString from './toString.js';\n\n/** Used to match HTML entities and HTML characters. */\nvar reUnescapedHtml = /[&<>\"']/g,\n    reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\nfunction escape(string) {\n  string = toString(string);\n  return (string && reHasUnescapedHtml.test(string))\n    ? string.replace(reUnescapedHtml, escapeHtmlChar)\n    : string;\n}\n\nexport default escape;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/menubar/menubarmenubuttonview\n */\nimport IconView from '../icon/iconview.js';\nimport ListItemButtonView from '../button/listitembuttonview.js';\nimport dropdownArrowIcon from '../../theme/icons/dropdown-arrow.svg';\nimport '../../theme/components/menubar/menubarmenubutton.css';\n/**\n * A menu {@link module:ui/menubar/menubarmenuview~MenuBarMenuView#buttonView} class. Buttons like this one\n * open both top-level bar menus as well as sub-menus.\n */\nexport default class MenuBarMenuButtonView extends ListItemButtonView {\n    /**\n     * Creates an instance of the menu bar button view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set({\n            withText: true,\n            role: 'menuitem'\n        });\n        this.arrowView = this._createArrowView();\n        this.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-menu-bar__menu__button'\n                ],\n                'aria-haspopup': true,\n                'aria-expanded': this.bindTemplate.to('isOn', value => String(value)),\n                'data-cke-tooltip-disabled': bind.to('isOn')\n            },\n            on: {\n                'mouseenter': bind.to('mouseenter')\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.children.add(this.arrowView);\n    }\n    /**\n     * Creates the {@link #arrowView} instance.\n     */\n    _createArrowView() {\n        const arrowView = new IconView();\n        arrowView.content = dropdownArrowIcon;\n        arrowView.extendTemplate({\n            attributes: {\n                class: 'ck-menu-bar__menu__button__arrow'\n            }\n        });\n        return arrowView;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport View from '../view.js';\nimport '../../theme/components/menubar/menubarmenupanel.css';\n/**\n * A view representing a {@link module:ui/menubar/menubarmenuview~MenuBarMenuView#panelView} of a menu.\n */\nexport default class MenuBarMenuPanelView extends View {\n    /**\n     * Creates an instance of the menu panel view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('isVisible', false);\n        this.set('position', 'se');\n        this.children = this.createCollection();\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-reset',\n                    'ck-menu-bar__menu__panel',\n                    bind.to('position', value => `ck-menu-bar__menu__panel_position_${value}`),\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ],\n                tabindex: '-1'\n            },\n            children: this.children,\n            on: {\n                // Drag and drop in the panel should not break the selection in the editor.\n                // https://github.com/ckeditor/ckeditor5-ui/issues/228\n                selectstart: bind.to(evt => {\n                    if (evt.target.tagName.toLocaleLowerCase() === 'input') {\n                        return;\n                    }\n                    evt.preventDefault();\n                })\n            }\n        });\n    }\n    /**\n     * Focuses the first child of the panel (default) or the last one if the `direction` is `-1`.\n     */\n    focus(direction = 1) {\n        if (this.children.length) {\n            if (direction === 1) {\n                this.children.first.focus();\n            }\n            else {\n                this.children.last.focus();\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module ui/menubar/menubarmenuview\n */\nimport { FocusTracker, KeystrokeHandler, getOptimalPosition } from '@ckeditor/ckeditor5-utils';\nimport MenuBarMenuButtonView from './menubarmenubuttonview.js';\nimport { MenuBarMenuBehaviors, MenuBarMenuViewPanelPositioningFunctions } from './utils.js';\nimport View from '../view.js';\nimport { default as MenuBarMenuPanelView } from './menubarmenupanelview.js';\nimport '../../theme/components/menubar/menubarmenu.css';\n/**\n * A menu view for the {@link module:ui/menubar/menubarview~MenuBarView}. Menus are building blocks of the menu bar,\n * they host other sub-menus and menu items (buttons) that users can interact with.\n */\nclass MenuBarMenuView extends View {\n    /**\n     * Creates an instance of the menu view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.buttonView = new MenuBarMenuButtonView(locale);\n        this.buttonView.delegate('mouseenter').to(this);\n        this.buttonView.bind('isOn', 'isEnabled').to(this, 'isOpen', 'isEnabled');\n        this.panelView = new MenuBarMenuPanelView(locale);\n        this.panelView.bind('isVisible').to(this, 'isOpen');\n        this.keystrokes = new KeystrokeHandler();\n        this.focusTracker = new FocusTracker();\n        this.set('isOpen', false);\n        this.set('isEnabled', true);\n        this.set('panelPosition', 'w');\n        this.set('class', undefined);\n        this.set('parentMenuView', null);\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-menu-bar__menu',\n                    bind.to('class'),\n                    bind.if('isEnabled', 'ck-disabled', value => !value),\n                    bind.if('parentMenuView', 'ck-menu-bar__menu_top-level', value => !value)\n                ]\n            },\n            children: [\n                this.buttonView,\n                this.panelView\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.focusTracker.add(this.buttonView.element);\n        this.focusTracker.add(this.panelView.element);\n        // Listen for keystrokes coming from within #element.\n        this.keystrokes.listenTo(this.element);\n        MenuBarMenuBehaviors.closeOnEscKey(this);\n        this._repositionPanelOnOpen();\n    }\n    // For now, this method cannot be called in the render process because the `parentMenuView` may be assigned\n    // after the rendering process.\n    //\n    // TODO: We should reconsider the way we handle this logic.\n    /**\n     * Attach all keyboard behaviors for the menu bar view.\n     *\n     * @internal\n     */\n    _attachBehaviors() {\n        // Top-level menus.\n        if (!this.parentMenuView) {\n            this._propagateArrowKeystrokeEvents();\n            MenuBarMenuBehaviors.openAndFocusPanelOnArrowDownKey(this);\n            MenuBarMenuBehaviors.toggleOnButtonClick(this);\n        }\n        else {\n            MenuBarMenuBehaviors.openOnButtonClick(this);\n            MenuBarMenuBehaviors.openOnArrowRightKey(this);\n            MenuBarMenuBehaviors.closeOnArrowLeftKey(this);\n            MenuBarMenuBehaviors.openAndFocusOnEnterKeyPress(this);\n            MenuBarMenuBehaviors.closeOnParentClose(this);\n        }\n    }\n    /**\n     * Fires `arrowright` and `arrowleft` events when the user pressed corresponding arrow keys.\n     */\n    _propagateArrowKeystrokeEvents() {\n        this.keystrokes.set('arrowright', (data, cancel) => {\n            this.fire('arrowright');\n            cancel();\n        });\n        this.keystrokes.set('arrowleft', (data, cancel) => {\n            this.fire('arrowleft');\n            cancel();\n        });\n    }\n    /**\n     * Sets the position of the panel when the menu opens. The panel is positioned\n     * so that it optimally uses the available space in the viewport.\n     */\n    _repositionPanelOnOpen() {\n        // Let the menu control the position of the panel. The position must be updated every time the menu is open.\n        this.on('change:isOpen', (evt, name, isOpen) => {\n            if (!isOpen) {\n                return;\n            }\n            const optimalPanelPosition = MenuBarMenuView._getOptimalPosition({\n                element: this.panelView.element,\n                target: this.buttonView.element,\n                fitInViewport: true,\n                positions: this._panelPositions\n            });\n            this.panelView.position = (optimalPanelPosition ? optimalPanelPosition.name : this._panelPositions[0].name);\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    focus() {\n        this.buttonView.focus();\n    }\n    /**\n     * Positioning functions for the {@link #panelView} . They change depending on the role of the menu (top-level vs sub-menu) in\n     * the {@link module:ui/menubar/menubarview~MenuBarView menu bar} and the UI language direction.\n     */\n    get _panelPositions() {\n        const { southEast, southWest, northEast, northWest, westSouth, eastSouth, westNorth, eastNorth } = MenuBarMenuViewPanelPositioningFunctions;\n        if (this.locale.uiLanguageDirection === 'ltr') {\n            if (this.parentMenuView) {\n                return [eastSouth, eastNorth, westSouth, westNorth];\n            }\n            else {\n                return [southEast, southWest, northEast, northWest];\n            }\n        }\n        else {\n            if (this.parentMenuView) {\n                return [westSouth, westNorth, eastSouth, eastNorth];\n            }\n            else {\n                return [southWest, southEast, northWest, northEast];\n            }\n        }\n    }\n}\n/**\n * A function used to calculate the optimal position for the dropdown panel.\n *\n * Referenced for unit testing purposes.\n */\nMenuBarMenuView._getOptimalPosition = getOptimalPosition;\nexport default MenuBarMenuView;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport ListItemView from '../list/listitemview.js';\nimport ListView from '../list/listview.js';\nimport ListItemButtonView from '../button/listitembuttonview.js';\nimport ButtonView from '../button/buttonview.js';\n/**\n * A list of menu bar items, a child of {@link module:ui/menubar/menubarmenuview~MenuBarMenuView#panelView}.\n *\n * Use this class to create a list of items (options, buttons) to be displayed in a menu bar.\n *\n * To populate this list, use {@link module:ui/menubar/menubarmenulistitemview~MenuBarMenuListItemView} instances.\n */\nexport default class MenuBarMenuListView extends ListView {\n    /**\n     * Creates an instance of the list view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        this.role = 'menu';\n        this.items.on('change', this._setItemsCheckSpace.bind(this));\n    }\n    /**\n     * This method adds empty space if there is any toggleable item in the list.\n     * It makes the list properly aligned.\n     */\n    _setItemsCheckSpace() {\n        const hasAnyToggleableItem = (Array\n            .from(this.items)\n            .some(item => {\n            const listButtonView = pickListButtonMenuViewIfPresent(item);\n            return listButtonView && listButtonView.isToggleable;\n        }));\n        this.items.forEach(item => {\n            const listButtonView = pickListButtonMenuViewIfPresent(item);\n            if (listButtonView) {\n                listButtonView.hasCheckSpace = hasAnyToggleableItem;\n            }\n        });\n    }\n}\n/**\n * Picks the first button menu view from the given item if present.\n *\n * @param item The item to check for a button menu view.\n * @returns The first button menu view found in the item, or `null` if not found.\n */\nfunction pickListButtonMenuViewIfPresent(item) {\n    if (!(item instanceof ListItemView)) {\n        return null;\n    }\n    return item\n        .children\n        .map(child => isNestedMenuLikeView(child) ? child.buttonView : child)\n        .find(item => item instanceof ListItemButtonView);\n}\n/**\n * Checks if the given item is a nested menu-like view. `MenuBarMenuView` imports this file\n * so to avoid circular dependencies, this function is defined in more generic way.\n *\n * @param item The item to check.\n * @returns `true` if the item is a nested menu-like view, `false` otherwise.\n */\nfunction isNestedMenuLikeView(item) {\n    return (typeof item === 'object' &&\n        'buttonView' in item &&\n        item.buttonView instanceof ButtonView);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { FileDialogListItemButtonView } from '../button/filedialogbuttonview.js';\nimport '../../theme/components/menubar/menubarmenulistitembutton.css';\n/**\n * A menu bar list file dialog button view. Buttons like this one execute user actions.\n *\n * This component provides a button that opens the native file selection dialog.\n */\nexport default class MenuBarMenuListItemFileDialogButtonView extends FileDialogListItemButtonView {\n    /**\n     * Creates an instance of the menu bar list button view.\n     *\n     * @param locale The localization services instance.\n     */\n    constructor(locale) {\n        super(locale);\n        this.set({\n            withText: true,\n            withKeystroke: true,\n            tooltip: false,\n            role: 'menuitem'\n        });\n        this.extendTemplate({\n            attributes: {\n                class: ['ck-menu-bar__menu__item__button']\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module alignment/alignmentui\n */\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { ButtonView, createDropdown, addToolbarToDropdown, MenuBarMenuListItemView, MenuBarMenuListItemButtonView, MenuBarMenuView, MenuBarMenuListView } from 'ckeditor5/src/ui.js';\nimport { isSupported, normalizeAlignmentOptions } from './utils.js';\nconst iconsMap = /* #__PURE__ */ (() => new Map([\n    ['left', icons.alignLeft],\n    ['right', icons.alignRight],\n    ['center', icons.alignCenter],\n    ['justify', icons.alignJustify]\n]))();\n/**\n * The default alignment UI plugin.\n *\n * It introduces the `'alignment:left'`, `'alignment:right'`, `'alignment:center'` and `'alignment:justify'` buttons\n * and the `'alignment'` dropdown.\n */\nexport default class AlignmentUI extends Plugin {\n    /**\n     * Returns the localized option titles provided by the plugin.\n     *\n     * The following localized titles corresponding with\n     * {@link module:alignment/alignmentconfig~AlignmentConfig#options} are available:\n     *\n     * * `'left'`,\n     * * `'right'`,\n     * * `'center'`,\n     * * `'justify'`.\n     *\n     * @readonly\n     */\n    get localizedOptionTitles() {\n        const t = this.editor.t;\n        return {\n            'left': t('Align left'),\n            'right': t('Align right'),\n            'center': t('Align center'),\n            'justify': t('Justify')\n        };\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'AlignmentUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const options = normalizeAlignmentOptions(editor.config.get('alignment.options'));\n        options\n            .map(option => option.name)\n            .filter(isSupported)\n            .forEach(option => this._addButton(option));\n        this._addToolbarDropdown(options);\n        this._addMenuBarMenu(options);\n    }\n    /**\n     * Helper method for initializing the button and linking it with an appropriate command.\n     *\n     * @param option The name of the alignment option for which the button is added.\n     */\n    _addButton(option) {\n        const editor = this.editor;\n        editor.ui.componentFactory.add(`alignment:${option}`, locale => this._createButton(locale, option));\n    }\n    /**\n     * Helper method for creating the button view element.\n     *\n     * @param locale Editor locale.\n     * @param option The name of the alignment option for which the button is added.\n     * @param buttonAttrs Optional parameters passed to button view instance.\n     */\n    _createButton(locale, option, buttonAttrs = {}) {\n        const editor = this.editor;\n        const command = editor.commands.get('alignment');\n        const buttonView = new ButtonView(locale);\n        buttonView.set({\n            label: this.localizedOptionTitles[option],\n            icon: iconsMap.get(option),\n            tooltip: true,\n            isToggleable: true,\n            ...buttonAttrs\n        });\n        // Bind button model to command.\n        buttonView.bind('isEnabled').to(command);\n        buttonView.bind('isOn').to(command, 'value', value => value === option);\n        // Execute command.\n        this.listenTo(buttonView, 'execute', () => {\n            editor.execute('alignment', { value: option });\n            editor.editing.view.focus();\n        });\n        return buttonView;\n    }\n    /**\n     * Helper method for initializing the toolnar dropdown and linking it with an appropriate command.\n     *\n     * @param option The name of the alignment option for which the button is added.\n     */\n    _addToolbarDropdown(options) {\n        const editor = this.editor;\n        const factory = editor.ui.componentFactory;\n        factory.add('alignment', locale => {\n            const dropdownView = createDropdown(locale);\n            const tooltipPosition = locale.uiLanguageDirection === 'rtl' ? 'w' : 'e';\n            const t = locale.t;\n            // Add existing alignment buttons to dropdown's toolbar.\n            addToolbarToDropdown(dropdownView, () => options.map(option => this._createButton(locale, option.name, { tooltipPosition })), {\n                enableActiveItemFocusOnDropdownOpen: true,\n                isVertical: true,\n                ariaLabel: t('Text alignment toolbar')\n            });\n            // Configure dropdown properties an behavior.\n            dropdownView.buttonView.set({\n                label: t('Text alignment'),\n                tooltip: true\n            });\n            dropdownView.extendTemplate({\n                attributes: {\n                    class: 'ck-alignment-dropdown'\n                }\n            });\n            // The default icon depends on the direction of the content.\n            const defaultIcon = locale.contentLanguageDirection === 'rtl' ? iconsMap.get('right') : iconsMap.get('left');\n            const command = editor.commands.get('alignment');\n            // Change icon to reflect current selection's alignment.\n            dropdownView.buttonView.bind('icon').to(command, 'value', value => iconsMap.get(value) || defaultIcon);\n            // Enable button if any of the buttons is enabled.\n            dropdownView.bind('isEnabled').to(command, 'isEnabled');\n            // Focus the editable after executing the command.\n            // Overrides a default behaviour where the focus is moved to the dropdown button (#12125).\n            this.listenTo(dropdownView, 'execute', () => {\n                editor.editing.view.focus();\n            });\n            return dropdownView;\n        });\n    }\n    /**\n     * Creates a menu for all alignment options to use either in menu bar.\n     *\n     * @param options Normalized alignment options from config.\n     */\n    _addMenuBarMenu(options) {\n        const editor = this.editor;\n        editor.ui.componentFactory.add('menuBar:alignment', locale => {\n            const command = editor.commands.get('alignment');\n            const t = locale.t;\n            const menuView = new MenuBarMenuView(locale);\n            const listView = new MenuBarMenuListView(locale);\n            menuView.bind('isEnabled').to(command);\n            listView.set({\n                ariaLabel: t('Text alignment'),\n                role: 'menu'\n            });\n            menuView.buttonView.set({\n                label: t('Text alignment')\n            });\n            for (const option of options) {\n                const listItemView = new MenuBarMenuListItemView(locale, menuView);\n                const buttonView = new MenuBarMenuListItemButtonView(locale);\n                buttonView.delegate('execute').to(menuView);\n                buttonView.set({\n                    label: this.localizedOptionTitles[option.name],\n                    icon: iconsMap.get(option.name),\n                    role: 'menuitemcheckbox',\n                    isToggleable: true\n                });\n                buttonView.on('execute', () => {\n                    editor.execute('alignment', { value: option.name });\n                    editor.editing.view.focus();\n                });\n                buttonView.bind('isOn').to(command, 'value', value => value === option.name);\n                buttonView.bind('isEnabled').to(command, 'isEnabled');\n                listItemView.children.add(buttonView);\n                listView.items.add(listItemView);\n            }\n            menuView.panelView.children.add(listView);\n            return menuView;\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/attributecommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * An extension of the base {@link module:core/command~Command} class, which provides utilities for a command\n * that toggles a single attribute on a text or an element.\n *\n * `AttributeCommand` uses {@link module:engine/model/document~Document#selection}\n * to decide which nodes (if any) should be changed, and applies or removes the attribute from them.\n *\n * The command checks the {@link module:engine/model/model~Model#schema} to decide if it can be enabled\n * for the current selection and to which nodes the attribute can be applied.\n */\nexport default class AttributeCommand extends Command {\n    /**\n     * @param attributeKey Attribute that will be set by the command.\n     */\n    constructor(editor, attributeKey) {\n        super(editor);\n        this.attributeKey = attributeKey;\n    }\n    /**\n     * Updates the command's {@link #value} and {@link #isEnabled} based on the current selection.\n     */\n    refresh() {\n        const model = this.editor.model;\n        const doc = model.document;\n        this.value = this._getValueFromFirstAllowedNode();\n        this.isEnabled = model.schema.checkAttributeInSelection(doc.selection, this.attributeKey);\n    }\n    /**\n     * Executes the command &ndash; applies the attribute to the selection or removes it from the selection.\n     *\n     * If the command is active (`value == true`), it will remove attributes. Otherwise, it will set attributes.\n     *\n     * The execution result differs, depending on the {@link module:engine/model/document~Document#selection}:\n     *\n     * * If the selection is on a range, the command applies the attribute to all nodes in that range\n     * (if they are allowed to have this attribute by the {@link module:engine/model/schema~Schema schema}).\n     * * If the selection is collapsed in a non-empty node, the command applies the attribute to the\n     * {@link module:engine/model/document~Document#selection} itself (note that typed characters copy attributes from the selection).\n     * * If the selection is collapsed in an empty node, the command applies the attribute to the parent node of the selection (note\n     * that the selection inherits all attributes from a node if it is in an empty node).\n     *\n     * @fires execute\n     * @param options Command options.\n     * @param options.forceValue If set, it will force the command behavior. If `true`,\n     * the command will apply the attribute, otherwise the command will remove the attribute.\n     * If not set, the command will look for its current value to decide what it should do.\n     */\n    execute(options = {}) {\n        const model = this.editor.model;\n        const doc = model.document;\n        const selection = doc.selection;\n        const value = (options.forceValue === undefined) ? !this.value : options.forceValue;\n        model.change(writer => {\n            if (selection.isCollapsed) {\n                if (value) {\n                    writer.setSelectionAttribute(this.attributeKey, true);\n                }\n                else {\n                    writer.removeSelectionAttribute(this.attributeKey);\n                }\n            }\n            else {\n                const ranges = model.schema.getValidRanges(selection.getRanges(), this.attributeKey);\n                for (const range of ranges) {\n                    if (value) {\n                        writer.setAttribute(this.attributeKey, value, range);\n                    }\n                    else {\n                        writer.removeAttribute(this.attributeKey, range);\n                    }\n                }\n            }\n        });\n    }\n    /**\n     * Checks the attribute value of the first node in the selection that allows the attribute.\n     * For the collapsed selection returns the selection attribute.\n     *\n     * @returns The attribute value.\n     */\n    _getValueFromFirstAllowedNode() {\n        const model = this.editor.model;\n        const schema = model.schema;\n        const selection = model.document.selection;\n        if (selection.isCollapsed) {\n            return selection.hasAttribute(this.attributeKey);\n        }\n        for (const range of selection.getRanges()) {\n            for (const item of range.getItems()) {\n                if (schema.checkAttribute(item, this.attributeKey)) {\n                    return item.hasAttribute(this.attributeKey);\n                }\n            }\n        }\n        return false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/bold/boldediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport AttributeCommand from '../attributecommand.js';\nconst BOLD = 'bold';\n/**\n * The bold editing feature.\n *\n * It registers the `'bold'` command and introduces the `bold` attribute in the model which renders to the view\n * as a `<strong>` element.\n */\nexport default class BoldEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'BoldEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = this.editor.t;\n        // Allow bold attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: BOLD });\n        editor.model.schema.setAttributeProperties(BOLD, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n        // Build converter from model to view for data and editing pipelines.\n        editor.conversion.attributeToElement({\n            model: BOLD,\n            view: 'strong',\n            upcastAlso: [\n                'b',\n                viewElement => {\n                    const fontWeight = viewElement.getStyle('font-weight');\n                    if (!fontWeight) {\n                        return null;\n                    }\n                    // Value of the `font-weight` attribute can be defined as a string or a number.\n                    if (fontWeight == 'bold' || Number(fontWeight) >= 600) {\n                        return {\n                            name: true,\n                            styles: ['font-weight']\n                        };\n                    }\n                    return null;\n                }\n            ]\n        });\n        // Create bold command.\n        editor.commands.add(BOLD, new AttributeCommand(editor, BOLD));\n        // Set the Ctrl+B keystroke.\n        editor.keystrokes.set('CTRL+B', BOLD);\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Bold text'),\n                    keystroke: 'CTRL+B'\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\n/**\n * Returns a function that creates a (toolbar or menu bar) button for a basic style feature.\n */\nexport function getButtonCreator({ editor, commandName, plugin, icon, label, keystroke }) {\n    return (ButtonClass) => {\n        const command = editor.commands.get(commandName);\n        const view = new ButtonClass(editor.locale);\n        view.set({\n            label,\n            icon,\n            keystroke,\n            isToggleable: true\n        });\n        view.bind('isEnabled').to(command, 'isEnabled');\n        view.bind('isOn').to(command, 'value');\n        if (view instanceof MenuBarMenuListItemButtonView) {\n            view.set({\n                role: 'menuitemcheckbox'\n            });\n        }\n        else {\n            view.set({\n                tooltip: true\n            });\n        }\n        // Execute the command.\n        plugin.listenTo(view, 'execute', () => {\n            editor.execute(commandName);\n            editor.editing.view.focus();\n        });\n        return view;\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/bold/boldui\n */\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { getButtonCreator } from '../utils.js';\nconst BOLD = 'bold';\n/**\n * The bold UI feature. It introduces the Bold button.\n */\nexport default class BoldUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'BoldUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.locale.t;\n        const createButton = getButtonCreator({\n            editor,\n            commandName: BOLD,\n            plugin: this,\n            icon: icons.bold,\n            label: t('Bold'),\n            keystroke: 'CTRL+B'\n        });\n        // Add bold button to feature components.\n        editor.ui.componentFactory.add(BOLD, () => createButton(ButtonView));\n        editor.ui.componentFactory.add('menuBar:' + BOLD, () => createButton(MenuBarMenuListItemButtonView));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/clipboardobserver\n */\nimport { EventInfo, getRangeFromMouseEvent } from '@ckeditor/ckeditor5-utils';\nimport { DataTransfer, DomEventObserver } from '@ckeditor/ckeditor5-engine';\n/**\n * Clipboard events observer.\n *\n * Fires the following events:\n *\n * * {@link module:engine/view/document~Document#event:clipboardInput},\n * * {@link module:engine/view/document~Document#event:paste},\n * * {@link module:engine/view/document~Document#event:copy},\n * * {@link module:engine/view/document~Document#event:cut},\n * * {@link module:engine/view/document~Document#event:drop},\n * * {@link module:engine/view/document~Document#event:dragover},\n * * {@link module:engine/view/document~Document#event:dragging},\n * * {@link module:engine/view/document~Document#event:dragstart},\n * * {@link module:engine/view/document~Document#event:dragend},\n * * {@link module:engine/view/document~Document#event:dragenter},\n * * {@link module:engine/view/document~Document#event:dragleave}.\n *\n * **Note**: This observer is not available by default (ckeditor5-engine does not add it on its own).\n * To make it available, it needs to be added to {@link module:engine/view/document~Document} by using\n * the {@link module:engine/view/view~View#addObserver `View#addObserver()`} method. Alternatively, you can load the\n * {@link module:clipboard/clipboard~Clipboard} plugin which adds this observer automatically (because it uses it).\n */\nexport default class ClipboardObserver extends DomEventObserver {\n    constructor(view) {\n        super(view);\n        this.domEventType = [\n            'paste', 'copy', 'cut', 'drop', 'dragover', 'dragstart', 'dragend', 'dragenter', 'dragleave'\n        ];\n        const viewDocument = this.document;\n        this.listenTo(viewDocument, 'paste', handleInput('clipboardInput'), { priority: 'low' });\n        this.listenTo(viewDocument, 'drop', handleInput('clipboardInput'), { priority: 'low' });\n        this.listenTo(viewDocument, 'dragover', handleInput('dragging'), { priority: 'low' });\n        function handleInput(type) {\n            return (evt, data) => {\n                data.preventDefault();\n                const targetRanges = data.dropRange ? [data.dropRange] : null;\n                const eventInfo = new EventInfo(viewDocument, type);\n                viewDocument.fire(eventInfo, {\n                    dataTransfer: data.dataTransfer,\n                    method: evt.name,\n                    targetRanges,\n                    target: data.target,\n                    domEvent: data.domEvent\n                });\n                // If CKEditor handled the input, do not bubble the original event any further.\n                // This helps external integrations recognize that fact and act accordingly.\n                // https://github.com/ckeditor/ckeditor5-upload/issues/92\n                if (eventInfo.stop.called) {\n                    data.stopPropagation();\n                }\n            };\n        }\n    }\n    onDomEvent(domEvent) {\n        const nativeDataTransfer = 'clipboardData' in domEvent ? domEvent.clipboardData : domEvent.dataTransfer;\n        const cacheFiles = domEvent.type == 'drop' || domEvent.type == 'paste';\n        const evtData = {\n            dataTransfer: new DataTransfer(nativeDataTransfer, { cacheFiles })\n        };\n        if (domEvent.type == 'drop' || domEvent.type == 'dragover') {\n            const domRange = getRangeFromMouseEvent(domEvent);\n            evtData.dropRange = domRange && this.view.domConverter.domRangeToView(domRange);\n        }\n        this.fire(domEvent.type, domEvent, evtData);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n// Elements which should not have empty-line padding.\n// Most `view.ContainerElement` want to be separate by new-line, but some are creating one structure\n// together (like `<li>`) so it is better to separate them by only one \"\\n\".\nconst smallPaddingElements = ['figcaption', 'li'];\nconst listElements = ['ol', 'ul'];\n/**\n * Converts {@link module:engine/view/item~Item view item} and all of its children to plain text.\n *\n * @param viewItem View item to convert.\n * @returns Plain text representation of `viewItem`.\n */\nexport default function viewToPlainText(viewItem) {\n    if (viewItem.is('$text') || viewItem.is('$textProxy')) {\n        return viewItem.data;\n    }\n    if (viewItem.is('element', 'img') && viewItem.hasAttribute('alt')) {\n        return viewItem.getAttribute('alt');\n    }\n    if (viewItem.is('element', 'br')) {\n        return '\\n'; // Convert soft breaks to single line break (#8045).\n    }\n    /**\n     * Item is a document fragment, attribute element or container element. It doesn't\n     * have it's own text value, so we need to convert its children elements.\n     */\n    let text = '';\n    let prev = null;\n    for (const child of viewItem.getChildren()) {\n        text += newLinePadding(child, prev) + viewToPlainText(child);\n        prev = child;\n    }\n    return text;\n}\n/**\n * Returns new line padding to prefix the given elements with.\n */\nfunction newLinePadding(element, previous) {\n    if (!previous) {\n        // Don't add padding to first elements in a level.\n        return '';\n    }\n    if (element.is('element', 'li') && !element.isEmpty && element.getChild(0).is('containerElement')) {\n        // Separate document list items with empty lines.\n        return '\\n\\n';\n    }\n    if (listElements.includes(element.name) && listElements.includes(previous.name)) {\n        /**\n         * Because `<ul>` and `<ol>` are AttributeElements, two consecutive lists will not have any padding between\n         * them (see the `if` statement below). To fix this, we need to make an exception for this case.\n         */\n        return '\\n\\n';\n    }\n    if (!element.is('containerElement') && !previous.is('containerElement')) {\n        // Don't add padding between non-container elements.\n        return '';\n    }\n    if (smallPaddingElements.includes(element.name) || smallPaddingElements.includes(previous.name)) {\n        // Add small padding between selected container elements.\n        return '\\n';\n    }\n    // Do not add padding around the elements that won't be rendered.\n    if (element.is('element') && element.getCustomProperty('dataPipeline:transparentRendering') ||\n        previous.is('element') && previous.getCustomProperty('dataPipeline:transparentRendering')) {\n        return '';\n    }\n    // Add empty lines between container elements.\n    return '\\n\\n';\n}\n", "import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n", "import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\n", "import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n", "import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nexport default getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nexport default matchesStrictComparable;\n", "import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nexport default baseMatches;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n", "import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n", "import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n", "import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default baseProperty;\n", "import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nexport default basePropertyDeep;\n", "import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n", "import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nexport default baseIteratee;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/clipboardmarkersutils\n */\nimport { mapValues } from 'lodash-es';\nimport { uid } from '@ckeditor/ckeditor5-utils';\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { Range } from '@ckeditor/ckeditor5-engine';\n/**\n * Part of the clipboard logic. Responsible for collecting markers from selected fragments\n * and restoring them with proper positions in pasted elements.\n *\n * @internal\n */\nexport default class ClipboardMarkersUtils extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * Map of marker names that can be copied.\n         *\n         * @internal\n         */\n        this._markersToCopy = new Map();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ClipboardMarkersUtils';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * Registers marker name as copyable in clipboard pipeline.\n     *\n     * @param markerName Name of marker that can be copied.\n     * @param config Configuration that describes what can be performed on specified marker.\n     * @internal\n     */\n    _registerMarkerToCopy(markerName, config) {\n        this._markersToCopy.set(markerName, config);\n    }\n    /**\n     * Performs copy markers on provided selection and paste it to fragment returned from `getCopiedFragment`.\n     *\n     * \t1. Picks all markers in provided selection.\n     * \t2. Inserts fake markers to document.\n     * \t3. Gets copied selection fragment from document.\n     * \t4. Removes fake elements from fragment and document.\n     * \t5. Inserts markers in the place of removed fake markers.\n     *\n     * Due to selection modification, when inserting items, `getCopiedFragment` must *always* operate on `writer.model.document.selection'.\n     * Do not use any other custom selection object within callback, as this will lead to out-of-bounds exceptions in rare scenarios.\n     *\n     * @param action Type of clipboard action.\n     * @param writer An instance of the model writer.\n     * @param selection Selection to be checked.\n     * @param getCopiedFragment\tCallback that performs copy of selection and returns it as fragment.\n     * @internal\n     */\n    _copySelectedFragmentWithMarkers(action, selection, getCopiedFragment = writer => writer.model.getSelectedContent(writer.model.document.selection)) {\n        return this.editor.model.change(writer => {\n            const oldSelection = writer.model.document.selection;\n            // In some scenarios, such like in drag & drop, passed `selection` parameter is not actually\n            // the same `selection` as the `writer.model.document.selection` which means that `_insertFakeMarkersToSelection`\n            // is not affecting passed `selection` `start` and `end` positions but rather modifies `writer.model.document.selection`.\n            //\n            // It is critical due to fact that when we have selection that starts [ 0, 0 ] and ends at [ 1, 0 ]\n            // and after inserting fake marker it will point to such marker instead of new widget position at start: [ 1, 0 ] end: [2, 0 ].\n            // `writer.insert` modifies only original `writer.model.document.selection`.\n            writer.setSelection(selection);\n            const sourceSelectionInsertedMarkers = this._insertFakeMarkersIntoSelection(writer, writer.model.document.selection, action);\n            const fragment = getCopiedFragment(writer);\n            const fakeMarkersRangesInsideRange = this._removeFakeMarkersInsideElement(writer, fragment);\n            // <fake-marker> [Foo] Bar</fake-marker>\n            //      ^                    ^\n            // In `_insertFakeMarkersIntoSelection` call we inserted fake marker just before first element.\n            // The problem is that the first element can be start position of selection so insertion fake-marker\n            // before such element shifts selection (so selection that was at [0, 0] now is at [0, 1]).\n            // It means that inserted fake-marker is no longer present inside such selection and is orphaned.\n            // This function checks special case of such problem. Markers that are orphaned at the start position\n            // and end position in the same time. Basically it means that they overlaps whole element.\n            for (const [markerName, elements] of Object.entries(sourceSelectionInsertedMarkers)) {\n                fakeMarkersRangesInsideRange[markerName] || (fakeMarkersRangesInsideRange[markerName] = writer.createRangeIn(fragment));\n                for (const element of elements) {\n                    writer.remove(element);\n                }\n            }\n            fragment.markers.clear();\n            for (const [markerName, range] of Object.entries(fakeMarkersRangesInsideRange)) {\n                fragment.markers.set(markerName, range);\n            }\n            // Revert back selection to previous one.\n            writer.setSelection(oldSelection);\n            return fragment;\n        });\n    }\n    /**\n     * Performs paste of markers on already pasted element.\n     *\n     * \t1. Inserts fake markers that are present in fragment element (such fragment will be processed in `getPastedDocumentElement`).\n     * \t2. Calls `getPastedDocumentElement` and gets element that is inserted into root model.\n     * \t3. Removes all fake markers present in transformed element.\n     * \t4. Inserts new markers with removed fake markers ranges into pasted fragment.\n     *\n     * There are multiple edge cases that have to be considered before calling this function:\n     *\n     * \t* `markers` are inserted into the same element that must be later transformed inside `getPastedDocumentElement`.\n     * \t* Fake marker elements inside `getPastedDocumentElement` can be cloned, but their ranges cannot overlap.\n     * \t* If `duplicateOnPaste` is `true` in marker config then associated marker ID is regenerated before pasting.\n     *\n     * @param action Type of clipboard action.\n     * @param markers Object that maps marker name to corresponding range.\n     * @param getPastedDocumentElement Getter used to get target markers element.\n     * @internal\n     */\n    _pasteMarkersIntoTransformedElement(markers, getPastedDocumentElement) {\n        const pasteMarkers = this._getPasteMarkersFromRangeMap(markers);\n        return this.editor.model.change(writer => {\n            // Inserts fake markers into source fragment / element that is later transformed inside `getPastedDocumentElement`.\n            const sourceFragmentFakeMarkers = this._insertFakeMarkersElements(writer, pasteMarkers);\n            // Modifies document fragment (for example, cloning table cells) and then inserts it into the document.\n            const transformedElement = getPastedDocumentElement(writer);\n            // Removes markers in pasted and transformed fragment in root document.\n            const removedFakeMarkers = this._removeFakeMarkersInsideElement(writer, transformedElement);\n            // Cleans up fake markers inserted into source fragment (that one before transformation which is not pasted).\n            for (const element of Object.values(sourceFragmentFakeMarkers).flat()) {\n                writer.remove(element);\n            }\n            // Inserts to root document fake markers.\n            for (const [markerName, range] of Object.entries(removedFakeMarkers)) {\n                if (!writer.model.markers.has(markerName)) {\n                    writer.addMarker(markerName, {\n                        usingOperation: true,\n                        affectsData: true,\n                        range\n                    });\n                }\n            }\n            return transformedElement;\n        });\n    }\n    /**\n     * Pastes document fragment with markers to document.\n     * If `duplicateOnPaste` is `true` in marker config then associated markers IDs\n     * are regenerated before pasting to avoid markers duplications in content.\n     *\n     * @param fragment Document fragment that should contain already processed by pipeline markers.\n     * @internal\n     */\n    _pasteFragmentWithMarkers(fragment) {\n        const pasteMarkers = this._getPasteMarkersFromRangeMap(fragment.markers);\n        fragment.markers.clear();\n        for (const copyableMarker of pasteMarkers) {\n            fragment.markers.set(copyableMarker.name, copyableMarker.range);\n        }\n        return this.editor.model.insertContent(fragment);\n    }\n    /**\n     * In some situations we have to perform copy on selected fragment with certain markers. This function allows to temporarily bypass\n     * restrictions on markers that we want to copy.\n     *\n     * This function executes `executor()` callback. For the duration of the callback, if the clipboard pipeline is used to copy\n     * content, markers with the specified name will be copied to the clipboard as well.\n     *\n     * @param markerName Which markers should be copied.\n     * @param executor Callback executed.\n     * @param config Optional configuration flags used to copy (such like partial copy flag).\n     * @internal\n     */\n    _forceMarkersCopy(markerName, executor, config = {\n        allowedActions: 'all',\n        copyPartiallySelected: true,\n        duplicateOnPaste: true\n    }) {\n        const before = this._markersToCopy.get(markerName);\n        this._markersToCopy.set(markerName, config);\n        executor();\n        if (before) {\n            this._markersToCopy.set(markerName, before);\n        }\n        else {\n            this._markersToCopy.delete(markerName);\n        }\n    }\n    /**\n     * Checks if marker can be copied.\n     *\n     * @param markerName Name of checked marker.\n     * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n     * @internal\n     */\n    _isMarkerCopyable(markerName, action) {\n        const config = this._getMarkerClipboardConfig(markerName);\n        if (!config) {\n            return false;\n        }\n        // If there is no action provided then only presence of marker is checked.\n        if (!action) {\n            return true;\n        }\n        const { allowedActions } = config;\n        return allowedActions === 'all' || allowedActions.includes(action);\n    }\n    /**\n     * Checks if marker has any clipboard copy behavior configuration.\n     *\n     * @param markerName Name of checked marker.\n     */\n    _hasMarkerConfiguration(markerName) {\n        return !!this._getMarkerClipboardConfig(markerName);\n    }\n    /**\n     * Returns marker's configuration flags passed during registration.\n     *\n     * @param markerName Name of marker that should be returned.\n     * @internal\n     */\n    _getMarkerClipboardConfig(markerName) {\n        const [markerNamePrefix] = markerName.split(':');\n        return this._markersToCopy.get(markerNamePrefix) || null;\n    }\n    /**\n     * First step of copying markers. It looks for markers intersecting with given selection and inserts `$marker` elements\n     * at positions where document markers start or end. This way `$marker` elements can be easily copied together with\n     * the rest of the content of the selection.\n     *\n     * @param writer An instance of the model writer.\n     * @param selection Selection to be checked.\n     * @param action Type of clipboard action.\n     */\n    _insertFakeMarkersIntoSelection(writer, selection, action) {\n        const copyableMarkers = this._getCopyableMarkersFromSelection(writer, selection, action);\n        return this._insertFakeMarkersElements(writer, copyableMarkers);\n    }\n    /**\n     * Returns array of markers that can be copied in specified selection.\n     *\n     * If marker cannot be copied partially (according to `copyPartiallySelected` configuration flag) and\n     * is not present entirely in any selection range then it will be skipped.\n     *\n     * @param writer An instance of the model writer.\n     * @param selection  Selection which will be checked.\n     * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n     */\n    _getCopyableMarkersFromSelection(writer, selection, action) {\n        const selectionRanges = Array.from(selection.getRanges());\n        // Picks all markers in provided ranges. Ensures that there are no duplications if\n        // there are multiple ranges that intersects with the same marker.\n        const markersInRanges = new Set(selectionRanges.flatMap(selectionRange => Array.from(writer.model.markers.getMarkersIntersectingRange(selectionRange))));\n        const isSelectionMarkerCopyable = (marker) => {\n            // Check if marker exists in configuration and provided action can be performed on it.\n            const isCopyable = this._isMarkerCopyable(marker.name, action);\n            if (!isCopyable) {\n                return false;\n            }\n            // Checks if configuration disallows to copy marker only if part of its content is selected.\n            //\n            // Example:\n            // \t<marker-a> Hello [ World ] </marker-a>\n            //\t\t\t\t\t\t^ selection\n            //\n            // In this scenario `marker-a` won't be copied because selection doesn't overlap its content entirely.\n            const { copyPartiallySelected } = this._getMarkerClipboardConfig(marker.name);\n            if (!copyPartiallySelected) {\n                const markerRange = marker.getRange();\n                return selectionRanges.some(selectionRange => selectionRange.containsRange(markerRange, true));\n            }\n            return true;\n        };\n        return Array\n            .from(markersInRanges)\n            .filter(isSelectionMarkerCopyable)\n            .map((copyableMarker) => {\n            // During `dragstart` event original marker is still present in tree.\n            // It is removed after the clipboard drop event, so none of the copied markers are inserted at the end.\n            // It happens because there already markers with specified `marker.name` when clipboard is trying to insert data\n            // and it aborts inserting.\n            const name = action === 'dragstart' ? this._getUniqueMarkerName(copyableMarker.name) : copyableMarker.name;\n            return {\n                name,\n                range: copyableMarker.getRange()\n            };\n        });\n    }\n    /**\n     * Picks all markers from markers map that can be pasted.\n     * If `duplicateOnPaste` is `true`, it regenerates their IDs to ensure uniqueness.\n     * If marker is not registered, it will be kept in the array anyway.\n     *\n     * @param markers Object that maps marker name to corresponding range.\n     * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n     */\n    _getPasteMarkersFromRangeMap(markers, action = null) {\n        const { model } = this.editor;\n        const entries = markers instanceof Map ? Array.from(markers.entries()) : Object.entries(markers);\n        return entries.flatMap(([markerName, range]) => {\n            if (!this._hasMarkerConfiguration(markerName)) {\n                return [\n                    {\n                        name: markerName,\n                        range\n                    }\n                ];\n            }\n            if (this._isMarkerCopyable(markerName, action)) {\n                const copyMarkerConfig = this._getMarkerClipboardConfig(markerName);\n                const isInGraveyard = model.markers.has(markerName) &&\n                    model.markers.get(markerName).getRange().root.rootName === '$graveyard';\n                if (copyMarkerConfig.duplicateOnPaste || isInGraveyard) {\n                    markerName = this._getUniqueMarkerName(markerName);\n                }\n                return [\n                    {\n                        name: markerName,\n                        range\n                    }\n                ];\n            }\n            return [];\n        });\n    }\n    /**\n     * Inserts specified array of fake markers elements to document and assigns them `type` and `name` attributes.\n     * Fake markers elements are used to calculate position of markers on pasted fragment that were transformed during\n     * steps between copy and paste.\n     *\n     * @param writer An instance of the model writer.\n     * @param markers Array of markers that will be inserted.\n     */\n    _insertFakeMarkersElements(writer, markers) {\n        const mappedMarkers = {};\n        const sortedMarkers = markers\n            .flatMap(marker => {\n            const { start, end } = marker.range;\n            return [\n                { position: start, marker, type: 'start' },\n                { position: end, marker, type: 'end' }\n            ];\n        })\n            // Markers position is sorted backwards to ensure that the insertion of fake markers will not change\n            // the position of the next markers.\n            .sort(({ position: posA }, { position: posB }) => posA.isBefore(posB) ? 1 : -1);\n        for (const { position, marker, type } of sortedMarkers) {\n            const fakeMarker = writer.createElement('$marker', {\n                'data-name': marker.name,\n                'data-type': type\n            });\n            if (!mappedMarkers[marker.name]) {\n                mappedMarkers[marker.name] = [];\n            }\n            mappedMarkers[marker.name].push(fakeMarker);\n            writer.insert(fakeMarker, position);\n        }\n        return mappedMarkers;\n    }\n    /**\n     * Removes all `$marker` elements from the given document fragment.\n     *\n     * Returns an object where keys are marker names, and values are ranges corresponding to positions\n     * where `$marker` elements were inserted.\n     *\n     * If the document fragment had only one `$marker` element for given marker (start or end) the other boundary is set automatically\n     * (to the end or start of the document fragment, respectively).\n     *\n     * @param writer An instance of the model writer.\n     * @param rootElement The element to be checked.\n     */\n    _removeFakeMarkersInsideElement(writer, rootElement) {\n        const fakeMarkersElements = this._getAllFakeMarkersFromElement(writer, rootElement);\n        const fakeMarkersRanges = fakeMarkersElements.reduce((acc, fakeMarker) => {\n            const position = fakeMarker.markerElement && writer.createPositionBefore(fakeMarker.markerElement);\n            let prevFakeMarker = acc[fakeMarker.name];\n            // Handle scenario when tables clone cells with the same fake node. Example:\n            //\n            // <cell><fake-marker-a></cell> <cell><fake-marker-a></cell> <cell><fake-marker-a></cell>\n            //                                          ^ cloned                    ^ cloned\n            //\n            // The easiest way to bypass this issue is to rename already existing in map nodes and\n            // set them new unique name.\n            let skipAssign = false;\n            if (prevFakeMarker && prevFakeMarker.start && prevFakeMarker.end) {\n                const config = this._getMarkerClipboardConfig(fakeMarker.name);\n                if (config.duplicateOnPaste) {\n                    acc[this._getUniqueMarkerName(fakeMarker.name)] = acc[fakeMarker.name];\n                }\n                else {\n                    skipAssign = true;\n                }\n                prevFakeMarker = null;\n            }\n            if (!skipAssign) {\n                acc[fakeMarker.name] = {\n                    ...prevFakeMarker,\n                    [fakeMarker.type]: position\n                };\n            }\n            if (fakeMarker.markerElement) {\n                writer.remove(fakeMarker.markerElement);\n            }\n            return acc;\n        }, {});\n        // We cannot construct ranges directly in previous reduce because element ranges can overlap.\n        // In other words lets assume we have such scenario:\n        // <fake-marker-start /> <paragraph /> <fake-marker-2-start /> <fake-marker-end /> <fake-marker-2-end />\n        //\n        // We have to remove `fake-marker-start` firstly and then remove `fake-marker-2-start`.\n        // Removal of `fake-marker-2-start` affects `fake-marker-end` position so we cannot create\n        // connection between `fake-marker-start` and `fake-marker-end` without iterating whole set firstly.\n        return mapValues(fakeMarkersRanges, range => new Range(range.start || writer.createPositionFromPath(rootElement, [0]), range.end || writer.createPositionAt(rootElement, 'end')));\n    }\n    /**\n     * Returns array that contains list of fake markers with corresponding `$marker` elements.\n     *\n     * For each marker, there can be two `$marker` elements or only one (if the document fragment contained\n     * only the beginning or only the end of a marker).\n     *\n     * @param writer An instance of the model writer.\n     * @param rootElement The element to be checked.\n     */\n    _getAllFakeMarkersFromElement(writer, rootElement) {\n        const foundFakeMarkers = Array\n            .from(writer.createRangeIn(rootElement))\n            .flatMap(({ item }) => {\n            if (!item.is('element', '$marker')) {\n                return [];\n            }\n            const name = item.getAttribute('data-name');\n            const type = item.getAttribute('data-type');\n            return [\n                {\n                    markerElement: item,\n                    name,\n                    type\n                }\n            ];\n        });\n        const prependFakeMarkers = [];\n        const appendFakeMarkers = [];\n        for (const fakeMarker of foundFakeMarkers) {\n            if (fakeMarker.type === 'end') {\n                // <fake-marker> [ phrase</fake-marker> phrase ]\n                //   ^\n                // Handle case when marker is just before start of selection.\n                // Only end marker is inside selection.\n                const hasMatchingStartMarker = foundFakeMarkers.some(otherFakeMarker => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === 'start');\n                if (!hasMatchingStartMarker) {\n                    prependFakeMarkers.push({\n                        markerElement: null,\n                        name: fakeMarker.name,\n                        type: 'start'\n                    });\n                }\n            }\n            if (fakeMarker.type === 'start') {\n                // [<fake-marker>phrase]</fake-marker>\n                //                           ^\n                // Handle case when fake marker is after selection.\n                // Only start marker is inside selection.\n                const hasMatchingEndMarker = foundFakeMarkers.some(otherFakeMarker => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === 'end');\n                if (!hasMatchingEndMarker) {\n                    appendFakeMarkers.unshift({\n                        markerElement: null,\n                        name: fakeMarker.name,\n                        type: 'end'\n                    });\n                }\n            }\n        }\n        return [\n            ...prependFakeMarkers,\n            ...foundFakeMarkers,\n            ...appendFakeMarkers\n        ];\n    }\n    /**\n     * When copy of markers occurs we have to make sure that pasted markers have different names\n     * than source markers. This functions helps with assigning unique part to marker name to\n     * prevent duplicated markers error.\n     *\n     * @param name Name of marker\n     */\n    _getUniqueMarkerName(name) {\n        const parts = name.split(':');\n        const newId = uid().substring(1, 6);\n        // It looks like the marker already is UID marker so in this scenario just swap\n        // last part of marker name and assign new UID.\n        //\n        // example: comment:{ threadId }:{ id } => comment:{ threadId }:{ newId }\n        if (parts.length === 3) {\n            return `${parts.slice(0, 2).join(':')}:${newId}`;\n        }\n        // Assign new segment to marker name with id.\n        //\n        // example: comment => comment:{ newId }\n        return `${parts.join(':')}:${newId}`;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/clipboardpipeline\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { EventInfo } from '@ckeditor/ckeditor5-utils';\nimport ClipboardObserver from './clipboardobserver.js';\nimport plainTextToHtml from './utils/plaintexttohtml.js';\nimport normalizeClipboardHtml from './utils/normalizeclipboarddata.js';\nimport viewToPlainText from './utils/viewtoplaintext.js';\nimport ClipboardMarkersUtils from './clipboardmarkersutils.js';\n// Input pipeline events overview:\n//\n//              ┌──────────────────────┐          ┌──────────────────────┐\n//              │     view.Document    │          │     view.Document    │\n//              │         paste        │          │         drop         │\n//              └───────────┬──────────┘          └───────────┬──────────┘\n//                          │                                 │\n//                          └────────────────┌────────────────┘\n//                                           │\n//                                 ┌─────────V────────┐\n//                                 │   view.Document  │   Retrieves text/html or text/plain from data.dataTransfer\n//                                 │  clipboardInput  │   and processes it to view.DocumentFragment.\n//                                 └─────────┬────────┘\n//                                           │\n//                               ┌───────────V───────────┐\n//                               │   ClipboardPipeline   │   Converts view.DocumentFragment to model.DocumentFragment.\n//                               │  inputTransformation  │\n//                               └───────────┬───────────┘\n//                                           │\n//                                ┌──────────V──────────┐\n//                                │  ClipboardPipeline  │   Calls model.insertContent().\n//                                │   contentInsertion  │\n//                                └─────────────────────┘\n//\n//\n// Output pipeline events overview:\n//\n//              ┌──────────────────────┐          ┌──────────────────────┐\n//              │     view.Document    │          │     view.Document    │   Retrieves the selected model.DocumentFragment\n//              │         copy         │          │          cut         │   and fires the `outputTransformation` event.\n//              └───────────┬──────────┘          └───────────┬──────────┘\n//                          │                                 │\n//                          └────────────────┌────────────────┘\n//                                           │\n//                               ┌───────────V───────────┐\n//                               │   ClipboardPipeline   │   Processes model.DocumentFragment and converts it to\n//                               │  outputTransformation │   view.DocumentFragment.\n//                               └───────────┬───────────┘\n//                                           │\n//                                 ┌─────────V────────┐\n//                                 │   view.Document  │   Processes view.DocumentFragment to text/html and text/plain\n//                                 │  clipboardOutput │   and stores the results in data.dataTransfer.\n//                                 └──────────────────┘\n//\n/**\n * The clipboard pipeline feature. It is responsible for intercepting the `paste` and `drop` events and\n * passing the pasted content through a series of events in order to insert it into the editor's content.\n * It also handles the `cut` and `copy` events to fill the native clipboard with the serialized editor's data.\n *\n * # Input pipeline\n *\n * The behavior of the default handlers (all at a `low` priority):\n *\n * ## Event: `paste` or `drop`\n *\n * 1. Translates the event data.\n * 2. Fires the {@link module:engine/view/document~Document#event:clipboardInput `view.Document#clipboardInput`} event.\n *\n * ## Event: `view.Document#clipboardInput`\n *\n * 1. If the `data.content` event field is already set (by some listener on a higher priority), it takes this content and fires the event\n *    from the last point.\n * 2. Otherwise, it retrieves `text/html` or `text/plain` from `data.dataTransfer`.\n * 3. Normalizes the raw data by applying simple filters on string data.\n * 4. Processes the raw data to {@link module:engine/view/documentfragment~DocumentFragment `view.DocumentFragment`} with the\n *    {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n * 5. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:inputTransformation\n *   `ClipboardPipeline#inputTransformation`} event with the view document fragment in the `data.content` event field.\n *\n * ## Event: `ClipboardPipeline#inputTransformation`\n *\n * 1. Converts {@link module:engine/view/documentfragment~DocumentFragment `view.DocumentFragment`} from the `data.content` field to\n *    {@link module:engine/model/documentfragment~DocumentFragment `model.DocumentFragment`}.\n * 2. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:contentInsertion `ClipboardPipeline#contentInsertion`}\n *    event with the model document fragment in the `data.content` event field.\n *    **Note**: The `ClipboardPipeline#contentInsertion` event is fired within a model change block to allow other handlers\n *    to run in the same block without post-fixers called in between (i.e., the selection post-fixer).\n *\n * ## Event: `ClipboardPipeline#contentInsertion`\n *\n * 1. Calls {@link module:engine/model/model~Model#insertContent `model.insertContent()`} to insert `data.content`\n *    at the current selection position.\n *\n * # Output pipeline\n *\n * The behavior of the default handlers (all at a `low` priority):\n *\n * ## Event: `copy`, `cut` or `dragstart`\n *\n * 1. Retrieves the selected {@link module:engine/model/documentfragment~DocumentFragment `model.DocumentFragment`} by calling\n *    {@link module:engine/model/model~Model#getSelectedContent `model#getSelectedContent()`}.\n * 2. Converts the model document fragment to {@link module:engine/view/documentfragment~DocumentFragment `view.DocumentFragment`}.\n * 3. Fires the {@link module:engine/view/document~Document#event:clipboardOutput `view.Document#clipboardOutput`} event\n *    with the view document fragment in the `data.content` event field.\n *\n * ## Event: `view.Document#clipboardOutput`\n *\n * 1. Processes `data.content` to HTML and plain text with the\n *    {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n * 2. Updates the `data.dataTransfer` data for `text/html` and `text/plain` with the processed data.\n * 3. For the `cut` method, calls {@link module:engine/model/model~Model#deleteContent `model.deleteContent()`}\n *    on the current selection.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n */\nexport default class ClipboardPipeline extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ClipboardPipeline';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ClipboardMarkersUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        view.addObserver(ClipboardObserver);\n        this._setupPasteDrop();\n        this._setupCopyCut();\n    }\n    /**\n     * Fires Clipboard `'outputTransformation'` event for given parameters.\n     *\n     * @internal\n     */\n    _fireOutputTransformationEvent(dataTransfer, selection, method) {\n        const clipboardMarkersUtils = this.editor.plugins.get('ClipboardMarkersUtils');\n        this.editor.model.enqueueChange({ isUndoable: method === 'cut' }, () => {\n            const documentFragment = clipboardMarkersUtils._copySelectedFragmentWithMarkers(method, selection);\n            this.fire('outputTransformation', {\n                dataTransfer,\n                content: documentFragment,\n                method\n            });\n        });\n    }\n    /**\n     * The clipboard paste pipeline.\n     */\n    _setupPasteDrop() {\n        const editor = this.editor;\n        const model = editor.model;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const clipboardMarkersUtils = this.editor.plugins.get('ClipboardMarkersUtils');\n        // Pasting is disabled when selection is in non-editable place.\n        // Dropping is disabled in drag and drop handler.\n        this.listenTo(viewDocument, 'clipboardInput', (evt, data) => {\n            if (data.method == 'paste' && !editor.model.canEditAt(editor.model.document.selection)) {\n                evt.stop();\n            }\n        }, { priority: 'highest' });\n        this.listenTo(viewDocument, 'clipboardInput', (evt, data) => {\n            const dataTransfer = data.dataTransfer;\n            let content;\n            // Some feature could already inject content in the higher priority event handler (i.e., codeBlock).\n            if (data.content) {\n                content = data.content;\n            }\n            else {\n                let contentData = '';\n                if (dataTransfer.getData('text/html')) {\n                    contentData = normalizeClipboardHtml(dataTransfer.getData('text/html'));\n                }\n                else if (dataTransfer.getData('text/plain')) {\n                    contentData = plainTextToHtml(dataTransfer.getData('text/plain'));\n                }\n                content = this.editor.data.htmlProcessor.toView(contentData);\n            }\n            const eventInfo = new EventInfo(this, 'inputTransformation');\n            this.fire(eventInfo, {\n                content,\n                dataTransfer,\n                targetRanges: data.targetRanges,\n                method: data.method\n            });\n            // If CKEditor handled the input, do not bubble the original event any further.\n            // This helps external integrations recognize this fact and act accordingly.\n            // https://github.com/ckeditor/ckeditor5-upload/issues/92\n            if (eventInfo.stop.called) {\n                evt.stop();\n            }\n            view.scrollToTheSelection();\n        }, { priority: 'low' });\n        this.listenTo(this, 'inputTransformation', (evt, data) => {\n            if (data.content.isEmpty) {\n                return;\n            }\n            const dataController = this.editor.data;\n            // Convert the pasted content into a model document fragment.\n            // The conversion is contextual, but in this case an \"all allowed\" context is needed\n            // and for that we use the $clipboardHolder item.\n            const modelFragment = dataController.toModel(data.content, '$clipboardHolder');\n            if (modelFragment.childCount == 0) {\n                return;\n            }\n            evt.stop();\n            // Fire content insertion event in a single change block to allow other handlers to run in the same block\n            // without post-fixers called in between (i.e., the selection post-fixer).\n            model.change(() => {\n                this.fire('contentInsertion', {\n                    content: modelFragment,\n                    method: data.method,\n                    dataTransfer: data.dataTransfer,\n                    targetRanges: data.targetRanges\n                });\n            });\n        }, { priority: 'low' });\n        this.listenTo(this, 'contentInsertion', (evt, data) => {\n            data.resultRange = clipboardMarkersUtils._pasteFragmentWithMarkers(data.content);\n        }, { priority: 'low' });\n    }\n    /**\n     * The clipboard copy/cut pipeline.\n     */\n    _setupCopyCut() {\n        const editor = this.editor;\n        const modelDocument = editor.model.document;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const onCopyCut = (evt, data) => {\n            const dataTransfer = data.dataTransfer;\n            data.preventDefault();\n            this._fireOutputTransformationEvent(dataTransfer, modelDocument.selection, evt.name);\n        };\n        this.listenTo(viewDocument, 'copy', onCopyCut, { priority: 'low' });\n        this.listenTo(viewDocument, 'cut', (evt, data) => {\n            // Cutting is disabled when selection is in non-editable place.\n            // See: https://github.com/ckeditor/ckeditor5-clipboard/issues/26.\n            if (!editor.model.canEditAt(editor.model.document.selection)) {\n                data.preventDefault();\n            }\n            else {\n                onCopyCut(evt, data);\n            }\n        }, { priority: 'low' });\n        this.listenTo(this, 'outputTransformation', (evt, data) => {\n            const content = editor.data.toView(data.content);\n            viewDocument.fire('clipboardOutput', {\n                dataTransfer: data.dataTransfer,\n                content,\n                method: data.method\n            });\n        }, { priority: 'low' });\n        this.listenTo(viewDocument, 'clipboardOutput', (evt, data) => {\n            if (!data.content.isEmpty) {\n                data.dataTransfer.setData('text/html', this.editor.data.htmlProcessor.toData(data.content));\n                data.dataTransfer.setData('text/plain', viewToPlainText(data.content));\n            }\n            if (data.method == 'cut') {\n                editor.model.deleteContent(modelDocument.selection);\n            }\n        }, { priority: 'low' });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/utils/normalizeclipboarddata\n */\n/**\n * Removes some popular browser quirks out of the clipboard data (HTML).\n * Removes all HTML comments. These are considered an internal thing and it makes little sense if they leak into the editor data.\n *\n * @param data The HTML data to normalize.\n * @returns Normalized HTML.\n */\nexport default function normalizeClipboardData(data) {\n    return data\n        .replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, (fullMatch, spaces) => {\n        // Handle the most popular and problematic case when even a single space becomes an nbsp;.\n        // Decode those to normal spaces. Read more in https://github.com/ckeditor/ckeditor5-clipboard/issues/2.\n        if (spaces.length == 1) {\n            return ' ';\n        }\n        return spaces;\n    })\n        // Remove all HTML comments.\n        .replace(/<!--[\\s\\S]*?-->/g, '');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/utils/plaintexttohtml\n */\n/**\n * Converts plain text to its HTML-ized version.\n *\n * @param text The plain text to convert.\n * @returns HTML generated from the plain text.\n */\nexport default function plainTextToHtml(text) {\n    text = text\n        // Encode &.\n        .replace(/&/g, '&amp;')\n        // Encode <>.\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        // Creates a paragraph for each double line break.\n        .replace(/\\r?\\n\\r?\\n/g, '</p><p>')\n        // Creates a line break for each single line break.\n        .replace(/\\r?\\n/g, '<br>')\n        // Replace tabs with four spaces.\n        .replace(/\\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;')\n        // Preserve trailing spaces (only the first and last one – the rest is handled below).\n        .replace(/^\\s/, '&nbsp;')\n        .replace(/\\s$/, '&nbsp;')\n        // Preserve other subsequent spaces now.\n        .replace(/\\s\\s/g, ' &nbsp;');\n    if (text.includes('</p><p>') || text.includes('<br>')) {\n        // If we created paragraphs above, add the trailing ones.\n        text = `<p>${text}</p>`;\n    }\n    // TODO:\n    // * What about '\\nfoo' vs ' foo'?\n    return text;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Change buffer allows to group atomic changes (like characters that have been typed) into\n * {@link module:engine/model/batch~Batch batches}.\n *\n * Batches represent single undo steps, hence changes added to one single batch are undone together.\n *\n * The buffer has a configurable limit of atomic changes that it can accommodate. After the limit was\n * exceeded (see {@link ~ChangeBuffer#input}), a new batch is created in {@link ~ChangeBuffer#batch}.\n *\n * To use the change buffer you need to let it know about the number of changes that were added to the batch:\n *\n * ```ts\n * const buffer = new ChangeBuffer( model, LIMIT );\n *\n * // Later on in your feature:\n * buffer.batch.insert( pos, insertedCharacters );\n * buffer.input( insertedCharacters.length );\n * ```\n */\nexport default class ChangeBuffer {\n    /**\n     * Creates a new instance of the change buffer.\n     *\n     * @param limit The maximum number of atomic changes which can be contained in one batch.\n     */\n    constructor(model, limit = 20) {\n        /**\n         * The current batch instance.\n         */\n        this._batch = null;\n        this.model = model;\n        this._size = 0;\n        this.limit = limit;\n        this._isLocked = false;\n        // The function to be called in order to notify the buffer about batches which appeared in the document.\n        // The callback will check whether it is a new batch and in that case the buffer will be flushed.\n        //\n        // The reason why the buffer needs to be flushed whenever a new batch appears is that the changes added afterwards\n        // should be added to a new batch. For instance, when the user types, then inserts an image, and then types again,\n        // the characters typed after inserting the image should be added to a different batch than the characters typed before.\n        this._changeCallback = (evt, batch) => {\n            if (batch.isLocal && batch.isUndoable && batch !== this._batch) {\n                this._reset(true);\n            }\n        };\n        this._selectionChangeCallback = () => {\n            this._reset();\n        };\n        this.model.document.on('change', this._changeCallback);\n        this.model.document.selection.on('change:range', this._selectionChangeCallback);\n        this.model.document.selection.on('change:attribute', this._selectionChangeCallback);\n    }\n    /**\n     * The current batch to which a feature should add its operations. Once the {@link #size}\n     * is reached or exceeds the {@link #limit}, the batch is set to a new instance and the size is reset.\n     */\n    get batch() {\n        if (!this._batch) {\n            this._batch = this.model.createBatch({ isTyping: true });\n        }\n        return this._batch;\n    }\n    /**\n     * The number of atomic changes in the buffer. Once it exceeds the {@link #limit},\n     * the {@link #batch batch} is set to a new one.\n     */\n    get size() {\n        return this._size;\n    }\n    /**\n     * The input number of changes into the buffer. Once the {@link #size} is\n     * reached or exceeds the {@link #limit}, the batch is set to a new instance and the size is reset.\n     *\n     * @param changeCount The number of atomic changes to input.\n     */\n    input(changeCount) {\n        this._size += changeCount;\n        if (this._size >= this.limit) {\n            this._reset(true);\n        }\n    }\n    /**\n     * Whether the buffer is locked. A locked buffer cannot be reset unless it gets unlocked.\n     */\n    get isLocked() {\n        return this._isLocked;\n    }\n    /**\n     * Locks the buffer.\n     */\n    lock() {\n        this._isLocked = true;\n    }\n    /**\n     * Unlocks the buffer.\n     */\n    unlock() {\n        this._isLocked = false;\n    }\n    /**\n     * Destroys the buffer.\n     */\n    destroy() {\n        this.model.document.off('change', this._changeCallback);\n        this.model.document.selection.off('change:range', this._selectionChangeCallback);\n        this.model.document.selection.off('change:attribute', this._selectionChangeCallback);\n    }\n    /**\n     * Resets the change buffer.\n     *\n     * @param ignoreLock Whether internal lock {@link #isLocked} should be ignored.\n     */\n    _reset(ignoreLock = false) {\n        if (!this.isLocked || ignoreLock) {\n            this._batch = null;\n            this._size = 0;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/inserttextcommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport ChangeBuffer from './utils/changebuffer.js';\n/**\n * The insert text command. Used by the {@link module:typing/input~Input input feature} to handle typing.\n */\nexport default class InsertTextCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param undoStepSize The maximum number of atomic changes\n     * which can be contained in one batch in the command buffer.\n     */\n    constructor(editor, undoStepSize) {\n        super(editor);\n        this._buffer = new ChangeBuffer(editor.model, undoStepSize);\n        // Since this command may execute on different selectable than selection, it should be checked directly in execute block.\n        this._isEnabledBasedOnSelection = false;\n    }\n    /**\n     * The current change buffer.\n     */\n    get buffer() {\n        return this._buffer;\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this._buffer.destroy();\n    }\n    /**\n     * Executes the input command. It replaces the content within the given range with the given text.\n     * Replacing is a two step process, first the content within the range is removed and then the new text is inserted\n     * at the beginning of the range (which after the removal is a collapsed range).\n     *\n     * @fires execute\n     * @param options The command options.\n     */\n    execute(options = {}) {\n        const model = this.editor.model;\n        const doc = model.document;\n        const text = options.text || '';\n        const textInsertions = text.length;\n        let selection = doc.selection;\n        if (options.selection) {\n            selection = options.selection;\n        }\n        else if (options.range) {\n            selection = model.createSelection(options.range);\n        }\n        // Stop executing if selectable is in non-editable place.\n        if (!model.canEditAt(selection)) {\n            return;\n        }\n        const resultRange = options.resultRange;\n        model.enqueueChange(this._buffer.batch, writer => {\n            this._buffer.lock();\n            // Store selection attributes before deleting old content to preserve formatting and link.\n            // This unifies the behavior between DocumentSelection and Selection provided as input option.\n            const selectionAttributes = Array.from(doc.selection.getAttributes());\n            model.deleteContent(selection);\n            if (text) {\n                model.insertContent(writer.createText(text, selectionAttributes), selection);\n            }\n            if (resultRange) {\n                writer.setSelection(resultRange);\n            }\n            else if (!selection.is('documentSelection')) {\n                writer.setSelection(selection);\n            }\n            this._buffer.unlock();\n            this._buffer.input(textInsertions);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/inserttextobserver\n */\nimport { env, EventInfo } from '@ckeditor/ckeditor5-utils';\nimport { DomEventData, Observer, FocusObserver } from '@ckeditor/ckeditor5-engine';\nconst TYPING_INPUT_TYPES = [\n    // For collapsed range:\n    //\t- This one is a regular typing (all browsers, all systems).\n    //\t- This one is used by Chrome when typing accented letter – 2nd step when the user selects the accent (Mac).\n    // For non-collapsed range:\n    //\t- This one is used by Chrome when typing accented letter – when the selection box first appears (Mac).\n    //\t- This one is used by Safari when accepting spell check suggestions from the context menu (Mac).\n    'insertText',\n    // This one is used by Safari when typing accented letter (Mac).\n    // This one is used by Safari when accepting spell check suggestions from the autocorrection pop-up (Mac).\n    'insertReplacementText'\n];\nconst TYPING_INPUT_TYPES_ANDROID = [\n    ...TYPING_INPUT_TYPES,\n    'insertCompositionText'\n];\n/**\n * Text insertion observer introduces the {@link module:engine/view/document~Document#event:insertText} event.\n */\nexport default class InsertTextObserver extends Observer {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        this.focusObserver = view.getObserver(FocusObserver);\n        // On Android composition events should immediately be applied to the model. Rendering is not disabled.\n        // On non-Android the model is updated only on composition end.\n        // On Android we can't rely on composition start/end to update model.\n        const typingInputTypes = env.isAndroid ? TYPING_INPUT_TYPES_ANDROID : TYPING_INPUT_TYPES;\n        const viewDocument = view.document;\n        viewDocument.on('beforeinput', (evt, data) => {\n            if (!this.isEnabled) {\n                return;\n            }\n            const { data: text, targetRanges, inputType, domEvent } = data;\n            if (!typingInputTypes.includes(inputType)) {\n                return;\n            }\n            // Mark the latest focus change as complete (we are typing in editable after the focus\n            // so the selection is in the focused element).\n            this.focusObserver.flush();\n            const eventInfo = new EventInfo(viewDocument, 'insertText');\n            viewDocument.fire(eventInfo, new DomEventData(view, domEvent, {\n                text,\n                selection: view.createSelection(targetRanges)\n            }));\n            // Stop the beforeinput event if `delete` event was stopped.\n            // https://github.com/ckeditor/ckeditor5/issues/753\n            if (eventInfo.stop.called) {\n                evt.stop();\n            }\n        });\n        // On Android composition events are immediately applied to the model.\n        // On non-Android the model is updated only on composition end.\n        // On Android we can't rely on composition start/end to update model.\n        if (!env.isAndroid) {\n            // Note: The priority must be lower than the CompositionObserver handler to call it after the renderer is unblocked.\n            // This is important for view to DOM position mapping.\n            // This causes the effect of first remove composed DOM and then reapply it after model modification.\n            viewDocument.on('compositionend', (evt, { data, domEvent }) => {\n                if (!this.isEnabled) {\n                    return;\n                }\n                // In case of aborted composition.\n                if (!data) {\n                    return;\n                }\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.log( `%c[InsertTextObserver]%c Fire insertText event, %c${ JSON.stringify( data ) }`,\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-weight: bold', 'color: blue'\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n                // How do we know where to insert the composed text?\n                // 1. The SelectionObserver is blocked and the view is not updated with the composition changes.\n                // 2. The last moment before it's locked is the `compositionstart` event.\n                // 3. The `SelectionObserver` is listening for `compositionstart` event and immediately converts\n                //    the selection. Handles this at the lowest priority so after the rendering is blocked.\n                viewDocument.fire('insertText', new DomEventData(view, domEvent, {\n                    text: data\n                }));\n            }, { priority: 'lowest' });\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    observe() { }\n    /**\n     * @inheritDoc\n     */\n    stopObserving() { }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/input\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { env } from '@ckeditor/ckeditor5-utils';\nimport InsertTextCommand from './inserttextcommand.js';\nimport InsertTextObserver from './inserttextobserver.js';\nimport { LiveRange } from '@ckeditor/ckeditor5-engine';\nimport { debounce } from 'lodash-es';\n/**\n * Handles text input coming from the keyboard or other input methods.\n */\nexport default class Input extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Input';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        const view = editor.editing.view;\n        const mapper = editor.editing.mapper;\n        const modelSelection = model.document.selection;\n        this._compositionQueue = new CompositionQueue(editor);\n        view.addObserver(InsertTextObserver);\n        // TODO The above default configuration value should be defined using editor.config.define() once it's fixed.\n        const insertTextCommand = new InsertTextCommand(editor, editor.config.get('typing.undoStep') || 20);\n        // Register `insertText` command and add `input` command as an alias for backward compatibility.\n        editor.commands.add('insertText', insertTextCommand);\n        editor.commands.add('input', insertTextCommand);\n        this.listenTo(view.document, 'insertText', (evt, data) => {\n            // Rendering is disabled while composing so prevent events that will be rendered by the engine\n            // and should not be applied by the browser.\n            if (!view.document.isComposing) {\n                data.preventDefault();\n            }\n            // Flush queue on the next beforeinput event because it could happen\n            // that the mutation observer does not notice the DOM change in time.\n            if (env.isAndroid && view.document.isComposing) {\n                this._compositionQueue.flush('next beforeinput');\n            }\n            const { text, selection: viewSelection } = data;\n            let modelRanges;\n            // If view selection was specified, translate it to model selection.\n            if (viewSelection) {\n                modelRanges = Array.from(viewSelection.getRanges()).map(viewRange => mapper.toModelRange(viewRange));\n            }\n            else {\n                modelRanges = Array.from(modelSelection.getRanges());\n            }\n            let insertText = text;\n            // Typing in English on Android is firing composition events for the whole typed word.\n            // We need to check the target range text to only apply the difference.\n            if (env.isAndroid) {\n                const selectedText = Array.from(modelRanges[0].getItems()).reduce((rangeText, node) => {\n                    return rangeText + (node.is('$textProxy') ? node.data : '');\n                }, '');\n                if (selectedText) {\n                    if (selectedText.length <= insertText.length) {\n                        if (insertText.startsWith(selectedText)) {\n                            insertText = insertText.substring(selectedText.length);\n                            modelRanges[0].start = modelRanges[0].start.getShiftedBy(selectedText.length);\n                        }\n                    }\n                    else {\n                        if (selectedText.startsWith(insertText)) {\n                            // TODO this should be mapped as delete?\n                            modelRanges[0].start = modelRanges[0].start.getShiftedBy(insertText.length);\n                            insertText = '';\n                        }\n                    }\n                }\n                if (insertText.length == 0 && modelRanges[0].isCollapsed) {\n                    // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                    // @if CK_DEBUG_TYPING // \tconsole.log( '%c[Input]%c Ignore insertion of an empty data to the collapsed range.',\n                    // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-style: italic'\n                    // @if CK_DEBUG_TYPING // \t);\n                    // @if CK_DEBUG_TYPING // }\n                    return;\n                }\n            }\n            const commandData = {\n                text: insertText,\n                selection: model.createSelection(modelRanges)\n            };\n            // This is a composition event and those are not cancellable, so we need to wait until browser updates the DOM\n            // and we could apply changes to the model and verify if the DOM is valid.\n            // The browser applies changes to the DOM not immediately on beforeinput event.\n            // We just wait for mutation observer to notice changes or as a fallback a timeout.\n            if (env.isAndroid && view.document.isComposing) {\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.log( `%c[Input]%c Queue insertText:%c \"${ commandData.text }\"%c ` +\n                // @if CK_DEBUG_TYPING // \t\t`[${ commandData.selection.getFirstPosition().path }]-` +\n                // @if CK_DEBUG_TYPING // \t\t`[${ commandData.selection.getLastPosition().path }]` +\n                // @if CK_DEBUG_TYPING // \t\t` queue size: ${ this._compositionQueue.length + 1 }`,\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-weight: bold', 'color: blue', ''\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n                this._compositionQueue.push(commandData);\n            }\n            else {\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.log( `%c[Input]%c Execute insertText:%c \"${ commandData.text }\"%c ` +\n                // @if CK_DEBUG_TYPING // \t\t`[${ commandData.selection.getFirstPosition().path }]-` +\n                // @if CK_DEBUG_TYPING // \t\t`[${ commandData.selection.getLastPosition().path }]`,\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-weight: bold', 'color: blue', ''\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n                editor.execute('insertText', commandData);\n                view.scrollToTheSelection();\n            }\n        });\n        // Delete selected content on composition start.\n        if (env.isAndroid) {\n            // On Android with English keyboard, the composition starts just by putting caret\n            // at the word end or by selecting a table column. This is not a real composition started.\n            // Trigger delete content on first composition key pressed.\n            this.listenTo(view.document, 'keydown', (evt, data) => {\n                if (modelSelection.isCollapsed || data.keyCode != 229 || !view.document.isComposing) {\n                    return;\n                }\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconst firstPositionPath = modelSelection.getFirstPosition()!.path;\n                // @if CK_DEBUG_TYPING // \tconst lastPositionPath = modelSelection.getLastPosition()!.path;\n                // @if CK_DEBUG_TYPING // \tconsole.log( '%c[Input]%c KeyDown 229%c -> model.deleteContent() ' +\n                // @if CK_DEBUG_TYPING // \t\t`[${ firstPositionPath }]-[${ lastPositionPath }]`,\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-weight: bold', '',\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n                deleteSelectionContent(model, insertTextCommand);\n            });\n        }\n        else {\n            // Note: The priority must precede the CompositionObserver handler to call it before\n            // the renderer is blocked, because we want to render this change.\n            this.listenTo(view.document, 'compositionstart', () => {\n                if (modelSelection.isCollapsed) {\n                    return;\n                }\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconst firstPositionPath = modelSelection.getFirstPosition()!.path;\n                // @if CK_DEBUG_TYPING // \tconst lastPositionPath = modelSelection.getLastPosition()!.path;\n                // @if CK_DEBUG_TYPING // \tconsole.log( '%c[Input]%c Composition start%c -> model.deleteContent() ' +\n                // @if CK_DEBUG_TYPING // \t\t`[${ firstPositionPath }]-[${ lastPositionPath }]`,\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-weight: bold', '',\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n                deleteSelectionContent(model, insertTextCommand);\n            });\n        }\n        // Apply composed changes to the model.\n        if (env.isAndroid) {\n            // Apply changes to the model as they are applied to the DOM by the browser.\n            // On beforeinput event, the DOM is not yet modified. We wait for detected mutations to apply model changes.\n            this.listenTo(view.document, 'mutations', (evt, { mutations }) => {\n                if (!view.document.isComposing) {\n                    return;\n                }\n                // Check if mutations are relevant for queued changes.\n                for (const { node } of mutations) {\n                    const viewElement = findMappedViewAncestor(node, mapper);\n                    const modelElement = mapper.toModelElement(viewElement);\n                    if (this._compositionQueue.isComposedElement(modelElement)) {\n                        this._compositionQueue.flush('mutations');\n                        return;\n                    }\n                }\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.log( '%c[Input]%c Mutations not related to the composition.',\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-style: italic'\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n            });\n            // Make sure that all changes are applied to the model before the end of composition.\n            this.listenTo(view.document, 'compositionend', () => {\n                this._compositionQueue.flush('composition end');\n            });\n            // Trigger mutations check after the composition completes to fix all DOM changes that got ignored during composition.\n            // On Android the Renderer is not disabled while composing. While updating DOM nodes we ignore some changes\n            // that are not that important (like NBSP vs plain space character) and could break the composition flow.\n            // After composition is completed we trigger additional `mutations` event for elements affected by the composition\n            // so the Renderer can adjust the DOM to the expected structure without breaking the composition.\n            this.listenTo(view.document, 'compositionend', () => {\n                const mutations = [];\n                for (const element of this._compositionQueue.flushComposedElements()) {\n                    const viewElement = mapper.toViewElement(element);\n                    if (!viewElement) {\n                        continue;\n                    }\n                    mutations.push({ type: 'children', node: viewElement });\n                }\n                if (mutations.length) {\n                    // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                    // @if CK_DEBUG_TYPING // \tconsole.group( '%c[Input]%c Fire post-composition mutation fixes.',\n                    // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green', 'font-weight: bold', ''\n                    // @if CK_DEBUG_TYPING // \t);\n                    // @if CK_DEBUG_TYPING // }\n                    view.document.fire('mutations', { mutations });\n                    // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                    // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n                    // @if CK_DEBUG_TYPING // }\n                }\n            }, { priority: 'lowest' });\n        }\n        else {\n            // After composition end we need to verify if there are no left-overs.\n            // Listening at the lowest priority so after the `InsertTextObserver` added above (all composed text\n            // should already be applied to the model, view, and DOM).\n            // On non-Android the `Renderer` is blocked while user is composing but the `MutationObserver` still collects\n            // mutated nodes and fires `mutations` events.\n            // Those events are recorded by the `Renderer` but not applied to the DOM while composing.\n            // We need to trigger those checks (and fixes) once again but this time without specifying the exact mutations\n            // since they are already recorded by the `Renderer`.\n            // It in the most cases just clears the internal record of mutated text nodes\n            // since all changes should already be applied to the DOM.\n            // This is especially needed when user cancels composition, so we can clear nodes marked to sync.\n            this.listenTo(view.document, 'compositionend', () => {\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.group( '%c[Input]%c Force render after composition end.',\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green', 'font-weight: bold', ''\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n                view.document.fire('mutations', { mutations: [] });\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n                // @if CK_DEBUG_TYPING // }\n            }, { priority: 'lowest' });\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this._compositionQueue.destroy();\n    }\n}\n/**\n * The queue of `insertText` command executions that are waiting for the DOM to get updated after beforeinput event.\n */\nclass CompositionQueue {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        /**\n         * Debounced queue flush as a safety mechanism for cases of mutation observer not triggering.\n         */\n        this.flushDebounced = debounce(() => this.flush('timeout'), 50);\n        /**\n         * The queue of `insertText` command executions that are waiting for the DOM to get updated after beforeinput event.\n         */\n        this._queue = [];\n        /**\n         * A set of model elements. The composition happened in those elements. It's used for mutations check.\n         */\n        this._compositionElements = new Set();\n        this.editor = editor;\n    }\n    /**\n     * Destroys the helper object.\n     */\n    destroy() {\n        this.flushDebounced.cancel();\n        this._compositionElements.clear();\n        while (this._queue.length) {\n            this.shift();\n        }\n    }\n    /**\n     * Returns the size of the queue.\n     */\n    get length() {\n        return this._queue.length;\n    }\n    /**\n     * Push next insertText command data to the queue.\n     */\n    push(commandData) {\n        const commandLiveData = {\n            text: commandData.text\n        };\n        if (commandData.selection) {\n            commandLiveData.selectionRanges = [];\n            for (const range of commandData.selection.getRanges()) {\n                commandLiveData.selectionRanges.push(LiveRange.fromRange(range));\n                // Keep reference to the model element for later mutation checks.\n                this._compositionElements.add(range.start.parent);\n            }\n        }\n        this._queue.push(commandLiveData);\n        this.flushDebounced();\n    }\n    /**\n     * Shift the first item from the insertText command data queue.\n     */\n    shift() {\n        const commandLiveData = this._queue.shift();\n        const commandData = {\n            text: commandLiveData.text\n        };\n        if (commandLiveData.selectionRanges) {\n            const ranges = commandLiveData.selectionRanges\n                .map(liveRange => detachLiveRange(liveRange))\n                .filter((range) => !!range);\n            if (ranges.length) {\n                commandData.selection = this.editor.model.createSelection(ranges);\n            }\n        }\n        return commandData;\n    }\n    /**\n     * Applies all queued insertText command executions.\n     *\n     * @param reason Used only for debugging.\n     */\n    flush(reason) {\n        const editor = this.editor;\n        const model = editor.model;\n        const view = editor.editing.view;\n        this.flushDebounced.cancel();\n        if (!this._queue.length) {\n            return;\n        }\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.group( `%c[Input]%c Flush insertText queue on ${ reason }.`,\n        // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-weight: bold'\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        const insertTextCommand = editor.commands.get('insertText');\n        const buffer = insertTextCommand.buffer;\n        model.enqueueChange(buffer.batch, () => {\n            buffer.lock();\n            while (this._queue.length) {\n                const commandData = this.shift();\n                // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n                // @if CK_DEBUG_TYPING // \tconsole.log( '%c[Input]%c Execute queued insertText:%c ' +\n                // @if CK_DEBUG_TYPING // \t\t`\"${ commandData.text }\"%c ` +\n                // @if CK_DEBUG_TYPING // \t\t`[${ commandData.selection.getFirstPosition().path }]-` +\n                // @if CK_DEBUG_TYPING // \t\t`[${ commandData.selection.getLastPosition().path }]`,\n                // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', 'font-weight: bold', 'color: blue', ''\n                // @if CK_DEBUG_TYPING // \t);\n                // @if CK_DEBUG_TYPING // }\n                editor.execute('insertText', commandData);\n            }\n            buffer.unlock();\n        });\n        view.scrollToTheSelection();\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n        // @if CK_DEBUG_TYPING // }\n    }\n    /**\n     * Returns `true` if the given model element is related to recent composition.\n     */\n    isComposedElement(element) {\n        return this._compositionElements.has(element);\n    }\n    /**\n     * Returns an array of composition-related elements and clears the internal list.\n     */\n    flushComposedElements() {\n        const result = Array.from(this._compositionElements);\n        this._compositionElements.clear();\n        return result;\n    }\n}\n/**\n * Deletes the content selected by the document selection at the start of composition.\n */\nfunction deleteSelectionContent(model, insertTextCommand) {\n    // By relying on the state of the input command we allow disabling the entire input easily\n    // by just disabling the input command. We could’ve used here the delete command but that\n    // would mean requiring the delete feature which would block loading one without the other.\n    // We could also check the editor.isReadOnly property, but that wouldn't allow to block\n    // the input without blocking other features.\n    if (!insertTextCommand.isEnabled) {\n        return;\n    }\n    const buffer = insertTextCommand.buffer;\n    buffer.lock();\n    model.enqueueChange(buffer.batch, () => {\n        model.deleteContent(model.document.selection);\n    });\n    buffer.unlock();\n}\n/**\n * Detaches a LiveRange and returns the static range from it.\n */\nfunction detachLiveRange(liveRange) {\n    const range = liveRange.toRange();\n    liveRange.detach();\n    if (range.root.rootName == '$graveyard') {\n        return null;\n    }\n    return range;\n}\n/**\n * For the given `viewNode`, finds and returns the closest ancestor of this node that has a mapping to the model.\n */\nfunction findMappedViewAncestor(viewNode, mapper) {\n    let node = (viewNode.is('$text') ? viewNode.parent : viewNode);\n    while (!mapper.toModelElement(node)) {\n        node = node.parent;\n    }\n    return node;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/deletecommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport { count } from '@ckeditor/ckeditor5-utils';\nimport ChangeBuffer from './utils/changebuffer.js';\n/**\n * The delete command. Used by the {@link module:typing/delete~Delete delete feature} to handle the <kbd>Delete</kbd> and\n * <kbd>Backspace</kbd> keys.\n */\nexport default class DeleteCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param direction The directionality of the delete describing in what direction it\n     * should consume the content when the selection is collapsed.\n     */\n    constructor(editor, direction) {\n        super(editor);\n        this.direction = direction;\n        this._buffer = new ChangeBuffer(editor.model, editor.config.get('typing.undoStep'));\n        // Since this command may execute on different selectable than selection, it should be checked directly in execute block.\n        this._isEnabledBasedOnSelection = false;\n    }\n    /**\n     * The current change buffer.\n     */\n    get buffer() {\n        return this._buffer;\n    }\n    /**\n     * Executes the delete command. Depending on whether the selection is collapsed or not, deletes its content\n     * or a piece of content in the {@link #direction defined direction}.\n     *\n     * @fires execute\n     * @param options The command options.\n     * @param options.unit See {@link module:engine/model/utils/modifyselection~modifySelection}'s options.\n     * @param options.sequence A number describing which subsequent delete event it is without the key being released.\n     * See the {@link module:engine/view/document~Document#event:delete} event data.\n     * @param options.selection Selection to remove. If not set, current model selection will be used.\n     */\n    execute(options = {}) {\n        const model = this.editor.model;\n        const doc = model.document;\n        model.enqueueChange(this._buffer.batch, writer => {\n            this._buffer.lock();\n            const selection = writer.createSelection(options.selection || doc.selection);\n            // Don't execute command when selection is in non-editable place.\n            if (!model.canEditAt(selection)) {\n                return;\n            }\n            const sequence = options.sequence || 1;\n            // Do not replace the whole selected content if selection was collapsed.\n            // This prevents such situation:\n            //\n            // <h1></h1><p>[]</p>\t-->  <h1>[</h1><p>]</p> \t\t-->  <p></p>\n            // starting content\t\t-->   after `modifySelection`\t-->  after `deleteContent`.\n            const doNotResetEntireContent = selection.isCollapsed;\n            // Try to extend the selection in the specified direction.\n            if (selection.isCollapsed) {\n                model.modifySelection(selection, {\n                    direction: this.direction,\n                    unit: options.unit,\n                    treatEmojiAsSingleUnit: true\n                });\n            }\n            // Check if deleting in an empty editor. See #61.\n            if (this._shouldEntireContentBeReplacedWithParagraph(sequence)) {\n                this._replaceEntireContentWithParagraph(writer);\n                return;\n            }\n            // Check if deleting in the first empty block.\n            // See https://github.com/ckeditor/ckeditor5/issues/8137.\n            if (this._shouldReplaceFirstBlockWithParagraph(selection, sequence)) {\n                this.editor.execute('paragraph', { selection });\n                return;\n            }\n            // If selection is still collapsed, then there's nothing to delete.\n            if (selection.isCollapsed) {\n                return;\n            }\n            let changeCount = 0;\n            selection.getFirstRange().getMinimalFlatRanges().forEach(range => {\n                changeCount += count(range.getWalker({ singleCharacters: true, ignoreElementEnd: true, shallow: true }));\n            });\n            // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n            // @if CK_DEBUG_TYPING // \tconsole.log( '%c[DeleteCommand]%c Delete content',\n            // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green;', '',\n            // @if CK_DEBUG_TYPING // \t\t`[${ selection.getFirstPosition()!.path }]-[${ selection.getLastPosition()!.path }]`, options\n            // @if CK_DEBUG_TYPING // \t);\n            // @if CK_DEBUG_TYPING // }\n            model.deleteContent(selection, {\n                doNotResetEntireContent,\n                direction: this.direction\n            });\n            this._buffer.input(changeCount);\n            writer.setSelection(selection);\n            this._buffer.unlock();\n        });\n    }\n    /**\n     * If the user keeps <kbd>Backspace</kbd> or <kbd>Delete</kbd> key pressed, the content of the current\n     * editable will be cleared. However, this will not yet lead to resetting the remaining block to a paragraph\n     * (which happens e.g. when the user does <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>Backspace</kbd>).\n     *\n     * But, if the user pressed the key in an empty editable for the first time,\n     * we want to replace the entire content with a paragraph if:\n     *\n     * * the current limit element is empty,\n     * * the paragraph is allowed in the limit element,\n     * * the limit doesn't already have a paragraph inside.\n     *\n     * See https://github.com/ckeditor/ckeditor5-typing/issues/61.\n     *\n     * @param sequence A number describing which subsequent delete event it is without the key being released.\n     */\n    _shouldEntireContentBeReplacedWithParagraph(sequence) {\n        // Does nothing if user pressed and held the \"Backspace\" or \"Delete\" key.\n        if (sequence > 1) {\n            return false;\n        }\n        const model = this.editor.model;\n        const doc = model.document;\n        const selection = doc.selection;\n        const limitElement = model.schema.getLimitElement(selection);\n        // If a collapsed selection contains the whole content it means that the content is empty\n        // (from the user perspective).\n        const limitElementIsEmpty = selection.isCollapsed && selection.containsEntireContent(limitElement);\n        if (!limitElementIsEmpty) {\n            return false;\n        }\n        if (!model.schema.checkChild(limitElement, 'paragraph')) {\n            return false;\n        }\n        const limitElementFirstChild = limitElement.getChild(0);\n        // Does nothing if the limit element already contains only a paragraph.\n        // We ignore the case when paragraph might have some inline elements (<p><inlineWidget>[]</inlineWidget></p>)\n        // because we don't support such cases yet and it's unclear whether inlineWidget shouldn't be a limit itself.\n        if (limitElementFirstChild && limitElementFirstChild.is('element', 'paragraph')) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * The entire content is replaced with the paragraph. Selection is moved inside the paragraph.\n     *\n     * @param writer The model writer.\n     */\n    _replaceEntireContentWithParagraph(writer) {\n        const model = this.editor.model;\n        const doc = model.document;\n        const selection = doc.selection;\n        const limitElement = model.schema.getLimitElement(selection);\n        const paragraph = writer.createElement('paragraph');\n        writer.remove(writer.createRangeIn(limitElement));\n        writer.insert(paragraph, limitElement);\n        writer.setSelection(paragraph, 0);\n    }\n    /**\n     * Checks if the selection is inside an empty element that is the first child of the limit element\n     * and should be replaced with a paragraph.\n     *\n     * @param selection The selection.\n     * @param sequence A number describing which subsequent delete event it is without the key being released.\n     */\n    _shouldReplaceFirstBlockWithParagraph(selection, sequence) {\n        const model = this.editor.model;\n        // Does nothing if user pressed and held the \"Backspace\" key or it was a \"Delete\" button.\n        if (sequence > 1 || this.direction != 'backward') {\n            return false;\n        }\n        if (!selection.isCollapsed) {\n            return false;\n        }\n        const position = selection.getFirstPosition();\n        const limitElement = model.schema.getLimitElement(position);\n        const limitElementFirstChild = limitElement.getChild(0);\n        // Only elements that are direct children of the limit element can be replaced.\n        // Unwrapping from a block quote should be handled in a dedicated feature.\n        if (position.parent != limitElementFirstChild) {\n            return false;\n        }\n        // A block should be replaced only if it was empty.\n        if (!selection.containsEntireContent(limitElementFirstChild)) {\n            return false;\n        }\n        // Replace with a paragraph only if it's allowed there.\n        if (!model.schema.checkChild(limitElement, 'paragraph')) {\n            return false;\n        }\n        // Does nothing if the limit element already contains only a paragraph.\n        if (limitElementFirstChild.name == 'paragraph') {\n            return false;\n        }\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/deleteobserver\n */\nimport { env, keyCodes, isInsideCombinedSymbol, isInsideEmojiSequence, isInsideSurrogatePair } from '@ckeditor/ckeditor5-utils';\nimport { BubblingEventInfo, DomEventData, Observer } from '@ckeditor/ckeditor5-engine';\nconst DELETE_CHARACTER = 'character';\nconst DELETE_WORD = 'word';\nconst DELETE_CODE_POINT = 'codePoint';\nconst DELETE_SELECTION = 'selection';\nconst DELETE_BACKWARD = 'backward';\nconst DELETE_FORWARD = 'forward';\nconst DELETE_EVENT_TYPES = {\n    // --------------------------------------- Backward delete types -----------------------------------------------------\n    // This happens in Safari on Mac when some content is selected and Ctrl + K is pressed.\n    deleteContent: {\n        unit: DELETE_SELECTION,\n        // According to the Input Events Level 2 spec, this delete type has no direction\n        // but to keep things simple, let's default to backward.\n        direction: DELETE_BACKWARD\n    },\n    // Chrome and Safari on Mac: Backspace or Ctrl + H\n    deleteContentBackward: {\n        // This kind of deletions must be done on the code point-level instead of target range provided by the DOM beforeinput event.\n        // Take for instance \"👨‍👩‍👧‍👧\", it equals:\n        //\n        //\t* [ \"👨\", \"ZERO WIDTH JOINER\", \"👩\", \"ZERO WIDTH JOINER\", \"👧\", \"ZERO WIDTH JOINER\", \"👧\" ]\n        //\t* or simply \"\\u{1F468}\\u200D\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F467}\"\n        //\n        // The range provided by the browser would cause the entire multi-byte grapheme to disappear while the user\n        // intention when deleting backwards (\"👨‍👩‍👧‍👧[]\", then backspace) is gradual \"decomposition\" (first to \"👨‍👩‍👧‍[]\",\n        // then to \"👨‍👩‍[]\", etc.).\n        //\n        //\t* \"👨‍👩‍👧‍👧[]\" + backward delete (by code point)  -> results in \"👨‍👩‍👧[]\", removed the last \"👧\" 👍\n        //\t* \"👨‍👩‍👧‍👧[]\" + backward delete (by character)  -> results in \"[]\", removed the whole grapheme 👎\n        //\n        // Deleting by code-point is simply a better UX. See \"deleteContentForward\" to learn more.\n        unit: DELETE_CODE_POINT,\n        direction: DELETE_BACKWARD\n    },\n    // On Mac: Option + Backspace.\n    // On iOS: Hold the backspace for a while and the whole words will start to disappear.\n    deleteWordBackward: {\n        unit: DELETE_WORD,\n        direction: DELETE_BACKWARD\n    },\n    // Safari on Mac: Cmd + Backspace\n    deleteHardLineBackward: {\n        unit: DELETE_SELECTION,\n        direction: DELETE_BACKWARD\n    },\n    // Chrome on Mac: Cmd + Backspace.\n    deleteSoftLineBackward: {\n        unit: DELETE_SELECTION,\n        direction: DELETE_BACKWARD\n    },\n    // --------------------------------------- Forward delete types -----------------------------------------------------\n    // Chrome on Mac: Fn + Backspace or Ctrl + D\n    // Safari on Mac: Ctrl + K or Ctrl + D\n    deleteContentForward: {\n        // Unlike backward delete, this delete must be performed by character instead of by code point, which\n        // provides the best UX for working with accented letters.\n        // Take, for example \"b̂\" (\"\\u0062\\u0302\", or [ \"LATIN SMALL LETTER B\", \"COMBINING CIRCUMFLEX ACCENT\" ]):\n        //\n        //\t* \"b̂[]\" + backward delete (by code point)  -> results in \"b[]\", removed the combining mark 👍\n        //\t* \"[]b̂\" + forward delete (by code point)   -> results in \"[]^\", a bare combining mark does that not make sense when alone 👎\n        //\t* \"[]b̂\" + forward delete (by character)    -> results in \"[]\", removed both \"b\" and the combining mark 👍\n        //\n        // See: \"deleteContentBackward\" to learn more.\n        unit: DELETE_CHARACTER,\n        direction: DELETE_FORWARD\n    },\n    // On Mac: Fn + Option + Backspace.\n    deleteWordForward: {\n        unit: DELETE_WORD,\n        direction: DELETE_FORWARD\n    },\n    // Chrome on Mac: Ctrl + K (you have to disable the Link plugin first, though, because it uses the same keystroke)\n    // This is weird that it does not work in Safari on Mac despite being listed in the official shortcuts listing\n    // on Apple's webpage.\n    deleteHardLineForward: {\n        unit: DELETE_SELECTION,\n        direction: DELETE_FORWARD\n    },\n    // At this moment there is no known way to trigger this event type but let's keep it for the symmetry with\n    // deleteSoftLineBackward.\n    deleteSoftLineForward: {\n        unit: DELETE_SELECTION,\n        direction: DELETE_FORWARD\n    }\n};\n/**\n * Delete observer introduces the {@link module:engine/view/document~Document#event:delete} event.\n */\nexport default class DeleteObserver extends Observer {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        const document = view.document;\n        // It matters how many subsequent deletions were made, e.g. when the backspace key was pressed and held\n        // by the user for some time. For instance, if such scenario ocurred and the heading the selection was\n        // anchored to was the only content of the editor, it will not be converted into a paragraph (the user\n        // wanted to clean it up, not remove it, it's about UX). Check out the DeleteCommand implementation to learn more.\n        //\n        // Fun fact: Safari on Mac won't fire beforeinput for backspace in an empty heading (only content).\n        let sequence = 0;\n        document.on('keydown', () => {\n            sequence++;\n        });\n        document.on('keyup', () => {\n            sequence = 0;\n        });\n        document.on('beforeinput', (evt, data) => {\n            if (!this.isEnabled) {\n                return;\n            }\n            const { targetRanges, domEvent, inputType } = data;\n            const deleteEventSpec = DELETE_EVENT_TYPES[inputType];\n            if (!deleteEventSpec) {\n                return;\n            }\n            const deleteData = {\n                direction: deleteEventSpec.direction,\n                unit: deleteEventSpec.unit,\n                sequence\n            };\n            if (deleteData.unit == DELETE_SELECTION) {\n                deleteData.selectionToRemove = view.createSelection(targetRanges[0]);\n            }\n            // The default deletion unit for deleteContentBackward is a single code point\n            // but if the browser provides a wider target range then we should use it.\n            if (inputType === 'deleteContentBackward') {\n                // On Android, deleteContentBackward has sequence 1 by default.\n                if (env.isAndroid) {\n                    deleteData.sequence = 1;\n                }\n                // The beforeInput event wants more than a single character to be removed.\n                if (shouldUseTargetRanges(targetRanges)) {\n                    deleteData.unit = DELETE_SELECTION;\n                    deleteData.selectionToRemove = view.createSelection(targetRanges);\n                }\n            }\n            const eventInfo = new BubblingEventInfo(document, 'delete', targetRanges[0]);\n            document.fire(eventInfo, new DomEventData(view, domEvent, deleteData));\n            // Stop the beforeinput event if `delete` event was stopped.\n            // https://github.com/ckeditor/ckeditor5/issues/753\n            if (eventInfo.stop.called) {\n                evt.stop();\n            }\n        });\n        // TODO: to be removed when https://bugs.chromium.org/p/chromium/issues/detail?id=1365311 is solved.\n        if (env.isBlink) {\n            enableChromeWorkaround(this);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    observe() { }\n    /**\n     * @inheritDoc\n     */\n    stopObserving() { }\n}\n/**\n * Enables workaround for the issue https://github.com/ckeditor/ckeditor5/issues/11904.\n */\nfunction enableChromeWorkaround(observer) {\n    const view = observer.view;\n    const document = view.document;\n    let pressedKeyCode = null;\n    let beforeInputReceived = false;\n    document.on('keydown', (evt, { keyCode }) => {\n        pressedKeyCode = keyCode;\n        beforeInputReceived = false;\n    });\n    document.on('keyup', (evt, { keyCode, domEvent }) => {\n        const selection = document.selection;\n        const shouldFireDeleteEvent = observer.isEnabled &&\n            keyCode == pressedKeyCode &&\n            isDeleteKeyCode(keyCode) &&\n            !selection.isCollapsed &&\n            !beforeInputReceived;\n        pressedKeyCode = null;\n        if (shouldFireDeleteEvent) {\n            const targetRange = selection.getFirstRange();\n            const eventInfo = new BubblingEventInfo(document, 'delete', targetRange);\n            const deleteData = {\n                unit: DELETE_SELECTION,\n                direction: getDeleteDirection(keyCode),\n                selectionToRemove: selection\n            };\n            document.fire(eventInfo, new DomEventData(view, domEvent, deleteData));\n        }\n    });\n    document.on('beforeinput', (evt, { inputType }) => {\n        const deleteEventSpec = DELETE_EVENT_TYPES[inputType];\n        const isMatchingBeforeInput = isDeleteKeyCode(pressedKeyCode) &&\n            deleteEventSpec &&\n            deleteEventSpec.direction == getDeleteDirection(pressedKeyCode);\n        if (isMatchingBeforeInput) {\n            beforeInputReceived = true;\n        }\n    }, { priority: 'high' });\n    document.on('beforeinput', (evt, { inputType, data }) => {\n        const shouldIgnoreBeforeInput = pressedKeyCode == keyCodes.delete &&\n            inputType == 'insertText' &&\n            data == '\\x7f'; // Delete character :P\n        if (shouldIgnoreBeforeInput) {\n            evt.stop();\n        }\n    }, { priority: 'high' });\n    function isDeleteKeyCode(keyCode) {\n        return keyCode == keyCodes.backspace || keyCode == keyCodes.delete;\n    }\n    function getDeleteDirection(keyCode) {\n        return keyCode == keyCodes.backspace ? DELETE_BACKWARD : DELETE_FORWARD;\n    }\n}\n/**\n * Verifies whether the given target ranges cover more than a single character and should be used instead of a single code-point deletion.\n */\nfunction shouldUseTargetRanges(targetRanges) {\n    // The collapsed target range could happen for example while deleting inside an inline filler\n    // (it's mapped to collapsed position before an inline filler).\n    if (targetRanges.length != 1 || targetRanges[0].isCollapsed) {\n        return false;\n    }\n    const walker = targetRanges[0].getWalker({\n        direction: 'backward',\n        singleCharacters: true,\n        ignoreElementEnd: true\n    });\n    let count = 0;\n    for (const { nextPosition, item } of walker) {\n        if (nextPosition.parent.is('$text')) {\n            const data = nextPosition.parent.data;\n            const offset = nextPosition.offset;\n            // Count combined symbols and emoji sequences as a single character.\n            if (isInsideSurrogatePair(data, offset) ||\n                isInsideCombinedSymbol(data, offset) ||\n                isInsideEmojiSequence(data, offset)) {\n                continue;\n            }\n            count++;\n        }\n        else if (item.is('containerElement') || item.is('emptyElement')) {\n            count++;\n        }\n        if (count > 1) {\n            return true;\n        }\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/delete\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport DeleteCommand from './deletecommand.js';\nimport DeleteObserver from './deleteobserver.js';\n/**\n * The delete and backspace feature. Handles keys such as <kbd>Delete</kbd> and <kbd>Backspace</kbd>, other\n * keystrokes and user actions that result in deleting content in the editor.\n */\nexport default class Delete extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Delete';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const modelDocument = editor.model.document;\n        view.addObserver(DeleteObserver);\n        this._undoOnBackspace = false;\n        const deleteForwardCommand = new DeleteCommand(editor, 'forward');\n        // Register `deleteForward` command and add `forwardDelete` command as an alias for backward compatibility.\n        editor.commands.add('deleteForward', deleteForwardCommand);\n        editor.commands.add('forwardDelete', deleteForwardCommand);\n        editor.commands.add('delete', new DeleteCommand(editor, 'backward'));\n        this.listenTo(viewDocument, 'delete', (evt, data) => {\n            // When not in composition, we handle the action, so prevent the default one.\n            // When in composition, it's the browser who modify the DOM (renderer is disabled).\n            if (!viewDocument.isComposing) {\n                data.preventDefault();\n            }\n            const { direction, sequence, selectionToRemove, unit } = data;\n            const commandName = direction === 'forward' ? 'deleteForward' : 'delete';\n            const commandData = { sequence };\n            if (unit == 'selection') {\n                const modelRanges = Array.from(selectionToRemove.getRanges()).map(viewRange => {\n                    return editor.editing.mapper.toModelRange(viewRange);\n                });\n                commandData.selection = editor.model.createSelection(modelRanges);\n            }\n            else {\n                commandData.unit = unit;\n            }\n            editor.execute(commandName, commandData);\n            view.scrollToTheSelection();\n        }, { priority: 'low' });\n        if (this.editor.plugins.has('UndoEditing')) {\n            this.listenTo(viewDocument, 'delete', (evt, data) => {\n                if (this._undoOnBackspace && data.direction == 'backward' && data.sequence == 1 && data.unit == 'codePoint') {\n                    this._undoOnBackspace = false;\n                    editor.execute('undo');\n                    data.preventDefault();\n                    evt.stop();\n                }\n            }, { context: '$capture' });\n            this.listenTo(modelDocument, 'change', () => {\n                this._undoOnBackspace = false;\n            });\n        }\n    }\n    /**\n     * If the next user action after calling this method is pressing backspace, it would undo the last change.\n     *\n     * Requires {@link module:undo/undoediting~UndoEditing} plugin. If not loaded, does nothing.\n     */\n    requestUndoOnBackspace() {\n        if (this.editor.plugins.has('UndoEditing')) {\n            this._undoOnBackspace = true;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/typing\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport Input from './input.js';\nimport Delete from './delete.js';\n/**\n * The typing feature. It handles typing.\n *\n * This is a \"glue\" plugin which loads the {@link module:typing/input~Input} and {@link module:typing/delete~Delete}\n * plugins.\n */\nexport default class Typing extends Plugin {\n    static get requires() {\n        return [Input, Delete];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Typing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Returns the last text line from the given range.\n *\n * \"The last text line\" is understood as text (from one or more text nodes) which is limited either by a parent block\n * or by inline elements (e.g. `<softBreak>`).\n *\n * ```ts\n * const rangeToCheck = model.createRange(\n * \tmodel.createPositionAt( paragraph, 0 ),\n * \tmodel.createPositionAt( paragraph, 'end' )\n * );\n *\n * const { text, range } = getLastTextLine( rangeToCheck, model );\n * ```\n *\n * For model below, the returned `text` will be \"Foo bar baz\" and `range` will be set on whole `<paragraph>` content:\n *\n * ```xml\n * <paragraph>Foo bar baz<paragraph>\n * ```\n *\n * However, in below case, `text` will be set to \"baz\" and `range` will be set only on \"baz\".\n *\n * ```xml\n * <paragraph>Foo<softBreak></softBreak>bar<softBreak></softBreak>baz<paragraph>\n * ```\n */\nexport default function getLastTextLine(range, model) {\n    let start = range.start;\n    const text = Array.from(range.getWalker({ ignoreElementEnd: false })).reduce((rangeText, { item }) => {\n        // Trim text to a last occurrence of an inline element and update range start.\n        if (!(item.is('$text') || item.is('$textProxy'))) {\n            start = model.createPositionAfter(item);\n            return '';\n        }\n        return rangeText + item.data;\n    }, '');\n    return { text, range: model.createRange(start, range.end) };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/textwatcher\n */\nimport { ObservableMixin } from '@ckeditor/ckeditor5-utils';\nimport getLastTextLine from './utils/getlasttextline.js';\n/**\n * The text watcher feature.\n *\n * Fires the {@link module:typing/textwatcher~TextWatcher#event:matched:data `matched:data`},\n * {@link module:typing/textwatcher~TextWatcher#event:matched:selection `matched:selection`} and\n * {@link module:typing/textwatcher~TextWatcher#event:unmatched `unmatched`} events on typing or selection changes.\n */\nexport default class TextWatcher extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a text watcher instance.\n     *\n     * @param testCallback See {@link module:typing/textwatcher~TextWatcher#testCallback}.\n     */\n    constructor(model, testCallback) {\n        super();\n        this.model = model;\n        this.testCallback = testCallback;\n        this._hasMatch = false;\n        this.set('isEnabled', true);\n        // Toggle text watching on isEnabled state change.\n        this.on('change:isEnabled', () => {\n            if (this.isEnabled) {\n                this._startListening();\n            }\n            else {\n                this.stopListening(model.document.selection);\n                this.stopListening(model.document);\n            }\n        });\n        this._startListening();\n    }\n    /**\n     * Flag indicating whether there is a match currently.\n     */\n    get hasMatch() {\n        return this._hasMatch;\n    }\n    /**\n     * Starts listening to the editor for typing and selection events.\n     */\n    _startListening() {\n        const model = this.model;\n        const document = model.document;\n        this.listenTo(document.selection, 'change:range', (evt, { directChange }) => {\n            // Indirect changes (i.e. when the user types or external changes are applied) are handled in the document's change event.\n            if (!directChange) {\n                return;\n            }\n            // Act only on collapsed selection.\n            if (!document.selection.isCollapsed) {\n                if (this.hasMatch) {\n                    this.fire('unmatched');\n                    this._hasMatch = false;\n                }\n                return;\n            }\n            this._evaluateTextBeforeSelection('selection');\n        });\n        this.listenTo(document, 'change:data', (evt, batch) => {\n            if (batch.isUndo || !batch.isLocal) {\n                return;\n            }\n            this._evaluateTextBeforeSelection('data', { batch });\n        });\n    }\n    /**\n     * Checks the editor content for matched text.\n     *\n     * @fires matched:data\n     * @fires matched:selection\n     * @fires unmatched\n     *\n     * @param suffix A suffix used for generating the event name.\n     * @param data Data object for event.\n     */\n    _evaluateTextBeforeSelection(suffix, data = {}) {\n        const model = this.model;\n        const document = model.document;\n        const selection = document.selection;\n        const rangeBeforeSelection = model.createRange(model.createPositionAt(selection.focus.parent, 0), selection.focus);\n        const { text, range } = getLastTextLine(rangeBeforeSelection, model);\n        const testResult = this.testCallback(text);\n        if (!testResult && this.hasMatch) {\n            this.fire('unmatched');\n        }\n        this._hasMatch = !!testResult;\n        if (testResult) {\n            const eventData = Object.assign(data, { text, range });\n            // If the test callback returns an object with additional data, assign the data as well.\n            if (typeof testResult == 'object') {\n                Object.assign(eventData, testResult);\n            }\n            this.fire(`matched:${suffix}`, eventData);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/twostepcaretmovement\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils';\nimport { MouseObserver } from '@ckeditor/ckeditor5-engine';\n/**\n * This plugin enables the two-step caret (phantom) movement behavior for\n * {@link module:typing/twostepcaretmovement~TwoStepCaretMovement#registerAttribute registered attributes}\n * on arrow right (<kbd>→</kbd>) and left (<kbd>←</kbd>) key press.\n *\n * Thanks to this (phantom) caret movement the user is able to type before/after as well as at the\n * beginning/end of an attribute.\n *\n * **Note:** This plugin support right–to–left (Arabic, Hebrew, etc.) content by mirroring its behavior\n * but for the sake of simplicity examples showcase only left–to–right use–cases.\n *\n * # Forward movement\n *\n * ## \"Entering\" an attribute:\n *\n * When this plugin is enabled and registered for the `a` attribute and the selection is right before it\n * (at the attribute boundary), pressing the right arrow key will not move the selection but update its\n * attributes accordingly:\n *\n * * When enabled:\n *\n * ```xml\n * foo{}<$text a=\"true\">bar</$text>\n * ```\n *\n * \t<kbd>→</kbd>\n *\n * ```xml\n * foo<$text a=\"true\">{}bar</$text>\n * ```\n *\n * * When disabled:\n *\n * ```xml\n * foo{}<$text a=\"true\">bar</$text>\n * ```\n *\n * \t<kbd>→</kbd>\n *\n * ```xml\n * foo<$text a=\"true\">b{}ar</$text>\n * ```\n *\n *\n * ## \"Leaving\" an attribute:\n *\n * * When enabled:\n *\n * ```xml\n * <$text a=\"true\">bar{}</$text>baz\n * ```\n *\n * \t<kbd>→</kbd>\n *\n * ```xml\n * <$text a=\"true\">bar</$text>{}baz\n * ```\n *\n * * When disabled:\n *\n * ```xml\n * <$text a=\"true\">bar{}</$text>baz\n * ```\n *\n * \t<kbd>→</kbd>\n *\n * ```xml\n * <$text a=\"true\">bar</$text>b{}az\n * ```\n *\n * # Backward movement\n *\n * * When enabled:\n *\n * ```xml\n * <$text a=\"true\">bar</$text>{}baz\n * ```\n *\n * \t<kbd>←</kbd>\n *\n * ```xml\n * <$text a=\"true\">bar{}</$text>baz\n * ```\n *\n * * When disabled:\n *\n * ```xml\n * <$text a=\"true\">bar</$text>{}baz\n * ```\n *\n * \t<kbd>←</kbd>\n *\n * ```xml\n * <$text a=\"true\">ba{}r</$text>b{}az\n * ```\n *\n * # Multiple attributes\n *\n * * When enabled and many attributes starts or ends at the same position:\n *\n * ```xml\n * <$text a=\"true\" b=\"true\">bar</$text>{}baz\n * ```\n *\n * \t<kbd>←</kbd>\n *\n * ```xml\n * <$text a=\"true\" b=\"true\">bar{}</$text>baz\n * ```\n *\n * * When enabled and one procedes another:\n *\n * ```xml\n * <$text a=\"true\">bar</$text><$text b=\"true\">{}bar</$text>\n * ```\n *\n * \t<kbd>←</kbd>\n *\n * ```xml\n * <$text a=\"true\">bar{}</$text><$text b=\"true\">bar</$text>\n * ```\n *\n */\nexport default class TwoStepCaretMovement extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TwoStepCaretMovement';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        /**\n         * A flag indicating that the automatic gravity restoration should not happen upon the next\n         * gravity restoration.\n         * {@link module:engine/model/selection~Selection#event:change:range} event.\n         */\n        this._isNextGravityRestorationSkipped = false;\n        this.attributes = new Set();\n        this._overrideUid = null;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        const view = editor.editing.view;\n        const locale = editor.locale;\n        const modelSelection = model.document.selection;\n        // Listen to keyboard events and handle the caret movement according to the 2-step caret logic.\n        this.listenTo(view.document, 'arrowKey', (evt, data) => {\n            // This implementation works only for collapsed selection.\n            if (!modelSelection.isCollapsed) {\n                return;\n            }\n            // When user tries to expand the selection or jump over the whole word or to the beginning/end then\n            // two-steps movement is not necessary.\n            if (data.shiftKey || data.altKey || data.ctrlKey) {\n                return;\n            }\n            const arrowRightPressed = data.keyCode == keyCodes.arrowright;\n            const arrowLeftPressed = data.keyCode == keyCodes.arrowleft;\n            // When neither left or right arrow has been pressed then do noting.\n            if (!arrowRightPressed && !arrowLeftPressed) {\n                return;\n            }\n            const contentDirection = locale.contentLanguageDirection;\n            let isMovementHandled = false;\n            if ((contentDirection === 'ltr' && arrowRightPressed) || (contentDirection === 'rtl' && arrowLeftPressed)) {\n                isMovementHandled = this._handleForwardMovement(data);\n            }\n            else {\n                isMovementHandled = this._handleBackwardMovement(data);\n            }\n            // Stop the keydown event if the two-step caret movement handled it. Avoid collisions\n            // with other features which may also take over the caret movement (e.g. Widget).\n            if (isMovementHandled === true) {\n                evt.stop();\n            }\n        }, { context: '$text', priority: 'highest' });\n        // The automatic gravity restoration logic.\n        this.listenTo(modelSelection, 'change:range', (evt, data) => {\n            // Skipping the automatic restoration is needed if the selection should change\n            // but the gravity must remain overridden afterwards. See the #handleBackwardMovement\n            // to learn more.\n            if (this._isNextGravityRestorationSkipped) {\n                this._isNextGravityRestorationSkipped = false;\n                return;\n            }\n            // Skip automatic restore when the gravity is not overridden — simply, there's nothing to restore\n            // at this moment.\n            if (!this._isGravityOverridden) {\n                return;\n            }\n            // Skip automatic restore when the change is indirect AND the selection is at the attribute boundary.\n            // It means that e.g. if the change was external (collaboration) and the user had their\n            // selection around the link, its gravity should remain intact in this change:range event.\n            if (!data.directChange && isBetweenDifferentAttributes(modelSelection.getFirstPosition(), this.attributes)) {\n                return;\n            }\n            this._restoreGravity();\n        });\n        // Handle a click at the beginning/end of a two-step element.\n        this._enableClickingAfterNode();\n        // Change the attributes of the selection in certain situations after the two-step node was inserted into the document.\n        this._enableInsertContentSelectionAttributesFixer();\n        // Handle removing the content after the two-step node.\n        this._handleDeleteContentAfterNode();\n    }\n    /**\n     * Registers a given attribute for the two-step caret movement.\n     *\n     * @param attribute Name of the attribute to handle.\n     */\n    registerAttribute(attribute) {\n        this.attributes.add(attribute);\n    }\n    /**\n     * Updates the document selection and the view according to the two–step caret movement state\n     * when moving **forwards**. Executed upon `keypress` in the {@link module:engine/view/view~View}.\n     *\n     * @param data Data of the key press.\n     * @returns `true` when the handler prevented caret movement.\n     */\n    _handleForwardMovement(data) {\n        const attributes = this.attributes;\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const position = selection.getFirstPosition();\n        // DON'T ENGAGE 2-SCM if gravity is already overridden. It means that we just entered\n        //\n        // \t\t<paragraph>foo<$text attribute>{}bar</$text>baz</paragraph>\n        //\n        // or left the attribute\n        //\n        // \t\t<paragraph>foo<$text attribute>bar</$text>{}baz</paragraph>\n        //\n        // and the gravity will be restored automatically.\n        if (this._isGravityOverridden) {\n            return false;\n        }\n        // DON'T ENGAGE 2-SCM when the selection is at the beginning of the block AND already has the\n        // attribute:\n        // * when the selection was initially set there using the mouse,\n        // * when the editor has just started\n        //\n        //\t\t<paragraph><$text attribute>{}bar</$text>baz</paragraph>\n        //\n        if (position.isAtStart && hasAnyAttribute(selection, attributes)) {\n            return false;\n        }\n        // ENGAGE 2-SCM When at least one of the observed attributes changes its value (incl. starts, ends).\n        //\n        //\t\t<paragraph>foo<$text attribute>bar{}</$text>baz</paragraph>\n        //\t\t<paragraph>foo<$text attribute>bar{}</$text><$text otherAttribute>baz</$text></paragraph>\n        //\t\t<paragraph>foo<$text attribute=1>bar{}</$text><$text attribute=2>baz</$text></paragraph>\n        //\t\t<paragraph>foo{}<$text attribute>bar</$text>baz</paragraph>\n        //\n        if (isBetweenDifferentAttributes(position, attributes)) {\n            preventCaretMovement(data);\n            // CLEAR 2-SCM attributes if we are at the end of one 2-SCM and before\n            // the next one with a different value of the same attribute.\n            //\n            //\t\t<paragraph>foo<$text attribute=1>bar{}</$text><$text attribute=2>bar</$text>baz</paragraph>\n            //\n            if (hasAnyAttribute(selection, attributes) &&\n                isBetweenDifferentAttributes(position, attributes, true)) {\n                clearSelectionAttributes(model, attributes);\n            }\n            else {\n                this._overrideGravity();\n            }\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Updates the document selection and the view according to the two–step caret movement state\n     * when moving **backwards**. Executed upon `keypress` in the {@link module:engine/view/view~View}.\n     *\n     * @param data Data of the key press.\n     * @returns `true` when the handler prevented caret movement\n     */\n    _handleBackwardMovement(data) {\n        const attributes = this.attributes;\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const position = selection.getFirstPosition();\n        // When the gravity is already overridden (by this plugin), it means we are on the two-step position.\n        // Prevent the movement, restore the gravity and update selection attributes.\n        //\n        //\t\t<paragraph>foo<$text attribute=1>bar</$text><$text attribute=2>{}baz</$text></paragraph>\n        //\t\t<paragraph>foo<$text attribute>bar</$text><$text otherAttribute>{}baz</$text></paragraph>\n        //\t\t<paragraph>foo<$text attribute>{}bar</$text>baz</paragraph>\n        //\t\t<paragraph>foo<$text attribute>bar</$text>{}baz</paragraph>\n        //\n        if (this._isGravityOverridden) {\n            preventCaretMovement(data);\n            this._restoreGravity();\n            // CLEAR 2-SCM attributes if we are at the end of one 2-SCM and before\n            // the next one with a different value of the same attribute.\n            //\n            //\t\t<paragraph>foo<$text attribute=1>bar</$text><$text attribute=2>{}bar</$text>baz</paragraph>\n            //\n            if (isBetweenDifferentAttributes(position, attributes, true)) {\n                clearSelectionAttributes(model, attributes);\n            }\n            else {\n                setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n            }\n            return true;\n        }\n        else {\n            // REMOVE SELECTION ATTRIBUTE when restoring gravity towards a non-existent content at the\n            // beginning of the block.\n            //\n            // \t\t<paragraph>{}<$text attribute>bar</$text></paragraph>\n            //\n            if (position.isAtStart) {\n                if (hasAnyAttribute(selection, attributes)) {\n                    preventCaretMovement(data);\n                    setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n                    return true;\n                }\n                return false;\n            }\n            // SET 2-SCM attributes if we are between nodes with the same attribute but with different values.\n            //\n            //\t\t<paragraph>foo<$text attribute=1>bar</$text>[]<$text attribute=2>bar</$text>baz</paragraph>\n            //\n            if (!hasAnyAttribute(selection, attributes) &&\n                isBetweenDifferentAttributes(position, attributes, true)) {\n                preventCaretMovement(data);\n                setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n                return true;\n            }\n            // When we are moving from natural gravity, to the position of the 2SCM, we need to override the gravity,\n            // and make sure it won't be restored. Unless it's at the end of the block and an observed attribute.\n            // We need to check if the caret is a one position before the attribute boundary:\n            //\n            //\t\t<paragraph>foo<$text attribute=1>bar</$text><$text attribute=2>b{}az</$text></paragraph>\n            //\t\t<paragraph>foo<$text attribute>bar</$text><$text otherAttribute>b{}az</$text></paragraph>\n            //\t\t<paragraph>foo<$text attribute>b{}ar</$text>baz</paragraph>\n            //\t\t<paragraph>foo<$text attribute>bar</$text>b{}az</paragraph>\n            //\n            if (isStepAfterAnyAttributeBoundary(position, attributes)) {\n                // ENGAGE 2-SCM if the selection has no attribute. This may happen when the user\n                // left the attribute using a FORWARD 2-SCM.\n                //\n                // \t\t<paragraph><$text attribute>bar</$text>{}</paragraph>\n                //\n                if (position.isAtEnd &&\n                    !hasAnyAttribute(selection, attributes) &&\n                    isBetweenDifferentAttributes(position, attributes)) {\n                    preventCaretMovement(data);\n                    setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n                    return true;\n                }\n                // Skip the automatic gravity restore upon the next selection#change:range event.\n                // If not skipped, it would automatically restore the gravity, which should remain\n                // overridden.\n                this._isNextGravityRestorationSkipped = true;\n                this._overrideGravity();\n                // Don't return \"true\" here because we didn't call _preventCaretMovement.\n                // Returning here will destabilize the filler logic, which also listens to\n                // keydown (and the event would be stopped).\n                return false;\n            }\n        }\n        return false;\n    }\n    /**\n     * Starts listening to {@link module:engine/view/document~Document#event:mousedown} and\n     * {@link module:engine/view/document~Document#event:selectionChange} and puts the selection before/after a 2-step node\n     * if clicked at the beginning/ending of the 2-step node.\n     *\n     * The purpose of this action is to allow typing around the 2-step node directly after a click.\n     *\n     * See https://github.com/ckeditor/ckeditor5/issues/1016.\n     */\n    _enableClickingAfterNode() {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        const document = editor.editing.view.document;\n        editor.editing.view.addObserver(MouseObserver);\n        let clicked = false;\n        // Detect the click.\n        this.listenTo(document, 'mousedown', () => {\n            clicked = true;\n        });\n        // When the selection has changed...\n        this.listenTo(document, 'selectionChange', () => {\n            const attributes = this.attributes;\n            if (!clicked) {\n                return;\n            }\n            // ...and it was caused by the click...\n            clicked = false;\n            // ...and no text is selected...\n            if (!selection.isCollapsed) {\n                return;\n            }\n            // ...and clicked text is the 2-step node...\n            if (!hasAnyAttribute(selection, attributes)) {\n                return;\n            }\n            const position = selection.getFirstPosition();\n            if (!isBetweenDifferentAttributes(position, attributes)) {\n                return;\n            }\n            // The selection at the start of a block would use surrounding attributes\n            // from text after the selection so just clear 2-SCM attributes.\n            //\n            // Also, clear attributes for selection between same attribute with different values.\n            if (position.isAtStart ||\n                isBetweenDifferentAttributes(position, attributes, true)) {\n                clearSelectionAttributes(model, attributes);\n            }\n            else if (!this._isGravityOverridden) {\n                this._overrideGravity();\n            }\n        });\n    }\n    /**\n     * Starts listening to {@link module:engine/model/model~Model#event:insertContent} and corrects the model\n     * selection attributes if the selection is at the end of a two-step node after inserting the content.\n     *\n     * The purpose of this action is to improve the overall UX because the user is no longer \"trapped\" by the\n     * two-step attribute of the selection, and they can type a \"clean\" (`linkHref`–less) text right away.\n     *\n     * See https://github.com/ckeditor/ckeditor5/issues/6053.\n     */\n    _enableInsertContentSelectionAttributesFixer() {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        const attributes = this.attributes;\n        this.listenTo(model, 'insertContent', () => {\n            const position = selection.getFirstPosition();\n            if (hasAnyAttribute(selection, attributes) &&\n                isBetweenDifferentAttributes(position, attributes)) {\n                clearSelectionAttributes(model, attributes);\n            }\n        }, { priority: 'low' });\n    }\n    /**\n     * Starts listening to {@link module:engine/model/model~Model#deleteContent} and checks whether\n     * removing a content right after the tow-step attribute.\n     *\n     * If so, the selection should not preserve the two-step attribute. However, if\n     * the {@link module:typing/twostepcaretmovement~TwoStepCaretMovement} plugin is active and\n     * the selection has the two-step attribute due to overridden gravity (at the end), the two-step attribute should stay untouched.\n     *\n     * The purpose of this action is to allow removing the link text and keep the selection outside the link.\n     *\n     * See https://github.com/ckeditor/ckeditor5/issues/7521.\n     */\n    _handleDeleteContentAfterNode() {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        const view = editor.editing.view;\n        let isBackspace = false;\n        let shouldPreserveAttributes = false;\n        // Detect pressing `Backspace`.\n        this.listenTo(view.document, 'delete', (evt, data) => {\n            isBackspace = data.direction === 'backward';\n        }, { priority: 'high' });\n        // Before removing the content, check whether the selection is inside a two-step attribute.\n        // If so, we want to preserve those attributes.\n        this.listenTo(model, 'deleteContent', () => {\n            if (!isBackspace) {\n                return;\n            }\n            const position = selection.getFirstPosition();\n            shouldPreserveAttributes = hasAnyAttribute(selection, this.attributes) &&\n                !isStepAfterAnyAttributeBoundary(position, this.attributes);\n        }, { priority: 'high' });\n        // After removing the content, check whether the current selection should preserve the `linkHref` attribute.\n        this.listenTo(model, 'deleteContent', () => {\n            if (!isBackspace) {\n                return;\n            }\n            isBackspace = false;\n            // Do not escape two-step attribute if it was inside it before content deletion.\n            if (shouldPreserveAttributes) {\n                return;\n            }\n            // Use `model.enqueueChange()` in order to execute the callback at the end of the changes process.\n            editor.model.enqueueChange(() => {\n                const position = selection.getFirstPosition();\n                if (hasAnyAttribute(selection, this.attributes) &&\n                    isBetweenDifferentAttributes(position, this.attributes)) {\n                    if (position.isAtStart || isBetweenDifferentAttributes(position, this.attributes, true)) {\n                        clearSelectionAttributes(model, this.attributes);\n                    }\n                    else if (!this._isGravityOverridden) {\n                        this._overrideGravity();\n                    }\n                }\n            });\n        }, { priority: 'low' });\n    }\n    /**\n     * `true` when the gravity is overridden for the plugin.\n     */\n    get _isGravityOverridden() {\n        return !!this._overrideUid;\n    }\n    /**\n     * Overrides the gravity using the {@link module:engine/model/writer~Writer model writer}\n     * and stores the information about this fact in the {@link #_overrideUid}.\n     *\n     * A shorthand for {@link module:engine/model/writer~Writer#overrideSelectionGravity}.\n     */\n    _overrideGravity() {\n        this._overrideUid = this.editor.model.change(writer => {\n            return writer.overrideSelectionGravity();\n        });\n    }\n    /**\n     * Restores the gravity using the {@link module:engine/model/writer~Writer model writer}.\n     *\n     * A shorthand for {@link module:engine/model/writer~Writer#restoreSelectionGravity}.\n     */\n    _restoreGravity() {\n        this.editor.model.change(writer => {\n            writer.restoreSelectionGravity(this._overrideUid);\n            this._overrideUid = null;\n        });\n    }\n}\n/**\n * Checks whether the selection has any of given attributes.\n */\nfunction hasAnyAttribute(selection, attributes) {\n    for (const observedAttribute of attributes) {\n        if (selection.hasAttribute(observedAttribute)) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Applies the given attributes to the current selection using using the\n * values from the node before the current position. Uses\n * the {@link module:engine/model/writer~Writer model writer}.\n */\nfunction setSelectionAttributesFromTheNodeBefore(model, attributes, position) {\n    const nodeBefore = position.nodeBefore;\n    model.change(writer => {\n        if (nodeBefore) {\n            const attributes = [];\n            const isInlineObject = model.schema.isObject(nodeBefore) && model.schema.isInline(nodeBefore);\n            for (const [key, value] of nodeBefore.getAttributes()) {\n                if (model.schema.checkAttribute('$text', key) &&\n                    (!isInlineObject || model.schema.getAttributeProperties(key).copyFromObject !== false)) {\n                    attributes.push([key, value]);\n                }\n            }\n            writer.setSelectionAttribute(attributes);\n        }\n        else {\n            writer.removeSelectionAttribute(attributes);\n        }\n    });\n}\n/**\n * Removes 2-SCM attributes from the selection.\n */\nfunction clearSelectionAttributes(model, attributes) {\n    model.change(writer => {\n        writer.removeSelectionAttribute(attributes);\n    });\n}\n/**\n * Prevents the caret movement in the view by calling `preventDefault` on the event data.\n *\n * @alias data.preventDefault\n */\nfunction preventCaretMovement(data) {\n    data.preventDefault();\n}\n/**\n * Checks whether the step before `isBetweenDifferentAttributes()`.\n */\nfunction isStepAfterAnyAttributeBoundary(position, attributes) {\n    const positionBefore = position.getShiftedBy(-1);\n    return isBetweenDifferentAttributes(positionBefore, attributes);\n}\n/**\n * Checks whether the given position is between different values of given attributes.\n */\nfunction isBetweenDifferentAttributes(position, attributes, isStrict = false) {\n    const { nodeBefore, nodeAfter } = position;\n    for (const observedAttribute of attributes) {\n        const attrBefore = nodeBefore ? nodeBefore.getAttribute(observedAttribute) : undefined;\n        const attrAfter = nodeAfter ? nodeAfter.getAttribute(observedAttribute) : undefined;\n        if (isStrict && (attrBefore === undefined || attrAfter === undefined)) {\n            continue;\n        }\n        if (attrAfter !== attrBefore) {\n            return true;\n        }\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/texttransformation\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport TextWatcher from './textwatcher.js';\nimport { escapeRegExp } from 'lodash-es';\n// All named transformations.\nconst TRANSFORMATIONS = {\n    // Common symbols:\n    copyright: { from: '(c)', to: '©' },\n    registeredTrademark: { from: '(r)', to: '®' },\n    trademark: { from: '(tm)', to: '™' },\n    // Mathematical:\n    oneHalf: { from: /(^|[^/a-z0-9])(1\\/2)([^/a-z0-9])$/i, to: [null, '½', null] },\n    oneThird: { from: /(^|[^/a-z0-9])(1\\/3)([^/a-z0-9])$/i, to: [null, '⅓', null] },\n    twoThirds: { from: /(^|[^/a-z0-9])(2\\/3)([^/a-z0-9])$/i, to: [null, '⅔', null] },\n    oneForth: { from: /(^|[^/a-z0-9])(1\\/4)([^/a-z0-9])$/i, to: [null, '¼', null] },\n    threeQuarters: { from: /(^|[^/a-z0-9])(3\\/4)([^/a-z0-9])$/i, to: [null, '¾', null] },\n    lessThanOrEqual: { from: '<=', to: '≤' },\n    greaterThanOrEqual: { from: '>=', to: '≥' },\n    notEqual: { from: '!=', to: '≠' },\n    arrowLeft: { from: '<-', to: '←' },\n    arrowRight: { from: '->', to: '→' },\n    // Typography:\n    horizontalEllipsis: { from: '...', to: '…' },\n    enDash: { from: /(^| )(--)( )$/, to: [null, '–', null] },\n    emDash: { from: /(^| )(---)( )$/, to: [null, '—', null] },\n    // Quotations:\n    // English, US\n    quotesPrimary: { from: buildQuotesRegExp('\"'), to: [null, '“', null, '”'] },\n    quotesSecondary: { from: buildQuotesRegExp('\\''), to: [null, '‘', null, '’'] },\n    // English, UK\n    quotesPrimaryEnGb: { from: buildQuotesRegExp('\\''), to: [null, '‘', null, '’'] },\n    quotesSecondaryEnGb: { from: buildQuotesRegExp('\"'), to: [null, '“', null, '”'] },\n    // Polish\n    quotesPrimaryPl: { from: buildQuotesRegExp('\"'), to: [null, '„', null, '”'] },\n    quotesSecondaryPl: { from: buildQuotesRegExp('\\''), to: [null, '‚', null, '’'] }\n};\n// Transformation groups.\nconst TRANSFORMATION_GROUPS = {\n    symbols: ['copyright', 'registeredTrademark', 'trademark'],\n    mathematical: [\n        'oneHalf', 'oneThird', 'twoThirds', 'oneForth', 'threeQuarters',\n        'lessThanOrEqual', 'greaterThanOrEqual', 'notEqual',\n        'arrowLeft', 'arrowRight'\n    ],\n    typography: ['horizontalEllipsis', 'enDash', 'emDash'],\n    quotes: ['quotesPrimary', 'quotesSecondary']\n};\n// A set of default transformations provided by the feature.\nconst DEFAULT_TRANSFORMATIONS = [\n    'symbols',\n    'mathematical',\n    'typography',\n    'quotes'\n];\n/**\n * The text transformation plugin.\n */\nexport default class TextTransformation extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return ['Delete', 'Input'];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TextTransformation';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('typing', {\n            transformations: {\n                include: DEFAULT_TRANSFORMATIONS\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const model = this.editor.model;\n        const modelSelection = model.document.selection;\n        modelSelection.on('change:range', () => {\n            // Disable plugin when selection is inside a code block.\n            this.isEnabled = !modelSelection.anchor.parent.is('element', 'codeBlock');\n        });\n        this._enableTransformationWatchers();\n    }\n    /**\n     * Create new TextWatcher listening to the editor for typing and selection events.\n     */\n    _enableTransformationWatchers() {\n        const editor = this.editor;\n        const model = editor.model;\n        const deletePlugin = editor.plugins.get('Delete');\n        const normalizedTransformations = normalizeTransformations(editor.config.get('typing.transformations'));\n        const testCallback = (text) => {\n            for (const normalizedTransformation of normalizedTransformations) {\n                const from = normalizedTransformation.from;\n                const match = from.test(text);\n                if (match) {\n                    return { normalizedTransformation };\n                }\n            }\n        };\n        const watcher = new TextWatcher(editor.model, testCallback);\n        watcher.on('matched:data', (evt, data) => {\n            if (!data.batch.isTyping) {\n                return;\n            }\n            const { from, to } = data.normalizedTransformation;\n            const matches = from.exec(data.text);\n            const replaces = to(matches.slice(1));\n            const matchedRange = data.range;\n            let changeIndex = matches.index;\n            model.enqueueChange(writer => {\n                for (let i = 1; i < matches.length; i++) {\n                    const match = matches[i];\n                    const replaceWith = replaces[i - 1];\n                    if (replaceWith == null) {\n                        changeIndex += match.length;\n                        continue;\n                    }\n                    const replacePosition = matchedRange.start.getShiftedBy(changeIndex);\n                    const replaceRange = model.createRange(replacePosition, replacePosition.getShiftedBy(match.length));\n                    const attributes = getTextAttributesAfterPosition(replacePosition);\n                    model.insertContent(writer.createText(replaceWith, attributes), replaceRange);\n                    changeIndex += replaceWith.length;\n                }\n                model.enqueueChange(() => {\n                    deletePlugin.requestUndoOnBackspace();\n                });\n            });\n        });\n        watcher.bind('isEnabled').to(this);\n    }\n}\n/**\n * Normalizes the configuration `from` parameter value.\n * The normalized value for the `from` parameter is a RegExp instance. If the passed `from` is already a RegExp instance,\n * it is returned unchanged.\n */\nfunction normalizeFrom(from) {\n    if (typeof from == 'string') {\n        return new RegExp(`(${escapeRegExp(from)})$`);\n    }\n    // `from` is already a regular expression.\n    return from;\n}\n/**\n * Normalizes the configuration `to` parameter value.\n * The normalized value for the `to` parameter is a function that takes an array and returns an array. See more in the\n * configuration description. If the passed `to` is already a function, it is returned unchanged.\n */\nfunction normalizeTo(to) {\n    if (typeof to == 'string') {\n        return () => [to];\n    }\n    else if (to instanceof Array) {\n        return () => to;\n    }\n    // `to` is already a function.\n    return to;\n}\n/**\n * For given `position` returns attributes for the text that is after that position.\n * The text can be in the same text node as the position (`foo[]bar`) or in the next text node (`foo[]<$text bold=\"true\">bar</$text>`).\n */\nfunction getTextAttributesAfterPosition(position) {\n    const textNode = position.textNode ? position.textNode : position.nodeAfter;\n    return textNode.getAttributes();\n}\n/**\n * Returns a RegExp pattern string that detects a sentence inside a quote.\n *\n * @param quoteCharacter The character to create a pattern for.\n */\nfunction buildQuotesRegExp(quoteCharacter) {\n    return new RegExp(`(^|\\\\s)(${quoteCharacter})([^${quoteCharacter}]*)(${quoteCharacter})$`);\n}\n/**\n * Reads text transformation config and returns normalized array of transformations objects.\n */\nfunction normalizeTransformations(config) {\n    const extra = config.extra || [];\n    const remove = config.remove || [];\n    const isNotRemoved = (transformation) => !remove.includes(transformation);\n    const configured = config.include.concat(extra).filter(isNotRemoved);\n    return expandGroupsAndRemoveDuplicates(configured)\n        .filter(isNotRemoved) // Filter out 'remove' transformations as they might be set in group.\n        .map(transformation => (typeof transformation == 'string' && TRANSFORMATIONS[transformation] ? TRANSFORMATIONS[transformation] : transformation))\n        // Filter out transformations set as string that has not been found.\n        .filter((transformation) => typeof transformation === 'object')\n        .map(transformation => ({\n        from: normalizeFrom(transformation.from),\n        to: normalizeTo(transformation.to)\n    }));\n}\n/**\n * Reads definitions and expands named groups if needed to transformation names.\n * This method also removes duplicated named transformations if any.\n */\nfunction expandGroupsAndRemoveDuplicates(definitions) {\n    // Set is using to make sure that transformation names are not duplicated.\n    const definedTransformations = new Set();\n    for (const transformationOrGroup of definitions) {\n        if (typeof transformationOrGroup == 'string' && TRANSFORMATION_GROUPS[transformationOrGroup]) {\n            for (const transformation of TRANSFORMATION_GROUPS[transformationOrGroup]) {\n                definedTransformations.add(transformation);\n            }\n        }\n        else {\n            definedTransformations.add(transformationOrGroup);\n        }\n    }\n    return Array.from(definedTransformations);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Returns a model range that covers all consecutive nodes with the same `attributeName` and its `value`\n * that intersect the given `position`.\n *\n * It can be used e.g. to get the entire range on which the `linkHref` attribute needs to be changed when having a\n * selection inside a link.\n *\n * @param position The start position.\n * @param attributeName The attribute name.\n * @param value The attribute value.\n * @param model The model instance.\n * @returns The link range.\n */\nexport default function findAttributeRange(position, attributeName, value, model) {\n    return model.createRange(findAttributeRangeBound(position, attributeName, value, true, model), findAttributeRangeBound(position, attributeName, value, false, model));\n}\n/**\n * Walks forward or backward (depends on the `lookBack` flag), node by node, as long as they have the same attribute value\n * and returns a position just before or after (depends on the `lookBack` flag) the last matched node.\n *\n * @param position The start position.\n * @param attributeName The attribute name.\n * @param value The attribute value.\n * @param lookBack Whether the walk direction is forward (`false`) or backward (`true`).\n * @returns The position just before the last matched node.\n */\nexport function findAttributeRangeBound(position, attributeName, value, lookBack, model) {\n    // Get node before or after position (depends on `lookBack` flag).\n    // When position is inside text node then start searching from text node.\n    let node = position.textNode || (lookBack ? position.nodeBefore : position.nodeAfter);\n    let lastNode = null;\n    while (node && node.getAttribute(attributeName) == value) {\n        lastNode = node;\n        node = lookBack ? node.previousSibling : node.nextSibling;\n    }\n    return lastNode ? model.createPositionAt(lastNode, lookBack ? 'before' : 'after') : position;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Returns attributes that should be preserved on the enter keystroke.\n *\n * Filtering is realized based on `copyOnEnter` attribute property. Read more about attribute properties\n * {@link module:engine/model/schema~Schema#setAttributeProperties here}.\n *\n * @param schema Model's schema.\n * @param allAttributes Attributes to filter.\n */\nexport function* getCopyOnEnterAttributes(schema, allAttributes) {\n    for (const attribute of allAttributes) {\n        if (attribute && schema.getAttributeProperties(attribute[0]).copyOnEnter) {\n            yield attribute;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module enter/entercommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport { getCopyOnEnterAttributes } from './utils.js';\n/**\n * Enter command used by the {@link module:enter/enter~Enter Enter feature} to handle the <kbd>Enter</kbd> keystroke.\n */\nexport default class EnterCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        this.editor.model.change(writer => {\n            this.enterBlock(writer);\n            this.fire('afterExecute', { writer });\n        });\n    }\n    /**\n     * Splits a block where the document selection is placed, in the way how the <kbd>Enter</kbd> key is expected to work:\n     *\n     * ```\n     * <p>Foo[]bar</p>   ->   <p>Foo</p><p>[]bar</p>\n     * <p>Foobar[]</p>   ->   <p>Foobar</p><p>[]</p>\n     * <p>Fo[ob]ar</p>   ->   <p>Fo</p><p>[]ar</p>\n     * ```\n     *\n     * In some cases, the split will not happen:\n     *\n     * ```\n     * // The selection parent is a limit element:\n     * <figcaption>A[bc]d</figcaption>   ->   <figcaption>A[]d</figcaption>\n     *\n     * // The selection spans over multiple elements:\n     * <h>x[x</h><p>y]y<p>   ->   <h>x</h><p>[]y</p>\n     * ```\n     *\n     * @param writer Writer to use when performing the enter action.\n     * @returns Boolean indicating if the block was split.\n     */\n    enterBlock(writer) {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const schema = model.schema;\n        const isSelectionEmpty = selection.isCollapsed;\n        const range = selection.getFirstRange();\n        const startElement = range.start.parent;\n        const endElement = range.end.parent;\n        // Don't touch the roots and other limit elements.\n        if (schema.isLimit(startElement) || schema.isLimit(endElement)) {\n            // Delete the selected content but only if inside a single limit element.\n            // Abort, when crossing limit elements boundary (e.g. <limit1>x[x</limit1>donttouchme<limit2>y]y</limit2>).\n            // This is an edge case and it's hard to tell what should actually happen because such a selection\n            // is not entirely valid.\n            if (!isSelectionEmpty && startElement == endElement) {\n                model.deleteContent(selection);\n            }\n            return false;\n        }\n        if (isSelectionEmpty) {\n            const attributesToCopy = getCopyOnEnterAttributes(writer.model.schema, selection.getAttributes());\n            splitBlock(writer, range.start);\n            writer.setSelectionAttribute(attributesToCopy);\n            return true;\n        }\n        else {\n            const leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n            const isContainedWithinOneElement = (startElement == endElement);\n            model.deleteContent(selection, { leaveUnmerged });\n            if (leaveUnmerged) {\n                // Partially selected elements.\n                //\n                // <h>x[xx]x</h>\t\t-> <h>x^x</h>\t\t\t-> <h>x</h><h>^x</h>\n                if (isContainedWithinOneElement) {\n                    splitBlock(writer, selection.focus);\n                    return true;\n                }\n                // Selection over multiple elements.\n                //\n                // <h>x[x</h><p>y]y<p>\t-> <h>x^</h><p>y</p>\t-> <h>x</h><p>^y</p>\n                else {\n                    writer.setSelection(endElement, 0);\n                }\n            }\n        }\n        return false;\n    }\n}\nfunction splitBlock(writer, splitPos) {\n    writer.split(splitPos);\n    writer.setSelection(splitPos.parent.nextSibling, 0);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module enter/enterobserver\n */\nimport { Observer, DomEventData, BubblingEventInfo } from '@ckeditor/ckeditor5-engine';\nimport { env } from '@ckeditor/ckeditor5-utils';\nconst ENTER_EVENT_TYPES = {\n    insertParagraph: { isSoft: false },\n    insertLineBreak: { isSoft: true }\n};\n/**\n * Enter observer introduces the {@link module:engine/view/document~Document#event:enter `Document#enter`} event.\n */\nexport default class EnterObserver extends Observer {\n    /**\n     * @inheritDoc\n     */\n    constructor(view) {\n        super(view);\n        const doc = this.document;\n        let shiftPressed = false;\n        doc.on('keydown', (evt, data) => {\n            shiftPressed = data.shiftKey;\n        });\n        doc.on('beforeinput', (evt, data) => {\n            if (!this.isEnabled) {\n                return;\n            }\n            let inputType = data.inputType;\n            // See https://github.com/ckeditor/ckeditor5/issues/13321.\n            if (env.isSafari && shiftPressed && inputType == 'insertParagraph') {\n                inputType = 'insertLineBreak';\n            }\n            const domEvent = data.domEvent;\n            const enterEventSpec = ENTER_EVENT_TYPES[inputType];\n            if (!enterEventSpec) {\n                return;\n            }\n            const event = new BubblingEventInfo(doc, 'enter', data.targetRanges[0]);\n            doc.fire(event, new DomEventData(view, domEvent, {\n                isSoft: enterEventSpec.isSoft\n            }));\n            // Stop `beforeinput` event if `enter` event was stopped.\n            // https://github.com/ckeditor/ckeditor5/issues/753\n            if (event.stop.called) {\n                evt.stop();\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    observe() { }\n    /**\n     * @inheritDoc\n     */\n    stopObserving() { }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module enter/enter\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport EnterCommand from './entercommand.js';\nimport EnterObserver from './enterobserver.js';\n/**\n * This plugin handles the <kbd>Enter</kbd> keystroke (hard line break) in the editor.\n *\n * See also the {@link module:enter/shiftenter~ShiftEnter} plugin.\n *\n * For more information about this feature see the {@glink api/enter package page}.\n */\nexport default class Enter extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Enter';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    init() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const t = this.editor.t;\n        view.addObserver(EnterObserver);\n        editor.commands.add('enter', new EnterCommand(editor));\n        this.listenTo(viewDocument, 'enter', (evt, data) => {\n            // When not in composition, we handle the action, so prevent the default one.\n            // When in composition, it's the browser who modify the DOM (renderer is disabled).\n            if (!viewDocument.isComposing) {\n                data.preventDefault();\n            }\n            // The soft enter key is handled by the ShiftEnter plugin.\n            if (data.isSoft) {\n                return;\n            }\n            editor.execute('enter');\n            view.scrollToTheSelection();\n        }, { priority: 'low' });\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Insert a hard break (a new paragraph)'),\n                    keystroke: 'Enter'\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module enter/shiftentercommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport { getCopyOnEnterAttributes } from './utils.js';\n/**\n * ShiftEnter command. It is used by the {@link module:enter/shiftenter~ShiftEnter ShiftEnter feature} to handle\n * the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke.\n */\nexport default class ShiftEnterCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const model = this.editor.model;\n        const doc = model.document;\n        model.change(writer => {\n            softBreakAction(model, writer, doc.selection);\n            this.fire('afterExecute', { writer });\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const doc = model.document;\n        this.isEnabled = isEnabled(model.schema, doc.selection);\n    }\n}\n/**\n * Checks whether the ShiftEnter command should be enabled in the specified selection.\n */\nfunction isEnabled(schema, selection) {\n    // At this moment it is okay to support single range selections only.\n    // But in the future we may need to change that.\n    if (selection.rangeCount > 1) {\n        return false;\n    }\n    const anchorPos = selection.anchor;\n    // Check whether the break element can be inserted in the current selection anchor.\n    if (!anchorPos || !schema.checkChild(anchorPos, 'softBreak')) {\n        return false;\n    }\n    const range = selection.getFirstRange();\n    const startElement = range.start.parent;\n    const endElement = range.end.parent;\n    // Do not modify the content if selection is cross-limit elements.\n    if ((isInsideLimitElement(startElement, schema) || isInsideLimitElement(endElement, schema)) && startElement !== endElement) {\n        return false;\n    }\n    return true;\n}\n/**\n * Creates a break in the way that the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke is expected to work.\n */\nfunction softBreakAction(model, writer, selection) {\n    const isSelectionEmpty = selection.isCollapsed;\n    const range = selection.getFirstRange();\n    const startElement = range.start.parent;\n    const endElement = range.end.parent;\n    const isContainedWithinOneElement = (startElement == endElement);\n    if (isSelectionEmpty) {\n        const attributesToCopy = getCopyOnEnterAttributes(model.schema, selection.getAttributes());\n        insertBreak(model, writer, range.end);\n        writer.removeSelectionAttribute(selection.getAttributeKeys());\n        writer.setSelectionAttribute(attributesToCopy);\n    }\n    else {\n        const leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n        model.deleteContent(selection, { leaveUnmerged });\n        // Selection within one element:\n        //\n        // <h>x[xx]x</h>\t\t-> <h>x^x</h>\t\t\t-> <h>x<br>^x</h>\n        if (isContainedWithinOneElement) {\n            insertBreak(model, writer, selection.focus);\n        }\n        // Selection over multiple elements.\n        //\n        // <h>x[x</h><p>y]y<p>\t-> <h>x^</h><p>y</p>\t-> <h>x</h><p>^y</p>\n        //\n        // We chose not to insert a line break in this case because:\n        //\n        // * it's not a very common scenario,\n        // * it actually surprised me when I saw the \"expected behavior\" in real life.\n        //\n        // It's ok if the user will need to be more specific where they want the <br> to be inserted.\n        else {\n            // Move the selection to the 2nd element (last step of the example above).\n            if (leaveUnmerged) {\n                writer.setSelection(endElement, 0);\n            }\n        }\n    }\n}\nfunction insertBreak(model, writer, position) {\n    const breakLineElement = writer.createElement('softBreak');\n    model.insertContent(breakLineElement, position);\n    writer.setSelection(breakLineElement, 'after');\n}\n/**\n * Checks whether the specified `element` is a child of the limit element.\n *\n * Checking whether the `<p>` element is inside a limit element:\n *   - `<$root><p>Text.</p></$root> => false`\n *   - `<$root><limitElement><p>Text</p></limitElement></$root> => true`\n */\nfunction isInsideLimitElement(element, schema) {\n    // `$root` is a limit element but in this case is an invalid element.\n    if (element.is('rootElement')) {\n        return false;\n    }\n    return schema.isLimit(element) || isInsideLimitElement(element.parent, schema);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module enter/shiftenter\n */\nimport ShiftEnterCommand from './shiftentercommand.js';\nimport EnterObserver from './enterobserver.js';\nimport { Plugin } from '@ckeditor/ckeditor5-core';\n/**\n * This plugin handles the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke (soft line break) in the editor.\n *\n * See also the {@link module:enter/enter~Enter} plugin.\n *\n * For more information about this feature see the {@glink api/enter package page}.\n */\nexport default class ShiftEnter extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ShiftEnter';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    init() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        const conversion = editor.conversion;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const t = this.editor.t;\n        // Configure the schema.\n        schema.register('softBreak', {\n            allowWhere: '$text',\n            isInline: true\n        });\n        // Configure converters.\n        conversion.for('upcast')\n            .elementToElement({\n            model: 'softBreak',\n            view: 'br'\n        });\n        conversion.for('downcast')\n            .elementToElement({\n            model: 'softBreak',\n            view: (modelElement, { writer }) => writer.createEmptyElement('br')\n        });\n        view.addObserver(EnterObserver);\n        editor.commands.add('shiftEnter', new ShiftEnterCommand(editor));\n        this.listenTo(viewDocument, 'enter', (evt, data) => {\n            // When not in composition, we handle the action, so prevent the default one.\n            // When in composition, it's the browser who modify the DOM (renderer is disabled).\n            if (!viewDocument.isComposing) {\n                data.preventDefault();\n            }\n            // The hard enter key is handled by the Enter plugin.\n            if (!data.isSoft) {\n                return;\n            }\n            editor.execute('shiftEnter');\n            view.scrollToTheSelection();\n        }, { priority: 'low' });\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Insert a soft break (a <code>&lt;br&gt;</code> element)'),\n                    keystroke: 'Shift+Enter'\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/highlightstack\n */\nimport { EmitterMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Class used to handle the correct order of highlights on elements.\n *\n * When different highlights are applied to same element the correct order should be preserved:\n *\n * * highlight with highest priority should be applied,\n * * if two highlights have same priority - sort by CSS class provided in\n * {@link module:engine/conversion/downcasthelpers~HighlightDescriptor}.\n *\n * This way, highlight will be applied with the same rules it is applied on texts.\n */\nexport default class HighlightStack extends /* #__PURE__ */ EmitterMixin() {\n    constructor() {\n        super(...arguments);\n        this._stack = [];\n    }\n    /**\n     * Adds highlight descriptor to the stack.\n     *\n     * @fires change:top\n     */\n    add(descriptor, writer) {\n        const stack = this._stack;\n        // Save top descriptor and insert new one. If top is changed - fire event.\n        const oldTop = stack[0];\n        this._insertDescriptor(descriptor);\n        const newTop = stack[0];\n        // When new object is at the top and stores different information.\n        if (oldTop !== newTop && !compareDescriptors(oldTop, newTop)) {\n            this.fire('change:top', {\n                oldDescriptor: oldTop,\n                newDescriptor: newTop,\n                writer\n            });\n        }\n    }\n    /**\n     * Removes highlight descriptor from the stack.\n     *\n     * @fires change:top\n     * @param id Id of the descriptor to remove.\n     */\n    remove(id, writer) {\n        const stack = this._stack;\n        const oldTop = stack[0];\n        this._removeDescriptor(id);\n        const newTop = stack[0];\n        // When new object is at the top and stores different information.\n        if (oldTop !== newTop && !compareDescriptors(oldTop, newTop)) {\n            this.fire('change:top', {\n                oldDescriptor: oldTop,\n                newDescriptor: newTop,\n                writer\n            });\n        }\n    }\n    /**\n     * Inserts a given descriptor in correct place in the stack. It also takes care about updating information\n     * when descriptor with same id is already present.\n     */\n    _insertDescriptor(descriptor) {\n        const stack = this._stack;\n        const index = stack.findIndex(item => item.id === descriptor.id);\n        // Inserting exact same descriptor - do nothing.\n        if (compareDescriptors(descriptor, stack[index])) {\n            return;\n        }\n        // If descriptor with same id but with different information is on the stack - remove it.\n        if (index > -1) {\n            stack.splice(index, 1);\n        }\n        // Find correct place to insert descriptor in the stack.\n        // It has different information (for example priority) so it must be re-inserted in correct place.\n        let i = 0;\n        while (stack[i] && shouldABeBeforeB(stack[i], descriptor)) {\n            i++;\n        }\n        stack.splice(i, 0, descriptor);\n    }\n    /**\n     * Removes descriptor with given id from the stack.\n     *\n     * @param id Descriptor's id.\n     */\n    _removeDescriptor(id) {\n        const stack = this._stack;\n        const index = stack.findIndex(item => item.id === id);\n        // If descriptor with same id is on the list - remove it.\n        if (index > -1) {\n            stack.splice(index, 1);\n        }\n    }\n}\n/**\n * Compares two descriptors by checking their priority and class list.\n *\n * @returns Returns true if both descriptors are defined and have same priority and classes.\n */\nfunction compareDescriptors(a, b) {\n    return a && b && a.priority == b.priority && classesToString(a.classes) == classesToString(b.classes);\n}\n/**\n * Checks whenever first descriptor should be placed in the stack before second one.\n */\nfunction shouldABeBeforeB(a, b) {\n    if (a.priority > b.priority) {\n        return true;\n    }\n    else if (a.priority < b.priority) {\n        return false;\n    }\n    // When priorities are equal and names are different - use classes to compare.\n    return classesToString(a.classes) > classesToString(b.classes);\n}\n/**\n * Converts CSS classes passed with {@link module:engine/conversion/downcasthelpers~HighlightDescriptor} to\n * sorted string.\n */\nfunction classesToString(classes) {\n    return Array.isArray(classes) ? classes.sort().join(',') : classes;\n}\n", "export default \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M4 0v1H1v3H0V.5A.5.5 0 0 1 .5 0H4zm8 0h3.5a.5.5 0 0 1 .5.5V4h-1V1h-3V0zM4 16H.5a.5.5 0 0 1-.5-.5V12h1v3h3v1zm8 0v-1h3v-3h1v3.5a.5.5 0 0 1-.5.5H12z\\\"/><path fill-opacity=\\\".256\\\" d=\\\"M1 1h14v14H1z\\\"/><g class=\\\"ck-icon__selected-indicator\\\"><path d=\\\"M7 0h2v1H7V0zM0 7h1v2H0V7zm15 0h1v2h-1V7zm-8 8h2v1H7v-1z\\\"/><path fill-opacity=\\\".254\\\" d=\\\"M1 1h14v14H1z\\\"/></g></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/utils\n */\nimport { Rect, CKEditorError, toArray } from '@ckeditor/ckeditor5-utils';\nimport { IconView } from '@ckeditor/ckeditor5-ui';\nimport HighlightStack from './highlightstack.js';\nimport { getTypeAroundFakeCaretPosition } from './widgettypearound/utils.js';\nimport dragHandleIcon from '../theme/icons/drag-handle.svg';\n/**\n * CSS class added to each widget element.\n */\nexport const WIDGET_CLASS_NAME = 'ck-widget';\n/**\n * CSS class added to currently selected widget element.\n */\nexport const WIDGET_SELECTED_CLASS_NAME = 'ck-widget_selected';\n/**\n * Returns `true` if given {@link module:engine/view/node~Node} is an {@link module:engine/view/element~Element} and a widget.\n */\nexport function isWidget(node) {\n    if (!node.is('element')) {\n        return false;\n    }\n    return !!node.getCustomProperty('widget');\n}\n/**\n * Converts the given {@link module:engine/view/element~Element} to a widget in the following way:\n *\n * * sets the `contenteditable` attribute to `\"false\"`,\n * * adds the `ck-widget` CSS class,\n * * adds a custom {@link module:engine/view/element~Element#getFillerOffset `getFillerOffset()`} method returning `null`,\n * * adds a custom property allowing to recognize widget elements by using {@link ~isWidget `isWidget()`},\n * * implements the {@link ~setHighlightHandling view highlight on widgets}.\n *\n * This function needs to be used in conjunction with\n * {@link module:engine/conversion/downcasthelpers~DowncastHelpers downcast conversion helpers}\n * like {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToElement `elementToElement()`}.\n * Moreover, typically you will want to use `toWidget()` only for `editingDowncast`, while keeping the `dataDowncast` clean.\n *\n * For example, in order to convert a `<widget>` model element to `<div class=\"widget\">` in the view, you can define\n * such converters:\n *\n * ```ts\n * editor.conversion.for( 'editingDowncast' )\n * \t.elementToElement( {\n * \t\tmodel: 'widget',\n * \t\tview: ( modelItem, { writer } ) => {\n * \t\t\tconst div = writer.createContainerElement( 'div', { class: 'widget' } );\n *\n * \t\t\treturn toWidget( div, writer, { label: 'some widget' } );\n * \t\t}\n * \t} );\n *\n * editor.conversion.for( 'dataDowncast' )\n * \t.elementToElement( {\n * \t\tmodel: 'widget',\n * \t\tview: ( modelItem, { writer } ) => {\n * \t\t\treturn writer.createContainerElement( 'div', { class: 'widget' } );\n * \t\t}\n * \t} );\n * ```\n *\n * See the full source code of the widget (with a nested editable) schema definition and converters in\n * [this sample](https://github.com/ckeditor/ckeditor5-widget/blob/master/tests/manual/widget-with-nestededitable.js).\n *\n * @param options Additional options.\n * @param options.label Element's label provided to the {@link ~setLabel} function. It can be passed as\n * a plain string or a function returning a string. It represents the widget for assistive technologies (like screen readers).\n * @param options.hasSelectionHandle If `true`, the widget will have a selection handle added.\n * @returns Returns the same element.\n */\nexport function toWidget(element, writer, options = {}) {\n    if (!element.is('containerElement')) {\n        /**\n         * The element passed to `toWidget()` must be a {@link module:engine/view/containerelement~ContainerElement}\n         * instance.\n         *\n         * @error widget-to-widget-wrong-element-type\n         * @param element The view element passed to `toWidget()`.\n         */\n        throw new CKEditorError('widget-to-widget-wrong-element-type', null, { element });\n    }\n    writer.setAttribute('contenteditable', 'false', element);\n    writer.addClass(WIDGET_CLASS_NAME, element);\n    writer.setCustomProperty('widget', true, element);\n    element.getFillerOffset = getFillerOffset;\n    writer.setCustomProperty('widgetLabel', [], element);\n    if (options.label) {\n        setLabel(element, options.label);\n    }\n    if (options.hasSelectionHandle) {\n        addSelectionHandle(element, writer);\n    }\n    setHighlightHandling(element, writer);\n    return element;\n}\n/**\n * Default handler for adding a highlight on a widget.\n * It adds CSS class and attributes basing on the given highlight descriptor.\n */\nfunction addHighlight(element, descriptor, writer) {\n    if (descriptor.classes) {\n        writer.addClass(toArray(descriptor.classes), element);\n    }\n    if (descriptor.attributes) {\n        for (const key in descriptor.attributes) {\n            writer.setAttribute(key, descriptor.attributes[key], element);\n        }\n    }\n}\n/**\n * Default handler for removing a highlight from a widget.\n * It removes CSS class and attributes basing on the given highlight descriptor.\n */\nfunction removeHighlight(element, descriptor, writer) {\n    if (descriptor.classes) {\n        writer.removeClass(toArray(descriptor.classes), element);\n    }\n    if (descriptor.attributes) {\n        for (const key in descriptor.attributes) {\n            writer.removeAttribute(key, element);\n        }\n    }\n}\n/**\n * Sets highlight handling methods. Uses {@link module:widget/highlightstack~HighlightStack} to\n * properly determine which highlight descriptor should be used at given time.\n */\nexport function setHighlightHandling(element, writer, add = addHighlight, remove = removeHighlight) {\n    const stack = new HighlightStack();\n    stack.on('change:top', (evt, data) => {\n        if (data.oldDescriptor) {\n            remove(element, data.oldDescriptor, data.writer);\n        }\n        if (data.newDescriptor) {\n            add(element, data.newDescriptor, data.writer);\n        }\n    });\n    const addHighlightCallback = (element, descriptor, writer) => stack.add(descriptor, writer);\n    const removeHighlightCallback = (element, id, writer) => stack.remove(id, writer);\n    writer.setCustomProperty('addHighlight', addHighlightCallback, element);\n    writer.setCustomProperty('removeHighlight', removeHighlightCallback, element);\n}\n/**\n * Sets label for given element.\n * It can be passed as a plain string or a function returning a string. Function will be called each time label is retrieved by\n * {@link ~getLabel `getLabel()`}.\n */\nexport function setLabel(element, labelOrCreator) {\n    const widgetLabel = element.getCustomProperty('widgetLabel');\n    widgetLabel.push(labelOrCreator);\n}\n/**\n * Returns the label of the provided element.\n */\nexport function getLabel(element) {\n    const widgetLabel = element.getCustomProperty('widgetLabel');\n    return widgetLabel.reduce((prev, current) => {\n        if (typeof current === 'function') {\n            return prev ? prev + '. ' + current() : current();\n        }\n        else {\n            return prev ? prev + '. ' + current : current;\n        }\n    }, '');\n}\n/**\n * Adds functionality to the provided {@link module:engine/view/editableelement~EditableElement} to act as a widget's editable:\n *\n * * sets the `contenteditable` attribute to `true` when {@link module:engine/view/editableelement~EditableElement#isReadOnly} is `false`,\n * otherwise sets it to `false`,\n * * adds the `ck-editor__editable` and `ck-editor__nested-editable` CSS classes,\n * * adds the `ck-editor__nested-editable_focused` CSS class when the editable is focused and removes it when it is blurred.\n * * implements the {@link ~setHighlightHandling view highlight on widget's editable}.\n *\n * Similarly to {@link ~toWidget `toWidget()`} this function should be used in `editingDowncast` only and it is usually\n * used together with {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToElement `elementToElement()`}.\n *\n * For example, in order to convert a `<nested>` model element to `<div class=\"nested\">` in the view, you can define\n * such converters:\n *\n * ```ts\n * editor.conversion.for( 'editingDowncast' )\n * \t.elementToElement( {\n * \t\tmodel: 'nested',\n * \t\tview: ( modelItem, { writer } ) => {\n * \t\t\tconst div = writer.createEditableElement( 'div', { class: 'nested' } );\n *\n * \t\t\treturn toWidgetEditable( nested, writer, { label: 'label for editable' } );\n * \t\t}\n * \t} );\n *\n * editor.conversion.for( 'dataDowncast' )\n * \t.elementToElement( {\n * \t\tmodel: 'nested',\n * \t\tview: ( modelItem, { writer } ) => {\n * \t\t\treturn writer.createContainerElement( 'div', { class: 'nested' } );\n * \t\t}\n * \t} );\n * ```\n *\n * See the full source code of the widget (with nested editable) schema definition and converters in\n * [this sample](https://github.com/ckeditor/ckeditor5-widget/blob/master/tests/manual/widget-with-nestededitable.js).\n *\n * @param options Additional options.\n * @param options.label Editable's label used by assistive technologies (e.g. screen readers).\n * @returns Returns the same element that was provided in the `editable` parameter\n */\nexport function toWidgetEditable(editable, writer, options = {}) {\n    writer.addClass(['ck-editor__editable', 'ck-editor__nested-editable'], editable);\n    writer.setAttribute('role', 'textbox', editable);\n    writer.setAttribute('tabindex', '-1', editable);\n    if (options.label) {\n        writer.setAttribute('aria-label', options.label, editable);\n    }\n    // Set initial contenteditable value.\n    writer.setAttribute('contenteditable', editable.isReadOnly ? 'false' : 'true', editable);\n    // Bind the contenteditable property to element#isReadOnly.\n    editable.on('change:isReadOnly', (evt, property, is) => {\n        writer.setAttribute('contenteditable', is ? 'false' : 'true', editable);\n    });\n    editable.on('change:isFocused', (evt, property, is) => {\n        if (is) {\n            writer.addClass('ck-editor__nested-editable_focused', editable);\n        }\n        else {\n            writer.removeClass('ck-editor__nested-editable_focused', editable);\n        }\n    });\n    setHighlightHandling(editable, writer);\n    return editable;\n}\n/**\n * Returns a model range which is optimal (in terms of UX) for inserting a widget block.\n *\n * For instance, if a selection is in the middle of a paragraph, the collapsed range before this paragraph\n * will be returned so that it is not split. If the selection is at the end of a paragraph,\n * the collapsed range after this paragraph will be returned.\n *\n * Note: If the selection is placed in an empty block, the range in that block will be returned. If that range\n * is then passed to {@link module:engine/model/model~Model#insertContent}, the block will be fully replaced\n * by the inserted widget block.\n *\n * @param selection The selection based on which the insertion position should be calculated.\n * @param model Model instance.\n * @returns The optimal range.\n */\nexport function findOptimalInsertionRange(selection, model) {\n    const selectedElement = selection.getSelectedElement();\n    if (selectedElement) {\n        const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(selection);\n        // If the WidgetTypeAround \"fake caret\" is displayed, use its position for the insertion\n        // to provide the most predictable UX (https://github.com/ckeditor/ckeditor5/issues/7438).\n        if (typeAroundFakeCaretPosition) {\n            return model.createRange(model.createPositionAt(selectedElement, typeAroundFakeCaretPosition));\n        }\n    }\n    return model.schema.findOptimalInsertionRange(selection);\n}\n/**\n * A util to be used in order to map view positions to correct model positions when implementing a widget\n * which renders non-empty view element for an empty model element.\n *\n * For example:\n *\n * ```\n * // Model:\n * <placeholder type=\"name\"></placeholder>\n *\n * // View:\n * <span class=\"placeholder\">name</span>\n * ```\n *\n * In such case, view positions inside `<span>` cannot be correctly mapped to the model (because the model element is empty).\n * To handle mapping positions inside `<span class=\"placeholder\">` to the model use this util as follows:\n *\n * ```ts\n * editor.editing.mapper.on(\n * \t'viewToModelPosition',\n * \tviewToModelPositionOutsideModelElement( model, viewElement => viewElement.hasClass( 'placeholder' ) )\n * );\n * ```\n *\n * The callback will try to map the view offset of selection to an expected model position.\n *\n * 1. When the position is at the end (or in the middle) of the inline widget:\n *\n * ```\n * // View:\n * <p>foo <span class=\"placeholder\">name|</span> bar</p>\n *\n * // Model:\n * <paragraph>foo <placeholder type=\"name\"></placeholder>| bar</paragraph>\n * ```\n *\n * 2. When the position is at the beginning of the inline widget:\n *\n * ```\n * // View:\n * <p>foo <span class=\"placeholder\">|name</span> bar</p>\n *\n * // Model:\n * <paragraph>foo |<placeholder type=\"name\"></placeholder> bar</paragraph>\n * ```\n *\n * @param model Model instance on which the callback operates.\n * @param viewElementMatcher Function that is passed a view element and should return `true` if the custom mapping\n * should be applied to the given view element.\n */\nexport function viewToModelPositionOutsideModelElement(model, viewElementMatcher) {\n    return (evt, data) => {\n        const { mapper, viewPosition } = data;\n        const viewParent = mapper.findMappedViewAncestor(viewPosition);\n        if (!viewElementMatcher(viewParent)) {\n            return;\n        }\n        const modelParent = mapper.toModelElement(viewParent);\n        data.modelPosition = model.createPositionAt(modelParent, viewPosition.isAtStart ? 'before' : 'after');\n    };\n}\n/**\n * Default filler offset function applied to all widget elements.\n */\nfunction getFillerOffset() {\n    return null;\n}\n/**\n * Adds a drag handle to the widget.\n */\nfunction addSelectionHandle(widgetElement, writer) {\n    const selectionHandle = writer.createUIElement('div', { class: 'ck ck-widget__selection-handle' }, function (domDocument) {\n        const domElement = this.toDomElement(domDocument);\n        // Use the IconView from the ui library.\n        const icon = new IconView();\n        icon.set('content', dragHandleIcon);\n        // Render the icon view right away to append its #element to the selectionHandle DOM element.\n        icon.render();\n        domElement.appendChild(icon.element);\n        return domElement;\n    });\n    // Append the selection handle into the widget wrapper.\n    writer.insert(writer.createPositionAt(widgetElement, 0), selectionHandle);\n    writer.addClass(['ck-widget_with-selection-handle'], widgetElement);\n}\n/**\n * Starting from a DOM resize host element (an element that receives dimensions as a result of resizing),\n * this helper returns the width of the found ancestor element.\n *\n *\t* It searches up to 5 levels of ancestors only.\n *\n * @param domResizeHost Resize host DOM element that receives dimensions as a result of resizing.\n * @returns Width of ancestor element in pixels or 0 if no ancestor with a computed width has been found.\n */\nexport function calculateResizeHostAncestorWidth(domResizeHost) {\n    const getElementComputedWidth = (element) => {\n        const { width, paddingLeft, paddingRight } = element.ownerDocument.defaultView.getComputedStyle(element);\n        return parseFloat(width) - (parseFloat(paddingLeft) || 0) - (parseFloat(paddingRight) || 0);\n    };\n    const domResizeHostParent = domResizeHost.parentElement;\n    if (!domResizeHostParent) {\n        return 0;\n    }\n    // Need to use computed style as it properly excludes parent's paddings from the returned value.\n    let parentWidth = getElementComputedWidth(domResizeHostParent);\n    // Sometimes parent width cannot be accessed. If that happens we should go up in the elements tree\n    // and try to get width from next ancestor.\n    // https://github.com/ckeditor/ckeditor5/issues/10776\n    const ancestorLevelLimit = 5;\n    let currentLevel = 0;\n    let checkedElement = domResizeHostParent;\n    while (isNaN(parentWidth)) {\n        checkedElement = checkedElement.parentElement;\n        if (++currentLevel > ancestorLevelLimit) {\n            return 0;\n        }\n        parentWidth = getElementComputedWidth(checkedElement);\n    }\n    return parentWidth;\n}\n/**\n * Calculates a relative width of a `domResizeHost` compared to its ancestor in percents.\n *\n * @param domResizeHost Resize host DOM element.\n * @returns Percentage value between 0 and 100.\n */\nexport function calculateResizeHostPercentageWidth(domResizeHost, resizeHostRect = new Rect(domResizeHost)) {\n    const parentWidth = calculateResizeHostAncestorWidth(domResizeHost);\n    if (!parentWidth) {\n        return 0;\n    }\n    return resizeHostRect.width / parentWidth * 100;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/widgettypearound/utils\n */\nimport { isWidget } from '../utils.js';\n/**\n * The name of the type around model selection attribute responsible for\n * displaying a fake caret next to a selected widget.\n */\nexport const TYPE_AROUND_SELECTION_ATTRIBUTE = 'widget-type-around';\n/**\n * Checks if an element is a widget that qualifies to get the widget type around UI.\n */\nexport function isTypeAroundWidget(viewElement, modelElement, schema) {\n    return !!viewElement && isWidget(viewElement) && !schema.isInline(modelElement);\n}\n/**\n * For the passed HTML element, this helper finds the closest widget type around button ancestor.\n */\nexport function getClosestTypeAroundDomButton(domElement) {\n    return domElement.closest('.ck-widget__type-around__button');\n}\n/**\n * For the passed widget type around button element, this helper determines at which position\n * the paragraph would be inserted into the content if, for instance, the button was\n * clicked by the user.\n *\n * @returns The position of the button.\n */\nexport function getTypeAroundButtonPosition(domElement) {\n    return domElement.classList.contains('ck-widget__type-around__button_before') ? 'before' : 'after';\n}\n/**\n * For the passed HTML element, this helper returns the closest view widget ancestor.\n */\nexport function getClosestWidgetViewElement(domElement, domConverter) {\n    const widgetDomElement = domElement.closest('.ck-widget');\n    return domConverter.mapDomToView(widgetDomElement);\n}\n/**\n * For the passed selection instance, it returns the position of the fake caret displayed next to a widget.\n *\n * **Note**: If the fake caret is not currently displayed, `null` is returned.\n *\n * @returns The position of the fake caret or `null` when none is present.\n */\nexport function getTypeAroundFakeCaretPosition(selection) {\n    return selection.getAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n}\n", "export default \"<svg viewBox=\\\"0 0 10 8\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M9.055.263v3.972h-6.77M1 4.216l2-2.038m-2 2 2 2.038\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* global DOMParser */\n/**\n * @module widget/widgettypearound/widgettypearound\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { Template } from '@ckeditor/ckeditor5-ui';\nimport { Enter } from '@ckeditor/ckeditor5-enter';\nimport { Delete } from '@ckeditor/ckeditor5-typing';\nimport { env, isForwardArrowKeyCode } from '@ckeditor/ckeditor5-utils';\nimport { isTypeAroundWidget, getClosestTypeAroundDomButton, getTypeAroundButtonPosition, getClosestWidgetViewElement, getTypeAroundFakeCaretPosition, TYPE_AROUND_SELECTION_ATTRIBUTE } from './utils.js';\nimport { isWidget } from '../utils.js';\nimport returnIcon from '../../theme/icons/return-arrow.svg';\nimport '../../theme/widgettypearound.css';\nconst POSSIBLE_INSERTION_POSITIONS = ['before', 'after'];\n// Do the SVG parsing once and then clone the result <svg> DOM element for each new button.\nconst RETURN_ARROW_ICON_ELEMENT = new DOMParser().parseFromString(returnIcon, 'image/svg+xml').firstChild;\nconst PLUGIN_DISABLED_EDITING_ROOT_CLASS = 'ck-widget__type-around_disabled';\n/**\n * A plugin that allows users to type around widgets where normally it is impossible to place the caret due\n * to limitations of web browsers. These \"tight spots\" occur, for instance, before (or after) a widget being\n * the first (or last) child of its parent or between two block widgets.\n *\n * This plugin extends the {@link module:widget/widget~Widget `Widget`} plugin and injects the user interface\n * with two buttons into each widget instance in the editor. Each of the buttons can be clicked by the\n * user if the widget is next to the \"tight spot\". Once clicked, a paragraph is created with the selection anchored\n * in it so that users can type (or insert content, paste, etc.) straight away.\n */\nexport default class WidgetTypeAround extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * A reference to the model widget element that has the fake caret active\n         * on either side of it. It is later used to remove CSS classes associated with the fake caret\n         * when the widget no longer needs it.\n         */\n        this._currentFakeCaretModelElement = null;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'WidgetTypeAround';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [Enter, Delete];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        // Set a CSS class on the view editing root when the plugin is disabled so all the buttons\n        // and lines visually disappear. All the interactions are disabled in individual plugin methods.\n        this.on('change:isEnabled', (evt, data, isEnabled) => {\n            editingView.change(writer => {\n                for (const root of editingView.document.roots) {\n                    if (isEnabled) {\n                        writer.removeClass(PLUGIN_DISABLED_EDITING_ROOT_CLASS, root);\n                    }\n                    else {\n                        writer.addClass(PLUGIN_DISABLED_EDITING_ROOT_CLASS, root);\n                    }\n                }\n            });\n            if (!isEnabled) {\n                editor.model.change(writer => {\n                    writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n                });\n            }\n        });\n        this._enableTypeAroundUIInjection();\n        this._enableInsertingParagraphsOnButtonClick();\n        this._enableInsertingParagraphsOnEnterKeypress();\n        this._enableInsertingParagraphsOnTypingKeystroke();\n        this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows();\n        this._enableDeleteIntegration();\n        this._enableInsertContentIntegration();\n        this._enableInsertObjectIntegration();\n        this._enableDeleteContentIntegration();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this._currentFakeCaretModelElement = null;\n    }\n    /**\n     * Inserts a new paragraph next to a widget element with the selection anchored in it.\n     *\n     * **Note**: This method is heavily user-oriented and will both focus the editing view and scroll\n     * the viewport to the selection in the inserted paragraph.\n     *\n     * @param widgetModelElement The model widget element next to which a paragraph is inserted.\n     * @param position The position where the paragraph is inserted. Either `'before'` or `'after'` the widget.\n     */\n    _insertParagraph(widgetModelElement, position) {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        const attributesToCopy = editor.model.schema.getAttributesWithProperty(widgetModelElement, 'copyOnReplace', true);\n        editor.execute('insertParagraph', {\n            position: editor.model.createPositionAt(widgetModelElement, position),\n            attributes: attributesToCopy\n        });\n        editingView.focus();\n        editingView.scrollToTheSelection();\n    }\n    /**\n     * A wrapper for the {@link module:utils/emittermixin~Emitter#listenTo} method that executes the callbacks only\n     * when the plugin {@link #isEnabled is enabled}.\n     *\n     * @param emitter The object that fires the event.\n     * @param event The name of the event.\n     * @param callback The function to be called on event.\n     * @param options Additional options.\n     * @param options.priority The priority of this event callback. The higher the priority value the sooner\n     * the callback will be fired. Events having the same priority are called in the order they were added.\n     */\n    _listenToIfEnabled(emitter, event, callback, options) {\n        this.listenTo(emitter, event, (...args) => {\n            // Do not respond if the plugin is disabled.\n            if (this.isEnabled) {\n                callback(...args);\n            }\n        }, options);\n    }\n    /**\n     * Similar to {@link #_insertParagraph}, this method inserts a paragraph except that it\n     * does not expect a position. Instead, it performs the insertion next to a selected widget\n     * according to the `widget-type-around` model selection attribute value (fake caret position).\n     *\n     * Because this method requires the `widget-type-around` attribute to be set,\n     * the insertion can only happen when the widget's fake caret is active (e.g. activated\n     * using the keyboard).\n     *\n     * @returns Returns `true` when the paragraph was inserted (the attribute was present) and `false` otherwise.\n     */\n    _insertParagraphAccordingToFakeCaretPosition() {\n        const editor = this.editor;\n        const model = editor.model;\n        const modelSelection = model.document.selection;\n        const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(modelSelection);\n        if (!typeAroundFakeCaretPosition) {\n            return false;\n        }\n        // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n        // @if CK_DEBUG_TYPING // \tconsole.info( '%c[WidgetTypeAround]%c Fake caret -> insert paragraph',\n        // @if CK_DEBUG_TYPING // \t\t'font-weight: bold; color: green', ''\n        // @if CK_DEBUG_TYPING // \t);\n        // @if CK_DEBUG_TYPING // }\n        const selectedModelElement = modelSelection.getSelectedElement();\n        this._insertParagraph(selectedModelElement, typeAroundFakeCaretPosition);\n        return true;\n    }\n    /**\n     * Creates a listener in the editing conversion pipeline that injects the widget type around\n     * UI into every single widget instance created in the editor.\n     *\n     * The UI is delivered as a {@link module:engine/view/uielement~UIElement}\n     * wrapper which renders DOM buttons that users can use to insert paragraphs.\n     */\n    _enableTypeAroundUIInjection() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        const t = editor.locale.t;\n        const buttonTitles = {\n            before: t('Insert paragraph before block'),\n            after: t('Insert paragraph after block')\n        };\n        editor.editing.downcastDispatcher.on('insert', (evt, data, conversionApi) => {\n            const viewElement = conversionApi.mapper.toViewElement(data.item);\n            if (!viewElement) {\n                return;\n            }\n            // Filter out non-widgets and inline widgets.\n            if (isTypeAroundWidget(viewElement, data.item, schema)) {\n                injectUIIntoWidget(conversionApi.writer, buttonTitles, viewElement);\n                const widgetLabel = viewElement.getCustomProperty('widgetLabel');\n                widgetLabel.push(() => {\n                    return this.isEnabled ? t('Press Enter to type after or press Shift + Enter to type before the widget') : '';\n                });\n            }\n        }, { priority: 'low' });\n    }\n    /**\n     * Brings support for the fake caret that appears when either:\n     *\n     * * the selection moves to a widget from a position next to it using arrow keys,\n     * * the arrow key is pressed when the widget is already selected.\n     *\n     * The fake caret lets the user know that they can start typing or just press\n     * <kbd>Enter</kbd> to insert a paragraph at the position next to a widget as suggested by the fake caret.\n     *\n     * The fake caret disappears when the user changes the selection or the editor\n     * gets blurred.\n     *\n     * The whole idea is as follows:\n     *\n     * 1. A user does one of the 2 scenarios described at the beginning.\n     * 2. The \"keydown\" listener is executed and the decision is made whether to show or hide the fake caret.\n     * 3. If it should show up, the `widget-type-around` model selection attribute is set indicating\n     *    on which side of the widget it should appear.\n     * 4. The selection dispatcher reacts to the selection attribute and sets CSS classes responsible for the\n     *    fake caret on the view widget.\n     * 5. If the fake caret should disappear, the selection attribute is removed and the dispatcher\n     *    does the CSS class clean-up in the view.\n     * 6. Additionally, `change:range` and `FocusTracker#isFocused` listeners also remove the selection\n     *    attribute (the former also removes widget CSS classes).\n     */\n    _enableTypeAroundFakeCaretActivationUsingKeyboardArrows() {\n        const editor = this.editor;\n        const model = editor.model;\n        const modelSelection = model.document.selection;\n        const schema = model.schema;\n        const editingView = editor.editing.view;\n        // This is the main listener responsible for the fake caret.\n        // Note: The priority must precede the default Widget class keydown handler (\"high\").\n        this._listenToIfEnabled(editingView.document, 'arrowKey', (evt, domEventData) => {\n            this._handleArrowKeyPress(evt, domEventData);\n        }, { context: [isWidget, '$text'], priority: 'high' });\n        // This listener makes sure the widget type around selection attribute will be gone from the model\n        // selection as soon as the model range changes. This attribute only makes sense when a widget is selected\n        // (and the \"fake horizontal caret\" is visible) so whenever the range changes (e.g. selection moved somewhere else),\n        // let's get rid of the attribute so that the selection downcast dispatcher isn't even bothered.\n        this._listenToIfEnabled(modelSelection, 'change:range', (evt, data) => {\n            // Do not reset the selection attribute when the change was indirect.\n            if (!data.directChange) {\n                return;\n            }\n            // Get rid of the widget type around attribute of the selection on every change:range.\n            // If the range changes, it means for sure, the user is no longer in the active (\"fake horizontal caret\") mode.\n            editor.model.change(writer => {\n                writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n            });\n        });\n        // Get rid of the widget type around attribute of the selection on every document change\n        // that makes widget not selected any more (i.e. widget was removed).\n        this._listenToIfEnabled(model.document, 'change:data', () => {\n            const selectedModelElement = modelSelection.getSelectedElement();\n            if (selectedModelElement) {\n                const selectedViewElement = editor.editing.mapper.toViewElement(selectedModelElement);\n                if (isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n                    return;\n                }\n            }\n            editor.model.change(writer => {\n                writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n            });\n        });\n        // React to changes of the model selection attribute made by the arrow keys listener.\n        // If the block widget is selected and the attribute changes, downcast the attribute to special\n        // CSS classes associated with the active (\"fake horizontal caret\") mode of the widget.\n        this._listenToIfEnabled(editor.editing.downcastDispatcher, 'selection', (evt, data, conversionApi) => {\n            const writer = conversionApi.writer;\n            if (this._currentFakeCaretModelElement) {\n                const selectedViewElement = conversionApi.mapper.toViewElement(this._currentFakeCaretModelElement);\n                if (selectedViewElement) {\n                    // Get rid of CSS classes associated with the active (\"fake horizontal caret\") mode from the view widget.\n                    writer.removeClass(POSSIBLE_INSERTION_POSITIONS.map(positionToWidgetCssClass), selectedViewElement);\n                    this._currentFakeCaretModelElement = null;\n                }\n            }\n            const selectedModelElement = data.selection.getSelectedElement();\n            if (!selectedModelElement) {\n                return;\n            }\n            const selectedViewElement = conversionApi.mapper.toViewElement(selectedModelElement);\n            if (!isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n                return;\n            }\n            const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(data.selection);\n            if (!typeAroundFakeCaretPosition) {\n                return;\n            }\n            writer.addClass(positionToWidgetCssClass(typeAroundFakeCaretPosition), selectedViewElement);\n            // Remember the view widget that got the \"fake-caret\" CSS class. This class should be removed ASAP when the\n            // selection changes\n            this._currentFakeCaretModelElement = selectedModelElement;\n        });\n        this._listenToIfEnabled(editor.ui.focusTracker, 'change:isFocused', (evt, name, isFocused) => {\n            if (!isFocused) {\n                editor.model.change(writer => {\n                    writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n                });\n            }\n        });\n        function positionToWidgetCssClass(position) {\n            return `ck-widget_type-around_show-fake-caret_${position}`;\n        }\n    }\n    /**\n     * A listener executed on each \"keydown\" in the view document, a part of\n     * {@link #_enableTypeAroundFakeCaretActivationUsingKeyboardArrows}.\n     *\n     * It decides whether the arrow keypress should activate the fake caret or not (also whether it should\n     * be deactivated).\n     *\n     * The fake caret activation is done by setting the `widget-type-around` model selection attribute\n     * in this listener, and stopping and preventing the event that would normally be handled by the widget\n     * plugin that is responsible for the regular keyboard navigation near/across all widgets (that\n     * includes inline widgets, which are ignored by the widget type around plugin).\n     */\n    _handleArrowKeyPress(evt, domEventData) {\n        const editor = this.editor;\n        const model = editor.model;\n        const modelSelection = model.document.selection;\n        const schema = model.schema;\n        const editingView = editor.editing.view;\n        const keyCode = domEventData.keyCode;\n        const isForward = isForwardArrowKeyCode(keyCode, editor.locale.contentLanguageDirection);\n        const selectedViewElement = editingView.document.selection.getSelectedElement();\n        const selectedModelElement = editor.editing.mapper.toModelElement(selectedViewElement);\n        let shouldStopAndPreventDefault;\n        // Handle keyboard navigation when a type-around-compatible widget is currently selected.\n        if (isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n            shouldStopAndPreventDefault = this._handleArrowKeyPressOnSelectedWidget(isForward);\n        }\n        // Handle keyboard arrow navigation when the selection is next to a type-around-compatible widget\n        // and the widget is about to be selected.\n        else if (modelSelection.isCollapsed) {\n            shouldStopAndPreventDefault = this._handleArrowKeyPressWhenSelectionNextToAWidget(isForward);\n        }\n        // Handle collapsing a non-collapsed selection that is wider than on a single widget.\n        else if (!domEventData.shiftKey) {\n            shouldStopAndPreventDefault = this._handleArrowKeyPressWhenNonCollapsedSelection(isForward);\n        }\n        if (shouldStopAndPreventDefault) {\n            domEventData.preventDefault();\n            evt.stop();\n        }\n    }\n    /**\n     * Handles the keyboard navigation on \"keydown\" when a widget is currently selected and activates or deactivates\n     * the fake caret for that widget, depending on the current value of the `widget-type-around` model\n     * selection attribute and the direction of the pressed arrow key.\n     *\n     * @param isForward `true` when the pressed arrow key was responsible for the forward model selection movement\n     * as in {@link module:utils/keyboard~isForwardArrowKeyCode}.\n     * @returns Returns `true` when the keypress was handled and no other keydown listener of the editor should\n     * process the event any further. Returns `false` otherwise.\n     */\n    _handleArrowKeyPressOnSelectedWidget(isForward) {\n        const editor = this.editor;\n        const model = editor.model;\n        const modelSelection = model.document.selection;\n        const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(modelSelection);\n        return model.change(writer => {\n            // If the fake caret is displayed...\n            if (typeAroundFakeCaretPosition) {\n                const isLeavingWidget = typeAroundFakeCaretPosition === (isForward ? 'after' : 'before');\n                // If the keyboard arrow works against the value of the selection attribute...\n                // then remove the selection attribute but prevent default DOM actions\n                // and do not let the Widget plugin listener move the selection. This brings\n                // the widget back to the state, for instance, like if was selected using the mouse.\n                //\n                // **Note**: If leaving the widget when the fake caret is active, then the default\n                // Widget handler will change the selection and, in turn, this will automatically discard\n                // the selection attribute.\n                if (!isLeavingWidget) {\n                    writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n                    return true;\n                }\n            }\n            // If the fake caret wasn't displayed, let's set it now according to the direction of the arrow\n            // key press. This also means we cannot let the Widget plugin listener move the selection.\n            else {\n                writer.setSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE, isForward ? 'after' : 'before');\n                return true;\n            }\n            return false;\n        });\n    }\n    /**\n     * Handles the keyboard navigation on \"keydown\" when **no** widget is selected but the selection is **directly** next\n     * to one and upon the fake caret should become active for this widget upon arrow keypress\n     * (AKA entering/selecting the widget).\n     *\n     * **Note**: This code mirrors the implementation from the widget plugin but also adds the selection attribute.\n     * Unfortunately, there is no safe way to let the widget plugin do the selection part first and then just set the\n     * selection attribute here in the widget type around plugin. This is why this code must duplicate some from the widget plugin.\n     *\n     * @param isForward `true` when the pressed arrow key was responsible for the forward model selection movement\n     * as in {@link module:utils/keyboard~isForwardArrowKeyCode}.\n     * @returns Returns `true` when the keypress was handled and no other keydown listener of the editor should\n     * process the event any further. Returns `false` otherwise.\n     */\n    _handleArrowKeyPressWhenSelectionNextToAWidget(isForward) {\n        const editor = this.editor;\n        const model = editor.model;\n        const schema = model.schema;\n        const widgetPlugin = editor.plugins.get('Widget');\n        // This is the widget the selection is about to be set on.\n        const modelElementNextToSelection = widgetPlugin._getObjectElementNextToSelection(isForward);\n        const viewElementNextToSelection = editor.editing.mapper.toViewElement(modelElementNextToSelection);\n        if (isTypeAroundWidget(viewElementNextToSelection, modelElementNextToSelection, schema)) {\n            model.change(writer => {\n                widgetPlugin._setSelectionOverElement(modelElementNextToSelection);\n                writer.setSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE, isForward ? 'before' : 'after');\n            });\n            // The change() block above does the same job as the Widget plugin. The event can\n            // be safely canceled.\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Handles the keyboard navigation on \"keydown\" when a widget is currently selected (together with some other content)\n     * and the widget is the first or last element in the selection. It activates or deactivates the fake caret for that widget.\n     *\n     * @param isForward `true` when the pressed arrow key was responsible for the forward model selection movement\n     * as in {@link module:utils/keyboard~isForwardArrowKeyCode}.\n     * @returns Returns `true` when the keypress was handled and no other keydown listener of the editor should\n     * process the event any further. Returns `false` otherwise.\n     */\n    _handleArrowKeyPressWhenNonCollapsedSelection(isForward) {\n        const editor = this.editor;\n        const model = editor.model;\n        const schema = model.schema;\n        const mapper = editor.editing.mapper;\n        const modelSelection = model.document.selection;\n        const selectedModelNode = isForward ?\n            modelSelection.getLastPosition().nodeBefore :\n            modelSelection.getFirstPosition().nodeAfter;\n        const selectedViewNode = mapper.toViewElement(selectedModelNode);\n        // There is a widget at the collapse position so collapse the selection to the fake caret on it.\n        if (isTypeAroundWidget(selectedViewNode, selectedModelNode, schema)) {\n            model.change(writer => {\n                writer.setSelection(selectedModelNode, 'on');\n                writer.setSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE, isForward ? 'after' : 'before');\n            });\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Registers a `mousedown` listener for the view document which intercepts events\n     * coming from the widget type around UI, which happens when a user clicks one of the buttons\n     * that insert a paragraph next to a widget.\n     */\n    _enableInsertingParagraphsOnButtonClick() {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        this._listenToIfEnabled(editingView.document, 'mousedown', (evt, domEventData) => {\n            const button = getClosestTypeAroundDomButton(domEventData.domTarget);\n            if (!button) {\n                return;\n            }\n            const buttonPosition = getTypeAroundButtonPosition(button);\n            const widgetViewElement = getClosestWidgetViewElement(button, editingView.domConverter);\n            const widgetModelElement = editor.editing.mapper.toModelElement(widgetViewElement);\n            this._insertParagraph(widgetModelElement, buttonPosition);\n            domEventData.preventDefault();\n            evt.stop();\n        });\n    }\n    /**\n     * Creates the <kbd>Enter</kbd> key listener on the view document that allows the user to insert a paragraph\n     * near the widget when either:\n     *\n     * * The fake caret was first activated using the arrow keys,\n     * * The entire widget is selected in the model.\n     *\n     * In the first case, the new paragraph is inserted according to the `widget-type-around` selection\n     * attribute (see {@link #_handleArrowKeyPress}).\n     *\n     * In the second case, the new paragraph is inserted based on whether a soft (<kbd>Shift</kbd>+<kbd>Enter</kbd>) keystroke\n     * was pressed or not.\n     */\n    _enableInsertingParagraphsOnEnterKeypress() {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        const editingView = editor.editing.view;\n        this._listenToIfEnabled(editingView.document, 'enter', (evt, domEventData) => {\n            // This event could be triggered from inside the widget but we are interested\n            // only when the widget is selected itself.\n            if (evt.eventPhase != 'atTarget') {\n                return;\n            }\n            const selectedModelElement = selection.getSelectedElement();\n            const selectedViewElement = editor.editing.mapper.toViewElement(selectedModelElement);\n            const schema = editor.model.schema;\n            let wasHandled;\n            // First check if the widget is selected and there's a type around selection attribute associated\n            // with the fake caret that would tell where to insert a new paragraph.\n            if (this._insertParagraphAccordingToFakeCaretPosition()) {\n                wasHandled = true;\n            }\n            // Then, if there is no selection attribute associated with the fake caret, check if the widget\n            // simply is selected and create a new paragraph according to the keystroke (Shift+)Enter.\n            else if (isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n                this._insertParagraph(selectedModelElement, domEventData.isSoft ? 'before' : 'after');\n                wasHandled = true;\n            }\n            if (wasHandled) {\n                domEventData.preventDefault();\n                evt.stop();\n            }\n        }, { context: isWidget });\n    }\n    /**\n     * Similar to the {@link #_enableInsertingParagraphsOnEnterKeypress}, it allows the user\n     * to insert a paragraph next to a widget when the fake caret was activated using arrow\n     * keys but it responds to typing instead of <kbd>Enter</kbd>.\n     *\n     * Listener enabled by this method will insert a new paragraph according to the `widget-type-around`\n     * model selection attribute as the user simply starts typing, which creates the impression that the fake caret\n     * behaves like a real one rendered by the browser (AKA your text appears where the caret was).\n     *\n     * **Note**: At the moment this listener creates 2 undo steps: one for the `insertParagraph` command\n     * and another one for actual typing. It is not a disaster but this may need to be fixed\n     * sooner or later.\n     */\n    _enableInsertingParagraphsOnTypingKeystroke() {\n        const editor = this.editor;\n        const viewDocument = editor.editing.view.document;\n        // Note: The priority must precede the default Input plugin insertText handler.\n        this._listenToIfEnabled(viewDocument, 'insertText', (evt, data) => {\n            if (this._insertParagraphAccordingToFakeCaretPosition()) {\n                // The view selection in the event data contains the widget. If the new paragraph\n                // was inserted, modify the view selection passed along with the insertText event\n                // so the default event handler in the Input plugin starts typing inside the paragraph.\n                // Otherwise, the typing would be over the widget.\n                data.selection = viewDocument.selection;\n            }\n        }, { priority: 'high' });\n        if (env.isAndroid) {\n            // On Android with English keyboard, the composition starts just by putting caret\n            // at the word end or by selecting a table column. This is not a real composition started.\n            // Trigger delete content on first composition key pressed.\n            this._listenToIfEnabled(viewDocument, 'keydown', (evt, data) => {\n                if (data.keyCode == 229) {\n                    this._insertParagraphAccordingToFakeCaretPosition();\n                }\n            });\n        }\n        else {\n            // Note: The priority must precede the default Input plugin compositionstart handler (to call it before delete content).\n            this._listenToIfEnabled(viewDocument, 'compositionstart', () => {\n                this._insertParagraphAccordingToFakeCaretPosition();\n            }, { priority: 'high' });\n        }\n    }\n    /**\n     * It creates a \"delete\" event listener on the view document to handle cases when the <kbd>Delete</kbd> or <kbd>Backspace</kbd>\n     * is pressed and the fake caret is currently active.\n     *\n     * The fake caret should create an illusion of a real browser caret so that when it appears before or after\n     * a widget, pressing <kbd>Delete</kbd> or <kbd>Backspace</kbd> should remove a widget or delete the content\n     * before or after a widget (depending on the content surrounding the widget).\n     */\n    _enableDeleteIntegration() {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        const model = editor.model;\n        const schema = model.schema;\n        this._listenToIfEnabled(editingView.document, 'delete', (evt, domEventData) => {\n            // This event could be triggered from inside the widget but we are interested\n            // only when the widget is selected itself.\n            if (evt.eventPhase != 'atTarget') {\n                return;\n            }\n            const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(model.document.selection);\n            // This listener handles only these cases when the fake caret is active.\n            if (!typeAroundFakeCaretPosition) {\n                return;\n            }\n            const direction = domEventData.direction;\n            const selectedModelWidget = model.document.selection.getSelectedElement();\n            const isFakeCaretBefore = typeAroundFakeCaretPosition === 'before';\n            const isDeleteForward = direction == 'forward';\n            const shouldDeleteEntireWidget = isFakeCaretBefore === isDeleteForward;\n            if (shouldDeleteEntireWidget) {\n                editor.execute('delete', {\n                    selection: model.createSelection(selectedModelWidget, 'on')\n                });\n            }\n            else {\n                const range = schema.getNearestSelectionRange(model.createPositionAt(selectedModelWidget, typeAroundFakeCaretPosition), direction);\n                // If there is somewhere to move selection to, then there will be something to delete.\n                if (range) {\n                    // If the range is NOT collapsed, then we know that the range contains an object (see getNearestSelectionRange() docs).\n                    if (!range.isCollapsed) {\n                        model.change(writer => {\n                            writer.setSelection(range);\n                            editor.execute(isDeleteForward ? 'deleteForward' : 'delete');\n                        });\n                    }\n                    else {\n                        const probe = model.createSelection(range.start);\n                        model.modifySelection(probe, { direction });\n                        // If the range is collapsed, let's see if a non-collapsed range exists that can could be deleted.\n                        // If such range exists, use the editor command because it it safe for collaboration (it merges where it can).\n                        if (!probe.focus.isEqual(range.start)) {\n                            model.change(writer => {\n                                writer.setSelection(range);\n                                editor.execute(isDeleteForward ? 'deleteForward' : 'delete');\n                            });\n                        }\n                        // If there is no non-collapsed range to be deleted then we are sure that there is an empty element\n                        // next to a widget that should be removed. \"delete\" and \"deleteForward\" commands cannot get rid of it\n                        // so calling Model#deleteContent here manually.\n                        else {\n                            const deepestEmptyRangeAncestor = getDeepestEmptyElementAncestor(schema, range.start.parent);\n                            model.deleteContent(model.createSelection(deepestEmptyRangeAncestor, 'on'), {\n                                doNotAutoparagraph: true\n                            });\n                        }\n                    }\n                }\n            }\n            // If some content was deleted, don't let the handler from the Widget plugin kick in.\n            // If nothing was deleted, then the default handler will have nothing to do anyway.\n            domEventData.preventDefault();\n            evt.stop();\n        }, { context: isWidget });\n    }\n    /**\n     * Attaches the {@link module:engine/model/model~Model#event:insertContent} event listener that, for instance, allows the user to paste\n     * content near a widget when the fake caret is first activated using the arrow keys.\n     *\n     * The content is inserted according to the `widget-type-around` selection attribute (see {@link #_handleArrowKeyPress}).\n     */\n    _enableInsertContentIntegration() {\n        const editor = this.editor;\n        const model = this.editor.model;\n        const documentSelection = model.document.selection;\n        this._listenToIfEnabled(editor.model, 'insertContent', (evt, [content, selectable]) => {\n            if (selectable && !selectable.is('documentSelection')) {\n                return;\n            }\n            const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(documentSelection);\n            if (!typeAroundFakeCaretPosition) {\n                return;\n            }\n            evt.stop();\n            return model.change(writer => {\n                const selectedElement = documentSelection.getSelectedElement();\n                const position = model.createPositionAt(selectedElement, typeAroundFakeCaretPosition);\n                const selection = writer.createSelection(position);\n                const result = model.insertContent(content, selection);\n                writer.setSelection(selection);\n                return result;\n            });\n        }, { priority: 'high' });\n    }\n    /**\n     * Attaches the {@link module:engine/model/model~Model#event:insertObject} event listener that modifies the\n     * `options.findOptimalPosition`parameter to position of fake caret in relation to selected element\n     * to reflect user's intent of desired insertion position.\n     *\n     * The object is inserted according to the `widget-type-around` selection attribute (see {@link #_handleArrowKeyPress}).\n     */\n    _enableInsertObjectIntegration() {\n        const editor = this.editor;\n        const model = this.editor.model;\n        const documentSelection = model.document.selection;\n        this._listenToIfEnabled(editor.model, 'insertObject', (evt, args) => {\n            const [, selectable, options = {}] = args;\n            if (selectable && !selectable.is('documentSelection')) {\n                return;\n            }\n            const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(documentSelection);\n            if (!typeAroundFakeCaretPosition) {\n                return;\n            }\n            options.findOptimalPosition = typeAroundFakeCaretPosition;\n            args[3] = options;\n        }, { priority: 'high' });\n    }\n    /**\n     * Attaches the {@link module:engine/model/model~Model#event:deleteContent} event listener to block the event when the fake\n     * caret is active.\n     *\n     * This is required for cases that trigger {@link module:engine/model/model~Model#deleteContent `model.deleteContent()`}\n     * before calling {@link module:engine/model/model~Model#insertContent `model.insertContent()`} like, for instance,\n     * plain text pasting.\n     */\n    _enableDeleteContentIntegration() {\n        const editor = this.editor;\n        const model = this.editor.model;\n        const documentSelection = model.document.selection;\n        this._listenToIfEnabled(editor.model, 'deleteContent', (evt, [selection]) => {\n            if (selection && !selection.is('documentSelection')) {\n                return;\n            }\n            const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(documentSelection);\n            // Disable removing the selection content while pasting plain text.\n            if (typeAroundFakeCaretPosition) {\n                evt.stop();\n            }\n        }, { priority: 'high' });\n    }\n}\n/**\n * Injects the type around UI into a view widget instance.\n */\nfunction injectUIIntoWidget(viewWriter, buttonTitles, widgetViewElement) {\n    const typeAroundWrapper = viewWriter.createUIElement('div', {\n        class: 'ck ck-reset_all ck-widget__type-around'\n    }, function (domDocument) {\n        const wrapperDomElement = this.toDomElement(domDocument);\n        injectButtons(wrapperDomElement, buttonTitles);\n        injectFakeCaret(wrapperDomElement);\n        return wrapperDomElement;\n    });\n    // Inject the type around wrapper into the widget's wrapper.\n    viewWriter.insert(viewWriter.createPositionAt(widgetViewElement, 'end'), typeAroundWrapper);\n}\n/**\n * FYI: Not using the IconView class because each instance would need to be destroyed to avoid memory leaks\n * and it's pretty hard to figure out when a view (widget) is gone for good so it's cheaper to use raw\n * <svg> here.\n */\nfunction injectButtons(wrapperDomElement, buttonTitles) {\n    for (const position of POSSIBLE_INSERTION_POSITIONS) {\n        const buttonTemplate = new Template({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-widget__type-around__button',\n                    `ck-widget__type-around__button_${position}`\n                ],\n                title: buttonTitles[position],\n                'aria-hidden': 'true'\n            },\n            children: [\n                wrapperDomElement.ownerDocument.importNode(RETURN_ARROW_ICON_ELEMENT, true)\n            ]\n        });\n        wrapperDomElement.appendChild(buttonTemplate.render());\n    }\n}\nfunction injectFakeCaret(wrapperDomElement) {\n    const caretTemplate = new Template({\n        tag: 'div',\n        attributes: {\n            class: [\n                'ck',\n                'ck-widget__type-around__fake-caret'\n            ]\n        }\n    });\n    wrapperDomElement.appendChild(caretTemplate.render());\n}\n/**\n * Returns the ancestor of an element closest to the root which is empty. For instance,\n * for `<baz>`:\n *\n * ```\n * <foo>abc<bar><baz></baz></bar></foo>\n * ```\n *\n * it returns `<bar>`.\n */\nfunction getDeepestEmptyElementAncestor(schema, element) {\n    let deepestEmptyAncestor = element;\n    for (const ancestor of element.getAncestors({ parentFirst: true })) {\n        if (ancestor.childCount > 1 || schema.isLimit(ancestor)) {\n            break;\n        }\n        deepestEmptyAncestor = ancestor;\n    }\n    return deepestEmptyAncestor;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/verticalnavigation\n */\nimport { keyCodes, Rect } from '@ckeditor/ckeditor5-utils';\n/**\n * Returns 'keydown' handler for up/down arrow keys that modifies the caret movement if it's in a text line next to an object.\n *\n * @param editing The editing controller.\n */\nexport default function verticalNavigationHandler(editing) {\n    const model = editing.model;\n    return (evt, data) => {\n        const arrowUpPressed = data.keyCode == keyCodes.arrowup;\n        const arrowDownPressed = data.keyCode == keyCodes.arrowdown;\n        const expandSelection = data.shiftKey;\n        const selection = model.document.selection;\n        if (!arrowUpPressed && !arrowDownPressed) {\n            return;\n        }\n        const isForward = arrowDownPressed;\n        // Navigation is in the opposite direction than the selection direction so this is shrinking of the selection.\n        // Selection for sure will not approach any object.\n        if (expandSelection && selectionWillShrink(selection, isForward)) {\n            return;\n        }\n        // Find a range between selection and closest limit element.\n        const range = findTextRangeFromSelection(editing, selection, isForward);\n        // There is no selection position inside the limit element.\n        if (!range) {\n            return;\n        }\n        // If already at the edge of a limit element.\n        if (range.isCollapsed) {\n            // A collapsed selection at limit edge - nothing more to do.\n            if (selection.isCollapsed) {\n                return;\n            }\n            // A non collapsed selection is at the limit edge while expanding the selection - let others do their stuff.\n            else if (expandSelection) {\n                return;\n            }\n        }\n        // If the range is a single line (there is no word wrapping) then move the selection to the position closest to the limit element.\n        //\n        // We can't move the selection directly to the isObject element (eg. table cell) because of dual position at the end/beginning\n        // of wrapped line (it's at the same time at the end of one line and at the start of the next line).\n        if (range.isCollapsed || isSingleLineRange(editing, range, isForward)) {\n            model.change(writer => {\n                const newPosition = isForward ? range.end : range.start;\n                if (expandSelection) {\n                    const newSelection = model.createSelection(selection.anchor);\n                    newSelection.setFocus(newPosition);\n                    writer.setSelection(newSelection);\n                }\n                else {\n                    writer.setSelection(newPosition);\n                }\n            });\n            evt.stop();\n            data.preventDefault();\n            data.stopPropagation();\n        }\n    };\n}\n/**\n * Finds the range between selection and closest limit element (in the direction of navigation).\n * The position next to limit element is adjusted to the closest allowed `$text` position.\n *\n * Returns `null` if, according to the schema, the resulting range cannot contain a `$text` element.\n *\n * @param editing The editing controller.\n * @param selection The current selection.\n * @param isForward The expected navigation direction.\n */\nfunction findTextRangeFromSelection(editing, selection, isForward) {\n    const model = editing.model;\n    if (isForward) {\n        const startPosition = selection.isCollapsed ? selection.focus : selection.getLastPosition();\n        const endPosition = getNearestNonInlineLimit(model, startPosition, 'forward');\n        // There is no limit element, browser should handle this.\n        if (!endPosition) {\n            return null;\n        }\n        const range = model.createRange(startPosition, endPosition);\n        const lastRangePosition = getNearestTextPosition(model.schema, range, 'backward');\n        if (lastRangePosition) {\n            return model.createRange(startPosition, lastRangePosition);\n        }\n        return null;\n    }\n    else {\n        const endPosition = selection.isCollapsed ? selection.focus : selection.getFirstPosition();\n        const startPosition = getNearestNonInlineLimit(model, endPosition, 'backward');\n        // There is no limit element, browser should handle this.\n        if (!startPosition) {\n            return null;\n        }\n        const range = model.createRange(startPosition, endPosition);\n        const firstRangePosition = getNearestTextPosition(model.schema, range, 'forward');\n        if (firstRangePosition) {\n            return model.createRange(firstRangePosition, endPosition);\n        }\n        return null;\n    }\n}\n/**\n * Finds the limit element position that is closest to startPosition.\n *\n * @param direction Search direction.\n */\nfunction getNearestNonInlineLimit(model, startPosition, direction) {\n    const schema = model.schema;\n    const range = model.createRangeIn(startPosition.root);\n    const walkerValueType = direction == 'forward' ? 'elementStart' : 'elementEnd';\n    for (const { previousPosition, item, type } of range.getWalker({ startPosition, direction })) {\n        if (schema.isLimit(item) && !schema.isInline(item)) {\n            return previousPosition;\n        }\n        // Stop looking for isLimit element if the next element is a block element (it is for sure not single line).\n        if (type == walkerValueType && schema.isBlock(item)) {\n            return null;\n        }\n    }\n    return null;\n}\n/**\n * Basing on the provided range, finds the first or last (depending on `direction`) position inside the range\n * that can contain `$text` (according to schema).\n *\n * @param schema The schema.\n * @param range The range to find the position in.\n * @param direction Search direction.\n * @returns The nearest selection position.\n *\n */\nfunction getNearestTextPosition(schema, range, direction) {\n    const position = direction == 'backward' ? range.end : range.start;\n    if (schema.checkChild(position, '$text')) {\n        return position;\n    }\n    for (const { nextPosition } of range.getWalker({ direction })) {\n        if (schema.checkChild(nextPosition, '$text')) {\n            return nextPosition;\n        }\n    }\n    return null;\n}\n/**\n * Checks if the DOM range corresponding to the provided model range renders as a single line by analyzing DOMRects\n * (verifying if they visually wrap content to the next line).\n *\n * @param editing The editing controller.\n * @param modelRange The current table cell content range.\n * @param isForward The expected navigation direction.\n */\nfunction isSingleLineRange(editing, modelRange, isForward) {\n    const model = editing.model;\n    const domConverter = editing.view.domConverter;\n    // Wrapped lines contain exactly the same position at the end of current line\n    // and at the beginning of next line. That position's client rect is at the end\n    // of current line. In case of caret at first position of the last line that 'dual'\n    // position would be detected as it's not the last line.\n    if (isForward) {\n        const probe = model.createSelection(modelRange.start);\n        model.modifySelection(probe);\n        // If the new position is at the end of the container then we can't use this position\n        // because it would provide incorrect result for eg caption of image and selection\n        // just before end of it. Also in this case there is no \"dual\" position.\n        if (!probe.focus.isAtEnd && !modelRange.start.isEqual(probe.focus)) {\n            modelRange = model.createRange(probe.focus, modelRange.end);\n        }\n    }\n    const viewRange = editing.mapper.toViewRange(modelRange);\n    const domRange = domConverter.viewRangeToDom(viewRange);\n    const rects = Rect.getDomRangeRects(domRange);\n    let boundaryVerticalPosition;\n    for (const rect of rects) {\n        if (boundaryVerticalPosition === undefined) {\n            boundaryVerticalPosition = Math.round(rect.bottom);\n            continue;\n        }\n        // Let's check if this rect is in new line.\n        if (Math.round(rect.top) >= boundaryVerticalPosition) {\n            return false;\n        }\n        boundaryVerticalPosition = Math.max(boundaryVerticalPosition, Math.round(rect.bottom));\n    }\n    return true;\n}\nfunction selectionWillShrink(selection, isForward) {\n    return !selection.isCollapsed && selection.isBackward == isForward;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/widget\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { MouseObserver, TreeWalker } from '@ckeditor/ckeditor5-engine';\nimport { Delete } from '@ckeditor/ckeditor5-typing';\nimport { env, keyCodes, getLocalizedArrowKeyCodeDirection, getRangeFromMouseEvent } from '@ckeditor/ckeditor5-utils';\nimport WidgetTypeAround from './widgettypearound/widgettypearound.js';\nimport verticalNavigationHandler from './verticalnavigation.js';\nimport { getLabel, isWidget, WIDGET_SELECTED_CLASS_NAME } from './utils.js';\nimport '../theme/widget.css';\n/**\n * The widget plugin. It enables base support for widgets.\n *\n * See {@glink api/widget package page} for more details and documentation.\n *\n * This plugin enables multiple behaviors required by widgets:\n *\n * * The model to view selection converter for the editing pipeline (it handles widget custom selection rendering).\n * If a converted selection wraps around a widget element, that selection is marked as\n * {@link module:engine/view/selection~Selection#isFake fake}. Additionally, the `ck-widget_selected` CSS class\n * is added to indicate that widget has been selected.\n * * The mouse and keyboard events handling on and around widget elements.\n */\nexport default class Widget extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * Holds previously selected widgets.\n         */\n        this._previouslySelected = new Set();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Widget';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [WidgetTypeAround, Delete];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const t = editor.t;\n        // Model to view selection converter.\n        // Converts selection placed over widget element to fake selection.\n        //\n        // By default, the selection is downcasted by the engine to surround the attribute element, even though its only\n        // child is an inline widget. A similar thing also happens when a collapsed marker is rendered as a UI element\n        // next to an inline widget: the view selection contains both the widget and the marker.\n        //\n        // This prevents creating a correct fake selection when this inline widget is selected. Normalize the selection\n        // in these cases based on the model:\n        //\n        //\t\t[<attributeElement><inlineWidget /></attributeElement>] -> <attributeElement>[<inlineWidget />]</attributeElement>\n        //\t\t[<uiElement></uiElement><inlineWidget />] -> <uiElement></uiElement>[<inlineWidget />]\n        //\n        // Thanks to this:\n        //\n        // * fake selection can be set correctly,\n        // * any logic depending on (View)Selection#getSelectedElement() also works OK.\n        //\n        // See https://github.com/ckeditor/ckeditor5/issues/9524.\n        this.editor.editing.downcastDispatcher.on('selection', (evt, data, conversionApi) => {\n            const viewWriter = conversionApi.writer;\n            const modelSelection = data.selection;\n            // The collapsed selection can't contain any widget.\n            if (modelSelection.isCollapsed) {\n                return;\n            }\n            const selectedModelElement = modelSelection.getSelectedElement();\n            if (!selectedModelElement) {\n                return;\n            }\n            const selectedViewElement = editor.editing.mapper.toViewElement(selectedModelElement);\n            if (!isWidget(selectedViewElement)) {\n                return;\n            }\n            if (!conversionApi.consumable.consume(modelSelection, 'selection')) {\n                return;\n            }\n            viewWriter.setSelection(viewWriter.createRangeOn(selectedViewElement), {\n                fake: true,\n                label: getLabel(selectedViewElement)\n            });\n        });\n        // Mark all widgets inside the selection with the css class.\n        // This handler is registered at the 'low' priority so it's triggered after the real selection conversion.\n        this.editor.editing.downcastDispatcher.on('selection', (evt, data, conversionApi) => {\n            // Remove selected class from previously selected widgets.\n            this._clearPreviouslySelectedWidgets(conversionApi.writer);\n            const viewWriter = conversionApi.writer;\n            const viewSelection = viewWriter.document.selection;\n            let lastMarked = null;\n            for (const range of viewSelection.getRanges()) {\n                // Note: There could be multiple selected widgets in a range but no fake selection.\n                // All of them must be marked as selected, for instance [<widget></widget><widget></widget>]\n                for (const value of range) {\n                    const node = value.item;\n                    // Do not mark nested widgets in selected one. See: #4594\n                    if (isWidget(node) && !isChild(node, lastMarked)) {\n                        viewWriter.addClass(WIDGET_SELECTED_CLASS_NAME, node);\n                        this._previouslySelected.add(node);\n                        lastMarked = node;\n                    }\n                }\n            }\n        }, { priority: 'low' });\n        // If mouse down is pressed on widget - create selection over whole widget.\n        view.addObserver(MouseObserver);\n        this.listenTo(viewDocument, 'mousedown', (...args) => this._onMousedown(...args));\n        // There are two keydown listeners working on different priorities. This allows other\n        // features such as WidgetTypeAround or TableKeyboard to attach their listeners in between\n        // and customize the behavior even further in different content/selection scenarios.\n        //\n        // * The first listener handles changing the selection on arrow key press\n        // if the widget is selected or if the selection is next to a widget and the widget\n        // should become selected upon the arrow key press.\n        //\n        // * The second (late) listener makes sure the default browser action on arrow key press is\n        // prevented when a widget is selected. This prevents the selection from being moved\n        // from a fake selection container.\n        this.listenTo(viewDocument, 'arrowKey', (...args) => {\n            this._handleSelectionChangeOnArrowKeyPress(...args);\n        }, { context: [isWidget, '$text'] });\n        this.listenTo(viewDocument, 'arrowKey', (...args) => {\n            this._preventDefaultOnArrowKeyPress(...args);\n        }, { context: '$root' });\n        this.listenTo(viewDocument, 'arrowKey', verticalNavigationHandler(this.editor.editing), { context: '$text' });\n        // Handle custom delete behaviour.\n        this.listenTo(viewDocument, 'delete', (evt, data) => {\n            if (this._handleDelete(data.direction == 'forward')) {\n                data.preventDefault();\n                evt.stop();\n            }\n        }, { context: '$root' });\n        // Handle Tab key while a widget is selected.\n        this.listenTo(viewDocument, 'tab', (evt, data) => {\n            // This event could be triggered from inside the widget, but we are interested\n            // only when the widget is selected itself.\n            if (evt.eventPhase != 'atTarget') {\n                return;\n            }\n            if (data.shiftKey) {\n                return;\n            }\n            if (this._selectFirstNestedEditable()) {\n                data.preventDefault();\n                evt.stop();\n            }\n        }, { context: isWidget, priority: 'low' });\n        // Handle Shift+Tab key while caret inside a widget editable.\n        this.listenTo(viewDocument, 'tab', (evt, data) => {\n            if (!data.shiftKey) {\n                return;\n            }\n            if (this._selectAncestorWidget()) {\n                data.preventDefault();\n                evt.stop();\n            }\n        }, { priority: 'low' });\n        // Handle Esc key while inside a nested editable.\n        this.listenTo(viewDocument, 'keydown', (evt, data) => {\n            if (data.keystroke != keyCodes.esc) {\n                return;\n            }\n            if (this._selectAncestorWidget()) {\n                data.preventDefault();\n                evt.stop();\n            }\n        }, { priority: 'low' });\n        // Add the information about the keystrokes to the accessibility database.\n        editor.accessibility.addKeystrokeInfoGroup({\n            id: 'widget',\n            label: t('Keystrokes that can be used when a widget is selected (for example: image, table, etc.)'),\n            keystrokes: [\n                {\n                    label: t('Move focus from an editable area back to the parent widget'),\n                    keystroke: 'Esc'\n                },\n                {\n                    label: t('Insert a new paragraph directly after a widget'),\n                    keystroke: 'Enter'\n                },\n                {\n                    label: t('Insert a new paragraph directly before a widget'),\n                    keystroke: 'Shift+Enter'\n                },\n                {\n                    label: t('Move the caret to allow typing directly before a widget'),\n                    keystroke: [['arrowup'], ['arrowleft']]\n                },\n                {\n                    label: t('Move the caret to allow typing directly after a widget'),\n                    keystroke: [['arrowdown'], ['arrowright']]\n                }\n            ]\n        });\n    }\n    /**\n     * Handles {@link module:engine/view/document~Document#event:mousedown mousedown} events on widget elements.\n     */\n    _onMousedown(eventInfo, domEventData) {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        let element = domEventData.target;\n        // Some of DOM elements have no view element representation so it may be null.\n        if (!element) {\n            return;\n        }\n        // If triple click should select entire paragraph.\n        if (domEventData.domEvent.detail >= 3) {\n            if (this._selectBlockContent(element)) {\n                domEventData.preventDefault();\n            }\n            return;\n        }\n        // If target is not a widget element - check if one of the ancestors is.\n        if (!isWidget(element)) {\n            const editableOrWidgetElement = findClosestEditableOrWidgetAncestor(element);\n            if (!editableOrWidgetElement) {\n                return;\n            }\n            if (isWidget(editableOrWidgetElement)) {\n                element = editableOrWidgetElement;\n            }\n            else {\n                // Pick view range from the point where the mouse was clicked.\n                const clickTargetFromPoint = getElementFromMouseEvent(view, domEventData);\n                if (clickTargetFromPoint && isWidget(clickTargetFromPoint)) {\n                    element = clickTargetFromPoint;\n                }\n                else {\n                    return;\n                }\n            }\n        }\n        // On Android selection would jump to the first table cell, on other devices\n        // we can't block it (and don't need to) because of drag and drop support.\n        if (env.isAndroid) {\n            domEventData.preventDefault();\n        }\n        // Focus editor if is not focused already.\n        if (!viewDocument.isFocused) {\n            view.focus();\n        }\n        // Create model selection over widget.\n        const modelElement = editor.editing.mapper.toModelElement(element);\n        this._setSelectionOverElement(modelElement);\n    }\n    /**\n     * Selects entire block content, e.g. on triple click it selects entire paragraph.\n     */\n    _selectBlockContent(element) {\n        const editor = this.editor;\n        const model = editor.model;\n        const mapper = editor.editing.mapper;\n        const schema = model.schema;\n        const viewElement = mapper.findMappedViewAncestor(this.editor.editing.view.createPositionAt(element, 0));\n        const modelElement = findTextBlockAncestor(mapper.toModelElement(viewElement), model.schema);\n        if (!modelElement) {\n            return false;\n        }\n        model.change(writer => {\n            const nextTextBlock = !schema.isLimit(modelElement) ?\n                findNextTextBlock(writer.createPositionAfter(modelElement), schema) :\n                null;\n            const start = writer.createPositionAt(modelElement, 0);\n            const end = nextTextBlock ?\n                writer.createPositionAt(nextTextBlock, 0) :\n                writer.createPositionAt(modelElement, 'end');\n            writer.setSelection(writer.createRange(start, end));\n        });\n        return true;\n    }\n    /**\n     * Handles {@link module:engine/view/document~Document#event:keydown keydown} events and changes\n     * the model selection when:\n     *\n     * * arrow key is pressed when the widget is selected,\n     * * the selection is next to a widget and the widget should become selected upon the arrow key press.\n     *\n     * See {@link #_preventDefaultOnArrowKeyPress}.\n     */\n    _handleSelectionChangeOnArrowKeyPress(eventInfo, domEventData) {\n        const keyCode = domEventData.keyCode;\n        const model = this.editor.model;\n        const schema = model.schema;\n        const modelSelection = model.document.selection;\n        const objectElement = modelSelection.getSelectedElement();\n        const direction = getLocalizedArrowKeyCodeDirection(keyCode, this.editor.locale.contentLanguageDirection);\n        const isForward = direction == 'down' || direction == 'right';\n        const isVerticalNavigation = direction == 'up' || direction == 'down';\n        // If object element is selected.\n        if (objectElement && schema.isObject(objectElement)) {\n            const position = isForward ? modelSelection.getLastPosition() : modelSelection.getFirstPosition();\n            const newRange = schema.getNearestSelectionRange(position, isForward ? 'forward' : 'backward');\n            if (newRange) {\n                model.change(writer => {\n                    writer.setSelection(newRange);\n                });\n                domEventData.preventDefault();\n                eventInfo.stop();\n            }\n            return;\n        }\n        // Handle collapsing of the selection when there is any widget on the edge of selection.\n        // This is needed because browsers have problems with collapsing such selection.\n        if (!modelSelection.isCollapsed && !domEventData.shiftKey) {\n            const firstPosition = modelSelection.getFirstPosition();\n            const lastPosition = modelSelection.getLastPosition();\n            const firstSelectedNode = firstPosition.nodeAfter;\n            const lastSelectedNode = lastPosition.nodeBefore;\n            if (firstSelectedNode && schema.isObject(firstSelectedNode) || lastSelectedNode && schema.isObject(lastSelectedNode)) {\n                model.change(writer => {\n                    writer.setSelection(isForward ? lastPosition : firstPosition);\n                });\n                domEventData.preventDefault();\n                eventInfo.stop();\n            }\n            return;\n        }\n        // Return if not collapsed.\n        if (!modelSelection.isCollapsed) {\n            return;\n        }\n        // If selection is next to object element.\n        const objectElementNextToSelection = this._getObjectElementNextToSelection(isForward);\n        if (objectElementNextToSelection && schema.isObject(objectElementNextToSelection)) {\n            // Do not select an inline widget while handling up/down arrow.\n            if (schema.isInline(objectElementNextToSelection) && isVerticalNavigation) {\n                return;\n            }\n            this._setSelectionOverElement(objectElementNextToSelection);\n            domEventData.preventDefault();\n            eventInfo.stop();\n        }\n    }\n    /**\n     * Handles {@link module:engine/view/document~Document#event:keydown keydown} events and prevents\n     * the default browser behavior to make sure the fake selection is not being moved from a fake selection\n     * container.\n     *\n     * See {@link #_handleSelectionChangeOnArrowKeyPress}.\n     */\n    _preventDefaultOnArrowKeyPress(eventInfo, domEventData) {\n        const model = this.editor.model;\n        const schema = model.schema;\n        const objectElement = model.document.selection.getSelectedElement();\n        // If object element is selected.\n        if (objectElement && schema.isObject(objectElement)) {\n            domEventData.preventDefault();\n            eventInfo.stop();\n        }\n    }\n    /**\n     * Handles delete keys: backspace and delete.\n     *\n     * @param isForward Set to true if delete was performed in forward direction.\n     * @returns Returns `true` if keys were handled correctly.\n     */\n    _handleDelete(isForward) {\n        const modelDocument = this.editor.model.document;\n        const modelSelection = modelDocument.selection;\n        // Do nothing when the read only mode is enabled.\n        if (!this.editor.model.canEditAt(modelSelection)) {\n            return;\n        }\n        // Do nothing on non-collapsed selection.\n        if (!modelSelection.isCollapsed) {\n            return;\n        }\n        const objectElement = this._getObjectElementNextToSelection(isForward);\n        if (objectElement) {\n            this.editor.model.change(writer => {\n                let previousNode = modelSelection.anchor.parent;\n                // Remove previous element if empty.\n                while (previousNode.isEmpty) {\n                    const nodeToRemove = previousNode;\n                    previousNode = nodeToRemove.parent;\n                    writer.remove(nodeToRemove);\n                }\n                this._setSelectionOverElement(objectElement);\n            });\n            return true;\n        }\n    }\n    /**\n     * Sets {@link module:engine/model/selection~Selection document's selection} over given element.\n     *\n     * @internal\n     */\n    _setSelectionOverElement(element) {\n        this.editor.model.change(writer => {\n            writer.setSelection(writer.createRangeOn(element));\n        });\n    }\n    /**\n     * Checks if {@link module:engine/model/element~Element element} placed next to the current\n     * {@link module:engine/model/selection~Selection model selection} exists and is marked in\n     * {@link module:engine/model/schema~Schema schema} as `object`.\n     *\n     * @internal\n     * @param forward Direction of checking.\n     */\n    _getObjectElementNextToSelection(forward) {\n        const model = this.editor.model;\n        const schema = model.schema;\n        const modelSelection = model.document.selection;\n        // Clone current selection to use it as a probe. We must leave default selection as it is so it can return\n        // to its current state after undo.\n        const probe = model.createSelection(modelSelection);\n        model.modifySelection(probe, { direction: forward ? 'forward' : 'backward' });\n        // The selection didn't change so there is nothing there.\n        if (probe.isEqual(modelSelection)) {\n            return null;\n        }\n        const objectElement = forward ? probe.focus.nodeBefore : probe.focus.nodeAfter;\n        if (!!objectElement && schema.isObject(objectElement)) {\n            return objectElement;\n        }\n        return null;\n    }\n    /**\n     * Removes CSS class from previously selected widgets.\n     */\n    _clearPreviouslySelectedWidgets(writer) {\n        for (const widget of this._previouslySelected) {\n            writer.removeClass(WIDGET_SELECTED_CLASS_NAME, widget);\n        }\n        this._previouslySelected.clear();\n    }\n    /**\n     * Moves the document selection into the first nested editable.\n     */\n    _selectFirstNestedEditable() {\n        const editor = this.editor;\n        const view = this.editor.editing.view;\n        const viewDocument = view.document;\n        for (const item of viewDocument.selection.getFirstRange().getItems()) {\n            if (item.is('editableElement')) {\n                const modelElement = editor.editing.mapper.toModelElement(item);\n                /* istanbul ignore next -- @preserve */\n                if (!modelElement) {\n                    continue;\n                }\n                const position = editor.model.createPositionAt(modelElement, 0);\n                const newRange = editor.model.schema.getNearestSelectionRange(position, 'forward');\n                editor.model.change(writer => {\n                    writer.setSelection(newRange);\n                });\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Updates the document selection so that it selects first ancestor widget.\n     */\n    _selectAncestorWidget() {\n        const editor = this.editor;\n        const mapper = editor.editing.mapper;\n        const selection = editor.editing.view.document.selection;\n        const positionParent = selection.getFirstPosition().parent;\n        const positionParentElement = positionParent.is('$text') ?\n            positionParent.parent :\n            positionParent;\n        const viewElement = positionParentElement.findAncestor(isWidget);\n        if (!viewElement) {\n            return false;\n        }\n        const modelElement = mapper.toModelElement(viewElement);\n        /* istanbul ignore next -- @preserve */\n        if (!modelElement) {\n            return false;\n        }\n        editor.model.change(writer => {\n            writer.setSelection(modelElement, 'on');\n        });\n        return true;\n    }\n}\n/**\n * Finds the closest ancestor element that is either an editable element or a widget.\n *\n * @param element The element from which to start searching.\n * @returns The closest ancestor element that is either an editable element or a widget, or null if none is found.\n */\nfunction findClosestEditableOrWidgetAncestor(element) {\n    let currentElement = element;\n    while (currentElement) {\n        if (currentElement.is('editableElement') || isWidget(currentElement)) {\n            return currentElement;\n        }\n        currentElement = currentElement.parent;\n    }\n    return null;\n}\n/**\n * Retrieves the ViewElement associated with a mouse event in the editing view.\n *\n * @param view The editing view.\n * @param domEventData The DOM event data containing the mouse event.\n * @returns The ViewElement associated with the mouse event, or null if not found.\n */\nfunction getElementFromMouseEvent(view, domEventData) {\n    const domRange = getRangeFromMouseEvent(domEventData.domEvent);\n    let viewRange = null;\n    if (domRange) {\n        viewRange = view.domConverter.domRangeToView(domRange);\n    }\n    else {\n        // Fallback to create range in target element. It happens frequently on Safari browser.\n        // See more: https://github.com/ckeditor/ckeditor5/issues/16978\n        viewRange = view.createRange(view.createPositionAt(domEventData.target, 0));\n    }\n    if (!viewRange) {\n        return null;\n    }\n    const viewPosition = viewRange.start;\n    if (!viewPosition.parent) {\n        return null;\n    }\n    let viewNode = viewPosition.parent;\n    if (viewPosition.parent.is('editableElement')) {\n        if (viewPosition.isAtEnd && viewPosition.nodeBefore) {\n            // Click after a widget tend to return position at the end of the editable element\n            // so use the node before it if range is at the end of a parent.\n            viewNode = viewPosition.nodeBefore;\n        }\n        else if (viewPosition.isAtStart && viewPosition.nodeAfter) {\n            // Click before a widget tend to return position at the start of the editable element\n            // so use the node after it if range is at the start of a parent.\n            // See more: https://github.com/ckeditor/ckeditor5/issues/16992\n            viewNode = viewPosition.nodeAfter;\n        }\n    }\n    if (viewNode.is('$text')) {\n        return viewNode.parent;\n    }\n    return viewNode;\n}\n/**\n * Checks whether the specified `element` is a child of the `parent` element.\n *\n * @param element An element to check.\n * @param parent A parent for the element.\n */\nfunction isChild(element, parent) {\n    if (!parent) {\n        return false;\n    }\n    return Array.from(element.getAncestors()).includes(parent);\n}\n/**\n * Returns nearest text block ancestor.\n */\nfunction findTextBlockAncestor(modelElement, schema) {\n    for (const element of modelElement.getAncestors({ includeSelf: true, parentFirst: true })) {\n        if (schema.checkChild(element, '$text')) {\n            return element;\n        }\n        // Do not go beyond nested editable.\n        if (schema.isLimit(element) && !schema.isObject(element)) {\n            break;\n        }\n    }\n    return null;\n}\n/**\n * Returns next text block where could put selection.\n */\nfunction findNextTextBlock(position, schema) {\n    const treeWalker = new TreeWalker({ startPosition: position });\n    for (const { item } of treeWalker) {\n        if (schema.isLimit(item) || !item.is('element')) {\n            return null;\n        }\n        if (schema.checkChild(item, '$text')) {\n            return item;\n        }\n    }\n    return null;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/widgettoolbarrepository\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { BalloonPanelView, ContextualBalloon, ToolbarView } from '@ckeditor/ckeditor5-ui';\nimport { CKEditorError, logWarning } from '@ckeditor/ckeditor5-utils';\nimport { isWidget } from './utils.js';\n/**\n * Widget toolbar repository plugin. A central point for registering widget toolbars. This plugin handles the whole\n * toolbar rendering process and exposes a concise API.\n *\n * To add a toolbar for your widget use the {@link ~WidgetToolbarRepository#register `WidgetToolbarRepository#register()`} method.\n *\n * The following example comes from the {@link module:image/imagetoolbar~ImageToolbar} plugin:\n *\n * ```ts\n * class ImageToolbar extends Plugin {\n * \tstatic get requires() {\n * \t\treturn [ WidgetToolbarRepository ];\n * \t}\n *\n * \tafterInit() {\n * \t\tconst editor = this.editor;\n * \t\tconst widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );\n *\n * \t\twidgetToolbarRepository.register( 'image', {\n * \t\t\titems: editor.config.get( 'image.toolbar' ),\n * \t\t\tgetRelatedElement: getClosestSelectedImageWidget\n * \t\t} );\n * \t}\n * }\n * ```\n */\nexport default class WidgetToolbarRepository extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * A map of toolbar definitions.\n         */\n        this._toolbarDefinitions = new Map();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ContextualBalloon];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'WidgetToolbarRepository';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        // Disables the default balloon toolbar for all widgets.\n        if (editor.plugins.has('BalloonToolbar')) {\n            const balloonToolbar = editor.plugins.get('BalloonToolbar');\n            this.listenTo(balloonToolbar, 'show', evt => {\n                if (isWidgetSelected(editor.editing.view.document.selection)) {\n                    evt.stop();\n                }\n            }, { priority: 'high' });\n        }\n        this._balloon = this.editor.plugins.get('ContextualBalloon');\n        this.on('change:isEnabled', () => {\n            this._updateToolbarsVisibility();\n        });\n        this.listenTo(editor.ui, 'update', () => {\n            this._updateToolbarsVisibility();\n        });\n        // UI#update is not fired after focus is back in editor, we need to check if balloon panel should be visible.\n        this.listenTo(editor.ui.focusTracker, 'change:isFocused', () => {\n            this._updateToolbarsVisibility();\n        }, { priority: 'low' });\n    }\n    destroy() {\n        super.destroy();\n        for (const toolbarConfig of this._toolbarDefinitions.values()) {\n            toolbarConfig.view.destroy();\n        }\n    }\n    /**\n     * Registers toolbar in the WidgetToolbarRepository. It renders it in the `ContextualBalloon` based on the value of the invoked\n     * `getRelatedElement` function. Toolbar items are gathered from `items` array.\n     * The balloon's CSS class is by default `ck-toolbar-container` and may be override with the `balloonClassName` option.\n     *\n     * Note: This method should be called in the {@link module:core/plugin~PluginInterface#afterInit `Plugin#afterInit()`}\n     * callback (or later) to make sure that the given toolbar items were already registered by other plugins.\n     *\n     * @param toolbarId An id for the toolbar. Used to\n     * @param options.ariaLabel Label used by assistive technologies to describe this toolbar element.\n     * @param options.items Array of toolbar items.\n     * @param options.getRelatedElement Callback which returns an element the toolbar should be attached to.\n     * @param options.balloonClassName CSS class for the widget balloon.\n     */\n    register(toolbarId, { ariaLabel, items, getRelatedElement, balloonClassName = 'ck-toolbar-container' }) {\n        // Trying to register a toolbar without any item.\n        if (!items.length) {\n            /**\n             * When {@link module:widget/widgettoolbarrepository~WidgetToolbarRepository#register registering} a new widget toolbar, you\n             * need to provide a non-empty array with the items that will be inserted into the toolbar.\n             *\n             * If you see this error when integrating the editor, you likely forgot to configure one of the widget toolbars.\n             *\n             * See for instance:\n             *\n             * * {@link module:table/tableconfig~TableConfig#contentToolbar `config.table.contentToolbar`}\n             * * {@link module:image/imageconfig~ImageConfig#toolbar `config.image.toolbar`}\n             *\n             * @error widget-toolbar-no-items\n             * @param toolbarId The id of the toolbar that has not been configured correctly.\n             */\n            logWarning('widget-toolbar-no-items', { toolbarId });\n            return;\n        }\n        const editor = this.editor;\n        const t = editor.t;\n        const toolbarView = new ToolbarView(editor.locale);\n        toolbarView.ariaLabel = ariaLabel || t('Widget toolbar');\n        if (this._toolbarDefinitions.has(toolbarId)) {\n            /**\n             * Toolbar with the given id was already added.\n             *\n             * @error widget-toolbar-duplicated\n             * @param toolbarId Toolbar id.\n             */\n            throw new CKEditorError('widget-toolbar-duplicated', this, { toolbarId });\n        }\n        const toolbarDefinition = {\n            view: toolbarView,\n            getRelatedElement,\n            balloonClassName,\n            itemsConfig: items,\n            initialized: false\n        };\n        // Register the toolbar so it becomes available for Alt+F10 and Esc navigation.\n        editor.ui.addToolbar(toolbarView, {\n            isContextual: true,\n            beforeFocus: () => {\n                const relatedElement = getRelatedElement(editor.editing.view.document.selection);\n                if (relatedElement) {\n                    this._showToolbar(toolbarDefinition, relatedElement);\n                }\n            },\n            afterBlur: () => {\n                this._hideToolbar(toolbarDefinition);\n            }\n        });\n        this._toolbarDefinitions.set(toolbarId, toolbarDefinition);\n    }\n    /**\n     * Iterates over stored toolbars and makes them visible or hidden.\n     */\n    _updateToolbarsVisibility() {\n        let maxRelatedElementDepth = 0;\n        let deepestRelatedElement = null;\n        let deepestToolbarDefinition = null;\n        for (const definition of this._toolbarDefinitions.values()) {\n            const relatedElement = definition.getRelatedElement(this.editor.editing.view.document.selection);\n            if (!this.isEnabled || !relatedElement) {\n                if (this._isToolbarInBalloon(definition)) {\n                    this._hideToolbar(definition);\n                }\n            }\n            else if (!this.editor.ui.focusTracker.isFocused) {\n                if (this._isToolbarVisible(definition)) {\n                    this._hideToolbar(definition);\n                }\n            }\n            else {\n                const relatedElementDepth = relatedElement.getAncestors().length;\n                // Many toolbars can express willingness to be displayed but they do not know about\n                // each other. Figure out which toolbar is deepest in the view tree to decide which\n                // should be displayed. For instance, if a selected image is inside a table cell, display\n                // the ImageToolbar rather than the TableToolbar (#60).\n                if (relatedElementDepth > maxRelatedElementDepth) {\n                    maxRelatedElementDepth = relatedElementDepth;\n                    deepestRelatedElement = relatedElement;\n                    deepestToolbarDefinition = definition;\n                }\n            }\n        }\n        if (deepestToolbarDefinition) {\n            this._showToolbar(deepestToolbarDefinition, deepestRelatedElement);\n        }\n    }\n    /**\n     * Hides the given toolbar.\n     */\n    _hideToolbar(toolbarDefinition) {\n        this._balloon.remove(toolbarDefinition.view);\n        this.stopListening(this._balloon, 'change:visibleView');\n    }\n    /**\n     * Shows up the toolbar if the toolbar is not visible.\n     * Otherwise, repositions the toolbar's balloon when toolbar's view is the most top view in balloon stack.\n     *\n     * It might happen here that the toolbar's view is under another view. Then do nothing as the other toolbar view\n     * should be still visible after the {@link module:ui/editorui/editorui~EditorUI#event:update}.\n     */\n    _showToolbar(toolbarDefinition, relatedElement) {\n        if (this._isToolbarVisible(toolbarDefinition)) {\n            repositionContextualBalloon(this.editor, relatedElement);\n        }\n        else if (!this._isToolbarInBalloon(toolbarDefinition)) {\n            if (!toolbarDefinition.initialized) {\n                toolbarDefinition.initialized = true;\n                toolbarDefinition.view.fillFromConfig(toolbarDefinition.itemsConfig, this.editor.ui.componentFactory);\n            }\n            this._balloon.add({\n                view: toolbarDefinition.view,\n                position: getBalloonPositionData(this.editor, relatedElement),\n                balloonClassName: toolbarDefinition.balloonClassName\n            });\n            // Update toolbar position each time stack with toolbar view is switched to visible.\n            // This is in a case target element has changed when toolbar was in invisible stack\n            // e.g. target image was wrapped by a block quote.\n            // See https://github.com/ckeditor/ckeditor5-widget/issues/92.\n            this.listenTo(this._balloon, 'change:visibleView', () => {\n                for (const definition of this._toolbarDefinitions.values()) {\n                    if (this._isToolbarVisible(definition)) {\n                        const relatedElement = definition.getRelatedElement(this.editor.editing.view.document.selection);\n                        repositionContextualBalloon(this.editor, relatedElement);\n                    }\n                }\n            });\n        }\n    }\n    _isToolbarVisible(toolbar) {\n        return this._balloon.visibleView === toolbar.view;\n    }\n    _isToolbarInBalloon(toolbar) {\n        return this._balloon.hasView(toolbar.view);\n    }\n}\nfunction repositionContextualBalloon(editor, relatedElement) {\n    const balloon = editor.plugins.get('ContextualBalloon');\n    const position = getBalloonPositionData(editor, relatedElement);\n    balloon.updatePosition(position);\n}\nfunction getBalloonPositionData(editor, relatedElement) {\n    const editingView = editor.editing.view;\n    const defaultPositions = BalloonPanelView.defaultPositions;\n    return {\n        target: editingView.domConverter.mapViewToDom(relatedElement),\n        positions: [\n            defaultPositions.northArrowSouth,\n            defaultPositions.northArrowSouthWest,\n            defaultPositions.northArrowSouthEast,\n            defaultPositions.southArrowNorth,\n            defaultPositions.southArrowNorthWest,\n            defaultPositions.southArrowNorthEast,\n            defaultPositions.viewportStickyNorth\n        ]\n    };\n}\nfunction isWidgetSelected(selection) {\n    const viewElement = selection.getSelectedElement();\n    return !!(viewElement && isWidget(viewElement));\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/widgetresize/resizerstate\n */\nimport { ObservableMixin, Rect } from '@ckeditor/ckeditor5-utils';\nimport { calculateResizeHostPercentageWidth } from '../utils.js';\n/**\n * Stores the internal state of a single resizable object.\n */\nexport default class ResizeState extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * @param options Resizer options.\n     */\n    constructor(options) {\n        super();\n        this.set('activeHandlePosition', null);\n        this.set('proposedWidthPercents', null);\n        this.set('proposedWidth', null);\n        this.set('proposedHeight', null);\n        this.set('proposedHandleHostWidth', null);\n        this.set('proposedHandleHostHeight', null);\n        this._options = options;\n        this._referenceCoordinates = null;\n    }\n    /**\n     * The original width (pixels) of the resized object when the resize process was started.\n     */\n    get originalWidth() {\n        return this._originalWidth;\n    }\n    /**\n     * The original height (pixels) of the resized object when the resize process was started.\n     */\n    get originalHeight() {\n        return this._originalHeight;\n    }\n    /**\n     * The original width (percents) of the resized object when the resize process was started.\n     */\n    get originalWidthPercents() {\n        return this._originalWidthPercents;\n    }\n    /**\n     * A width to height ratio of the resized image.\n     */\n    get aspectRatio() {\n        return this._aspectRatio;\n    }\n    /**\n     *\n     * @param domResizeHandle The handle used to calculate the reference point.\n     */\n    begin(domResizeHandle, domHandleHost, domResizeHost) {\n        const clientRect = new Rect(domHandleHost);\n        this.activeHandlePosition = getHandlePosition(domResizeHandle);\n        this._referenceCoordinates = getAbsoluteBoundaryPoint(domHandleHost, getOppositePosition(this.activeHandlePosition));\n        this._originalWidth = clientRect.width;\n        this._originalHeight = clientRect.height;\n        this._aspectRatio = clientRect.width / clientRect.height;\n        const widthStyle = domResizeHost.style.width;\n        if (widthStyle && widthStyle.match(/^\\d+(\\.\\d*)?%$/)) {\n            this._originalWidthPercents = parseFloat(widthStyle);\n        }\n        else {\n            this._originalWidthPercents = calculateResizeHostPercentageWidth(domResizeHost, clientRect);\n        }\n    }\n    update(newSize) {\n        this.proposedWidth = newSize.width;\n        this.proposedHeight = newSize.height;\n        this.proposedWidthPercents = newSize.widthPercents;\n        this.proposedHandleHostWidth = newSize.handleHostWidth;\n        this.proposedHandleHostHeight = newSize.handleHostHeight;\n    }\n}\n/**\n * Returns coordinates of the top-left corner of an element, relative to the document's top-left corner.\n *\n * @param resizerPosition The position of the resize handle, e.g. `\"top-left\"`, `\"bottom-right\"`.\n */\nfunction getAbsoluteBoundaryPoint(element, resizerPosition) {\n    const elementRect = new Rect(element);\n    const positionParts = resizerPosition.split('-');\n    const ret = {\n        x: positionParts[1] == 'right' ? elementRect.right : elementRect.left,\n        y: positionParts[0] == 'bottom' ? elementRect.bottom : elementRect.top\n    };\n    ret.x += element.ownerDocument.defaultView.scrollX;\n    ret.y += element.ownerDocument.defaultView.scrollY;\n    return ret;\n}\n/**\n * @param resizerPosition The expected resizer position, like `\"top-left\"`, `\"bottom-right\"`.\n * @returns A prefixed HTML class name for the resizer element.\n */\nfunction getResizerHandleClass(resizerPosition) {\n    return `ck-widget__resizer__handle-${resizerPosition}`;\n}\n/**\n * Determines the position of a given resize handle.\n *\n * @param domHandle Handle used to calculate the reference point.\n * @returns Returns a string like `\"top-left\"` or `undefined` if not matched.\n */\nfunction getHandlePosition(domHandle) {\n    const resizerPositions = ['top-left', 'top-right', 'bottom-right', 'bottom-left'];\n    for (const position of resizerPositions) {\n        if (domHandle.classList.contains(getResizerHandleClass(position))) {\n            return position;\n        }\n    }\n}\n/**\n * @param position Like `\"top-left\"`.\n * @returns Inverted `position`, e.g. it returns `\"bottom-right\"` if `\"top-left\"` was given as `position`.\n */\nfunction getOppositePosition(position) {\n    const parts = position.split('-');\n    const replacements = {\n        top: 'bottom',\n        bottom: 'top',\n        left: 'right',\n        right: 'left'\n    };\n    return `${replacements[parts[0]]}-${replacements[parts[1]]}`;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/widgetresize/sizeview\n */\nimport { View } from '@ckeditor/ckeditor5-ui';\n/**\n * A view displaying the proposed new element size during the resizing.\n */\nexport default class SizeView extends View {\n    constructor() {\n        super();\n        const bind = this.bindTemplate;\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-size-view',\n                    bind.to('_viewPosition', value => value ? `ck-orientation-${value}` : '')\n                ],\n                style: {\n                    display: bind.if('_isVisible', 'none', visible => !visible)\n                }\n            },\n            children: [{\n                    text: bind.to('_label')\n                }]\n        });\n    }\n    /**\n     * A method used for binding the `SizeView` instance properties to the `ResizeState` instance observable properties.\n     *\n     * @internal\n     * @param options An object defining the resizer options, used for setting the proper size label.\n     * @param resizeState The `ResizeState` class instance, used for keeping the `SizeView` state up to date.\n     */\n    _bindToState(options, resizeState) {\n        this.bind('_isVisible').to(resizeState, 'proposedWidth', resizeState, 'proposedHeight', (width, height) => width !== null && height !== null);\n        this.bind('_label').to(resizeState, 'proposedHandleHostWidth', resizeState, 'proposedHandleHostHeight', resizeState, 'proposedWidthPercents', (width, height, widthPercents) => {\n            if (options.unit === 'px') {\n                return `${width}×${height}`;\n            }\n            else {\n                return `${widthPercents}%`;\n            }\n        });\n        this.bind('_viewPosition').to(resizeState, 'activeHandlePosition', resizeState, 'proposedHandleHostWidth', resizeState, 'proposedHandleHostHeight', \n        // If the widget is too small to contain the size label, display the label above.\n        (position, width, height) => width < 50 || height < 50 ? 'above-center' : position);\n    }\n    /**\n     * A method used for cleaning up. It removes the bindings and hides the view.\n     *\n     * @internal\n     */\n    _dismiss() {\n        this.unbind();\n        this._isVisible = false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/widgetresize/resizer\n */\nimport { Template } from '@ckeditor/ckeditor5-ui';\nimport { Rect, ObservableMixin, compareArrays } from '@ckeditor/ckeditor5-utils';\nimport ResizeState from './resizerstate.js';\nimport SizeView from './sizeview.js';\n/**\n * Represents a resizer for a single resizable object.\n */\nexport default class Resizer extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * @param options Resizer options.\n     */\n    constructor(options) {\n        super();\n        /**\n         * A wrapper that is controlled by the resizer. This is usually a widget element.\n         */\n        this._viewResizerWrapper = null;\n        this._options = options;\n        this.set('isEnabled', true);\n        this.set('isSelected', false);\n        this.bind('isVisible').to(this, 'isEnabled', this, 'isSelected', (isEnabled, isSelected) => isEnabled && isSelected);\n        this.decorate('begin');\n        this.decorate('cancel');\n        this.decorate('commit');\n        this.decorate('updateSize');\n        this.on('commit', event => {\n            // State might not be initialized yet. In this case, prevent further handling and make sure that the resizer is\n            // cleaned up (#5195).\n            if (!this.state.proposedWidth && !this.state.proposedWidthPercents) {\n                this._cleanup();\n                event.stop();\n            }\n        }, { priority: 'high' });\n    }\n    /**\n     * Stores the state of the resizable host geometry, such as the original width, the currently proposed height, etc.\n     *\n     * Note that a new state is created for each resize transaction.\n     */\n    get state() {\n        return this._state;\n    }\n    /**\n     * Makes resizer visible in the UI.\n     */\n    show() {\n        const editingView = this._options.editor.editing.view;\n        editingView.change(writer => {\n            writer.removeClass('ck-hidden', this._viewResizerWrapper);\n        });\n    }\n    /**\n     * Hides resizer in the UI.\n     */\n    hide() {\n        const editingView = this._options.editor.editing.view;\n        editingView.change(writer => {\n            writer.addClass('ck-hidden', this._viewResizerWrapper);\n        });\n    }\n    /**\n     * Attaches the resizer to the DOM.\n     */\n    attach() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        const that = this;\n        const widgetElement = this._options.viewElement;\n        const editingView = this._options.editor.editing.view;\n        editingView.change(writer => {\n            const viewResizerWrapper = writer.createUIElement('div', {\n                class: 'ck ck-reset_all ck-widget__resizer'\n            }, function (domDocument) {\n                const domElement = this.toDomElement(domDocument);\n                that._appendHandles(domElement);\n                that._appendSizeUI(domElement);\n                return domElement;\n            });\n            // Append the resizer wrapper to the widget's wrapper.\n            writer.insert(writer.createPositionAt(widgetElement, 'end'), viewResizerWrapper);\n            writer.addClass('ck-widget_with-resizer', widgetElement);\n            this._viewResizerWrapper = viewResizerWrapper;\n            if (!this.isVisible) {\n                this.hide();\n            }\n        });\n        this.on('change:isVisible', () => {\n            if (this.isVisible) {\n                this.show();\n                this.redraw();\n            }\n            else {\n                this.hide();\n            }\n        });\n    }\n    /**\n     * Starts the resizing process.\n     *\n     * Creates a new {@link #state} for the current process.\n     *\n     * @fires begin\n     * @param domResizeHandle Clicked handle.\n     */\n    begin(domResizeHandle) {\n        this._state = new ResizeState(this._options);\n        this._sizeView._bindToState(this._options, this.state);\n        this._initialViewWidth = this._options.viewElement.getStyle('width');\n        this.state.begin(domResizeHandle, this._getHandleHost(), this._getResizeHost());\n    }\n    /**\n     * Updates the proposed size based on `domEventData`.\n     *\n     * @fires updateSize\n     */\n    updateSize(domEventData) {\n        const newSize = this._proposeNewSize(domEventData);\n        const editingView = this._options.editor.editing.view;\n        editingView.change(writer => {\n            const unit = this._options.unit || '%';\n            const newWidth = (unit === '%' ? newSize.widthPercents : newSize.width) + unit;\n            writer.setStyle('width', newWidth, this._options.viewElement);\n        });\n        // Get an actual image width, and:\n        // * reflect this size to the resize wrapper\n        // * apply this **real** size to the state\n        const domHandleHost = this._getHandleHost();\n        const domHandleHostRect = new Rect(domHandleHost);\n        const handleHostWidth = Math.round(domHandleHostRect.width);\n        const handleHostHeight = Math.round(domHandleHostRect.height);\n        // Handle max-width limitation.\n        const domResizeHostRect = new Rect(domHandleHost);\n        newSize.width = Math.round(domResizeHostRect.width);\n        newSize.height = Math.round(domResizeHostRect.height);\n        this.redraw(domHandleHostRect);\n        this.state.update({\n            ...newSize,\n            handleHostWidth,\n            handleHostHeight\n        });\n    }\n    /**\n     * Applies the geometry proposed with the resizer.\n     *\n     * @fires commit\n     */\n    commit() {\n        const unit = this._options.unit || '%';\n        const newValue = (unit === '%' ? this.state.proposedWidthPercents : this.state.proposedWidth) + unit;\n        // Both cleanup and onCommit callback are very likely to make view changes. Ensure that it is made in a single step.\n        this._options.editor.editing.view.change(() => {\n            this._cleanup();\n            this._options.onCommit(newValue);\n        });\n    }\n    /**\n     * Cancels and rejects the proposed resize dimensions, hiding the UI.\n     *\n     * @fires cancel\n     */\n    cancel() {\n        this._cleanup();\n    }\n    /**\n     * Destroys the resizer.\n     */\n    destroy() {\n        this.cancel();\n    }\n    /**\n     * Redraws the resizer.\n     *\n     * @param handleHostRect Handle host rectangle might be given to improve performance.\n     */\n    redraw(handleHostRect) {\n        const domWrapper = this._domResizerWrapper;\n        // Refresh only if resizer exists in the DOM.\n        if (!existsInDom(domWrapper)) {\n            return;\n        }\n        const widgetWrapper = domWrapper.parentElement;\n        const handleHost = this._getHandleHost();\n        const resizerWrapper = this._viewResizerWrapper;\n        const currentDimensions = [\n            resizerWrapper.getStyle('width'),\n            resizerWrapper.getStyle('height'),\n            resizerWrapper.getStyle('left'),\n            resizerWrapper.getStyle('top')\n        ];\n        let newDimensions;\n        if (widgetWrapper.isSameNode(handleHost)) {\n            const clientRect = handleHostRect || new Rect(handleHost);\n            newDimensions = [\n                clientRect.width + 'px',\n                clientRect.height + 'px',\n                undefined,\n                undefined\n            ];\n        }\n        // In case a resizing host is not a widget wrapper, we need to compensate\n        // for any additional offsets the resize host might have. E.g. wrapper padding\n        // or simply another editable. By doing that the border and resizers are shown\n        // only around the resize host.\n        else {\n            newDimensions = [\n                handleHost.offsetWidth + 'px',\n                handleHost.offsetHeight + 'px',\n                handleHost.offsetLeft + 'px',\n                handleHost.offsetTop + 'px'\n            ];\n        }\n        // Make changes to the view only if the resizer should actually get new dimensions.\n        // Otherwise, if View#change() was always called, this would cause EditorUI#update\n        // loops because the WidgetResize plugin listens to EditorUI#update and updates\n        // the resizer.\n        // https://github.com/ckeditor/ckeditor5/issues/7633\n        if (compareArrays(currentDimensions, newDimensions) !== 'same') {\n            this._options.editor.editing.view.change(writer => {\n                writer.setStyle({\n                    width: newDimensions[0],\n                    height: newDimensions[1],\n                    left: newDimensions[2],\n                    top: newDimensions[3]\n                }, resizerWrapper);\n            });\n        }\n    }\n    containsHandle(domElement) {\n        return this._domResizerWrapper.contains(domElement);\n    }\n    static isResizeHandle(domElement) {\n        return domElement.classList.contains('ck-widget__resizer__handle');\n    }\n    /**\n     * Cleans up the context state.\n     */\n    _cleanup() {\n        this._sizeView._dismiss();\n        const editingView = this._options.editor.editing.view;\n        editingView.change(writer => {\n            writer.setStyle('width', this._initialViewWidth, this._options.viewElement);\n        });\n    }\n    /**\n     * Calculates the proposed size as the resize handles are dragged.\n     *\n     * @param domEventData Event data that caused the size update request. It should be used to calculate the proposed size.\n     */\n    _proposeNewSize(domEventData) {\n        const state = this.state;\n        const currentCoordinates = extractCoordinates(domEventData);\n        const isCentered = this._options.isCentered ? this._options.isCentered(this) : true;\n        // Enlargement defines how much the resize host has changed in a given axis. Naturally it could be a negative number\n        // meaning that it has been shrunk.\n        //\n        // +----------------+--+\n        // |                |  |\n        // |       img      |  |\n        // |  /handle host  |  |\n        // +----------------+  | ^\n        // |                   | | - enlarge y\n        // +-------------------+ v\n        // \t\t\t\t\t<-->\n        // \t\t\t\t\t enlarge x\n        const enlargement = {\n            x: state._referenceCoordinates.x - (currentCoordinates.x + state.originalWidth),\n            y: (currentCoordinates.y - state.originalHeight) - state._referenceCoordinates.y\n        };\n        if (isCentered && state.activeHandlePosition.endsWith('-right')) {\n            enlargement.x = currentCoordinates.x - (state._referenceCoordinates.x + state.originalWidth);\n        }\n        // Objects needs to be resized twice as much in horizontal axis if centered, since enlargement is counted from\n        // one resized corner to your cursor. It needs to be duplicated to compensate for the other side too.\n        if (isCentered) {\n            enlargement.x *= 2;\n        }\n        // const resizeHost = this._getResizeHost();\n        // The size proposed by the user. It does not consider the aspect ratio.\n        let width = Math.abs(state.originalWidth + enlargement.x);\n        let height = Math.abs(state.originalHeight + enlargement.y);\n        // Dominant determination must take the ratio into account.\n        const dominant = width / state.aspectRatio > height ? 'width' : 'height';\n        if (dominant == 'width') {\n            height = width / state.aspectRatio;\n        }\n        else {\n            width = height * state.aspectRatio;\n        }\n        return {\n            width: Math.round(width),\n            height: Math.round(height),\n            widthPercents: Math.min(Math.round(state.originalWidthPercents / state.originalWidth * width * 100) / 100, 100)\n        };\n    }\n    /**\n     * Obtains the resize host.\n     *\n     * Resize host is an object that receives dimensions which are the result of resizing.\n     */\n    _getResizeHost() {\n        const widgetWrapper = this._domResizerWrapper.parentElement;\n        return this._options.getResizeHost(widgetWrapper);\n    }\n    /**\n     * Obtains the handle host.\n     *\n     * Handle host is an object that the handles are aligned to.\n     *\n     * Handle host will not always be an entire widget itself. Take an image as an example. The image widget\n     * contains an image and a caption. Only the image should be surrounded with handles.\n     */\n    _getHandleHost() {\n        const widgetWrapper = this._domResizerWrapper.parentElement;\n        return this._options.getHandleHost(widgetWrapper);\n    }\n    /**\n     * DOM container of the entire resize UI.\n     *\n     * Note that this property will have a value only after the element bound with the resizer is rendered\n     * (otherwise `null`).\n     */\n    get _domResizerWrapper() {\n        return this._options.editor.editing.view.domConverter.mapViewToDom(this._viewResizerWrapper);\n    }\n    /**\n     * Renders the resize handles in the DOM.\n     *\n     * @param domElement The resizer wrapper.\n     */\n    _appendHandles(domElement) {\n        const resizerPositions = ['top-left', 'top-right', 'bottom-right', 'bottom-left'];\n        for (const currentPosition of resizerPositions) {\n            domElement.appendChild((new Template({\n                tag: 'div',\n                attributes: {\n                    class: `ck-widget__resizer__handle ${getResizerClass(currentPosition)}`\n                }\n            }).render()));\n        }\n    }\n    /**\n     * Sets up the {@link #_sizeView} property and adds it to the passed `domElement`.\n     */\n    _appendSizeUI(domElement) {\n        this._sizeView = new SizeView();\n        // Make sure icon#element is rendered before passing to appendChild().\n        this._sizeView.render();\n        domElement.appendChild(this._sizeView.element);\n    }\n}\n/**\n * @param resizerPosition Expected resizer position like `\"top-left\"`, `\"bottom-right\"`.\n * @returns A prefixed HTML class name for the resizer element\n */\nfunction getResizerClass(resizerPosition) {\n    return `ck-widget__resizer__handle-${resizerPosition}`;\n}\nfunction extractCoordinates(event) {\n    return {\n        x: event.pageX,\n        y: event.pageY\n    };\n}\nfunction existsInDom(element) {\n    return element && element.ownerDocument && element.ownerDocument.contains(element);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module widget/widgetresize\n */\nimport Resizer from './widgetresize/resizer.js';\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { MouseObserver } from '@ckeditor/ckeditor5-engine';\nimport { DomEmitterMixin, global } from '@ckeditor/ckeditor5-utils';\nimport { throttle } from 'lodash-es';\nimport '../theme/widgetresize.css';\n/**\n * The widget resize feature plugin.\n *\n * Use the {@link module:widget/widgetresize~WidgetResize#attachTo} method to create a resizer for the specified widget.\n */\nexport default class WidgetResize extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * A map of resizers created using this plugin instance.\n         */\n        this._resizers = new Map();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'WidgetResize';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editing = this.editor.editing;\n        const domDocument = global.window.document;\n        this.set('selectedResizer', null);\n        this.set('_activeResizer', null);\n        editing.view.addObserver(MouseObserver);\n        this._observer = new (DomEmitterMixin())();\n        this.listenTo(editing.view.document, 'mousedown', this._mouseDownListener.bind(this), { priority: 'high' });\n        this._observer.listenTo(domDocument, 'mousemove', this._mouseMoveListener.bind(this));\n        this._observer.listenTo(domDocument, 'mouseup', this._mouseUpListener.bind(this));\n        this._redrawSelectedResizerThrottled = throttle(() => this.redrawSelectedResizer(), 200);\n        // Redrawing on any change of the UI of the editor (including content changes).\n        this.editor.ui.on('update', this._redrawSelectedResizerThrottled);\n        // Remove view widget-resizer mappings for widgets that have been removed from the document.\n        // https://github.com/ckeditor/ckeditor5/issues/10156\n        // https://github.com/ckeditor/ckeditor5/issues/10266\n        this.editor.model.document.on('change', () => {\n            for (const [viewElement, resizer] of this._resizers) {\n                if (!viewElement.isAttached()) {\n                    this._resizers.delete(viewElement);\n                    resizer.destroy();\n                }\n            }\n        }, { priority: 'lowest' });\n        // Resizers need to be redrawn upon window resize, because new window might shrink resize host.\n        this._observer.listenTo(global.window, 'resize', this._redrawSelectedResizerThrottled);\n        const viewSelection = this.editor.editing.view.document.selection;\n        viewSelection.on('change', () => {\n            const selectedElement = viewSelection.getSelectedElement();\n            const resizer = this.getResizerByViewElement(selectedElement) || null;\n            if (resizer) {\n                this.select(resizer);\n            }\n            else {\n                this.deselect();\n            }\n        });\n    }\n    /**\n     * Redraws the selected resizer if there is any selected resizer and if it is visible.\n     */\n    redrawSelectedResizer() {\n        if (this.selectedResizer && this.selectedResizer.isVisible) {\n            this.selectedResizer.redraw();\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this._observer.stopListening();\n        for (const resizer of this._resizers.values()) {\n            resizer.destroy();\n        }\n        this._redrawSelectedResizerThrottled.cancel();\n    }\n    /**\n     * Marks resizer as selected.\n     */\n    select(resizer) {\n        this.deselect();\n        this.selectedResizer = resizer;\n        this.selectedResizer.isSelected = true;\n    }\n    /**\n     * Deselects currently set resizer.\n     */\n    deselect() {\n        if (this.selectedResizer) {\n            this.selectedResizer.isSelected = false;\n        }\n        this.selectedResizer = null;\n    }\n    /**\n     * @param options Resizer options.\n     */\n    attachTo(options) {\n        const resizer = new Resizer(options);\n        const plugins = this.editor.plugins;\n        resizer.attach();\n        if (plugins.has('WidgetToolbarRepository')) {\n            // Hiding widget toolbar to improve the performance\n            // (https://github.com/ckeditor/ckeditor5-widget/pull/112#issuecomment-564528765).\n            const widgetToolbarRepository = plugins.get('WidgetToolbarRepository');\n            resizer.on('begin', () => {\n                widgetToolbarRepository.forceDisabled('resize');\n            }, { priority: 'lowest' });\n            resizer.on('cancel', () => {\n                widgetToolbarRepository.clearForceDisabled('resize');\n            }, { priority: 'highest' });\n            resizer.on('commit', () => {\n                widgetToolbarRepository.clearForceDisabled('resize');\n            }, { priority: 'highest' });\n        }\n        this._resizers.set(options.viewElement, resizer);\n        const viewSelection = this.editor.editing.view.document.selection;\n        const selectedElement = viewSelection.getSelectedElement();\n        // If the element the resizer is created for is currently focused, it should become visible.\n        if (this.getResizerByViewElement(selectedElement) == resizer) {\n            this.select(resizer);\n        }\n        return resizer;\n    }\n    /**\n     * Returns a resizer created for a given view element (widget element).\n     *\n     * @param viewElement View element associated with the resizer.\n     */\n    getResizerByViewElement(viewElement) {\n        return this._resizers.get(viewElement);\n    }\n    /**\n     * Returns a resizer that contains a given resize handle.\n     */\n    _getResizerByHandle(domResizeHandle) {\n        for (const resizer of this._resizers.values()) {\n            if (resizer.containsHandle(domResizeHandle)) {\n                return resizer;\n            }\n        }\n    }\n    /**\n     * @param domEventData Native DOM event.\n     */\n    _mouseDownListener(event, domEventData) {\n        const resizeHandle = domEventData.domTarget;\n        if (!Resizer.isResizeHandle(resizeHandle)) {\n            return;\n        }\n        this._activeResizer = this._getResizerByHandle(resizeHandle) || null;\n        if (this._activeResizer) {\n            this._activeResizer.begin(resizeHandle);\n            // Do not call other events when resizing. See: #6755.\n            event.stop();\n            domEventData.preventDefault();\n        }\n    }\n    /**\n     * @param domEventData Native DOM event.\n     */\n    _mouseMoveListener(event, domEventData) {\n        if (this._activeResizer) {\n            this._activeResizer.updateSize(domEventData);\n        }\n    }\n    _mouseUpListener() {\n        if (this._activeResizer) {\n            this._activeResizer.commit();\n            this._activeResizer = null;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/lineview\n */\n/* istanbul ignore file -- @preserve */\nimport { View } from '@ckeditor/ckeditor5-ui';\nimport { toUnit } from '@ckeditor/ckeditor5-utils';\nconst toPx = /* #__PURE__ */ toUnit('px');\n/**\n * The horizontal drop target line view.\n */\nexport default class LineView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor() {\n        super();\n        const bind = this.bindTemplate;\n        this.set({\n            isVisible: false,\n            left: null,\n            top: null,\n            width: null\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-clipboard-drop-target-line',\n                    bind.if('isVisible', 'ck-hidden', value => !value)\n                ],\n                style: {\n                    left: bind.to('left', left => toPx(left)),\n                    top: bind.to('top', top => toPx(top)),\n                    width: bind.to('width', width => toPx(width))\n                }\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/dragdroptarget\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { global, Rect, DomEmitterMixin, delay, ResizeObserver } from '@ckeditor/ckeditor5-utils';\nimport LineView from './lineview.js';\nimport { throttle } from 'lodash-es';\n/**\n * Part of the Drag and Drop handling. Responsible for finding and displaying the drop target.\n *\n * @internal\n */\nexport default class DragDropTarget extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * A delayed callback removing the drop marker.\n         *\n         * @internal\n         */\n        this.removeDropMarkerDelayed = delay(() => this.removeDropMarker(), 40);\n        /**\n         * A throttled callback updating the drop marker.\n         */\n        this._updateDropMarkerThrottled = throttle(targetRange => this._updateDropMarker(targetRange), 40);\n        /**\n         * A throttled callback reconverting the drop parker.\n         */\n        this._reconvertMarkerThrottled = throttle(() => {\n            if (this.editor.model.markers.has('drop-target')) {\n                this.editor.editing.reconvertMarker('drop-target');\n            }\n        }, 0);\n        /**\n         * The horizontal drop target line view.\n         */\n        this._dropTargetLineView = new LineView();\n        /**\n         * DOM Emitter.\n         */\n        this._domEmitter = new (DomEmitterMixin())();\n        /**\n         * Map of document scrollable elements.\n         */\n        this._scrollables = new Map();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'DragDropTarget';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        this._setupDropMarker();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this._domEmitter.stopListening();\n        for (const { resizeObserver } of this._scrollables.values()) {\n            resizeObserver.destroy();\n        }\n        this._updateDropMarkerThrottled.cancel();\n        this.removeDropMarkerDelayed.cancel();\n        this._reconvertMarkerThrottled.cancel();\n        return super.destroy();\n    }\n    /**\n     * Finds the drop target range and updates the drop marker.\n     *\n     * @internal\n     */\n    updateDropMarker(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n        this.removeDropMarkerDelayed.cancel();\n        const targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n        /* istanbul ignore next -- @preserve */\n        if (!targetRange) {\n            return;\n        }\n        if (draggedRange && draggedRange.containsRange(targetRange)) {\n            // Target range is inside the dragged range.\n            return this.removeDropMarker();\n        }\n        this._updateDropMarkerThrottled(targetRange);\n    }\n    /**\n     * Finds the final drop target range.\n     *\n     * @internal\n     */\n    getFinalDropRange(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n        const targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n        // The dragging markers must be removed after searching for the target range because sometimes\n        // the target lands on the marker itself.\n        this.removeDropMarker();\n        return targetRange;\n    }\n    /**\n     * Removes the drop target marker.\n     *\n     * @internal\n     */\n    removeDropMarker() {\n        const model = this.editor.model;\n        this.removeDropMarkerDelayed.cancel();\n        this._updateDropMarkerThrottled.cancel();\n        this._dropTargetLineView.isVisible = false;\n        if (model.markers.has('drop-target')) {\n            model.change(writer => {\n                writer.removeMarker('drop-target');\n            });\n        }\n    }\n    /**\n     * Creates downcast conversion for the drop target marker.\n     */\n    _setupDropMarker() {\n        const editor = this.editor;\n        editor.ui.view.body.add(this._dropTargetLineView);\n        // Drop marker conversion for hovering over widgets.\n        editor.conversion.for('editingDowncast').markerToHighlight({\n            model: 'drop-target',\n            view: {\n                classes: ['ck-clipboard-drop-target-range']\n            }\n        });\n        // Drop marker conversion for in text and block drop target.\n        editor.conversion.for('editingDowncast').markerToElement({\n            model: 'drop-target',\n            view: (data, { writer }) => {\n                // Inline drop.\n                if (editor.model.schema.checkChild(data.markerRange.start, '$text')) {\n                    this._dropTargetLineView.isVisible = false;\n                    return this._createDropTargetPosition(writer);\n                }\n                // Block drop.\n                else {\n                    if (data.markerRange.isCollapsed) {\n                        this._updateDropTargetLine(data.markerRange);\n                    }\n                    else {\n                        this._dropTargetLineView.isVisible = false;\n                    }\n                }\n            }\n        });\n    }\n    /**\n     * Updates the drop target marker to the provided range.\n     *\n     * @param targetRange The range to set the marker to.\n     */\n    _updateDropMarker(targetRange) {\n        const editor = this.editor;\n        const markers = editor.model.markers;\n        editor.model.change(writer => {\n            if (markers.has('drop-target')) {\n                if (!markers.get('drop-target').getRange().isEqual(targetRange)) {\n                    writer.updateMarker('drop-target', { range: targetRange });\n                }\n            }\n            else {\n                writer.addMarker('drop-target', {\n                    range: targetRange,\n                    usingOperation: false,\n                    affectsData: false\n                });\n            }\n        });\n    }\n    /**\n     * Creates the UI element for vertical (in-line) drop target.\n     */\n    _createDropTargetPosition(writer) {\n        return writer.createUIElement('span', { class: 'ck ck-clipboard-drop-target-position' }, function (domDocument) {\n            const domElement = this.toDomElement(domDocument);\n            // Using word joiner to make this marker as high as text and also making text not break on marker.\n            domElement.append('\\u2060', domDocument.createElement('span'), '\\u2060');\n            return domElement;\n        });\n    }\n    /**\n     * Updates the horizontal drop target line.\n     */\n    _updateDropTargetLine(range) {\n        const editing = this.editor.editing;\n        const nodeBefore = range.start.nodeBefore;\n        const nodeAfter = range.start.nodeAfter;\n        const nodeParent = range.start.parent;\n        const viewElementBefore = nodeBefore ? editing.mapper.toViewElement(nodeBefore) : null;\n        const domElementBefore = viewElementBefore ? editing.view.domConverter.mapViewToDom(viewElementBefore) : null;\n        const viewElementAfter = nodeAfter ? editing.mapper.toViewElement(nodeAfter) : null;\n        const domElementAfter = viewElementAfter ? editing.view.domConverter.mapViewToDom(viewElementAfter) : null;\n        const viewElementParent = editing.mapper.toViewElement(nodeParent);\n        if (!viewElementParent) {\n            return;\n        }\n        const domElementParent = editing.view.domConverter.mapViewToDom(viewElementParent);\n        const domScrollableRect = this._getScrollableRect(viewElementParent);\n        const { scrollX, scrollY } = global.window;\n        const rectBefore = domElementBefore ? new Rect(domElementBefore) : null;\n        const rectAfter = domElementAfter ? new Rect(domElementAfter) : null;\n        const rectParent = new Rect(domElementParent).excludeScrollbarsAndBorders();\n        const above = rectBefore ? rectBefore.bottom : rectParent.top;\n        const below = rectAfter ? rectAfter.top : rectParent.bottom;\n        const parentStyle = global.window.getComputedStyle(domElementParent);\n        const top = (above <= below ? (above + below) / 2 : below);\n        if (domScrollableRect.top < top && top < domScrollableRect.bottom) {\n            const left = rectParent.left + parseFloat(parentStyle.paddingLeft);\n            const right = rectParent.right - parseFloat(parentStyle.paddingRight);\n            const leftClamped = Math.max(left + scrollX, domScrollableRect.left);\n            const rightClamped = Math.min(right + scrollX, domScrollableRect.right);\n            this._dropTargetLineView.set({\n                isVisible: true,\n                left: leftClamped,\n                top: top + scrollY,\n                width: rightClamped - leftClamped\n            });\n        }\n        else {\n            this._dropTargetLineView.isVisible = false;\n        }\n    }\n    /**\n     * Finds the closest scrollable element rect for the given view element.\n     */\n    _getScrollableRect(viewElement) {\n        const rootName = viewElement.root.rootName;\n        let domScrollable;\n        if (this._scrollables.has(rootName)) {\n            domScrollable = this._scrollables.get(rootName).domElement;\n        }\n        else {\n            const domElement = this.editor.editing.view.domConverter.mapViewToDom(viewElement);\n            domScrollable = findScrollableElement(domElement);\n            this._domEmitter.listenTo(domScrollable, 'scroll', this._reconvertMarkerThrottled, { usePassive: true });\n            const resizeObserver = new ResizeObserver(domScrollable, this._reconvertMarkerThrottled);\n            this._scrollables.set(rootName, {\n                domElement: domScrollable,\n                resizeObserver\n            });\n        }\n        return new Rect(domScrollable).excludeScrollbarsAndBorders();\n    }\n}\n/**\n * Returns fixed selection range for given position and target element.\n */\nfunction findDropTargetRange(editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n    const model = editor.model;\n    const mapper = editor.editing.mapper;\n    const targetModelElement = getClosestMappedModelElement(editor, targetViewElement);\n    let modelElement = targetModelElement;\n    while (modelElement) {\n        if (!blockMode) {\n            if (model.schema.checkChild(modelElement, '$text')) {\n                if (targetViewRanges) {\n                    const targetViewPosition = targetViewRanges[0].start;\n                    const targetModelPosition = mapper.toModelPosition(targetViewPosition);\n                    const canDropOnPosition = !draggedRange || Array\n                        .from(draggedRange.getItems())\n                        .every(item => model.schema.checkChild(targetModelPosition, item));\n                    if (canDropOnPosition) {\n                        if (model.schema.checkChild(targetModelPosition, '$text')) {\n                            return model.createRange(targetModelPosition);\n                        }\n                        else if (targetViewPosition) {\n                            // This is the case of dropping inside a span wrapper of an inline image.\n                            return findDropTargetRangeForElement(editor, getClosestMappedModelElement(editor, targetViewPosition.parent), clientX, clientY);\n                        }\n                    }\n                }\n            }\n            else if (model.schema.isInline(modelElement)) {\n                return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n            }\n        }\n        if (model.schema.isBlock(modelElement)) {\n            return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n        }\n        else if (model.schema.checkChild(modelElement, '$block')) {\n            const childNodes = Array.from(modelElement.getChildren())\n                .filter((node) => node.is('element') && !shouldIgnoreElement(editor, node));\n            let startIndex = 0;\n            let endIndex = childNodes.length;\n            if (endIndex == 0) {\n                return model.createRange(model.createPositionAt(modelElement, 'end'));\n            }\n            while (startIndex < endIndex - 1) {\n                const middleIndex = Math.floor((startIndex + endIndex) / 2);\n                const side = findElementSide(editor, childNodes[middleIndex], clientX, clientY);\n                if (side == 'before') {\n                    endIndex = middleIndex;\n                }\n                else {\n                    startIndex = middleIndex;\n                }\n            }\n            return findDropTargetRangeForElement(editor, childNodes[startIndex], clientX, clientY);\n        }\n        modelElement = modelElement.parent;\n    }\n    return null;\n}\n/**\n * Returns true for elements which should be ignored.\n */\nfunction shouldIgnoreElement(editor, modelElement) {\n    const mapper = editor.editing.mapper;\n    const domConverter = editor.editing.view.domConverter;\n    const viewElement = mapper.toViewElement(modelElement);\n    if (!viewElement) {\n        return true;\n    }\n    const domElement = domConverter.mapViewToDom(viewElement);\n    return global.window.getComputedStyle(domElement).float != 'none';\n}\n/**\n * Returns target range relative to the given element.\n */\nfunction findDropTargetRangeForElement(editor, modelElement, clientX, clientY) {\n    const model = editor.model;\n    return model.createRange(model.createPositionAt(modelElement, findElementSide(editor, modelElement, clientX, clientY)));\n}\n/**\n * Resolves whether drop marker should be before or after the given element.\n */\nfunction findElementSide(editor, modelElement, clientX, clientY) {\n    const mapper = editor.editing.mapper;\n    const domConverter = editor.editing.view.domConverter;\n    const viewElement = mapper.toViewElement(modelElement);\n    const domElement = domConverter.mapViewToDom(viewElement);\n    const rect = new Rect(domElement);\n    if (editor.model.schema.isInline(modelElement)) {\n        return clientX < (rect.left + rect.right) / 2 ? 'before' : 'after';\n    }\n    else {\n        return clientY < (rect.top + rect.bottom) / 2 ? 'before' : 'after';\n    }\n}\n/**\n * Returns the closest model element for the specified view element.\n */\nfunction getClosestMappedModelElement(editor, element) {\n    const mapper = editor.editing.mapper;\n    const view = editor.editing.view;\n    const targetModelElement = mapper.toModelElement(element);\n    if (targetModelElement) {\n        return targetModelElement;\n    }\n    // Find mapped ancestor if the target is inside not mapped element (for example inline code element).\n    const viewPosition = view.createPositionBefore(element);\n    const viewElement = mapper.findMappedViewAncestor(viewPosition);\n    return mapper.toModelElement(viewElement);\n}\n/**\n * Returns the closest scrollable ancestor DOM element.\n *\n * It is assumed that `domNode` is attached to the document.\n */\nfunction findScrollableElement(domNode) {\n    let domElement = domNode;\n    do {\n        domElement = domElement.parentElement;\n        const overflow = global.window.getComputedStyle(domElement).overflowY;\n        if (overflow == 'auto' || overflow == 'scroll') {\n            break;\n        }\n    } while (domElement.tagName != 'BODY');\n    return domElement;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/dragdropblocktoolbar\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { env, global, DomEmitterMixin } from '@ckeditor/ckeditor5-utils';\nimport ClipboardObserver from './clipboardobserver.js';\n/**\n * Integration of a block Drag and Drop support with the block toolbar.\n *\n * @internal\n */\nexport default class DragDropBlockToolbar extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * Whether current dragging is started by block toolbar button dragging.\n         */\n        this._isBlockDragging = false;\n        /**\n         * DOM Emitter.\n         */\n        this._domEmitter = new (DomEmitterMixin())();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'DragDropBlockToolbar';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        this.listenTo(editor, 'change:isReadOnly', (evt, name, isReadOnly) => {\n            if (isReadOnly) {\n                this.forceDisabled('readOnlyMode');\n                this._isBlockDragging = false;\n            }\n            else {\n                this.clearForceDisabled('readOnlyMode');\n            }\n        });\n        if (env.isAndroid) {\n            this.forceDisabled('noAndroidSupport');\n        }\n        if (editor.plugins.has('BlockToolbar')) {\n            const blockToolbar = editor.plugins.get('BlockToolbar');\n            const element = blockToolbar.buttonView.element;\n            this._domEmitter.listenTo(element, 'dragstart', (evt, data) => this._handleBlockDragStart(data));\n            this._domEmitter.listenTo(global.document, 'dragover', (evt, data) => this._handleBlockDragging(data));\n            this._domEmitter.listenTo(global.document, 'drop', (evt, data) => this._handleBlockDragging(data));\n            this._domEmitter.listenTo(global.document, 'dragend', () => this._handleBlockDragEnd(), { useCapture: true });\n            if (this.isEnabled) {\n                element.setAttribute('draggable', 'true');\n            }\n            this.on('change:isEnabled', (evt, name, isEnabled) => {\n                element.setAttribute('draggable', isEnabled ? 'true' : 'false');\n            });\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this._domEmitter.stopListening();\n        return super.destroy();\n    }\n    /**\n     * The `dragstart` event handler.\n     */\n    _handleBlockDragStart(domEvent) {\n        if (!this.isEnabled) {\n            return;\n        }\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const view = this.editor.editing.view;\n        const blocks = Array.from(selection.getSelectedBlocks());\n        const draggedRange = model.createRange(model.createPositionBefore(blocks[0]), model.createPositionAfter(blocks[blocks.length - 1]));\n        model.change(writer => writer.setSelection(draggedRange));\n        this._isBlockDragging = true;\n        view.focus();\n        view.getObserver(ClipboardObserver).onDomEvent(domEvent);\n    }\n    /**\n     * The `dragover` and `drop` event handler.\n     */\n    _handleBlockDragging(domEvent) {\n        if (!this.isEnabled || !this._isBlockDragging) {\n            return;\n        }\n        const clientX = domEvent.clientX + (this.editor.locale.contentLanguageDirection == 'ltr' ? 100 : -100);\n        const clientY = domEvent.clientY;\n        const target = document.elementFromPoint(clientX, clientY);\n        const view = this.editor.editing.view;\n        if (!target || !target.closest('.ck-editor__editable')) {\n            return;\n        }\n        view.getObserver(ClipboardObserver).onDomEvent({\n            ...domEvent,\n            type: domEvent.type,\n            dataTransfer: domEvent.dataTransfer,\n            target,\n            clientX,\n            clientY,\n            preventDefault: () => domEvent.preventDefault(),\n            stopPropagation: () => domEvent.stopPropagation()\n        });\n    }\n    /**\n     * The `dragend` event handler.\n     */\n    _handleBlockDragEnd() {\n        this._isBlockDragging = false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/dragdrop\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { LiveRange, MouseObserver } from '@ckeditor/ckeditor5-engine';\nimport { Widget, isWidget } from '@ckeditor/ckeditor5-widget';\nimport { env, uid, global, createElement, DomEmitterMixin, delay, Rect } from '@ckeditor/ckeditor5-utils';\nimport ClipboardPipeline from './clipboardpipeline.js';\nimport ClipboardObserver from './clipboardobserver.js';\nimport DragDropTarget from './dragdroptarget.js';\nimport DragDropBlockToolbar from './dragdropblocktoolbar.js';\nimport '../theme/clipboard.css';\n// Drag and drop events overview:\n//\n//                ┌──────────────────┐\n//                │     mousedown    │   Sets the draggable attribute.\n//                └─────────┬────────┘\n//                          │\n//                          └─────────────────────┐\n//                          │                     │\n//                          │           ┌─────────V────────┐\n//                          │           │      mouseup     │   Dragging did not start, removes the draggable attribute.\n//                          │           └──────────────────┘\n//                          │\n//                ┌─────────V────────┐   Retrieves the selected model.DocumentFragment\n//                │     dragstart    │   and converts it to view.DocumentFragment.\n//                └─────────┬────────┘\n//                          │\n//                ┌─────────V────────┐   Processes view.DocumentFragment to text/html and text/plain\n//                │  clipboardOutput │   and stores the results in data.dataTransfer.\n//                └─────────┬────────┘\n//                          │\n//                          │   DOM dragover\n//                          ┌────────────┐\n//                          │            │\n//                ┌─────────V────────┐   │\n//                │     dragging     │   │   Updates the drop target marker.\n//                └─────────┬────────┘   │\n//                          │            │\n//            ┌─────────────└────────────┘\n//            │             │            │\n//            │   ┌─────────V────────┐   │\n//            │   │     dragleave    │   │   Removes the drop target marker.\n//            │   └─────────┬────────┘   │\n//            │             │            │\n//        ┌───│─────────────┘            │\n//        │   │             │            │\n//        │   │   ┌─────────V────────┐   │\n//        │   │   │     dragenter    │   │   Focuses the editor view.\n//        │   │   └─────────┬────────┘   │\n//        │   │             │            │\n//        │   │             └────────────┘\n//        │   │\n//        │   └─────────────┐\n//        │   │             │\n//        │   │   ┌─────────V────────┐\n//        └───┐   │       drop       │   (The default handler of the clipboard pipeline).\n//            │   └─────────┬────────┘\n//            │             │\n//            │   ┌─────────V────────┐   Resolves the final data.targetRanges.\n//            │   │  clipboardInput  │   Aborts if dropping on dragged content.\n//            │   └─────────┬────────┘\n//            │             │\n//            │   ┌─────────V────────┐\n//            │   │  clipboardInput  │   (The default handler of the clipboard pipeline).\n//            │   └─────────┬────────┘\n//            │             │\n//            │ ┌───────────V───────────┐\n//            │ │  inputTransformation  │   (The default handler of the clipboard pipeline).\n//            │ └───────────┬───────────┘\n//            │             │\n//            │  ┌──────────V──────────┐\n//            │  │   contentInsertion  │   Updates the document selection to drop range.\n//            │  └──────────┬──────────┘\n//            │             │\n//            │  ┌──────────V──────────┐\n//            │  │   contentInsertion  │   (The default handler of the clipboard pipeline).\n//            │  └──────────┬──────────┘\n//            │             │\n//            │  ┌──────────V──────────┐\n//            │  │   contentInsertion  │   Removes the content from the original range if the insertion was successful.\n//            │  └──────────┬──────────┘\n//            │             │\n//            └─────────────┐\n//                          │\n//                ┌─────────V────────┐\n//                │      dragend     │   Removes the drop marker and cleans the state.\n//                └──────────────────┘\n//\n/**\n * The drag and drop feature. It works on top of the {@link module:clipboard/clipboardpipeline~ClipboardPipeline}.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n *\n * @internal\n */\nexport default class DragDrop extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * A delayed callback removing draggable attributes.\n         */\n        this._clearDraggableAttributesDelayed = delay(() => this._clearDraggableAttributes(), 40);\n        /**\n         * Whether the dragged content can be dropped only in block context.\n         */\n        // TODO handle drag from other editor instance\n        // TODO configure to use block, inline or both\n        this._blockMode = false;\n        /**\n         * DOM Emitter.\n         */\n        this._domEmitter = new (DomEmitterMixin())();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'DragDrop';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ClipboardPipeline, Widget, DragDropTarget, DragDropBlockToolbar];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        this._draggedRange = null;\n        this._draggingUid = '';\n        this._draggableElement = null;\n        view.addObserver(ClipboardObserver);\n        view.addObserver(MouseObserver);\n        this._setupDragging();\n        this._setupContentInsertionIntegration();\n        this._setupClipboardInputIntegration();\n        this._setupDraggableAttributeHandling();\n        this.listenTo(editor, 'change:isReadOnly', (evt, name, isReadOnly) => {\n            if (isReadOnly) {\n                this.forceDisabled('readOnlyMode');\n            }\n            else {\n                this.clearForceDisabled('readOnlyMode');\n            }\n        });\n        this.on('change:isEnabled', (evt, name, isEnabled) => {\n            if (!isEnabled) {\n                this._finalizeDragging(false);\n            }\n        });\n        if (env.isAndroid) {\n            this.forceDisabled('noAndroidSupport');\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        if (this._draggedRange) {\n            this._draggedRange.detach();\n            this._draggedRange = null;\n        }\n        if (this._previewContainer) {\n            this._previewContainer.remove();\n        }\n        this._domEmitter.stopListening();\n        this._clearDraggableAttributesDelayed.cancel();\n        return super.destroy();\n    }\n    /**\n     * Drag and drop events handling.\n     */\n    _setupDragging() {\n        const editor = this.editor;\n        const model = editor.model;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const dragDropTarget = editor.plugins.get(DragDropTarget);\n        // The handler for the drag start; it is responsible for setting data transfer object.\n        this.listenTo(viewDocument, 'dragstart', (evt, data) => {\n            // Don't drag the editable element itself.\n            if (data.target && data.target.is('editableElement')) {\n                data.preventDefault();\n                return;\n            }\n            this._prepareDraggedRange(data.target);\n            if (!this._draggedRange) {\n                data.preventDefault();\n                return;\n            }\n            this._draggingUid = uid();\n            data.dataTransfer.effectAllowed = this.isEnabled ? 'copyMove' : 'copy';\n            data.dataTransfer.setData('application/ckeditor5-dragging-uid', this._draggingUid);\n            const draggedSelection = model.createSelection(this._draggedRange.toRange());\n            const clipboardPipeline = this.editor.plugins.get('ClipboardPipeline');\n            clipboardPipeline._fireOutputTransformationEvent(data.dataTransfer, draggedSelection, 'dragstart');\n            const { dataTransfer, domTarget, domEvent } = data;\n            const { clientX } = domEvent;\n            this._updatePreview({ dataTransfer, domTarget, clientX });\n            data.stopPropagation();\n            if (!this.isEnabled) {\n                this._draggedRange.detach();\n                this._draggedRange = null;\n                this._draggingUid = '';\n            }\n        }, { priority: 'low' });\n        // The handler for finalizing drag and drop. It should always be triggered after dragging completes\n        // even if it was completed in a different application.\n        // Note: This is not fired if source text node got removed while downcasting a marker.\n        this.listenTo(viewDocument, 'dragend', (evt, data) => {\n            this._finalizeDragging(!data.dataTransfer.isCanceled && data.dataTransfer.dropEffect == 'move');\n        }, { priority: 'low' });\n        // Reset block dragging mode even if dropped outside the editable.\n        this._domEmitter.listenTo(global.document, 'dragend', () => {\n            this._blockMode = false;\n        }, { useCapture: true });\n        // Dragging over the editable.\n        this.listenTo(viewDocument, 'dragenter', () => {\n            if (!this.isEnabled) {\n                return;\n            }\n            view.focus();\n        });\n        // Dragging out of the editable.\n        this.listenTo(viewDocument, 'dragleave', () => {\n            // We do not know if the mouse left the editor or just some element in it, so let us wait a few milliseconds\n            // to check if 'dragover' is not fired.\n            dragDropTarget.removeDropMarkerDelayed();\n        });\n        // Handler for moving dragged content over the target area.\n        this.listenTo(viewDocument, 'dragging', (evt, data) => {\n            if (!this.isEnabled) {\n                data.dataTransfer.dropEffect = 'none';\n                return;\n            }\n            const { clientX, clientY } = data.domEvent;\n            dragDropTarget.updateDropMarker(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange);\n            // If this is content being dragged from another editor, moving out of current editor instance\n            // is not possible until 'dragend' event case will be fixed.\n            if (!this._draggedRange) {\n                data.dataTransfer.dropEffect = 'copy';\n            }\n            // In Firefox it is already set and effect allowed remains the same as originally set.\n            if (!env.isGecko) {\n                if (data.dataTransfer.effectAllowed == 'copy') {\n                    data.dataTransfer.dropEffect = 'copy';\n                }\n                else if (['all', 'copyMove'].includes(data.dataTransfer.effectAllowed)) {\n                    data.dataTransfer.dropEffect = 'move';\n                }\n            }\n            evt.stop();\n        }, { priority: 'low' });\n    }\n    /**\n     * Integration with the `clipboardInput` event.\n     */\n    _setupClipboardInputIntegration() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const dragDropTarget = editor.plugins.get(DragDropTarget);\n        // Update the event target ranges and abort dropping if dropping over itself.\n        this.listenTo(viewDocument, 'clipboardInput', (evt, data) => {\n            if (data.method != 'drop') {\n                return;\n            }\n            const { clientX, clientY } = data.domEvent;\n            const targetRange = dragDropTarget.getFinalDropRange(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange);\n            if (!targetRange) {\n                this._finalizeDragging(false);\n                evt.stop();\n                return;\n            }\n            // Since we cannot rely on the drag end event, we must check if the local drag range is from the current drag and drop\n            // or it is from some previous not cleared one.\n            if (this._draggedRange && this._draggingUid != data.dataTransfer.getData('application/ckeditor5-dragging-uid')) {\n                this._draggedRange.detach();\n                this._draggedRange = null;\n                this._draggingUid = '';\n            }\n            // Do not do anything if some content was dragged within the same document to the same position.\n            const isMove = getFinalDropEffect(data.dataTransfer) == 'move';\n            if (isMove && this._draggedRange && this._draggedRange.containsRange(targetRange, true)) {\n                this._finalizeDragging(false);\n                evt.stop();\n                return;\n            }\n            // Override the target ranges with the one adjusted to the best one for a drop.\n            data.targetRanges = [editor.editing.mapper.toViewRange(targetRange)];\n        }, { priority: 'high' });\n    }\n    /**\n     * Integration with the `contentInsertion` event of the clipboard pipeline.\n     */\n    _setupContentInsertionIntegration() {\n        const clipboardPipeline = this.editor.plugins.get(ClipboardPipeline);\n        clipboardPipeline.on('contentInsertion', (evt, data) => {\n            if (!this.isEnabled || data.method !== 'drop') {\n                return;\n            }\n            // Update the selection to the target range in the same change block to avoid selection post-fixing\n            // and to be able to clone text attributes for plain text dropping.\n            const ranges = data.targetRanges.map(viewRange => this.editor.editing.mapper.toModelRange(viewRange));\n            this.editor.model.change(writer => writer.setSelection(ranges));\n        }, { priority: 'high' });\n        clipboardPipeline.on('contentInsertion', (evt, data) => {\n            if (!this.isEnabled || data.method !== 'drop') {\n                return;\n            }\n            // Remove dragged range content, remove markers, clean after dragging.\n            const isMove = getFinalDropEffect(data.dataTransfer) == 'move';\n            // Whether any content was inserted (insertion might fail if the schema is disallowing some elements\n            // (for example an image caption allows only the content of a block but not blocks themselves.\n            // Some integrations might not return valid range (i.e., table pasting).\n            const isSuccess = !data.resultRange || !data.resultRange.isCollapsed;\n            this._finalizeDragging(isSuccess && isMove);\n        }, { priority: 'lowest' });\n    }\n    /**\n     * Adds listeners that add the `draggable` attribute to the elements while the mouse button is down so the dragging could start.\n     */\n    _setupDraggableAttributeHandling() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        // Add the 'draggable' attribute to the widget while pressing the selection handle.\n        // This is required for widgets to be draggable. In Chrome it will enable dragging text nodes.\n        this.listenTo(viewDocument, 'mousedown', (evt, data) => {\n            // The lack of data can be caused by editor tests firing fake mouse events. This should not occur\n            // in real-life scenarios but this greatly simplifies editor tests that would otherwise fail a lot.\n            if (env.isAndroid || !data) {\n                return;\n            }\n            this._clearDraggableAttributesDelayed.cancel();\n            // Check if this is a mousedown over the widget (but not a nested editable).\n            let draggableElement = findDraggableWidget(data.target);\n            // Note: There is a limitation that if more than a widget is selected (a widget and some text)\n            // and dragging starts on the widget, then only the widget is dragged.\n            // If this was not a widget then we should check if we need to drag some text content.\n            // In Chrome set a 'draggable' attribute on closest editable to allow immediate dragging of the selected text range.\n            // In Firefox this is not needed. In Safari it makes the whole editable draggable (not just textual content).\n            // Disabled in read-only mode because draggable=\"true\" + contenteditable=\"false\" results\n            // in not firing selectionchange event ever, which makes the selection stuck in read-only mode.\n            if (env.isBlink && !editor.isReadOnly && !draggableElement && !viewDocument.selection.isCollapsed) {\n                const selectedElement = viewDocument.selection.getSelectedElement();\n                if (!selectedElement || !isWidget(selectedElement)) {\n                    draggableElement = viewDocument.selection.editableElement;\n                }\n            }\n            if (draggableElement) {\n                view.change(writer => {\n                    writer.setAttribute('draggable', 'true', draggableElement);\n                });\n                // Keep the reference to the model element in case the view element gets removed while dragging.\n                this._draggableElement = editor.editing.mapper.toModelElement(draggableElement);\n            }\n        });\n        // Remove the draggable attribute in case no dragging started (only mousedown + mouseup).\n        this.listenTo(viewDocument, 'mouseup', () => {\n            if (!env.isAndroid) {\n                this._clearDraggableAttributesDelayed();\n            }\n        });\n    }\n    /**\n     * Removes the `draggable` attribute from the element that was used for dragging.\n     */\n    _clearDraggableAttributes() {\n        const editing = this.editor.editing;\n        editing.view.change(writer => {\n            // Remove 'draggable' attribute.\n            if (this._draggableElement && this._draggableElement.root.rootName != '$graveyard') {\n                writer.removeAttribute('draggable', editing.mapper.toViewElement(this._draggableElement));\n            }\n            this._draggableElement = null;\n        });\n    }\n    /**\n     * Deletes the dragged content from its original range and clears the dragging state.\n     *\n     * @param moved Whether the move succeeded.\n     */\n    _finalizeDragging(moved) {\n        const editor = this.editor;\n        const model = editor.model;\n        const dragDropTarget = editor.plugins.get(DragDropTarget);\n        dragDropTarget.removeDropMarker();\n        this._clearDraggableAttributes();\n        if (editor.plugins.has('WidgetToolbarRepository')) {\n            const widgetToolbarRepository = editor.plugins.get('WidgetToolbarRepository');\n            widgetToolbarRepository.clearForceDisabled('dragDrop');\n        }\n        this._draggingUid = '';\n        if (this._previewContainer) {\n            this._previewContainer.remove();\n            this._previewContainer = undefined;\n        }\n        if (!this._draggedRange) {\n            return;\n        }\n        // Delete moved content.\n        if (moved && this.isEnabled) {\n            model.change(writer => {\n                const selection = model.createSelection(this._draggedRange);\n                model.deleteContent(selection, { doNotAutoparagraph: true });\n                // Check result selection if it does not require auto-paragraphing of empty container.\n                const selectionParent = selection.getFirstPosition().parent;\n                if (selectionParent.isEmpty &&\n                    !model.schema.checkChild(selectionParent, '$text') &&\n                    model.schema.checkChild(selectionParent, 'paragraph')) {\n                    writer.insertElement('paragraph', selectionParent, 0);\n                }\n            });\n        }\n        this._draggedRange.detach();\n        this._draggedRange = null;\n    }\n    /**\n     * Sets the dragged source range based on event target and document selection.\n     */\n    _prepareDraggedRange(target) {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        // Check if this is dragstart over the widget (but not a nested editable).\n        const draggableWidget = target ? findDraggableWidget(target) : null;\n        if (draggableWidget) {\n            const modelElement = editor.editing.mapper.toModelElement(draggableWidget);\n            this._draggedRange = LiveRange.fromRange(model.createRangeOn(modelElement));\n            this._blockMode = model.schema.isBlock(modelElement);\n            // Disable toolbars so they won't obscure the drop area.\n            if (editor.plugins.has('WidgetToolbarRepository')) {\n                const widgetToolbarRepository = editor.plugins.get('WidgetToolbarRepository');\n                widgetToolbarRepository.forceDisabled('dragDrop');\n            }\n            return;\n        }\n        // If this was not a widget we should check if we need to drag some text content.\n        if (selection.isCollapsed && !selection.getFirstPosition().parent.isEmpty) {\n            return;\n        }\n        const blocks = Array.from(selection.getSelectedBlocks());\n        const draggedRange = selection.getFirstRange();\n        if (blocks.length == 0) {\n            this._draggedRange = LiveRange.fromRange(draggedRange);\n            return;\n        }\n        const blockRange = getRangeIncludingFullySelectedParents(model, blocks);\n        if (blocks.length > 1) {\n            this._draggedRange = LiveRange.fromRange(blockRange);\n            this._blockMode = true;\n            // TODO block mode for dragging from outside editor? or inline? or both?\n        }\n        else if (blocks.length == 1) {\n            const touchesBlockEdges = draggedRange.start.isTouching(blockRange.start) &&\n                draggedRange.end.isTouching(blockRange.end);\n            this._draggedRange = LiveRange.fromRange(touchesBlockEdges ? blockRange : draggedRange);\n            this._blockMode = touchesBlockEdges;\n        }\n        model.change(writer => writer.setSelection(this._draggedRange.toRange()));\n    }\n    /**\n     * Updates the dragged preview image.\n     */\n    _updatePreview({ dataTransfer, domTarget, clientX }) {\n        const view = this.editor.editing.view;\n        const editable = view.document.selection.editableElement;\n        const domEditable = view.domConverter.mapViewToDom(editable);\n        const computedStyle = global.window.getComputedStyle(domEditable);\n        if (!this._previewContainer) {\n            this._previewContainer = createElement(global.document, 'div', {\n                style: 'position: fixed; left: -999999px;'\n            });\n            global.document.body.appendChild(this._previewContainer);\n        }\n        else if (this._previewContainer.firstElementChild) {\n            this._previewContainer.removeChild(this._previewContainer.firstElementChild);\n        }\n        const domRect = new Rect(domEditable);\n        // If domTarget is inside the editable root, browsers will display the preview correctly by themselves.\n        if (domEditable.contains(domTarget)) {\n            return;\n        }\n        const domEditablePaddingLeft = parseFloat(computedStyle.paddingLeft);\n        const preview = createElement(global.document, 'div');\n        preview.className = 'ck ck-content';\n        preview.style.width = computedStyle.width;\n        preview.style.paddingLeft = `${domRect.left - clientX + domEditablePaddingLeft}px`;\n        /**\n         * Set white background in drag and drop preview if iOS.\n         * Check: https://github.com/ckeditor/ckeditor5/issues/15085\n         */\n        if (env.isiOS) {\n            preview.style.backgroundColor = 'white';\n        }\n        view.domConverter.setContentOf(preview, dataTransfer.getData('text/html'));\n        dataTransfer.setDragImage(preview, 0, 0);\n        this._previewContainer.appendChild(preview);\n    }\n}\n/**\n * Returns the drop effect that should be a result of dragging the content.\n * This function is handling a quirk when checking the effect in the 'drop' DOM event.\n */\nfunction getFinalDropEffect(dataTransfer) {\n    if (env.isGecko) {\n        return dataTransfer.dropEffect;\n    }\n    return ['all', 'copyMove'].includes(dataTransfer.effectAllowed) ? 'move' : 'copy';\n}\n/**\n * Returns a widget element that should be dragged.\n */\nfunction findDraggableWidget(target) {\n    // This is directly an editable so not a widget for sure.\n    if (target.is('editableElement')) {\n        return null;\n    }\n    // TODO: Let's have a isWidgetSelectionHandleDomElement() helper in ckeditor5-widget utils.\n    if (target.hasClass('ck-widget__selection-handle')) {\n        return target.findAncestor(isWidget);\n    }\n    // Direct hit on a widget.\n    if (isWidget(target)) {\n        return target;\n    }\n    // Find closest ancestor that is either a widget or an editable element...\n    const ancestor = target.findAncestor(node => isWidget(node) || node.is('editableElement'));\n    // ...and if closer was the widget then enable dragging it.\n    if (isWidget(ancestor)) {\n        return ancestor;\n    }\n    return null;\n}\n/**\n * Recursively checks if common parent of provided elements doesn't have any other children. If that's the case,\n * it returns range including this parent. Otherwise, it returns only the range from first to last element.\n *\n * Example:\n *\n * <blockQuote>\n *   <paragraph>[Test 1</paragraph>\n *   <paragraph>Test 2</paragraph>\n *   <paragraph>Test 3]</paragraph>\n * <blockQuote>\n *\n * Because all elements inside the `blockQuote` are selected, the range is extended to include the `blockQuote` too.\n * If only first and second paragraphs would be selected, the range would not include it.\n */\nfunction getRangeIncludingFullySelectedParents(model, elements) {\n    const firstElement = elements[0];\n    const lastElement = elements[elements.length - 1];\n    const parent = firstElement.getCommonAncestor(lastElement);\n    const startPosition = model.createPositionBefore(firstElement);\n    const endPosition = model.createPositionAfter(lastElement);\n    if (parent &&\n        parent.is('element') &&\n        !model.schema.isLimit(parent)) {\n        const parentRange = model.createRangeOn(parent);\n        const touchesStart = startPosition.isTouching(parentRange.start);\n        const touchesEnd = endPosition.isTouching(parentRange.end);\n        if (touchesStart && touchesEnd) {\n            // Selection includes all elements in the parent.\n            return getRangeIncludingFullySelectedParents(model, [parent]);\n        }\n    }\n    return model.createRange(startPosition, endPosition);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/pasteplaintext\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport ClipboardObserver from './clipboardobserver.js';\nimport ClipboardPipeline from './clipboardpipeline.js';\n/**\n * The plugin detects the user's intention to paste plain text.\n *\n * For example, it detects the <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd> keystroke.\n */\nexport default class PastePlainText extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'PastePlainText';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ClipboardPipeline];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        const view = editor.editing.view;\n        const selection = model.document.selection;\n        view.addObserver(ClipboardObserver);\n        editor.plugins.get(ClipboardPipeline).on('contentInsertion', (evt, data) => {\n            if (!isUnformattedInlineContent(data.content, model)) {\n                return;\n            }\n            model.change(writer => {\n                // Formatting attributes should be preserved.\n                const textAttributes = Array.from(selection.getAttributes())\n                    .filter(([key]) => model.schema.getAttributeProperties(key).isFormatting);\n                if (!selection.isCollapsed) {\n                    model.deleteContent(selection, { doNotAutoparagraph: true });\n                }\n                // Also preserve other attributes if they survived the content deletion (because they were not fully selected).\n                // For example linkHref is not a formatting attribute but it should be preserved if pasted text was in the middle\n                // of a link.\n                textAttributes.push(...selection.getAttributes());\n                const range = writer.createRangeIn(data.content);\n                for (const item of range.getItems()) {\n                    for (const attribute of textAttributes) {\n                        if (model.schema.checkAttribute(item, attribute[0])) {\n                            writer.setAttribute(attribute[0], attribute[1], item);\n                        }\n                    }\n                }\n            });\n        });\n    }\n}\n/**\n * Returns true if specified `documentFragment` represents the unformatted inline content.\n */\nfunction isUnformattedInlineContent(documentFragment, model) {\n    let range = model.createRangeIn(documentFragment);\n    // We consider three scenarios here. The document fragment may include:\n    //\n    // 1. Only text and inline objects. Then it could be unformatted inline content.\n    // 2. Exactly one block element on top-level, eg. <p>Foobar</p> or <h2>Title</h2>.\n    //    In this case, check this element content, it could be treated as unformatted inline content.\n    // 3. More block elements or block objects, then it is not unformatted inline content.\n    //\n    // We will check for scenario 2. specifically, and if it happens, we will unwrap it and follow with the regular algorithm.\n    //\n    if (documentFragment.childCount == 1) {\n        const child = documentFragment.getChild(0);\n        if (child.is('element') && model.schema.isBlock(child) && !model.schema.isObject(child) && !model.schema.isLimit(child)) {\n            // Scenario 2. as described above.\n            range = model.createRangeIn(child);\n        }\n    }\n    for (const child of range.getItems()) {\n        if (!model.schema.isInline(child)) {\n            return false;\n        }\n        const attributeKeys = Array.from(child.getAttributeKeys());\n        if (attributeKeys.find(key => model.schema.getAttributeProperties(key).isFormatting)) {\n            return false;\n        }\n    }\n    return true;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module clipboard/clipboard\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport ClipboardPipeline from './clipboardpipeline.js';\nimport DragDrop from './dragdrop.js';\nimport PastePlainText from './pasteplaintext.js';\nimport ClipboardMarkersUtils from './clipboardmarkersutils.js';\n/**\n * The clipboard feature.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n * * {@link module:clipboard/clipboardpipeline~ClipboardPipeline}\n * * {@link module:clipboard/dragdrop~DragDrop}\n * * {@link module:clipboard/pasteplaintext~PastePlainText}\n */\nexport default class Clipboard extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Clipboard';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ClipboardMarkersUtils, ClipboardPipeline, DragDrop, PastePlainText];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = this.editor.t;\n        // Add the information about the keystrokes to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Copy selected content'),\n                    keystroke: 'CTRL+C'\n                },\n                {\n                    label: t('Paste content'),\n                    keystroke: 'CTRL+V'\n                },\n                {\n                    label: t('Paste content as plain text'),\n                    keystroke: 'CTRL+SHIFT+V'\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module select-all/selectallcommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\n/**\n * The select all command.\n *\n * It is used by the {@link module:select-all/selectallediting~SelectAllEditing select all editing feature} to handle\n * the <kbd>Ctrl/⌘</kbd>+<kbd>A</kbd> keystroke.\n *\n * Executing this command changes the {@glink framework/architecture/editing-engine#model model}\n * selection so it contains the entire content of the editable root of the editor the selection is\n * {@link module:engine/model/selection~Selection#anchor anchored} in.\n *\n * If the selection was anchored in a {@glink framework/tutorials/widgets/implementing-a-block-widget nested editable}\n * (e.g. a caption of an image), the new selection will contain its entire content. Successive executions of this command\n * will expand the selection to encompass more and more content up to the entire editable root of the editor.\n */\nexport default class SelectAllCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        // It does not affect data so should be enabled in read-only mode.\n        this.affectsData = false;\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        let scopeElement = model.schema.getLimitElement(selection);\n        // If an entire scope is selected, or the selection's ancestor is not a scope yet,\n        // browse through ancestors to find the enclosing parent scope.\n        if (selection.containsEntireContent(scopeElement) || !isSelectAllScope(model.schema, scopeElement)) {\n            do {\n                scopeElement = scopeElement.parent;\n                // Do nothing, if the entire `root` is already selected.\n                if (!scopeElement) {\n                    return;\n                }\n            } while (!isSelectAllScope(model.schema, scopeElement));\n        }\n        model.change(writer => {\n            writer.setSelection(scopeElement, 'in');\n        });\n    }\n}\n/**\n * Checks whether the element is a valid select-all scope. Returns true, if the element is a\n * {@link module:engine/model/schema~Schema#isLimit limit}, and can contain any text or paragraph.\n *\n * @param schema Schema to check against.\n * @param element Model element.\n */\nfunction isSelectAllScope(schema, element) {\n    return schema.isLimit(element) && (schema.checkChild(element, '$text') || schema.checkChild(element, 'paragraph'));\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module select-all/selectallediting\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { getCode, parseKeystroke } from '@ckeditor/ckeditor5-utils';\nimport SelectAllCommand from './selectallcommand.js';\nconst SELECT_ALL_KEYSTROKE = /* #__PURE__ */ parseKeystroke('Ctrl+A');\n/**\n * The select all editing feature.\n *\n * It registers the `'selectAll'` {@link module:select-all/selectallcommand~SelectAllCommand command}\n * and the <kbd>Ctrl/⌘</kbd>+<kbd>A</kbd> keystroke listener which executes it.\n */\nexport default class SelectAllEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'SelectAllEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.t;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        editor.commands.add('selectAll', new SelectAllCommand(editor));\n        this.listenTo(viewDocument, 'keydown', (eventInfo, domEventData) => {\n            if (getCode(domEventData) === SELECT_ALL_KEYSTROKE) {\n                editor.execute('selectAll');\n                domEventData.preventDefault();\n            }\n        });\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Select all'),\n                    keystroke: 'CTRL+A'\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module select-all/selectallui\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport { ButtonView, MenuBarMenuListItemButtonView } from '@ckeditor/ckeditor5-ui';\nimport selectAllIcon from '../theme/icons/select-all.svg';\n/**\n * The select all UI feature.\n *\n * It registers the `'selectAll'` UI button in the editor's\n * {@link module:ui/componentfactory~ComponentFactory component factory}. When clicked, the button\n * executes the {@link module:select-all/selectallcommand~SelectAllCommand select all command}.\n */\nexport default class SelectAllUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'SelectAllUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        editor.ui.componentFactory.add('selectAll', () => {\n            const buttonView = this._createButton(ButtonView);\n            buttonView.set({\n                tooltip: true\n            });\n            return buttonView;\n        });\n        editor.ui.componentFactory.add('menuBar:selectAll', () => {\n            return this._createButton(MenuBarMenuListItemButtonView);\n        });\n    }\n    /**\n     * Creates a button for select all command to use either in toolbar or in menu bar.\n     */\n    _createButton(ButtonClass) {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const command = editor.commands.get('selectAll');\n        const view = new ButtonClass(editor.locale);\n        const t = locale.t;\n        view.set({\n            label: t('Select all'),\n            icon: selectAllIcon,\n            keystroke: 'Ctrl+A'\n        });\n        view.bind('isEnabled').to(command, 'isEnabled');\n        // Execute the command.\n        this.listenTo(view, 'execute', () => {\n            editor.execute('selectAll');\n            editor.editing.view.focus();\n        });\n        return view;\n    }\n}\n", "export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 20 20\\\"><path d=\\\"M.75 15.5a.75.75 0 0 1 .75.75V18l.008.09A.5.5 0 0 0 2 18.5h1.75a.75.75 0 1 1 0 1.5H1.5l-.144-.007a1.5 1.5 0 0 1-1.35-1.349L0 18.5v-2.25a.75.75 0 0 1 .75-.75zm18.5 0a.75.75 0 0 1 .75.75v2.25l-.007.144a1.5 1.5 0 0 1-1.349 1.35L18.5 20h-2.25a.75.75 0 1 1 0-1.5H18a.5.5 0 0 0 .492-.41L18.5 18v-1.75a.75.75 0 0 1 .75-.75zm-10.45 3c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2H7.2a.2.2 0 0 1-.2-.2v-1.1c0-.11.09-.2.2-.2h1.6zm4 0c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2h-1.6a.2.2 0 0 1-.2-.2v-1.1c0-.11.09-.2.2-.2h1.6zm.45-5.5a.75.75 0 1 1 0 1.5h-8.5a.75.75 0 1 1 0-1.5h8.5zM1.3 11c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2H.2a.2.2 0 0 1-.2-.2v-1.6c0-.11.09-.2.2-.2h1.1zm18.5 0c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2h-1.1a.2.2 0 0 1-.2-.2v-1.6c0-.11.09-.2.2-.2h1.1zm-4.55-2a.75.75 0 1 1 0 1.5H4.75a.75.75 0 1 1 0-1.5h10.5zM1.3 7c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2H.2a.2.2 0 0 1-.2-.2V7.2c0-.11.09-.2.2-.2h1.1zm18.5 0c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2h-1.1a.2.2 0 0 1-.2-.2V7.2c0-.11.09-.2.2-.2h1.1zm-4.55-2a.75.75 0 1 1 0 1.5h-2.5a.75.75 0 1 1 0-1.5h2.5zm-5 0a.75.75 0 1 1 0 1.5h-5.5a.75.75 0 0 1 0-1.5h5.5zm-6.5-5a.75.75 0 0 1 0 1.5H2a.5.5 0 0 0-.492.41L1.5 2v1.75a.75.75 0 0 1-1.5 0V1.5l.007-.144A1.5 1.5 0 0 1 1.356.006L1.5 0h2.25zM18.5 0l.144.007a1.5 1.5 0 0 1 1.35 1.349L20 1.5v2.25a.75.75 0 1 1-1.5 0V2l-.008-.09A.5.5 0 0 0 18 1.5h-1.75a.75.75 0 1 1 0-1.5h2.25zM8.8 0c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2H7.2a.2.2 0 0 1-.2-.2V.2c0-.11.09-.2.2-.2h1.6zm4 0c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2h-1.6a.2.2 0 0 1-.2-.2V.2c0-.11.09-.2.2-.2h1.6z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module select-all/selectall\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport SelectAllEditing from './selectallediting.js';\nimport SelectAllUI from './selectallui.js';\n/**\n * The select all feature.\n *\n * This is a \"glue\" plugin which loads the {@link module:select-all/selectallediting~SelectAllEditing select all editing feature}\n * and the {@link module:select-all/selectallui~SelectAllUI select all UI feature}.\n *\n * Please refer to the documentation of individual features to learn more.\n */\nexport default class SelectAll extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [SelectAllEditing, SelectAllUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'SelectAll';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module undo/basecommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport { transformSets, NoOperation } from '@ckeditor/ckeditor5-engine';\n/**\n * Base class for the undo feature commands: {@link module:undo/undocommand~UndoCommand} and {@link module:undo/redocommand~RedoCommand}.\n */\nexport default class BaseCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        /**\n         * Stack of items stored by the command. These are pairs of:\n         *\n         * * {@link module:engine/model/batch~Batch batch} saved by the command,\n         * * {@link module:engine/model/selection~Selection selection} state at the moment of saving the batch.\n         */\n        this._stack = [];\n        /**\n         * Stores all batches that were created by this command.\n         *\n         * @internal\n         */\n        this._createdBatches = new WeakSet();\n        // Refresh state, so the command is inactive right after initialization.\n        this.refresh();\n        // This command should not depend on selection change.\n        this._isEnabledBasedOnSelection = false;\n        // Set the transparent batch for the `editor.data.set()` call if the\n        // batch type is not set already.\n        this.listenTo(editor.data, 'set', (evt, data) => {\n            // Create a shallow copy of the options to not change the original args.\n            // And make sure that an object is assigned to data[ 1 ].\n            data[1] = { ...data[1] };\n            const options = data[1];\n            // If batch type is not set, default to non-undoable batch.\n            if (!options.batchType) {\n                options.batchType = { isUndoable: false };\n            }\n        }, { priority: 'high' });\n        // Clear the stack for the `transparent` batches.\n        this.listenTo(editor.data, 'set', (evt, data) => {\n            // We can assume that the object exists and it has a `batchType` property.\n            // It was ensured with a higher priority listener before.\n            const options = data[1];\n            if (!options.batchType.isUndoable) {\n                this.clearStack();\n            }\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        this.isEnabled = this._stack.length > 0;\n    }\n    /**\n     * Returns all batches created by this command.\n     */\n    get createdBatches() {\n        return this._createdBatches;\n    }\n    /**\n     * Stores a batch in the command, together with the selection state of the {@link module:engine/model/document~Document document}\n     * created by the editor which this command is registered to.\n     *\n     * @param batch The batch to add.\n     */\n    addBatch(batch) {\n        const docSelection = this.editor.model.document.selection;\n        const selection = {\n            ranges: docSelection.hasOwnRange ? Array.from(docSelection.getRanges()) : [],\n            isBackward: docSelection.isBackward\n        };\n        this._stack.push({ batch, selection });\n        this.refresh();\n    }\n    /**\n     * Removes all items from the stack.\n     */\n    clearStack() {\n        this._stack = [];\n        this.refresh();\n    }\n    /**\n     * Restores the {@link module:engine/model/document~Document#selection document selection} state after a batch was undone.\n     *\n     * @param ranges Ranges to be restored.\n     * @param isBackward A flag describing whether the restored range was selected forward or backward.\n     * @param operations Operations which has been applied since selection has been stored.\n     */\n    _restoreSelection(ranges, isBackward, operations) {\n        const model = this.editor.model;\n        const document = model.document;\n        // This will keep the transformed selection ranges.\n        const selectionRanges = [];\n        // Transform all ranges from the restored selection.\n        const transformedRangeGroups = ranges.map(range => range.getTransformedByOperations(operations));\n        const allRanges = transformedRangeGroups.flat();\n        for (const rangeGroup of transformedRangeGroups) {\n            // While transforming there could appear ranges that are contained by other ranges, we shall ignore them.\n            const transformed = rangeGroup\n                .filter(range => range.root != document.graveyard)\n                .filter(range => !isRangeContainedByAnyOtherRange(range, allRanges));\n            // All the transformed ranges ended up in graveyard.\n            if (!transformed.length) {\n                continue;\n            }\n            // After the range got transformed, we have an array of ranges. Some of those\n            // ranges may be \"touching\" -- they can be next to each other and could be merged.\n            normalizeRanges(transformed);\n            // For each `range` from `ranges`, we take only one transformed range.\n            // This is because we want to prevent situation where single-range selection\n            // got transformed to multi-range selection.\n            selectionRanges.push(transformed[0]);\n        }\n        // @if CK_DEBUG_ENGINE // console.log( `Restored selection by undo: ${ selectionRanges.join( ', ' ) }` );\n        // `selectionRanges` may be empty if all ranges ended up in graveyard. If that is the case, do not restore selection.\n        if (selectionRanges.length) {\n            model.change(writer => {\n                writer.setSelection(selectionRanges, { backward: isBackward });\n            });\n        }\n    }\n    /**\n     * Undoes a batch by reversing that batch, transforming reversed batch and finally applying it.\n     * This is a helper method for {@link #execute}.\n     *\n     * @param batchToUndo The batch to be undone.\n     * @param undoingBatch The batch that will contain undoing changes.\n     */\n    _undo(batchToUndo, undoingBatch) {\n        const model = this.editor.model;\n        const document = model.document;\n        // All changes done by the command execution will be saved as one batch.\n        this._createdBatches.add(undoingBatch);\n        const operationsToUndo = batchToUndo.operations.slice().filter(operation => operation.isDocumentOperation);\n        operationsToUndo.reverse();\n        // We will process each operation from `batchToUndo`, in reverse order. If there were operations A, B and C in undone batch,\n        // we need to revert them in reverse order, so first C' (reversed C), then B', then A'.\n        for (const operationToUndo of operationsToUndo) {\n            const nextBaseVersion = operationToUndo.baseVersion + 1;\n            const historyOperations = Array.from(document.history.getOperations(nextBaseVersion));\n            const transformedSets = transformSets([operationToUndo.getReversed()], historyOperations, {\n                useRelations: true,\n                document: this.editor.model.document,\n                padWithNoOps: false,\n                forceWeakRemove: true\n            });\n            const reversedOperations = transformedSets.operationsA;\n            // After reversed operation has been transformed by all history operations, apply it.\n            for (let operation of reversedOperations) {\n                // Do not apply any operation on non-editable space.\n                const affectedSelectable = operation.affectedSelectable;\n                if (affectedSelectable && !model.canEditAt(affectedSelectable)) {\n                    operation = new NoOperation(operation.baseVersion);\n                }\n                // Before applying, add the operation to the `undoingBatch`.\n                undoingBatch.addOperation(operation);\n                model.applyOperation(operation);\n                document.history.setOperationAsUndone(operationToUndo, operation);\n            }\n        }\n    }\n}\n/**\n * Normalizes list of ranges by joining intersecting or \"touching\" ranges.\n *\n * @param ranges Ranges to be normalized.\n */\nfunction normalizeRanges(ranges) {\n    ranges.sort((a, b) => a.start.isBefore(b.start) ? -1 : 1);\n    for (let i = 1; i < ranges.length; i++) {\n        const previousRange = ranges[i - 1];\n        const joinedRange = previousRange.getJoined(ranges[i], true);\n        if (joinedRange) {\n            // Replace the ranges on the list with the new joined range.\n            i--;\n            ranges.splice(i, 2, joinedRange);\n        }\n    }\n}\nfunction isRangeContainedByAnyOtherRange(range, ranges) {\n    return ranges.some(otherRange => otherRange !== range && otherRange.containsRange(range, true));\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module undo/undocommand\n */\nimport BaseCommand from './basecommand.js';\n/**\n * The undo command stores {@link module:engine/model/batch~Batch batches} applied to the\n * {@link module:engine/model/document~Document document} and is able to undo a batch by reversing it and transforming by\n * batches from {@link module:engine/model/document~Document#history history} that happened after the reversed batch.\n *\n * The undo command also takes care of restoring the {@link module:engine/model/document~Document#selection document selection}.\n */\nexport default class UndoCommand extends BaseCommand {\n    /**\n     * Executes the command. This method reverts a {@link module:engine/model/batch~Batch batch} added to the command's stack, transforms\n     * and applies the reverted version on the {@link module:engine/model/document~Document document} and removes the batch from the stack.\n     * Then, it restores the {@link module:engine/model/document~Document#selection document selection}.\n     *\n     * @fires execute\n     * @fires revert\n     * @param batch A batch that should be undone. If not set, the last added batch will be undone.\n     */\n    execute(batch = null) {\n        // If batch is not given, set `batchIndex` to the last index in command stack.\n        const batchIndex = batch ? this._stack.findIndex(a => a.batch == batch) : this._stack.length - 1;\n        const item = this._stack.splice(batchIndex, 1)[0];\n        const undoingBatch = this.editor.model.createBatch({ isUndo: true });\n        // All changes have to be done in one `enqueueChange` callback so other listeners will not\n        // step between consecutive operations, or won't do changes to the document before selection is properly restored.\n        this.editor.model.enqueueChange(undoingBatch, () => {\n            this._undo(item.batch, undoingBatch);\n            const operations = this.editor.model.document.history.getOperations(item.batch.baseVersion);\n            this._restoreSelection(item.selection.ranges, item.selection.isBackward, operations);\n        });\n        // Firing `revert` event after the change block to make sure that it includes all changes from post-fixers\n        // and make sure that the selection is \"stabilized\" (the selection range is saved after undo is executed and then\n        // restored on redo, so it is important that the selection range is saved after post-fixers are done).\n        this.fire('revert', item.batch, undoingBatch);\n        this.refresh();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module undo/redocommand\n */\nimport BaseCommand from './basecommand.js';\n/**\n * The redo command stores {@link module:engine/model/batch~Batch batches} that were used to undo a batch by\n * {@link module:undo/undocommand~UndoCommand}. It is able to redo a previously undone batch by reversing the undoing\n * batches created by `UndoCommand`. The reversed batch is transformed by all the batches from\n * {@link module:engine/model/document~Document#history history} that happened after the reversed undo batch.\n *\n * The redo command also takes care of restoring the {@link module:engine/model/document~Document#selection document selection}.\n */\nexport default class RedoCommand extends BaseCommand {\n    /**\n     * Executes the command. This method reverts the last {@link module:engine/model/batch~Batch batch} added to\n     * the command's stack, applies the reverted and transformed version on the\n     * {@link module:engine/model/document~Document document} and removes the batch from the stack.\n     * Then, it restores the {@link module:engine/model/document~Document#selection document selection}.\n     *\n     * @fires execute\n     */\n    execute() {\n        const item = this._stack.pop();\n        const redoingBatch = this.editor.model.createBatch({ isUndo: true });\n        // All changes have to be done in one `enqueueChange` callback so other listeners will not step between consecutive\n        // operations, or won't do changes to the document before selection is properly restored.\n        this.editor.model.enqueueChange(redoingBatch, () => {\n            const lastOperation = item.batch.operations[item.batch.operations.length - 1];\n            const nextBaseVersion = lastOperation.baseVersion + 1;\n            const operations = this.editor.model.document.history.getOperations(nextBaseVersion);\n            this._restoreSelection(item.selection.ranges, item.selection.isBackward, operations);\n            this._undo(item.batch, redoingBatch);\n        });\n        this.refresh();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module undo/undoediting\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport UndoCommand from './undocommand.js';\nimport RedoCommand from './redocommand.js';\n/**\n * The undo engine feature.\n *\n * It introduces the `'undo'` and `'redo'` commands to the editor.\n */\nexport default class UndoEditing extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * Keeps track of which batches were registered in undo.\n         */\n        this._batchRegistry = new WeakSet();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'UndoEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.t;\n        // Create commands.\n        this._undoCommand = new UndoCommand(editor);\n        this._redoCommand = new RedoCommand(editor);\n        // Register command to the editor.\n        editor.commands.add('undo', this._undoCommand);\n        editor.commands.add('redo', this._redoCommand);\n        this.listenTo(editor.model, 'applyOperation', (evt, args) => {\n            const operation = args[0];\n            // Do not register batch if the operation is not a document operation.\n            // This prevents from creating empty undo steps, where all operations where non-document operations.\n            // Non-document operations creates and alters content in detached tree fragments (for example, document fragments).\n            // Most of time this is preparing data before it is inserted into actual tree (for example during copy & paste).\n            // Such operations should not be reversed.\n            if (!operation.isDocumentOperation) {\n                return;\n            }\n            const batch = operation.batch;\n            const isRedoBatch = this._redoCommand.createdBatches.has(batch);\n            const isUndoBatch = this._undoCommand.createdBatches.has(batch);\n            const wasProcessed = this._batchRegistry.has(batch);\n            // Skip the batch if it was already processed.\n            if (wasProcessed) {\n                return;\n            }\n            // Add the batch to the registry so it will not be processed again.\n            this._batchRegistry.add(batch);\n            if (!batch.isUndoable) {\n                return;\n            }\n            if (isRedoBatch) {\n                // If this batch comes from `redoCommand`, add it to the `undoCommand` stack.\n                this._undoCommand.addBatch(batch);\n            }\n            else if (!isUndoBatch) {\n                // If the batch comes neither  from `redoCommand` nor from `undoCommand` then it is a new, regular batch.\n                // Add the batch to the `undoCommand` stack and clear the `redoCommand` stack.\n                this._undoCommand.addBatch(batch);\n                this._redoCommand.clearStack();\n            }\n        }, { priority: 'highest' });\n        this.listenTo(this._undoCommand, 'revert', (evt, undoneBatch, undoingBatch) => {\n            this._redoCommand.addBatch(undoingBatch);\n        });\n        editor.keystrokes.set('CTRL+Z', 'undo');\n        editor.keystrokes.set('CTRL+Y', 'redo');\n        editor.keystrokes.set('CTRL+SHIFT+Z', 'redo');\n        // Add the information about the keystrokes to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Undo'),\n                    keystroke: 'CTRL+Z'\n                },\n                {\n                    label: t('Redo'),\n                    keystroke: [['CTRL+Y'], ['CTRL+SHIFT+Z']]\n                }\n            ]\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module undo/undoui\n */\nimport { icons, Plugin } from '@ckeditor/ckeditor5-core';\nimport { ButtonView, MenuBarMenuListItemButtonView } from '@ckeditor/ckeditor5-ui';\n/**\n * The undo UI feature. It introduces the `'undo'` and `'redo'` buttons to the editor.\n */\nexport default class UndoUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'UndoUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const t = editor.t;\n        const localizedUndoIcon = locale.uiLanguageDirection == 'ltr' ? icons.undo : icons.redo;\n        const localizedRedoIcon = locale.uiLanguageDirection == 'ltr' ? icons.redo : icons.undo;\n        this._addButtonsToFactory('undo', t('Undo'), 'CTRL+Z', localizedUndoIcon);\n        this._addButtonsToFactory('redo', t('Redo'), 'CTRL+Y', localizedRedoIcon);\n    }\n    /**\n     * Creates a button for the specified command.\n     *\n     * @param name Command name.\n     * @param label Button label.\n     * @param keystroke Command keystroke.\n     * @param Icon Source of the icon.\n     */\n    _addButtonsToFactory(name, label, keystroke, Icon) {\n        const editor = this.editor;\n        editor.ui.componentFactory.add(name, () => {\n            const buttonView = this._createButton(ButtonView, name, label, keystroke, Icon);\n            buttonView.set({\n                tooltip: true\n            });\n            return buttonView;\n        });\n        editor.ui.componentFactory.add('menuBar:' + name, () => {\n            return this._createButton(MenuBarMenuListItemButtonView, name, label, keystroke, Icon);\n        });\n    }\n    /**\n     * TODO\n     */\n    _createButton(ButtonClass, name, label, keystroke, Icon) {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const command = editor.commands.get(name);\n        const view = new ButtonClass(locale);\n        view.set({\n            label,\n            icon: Icon,\n            keystroke\n        });\n        view.bind('isEnabled').to(command, 'isEnabled');\n        this.listenTo(view, 'execute', () => {\n            editor.execute(name);\n            editor.editing.view.focus();\n        });\n        return view;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module undo/undo\n */\nimport { Plugin } from '@ckeditor/ckeditor5-core';\nimport UndoEditing from './undoediting.js';\nimport UndoUI from './undoui.js';\n/**\n * The undo feature.\n *\n * This is a \"glue\" plugin which loads the {@link module:undo/undoediting~UndoEditing undo editing feature}\n * and the {@link module:undo/undoui~UndoUI undo UI feature}.\n *\n * Below is an explanation of the undo mechanism working together with {@link module:engine/model/history~History History}:\n *\n * Whenever an {@link module:engine/model/operation/operation~Operation operation} is applied to the\n * {@link module:engine/model/document~Document document}, it is saved to `History` as is.\n * The {@link module:engine/model/batch~Batch batch} that owns that operation is also saved, in\n * {@link module:undo/undocommand~UndoCommand}, together with the selection that was present in the document before the\n * operation was applied. A batch is saved instead of the operation because changes are undone batch-by-batch, not operation-by-operation\n * and a batch is seen as one undo step.\n *\n * After changes happen to the document, the `History` and `UndoCommand` stack can be represented as follows:\n *\n * ```\n *    History                            Undo stack\n * ==============             ==================================\n * [operation A1]                      [  batch A  ]\n * [operation B1]                      [  batch B  ]\n * [operation B2]                      [  batch C  ]\n * [operation C1]\n * [operation C2]\n * [operation B3]\n * [operation C3]\n * ```\n *\n * Where operations starting with the same letter are from same batch.\n *\n * Undoing a batch means that a set of operations which will reverse the effects of that batch needs to be generated.\n * For example, if a batch added several letters, undoing the batch should remove them. It is important to apply undoing\n * operations in the reversed order, so if a batch has operation `X`, `Y`, `Z`, reversed operations `Zr`, `Yr` and `Xr`\n * need to be applied. Otherwise reversed operation `Xr` would operate on a wrong document state, because operation `X`\n * does not know that operations `Y` and `Z` happened.\n *\n * After operations from an undone batch got {@link module:engine/model/operation/operation~Operation#getReversed reversed},\n * one needs to make sure if they are ready to be applied. In the scenario above, operation `C3` is the last operation and `C3r`\n * bases on up-to-date document state, so it can be applied to the document.\n *\n * ```\n *      History                             Undo stack\n * =================             ==================================\n * [ operation A1  ]                      [  batch A  ]\n * [ operation B1  ]                      [  batch B  ]\n * [ operation B2  ]             [   processing undoing batch C   ]\n * [ operation C1  ]\n * [ operation C2  ]\n * [ operation B3  ]\n * [ operation C3  ]\n * [ operation C3r ]\n * ```\n *\n * Next is operation `C2`, reversed to `C2r`. `C2r` bases on `C2`, so it bases on the wrong document state. It needs to be\n * transformed by operations from history that happened after it, so it \"knows\" about them. Let us assume that `C2' = C2r * B3 * C3 * C3r`,\n * where `*` means \"transformed by\". Rest of operations from that batch are processed in the same fashion.\n *\n * ```\n *      History                             Undo stack                                      Redo stack\n * =================             ==================================             ==================================\n * [ operation A1  ]                      [  batch A  ]                                    [ batch Cr ]\n * [ operation B1  ]                      [  batch B  ]\n * [ operation B2  ]\n * [ operation C1  ]\n * [ operation C2  ]\n * [ operation B3  ]\n * [ operation C3  ]\n * [ operation C3r ]\n * [ operation C2' ]\n * [ operation C1' ]\n * ```\n *\n * Selective undo works on the same basis, however, instead of undoing the last batch in the undo stack, any batch can be undone.\n * The same algorithm applies: operations from a batch (i.e. `A1`) are reversed and then transformed by operations stored in history.\n *\n * Redo also is very similar to undo. It has its own stack that is filled with undoing (reversed batches). Operations from\n * the batch that is re-done are reversed-back, transformed in proper order and applied to the document.\n *\n * ```\n *      History                             Undo stack                                      Redo stack\n * =================             ==================================             ==================================\n * [ operation A1  ]                      [  batch A  ]\n * [ operation B1  ]                      [  batch B  ]\n * [ operation B2  ]                      [ batch Crr ]\n * [ operation C1  ]\n * [ operation C2  ]\n * [ operation B3  ]\n * [ operation C3  ]\n * [ operation C3r ]\n * [ operation C2' ]\n * [ operation C1' ]\n * [ operation C1'r]\n * [ operation C2'r]\n * [ operation C3rr]\n * ```\n */\nexport default class Undo extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [UndoEditing, UndoUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Undo';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The base font command.\n */\nexport default class FontCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param editor Editor instance.\n     * @param attributeKey The name of a model attribute on which this command operates.\n     */\n    constructor(editor, attributeKey) {\n        super(editor);\n        this.attributeKey = attributeKey;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const doc = model.document;\n        this.value = doc.selection.getAttribute(this.attributeKey);\n        this.isEnabled = model.schema.checkAttributeInSelection(doc.selection, this.attributeKey);\n    }\n    /**\n     * Executes the command. Applies the `value` of the {@link #attributeKey} to the selection.\n     * If no `value` is passed, it removes the attribute from the selection.\n     *\n     * @param options Options for the executed command.\n     * @param options.value The value to apply.\n     * @fires execute\n     */\n    execute(options = {}) {\n        const model = this.editor.model;\n        const document = model.document;\n        const selection = document.selection;\n        const value = options.value;\n        const batch = options.batch;\n        const updateAttribute = (writer) => {\n            if (selection.isCollapsed) {\n                if (value) {\n                    writer.setSelectionAttribute(this.attributeKey, value);\n                }\n                else {\n                    writer.removeSelectionAttribute(this.attributeKey);\n                }\n            }\n            else {\n                const ranges = model.schema.getValidRanges(selection.getRanges(), this.attributeKey);\n                for (const range of ranges) {\n                    if (value) {\n                        writer.setAttribute(this.attributeKey, value, range);\n                    }\n                    else {\n                        writer.removeAttribute(this.attributeKey, range);\n                    }\n                }\n            }\n        };\n        // In some scenarios, you may want to use a single undo step for multiple changes (e.g. in color picker).\n        if (batch) {\n            model.enqueueChange(batch, writer => {\n                updateAttribute(writer);\n            });\n        }\n        else {\n            model.change(writer => {\n                updateAttribute(writer);\n            });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { ColorSelectorView } from 'ckeditor5/src/ui.js';\n/**\n * The name of the font size plugin.\n */\nexport const FONT_SIZE = 'fontSize';\n/**\n * The name of the font family plugin.\n */\nexport const FONT_FAMILY = 'fontFamily';\n/**\n * The name of the font color plugin.\n */\nexport const FONT_COLOR = 'fontColor';\n/**\n * The name of the font background color plugin.\n */\nexport const FONT_BACKGROUND_COLOR = 'fontBackgroundColor';\n/**\n * Builds a proper converter definition out of input data.\n */\nexport function buildDefinition(modelAttributeKey, options) {\n    const definition = {\n        model: {\n            key: modelAttributeKey,\n            values: []\n        },\n        view: {},\n        upcastAlso: {}\n    };\n    for (const option of options) {\n        definition.model.values.push(option.model);\n        definition.view[option.model] = option.view;\n        if (option.upcastAlso) {\n            definition.upcastAlso[option.model] = option.upcastAlso;\n        }\n    }\n    return definition;\n}\n/**\n * A {@link module:font/fontcolor~FontColor font color} and\n * {@link module:font/fontbackgroundcolor~FontBackgroundColor font background color} helper\n * responsible for upcasting data to the model.\n *\n * **Note**: The `styleAttr` parameter should be either `'color'` or `'background-color'`.\n */\nexport function renderUpcastAttribute(styleAttr) {\n    return (viewElement) => normalizeColorCode(viewElement.getStyle(styleAttr));\n}\n/**\n * A {@link module:font/fontcolor~FontColor font color} and\n * {@link module:font/fontbackgroundcolor~FontBackgroundColor font background color} helper\n * responsible for downcasting a color attribute to a `<span>` element.\n *\n * **Note**: The `styleAttr` parameter should be either `'color'` or `'background-color'`.\n */\nexport function renderDowncastElement(styleAttr) {\n    return (modelAttributeValue, { writer }) => writer.createAttributeElement('span', {\n        style: `${styleAttr}:${modelAttributeValue}`\n    }, { priority: 7 });\n}\n/**\n * A helper that adds {@link module:ui/colorselector/colorselectorview~ColorSelectorView} to the color dropdown with proper initial values.\n *\n * @param config.dropdownView The dropdown view to which a {@link module:ui/colorselector/colorselectorview~ColorSelectorView}\n * will be added.\n * @param config.colors An array with definitions representing colors to be displayed in the color selector.\n * @param config.removeButtonLabel The label for the button responsible for removing the color.\n * @param config.documentColorsLabel The label for the section with document colors.\n * @param config.documentColorsCount The number of document colors inside the dropdown.\n * @param config.colorPickerViewConfig Configuration of the color picker view.\n * @returns The new color selector view.\n */\nexport function addColorSelectorToDropdown({ dropdownView, colors, columns, removeButtonLabel, colorPickerLabel, documentColorsLabel, documentColorsCount, colorPickerViewConfig }) {\n    const locale = dropdownView.locale;\n    const colorSelectorView = new ColorSelectorView(locale, {\n        colors,\n        columns,\n        removeButtonLabel,\n        colorPickerLabel,\n        documentColorsLabel,\n        documentColorsCount,\n        colorPickerViewConfig\n    });\n    dropdownView.colorSelectorView = colorSelectorView;\n    dropdownView.panelView.children.add(colorSelectorView);\n    return colorSelectorView;\n}\n/**\n * Fixes the color value string.\n */\nfunction normalizeColorCode(value) {\n    return value.replace(/\\s/g, '');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport FontCommand from '../fontcommand.js';\nimport { FONT_FAMILY } from '../utils.js';\n/**\n * The font family command. It is used by {@link module:font/fontfamily/fontfamilyediting~FontFamilyEditing}\n * to apply the font family.\n *\n * ```ts\n * editor.execute( 'fontFamily', { value: 'Arial' } );\n * ```\n *\n * **Note**: Executing the command without the value removes the attribute from the model.\n */\nexport default class FontFamilyCommand extends FontCommand {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor, FONT_FAMILY);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontfamily/utils\n */\n/**\n * Normalizes the {@link module:font/fontconfig~FontFamilyConfig#options configuration options}\n * to the {@link module:font/fontconfig~FontFamilyOption} format.\n *\n * @param configuredOptions An array of options taken from the configuration.\n */\nexport function normalizeOptions(configuredOptions) {\n    // Convert options to objects.\n    return configuredOptions\n        .map(getOptionDefinition)\n        // Filter out undefined values that `getOptionDefinition` might return.\n        .filter(option => option !== undefined);\n}\n/**\n * Returns an option definition either created from string shortcut.\n * If object is passed then this method will return it without alternating it. Returns undefined for item than cannot be parsed.\n *\n */\nfunction getOptionDefinition(option) {\n    // Treat any object as full item definition provided by user in configuration.\n    if (typeof option === 'object') {\n        return option;\n    }\n    // Handle 'default' string as a special case. It will be used to remove the fontFamily attribute.\n    if (option === 'default') {\n        return {\n            title: 'Default',\n            model: undefined\n        };\n    }\n    // Ignore values that we cannot parse to a definition.\n    if (typeof option !== 'string') {\n        return undefined;\n    }\n    // Return font family definition from font string.\n    return generateFontPreset(option);\n}\n/**\n * Creates a predefined preset for pixel size. It deconstructs font-family like string into full configuration option.\n * A font definition is passed as coma delimited set of font family names. Font names might be quoted.\n *\n * @param fontDefinition A font definition form configuration.\n */\nfunction generateFontPreset(fontDefinition) {\n    // Remove quotes from font names. They will be normalized later.\n    const fontNames = fontDefinition.replace(/\"|'/g, '').split(',');\n    // The first matched font name will be used as dropdown list item title and as model value.\n    const firstFontName = fontNames[0];\n    // CSS-compatible font names.\n    const cssFontNames = fontNames.map(normalizeFontNameForCSS).join(', ');\n    return {\n        title: firstFontName,\n        model: cssFontNames,\n        view: {\n            name: 'span',\n            styles: {\n                'font-family': cssFontNames\n            },\n            priority: 7\n        }\n    };\n}\n/**\n * Normalizes font name for the style attribute. It adds braces (') if font name contains spaces.\n */\nfunction normalizeFontNameForCSS(fontName) {\n    fontName = fontName.trim();\n    // Compound font names should be quoted.\n    if (fontName.indexOf(' ') > 0) {\n        fontName = `'${fontName}'`;\n    }\n    return fontName;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontfamily/fontfamilyediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport FontFamilyCommand from './fontfamilycommand.js';\nimport { normalizeOptions } from './utils.js';\nimport { buildDefinition, FONT_FAMILY } from '../utils.js';\n/**\n * The font family editing feature.\n *\n * It introduces the {@link module:font/fontfamily/fontfamilycommand~FontFamilyCommand command} and\n * the `fontFamily` attribute in the {@link module:engine/model/model~Model model} which renders\n * in the {@link module:engine/view/view view} as an inline `<span>` element (`<span style=\"font-family: Arial\">`),\n * depending on the {@link module:font/fontconfig~FontFamilyConfig configuration}.\n */\nexport default class FontFamilyEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontFamilyEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        // Define default configuration using font families shortcuts.\n        editor.config.define(FONT_FAMILY, {\n            options: [\n                'default',\n                'Arial, Helvetica, sans-serif',\n                'Courier New, Courier, monospace',\n                'Georgia, serif',\n                'Lucida Sans Unicode, Lucida Grande, sans-serif',\n                'Tahoma, Geneva, sans-serif',\n                'Times New Roman, Times, serif',\n                'Trebuchet MS, Helvetica, sans-serif',\n                'Verdana, Geneva, sans-serif'\n            ],\n            supportAllValues: false\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        // Allow fontFamily attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: FONT_FAMILY });\n        editor.model.schema.setAttributeProperties(FONT_FAMILY, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n        // Get configured font family options without \"default\" option.\n        const options = normalizeOptions(editor.config.get('fontFamily.options')).filter(item => item.model);\n        const definition = buildDefinition(FONT_FAMILY, options);\n        // Set-up the two-way conversion.\n        if (editor.config.get('fontFamily.supportAllValues')) {\n            this._prepareAnyValueConverters();\n            this._prepareCompatibilityConverter();\n        }\n        else {\n            editor.conversion.attributeToElement(definition);\n        }\n        editor.commands.add(FONT_FAMILY, new FontFamilyCommand(editor));\n    }\n    /**\n     * These converters enable keeping any value found as `style=\"font-family: *\"` as a value of an attribute on a text even\n     * if it is not defined in the plugin configuration.\n     */\n    _prepareAnyValueConverters() {\n        const editor = this.editor;\n        editor.conversion.for('downcast').attributeToElement({\n            model: FONT_FAMILY,\n            view: (attributeValue, { writer }) => {\n                return writer.createAttributeElement('span', { style: 'font-family:' + attributeValue }, { priority: 7 });\n            }\n        });\n        editor.conversion.for('upcast').elementToAttribute({\n            model: {\n                key: FONT_FAMILY,\n                value: (viewElement) => viewElement.getStyle('font-family')\n            },\n            view: {\n                name: 'span',\n                styles: {\n                    'font-family': /.*/\n                }\n            }\n        });\n    }\n    /**\n     * Adds support for legacy `<font face=\"..\">` formatting.\n     */\n    _prepareCompatibilityConverter() {\n        const editor = this.editor;\n        editor.conversion.for('upcast').elementToAttribute({\n            view: {\n                name: 'font',\n                attributes: {\n                    'face': /.*/\n                }\n            },\n            model: {\n                key: FONT_FAMILY,\n                value: (viewElement) => viewElement.getAttribute('face')\n            }\n        });\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.03 3h6.149a.75.75 0 1 1 0 1.5h-5.514L11.03 3zm1.27 3h4.879a.75.75 0 1 1 0 1.5h-4.244L12.3 6zm1.27 3h3.609a.75.75 0 1 1 0 1.5h-2.973L13.57 9zm-2.754 2.5L8.038 4.785 5.261 11.5h5.555zm.62 1.5H4.641l-1.666 4.028H1.312l5.789-14h1.875l5.789 14h-1.663L11.436 13z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontfamily/fontfamilyui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Collection } from 'ckeditor5/src/utils.js';\nimport { ViewModel, createDropdown, addListToDropdown, MenuBarMenuView, MenuBarMenuListView, MenuBarMenuListItemView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { normalizeOptions } from './utils.js';\nimport { FONT_FAMILY } from '../utils.js';\nimport fontFamilyIcon from '../../theme/icons/font-family.svg';\n/**\n * The font family UI plugin. It introduces the `'fontFamily'` dropdown.\n */\nexport default class FontFamilyUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontFamilyUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.t;\n        const options = this._getLocalizedOptions();\n        const command = editor.commands.get(FONT_FAMILY);\n        const accessibleLabel = t('Font Family');\n        const listOptions = _prepareListOptions(options, command);\n        // Register UI component.\n        editor.ui.componentFactory.add(FONT_FAMILY, locale => {\n            const dropdownView = createDropdown(locale);\n            addListToDropdown(dropdownView, listOptions, {\n                role: 'menu',\n                ariaLabel: accessibleLabel\n            });\n            dropdownView.buttonView.set({\n                label: accessibleLabel,\n                icon: fontFamilyIcon,\n                tooltip: true\n            });\n            dropdownView.extendTemplate({\n                attributes: {\n                    class: 'ck-font-family-dropdown'\n                }\n            });\n            dropdownView.bind('isEnabled').to(command);\n            // Execute command when an item from the dropdown is selected.\n            this.listenTo(dropdownView, 'execute', evt => {\n                editor.execute(evt.source.commandName, { value: evt.source.commandParam });\n                editor.editing.view.focus();\n            });\n            return dropdownView;\n        });\n        editor.ui.componentFactory.add(`menuBar:${FONT_FAMILY}`, locale => {\n            const menuView = new MenuBarMenuView(locale);\n            menuView.buttonView.set({\n                label: accessibleLabel,\n                icon: fontFamilyIcon\n            });\n            menuView.bind('isEnabled').to(command);\n            const listView = new MenuBarMenuListView(locale);\n            for (const definition of listOptions) {\n                const listItemView = new MenuBarMenuListItemView(locale, menuView);\n                const buttonView = new MenuBarMenuListItemButtonView(locale);\n                buttonView.set({\n                    role: 'menuitemradio',\n                    isToggleable: true\n                });\n                buttonView.bind(...Object.keys(definition.model)).to(definition.model);\n                buttonView.delegate('execute').to(menuView);\n                buttonView.on('execute', () => {\n                    editor.execute(definition.model.commandName, {\n                        value: definition.model.commandParam\n                    });\n                    editor.editing.view.focus();\n                });\n                listItemView.children.add(buttonView);\n                listView.items.add(listItemView);\n            }\n            menuView.panelView.children.add(listView);\n            return menuView;\n        });\n    }\n    /**\n     * Returns options as defined in `config.fontFamily.options` but processed to account for\n     * editor localization, i.e. to display {@link module:font/fontconfig~FontFamilyOption}\n     * in the correct language.\n     *\n     * Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n     * when the user configuration is defined because the editor does not exist yet.\n     */\n    _getLocalizedOptions() {\n        const editor = this.editor;\n        const t = editor.t;\n        const options = normalizeOptions((editor.config.get(FONT_FAMILY)).options);\n        return options.map(option => {\n            // The only title to localize is \"Default\" others are font names.\n            if (option.title === 'Default') {\n                option.title = t('Default');\n            }\n            return option;\n        });\n    }\n}\n/**\n * Prepares FontFamily dropdown items.\n */\nfunction _prepareListOptions(options, command) {\n    const itemDefinitions = new Collection();\n    // Create dropdown items.\n    for (const option of options) {\n        const def = {\n            type: 'button',\n            model: new ViewModel({\n                commandName: FONT_FAMILY,\n                commandParam: option.model,\n                label: option.title,\n                role: 'menuitemradio',\n                withText: true\n            })\n        };\n        def.model.bind('isOn').to(command, 'value', value => {\n            // \"Default\" or check in strict font-family converters mode.\n            if (value === option.model) {\n                return true;\n            }\n            if (!value || !option.model) {\n                return false;\n            }\n            return value.split(',')[0].replace(/'/g, '').toLowerCase() === option.model.toLowerCase();\n        });\n        // Try to set a dropdown list item style.\n        if (option.view && typeof option.view !== 'string' && option.view.styles) {\n            def.model.set('labelStyle', `font-family: ${option.view.styles['font-family']}`);\n        }\n        itemDefinitions.add(def);\n    }\n    return itemDefinitions;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontfamily\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport FontFamilyEditing from './fontfamily/fontfamilyediting.js';\nimport FontFamilyUI from './fontfamily/fontfamilyui.js';\n/**\n * The font family plugin.\n *\n * For a detailed overview, check the {@glink features/font font feature} documentatiom\n * and the {@glink api/font package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:font/fontfamily/fontfamilyediting~FontFamilyEditing} and\n * {@link module:font/fontfamily/fontfamilyui~FontFamilyUI} features in the editor.\n */\nexport default class FontFamily extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [FontFamilyEditing, FontFamilyUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontFamily';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport FontCommand from '../fontcommand.js';\nimport { FONT_SIZE } from '../utils.js';\n/**\n * The font size command. It is used by {@link module:font/fontsize/fontsizeediting~FontSizeEditing}\n * to apply the font size.\n *\n * ```ts\n * editor.execute( 'fontSize', { value: 'small' } );\n * ```\n *\n * **Note**: Executing the command without the value removes the attribute from the model.\n */\nexport default class FontSizeCommand extends FontCommand {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor, FONT_SIZE);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontsize/utils\n */\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\n/**\n * Normalizes and translates the {@link module:font/fontconfig~FontSizeConfig#options configuration options}\n * to the {@link module:font/fontconfig~FontSizeOption} format.\n *\n * @param configuredOptions An array of options taken from the configuration.\n */\nexport function normalizeOptions(configuredOptions) {\n    // Convert options to objects.\n    return configuredOptions\n        .map(item => getOptionDefinition(item))\n        // Filter out undefined values that `getOptionDefinition` might return.\n        .filter((option) => option !== undefined);\n}\n// Default named presets map. Always create a new instance of the preset object in order to avoid modifying references.\nconst namedPresets = {\n    get tiny() {\n        return {\n            title: 'Tiny',\n            model: 'tiny',\n            view: {\n                name: 'span',\n                classes: 'text-tiny',\n                priority: 7\n            }\n        };\n    },\n    get small() {\n        return {\n            title: 'Small',\n            model: 'small',\n            view: {\n                name: 'span',\n                classes: 'text-small',\n                priority: 7\n            }\n        };\n    },\n    get big() {\n        return {\n            title: 'Big',\n            model: 'big',\n            view: {\n                name: 'span',\n                classes: 'text-big',\n                priority: 7\n            }\n        };\n    },\n    get huge() {\n        return {\n            title: 'Huge',\n            model: 'huge',\n            view: {\n                name: 'span',\n                classes: 'text-huge',\n                priority: 7\n            }\n        };\n    }\n};\n/**\n * Returns an option definition either from preset or creates one from number shortcut.\n * If object is passed then this method will return it without alternating it. Returns undefined for item than cannot be parsed.\n */\nfunction getOptionDefinition(option) {\n    if (typeof option === 'number') {\n        option = String(option);\n    }\n    // Check whether passed option is a full item definition provided by user in configuration.\n    if (typeof option === 'object' && isFullItemDefinition(option)) {\n        return attachPriority(option);\n    }\n    const preset = findPreset(option);\n    // Item is a named preset.\n    if (preset) {\n        return attachPriority(preset);\n    }\n    // 'Default' font size. It will be used to remove the fontSize attribute.\n    if (option === 'default') {\n        return {\n            model: undefined,\n            title: 'Default'\n        };\n    }\n    // At this stage we probably have numerical value to generate a preset so parse it's value.\n    // Discard any faulty values.\n    if (isNumericalDefinition(option)) {\n        return undefined;\n    }\n    // Return font size definition from size value.\n    return generatePixelPreset(option);\n}\n/**\n * Creates a predefined preset for pixel size.\n * @param definition Font size in pixels.\n * @returns\n */\nfunction generatePixelPreset(definition) {\n    // Extend a short (numeric value) definition.\n    if (typeof definition === 'string') {\n        definition = {\n            title: definition,\n            model: `${parseFloat(definition)}px`\n        };\n    }\n    definition.view = {\n        name: 'span',\n        styles: {\n            'font-size': definition.model\n        }\n    };\n    return attachPriority(definition);\n}\n/**\n * Adds the priority to the view element definition if missing. It's required due to ckeditor/ckeditor5#2291\n */\nfunction attachPriority(definition) {\n    if (definition.view && typeof definition.view !== 'string' && !definition.view.priority) {\n        definition.view.priority = 7;\n    }\n    return definition;\n}\n/**\n * Returns a prepared preset definition. If passed an object, a name of preset should be defined as `model` value.\n *\n * @param definition.model A preset name.\n */\nfunction findPreset(definition) {\n    return typeof definition === 'string' ? namedPresets[definition] : namedPresets[definition.model];\n}\n/**\n * We treat `definition` as completed if it is an object that contains `title`, `model` and `view` values.\n */\nfunction isFullItemDefinition(definition) {\n    return definition.title && definition.model && definition.view;\n}\nfunction isNumericalDefinition(definition) {\n    let numberValue;\n    if (typeof definition === 'object') {\n        if (!definition.model) {\n            /**\n             * Provided value as an option for {@link module:font/fontsize~FontSize} seems to invalid.\n             *\n             * See valid examples described in the {@link module:font/fontconfig~FontSizeConfig#options plugin configuration}.\n             *\n             * @error font-size-invalid-definition\n             */\n            throw new CKEditorError('font-size-invalid-definition', null, definition);\n        }\n        else {\n            numberValue = parseFloat(definition.model);\n        }\n    }\n    else {\n        numberValue = parseFloat(definition);\n    }\n    return isNaN(numberValue);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontsize/fontsizeediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\nimport { isLength, isPercentage } from 'ckeditor5/src/engine.js';\nimport FontSizeCommand from './fontsizecommand.js';\nimport { normalizeOptions } from './utils.js';\nimport { buildDefinition, FONT_SIZE } from '../utils.js';\n// Mapping of `<font size=\"..\">` styling to CSS's `font-size` values.\nconst styleFontSize = [\n    'x-small',\n    'x-small',\n    'small',\n    'medium',\n    'large',\n    'x-large',\n    'xx-large',\n    'xxx-large'\n];\n/**\n * The font size editing feature.\n *\n * It introduces the {@link module:font/fontsize/fontsizecommand~FontSizeCommand command} and the `fontSize`\n * attribute in the {@link module:engine/model/model~Model model} which renders in the {@link module:engine/view/view view}\n * as a `<span>` element with either:\n * * a style attribute (`<span style=\"font-size:12px\">...</span>`),\n * * or a class attribute (`<span class=\"text-small\">...</span>`)\n *\n * depending on the {@link module:font/fontconfig~FontSizeConfig configuration}.\n */\nexport default class FontSizeEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontSizeEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        // Define default configuration using named presets.\n        editor.config.define(FONT_SIZE, {\n            options: [\n                'tiny',\n                'small',\n                'default',\n                'big',\n                'huge'\n            ],\n            supportAllValues: false\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        // Allow fontSize attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: FONT_SIZE });\n        editor.model.schema.setAttributeProperties(FONT_SIZE, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n        const supportAllValues = editor.config.get('fontSize.supportAllValues');\n        // Define view to model conversion.\n        const options = normalizeOptions(this.editor.config.get('fontSize.options'))\n            .filter(item => item.model);\n        const definition = buildDefinition(FONT_SIZE, options);\n        // Set-up the two-way conversion.\n        if (supportAllValues) {\n            this._prepareAnyValueConverters(definition);\n            this._prepareCompatibilityConverter();\n        }\n        else {\n            editor.conversion.attributeToElement(definition);\n        }\n        // Add FontSize command.\n        editor.commands.add(FONT_SIZE, new FontSizeCommand(editor));\n    }\n    /**\n     * These converters enable keeping any value found as `style=\"font-size: *\"` as a value of an attribute on a text even\n     * if it is not defined in the plugin configuration.\n     *\n     * @param definition Converter definition out of input data.\n     */\n    _prepareAnyValueConverters(definition) {\n        const editor = this.editor;\n        // If `fontSize.supportAllValues=true`, we do not allow to use named presets in the plugin's configuration.\n        const presets = definition.model.values.filter((value) => {\n            return !isLength(String(value)) && !isPercentage(String(value));\n        });\n        if (presets.length) {\n            /**\n             * If {@link module:font/fontconfig~FontSizeConfig#supportAllValues `config.fontSize.supportAllValues`} is `true`,\n             * you need to use numerical values as font size options.\n             *\n             * See valid examples described in the {@link module:font/fontconfig~FontSizeConfig#options plugin configuration}.\n             *\n             * @error font-size-invalid-use-of-named-presets\n             * @param {Array.<String>} presets Invalid values.\n             */\n            throw new CKEditorError('font-size-invalid-use-of-named-presets', null, { presets });\n        }\n        editor.conversion.for('downcast').attributeToElement({\n            model: FONT_SIZE,\n            view: (attributeValue, { writer }) => {\n                if (!attributeValue) {\n                    return;\n                }\n                return writer.createAttributeElement('span', { style: 'font-size:' + attributeValue }, { priority: 7 });\n            }\n        });\n        editor.conversion.for('upcast').elementToAttribute({\n            model: {\n                key: FONT_SIZE,\n                value: (viewElement) => viewElement.getStyle('font-size')\n            },\n            view: {\n                name: 'span',\n                styles: {\n                    'font-size': /.*/\n                }\n            }\n        });\n    }\n    /**\n     * Adds support for legacy `<font size=\"..\">` formatting.\n     */\n    _prepareCompatibilityConverter() {\n        const editor = this.editor;\n        editor.conversion.for('upcast').elementToAttribute({\n            view: {\n                name: 'font',\n                attributes: {\n                    // Documentation mentions sizes from 1 to 7. To handle old content we support all values\n                    // up to 999 but clamp it to the valid range. Why 999? It should cover accidental values\n                    // similar to percentage, e.g. 100%, 200% which could be the usual mistake for font size.\n                    'size': /^[+-]?\\d{1,3}$/\n                }\n            },\n            model: {\n                key: FONT_SIZE,\n                value: (viewElement) => {\n                    const value = viewElement.getAttribute('size');\n                    const isRelative = value[0] === '-' || value[0] === '+';\n                    let size = parseInt(value, 10);\n                    if (isRelative) {\n                        // Add relative size (which can be negative) to the default size = 3.\n                        size = 3 + size;\n                    }\n                    const maxSize = styleFontSize.length - 1;\n                    const clampedSize = Math.min(Math.max(size, 0), maxSize);\n                    return styleFontSize[clampedSize];\n                }\n            }\n        });\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M9.816 11.5 7.038 4.785 4.261 11.5h5.555zm.62 1.5H3.641l-1.666 4.028H.312l5.789-14h1.875l5.789 14h-1.663L10.436 13zm7.55 2.279.779-.779.707.707-2.265 2.265-2.193-2.265.707-.707.765.765V4.825c0-.042 0-.083.002-.123l-.77.77-.707-.707L17.207 2.5l2.265 2.265-.707.707-.782-.782c.002.043.003.089.003.135v10.454z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontsize/fontsizeui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ViewModel, createDropdown, addListToDropdown, MenuBarMenuView, MenuBarMenuListView, MenuBarMenuListItemView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { Collection } from 'ckeditor5/src/utils.js';\nimport { normalizeOptions } from './utils.js';\nimport { FONT_SIZE } from '../utils.js';\nimport '../../theme/fontsize.css';\nimport fontSizeIcon from '../../theme/icons/font-size.svg';\n/**\n * The font size UI plugin. It introduces the `'fontSize'` dropdown.\n */\nexport default class FontSizeUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontSizeUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.t;\n        const options = this._getLocalizedOptions();\n        const command = editor.commands.get(FONT_SIZE);\n        const accessibleLabel = t('Font Size');\n        const listOptions = _prepareListOptions(options, command);\n        // Register UI component.\n        editor.ui.componentFactory.add(FONT_SIZE, locale => {\n            const dropdownView = createDropdown(locale);\n            addListToDropdown(dropdownView, listOptions, {\n                role: 'menu',\n                ariaLabel: accessibleLabel\n            });\n            // Create dropdown model.\n            dropdownView.buttonView.set({\n                label: accessibleLabel,\n                icon: fontSizeIcon,\n                tooltip: true\n            });\n            dropdownView.extendTemplate({\n                attributes: {\n                    class: [\n                        'ck-font-size-dropdown'\n                    ]\n                }\n            });\n            dropdownView.bind('isEnabled').to(command);\n            // Execute command when an item from the dropdown is selected.\n            this.listenTo(dropdownView, 'execute', evt => {\n                editor.execute(evt.source.commandName, { value: evt.source.commandParam });\n                editor.editing.view.focus();\n            });\n            return dropdownView;\n        });\n        editor.ui.componentFactory.add(`menuBar:${FONT_SIZE}`, locale => {\n            const menuView = new MenuBarMenuView(locale);\n            menuView.buttonView.set({\n                label: accessibleLabel,\n                icon: fontSizeIcon\n            });\n            menuView.bind('isEnabled').to(command);\n            const listView = new MenuBarMenuListView(locale);\n            for (const definition of listOptions) {\n                const listItemView = new MenuBarMenuListItemView(locale, menuView);\n                const buttonView = new MenuBarMenuListItemButtonView(locale);\n                buttonView.set({\n                    role: 'menuitemradio',\n                    isToggleable: true\n                });\n                buttonView.bind(...Object.keys(definition.model)).to(definition.model);\n                buttonView.delegate('execute').to(menuView);\n                buttonView.on('execute', () => {\n                    editor.execute(definition.model.commandName, {\n                        value: definition.model.commandParam\n                    });\n                    editor.editing.view.focus();\n                });\n                listItemView.children.add(buttonView);\n                listView.items.add(listItemView);\n            }\n            menuView.panelView.children.add(listView);\n            return menuView;\n        });\n    }\n    /**\n     * Returns options as defined in `config.fontSize.options` but processed to account for\n     * editor localization, i.e. to display {@link module:font/fontconfig~FontSizeOption}\n     * in the correct language.\n     *\n     * Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n     * when the user configuration is defined because the editor does not exist yet.\n     */\n    _getLocalizedOptions() {\n        const editor = this.editor;\n        const t = editor.t;\n        const localizedTitles = {\n            Default: t('Default'),\n            Tiny: t('Tiny'),\n            Small: t('Small'),\n            Big: t('Big'),\n            Huge: t('Huge')\n        };\n        const options = normalizeOptions((editor.config.get(FONT_SIZE)).options);\n        return options.map(option => {\n            const title = localizedTitles[option.title];\n            if (title && title != option.title) {\n                // Clone the option to avoid altering the original `namedPresets` from `./utils.js`.\n                option = Object.assign({}, option, { title });\n            }\n            return option;\n        });\n    }\n}\n/**\n * Prepares FontSize dropdown items.\n */\nfunction _prepareListOptions(options, command) {\n    const itemDefinitions = new Collection();\n    for (const option of options) {\n        const def = {\n            type: 'button',\n            model: new ViewModel({\n                commandName: FONT_SIZE,\n                commandParam: option.model,\n                label: option.title,\n                class: 'ck-fontsize-option',\n                role: 'menuitemradio',\n                withText: true\n            })\n        };\n        if (option.view && typeof option.view !== 'string') {\n            if (option.view.styles) {\n                def.model.set('labelStyle', `font-size:${option.view.styles['font-size']}`);\n            }\n            if (option.view.classes) {\n                def.model.set('class', `${def.model.class} ${option.view.classes}`);\n            }\n        }\n        def.model.bind('isOn').to(command, 'value', value => value === option.model);\n        // Add the option to the collection.\n        itemDefinitions.add(def);\n    }\n    return itemDefinitions;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontsize\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport FontSizeEditing from './fontsize/fontsizeediting.js';\nimport FontSizeUI from './fontsize/fontsizeui.js';\nimport { normalizeOptions } from './fontsize/utils.js';\n/**\n * The font size plugin.\n *\n * For a detailed overview, check the {@glink features/font font feature} documentation\n * and the {@glink api/font package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:font/fontsize/fontsizeediting~FontSizeEditing} and\n * {@link module:font/fontsize/fontsizeui~FontSizeUI} features in the editor.\n */\nexport default class FontSize extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [FontSizeEditing, FontSizeUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontSize';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * Normalizes and translates the {@link module:font/fontconfig~FontSizeConfig#options configuration options}\n     * to the {@link module:font/fontconfig~FontSizeOption} format.\n     *\n     * @param configuredOptions An array of options taken from the configuration.\n     */\n    normalizeSizeOptions(options) {\n        return normalizeOptions(options);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport FontCommand from '../fontcommand.js';\nimport { FONT_COLOR } from '../utils.js';\n/**\n * The font color command. It is used by {@link module:font/fontcolor/fontcolorediting~FontColorEditing}\n * to apply the font color.\n *\n * ```ts\n * editor.execute( 'fontColor', { value: 'rgb(250, 20, 20)' } );\n * ```\n *\n * **Note**: Executing the command with the `null` value removes the attribute from the model.\n */\nexport default class FontColorCommand extends FontCommand {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor, FONT_COLOR);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontcolor/fontcolorediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport FontColorCommand from './fontcolorcommand.js';\nimport { FONT_COLOR, renderDowncastElement, renderUpcastAttribute } from '../utils.js';\n/**\n * The font color editing feature.\n *\n * It introduces the {@link module:font/fontcolor/fontcolorcommand~FontColorCommand command} and\n * the `fontColor` attribute in the {@link module:engine/model/model~Model model} which renders\n * in the {@link module:engine/view/view view} as a `<span>` element (`<span style=\"color: ...\">`),\n * depending on the {@link module:font/fontconfig~FontColorConfig configuration}.\n */\nexport default class FontColorEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontColorEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define(FONT_COLOR, {\n            colors: [\n                {\n                    color: 'hsl(0, 0%, 0%)',\n                    label: 'Black'\n                },\n                {\n                    color: 'hsl(0, 0%, 30%)',\n                    label: 'Dim grey'\n                },\n                {\n                    color: 'hsl(0, 0%, 60%)',\n                    label: 'Grey'\n                },\n                {\n                    color: 'hsl(0, 0%, 90%)',\n                    label: 'Light grey'\n                },\n                {\n                    color: 'hsl(0, 0%, 100%)',\n                    label: 'White',\n                    hasBorder: true\n                },\n                {\n                    color: 'hsl(0, 75%, 60%)',\n                    label: 'Red'\n                },\n                {\n                    color: 'hsl(30, 75%, 60%)',\n                    label: 'Orange'\n                },\n                {\n                    color: 'hsl(60, 75%, 60%)',\n                    label: 'Yellow'\n                },\n                {\n                    color: 'hsl(90, 75%, 60%)',\n                    label: 'Light green'\n                },\n                {\n                    color: 'hsl(120, 75%, 60%)',\n                    label: 'Green'\n                },\n                {\n                    color: 'hsl(150, 75%, 60%)',\n                    label: 'Aquamarine'\n                },\n                {\n                    color: 'hsl(180, 75%, 60%)',\n                    label: 'Turquoise'\n                },\n                {\n                    color: 'hsl(210, 75%, 60%)',\n                    label: 'Light blue'\n                },\n                {\n                    color: 'hsl(240, 75%, 60%)',\n                    label: 'Blue'\n                },\n                {\n                    color: 'hsl(270, 75%, 60%)',\n                    label: 'Purple'\n                }\n            ],\n            columns: 5\n        });\n        editor.conversion.for('upcast').elementToAttribute({\n            view: {\n                name: 'span',\n                styles: {\n                    'color': /[\\s\\S]+/\n                }\n            },\n            model: {\n                key: FONT_COLOR,\n                value: renderUpcastAttribute('color')\n            }\n        });\n        // Support legacy `<font color=\"..\">` formatting.\n        editor.conversion.for('upcast').elementToAttribute({\n            view: {\n                name: 'font',\n                attributes: {\n                    'color': /^#?\\w+$/\n                }\n            },\n            model: {\n                key: FONT_COLOR,\n                value: (viewElement) => viewElement.getAttribute('color')\n            }\n        });\n        editor.conversion.for('downcast').attributeToElement({\n            model: FONT_COLOR,\n            view: renderDowncastElement('color')\n        });\n        editor.commands.add(FONT_COLOR, new FontColorCommand(editor));\n        // Allow the font color attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: FONT_COLOR });\n        editor.model.schema.setAttributeProperties(FONT_COLOR, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/ui/colorui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { createDropdown, normalizeColorOptions, getLocalizedColorOptions, focusChildOnDropdownOpen, MenuBarMenuView, ColorSelectorView } from 'ckeditor5/src/ui.js';\nimport { addColorSelectorToDropdown } from '../utils.js';\n/**\n * The color UI plugin which isolates the common logic responsible for displaying dropdowns with color grids.\n *\n * It is used to create the `'fontBackgroundColor'` and `'fontColor'` dropdowns, each hosting\n * a {@link module:ui/colorselector/colorselectorview~ColorSelectorView}.\n */\nexport default class ColorUI extends Plugin {\n    /**\n     * Creates a plugin which introduces a dropdown with a pre–configured\n     * {@link module:ui/colorselector/colorselectorview~ColorSelectorView}.\n     *\n     * @param config The configuration object.\n     * @param config.commandName The name of the command which will be executed when a color tile is clicked.\n     * @param config.componentName The name of the dropdown in the {@link module:ui/componentfactory~ComponentFactory}\n     * and the configuration scope name in `editor.config`.\n     * @param config.icon The SVG icon used by the dropdown.\n     * @param config.dropdownLabel The label used by the dropdown.\n     */\n    constructor(editor, { commandName, componentName, icon, dropdownLabel }) {\n        super(editor);\n        this.commandName = commandName;\n        this.componentName = componentName;\n        this.icon = icon;\n        this.dropdownLabel = dropdownLabel;\n        this.columns = editor.config.get(`${this.componentName}.columns`);\n    }\n    /**\n    * @inheritDoc\n    */\n    init() {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const t = locale.t;\n        const command = editor.commands.get(this.commandName);\n        const componentConfig = editor.config.get(this.componentName);\n        const colorsConfig = normalizeColorOptions(componentConfig.colors);\n        const localizedColors = getLocalizedColorOptions(locale, colorsConfig);\n        const documentColorsCount = componentConfig.documentColors;\n        const hasColorPicker = componentConfig.colorPicker !== false;\n        // Register the UI component.\n        editor.ui.componentFactory.add(this.componentName, locale => {\n            const dropdownView = createDropdown(locale);\n            // Font color dropdown rendering is deferred once it gets open to improve performance (#6192).\n            let dropdownContentRendered = false;\n            const colorSelectorView = addColorSelectorToDropdown({\n                dropdownView,\n                colors: localizedColors.map(option => ({\n                    label: option.label,\n                    color: option.model,\n                    options: {\n                        hasBorder: option.hasBorder\n                    }\n                })),\n                columns: this.columns,\n                removeButtonLabel: t('Remove color'),\n                colorPickerLabel: t('Color picker'),\n                documentColorsLabel: documentColorsCount !== 0 ? t('Document colors') : '',\n                documentColorsCount: documentColorsCount === undefined ? this.columns : documentColorsCount,\n                colorPickerViewConfig: hasColorPicker ? (componentConfig.colorPicker || {}) : false\n            });\n            colorSelectorView.bind('selectedColor').to(command, 'value');\n            dropdownView.buttonView.set({\n                label: this.dropdownLabel,\n                icon: this.icon,\n                tooltip: true\n            });\n            dropdownView.extendTemplate({\n                attributes: {\n                    class: 'ck-color-ui-dropdown'\n                }\n            });\n            dropdownView.bind('isEnabled').to(command);\n            colorSelectorView.on('execute', (evt, data) => {\n                if (dropdownView.isOpen) {\n                    editor.execute(this.commandName, {\n                        value: data.value,\n                        batch: this._undoStepBatch\n                    });\n                }\n                if (data.source !== 'colorPicker') {\n                    editor.editing.view.focus();\n                }\n                if (data.source === 'colorPickerSaveButton') {\n                    dropdownView.isOpen = false;\n                }\n            });\n            colorSelectorView.on('colorPicker:show', () => {\n                this._undoStepBatch = editor.model.createBatch();\n            });\n            colorSelectorView.on('colorPicker:cancel', () => {\n                if (this._undoStepBatch.operations.length) {\n                    // We need to close the dropdown before the undo batch.\n                    // Otherwise, ColorUI treats undo as a selected color change,\n                    // propagating the update to the whole selection.\n                    // That's an issue if spans with various colors were selected.\n                    dropdownView.isOpen = false;\n                    editor.execute('undo', this._undoStepBatch);\n                }\n                editor.editing.view.focus();\n            });\n            dropdownView.on('change:isOpen', (evt, name, isVisible) => {\n                if (!dropdownContentRendered) {\n                    dropdownContentRendered = true;\n                    dropdownView.colorSelectorView.appendUI();\n                }\n                if (isVisible) {\n                    if (documentColorsCount !== 0) {\n                        colorSelectorView.updateDocumentColors(editor.model, this.componentName);\n                    }\n                    colorSelectorView.updateSelectedColors();\n                    colorSelectorView.showColorGridsFragment();\n                }\n            });\n            // Accessibility: focus the first active color when opening the dropdown.\n            focusChildOnDropdownOpen(dropdownView, () => dropdownView.colorSelectorView.colorGridsFragmentView.staticColorsGrid.items.find((item) => item.isOn));\n            return dropdownView;\n        });\n        // Register menu bar button..\n        editor.ui.componentFactory.add(`menuBar:${this.componentName}`, locale => {\n            const menuView = new MenuBarMenuView(locale);\n            menuView.buttonView.set({\n                label: this.dropdownLabel,\n                icon: this.icon\n            });\n            menuView.bind('isEnabled').to(command);\n            // Font color sub-menu rendering is deferred once it gets open to improve performance (#6192).\n            let contentRendered = false;\n            const colorSelectorView = new ColorSelectorView(locale, {\n                colors: localizedColors.map(option => ({\n                    label: option.label,\n                    color: option.model,\n                    options: {\n                        hasBorder: option.hasBorder\n                    }\n                })),\n                columns: this.columns,\n                removeButtonLabel: t('Remove color'),\n                colorPickerLabel: t('Color picker'),\n                documentColorsLabel: documentColorsCount !== 0 ? t('Document colors') : '',\n                documentColorsCount: documentColorsCount === undefined ? this.columns : documentColorsCount,\n                colorPickerViewConfig: false\n            });\n            colorSelectorView.bind('selectedColor').to(command, 'value');\n            colorSelectorView.delegate('execute').to(menuView);\n            colorSelectorView.on('execute', (evt, data) => {\n                editor.execute(this.commandName, {\n                    value: data.value,\n                    batch: this._undoStepBatch\n                });\n                editor.editing.view.focus();\n            });\n            menuView.on('change:isOpen', (evt, name, isVisible) => {\n                if (!contentRendered) {\n                    contentRendered = true;\n                    colorSelectorView.appendUI();\n                }\n                if (isVisible) {\n                    if (documentColorsCount !== 0) {\n                        colorSelectorView.updateDocumentColors(editor.model, this.componentName);\n                    }\n                    colorSelectorView.updateSelectedColors();\n                    colorSelectorView.showColorGridsFragment();\n                }\n            });\n            menuView.panelView.children.add(colorSelectorView);\n            return menuView;\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontcolor/fontcolorui\n */\nimport ColorUI from '../ui/colorui.js';\nimport { FONT_COLOR } from '../utils.js';\nimport fontColorIcon from '../../theme/icons/font-color.svg';\n/**\n * The font color UI plugin. It introduces the `'fontColor'` dropdown.\n */\nexport default class FontColorUI extends ColorUI {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        const t = editor.locale.t;\n        super(editor, {\n            commandName: FONT_COLOR,\n            componentName: FONT_COLOR,\n            icon: fontColorIcon,\n            dropdownLabel: t('Font Color')\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontColorUI';\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12.4 10.3 10 4.5l-2.4 5.8h4.8zm.5 1.2H7.1L5.7 15H4.2l5-12h1.6l5 12h-1.5L13 11.5zm3.1 7H4a1 1 0 0 1 0-2h12a1 1 0 0 1 0 2z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontcolor\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport FontColorEditing from './fontcolor/fontcolorediting.js';\nimport FontColorUI from './fontcolor/fontcolorui.js';\n/**\n * The font color plugin.\n *\n * For a detailed overview, check the {@glink features/font font feature} documentation\n * and the {@glink api/font package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:font/fontcolor/fontcolorediting~FontColorEditing} and\n * {@link module:font/fontcolor/fontcolorui~FontColorUI} features in the editor.\n */\nexport default class FontColor extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [FontColorEditing, FontColorUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontColor';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport FontCommand from '../fontcommand.js';\nimport { FONT_BACKGROUND_COLOR } from '../utils.js';\n/**\n * The font background color command. It is used by\n * {@link module:font/fontbackgroundcolor/fontbackgroundcolorediting~FontBackgroundColorEditing}\n * to apply the font background color.\n *\n * ```ts\n * editor.execute( 'fontBackgroundColor', { value: 'rgb(250, 20, 20)' } );\n * ```\n *\n * **Note**: Executing the command with the `null` value removes the attribute from the model.\n */\nexport default class FontBackgroundColorCommand extends FontCommand {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor, FONT_BACKGROUND_COLOR);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontbackgroundcolor/fontbackgroundcolorediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { addBackgroundRules } from 'ckeditor5/src/engine.js';\nimport FontBackgroundColorCommand from './fontbackgroundcolorcommand.js';\nimport { FONT_BACKGROUND_COLOR, renderDowncastElement, renderUpcastAttribute } from '../utils.js';\n/**\n * The font background color editing feature.\n *\n * It introduces the {@link module:font/fontbackgroundcolor/fontbackgroundcolorcommand~FontBackgroundColorCommand command} and\n * the `fontBackgroundColor` attribute in the {@link module:engine/model/model~Model model} which renders\n * in the {@link module:engine/view/view view} as a `<span>` element (`<span style=\"background-color: ...\">`),\n * depending on the {@link module:font/fontconfig~FontColorConfig configuration}.\n */\nexport default class FontBackgroundColorEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontBackgroundColorEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define(FONT_BACKGROUND_COLOR, {\n            colors: [\n                {\n                    color: 'hsl(0, 0%, 0%)',\n                    label: 'Black'\n                },\n                {\n                    color: 'hsl(0, 0%, 30%)',\n                    label: 'Dim grey'\n                },\n                {\n                    color: 'hsl(0, 0%, 60%)',\n                    label: 'Grey'\n                },\n                {\n                    color: 'hsl(0, 0%, 90%)',\n                    label: 'Light grey'\n                },\n                {\n                    color: 'hsl(0, 0%, 100%)',\n                    label: 'White',\n                    hasBorder: true\n                },\n                {\n                    color: 'hsl(0, 75%, 60%)',\n                    label: 'Red'\n                },\n                {\n                    color: 'hsl(30, 75%, 60%)',\n                    label: 'Orange'\n                },\n                {\n                    color: 'hsl(60, 75%, 60%)',\n                    label: 'Yellow'\n                },\n                {\n                    color: 'hsl(90, 75%, 60%)',\n                    label: 'Light green'\n                },\n                {\n                    color: 'hsl(120, 75%, 60%)',\n                    label: 'Green'\n                },\n                {\n                    color: 'hsl(150, 75%, 60%)',\n                    label: 'Aquamarine'\n                },\n                {\n                    color: 'hsl(180, 75%, 60%)',\n                    label: 'Turquoise'\n                },\n                {\n                    color: 'hsl(210, 75%, 60%)',\n                    label: 'Light blue'\n                },\n                {\n                    color: 'hsl(240, 75%, 60%)',\n                    label: 'Blue'\n                },\n                {\n                    color: 'hsl(270, 75%, 60%)',\n                    label: 'Purple'\n                }\n            ],\n            columns: 5\n        });\n        editor.data.addStyleProcessorRules(addBackgroundRules);\n        editor.conversion.for('upcast').elementToAttribute({\n            view: {\n                name: 'span',\n                styles: {\n                    'background-color': /[\\s\\S]+/\n                }\n            },\n            model: {\n                key: FONT_BACKGROUND_COLOR,\n                value: renderUpcastAttribute('background-color')\n            }\n        });\n        editor.conversion.for('downcast').attributeToElement({\n            model: FONT_BACKGROUND_COLOR,\n            view: renderDowncastElement('background-color')\n        });\n        editor.commands.add(FONT_BACKGROUND_COLOR, new FontBackgroundColorCommand(editor));\n        // Allow the font backgroundColor attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: FONT_BACKGROUND_COLOR });\n        editor.model.schema.setAttributeProperties(FONT_BACKGROUND_COLOR, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontbackgroundcolor/fontbackgroundcolorui\n */\nimport ColorUI from '../ui/colorui.js';\nimport { FONT_BACKGROUND_COLOR } from '../utils.js';\nimport fontBackgroundColorIcon from '../../theme/icons/font-background.svg';\n/**\n * The font background color UI plugin. It introduces the `'fontBackgroundColor'` dropdown.\n */\nexport default class FontBackgroundColorUI extends ColorUI {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        const t = editor.locale.t;\n        super(editor, {\n            commandName: FONT_BACKGROUND_COLOR,\n            componentName: FONT_BACKGROUND_COLOR,\n            icon: fontBackgroundColorIcon,\n            dropdownLabel: t('Font Background Color')\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontBackgroundColorUI';\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M4 2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zm8.38 9.262H7.62L10 5.506l2.38 5.756zm.532 1.285L14.34 16h1.426L10.804 4H9.196L4.234 16H5.66l1.428-3.453h5.824z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/fontbackgroundcolor\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport FontBackgroundColorEditing from './fontbackgroundcolor/fontbackgroundcolorediting.js';\nimport FontBackgroundColorUI from './fontbackgroundcolor/fontbackgroundcolorui.js';\n/**\n * The font background color plugin.\n *\n * For a detailed overview, check the {@glink features/font font feature} documentation\n * and the {@glink api/font package page}.\n *\n * This is a \"glue\" plugin which loads\n * the {@link module:font/fontbackgroundcolor/fontbackgroundcolorediting~FontBackgroundColorEditing} and\n * {@link module:font/fontbackgroundcolor/fontbackgroundcolorui~FontBackgroundColorUI} features in the editor.\n */\nexport default class FontBackgroundColor extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [FontBackgroundColorEditing, FontBackgroundColorUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FontBackgroundColor';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paragraph/paragraphcommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport { first } from '@ckeditor/ckeditor5-utils';\n/**\n * The paragraph command.\n */\nexport default class ParagraphCommand extends Command {\n    constructor(editor) {\n        super(editor);\n        // Since this command may pass selection in execution block, it should be checked directly.\n        this._isEnabledBasedOnSelection = false;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const document = model.document;\n        const block = first(document.selection.getSelectedBlocks());\n        this.value = !!block && block.is('element', 'paragraph');\n        this.isEnabled = !!block && checkCanBecomeParagraph(block, model.schema);\n    }\n    /**\n     * Executes the command. All the blocks (see {@link module:engine/model/schema~Schema}) in the selection\n     * will be turned to paragraphs.\n     *\n     * @fires execute\n     * @param options Options for the executed command.\n     * @param options.selection The selection that the command should be applied to. By default,\n     * if not provided, the command is applied to the {@link module:engine/model/document~Document#selection}.\n     */\n    execute(options = {}) {\n        const model = this.editor.model;\n        const document = model.document;\n        const selection = options.selection || document.selection;\n        // Don't execute command if selection is in non-editable place.\n        if (!model.canEditAt(selection)) {\n            return;\n        }\n        model.change(writer => {\n            const blocks = selection.getSelectedBlocks();\n            for (const block of blocks) {\n                if (!block.is('element', 'paragraph') && checkCanBecomeParagraph(block, model.schema)) {\n                    writer.rename(block, 'paragraph');\n                }\n            }\n        });\n    }\n}\n/**\n * Checks whether the given block can be replaced by a paragraph.\n *\n * @param block A block to be tested.\n * @param schema The schema of the document.\n */\nfunction checkCanBecomeParagraph(block, schema) {\n    return schema.checkChild(block.parent, 'paragraph') && !schema.isObject(block);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paragraph/insertparagraphcommand\n */\nimport { Command } from '@ckeditor/ckeditor5-core';\n/**\n * The insert paragraph command. It inserts a new paragraph at a specific\n * {@link module:engine/model/position~Position document position}.\n *\n * ```ts\n * // Insert a new paragraph before an element in the document.\n * editor.execute( 'insertParagraph', {\n *   position: editor.model.createPositionBefore( element )\n * } );\n * ```\n *\n * If a paragraph is disallowed in the context of the specific position, the command\n * will attempt to split position ancestors to find a place where it is possible\n * to insert a paragraph.\n *\n * **Note**: This command moves the selection to the inserted paragraph.\n */\nexport default class InsertParagraphCommand extends Command {\n    constructor(editor) {\n        super(editor);\n        // Since this command passes position in execution block instead of selection, it should be checked directly.\n        this._isEnabledBasedOnSelection = false;\n    }\n    /**\n     * Executes the command.\n     *\n     * @param options Options for the executed command.\n     * @param options.position The model position at which the new paragraph will be inserted.\n     * @param options.attributes Attributes keys and values to set on a inserted paragraph.\n     * @fires execute\n     */\n    execute(options) {\n        const model = this.editor.model;\n        const attributes = options.attributes;\n        let position = options.position;\n        // Don't execute command if position is in non-editable place.\n        if (!model.canEditAt(position)) {\n            return;\n        }\n        model.change(writer => {\n            position = this._findPositionToInsertParagraph(position, writer);\n            if (!position) {\n                return;\n            }\n            const paragraph = writer.createElement('paragraph');\n            if (attributes) {\n                model.schema.setAllowedAttributes(paragraph, attributes, writer);\n            }\n            model.insertContent(paragraph, position);\n            writer.setSelection(paragraph, 'in');\n        });\n    }\n    /**\n     * Returns the best position to insert a new paragraph.\n     */\n    _findPositionToInsertParagraph(position, writer) {\n        const model = this.editor.model;\n        if (model.schema.checkChild(position, 'paragraph')) {\n            return position;\n        }\n        const allowedParent = model.schema.findAllowedParent(position, 'paragraph');\n        // It could be there's no ancestor limit that would allow paragraph.\n        // In theory, \"paragraph\" could be disallowed even in the \"$root\".\n        if (!allowedParent) {\n            return null;\n        }\n        const positionParent = position.parent;\n        const isTextAllowed = model.schema.checkChild(positionParent, '$text');\n        // At empty $block or at the end of $block.\n        // <paragraph>[]</paragraph> ---> <paragraph></paragraph><paragraph>[]</paragraph>\n        // <paragraph>foo[]</paragraph> ---> <paragraph>foo</paragraph><paragraph>[]</paragraph>\n        if (positionParent.isEmpty || isTextAllowed && position.isAtEnd) {\n            return model.createPositionAfter(positionParent);\n        }\n        // At the start of $block with text.\n        // <paragraph>[]foo</paragraph> ---> <paragraph>[]</paragraph><paragraph>foo</paragraph>\n        if (!positionParent.isEmpty && isTextAllowed && position.isAtStart) {\n            return model.createPositionBefore(positionParent);\n        }\n        return writer.split(position, allowedParent).position;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paragraph/paragraph\n */\nimport ParagraphCommand from './paragraphcommand.js';\nimport InsertParagraphCommand from './insertparagraphcommand.js';\nimport { Plugin } from '@ckeditor/ckeditor5-core';\n/**\n * The paragraph feature for the editor.\n *\n * It introduces the `<paragraph>` element in the model which renders as a `<p>` element in the DOM and data.\n *\n * It also brings two editors commands:\n *\n * * The {@link module:paragraph/paragraphcommand~ParagraphCommand `'paragraph'`} command that converts all\n * blocks in the model selection into paragraphs.\n * * The {@link module:paragraph/insertparagraphcommand~InsertParagraphCommand `'insertParagraph'`} command\n * that inserts a new paragraph at a specified location in the model.\n */\nclass Paragraph extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Paragraph';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        editor.commands.add('paragraph', new ParagraphCommand(editor));\n        editor.commands.add('insertParagraph', new InsertParagraphCommand(editor));\n        // Schema.\n        model.schema.register('paragraph', { inheritAllFrom: '$block' });\n        editor.conversion.elementToElement({ model: 'paragraph', view: 'p' });\n        // Conversion for paragraph-like elements which has not been converted by any plugin.\n        editor.conversion.for('upcast').elementToElement({\n            model: (viewElement, { writer }) => {\n                if (!Paragraph.paragraphLikeElements.has(viewElement.name)) {\n                    return null;\n                }\n                // Do not auto-paragraph empty elements.\n                if (viewElement.isEmpty) {\n                    return null;\n                }\n                return writer.createElement('paragraph');\n            },\n            view: /.+/,\n            converterPriority: 'low'\n        });\n    }\n}\n/**\n * A list of element names which should be treated by the autoparagraphing algorithms as\n * paragraph-like. This means that e.g. the following content:\n *\n * ```html\n * <h1>Foo</h1>\n * <table>\n *   <tr>\n *     <td>X</td>\n *     <td>\n *       <ul>\n *         <li>Y</li>\n *         <li>Z</li>\n *       </ul>\n *     </td>\n *   </tr>\n * </table>\n * ```\n *\n * contains five paragraph-like elements: `<h1>`, two `<td>`s and two `<li>`s.\n * Hence, if none of the features is going to convert those elements the above content will be automatically handled\n * by the paragraph feature and converted to:\n *\n * ```html\n * <p>Foo</p>\n * <p>X</p>\n * <p>Y</p>\n * <p>Z</p>\n * ```\n *\n * Note: The `<td>` containing two `<li>` elements was ignored as the innermost paragraph-like elements\n * have a priority upon conversion.\n */\nParagraph.paragraphLikeElements = new Set([\n    'blockquote',\n    'dd',\n    'div',\n    'dt',\n    'h1',\n    'h2',\n    'h3',\n    'h4',\n    'h5',\n    'h6',\n    'li',\n    'p',\n    'td',\n    'th'\n]);\nexport default Paragraph;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module heading/headingcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { first } from 'ckeditor5/src/utils.js';\n/**\n * The heading command. It is used by the {@link module:heading/heading~Heading heading feature} to apply headings.\n */\nexport default class HeadingCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param editor Editor instance.\n     * @param modelElements Names of the element which this command can apply in the model.\n     */\n    constructor(editor, modelElements) {\n        super(editor);\n        this.modelElements = modelElements;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const block = first(this.editor.model.document.selection.getSelectedBlocks());\n        this.value = !!block && this.modelElements.includes(block.name) && block.name;\n        this.isEnabled = !!block && this.modelElements.some(heading => checkCanBecomeHeading(block, heading, this.editor.model.schema));\n    }\n    /**\n     * Executes the command. Applies the heading to the selected blocks or, if the first selected\n     * block is a heading already, turns selected headings (of this level only) to paragraphs.\n     *\n     * @param options.value Name of the element which this command will apply in the model.\n     * @fires execute\n     */\n    execute(options) {\n        const model = this.editor.model;\n        const document = model.document;\n        const modelElement = options.value;\n        model.change(writer => {\n            const blocks = Array.from(document.selection.getSelectedBlocks())\n                .filter(block => {\n                return checkCanBecomeHeading(block, modelElement, model.schema);\n            });\n            for (const block of blocks) {\n                if (!block.is('element', modelElement)) {\n                    writer.rename(block, modelElement);\n                }\n            }\n        });\n    }\n}\n/**\n * Checks whether the given block can be replaced by a specific heading.\n *\n * @param block A block to be tested.\n * @param heading Command element name in the model.\n * @param schema The schema of the document.\n */\nfunction checkCanBecomeHeading(block, heading, schema) {\n    return schema.checkChild(block.parent, heading) && !schema.isObject(block);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module heading/headingediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Paragraph } from 'ckeditor5/src/paragraph.js';\nimport { priorities } from 'ckeditor5/src/utils.js';\nimport HeadingCommand from './headingcommand.js';\nconst defaultModelElement = 'paragraph';\n/**\n * The headings engine feature. It handles switching between block formats &ndash; headings and paragraph.\n * This class represents the engine part of the heading feature. See also {@link module:heading/heading~Heading}.\n * It introduces `heading1`-`headingN` commands which allow to convert paragraphs into headings.\n */\nexport default class HeadingEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'HeadingEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('heading', {\n            options: [\n                { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' },\n                { model: 'heading1', view: 'h2', title: 'Heading 1', class: 'ck-heading_heading1' },\n                { model: 'heading2', view: 'h3', title: 'Heading 2', class: 'ck-heading_heading2' },\n                { model: 'heading3', view: 'h4', title: 'Heading 3', class: 'ck-heading_heading3' }\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [Paragraph];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const options = editor.config.get('heading.options');\n        const modelElements = [];\n        for (const option of options) {\n            // Skip paragraph - it is defined in required Paragraph feature.\n            if (option.model === 'paragraph') {\n                continue;\n            }\n            // Schema.\n            editor.model.schema.register(option.model, {\n                inheritAllFrom: '$block'\n            });\n            editor.conversion.elementToElement(option);\n            modelElements.push(option.model);\n        }\n        this._addDefaultH1Conversion(editor);\n        // Register the heading command for this option.\n        editor.commands.add('heading', new HeadingCommand(editor, modelElements));\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        // If the enter command is added to the editor, alter its behavior.\n        // Enter at the end of a heading element should create a paragraph.\n        const editor = this.editor;\n        const enterCommand = editor.commands.get('enter');\n        const options = editor.config.get('heading.options');\n        if (enterCommand) {\n            this.listenTo(enterCommand, 'afterExecute', (evt, data) => {\n                const positionParent = editor.model.document.selection.getFirstPosition().parent;\n                const isHeading = options.some(option => positionParent.is('element', option.model));\n                if (isHeading && !positionParent.is('element', defaultModelElement) && positionParent.childCount === 0) {\n                    data.writer.rename(positionParent, defaultModelElement);\n                }\n            });\n        }\n    }\n    /**\n     * Adds default conversion for `h1` -> `heading1` with a low priority.\n     *\n     * @param editor Editor instance on which to add the `h1` conversion.\n     */\n    _addDefaultH1Conversion(editor) {\n        editor.conversion.for('upcast').elementToElement({\n            model: 'heading1',\n            view: 'h1',\n            // With a `low` priority, `paragraph` plugin autoparagraphing mechanism is executed. Make sure\n            // this listener is called before it. If not, `h1` will be transformed into a paragraph.\n            converterPriority: priorities.low + 1\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module heading/headingui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ViewModel, createDropdown, addListToDropdown, MenuBarMenuListItemView, MenuBarMenuListView, MenuBarMenuView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { Collection } from 'ckeditor5/src/utils.js';\nimport { getLocalizedOptions } from './utils.js';\nimport '../theme/heading.css';\n/**\n * The headings UI feature. It introduces the `headings` dropdown.\n */\nexport default class HeadingUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'HeadingUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.t;\n        const options = getLocalizedOptions(editor);\n        const defaultTitle = t('Choose heading');\n        const accessibleLabel = t('Heading');\n        // Register UI component.\n        editor.ui.componentFactory.add('heading', locale => {\n            const titles = {};\n            const itemDefinitions = new Collection();\n            const headingCommand = editor.commands.get('heading');\n            const paragraphCommand = editor.commands.get('paragraph');\n            const commands = [headingCommand];\n            for (const option of options) {\n                const def = {\n                    type: 'button',\n                    model: new ViewModel({\n                        label: option.title,\n                        class: option.class,\n                        role: 'menuitemradio',\n                        withText: true\n                    })\n                };\n                if (option.model === 'paragraph') {\n                    def.model.bind('isOn').to(paragraphCommand, 'value');\n                    def.model.set('commandName', 'paragraph');\n                    commands.push(paragraphCommand);\n                }\n                else {\n                    def.model.bind('isOn').to(headingCommand, 'value', value => value === option.model);\n                    def.model.set({\n                        commandName: 'heading',\n                        commandValue: option.model\n                    });\n                }\n                // Add the option to the collection.\n                itemDefinitions.add(def);\n                titles[option.model] = option.title;\n            }\n            const dropdownView = createDropdown(locale);\n            addListToDropdown(dropdownView, itemDefinitions, {\n                ariaLabel: accessibleLabel,\n                role: 'menu'\n            });\n            dropdownView.buttonView.set({\n                ariaLabel: accessibleLabel,\n                ariaLabelledBy: undefined,\n                isOn: false,\n                withText: true,\n                tooltip: accessibleLabel\n            });\n            dropdownView.extendTemplate({\n                attributes: {\n                    class: [\n                        'ck-heading-dropdown'\n                    ]\n                }\n            });\n            dropdownView.bind('isEnabled').toMany(commands, 'isEnabled', (...areEnabled) => {\n                return areEnabled.some(isEnabled => isEnabled);\n            });\n            dropdownView.buttonView.bind('label').to(headingCommand, 'value', paragraphCommand, 'value', (heading, paragraph) => {\n                const whichModel = paragraph ? 'paragraph' : heading;\n                if (typeof whichModel === 'boolean') {\n                    return defaultTitle;\n                }\n                // If none of the commands is active, display default title.\n                if (!titles[whichModel]) {\n                    return defaultTitle;\n                }\n                return titles[whichModel];\n            });\n            dropdownView.buttonView.bind('ariaLabel').to(headingCommand, 'value', paragraphCommand, 'value', (heading, paragraph) => {\n                const whichModel = paragraph ? 'paragraph' : heading;\n                if (typeof whichModel === 'boolean') {\n                    return accessibleLabel;\n                }\n                // If none of the commands is active, display default title.\n                if (!titles[whichModel]) {\n                    return accessibleLabel;\n                }\n                return `${titles[whichModel]}, ${accessibleLabel}`;\n            });\n            // Execute command when an item from the dropdown is selected.\n            this.listenTo(dropdownView, 'execute', evt => {\n                const { commandName, commandValue } = evt.source;\n                editor.execute(commandName, commandValue ? { value: commandValue } : undefined);\n                editor.editing.view.focus();\n            });\n            return dropdownView;\n        });\n        editor.ui.componentFactory.add('menuBar:heading', locale => {\n            const menuView = new MenuBarMenuView(locale);\n            const headingCommand = editor.commands.get('heading');\n            const paragraphCommand = editor.commands.get('paragraph');\n            const commands = [headingCommand];\n            const listView = new MenuBarMenuListView(locale);\n            menuView.set({\n                class: 'ck-heading-dropdown'\n            });\n            listView.set({\n                ariaLabel: t('Heading'),\n                role: 'menu'\n            });\n            menuView.buttonView.set({\n                label: t('Heading')\n            });\n            menuView.panelView.children.add(listView);\n            for (const option of options) {\n                const listItemView = new MenuBarMenuListItemView(locale, menuView);\n                const buttonView = new MenuBarMenuListItemButtonView(locale);\n                listItemView.children.add(buttonView);\n                listView.items.add(listItemView);\n                buttonView.set({\n                    isToggleable: true,\n                    label: option.title,\n                    role: 'menuitemradio',\n                    class: option.class\n                });\n                buttonView.delegate('execute').to(menuView);\n                buttonView.on('execute', () => {\n                    const commandName = option.model === 'paragraph' ? 'paragraph' : 'heading';\n                    editor.execute(commandName, { value: option.model });\n                    editor.editing.view.focus();\n                });\n                if (option.model === 'paragraph') {\n                    buttonView.bind('isOn').to(paragraphCommand, 'value');\n                    commands.push(paragraphCommand);\n                }\n                else {\n                    buttonView.bind('isOn').to(headingCommand, 'value', value => value === option.model);\n                }\n            }\n            menuView.bind('isEnabled').toMany(commands, 'isEnabled', (...areEnabled) => {\n                return areEnabled.some(isEnabled => isEnabled);\n            });\n            return menuView;\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Returns heading options as defined in `config.heading.options` but processed to consider\n * the editor localization, i.e. to display {@link module:heading/headingconfig~HeadingOption}\n * in the correct language.\n *\n * Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n * when the user configuration is defined because the editor does not exist yet.\n */\nexport function getLocalizedOptions(editor) {\n    const t = editor.t;\n    const localizedTitles = {\n        'Paragraph': t('Paragraph'),\n        'Heading 1': t('Heading 1'),\n        'Heading 2': t('Heading 2'),\n        'Heading 3': t('Heading 3'),\n        'Heading 4': t('Heading 4'),\n        'Heading 5': t('Heading 5'),\n        'Heading 6': t('Heading 6')\n    };\n    return editor.config.get('heading.options').map(option => {\n        const title = localizedTitles[option.title];\n        if (title && title != option.title) {\n            option.title = title;\n        }\n        return option;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagetextalternative/imagetextalternativecommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The image text alternative command. It is used to change the `alt` attribute of `<imageBlock>` and `<imageInline>` model elements.\n */\nexport default class ImageTextAlternativeCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);\n        this.isEnabled = !!element;\n        if (this.isEnabled && element.hasAttribute('alt')) {\n            this.value = element.getAttribute('alt');\n        }\n        else {\n            this.value = false;\n        }\n    }\n    /**\n     * Executes the command.\n     *\n     * @fires execute\n     * @param options\n     * @param options.newValue The new value of the `alt` attribute to set.\n     */\n    execute(options) {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const model = editor.model;\n        const imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n        model.change(writer => {\n            writer.setAttribute('alt', options.newValue, imageElement);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { first } from 'ckeditor5/src/utils.js';\n/**\n * Creates a view element representing the inline image.\n *\n * ```html\n * <span class=\"image-inline\"><img></img></span>\n * ```\n *\n * Note that `alt` and `src` attributes are converted separately, so they are not included.\n *\n * @internal\n */\nexport function createInlineImageViewElement(writer) {\n    return writer.createContainerElement('span', { class: 'image-inline' }, writer.createEmptyElement('img'));\n}\n/**\n * Creates a view element representing the block image.\n *\n * ```html\n * <figure class=\"image\"><img></img></figure>\n * ```\n *\n * Note that `alt` and `src` attributes are converted separately, so they are not included.\n *\n * @internal\n */\nexport function createBlockImageViewElement(writer) {\n    return writer.createContainerElement('figure', { class: 'image' }, [\n        writer.createEmptyElement('img'),\n        writer.createSlot('children')\n    ]);\n}\n/**\n * A function returning a `MatcherPattern` for a particular type of View images.\n *\n * @internal\n * @param matchImageType The type of created image.\n */\nexport function getImgViewElementMatcher(editor, matchImageType) {\n    const imageUtils = editor.plugins.get('ImageUtils');\n    const areBothImagePluginsLoaded = editor.plugins.has('ImageInlineEditing') && editor.plugins.has('ImageBlockEditing');\n    return element => {\n        // Check if the matched view element is an <img>.\n        if (!imageUtils.isInlineImageView(element)) {\n            return null;\n        }\n        // If just one of the plugins is loaded (block or inline), it will match all kinds of images.\n        if (!areBothImagePluginsLoaded) {\n            return getPositiveMatchPattern(element);\n        }\n        // The <img> can be standalone, wrapped in <figure>...</figure> (ImageBlock plugin) or\n        // wrapped in <figure><a>...</a></figure> (LinkImage plugin).\n        const imageType = element.getStyle('display') == 'block' || element.findAncestor(imageUtils.isBlockImageView) ?\n            'imageBlock' :\n            'imageInline';\n        if (imageType !== matchImageType) {\n            return null;\n        }\n        return getPositiveMatchPattern(element);\n    };\n    function getPositiveMatchPattern(element) {\n        const pattern = {\n            name: true\n        };\n        // This will trigger src consumption (See https://github.com/ckeditor/ckeditor5/issues/11530).\n        if (element.hasAttribute('src')) {\n            pattern.attributes = ['src'];\n        }\n        return pattern;\n    }\n}\n/**\n * Considering the current model selection, it returns the name of the model image element\n * (`'imageBlock'` or `'imageInline'`) that will make most sense from the UX perspective if a new\n * image was inserted (also: uploaded, dropped, pasted) at that selection.\n *\n * The assumption is that inserting images into empty blocks or on other block widgets should\n * produce block images. Inline images should be inserted in other cases, e.g. in paragraphs\n * that already contain some text.\n *\n * @internal\n */\nexport function determineImageTypeForInsertionAtSelection(schema, selection) {\n    const firstBlock = first(selection.getSelectedBlocks());\n    // Insert a block image if the selection is not in/on block elements or it's on a block widget.\n    if (!firstBlock || schema.isObject(firstBlock)) {\n        return 'imageBlock';\n    }\n    // A block image should also be inserted into an empty block element\n    // (that is not an empty list item so the list won't get split).\n    if (firstBlock.isEmpty && firstBlock.name != 'listItem') {\n        return 'imageBlock';\n    }\n    // Otherwise insert an inline image.\n    return 'imageInline';\n}\n/**\n * Returns parsed value of the size, but only if it contains unit: px.\n */\nexport function getSizeValueIfInPx(size) {\n    if (size && size.endsWith('px')) {\n        return parseInt(size);\n    }\n    return null;\n}\n/**\n * Returns true if both styles (width and height) are set.\n *\n * If both image styles: width & height are set, they will override the image width & height attributes in the\n * browser. In this case, the image looks the same as if these styles were applied to attributes instead of styles.\n * That's why we can upcast these styles to width & height attributes instead of resizedWidth and resizedHeight.\n */\nexport function widthAndHeightStylesAreBothSet(viewElement) {\n    const widthStyle = getSizeValueIfInPx(viewElement.getStyle('width'));\n    const heightStyle = getSizeValueIfInPx(viewElement.getStyle('height'));\n    return !!(widthStyle && heightStyle);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { findOptimalInsertionRange, isWidget, toWidget } from 'ckeditor5/src/widget.js';\nimport { determineImageTypeForInsertionAtSelection } from './image/utils.js';\nimport { DomEmitterMixin, global } from 'ckeditor5/src/utils.js';\nconst IMAGE_WIDGETS_CLASSES_MATCH_REGEXP = /^(image|image-inline)$/;\n/**\n * A set of helpers related to images.\n */\nexport default class ImageUtils extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * DOM Emitter.\n         */\n        this._domEmitter = new (DomEmitterMixin())();\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageUtils';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * Checks if the provided model element is an `image` or `imageInline`.\n     */\n    isImage(modelElement) {\n        return this.isInlineImage(modelElement) || this.isBlockImage(modelElement);\n    }\n    /**\n     * Checks if the provided view element represents an inline image.\n     *\n     * Also, see {@link module:image/imageutils~ImageUtils#isImageWidget}.\n     */\n    isInlineImageView(element) {\n        return !!element && element.is('element', 'img');\n    }\n    /**\n     * Checks if the provided view element represents a block image.\n     *\n     * Also, see {@link module:image/imageutils~ImageUtils#isImageWidget}.\n     */\n    isBlockImageView(element) {\n        return !!element && element.is('element', 'figure') && element.hasClass('image');\n    }\n    /**\n     * Handles inserting single file. This method unifies image insertion using {@link module:widget/utils~findOptimalInsertionRange}\n     * method.\n     *\n     * ```ts\n     * const imageUtils = editor.plugins.get( 'ImageUtils' );\n     *\n     * imageUtils.insertImage( { src: 'path/to/image.jpg' } );\n     * ```\n     *\n     * @param attributes Attributes of the inserted image.\n     * This method filters out the attributes which are disallowed by the {@link module:engine/model/schema~Schema}.\n     * @param selectable Place to insert the image. If not specified,\n     * the {@link module:widget/utils~findOptimalInsertionRange} logic will be applied for the block images\n     * and `model.document.selection` for the inline images.\n     *\n     * **Note**: If `selectable` is passed, this helper will not be able to set selection attributes (such as `linkHref`)\n     * and apply them to the new image. In this case, make sure all selection attributes are passed in `attributes`.\n     *\n     * @param imageType Image type of inserted image. If not specified,\n     * it will be determined automatically depending of editor config or place of the insertion.\n     * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.\n     * The default is `true`.\n     * @return The inserted model image element.\n     */\n    insertImage(attributes = {}, selectable = null, imageType = null, options = {}) {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        const determinedImageType = determineImageTypeForInsertion(editor, selectable || selection, imageType);\n        // Mix declarative attributes with selection attributes because the new image should \"inherit\"\n        // the latter for best UX. For instance, inline images inserted into existing links\n        // should not split them. To do that, they need to have \"linkHref\" inherited from the selection.\n        attributes = {\n            ...Object.fromEntries(selection.getAttributes()),\n            ...attributes\n        };\n        for (const attributeName in attributes) {\n            if (!model.schema.checkAttribute(determinedImageType, attributeName)) {\n                delete attributes[attributeName];\n            }\n        }\n        return model.change(writer => {\n            const { setImageSizes = true } = options;\n            const imageElement = writer.createElement(determinedImageType, attributes);\n            model.insertObject(imageElement, selectable, null, {\n                setSelection: 'on',\n                // If we want to insert a block image (for whatever reason) then we don't want to split text blocks.\n                // This applies only when we don't have the selectable specified (i.e., we insert multiple block images at once).\n                findOptimalPosition: !selectable && determinedImageType != 'imageInline' ? 'auto' : undefined\n            });\n            // Inserting an image might've failed due to schema regulations.\n            if (imageElement.parent) {\n                if (setImageSizes) {\n                    this.setImageNaturalSizeAttributes(imageElement);\n                }\n                return imageElement;\n            }\n            return null;\n        });\n    }\n    /**\n     * Reads original image sizes and sets them as `width` and `height`.\n     *\n     * The `src` attribute may not be available if the user is using an upload adapter. In such a case,\n     * this method is called again after the upload process is complete and the `src` attribute is available.\n     */\n    setImageNaturalSizeAttributes(imageElement) {\n        const src = imageElement.getAttribute('src');\n        if (!src) {\n            return;\n        }\n        if (imageElement.getAttribute('width') || imageElement.getAttribute('height')) {\n            return;\n        }\n        this.editor.model.change(writer => {\n            const img = new global.window.Image();\n            this._domEmitter.listenTo(img, 'load', () => {\n                if (!imageElement.getAttribute('width') && !imageElement.getAttribute('height')) {\n                    // We use writer.batch to be able to undo (in a single step) width and height setting\n                    // along with any change that triggered this action (e.g. image resize or image style change).\n                    this.editor.model.enqueueChange(writer.batch, writer => {\n                        writer.setAttribute('width', img.naturalWidth, imageElement);\n                        writer.setAttribute('height', img.naturalHeight, imageElement);\n                    });\n                }\n                this._domEmitter.stopListening(img, 'load');\n            });\n            img.src = src;\n        });\n    }\n    /**\n     * Returns an image widget editing view element if one is selected or is among the selection's ancestors.\n     */\n    getClosestSelectedImageWidget(selection) {\n        const selectionPosition = selection.getFirstPosition();\n        if (!selectionPosition) {\n            return null;\n        }\n        const viewElement = selection.getSelectedElement();\n        if (viewElement && this.isImageWidget(viewElement)) {\n            return viewElement;\n        }\n        let parent = selectionPosition.parent;\n        while (parent) {\n            if (parent.is('element') && this.isImageWidget(parent)) {\n                return parent;\n            }\n            parent = parent.parent;\n        }\n        return null;\n    }\n    /**\n     * Returns a image model element if one is selected or is among the selection's ancestors.\n     */\n    getClosestSelectedImageElement(selection) {\n        const selectedElement = selection.getSelectedElement();\n        return this.isImage(selectedElement) ? selectedElement : selection.getFirstPosition().findAncestor('imageBlock');\n    }\n    /**\n     * Returns an image widget editing view based on the passed image view.\n     */\n    getImageWidgetFromImageView(imageView) {\n        return imageView.findAncestor({ classes: IMAGE_WIDGETS_CLASSES_MATCH_REGEXP });\n    }\n    /**\n     * Checks if image can be inserted at current model selection.\n     *\n     * @internal\n     */\n    isImageAllowed() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        return isImageAllowedInParent(this.editor, selection) && isNotInsideImage(selection);\n    }\n    /**\n     * Converts a given {@link module:engine/view/element~Element} to an image widget:\n     * * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the image widget\n     * element.\n     * * Calls the {@link module:widget/utils~toWidget} function with the proper element's label creator.\n     *\n     * @param writer An instance of the view writer.\n     * @param label The element's label. It will be concatenated with the image `alt` attribute if one is present.\n     */\n    toImageWidget(viewElement, writer, label) {\n        writer.setCustomProperty('image', true, viewElement);\n        const labelCreator = () => {\n            const imgElement = this.findViewImgElement(viewElement);\n            const altText = imgElement.getAttribute('alt');\n            return altText ? `${altText} ${label}` : label;\n        };\n        return toWidget(viewElement, writer, { label: labelCreator });\n    }\n    /**\n     * Checks if a given view element is an image widget.\n     */\n    isImageWidget(viewElement) {\n        return !!viewElement.getCustomProperty('image') && isWidget(viewElement);\n    }\n    /**\n     * Checks if the provided model element is an `image`.\n     */\n    isBlockImage(modelElement) {\n        return !!modelElement && modelElement.is('element', 'imageBlock');\n    }\n    /**\n     * Checks if the provided model element is an `imageInline`.\n     */\n    isInlineImage(modelElement) {\n        return !!modelElement && modelElement.is('element', 'imageInline');\n    }\n    /**\n     * Get the view `<img>` from another view element, e.g. a widget (`<figure class=\"image\">`), a link (`<a>`).\n     *\n     * The `<img>` can be located deep in other elements, so this helper performs a deep tree search.\n     */\n    findViewImgElement(figureView) {\n        if (this.isInlineImageView(figureView)) {\n            return figureView;\n        }\n        const editingView = this.editor.editing.view;\n        for (const { item } of editingView.createRangeIn(figureView)) {\n            if (this.isInlineImageView(item)) {\n                return item;\n            }\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        this._domEmitter.stopListening();\n        return super.destroy();\n    }\n}\n/**\n * Checks if image is allowed by schema in optimal insertion parent.\n */\nfunction isImageAllowedInParent(editor, selection) {\n    const imageType = determineImageTypeForInsertion(editor, selection, null);\n    if (imageType == 'imageBlock') {\n        const parent = getInsertImageParent(selection, editor.model);\n        if (editor.model.schema.checkChild(parent, 'imageBlock')) {\n            return true;\n        }\n    }\n    else if (editor.model.schema.checkChild(selection.focus, 'imageInline')) {\n        return true;\n    }\n    return false;\n}\n/**\n * Checks if selection is not placed inside an image (e.g. its caption).\n */\nfunction isNotInsideImage(selection) {\n    return [...selection.focus.getAncestors()].every(ancestor => !ancestor.is('element', 'imageBlock'));\n}\n/**\n * Returns a node that will be used to insert image with `model.insertContent`.\n */\nfunction getInsertImageParent(selection, model) {\n    const insertionRange = findOptimalInsertionRange(selection, model);\n    const parent = insertionRange.start.parent;\n    if (parent.isEmpty && !parent.is('element', '$root')) {\n        return parent.parent;\n    }\n    return parent;\n}\n/**\n * Determine image element type name depending on editor config or place of insertion.\n *\n * @param imageType Image element type name. Used to force return of provided element name,\n * but only if there is proper plugin enabled.\n */\nfunction determineImageTypeForInsertion(editor, selectable, imageType) {\n    const schema = editor.model.schema;\n    const configImageInsertType = editor.config.get('image.insert.type');\n    if (!editor.plugins.has('ImageBlockEditing')) {\n        return 'imageInline';\n    }\n    if (!editor.plugins.has('ImageInlineEditing')) {\n        return 'imageBlock';\n    }\n    if (imageType) {\n        return imageType;\n    }\n    if (configImageInsertType === 'inline') {\n        return 'imageInline';\n    }\n    if (configImageInsertType !== 'auto') {\n        return 'imageBlock';\n    }\n    // Try to replace the selected widget (e.g. another image).\n    if (selectable.is('selection')) {\n        return determineImageTypeForInsertionAtSelection(schema, selectable);\n    }\n    return schema.checkChild(selectable, 'imageInline') ? 'imageInline' : 'imageBlock';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagetextalternative/imagetextalternativeediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageTextAlternativeCommand from './imagetextalternativecommand.js';\nimport ImageUtils from '../imageutils.js';\n/**\n * The image text alternative editing plugin.\n *\n * Registers the `'imageTextAlternative'` command.\n */\nexport default class ImageTextAlternativeEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageTextAlternativeEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        this.editor.commands.add('imageTextAlternative', new ImageTextAlternativeCommand(this.editor));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagetextalternative/ui/textalternativeformview\n */\nimport { ButtonView, FocusCycler, LabeledFieldView, View, ViewCollection, createLabeledInputText, submitHandler } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\nimport { icons } from 'ckeditor5/src/core.js';\nimport '../../../theme/textalternativeform.css';\n// See: #8833.\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport '@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css';\n/**\n * The TextAlternativeFormView class.\n */\nexport default class TextAlternativeFormView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        const t = this.locale.t;\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.labeledInput = this._createLabeledInputView();\n        this.saveButtonView = this._createButton(t('Save'), icons.check, 'ck-button-save');\n        this.saveButtonView.type = 'submit';\n        this.cancelButtonView = this._createButton(t('Cancel'), icons.cancel, 'ck-button-cancel', 'cancel');\n        this._focusables = new ViewCollection();\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-text-alternative-form',\n                    'ck-responsive-form'\n                ],\n                // https://github.com/ckeditor/ckeditor5-image/issues/40\n                tabindex: '-1'\n            },\n            children: [\n                this.labeledInput,\n                this.saveButtonView,\n                this.cancelButtonView\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.keystrokes.listenTo(this.element);\n        submitHandler({ view: this });\n        [this.labeledInput, this.saveButtonView, this.cancelButtonView]\n            .forEach(v => {\n            // Register the view as focusable.\n            this._focusables.add(v);\n            // Register the view in the focus tracker.\n            this.focusTracker.add(v.element);\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Creates the button view.\n     *\n     * @param label The button label\n     * @param icon The button's icon.\n     * @param className The additional button CSS class name.\n     * @param eventName The event name that the ButtonView#execute event will be delegated to.\n     * @returns The button view instance.\n     */\n    _createButton(label, icon, className, eventName) {\n        const button = new ButtonView(this.locale);\n        button.set({\n            label,\n            icon,\n            tooltip: true\n        });\n        button.extendTemplate({\n            attributes: {\n                class: className\n            }\n        });\n        if (eventName) {\n            button.delegate('execute').to(this, eventName);\n        }\n        return button;\n    }\n    /**\n     * Creates an input with a label.\n     *\n     * @returns Labeled field view instance.\n     */\n    _createLabeledInputView() {\n        const t = this.locale.t;\n        const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n        labeledInput.label = t('Text alternative');\n        return labeledInput;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { BalloonPanelView } from 'ckeditor5/src/ui.js';\n/**\n * A helper utility that positions the\n * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance\n * with respect to the image in the editor content, if one is selected.\n *\n * @param editor The editor instance.\n */\nexport function repositionContextualBalloon(editor) {\n    const balloon = editor.plugins.get('ContextualBalloon');\n    const imageUtils = editor.plugins.get('ImageUtils');\n    if (imageUtils.getClosestSelectedImageWidget(editor.editing.view.document.selection)) {\n        const position = getBalloonPositionData(editor);\n        balloon.updatePosition(position);\n    }\n}\n/**\n * Returns the positioning options that control the geometry of the\n * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect\n * to the selected element in the editor content.\n *\n * @param editor The editor instance.\n */\nexport function getBalloonPositionData(editor) {\n    const editingView = editor.editing.view;\n    const defaultPositions = BalloonPanelView.defaultPositions;\n    const imageUtils = editor.plugins.get('ImageUtils');\n    return {\n        target: editingView.domConverter.mapViewToDom(imageUtils.getClosestSelectedImageWidget(editingView.document.selection)),\n        positions: [\n            defaultPositions.northArrowSouth,\n            defaultPositions.northArrowSouthWest,\n            defaultPositions.northArrowSouthEast,\n            defaultPositions.southArrowNorth,\n            defaultPositions.southArrowNorthWest,\n            defaultPositions.southArrowNorthEast,\n            defaultPositions.viewportStickyNorth\n        ]\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagetextalternative/imagetextalternativeui\n */\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { ButtonView, ContextualBalloon, clickOutsideHandler, CssTransitionDisablerMixin } from 'ckeditor5/src/ui.js';\nimport TextAlternativeFormView from './ui/textalternativeformview.js';\nimport { repositionContextualBalloon, getBalloonPositionData } from '../image/ui/utils.js';\n/**\n * The image text alternative UI plugin.\n *\n * The plugin uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon}.\n */\nexport default class ImageTextAlternativeUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ContextualBalloon];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageTextAlternativeUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        this._createButton();\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        // Destroy created UI components as they are not automatically destroyed (see ckeditor5#1341).\n        if (this._form) {\n            this._form.destroy();\n        }\n    }\n    /**\n     * Creates a button showing the balloon panel for changing the image text alternative and\n     * registers it in the editor {@link module:ui/componentfactory~ComponentFactory ComponentFactory}.\n     */\n    _createButton() {\n        const editor = this.editor;\n        const t = editor.t;\n        editor.ui.componentFactory.add('imageTextAlternative', locale => {\n            const command = editor.commands.get('imageTextAlternative');\n            const view = new ButtonView(locale);\n            view.set({\n                label: t('Change image text alternative'),\n                icon: icons.textAlternative,\n                tooltip: true\n            });\n            view.bind('isEnabled').to(command, 'isEnabled');\n            view.bind('isOn').to(command, 'value', value => !!value);\n            this.listenTo(view, 'execute', () => {\n                this._showForm();\n            });\n            return view;\n        });\n    }\n    /**\n     * Creates the {@link module:image/imagetextalternative/ui/textalternativeformview~TextAlternativeFormView}\n     * form.\n     */\n    _createForm() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        this._balloon = this.editor.plugins.get('ContextualBalloon');\n        this._form = new (CssTransitionDisablerMixin(TextAlternativeFormView))(editor.locale);\n        // Render the form so its #element is available for clickOutsideHandler.\n        this._form.render();\n        this.listenTo(this._form, 'submit', () => {\n            editor.execute('imageTextAlternative', {\n                newValue: this._form.labeledInput.fieldView.element.value\n            });\n            this._hideForm(true);\n        });\n        this.listenTo(this._form, 'cancel', () => {\n            this._hideForm(true);\n        });\n        // Close the form on Esc key press.\n        this._form.keystrokes.set('Esc', (data, cancel) => {\n            this._hideForm(true);\n            cancel();\n        });\n        // Reposition the balloon or hide the form if an image widget is no longer selected.\n        this.listenTo(editor.ui, 'update', () => {\n            if (!imageUtils.getClosestSelectedImageWidget(viewDocument.selection)) {\n                this._hideForm(true);\n            }\n            else if (this._isVisible) {\n                repositionContextualBalloon(editor);\n            }\n        });\n        // Close on click outside of balloon panel element.\n        clickOutsideHandler({\n            emitter: this._form,\n            activator: () => this._isVisible,\n            contextElements: () => [this._balloon.view.element],\n            callback: () => this._hideForm()\n        });\n    }\n    /**\n     * Shows the {@link #_form} in the {@link #_balloon}.\n     */\n    _showForm() {\n        if (this._isVisible) {\n            return;\n        }\n        if (!this._form) {\n            this._createForm();\n        }\n        const editor = this.editor;\n        const command = editor.commands.get('imageTextAlternative');\n        const labeledInput = this._form.labeledInput;\n        this._form.disableCssTransitions();\n        if (!this._isInBalloon) {\n            this._balloon.add({\n                view: this._form,\n                position: getBalloonPositionData(editor)\n            });\n        }\n        // Make sure that each time the panel shows up, the field remains in sync with the value of\n        // the command. If the user typed in the input, then canceled the balloon (`labeledInput#value`\n        // stays unaltered) and re-opened it without changing the value of the command, they would see the\n        // old value instead of the actual value of the command.\n        // https://github.com/ckeditor/ckeditor5-image/issues/114\n        labeledInput.fieldView.value = labeledInput.fieldView.element.value = command.value || '';\n        this._form.labeledInput.fieldView.select();\n        this._form.enableCssTransitions();\n    }\n    /**\n     * Removes the {@link #_form} from the {@link #_balloon}.\n     *\n     * @param focusEditable Controls whether the editing view is focused afterwards.\n     */\n    _hideForm(focusEditable = false) {\n        if (!this._isInBalloon) {\n            return;\n        }\n        // Blur the input element before removing it from DOM to prevent issues in some browsers.\n        // See https://github.com/ckeditor/ckeditor5/issues/1501.\n        if (this._form.focusTracker.isFocused) {\n            this._form.saveButtonView.focus();\n        }\n        this._balloon.remove(this._form);\n        if (focusEditable) {\n            this.editor.editing.view.focus();\n        }\n    }\n    /**\n     * Returns `true` when the {@link #_form} is the visible view in the {@link #_balloon}.\n     */\n    get _isVisible() {\n        return !!this._balloon && this._balloon.visibleView === this._form;\n    }\n    /**\n     * Returns `true` when the {@link #_form} is in the {@link #_balloon}.\n     */\n    get _isInBalloon() {\n        return !!this._balloon && this._balloon.hasView(this._form);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagetextalternative\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageTextAlternativeEditing from './imagetextalternative/imagetextalternativeediting.js';\nimport ImageTextAlternativeUI from './imagetextalternative/imagetextalternativeui.js';\n/**\n * The image text alternative plugin.\n *\n * For a detailed overview, check the {@glink features/images/images-styles image styles} documentation.\n *\n * This is a \"glue\" plugin which loads the\n *  {@link module:image/imagetextalternative/imagetextalternativeediting~ImageTextAlternativeEditing}\n * and {@link module:image/imagetextalternative/imagetextalternativeui~ImageTextAlternativeUI} plugins.\n */\nexport default class ImageTextAlternative extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageTextAlternativeEditing, ImageTextAlternativeUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageTextAlternative';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { first } from 'ckeditor5/src/utils.js';\n/**\n * Returns a function that converts the image view representation:\n *\n * ```html\n * <figure class=\"image\"><img src=\"...\" alt=\"...\"></img></figure>\n * ```\n *\n * to the model representation:\n *\n * ```html\n * <imageBlock src=\"...\" alt=\"...\"></imageBlock>\n * ```\n *\n * The entire content of the `<figure>` element except the first `<img>` is being converted as children\n * of the `<imageBlock>` model element.\n *\n * @internal\n */\nexport function upcastImageFigure(imageUtils) {\n    const converter = (evt, data, conversionApi) => {\n        // Do not convert if this is not an \"image figure\".\n        if (!conversionApi.consumable.test(data.viewItem, { name: true, classes: 'image' })) {\n            return;\n        }\n        // Find an image element inside the figure element.\n        const viewImage = imageUtils.findViewImgElement(data.viewItem);\n        // Do not convert if image element is absent or was already converted.\n        if (!viewImage || !conversionApi.consumable.test(viewImage, { name: true })) {\n            return;\n        }\n        // Consume the figure to prevent other converters from processing it again.\n        conversionApi.consumable.consume(data.viewItem, { name: true, classes: 'image' });\n        // Convert view image to model image.\n        const conversionResult = conversionApi.convertItem(viewImage, data.modelCursor);\n        // Get image element from conversion result.\n        const modelImage = first(conversionResult.modelRange.getItems());\n        // When image wasn't successfully converted then finish conversion.\n        if (!modelImage) {\n            // Revert consumed figure so other features can convert it.\n            conversionApi.consumable.revert(data.viewItem, { name: true, classes: 'image' });\n            return;\n        }\n        // Convert rest of the figure element's children as an image children.\n        conversionApi.convertChildren(data.viewItem, modelImage);\n        conversionApi.updateConversionResult(modelImage, data);\n    };\n    return dispatcher => {\n        dispatcher.on('element:figure', converter);\n    };\n}\n/**\n * Returns a function that converts the image view representation:\n *\n * ```html\n * <picture><source ... /><source ... />...<img ... /></picture>\n * ```\n *\n * to the model representation as the `sources` attribute:\n *\n * ```html\n * <image[Block|Inline] ... sources=\"...\"></image[Block|Inline]>\n * ```\n *\n * @internal\n */\nexport function upcastPicture(imageUtils) {\n    const sourceAttributeNames = ['srcset', 'media', 'type', 'sizes'];\n    const converter = (evt, data, conversionApi) => {\n        const pictureViewElement = data.viewItem;\n        // Do not convert <picture> if already consumed.\n        if (!conversionApi.consumable.test(pictureViewElement, { name: true })) {\n            return;\n        }\n        const sources = new Map();\n        // Collect all <source /> elements attribute values.\n        for (const childSourceElement of pictureViewElement.getChildren()) {\n            if (childSourceElement.is('element', 'source')) {\n                const attributes = {};\n                for (const name of sourceAttributeNames) {\n                    if (childSourceElement.hasAttribute(name)) {\n                        // Don't collect <source /> attribute if already consumed somewhere else.\n                        if (conversionApi.consumable.test(childSourceElement, { attributes: name })) {\n                            attributes[name] = childSourceElement.getAttribute(name);\n                        }\n                    }\n                }\n                if (Object.keys(attributes).length) {\n                    sources.set(childSourceElement, attributes);\n                }\n            }\n        }\n        const imgViewElement = imageUtils.findViewImgElement(pictureViewElement);\n        // Don't convert when a picture has no <img/> inside (it is broken).\n        if (!imgViewElement) {\n            return;\n        }\n        let modelImage = data.modelCursor.parent;\n        // - In case of an inline image (cursor parent in a <paragraph>), the <img/> must be converted right away\n        // because no converter handled it yet and otherwise there would be no model element to set the sources attribute on.\n        // - In case of a block image, the <figure class=\"image\"> converter (in ImageBlockEditing) converts the\n        // <img/> right away on its own and the modelCursor is already inside an imageBlock and there's nothing special\n        // to do here.\n        if (!modelImage.is('element', 'imageBlock')) {\n            const conversionResult = conversionApi.convertItem(imgViewElement, data.modelCursor);\n            // Set image range as conversion result.\n            data.modelRange = conversionResult.modelRange;\n            // Continue conversion where image conversion ends.\n            data.modelCursor = conversionResult.modelCursor;\n            modelImage = first(conversionResult.modelRange.getItems());\n        }\n        conversionApi.consumable.consume(pictureViewElement, { name: true });\n        // Consume only these <source/> attributes that were actually collected and will be passed on\n        // to the image model element.\n        for (const [sourceElement, attributes] of sources) {\n            conversionApi.consumable.consume(sourceElement, { attributes: Object.keys(attributes) });\n        }\n        if (sources.size) {\n            conversionApi.writer.setAttribute('sources', Array.from(sources.values()), modelImage);\n        }\n        // Convert rest of the <picture> children as an image children. Other converters may want to consume them.\n        conversionApi.convertChildren(pictureViewElement, modelImage);\n    };\n    return dispatcher => {\n        dispatcher.on('element:picture', converter);\n    };\n}\n/**\n * Converter used to convert the `srcset` model image attribute to the `srcset` and `sizes` attributes in the view.\n *\n * @internal\n * @param imageType The type of the image.\n */\nexport function downcastSrcsetAttribute(imageUtils, imageType) {\n    const converter = (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        const writer = conversionApi.writer;\n        const element = conversionApi.mapper.toViewElement(data.item);\n        const img = imageUtils.findViewImgElement(element);\n        if (data.attributeNewValue === null) {\n            writer.removeAttribute('srcset', img);\n            writer.removeAttribute('sizes', img);\n        }\n        else {\n            if (data.attributeNewValue) {\n                writer.setAttribute('srcset', data.attributeNewValue, img);\n                // Always outputting `100vw`. See https://github.com/ckeditor/ckeditor5-image/issues/2.\n                writer.setAttribute('sizes', '100vw', img);\n            }\n        }\n    };\n    return dispatcher => {\n        dispatcher.on(`attribute:srcset:${imageType}`, converter);\n    };\n}\n/**\n * Converts the `source` model attribute to the `<picture><source /><source />...<img /></picture>`\n * view structure.\n *\n * @internal\n */\nexport function downcastSourcesAttribute(imageUtils) {\n    const converter = (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        const viewWriter = conversionApi.writer;\n        const element = conversionApi.mapper.toViewElement(data.item);\n        const imgElement = imageUtils.findViewImgElement(element);\n        const attributeNewValue = data.attributeNewValue;\n        if (attributeNewValue && attributeNewValue.length) {\n            // Collect all wrapping attribute elements.\n            const attributeElements = [];\n            let viewElement = imgElement.parent;\n            while (viewElement && viewElement.is('attributeElement')) {\n                const parentElement = viewElement.parent;\n                viewWriter.unwrap(viewWriter.createRangeOn(imgElement), viewElement);\n                attributeElements.unshift(viewElement);\n                viewElement = parentElement;\n            }\n            const hasPictureElement = imgElement.parent.is('element', 'picture');\n            // Reuse existing <picture> element (ckeditor5#17192) or create a new one.\n            const pictureElement = hasPictureElement ? imgElement.parent : viewWriter.createContainerElement('picture', null);\n            if (!hasPictureElement) {\n                viewWriter.insert(viewWriter.createPositionBefore(imgElement), pictureElement);\n            }\n            viewWriter.remove(viewWriter.createRangeIn(pictureElement));\n            viewWriter.insert(viewWriter.createPositionAt(pictureElement, 'end'), attributeNewValue.map(sourceAttributes => {\n                return viewWriter.createEmptyElement('source', sourceAttributes);\n            }));\n            viewWriter.move(viewWriter.createRangeOn(imgElement), viewWriter.createPositionAt(pictureElement, 'end'));\n            // Apply collected attribute elements over the new picture element.\n            for (const attributeElement of attributeElements) {\n                viewWriter.wrap(viewWriter.createRangeOn(pictureElement), attributeElement);\n            }\n        }\n        // Both setting \"sources\" to an empty array and removing the attribute should unwrap the <img />.\n        // Unwrap once if the latter followed the former, though.\n        else if (imgElement.parent.is('element', 'picture')) {\n            const pictureElement = imgElement.parent;\n            viewWriter.move(viewWriter.createRangeOn(imgElement), viewWriter.createPositionBefore(pictureElement));\n            viewWriter.remove(pictureElement);\n        }\n    };\n    return dispatcher => {\n        dispatcher.on('attribute:sources:imageBlock', converter);\n        dispatcher.on('attribute:sources:imageInline', converter);\n    };\n}\n/**\n * Converter used to convert a given image attribute from the model to the view.\n *\n * @internal\n * @param imageType The type of the image.\n * @param attributeKey The name of the attribute to convert.\n */\nexport function downcastImageAttribute(imageUtils, imageType, attributeKey) {\n    const converter = (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        const viewWriter = conversionApi.writer;\n        const element = conversionApi.mapper.toViewElement(data.item);\n        const img = imageUtils.findViewImgElement(element);\n        viewWriter.setAttribute(data.attributeKey, data.attributeNewValue || '', img);\n    };\n    return dispatcher => {\n        dispatcher.on(`attribute:${attributeKey}:${imageType}`, converter);\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/image/imageloadobserver\n */\nimport { Observer } from 'ckeditor5/src/engine.js';\n/**\n * Observes all new images added to the {@link module:engine/view/document~Document},\n * fires {@link module:engine/view/document~Document#event:imageLoaded} and\n * {@link module:engine/view/document~Document#event:layoutChanged} event every time when the new image\n * has been loaded.\n *\n * **Note:** This event is not fired for images that has been added to the document and rendered as `complete` (already loaded).\n */\nexport default class ImageLoadObserver extends Observer {\n    /**\n     * @inheritDoc\n     */\n    observe(domRoot) {\n        this.listenTo(domRoot, 'load', (event, domEvent) => {\n            const domElement = domEvent.target;\n            if (this.checkShouldIgnoreEventFromTarget(domElement)) {\n                return;\n            }\n            if (domElement.tagName == 'IMG') {\n                this._fireEvents(domEvent);\n            }\n            // Use capture phase for better performance (#4504).\n        }, { useCapture: true });\n    }\n    /**\n     * @inheritDoc\n     */\n    stopObserving(domRoot) {\n        this.stopListening(domRoot);\n    }\n    /**\n     * Fires {@link module:engine/view/document~Document#event:layoutChanged} and\n     * {@link module:engine/view/document~Document#event:imageLoaded}\n     * if observer {@link #isEnabled is enabled}.\n     *\n     * @param domEvent The DOM event.\n     */\n    _fireEvents(domEvent) {\n        if (this.isEnabled) {\n            this.document.fire('layoutChanged');\n            this.document.fire('imageLoaded', domEvent);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/image/insertimagecommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { logWarning, toArray } from 'ckeditor5/src/utils.js';\n/**\n * Insert image command.\n *\n * The command is registered by the {@link module:image/image/imageediting~ImageEditing} plugin as `insertImage`\n * and it is also available via aliased `imageInsert` name.\n *\n * In order to insert an image at the current selection position\n * (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),\n * execute the command and specify the image source:\n *\n * ```ts\n * editor.execute( 'insertImage', { source: 'http://url.to.the/image' } );\n * ```\n *\n * It is also possible to insert multiple images at once:\n *\n * ```ts\n * editor.execute( 'insertImage', {\n * \tsource:  [\n * \t\t'path/to/image.jpg',\n * \t\t'path/to/other-image.jpg'\n * \t]\n * } );\n * ```\n *\n * If you want to take the full control over the process, you can specify individual model attributes:\n *\n * ```ts\n * editor.execute( 'insertImage', {\n * \tsource:  [\n * \t\t{ src: 'path/to/image.jpg', alt: 'First alt text' },\n * \t\t{ src: 'path/to/other-image.jpg', alt: 'Second alt text', customAttribute: 'My attribute value' }\n * \t]\n * } );\n * ```\n */\nexport default class InsertImageCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        const configImageInsertType = editor.config.get('image.insert.type');\n        if (!editor.plugins.has('ImageBlockEditing')) {\n            if (configImageInsertType === 'block') {\n                /**\n                 * The {@link module:image/imageblock~ImageBlock} plugin must be enabled to allow inserting block images. See\n                 * {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.\n                 *\n                 * @error image-block-plugin-required\n                 */\n                logWarning('image-block-plugin-required');\n            }\n        }\n        if (!editor.plugins.has('ImageInlineEditing')) {\n            if (configImageInsertType === 'inline') {\n                /**\n                 * The {@link module:image/imageinline~ImageInline} plugin must be enabled to allow inserting inline images. See\n                 * {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.\n                 *\n                 * @error image-inline-plugin-required\n                 */\n                logWarning('image-inline-plugin-required');\n            }\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const imageUtils = this.editor.plugins.get('ImageUtils');\n        this.isEnabled = imageUtils.isImageAllowed();\n    }\n    /**\n     * Executes the command.\n     *\n     * @fires execute\n     * @param options Options for the executed command.\n     * @param options.imageType The type of the image to insert. If not specified, the type will be determined automatically.\n     * @param options.source The image source or an array of image sources to insert.\n     * See the documentation of the command to learn more about accepted formats.\n     */\n    execute(options) {\n        const sourceDefinitions = toArray(options.source);\n        const selection = this.editor.model.document.selection;\n        const imageUtils = this.editor.plugins.get('ImageUtils');\n        // In case of multiple images, each image (starting from the 2nd) will be inserted at a position that\n        // follows the previous one. That will move the selection and, to stay on the safe side and make sure\n        // all images inherit the same selection attributes, they are collected beforehand.\n        //\n        // Applying these attributes ensures, for instance, that inserting an (inline) image into a link does\n        // not split that link but preserves its continuity.\n        //\n        // Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.\n        const selectionAttributes = Object.fromEntries(selection.getAttributes());\n        sourceDefinitions.forEach((sourceDefinition, index) => {\n            const selectedElement = selection.getSelectedElement();\n            if (typeof sourceDefinition === 'string') {\n                sourceDefinition = { src: sourceDefinition };\n            }\n            // Inserting of an inline image replace the selected element and make a selection on the inserted image.\n            // Therefore inserting multiple inline images requires creating position after each element.\n            if (index && selectedElement && imageUtils.isImage(selectedElement)) {\n                const position = this.editor.model.createPositionAfter(selectedElement);\n                imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes }, position, options.imageType);\n            }\n            else {\n                imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes }, null, options.imageType);\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * @module image/image/replaceimagesourcecommand\n */\n/**\n * Replace image source command.\n *\n * Changes image source to the one provided. Can be executed as follows:\n *\n * ```ts\n * editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );\n * ```\n */\nexport default class ReplaceImageSourceCommand extends Command {\n    constructor(editor) {\n        super(editor);\n        this.decorate('cleanupImage');\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const element = this.editor.model.document.selection.getSelectedElement();\n        this.isEnabled = imageUtils.isImage(element);\n        this.value = this.isEnabled ? element.getAttribute('src') : null;\n    }\n    /**\n     * Executes the command.\n     *\n     * @fires execute\n     * @param options Options for the executed command.\n     * @param options.source The image source to replace.\n     */\n    execute(options) {\n        const image = this.editor.model.document.selection.getSelectedElement();\n        const imageUtils = this.editor.plugins.get('ImageUtils');\n        this.editor.model.change(writer => {\n            writer.setAttribute('src', options.source, image);\n            this.cleanupImage(writer, image);\n            imageUtils.setImageNaturalSizeAttributes(image);\n        });\n    }\n    /**\n     * Cleanup image attributes that are not relevant to the new source.\n     *\n     * Removed attributes are: 'srcset', 'sizes', 'sources', 'width', 'height', 'alt'.\n     *\n     * This method is decorated, to allow custom cleanup logic.\n     * For example, to remove 'myImageId' attribute after 'src' has changed:\n     *\n     * ```ts\n     * replaceImageSourceCommand.on( 'cleanupImage', ( eventInfo, [ writer, image ] ) => {\n     * \twriter.removeAttribute( 'myImageId', image );\n     * } );\n     * ```\n     */\n    cleanupImage(writer, image) {\n        writer.removeAttribute('srcset', image);\n        writer.removeAttribute('sizes', image);\n        /**\n         * In case responsive images some attributes should be cleaned up.\n         * Check: https://github.com/ckeditor/ckeditor5/issues/15093\n         */\n        writer.removeAttribute('sources', image);\n        writer.removeAttribute('width', image);\n        writer.removeAttribute('height', image);\n        writer.removeAttribute('alt', image);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/image/imageediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageLoadObserver from './imageloadobserver.js';\nimport InsertImageCommand from './insertimagecommand.js';\nimport ReplaceImageSourceCommand from './replaceimagesourcecommand.js';\nimport ImageUtils from '../imageutils.js';\n/**\n * The image engine plugin. This module loads common code shared between\n * {@link module:image/image/imageinlineediting~ImageInlineEditing} and\n * {@link module:image/image/imageblockediting~ImageBlockEditing} plugins.\n *\n * This plugin registers the {@link module:image/image/insertimagecommand~InsertImageCommand 'insertImage'} command.\n */\nexport default class ImageEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const conversion = editor.conversion;\n        // See https://github.com/ckeditor/ckeditor5-image/issues/142.\n        editor.editing.view.addObserver(ImageLoadObserver);\n        conversion.for('upcast')\n            .attributeToAttribute({\n            view: {\n                name: 'img',\n                key: 'alt'\n            },\n            model: 'alt'\n        })\n            .attributeToAttribute({\n            view: {\n                name: 'img',\n                key: 'srcset'\n            },\n            model: 'srcset'\n        });\n        const insertImageCommand = new InsertImageCommand(editor);\n        const replaceImageSourceCommand = new ReplaceImageSourceCommand(editor);\n        editor.commands.add('insertImage', insertImageCommand);\n        editor.commands.add('replaceImageSource', replaceImageSourceCommand);\n        // `imageInsert` is an alias for backward compatibility.\n        editor.commands.add('imageInsert', insertImageCommand);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagesizeattributes\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageUtils from './imageutils.js';\nimport { widthAndHeightStylesAreBothSet, getSizeValueIfInPx } from './image/utils.js';\n/**\n * This plugin enables `width` and `height` attributes in inline and block image elements.\n */\nexport default class ImageSizeAttributes extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageSizeAttributes';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        this._registerSchema();\n        this._registerConverters('imageBlock');\n        this._registerConverters('imageInline');\n    }\n    /**\n     * Registers the `width` and `height` attributes for inline and block images.\n     */\n    _registerSchema() {\n        if (this.editor.plugins.has('ImageBlockEditing')) {\n            this.editor.model.schema.extend('imageBlock', { allowAttributes: ['width', 'height'] });\n        }\n        if (this.editor.plugins.has('ImageInlineEditing')) {\n            this.editor.model.schema.extend('imageInline', { allowAttributes: ['width', 'height'] });\n        }\n    }\n    /**\n     * Registers converters for `width` and `height` attributes.\n     */\n    _registerConverters(imageType) {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const viewElementName = imageType === 'imageBlock' ? 'figure' : 'img';\n        editor.conversion.for('upcast')\n            .attributeToAttribute({\n            view: {\n                name: viewElementName,\n                styles: {\n                    width: /.+/\n                }\n            },\n            model: {\n                key: 'width',\n                value: (viewElement) => {\n                    if (widthAndHeightStylesAreBothSet(viewElement)) {\n                        return getSizeValueIfInPx(viewElement.getStyle('width'));\n                    }\n                    return null;\n                }\n            }\n        })\n            .attributeToAttribute({\n            view: {\n                name: viewElementName,\n                key: 'width'\n            },\n            model: 'width'\n        })\n            .attributeToAttribute({\n            view: {\n                name: viewElementName,\n                styles: {\n                    height: /.+/\n                }\n            },\n            model: {\n                key: 'height',\n                value: (viewElement) => {\n                    if (widthAndHeightStylesAreBothSet(viewElement)) {\n                        return getSizeValueIfInPx(viewElement.getStyle('height'));\n                    }\n                    return null;\n                }\n            }\n        })\n            .attributeToAttribute({\n            view: {\n                name: viewElementName,\n                key: 'height'\n            },\n            model: 'height'\n        });\n        // Dedicated converters to propagate attributes to the <img> element.\n        editor.conversion.for('editingDowncast').add(dispatcher => {\n            attachDowncastConverter(dispatcher, 'width', 'width', true);\n            attachDowncastConverter(dispatcher, 'height', 'height', true);\n        });\n        editor.conversion.for('dataDowncast').add(dispatcher => {\n            attachDowncastConverter(dispatcher, 'width', 'width', false);\n            attachDowncastConverter(dispatcher, 'height', 'height', false);\n        });\n        function attachDowncastConverter(dispatcher, modelAttributeName, viewAttributeName, setRatioForInlineImage) {\n            dispatcher.on(`attribute:${modelAttributeName}:${imageType}`, (evt, data, conversionApi) => {\n                if (!conversionApi.consumable.consume(data.item, evt.name)) {\n                    return;\n                }\n                const viewWriter = conversionApi.writer;\n                const viewElement = conversionApi.mapper.toViewElement(data.item);\n                const img = imageUtils.findViewImgElement(viewElement);\n                if (data.attributeNewValue !== null) {\n                    viewWriter.setAttribute(viewAttributeName, data.attributeNewValue, img);\n                }\n                else {\n                    viewWriter.removeAttribute(viewAttributeName, img);\n                }\n                // Do not set aspect-ratio for pictures. See https://github.com/ckeditor/ckeditor5/issues/14579.\n                if (data.item.hasAttribute('sources')) {\n                    return;\n                }\n                const isResized = data.item.hasAttribute('resizedWidth');\n                // Do not set aspect ratio for inline images which are not resized (data pipeline).\n                if (imageType === 'imageInline' && !isResized && !setRatioForInlineImage) {\n                    return;\n                }\n                const width = data.item.getAttribute('width');\n                const height = data.item.getAttribute('height');\n                if (width && height) {\n                    viewWriter.setStyle('aspect-ratio', `${width}/${height}`, img);\n                }\n            });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The image type command. It changes the type of a selected image, depending on the configuration.\n */\nexport default class ImageTypeCommand extends Command {\n    /**\n     * @inheritDoc\n     *\n     * @param modelElementName Model element name the command converts to.\n     */\n    constructor(editor, modelElementName) {\n        super(editor);\n        this._modelElementName = modelElementName;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);\n        if (this._modelElementName === 'imageBlock') {\n            this.isEnabled = imageUtils.isInlineImage(element);\n        }\n        else {\n            this.isEnabled = imageUtils.isBlockImage(element);\n        }\n    }\n    /**\n     * Executes the command and changes the type of a selected image.\n     *\n     * @fires execute\n     * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.\n     * The default is `true`.\n     * @returns An object containing references to old and new model image elements\n     * (for before and after the change) so external integrations can hook into the decorated\n     * `execute` event and handle this change. `null` if the type change failed.\n     */\n    execute(options = {}) {\n        const editor = this.editor;\n        const model = this.editor.model;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const oldElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n        const attributes = Object.fromEntries(oldElement.getAttributes());\n        // Don't change image type if \"src\" is missing (a broken image), unless there's \"uploadId\" set.\n        // This state may happen during image upload (before it finishes) and it should be possible to change type\n        // of the image in the meantime.\n        if (!attributes.src && !attributes.uploadId) {\n            return null;\n        }\n        return model.change(writer => {\n            const { setImageSizes = true } = options;\n            // Get all markers that contain the old image element.\n            const markers = Array.from(model.markers)\n                .filter(marker => marker.getRange().containsItem(oldElement));\n            const newElement = imageUtils.insertImage(attributes, model.createSelection(oldElement, 'on'), this._modelElementName, { setImageSizes });\n            if (!newElement) {\n                return null;\n            }\n            const newElementRange = writer.createRangeOn(newElement);\n            // Expand the previously intersecting markers' ranges to include the new image element.\n            for (const marker of markers) {\n                const markerRange = marker.getRange();\n                // Join the survived part of the old marker range with the new element range\n                // (loosely because there could be some new paragraph or the existing one might got split).\n                const range = markerRange.root.rootName != '$graveyard' ?\n                    markerRange.getJoined(newElementRange, true) : newElementRange;\n                writer.updateMarker(marker, { range });\n            }\n            return {\n                oldElement,\n                newElement\n            };\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/image/imageplaceholder\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageUtils from '../imageutils.js';\nimport ImageLoadObserver from './imageloadobserver.js';\nimport '../../theme/imageplaceholder.css';\n/**\n * Adds support for image placeholder that is automatically removed when the image is loaded.\n */\nexport default class ImagePlaceholder extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImagePlaceholder';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        this._setupSchema();\n        this._setupConversion();\n        this._setupLoadListener();\n    }\n    /**\n     * Extends model schema.\n     */\n    _setupSchema() {\n        const schema = this.editor.model.schema;\n        // Wait for ImageBlockEditing or ImageInlineEditing to register their elements first,\n        // that's why doing this in afterInit() instead of init().\n        if (schema.isRegistered('imageBlock')) {\n            schema.extend('imageBlock', {\n                allowAttributes: ['placeholder']\n            });\n        }\n        if (schema.isRegistered('imageInline')) {\n            schema.extend('imageInline', {\n                allowAttributes: ['placeholder']\n            });\n        }\n    }\n    /**\n     * Registers converters.\n     */\n    _setupConversion() {\n        const editor = this.editor;\n        const conversion = editor.conversion;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        conversion.for('editingDowncast').add(dispatcher => {\n            dispatcher.on('attribute:placeholder', (evt, data, conversionApi) => {\n                if (!conversionApi.consumable.test(data.item, evt.name)) {\n                    return;\n                }\n                if (!data.item.is('element', 'imageBlock') && !data.item.is('element', 'imageInline')) {\n                    return;\n                }\n                conversionApi.consumable.consume(data.item, evt.name);\n                const viewWriter = conversionApi.writer;\n                const element = conversionApi.mapper.toViewElement(data.item);\n                const img = imageUtils.findViewImgElement(element);\n                if (data.attributeNewValue) {\n                    viewWriter.addClass('image_placeholder', img);\n                    viewWriter.setStyle('background-image', `url(${data.attributeNewValue})`, img);\n                    viewWriter.setCustomProperty('editingPipeline:doNotReuseOnce', true, img);\n                }\n                else {\n                    viewWriter.removeClass('image_placeholder', img);\n                    viewWriter.removeStyle('background-image', img);\n                }\n            });\n        });\n    }\n    /**\n     * Prepares listener for image load.\n     */\n    _setupLoadListener() {\n        const editor = this.editor;\n        const model = editor.model;\n        const editing = editor.editing;\n        const editingView = editing.view;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        editingView.addObserver(ImageLoadObserver);\n        this.listenTo(editingView.document, 'imageLoaded', (evt, domEvent) => {\n            const imgViewElement = editingView.domConverter.mapDomToView(domEvent.target);\n            if (!imgViewElement) {\n                return;\n            }\n            const viewElement = imageUtils.getImageWidgetFromImageView(imgViewElement);\n            if (!viewElement) {\n                return;\n            }\n            const modelElement = editing.mapper.toModelElement(viewElement);\n            if (!modelElement || !modelElement.hasAttribute('placeholder')) {\n                return;\n            }\n            model.enqueueChange({ isUndoable: false }, writer => {\n                writer.removeAttribute('placeholder', modelElement);\n            });\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/image/imageblockediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';\nimport { UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { downcastImageAttribute, downcastSrcsetAttribute, upcastImageFigure } from './converters.js';\nimport ImageEditing from './imageediting.js';\nimport ImageSizeAttributes from '../imagesizeattributes.js';\nimport ImageTypeCommand from './imagetypecommand.js';\nimport ImageUtils from '../imageutils.js';\nimport { getImgViewElementMatcher, createBlockImageViewElement, determineImageTypeForInsertionAtSelection } from './utils.js';\nimport ImagePlaceholder from './imageplaceholder.js';\n/**\n * The image block plugin.\n *\n * It registers:\n *\n * * `<imageBlock>` as a block element in the document schema, and allows `alt`, `src` and `srcset` attributes.\n * * converters for editing and data pipelines.,\n * * {@link module:image/image/imagetypecommand~ImageTypeCommand `'imageTypeBlock'`} command that converts inline images into\n * block images.\n */\nexport default class ImageBlockEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageEditing, ImageSizeAttributes, ImageUtils, ImagePlaceholder, ClipboardPipeline];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageBlockEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        // Converters 'alt' and 'srcset' are added in 'ImageEditing' plugin.\n        schema.register('imageBlock', {\n            inheritAllFrom: '$blockObject',\n            allowAttributes: ['alt', 'src', 'srcset']\n        });\n        this._setupConversion();\n        if (editor.plugins.has('ImageInlineEditing')) {\n            editor.commands.add('imageTypeBlock', new ImageTypeCommand(this.editor, 'imageBlock'));\n            this._setupClipboardIntegration();\n        }\n    }\n    /**\n     * Configures conversion pipelines to support upcasting and downcasting\n     * block images (block image widgets) and their attributes.\n     */\n    _setupConversion() {\n        const editor = this.editor;\n        const t = editor.t;\n        const conversion = editor.conversion;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        conversion.for('dataDowncast')\n            .elementToStructure({\n            model: 'imageBlock',\n            view: (modelElement, { writer }) => createBlockImageViewElement(writer)\n        });\n        conversion.for('editingDowncast')\n            .elementToStructure({\n            model: 'imageBlock',\n            view: (modelElement, { writer }) => imageUtils.toImageWidget(createBlockImageViewElement(writer), writer, t('image widget'))\n        });\n        conversion.for('downcast')\n            .add(downcastImageAttribute(imageUtils, 'imageBlock', 'src'))\n            .add(downcastImageAttribute(imageUtils, 'imageBlock', 'alt'))\n            .add(downcastSrcsetAttribute(imageUtils, 'imageBlock'));\n        // More image related upcasts are in 'ImageEditing' plugin.\n        conversion.for('upcast')\n            .elementToElement({\n            view: getImgViewElementMatcher(editor, 'imageBlock'),\n            model: (viewImage, { writer }) => writer.createElement('imageBlock', viewImage.hasAttribute('src') ? { src: viewImage.getAttribute('src') } : undefined)\n        })\n            .add(upcastImageFigure(imageUtils));\n    }\n    /**\n     * Integrates the plugin with the clipboard pipeline.\n     *\n     * Idea is that the feature should recognize the user's intent when an **inline** image is\n     * pasted or dropped. If such an image is pasted/dropped:\n     *\n     * * into an empty block (e.g. an empty paragraph),\n     * * on another object (e.g. some block widget).\n     *\n     * it gets converted into a block image on the fly. We assume this is the user's intent\n     * if they decided to put their image there.\n     *\n     * See the `ImageInlineEditing` for the similar integration that works in the opposite direction.\n     *\n     * The feature also sets image `width` and `height` attributes on paste.\n     */\n    _setupClipboardIntegration() {\n        const editor = this.editor;\n        const model = editor.model;\n        const editingView = editor.editing.view;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const clipboardPipeline = editor.plugins.get('ClipboardPipeline');\n        this.listenTo(clipboardPipeline, 'inputTransformation', (evt, data) => {\n            const docFragmentChildren = Array.from(data.content.getChildren());\n            let modelRange;\n            // Make sure only <img> elements are dropped or pasted. Otherwise, if there some other HTML\n            // mixed up, this should be handled as a regular paste.\n            if (!docFragmentChildren.every(imageUtils.isInlineImageView)) {\n                return;\n            }\n            // When drag and dropping, data.targetRanges specifies where to drop because\n            // this is usually a different place than the current model selection (the user\n            // uses a drop marker to specify the drop location).\n            if (data.targetRanges) {\n                modelRange = editor.editing.mapper.toModelRange(data.targetRanges[0]);\n            }\n            // Pasting, however, always occurs at the current model selection.\n            else {\n                modelRange = model.document.selection.getFirstRange();\n            }\n            const selection = model.createSelection(modelRange);\n            // Convert inline images into block images only when the currently selected block is empty\n            // (e.g. an empty paragraph) or some object is selected (to replace it).\n            if (determineImageTypeForInsertionAtSelection(model.schema, selection) === 'imageBlock') {\n                const writer = new UpcastWriter(editingView.document);\n                // Wrap <img ... /> -> <figure class=\"image\"><img .../></figure>\n                const blockViewImages = docFragmentChildren.map(inlineViewImage => writer.createElement('figure', { class: 'image' }, inlineViewImage));\n                data.content = writer.createDocumentFragment(blockViewImages);\n            }\n        });\n        this.listenTo(clipboardPipeline, 'contentInsertion', (evt, data) => {\n            if (data.method !== 'paste') {\n                return;\n            }\n            model.change(writer => {\n                const range = writer.createRangeIn(data.content);\n                for (const item of range.getItems()) {\n                    if (item.is('element', 'imageBlock')) {\n                        imageUtils.setImageNaturalSizeAttributes(item);\n                    }\n                }\n            });\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageinsert/ui/imageinsertformview\n */\nimport { View, ViewCollection, submitHandler, FocusCycler, CollapsibleView } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\nimport '../../../theme/imageinsert.css';\n/**\n * The view displayed in the insert image dropdown.\n *\n * See {@link module:image/imageinsert/imageinsertui~ImageInsertUI}.\n */\nexport default class ImageInsertFormView extends View {\n    /**\n     * Creates a view for the dropdown panel of {@link module:image/imageinsert/imageinsertui~ImageInsertUI}.\n     *\n     * @param locale The localization services instance.\n     * @param integrations An integrations object that contains components (or tokens for components) to be shown in the panel view.\n     */\n    constructor(locale, integrations = []) {\n        super(locale);\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this._focusables = new ViewCollection();\n        this.children = this.createCollection();\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        for (const view of integrations) {\n            this.children.add(view);\n            this._focusables.add(view);\n            if (view instanceof CollapsibleView) {\n                this._focusables.addMany(view.children);\n            }\n        }\n        this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-image-insert-form'\n                ],\n                tabindex: -1\n            },\n            children: this.children\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        submitHandler({\n            view: this\n        });\n        for (const view of this._focusables) {\n            this.focusTracker.add(view.element);\n        }\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n        const stopPropagation = (data) => data.stopPropagation();\n        // Since the form is in the dropdown panel which is a child of the toolbar, the toolbar's\n        // keystroke handler would take over the key management in the URL input. We need to prevent\n        // this ASAP. Otherwise, the basic caret movement using the arrow keys will be impossible.\n        this.keystrokes.set('arrowright', stopPropagation);\n        this.keystrokes.set('arrowleft', stopPropagation);\n        this.keystrokes.set('arrowup', stopPropagation);\n        this.keystrokes.set('arrowdown', stopPropagation);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the first {@link #_focusables focusable} in the form.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageinsert/imageinsertui\n */\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { logWarning } from 'ckeditor5/src/utils.js';\nimport { createDropdown, MenuBarMenuListItemView, MenuBarMenuListView, MenuBarMenuView, SplitButtonView } from 'ckeditor5/src/ui.js';\nimport ImageInsertFormView from './ui/imageinsertformview.js';\nimport ImageUtils from '../imageutils.js';\n/**\n * The image insert dropdown plugin.\n *\n * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature}\n * and {@glink features/images/images-inserting Insert images via source URL} documentation.\n *\n * Adds the `'insertImage'` dropdown to the {@link module:ui/componentfactory~ComponentFactory UI component factory}\n * and also the `imageInsert` dropdown as an alias for backward compatibility.\n *\n * Adds the `'menuBar:insertImage'` sub-menu to the {@link module:ui/componentfactory~ComponentFactory UI component factory}, which is\n * by default added to the `'Insert'` menu.\n */\nexport default class ImageInsertUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageInsertUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        /**\n         * Registered integrations map.\n         */\n        this._integrations = new Map();\n        editor.config.define('image.insert.integrations', [\n            'upload',\n            'assetManager',\n            'url'\n        ]);\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        this.set('isImageSelected', false);\n        this.listenTo(editor.model.document, 'change', () => {\n            this.isImageSelected = imageUtils.isImage(selection.getSelectedElement());\n        });\n        const componentCreator = (locale) => this._createToolbarComponent(locale);\n        const menuBarComponentCreator = (locale) => this._createMenuBarComponent(locale);\n        // Register `insertImage` dropdown and add `imageInsert` dropdown as an alias for backward compatibility.\n        editor.ui.componentFactory.add('insertImage', componentCreator);\n        editor.ui.componentFactory.add('imageInsert', componentCreator);\n        editor.ui.componentFactory.add('menuBar:insertImage', menuBarComponentCreator);\n    }\n    /**\n     * Registers the insert image dropdown integration.\n     */\n    registerIntegration({ name, observable, buttonViewCreator, formViewCreator, menuBarButtonViewCreator, requiresForm = false }) {\n        if (this._integrations.has(name)) {\n            /**\n             * There are two insert-image integrations registered with the same name.\n             *\n             * Make sure that you do not load multiple asset manager plugins.\n             *\n             * @error image-insert-integration-exists\n             */\n            logWarning('image-insert-integration-exists', { name });\n        }\n        this._integrations.set(name, {\n            observable,\n            buttonViewCreator,\n            menuBarButtonViewCreator,\n            formViewCreator,\n            requiresForm\n        });\n    }\n    /**\n     * Creates the toolbar component.\n     */\n    _createToolbarComponent(locale) {\n        const editor = this.editor;\n        const t = locale.t;\n        const integrations = this._prepareIntegrations();\n        if (!integrations.length) {\n            return null;\n        }\n        let dropdownButton;\n        const firstIntegration = integrations[0];\n        if (integrations.length == 1) {\n            // Do not use dropdown for a single integration button (integration that does not require form view).\n            if (!firstIntegration.requiresForm) {\n                return firstIntegration.buttonViewCreator(true);\n            }\n            dropdownButton = firstIntegration.buttonViewCreator(true);\n        }\n        else {\n            const actionButton = firstIntegration.buttonViewCreator(false);\n            dropdownButton = new SplitButtonView(locale, actionButton);\n            dropdownButton.tooltip = true;\n            dropdownButton.bind('label').to(this, 'isImageSelected', isImageSelected => isImageSelected ?\n                t('Replace image') :\n                t('Insert image'));\n        }\n        const dropdownView = this.dropdownView = createDropdown(locale, dropdownButton);\n        const observables = integrations.map(({ observable }) => typeof observable == 'function' ? observable() : observable);\n        dropdownView.bind('isEnabled').toMany(observables, 'isEnabled', (...isEnabled) => (isEnabled.some(isEnabled => isEnabled)));\n        dropdownView.once('change:isOpen', () => {\n            const integrationViews = integrations.map(({ formViewCreator }) => formViewCreator(integrations.length == 1));\n            const imageInsertFormView = new ImageInsertFormView(editor.locale, integrationViews);\n            dropdownView.panelView.children.add(imageInsertFormView);\n        });\n        return dropdownView;\n    }\n    /**\n     * Creates the menu bar component.\n     */\n    _createMenuBarComponent(locale) {\n        const t = locale.t;\n        const integrations = this._prepareIntegrations();\n        if (!integrations.length) {\n            return null;\n        }\n        let resultView;\n        const firstIntegration = integrations[0];\n        if (integrations.length == 1) {\n            resultView = firstIntegration.menuBarButtonViewCreator(true);\n        }\n        else {\n            resultView = new MenuBarMenuView(locale);\n            const listView = new MenuBarMenuListView(locale);\n            resultView.panelView.children.add(listView);\n            resultView.buttonView.set({\n                icon: icons.image,\n                label: t('Image')\n            });\n            for (const integration of integrations) {\n                const listItemView = new MenuBarMenuListItemView(locale, resultView);\n                const buttonView = integration.menuBarButtonViewCreator(false);\n                listItemView.children.add(buttonView);\n                listView.items.add(listItemView);\n            }\n        }\n        return resultView;\n    }\n    /**\n     * Validates the integrations list.\n     */\n    _prepareIntegrations() {\n        const editor = this.editor;\n        const items = editor.config.get('image.insert.integrations');\n        const result = [];\n        if (!items.length) {\n            /**\n             * The insert image feature requires a list of integrations to be provided in the editor configuration.\n             *\n             * The default list of integrations is `upload`, `assetManager`, `url`. Those integrations are included\n             * in the insert image dropdown if the given feature plugin is loaded. You should omit the `integrations`\n             * configuration key to use the default set or provide a selected list of integrations that should be used.\n             *\n             * @error image-insert-integrations-not-specified\n             */\n            logWarning('image-insert-integrations-not-specified');\n            return result;\n        }\n        for (const item of items) {\n            if (!this._integrations.has(item)) {\n                if (!['upload', 'assetManager', 'url'].includes(item)) {\n                    /**\n                     * The specified insert image integration name is unknown or the providing plugin is not loaded in the editor.\n                     *\n                     * @error image-insert-unknown-integration\n                     */\n                    logWarning('image-insert-unknown-integration', { item });\n                }\n                continue;\n            }\n            result.push(this._integrations.get(item));\n        }\n        if (!result.length) {\n            /**\n             * The image insert feature requires integrations to be registered by separate features.\n             *\n             * The `insertImage` toolbar button requires integrations to be registered by other features.\n             * For example {@link module:image/imageupload~ImageUpload ImageUpload},\n             * {@link module:image/imageinsert~ImageInsert ImageInsert},\n             * {@link module:image/imageinsertviaurl~ImageInsertViaUrl ImageInsertViaUrl},\n             * {@link module:ckbox/ckbox~CKBox CKBox}\n             *\n             * @error image-insert-integrations-not-registered\n             */\n            logWarning('image-insert-integrations-not-registered');\n        }\n        return result;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageblock\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Widget } from 'ckeditor5/src/widget.js';\nimport ImageTextAlternative from './imagetextalternative.js';\nimport ImageBlockEditing from './image/imageblockediting.js';\nimport ImageInsertUI from './imageinsert/imageinsertui.js';\nimport '../theme/image.css';\n/**\n * The image block plugin.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * {@link module:image/image/imageblockediting~ImageBlockEditing},\n * * {@link module:image/imagetextalternative~ImageTextAlternative}.\n *\n * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}\n * for more information.\n */\nexport default class ImageBlock extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageBlockEditing, Widget, ImageTextAlternative, ImageInsertUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageBlock';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/image/imageinlineediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';\nimport { UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { downcastImageAttribute, downcastSrcsetAttribute } from './converters.js';\nimport ImageEditing from './imageediting.js';\nimport ImageSizeAttributes from '../imagesizeattributes.js';\nimport ImageTypeCommand from './imagetypecommand.js';\nimport ImageUtils from '../imageutils.js';\nimport { getImgViewElementMatcher, createInlineImageViewElement, determineImageTypeForInsertionAtSelection } from './utils.js';\nimport ImagePlaceholder from './imageplaceholder.js';\n/**\n * The image inline plugin.\n *\n * It registers:\n *\n * * `<imageInline>` as an inline element in the document schema, and allows `alt`, `src` and `srcset` attributes.\n * * converters for editing and data pipelines.\n * * {@link module:image/image/imagetypecommand~ImageTypeCommand `'imageTypeInline'`} command that converts block images into\n * inline images.\n */\nexport default class ImageInlineEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageEditing, ImageSizeAttributes, ImageUtils, ImagePlaceholder, ClipboardPipeline];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageInlineEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        // Converters 'alt' and 'srcset' are added in 'ImageEditing' plugin.\n        schema.register('imageInline', {\n            inheritAllFrom: '$inlineObject',\n            allowAttributes: ['alt', 'src', 'srcset'],\n            // Disallow inline images in captions (at least for now).\n            // This is the best spot to do that because independent packages can introduce captions (ImageCaption, TableCaption, etc.).\n            disallowIn: ['caption']\n        });\n        this._setupConversion();\n        if (editor.plugins.has('ImageBlockEditing')) {\n            editor.commands.add('imageTypeInline', new ImageTypeCommand(this.editor, 'imageInline'));\n            this._setupClipboardIntegration();\n        }\n    }\n    /**\n     * Configures conversion pipelines to support upcasting and downcasting\n     * inline images (inline image widgets) and their attributes.\n     */\n    _setupConversion() {\n        const editor = this.editor;\n        const t = editor.t;\n        const conversion = editor.conversion;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        conversion.for('dataDowncast')\n            .elementToElement({\n            model: 'imageInline',\n            view: (modelElement, { writer }) => writer.createEmptyElement('img')\n        });\n        conversion.for('editingDowncast')\n            .elementToStructure({\n            model: 'imageInline',\n            view: (modelElement, { writer }) => imageUtils.toImageWidget(createInlineImageViewElement(writer), writer, t('image widget'))\n        });\n        conversion.for('downcast')\n            .add(downcastImageAttribute(imageUtils, 'imageInline', 'src'))\n            .add(downcastImageAttribute(imageUtils, 'imageInline', 'alt'))\n            .add(downcastSrcsetAttribute(imageUtils, 'imageInline'));\n        // More image related upcasts are in 'ImageEditing' plugin.\n        conversion.for('upcast')\n            .elementToElement({\n            view: getImgViewElementMatcher(editor, 'imageInline'),\n            model: (viewImage, { writer }) => writer.createElement('imageInline', viewImage.hasAttribute('src') ? { src: viewImage.getAttribute('src') } : undefined)\n        });\n    }\n    /**\n     * Integrates the plugin with the clipboard pipeline.\n     *\n     * Idea is that the feature should recognize the user's intent when an **block** image is\n     * pasted or dropped. If such an image is pasted/dropped into a non-empty block\n     * (e.g. a paragraph with some text) it gets converted into an inline image on the fly.\n     *\n     * We assume this is the user's intent if they decided to put their image there.\n     *\n     * **Note**: If a block image has a caption, it will not be converted to an inline image\n     * to avoid the confusion. Captions are added on purpose and they should never be lost\n     * in the clipboard pipeline.\n     *\n     * See the `ImageBlockEditing` for the similar integration that works in the opposite direction.\n     *\n     * The feature also sets image `width` and `height` attributes when pasting.\n     */\n    _setupClipboardIntegration() {\n        const editor = this.editor;\n        const model = editor.model;\n        const editingView = editor.editing.view;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const clipboardPipeline = editor.plugins.get('ClipboardPipeline');\n        this.listenTo(clipboardPipeline, 'inputTransformation', (evt, data) => {\n            const docFragmentChildren = Array.from(data.content.getChildren());\n            let modelRange;\n            // Make sure only <figure class=\"image\"></figure> elements are dropped or pasted. Otherwise, if there some other HTML\n            // mixed up, this should be handled as a regular paste.\n            if (!docFragmentChildren.every(imageUtils.isBlockImageView)) {\n                return;\n            }\n            // When drag and dropping, data.targetRanges specifies where to drop because\n            // this is usually a different place than the current model selection (the user\n            // uses a drop marker to specify the drop location).\n            if (data.targetRanges) {\n                modelRange = editor.editing.mapper.toModelRange(data.targetRanges[0]);\n            }\n            // Pasting, however, always occurs at the current model selection.\n            else {\n                modelRange = model.document.selection.getFirstRange();\n            }\n            const selection = model.createSelection(modelRange);\n            // Convert block images into inline images only when pasting or dropping into non-empty blocks\n            // and when the block is not an object (e.g. pasting to replace another widget).\n            if (determineImageTypeForInsertionAtSelection(model.schema, selection) === 'imageInline') {\n                const writer = new UpcastWriter(editingView.document);\n                // Unwrap <figure class=\"image\"><img .../></figure> -> <img ... />\n                // but <figure class=\"image\"><img .../><figcaption>...</figcaption></figure> -> stays the same\n                const inlineViewImages = docFragmentChildren.map(blockViewImage => {\n                    // If there's just one child, it can be either <img /> or <a><img></a>.\n                    // If there are other children than <img>, this means that the block image\n                    // has a caption or some other features and this kind of image should be\n                    // pasted/dropped without modifications.\n                    if (blockViewImage.childCount === 1) {\n                        // Pass the attributes which are present only in the <figure> to the <img>\n                        // (e.g. the style=\"width:10%\" attribute applied by the ImageResize plugin).\n                        Array.from(blockViewImage.getAttributes())\n                            .forEach(attribute => writer.setAttribute(...attribute, imageUtils.findViewImgElement(blockViewImage)));\n                        return blockViewImage.getChild(0);\n                    }\n                    else {\n                        return blockViewImage;\n                    }\n                });\n                data.content = writer.createDocumentFragment(inlineViewImages);\n            }\n        });\n        this.listenTo(clipboardPipeline, 'contentInsertion', (evt, data) => {\n            if (data.method !== 'paste') {\n                return;\n            }\n            model.change(writer => {\n                const range = writer.createRangeIn(data.content);\n                for (const item of range.getItems()) {\n                    if (item.is('element', 'imageInline')) {\n                        imageUtils.setImageNaturalSizeAttributes(item);\n                    }\n                }\n            });\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageinline\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Widget } from 'ckeditor5/src/widget.js';\nimport ImageTextAlternative from './imagetextalternative.js';\nimport ImageInlineEditing from './image/imageinlineediting.js';\nimport ImageInsertUI from './imageinsert/imageinsertui.js';\nimport '../theme/image.css';\n/**\n * The image inline plugin.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * {@link module:image/image/imageinlineediting~ImageInlineEditing},\n * * {@link module:image/imagetextalternative~ImageTextAlternative}.\n *\n * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}\n * for more information.\n */\nexport default class ImageInline extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageInlineEditing, Widget, ImageTextAlternative, ImageInsertUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageInline';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport ImageBlockEditing from '../image/imageblockediting.js';\n/**\n * The toggle image caption command.\n *\n * This command is registered by {@link module:image/imagecaption/imagecaptionediting~ImageCaptionEditing} as the\n * `'toggleImageCaption'` editor command.\n *\n * Executing this command:\n *\n * * either adds or removes the image caption of a selected image (depending on whether the caption is present or not),\n * * removes the image caption if the selection is anchored in one.\n *\n * ```ts\n * // Toggle the presence of the caption.\n * editor.execute( 'toggleImageCaption' );\n * ```\n *\n * **Note**: Upon executing this command, the selection will be set on the image if previously anchored in the caption element.\n *\n * **Note**: You can move the selection to the caption right away as it shows up upon executing this command by using\n * the `focusCaptionOnShow` option:\n *\n * ```ts\n * editor.execute( 'toggleImageCaption', { focusCaptionOnShow: true } );\n * ```\n */\nexport default class ToggleImageCaptionCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const imageCaptionUtils = editor.plugins.get('ImageCaptionUtils');\n        const imageUtils = editor.plugins.get('ImageUtils');\n        // Only block images can get captions.\n        if (!editor.plugins.has(ImageBlockEditing)) {\n            this.isEnabled = false;\n            this.value = false;\n            return;\n        }\n        const selection = editor.model.document.selection;\n        const selectedElement = selection.getSelectedElement();\n        if (!selectedElement) {\n            const ancestorCaptionElement = imageCaptionUtils.getCaptionFromModelSelection(selection);\n            this.isEnabled = !!ancestorCaptionElement;\n            this.value = !!ancestorCaptionElement;\n            return;\n        }\n        // Block images support captions by default but the command should also be enabled for inline\n        // images because toggling the caption when one is selected should convert it into a block image.\n        this.isEnabled = imageUtils.isImage(selectedElement);\n        if (!this.isEnabled) {\n            this.value = false;\n        }\n        else {\n            this.value = !!imageCaptionUtils.getCaptionFromImageModelElement(selectedElement);\n        }\n    }\n    /**\n     * Executes the command.\n     *\n     * ```ts\n     * editor.execute( 'toggleImageCaption' );\n     * ```\n     *\n     * @param options Options for the executed command.\n     * @param options.focusCaptionOnShow When true and the caption shows up, the selection will be moved into it straight away.\n     * @fires execute\n     */\n    execute(options = {}) {\n        const { focusCaptionOnShow } = options;\n        this.editor.model.change(writer => {\n            if (this.value) {\n                this._hideImageCaption(writer);\n            }\n            else {\n                this._showImageCaption(writer, focusCaptionOnShow);\n            }\n        });\n    }\n    /**\n     * Shows the caption of the `<imageBlock>` or `<imageInline>`. Also:\n     *\n     * * it converts `<imageInline>` to `<imageBlock>` to show the caption,\n     * * it attempts to restore the caption content from the `ImageCaptionEditing` caption registry,\n     * * it moves the selection to the caption right away, it the `focusCaptionOnShow` option was set.\n     */\n    _showImageCaption(writer, focusCaptionOnShow) {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const imageCaptionEditing = this.editor.plugins.get('ImageCaptionEditing');\n        const imageUtils = this.editor.plugins.get('ImageUtils');\n        let selectedImage = selection.getSelectedElement();\n        const savedCaption = imageCaptionEditing._getSavedCaption(selectedImage);\n        // Convert imageInline -> image first.\n        if (imageUtils.isInlineImage(selectedImage)) {\n            this.editor.execute('imageTypeBlock');\n            // Executing the command created a new model element. Let's pick it again.\n            selectedImage = selection.getSelectedElement();\n        }\n        // Try restoring the caption from the ImageCaptionEditing plugin storage.\n        const newCaptionElement = savedCaption || writer.createElement('caption');\n        writer.append(newCaptionElement, selectedImage);\n        if (focusCaptionOnShow) {\n            writer.setSelection(newCaptionElement, 'in');\n        }\n    }\n    /**\n     * Hides the caption of a selected image (or an image caption the selection is anchored to).\n     *\n     * The content of the caption is stored in the `ImageCaptionEditing` caption registry to make this\n     * a reversible action.\n     */\n    _hideImageCaption(writer) {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        const imageCaptionEditing = editor.plugins.get('ImageCaptionEditing');\n        const imageCaptionUtils = editor.plugins.get('ImageCaptionUtils');\n        let selectedImage = selection.getSelectedElement();\n        let captionElement;\n        if (selectedImage) {\n            captionElement = imageCaptionUtils.getCaptionFromImageModelElement(selectedImage);\n        }\n        else {\n            captionElement = imageCaptionUtils.getCaptionFromModelSelection(selection);\n            selectedImage = captionElement.parent;\n        }\n        // Store the caption content so it can be restored quickly if the user changes their mind even if they toggle image<->imageInline.\n        imageCaptionEditing._saveCaption(selectedImage, captionElement);\n        writer.setSelection(selectedImage, 'on');\n        writer.remove(captionElement);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageUtils from '../imageutils.js';\n/**\n * The image caption utilities plugin.\n */\nexport default class ImageCaptionUtils extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageCaptionUtils';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * Returns the caption model element from a given image element. Returns `null` if no caption is found.\n     */\n    getCaptionFromImageModelElement(imageModelElement) {\n        for (const node of imageModelElement.getChildren()) {\n            if (!!node && node.is('element', 'caption')) {\n                return node;\n            }\n        }\n        return null;\n    }\n    /**\n     * Returns the caption model element for a model selection. Returns `null` if the selection has no caption element ancestor.\n     */\n    getCaptionFromModelSelection(selection) {\n        const imageUtils = this.editor.plugins.get('ImageUtils');\n        const captionElement = selection.getFirstPosition().findAncestor('caption');\n        if (!captionElement) {\n            return null;\n        }\n        if (imageUtils.isBlockImage(captionElement.parent)) {\n            return captionElement;\n        }\n        return null;\n    }\n    /**\n     * {@link module:engine/view/matcher~Matcher} pattern. Checks if a given element is a `<figcaption>` element that is placed\n     * inside the image `<figure>` element.\n     * @returns Returns the object accepted by {@link module:engine/view/matcher~Matcher} or `null` if the element\n     * cannot be matched.\n     */\n    matchImageCaptionViewElement(element) {\n        const imageUtils = this.editor.plugins.get('ImageUtils');\n        // Convert only captions for images.\n        if (element.name == 'figcaption' && imageUtils.isBlockImageView(element.parent)) {\n            return { name: true };\n        }\n        return null;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagecaption/imagecaptionediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Element, enablePlaceholder } from 'ckeditor5/src/engine.js';\nimport { toWidgetEditable } from 'ckeditor5/src/widget.js';\nimport ToggleImageCaptionCommand from './toggleimagecaptioncommand.js';\nimport ImageUtils from '../imageutils.js';\nimport ImageCaptionUtils from './imagecaptionutils.js';\n/**\n * The image caption engine plugin. It is responsible for:\n *\n * * registering converters for the caption element,\n * * registering converters for the caption model attribute,\n * * registering the {@link module:image/imagecaption/toggleimagecaptioncommand~ToggleImageCaptionCommand `toggleImageCaption`} command.\n */\nexport default class ImageCaptionEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils, ImageCaptionUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageCaptionEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        this._savedCaptionsMap = new WeakMap();\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        // Schema configuration.\n        if (!schema.isRegistered('caption')) {\n            schema.register('caption', {\n                allowIn: 'imageBlock',\n                allowContentOf: '$block',\n                isLimit: true\n            });\n        }\n        else {\n            schema.extend('caption', {\n                allowIn: 'imageBlock'\n            });\n        }\n        editor.commands.add('toggleImageCaption', new ToggleImageCaptionCommand(this.editor));\n        this._setupConversion();\n        this._setupImageTypeCommandsIntegration();\n        this._registerCaptionReconversion();\n    }\n    /**\n     * Configures conversion pipelines to support upcasting and downcasting\n     * image captions.\n     */\n    _setupConversion() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const imageCaptionUtils = editor.plugins.get('ImageCaptionUtils');\n        const t = editor.t;\n        // View -> model converter for the data pipeline.\n        editor.conversion.for('upcast').elementToElement({\n            view: element => imageCaptionUtils.matchImageCaptionViewElement(element),\n            model: 'caption'\n        });\n        // Model -> view converter for the data pipeline.\n        editor.conversion.for('dataDowncast').elementToElement({\n            model: 'caption',\n            view: (modelElement, { writer }) => {\n                if (!imageUtils.isBlockImage(modelElement.parent)) {\n                    return null;\n                }\n                return writer.createContainerElement('figcaption');\n            }\n        });\n        // Model -> view converter for the editing pipeline.\n        editor.conversion.for('editingDowncast').elementToElement({\n            model: 'caption',\n            view: (modelElement, { writer }) => {\n                if (!imageUtils.isBlockImage(modelElement.parent)) {\n                    return null;\n                }\n                const figcaptionElement = writer.createEditableElement('figcaption');\n                writer.setCustomProperty('imageCaption', true, figcaptionElement);\n                figcaptionElement.placeholder = t('Enter image caption');\n                enablePlaceholder({\n                    view,\n                    element: figcaptionElement,\n                    keepOnFocus: true\n                });\n                const imageAlt = modelElement.parent.getAttribute('alt');\n                const label = imageAlt ? t('Caption for image: %0', [imageAlt]) : t('Caption for the image');\n                return toWidgetEditable(figcaptionElement, writer, { label });\n            }\n        });\n    }\n    /**\n     * Integrates with {@link module:image/image/imagetypecommand~ImageTypeCommand image type commands}\n     * to make sure the caption is preserved when the type of an image changes so it can be restored\n     * in the future if the user decides they want their caption back.\n     */\n    _setupImageTypeCommandsIntegration() {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const imageCaptionUtils = editor.plugins.get('ImageCaptionUtils');\n        const imageTypeInlineCommand = editor.commands.get('imageTypeInline');\n        const imageTypeBlockCommand = editor.commands.get('imageTypeBlock');\n        const handleImageTypeChange = evt => {\n            // The image type command execution can be unsuccessful.\n            if (!evt.return) {\n                return;\n            }\n            const { oldElement, newElement } = evt.return;\n            /* istanbul ignore if: paranoid check -- @preserve */\n            if (!oldElement) {\n                return;\n            }\n            if (imageUtils.isBlockImage(oldElement)) {\n                const oldCaptionElement = imageCaptionUtils.getCaptionFromImageModelElement(oldElement);\n                // If the old element was a captioned block image (the caption was visible),\n                // simply save it so it can be restored.\n                if (oldCaptionElement) {\n                    this._saveCaption(newElement, oldCaptionElement);\n                    return;\n                }\n            }\n            const savedOldElementCaption = this._getSavedCaption(oldElement);\n            // If either:\n            //\n            // * the block image didn't have a visible caption,\n            // * the block image caption was hidden (and already saved),\n            // * the inline image was passed\n            //\n            // just try to \"pass\" the saved caption from the old image to the new image\n            // so it can be retrieved in the future if the user wants it back.\n            if (savedOldElementCaption) {\n                // Note: Since we're writing to a WeakMap, we don't bother with removing the\n                // [ oldElement, savedOldElementCaption ] pair from it.\n                this._saveCaption(newElement, savedOldElementCaption);\n            }\n        };\n        // Presence of the commands depends on the Image(Inline|Block)Editing plugins loaded in the editor.\n        if (imageTypeInlineCommand) {\n            this.listenTo(imageTypeInlineCommand, 'execute', handleImageTypeChange, { priority: 'low' });\n        }\n        if (imageTypeBlockCommand) {\n            this.listenTo(imageTypeBlockCommand, 'execute', handleImageTypeChange, { priority: 'low' });\n        }\n    }\n    /**\n     * Returns the saved {@link module:engine/model/element~Element#toJSON JSONified} caption\n     * of an image model element.\n     *\n     * See {@link #_saveCaption}.\n     *\n     * @internal\n     * @param imageModelElement The model element the caption should be returned for.\n     * @returns The model caption element or `null` if there is none.\n     */\n    _getSavedCaption(imageModelElement) {\n        const jsonObject = this._savedCaptionsMap.get(imageModelElement);\n        return jsonObject ? Element.fromJSON(jsonObject) : null;\n    }\n    /**\n     * Saves a {@link module:engine/model/element~Element#toJSON JSONified} caption for\n     * an image element to allow restoring it in the future.\n     *\n     * A caption is saved every time it gets hidden and/or the type of an image changes. The\n     * user should be able to restore it on demand.\n     *\n     * **Note**: The caption cannot be stored in the image model element attribute because,\n     * for instance, when the model state propagates to collaborators, the attribute would get\n     * lost (mainly because it does not convert to anything when the caption is hidden) and\n     * the states of collaborators' models would de-synchronize causing numerous issues.\n     *\n     * See {@link #_getSavedCaption}.\n     *\n     * @internal\n     * @param imageModelElement The model element the caption is saved for.\n     * @param caption The caption model element to be saved.\n     */\n    _saveCaption(imageModelElement, caption) {\n        this._savedCaptionsMap.set(imageModelElement, caption.toJSON());\n    }\n    /**\n     * Reconverts image caption when image alt attribute changes.\n     * The change of alt attribute is reflected in caption's aria-label attribute.\n     */\n    _registerCaptionReconversion() {\n        const editor = this.editor;\n        const model = editor.model;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const imageCaptionUtils = editor.plugins.get('ImageCaptionUtils');\n        model.document.on('change:data', () => {\n            const changes = model.document.differ.getChanges();\n            for (const change of changes) {\n                if (change.attributeKey !== 'alt') {\n                    continue;\n                }\n                const image = change.range.start.nodeAfter;\n                if (imageUtils.isBlockImage(image)) {\n                    const caption = imageCaptionUtils.getCaptionFromImageModelElement(image);\n                    if (!caption) {\n                        return;\n                    }\n                    editor.editing.reconvertItem(caption);\n                }\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagecaption/imagecaptionui\n */\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { ButtonView } from 'ckeditor5/src/ui.js';\nimport ImageCaptionUtils from './imagecaptionutils.js';\n/**\n * The image caption UI plugin. It introduces the `'toggleImageCaption'` UI button.\n */\nexport default class ImageCaptionUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageCaptionUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageCaptionUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        const imageCaptionUtils = editor.plugins.get('ImageCaptionUtils');\n        const t = editor.t;\n        editor.ui.componentFactory.add('toggleImageCaption', locale => {\n            const command = editor.commands.get('toggleImageCaption');\n            const view = new ButtonView(locale);\n            view.set({\n                icon: icons.caption,\n                tooltip: true,\n                isToggleable: true\n            });\n            view.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');\n            view.bind('label').to(command, 'value', value => value ? t('Toggle caption off') : t('Toggle caption on'));\n            this.listenTo(view, 'execute', () => {\n                editor.execute('toggleImageCaption', { focusCaptionOnShow: true });\n                // Scroll to the selection and highlight the caption if the caption showed up.\n                const modelCaptionElement = imageCaptionUtils.getCaptionFromModelSelection(editor.model.document.selection);\n                if (modelCaptionElement) {\n                    const figcaptionElement = editor.editing.mapper.toViewElement(modelCaptionElement);\n                    editingView.scrollToTheSelection();\n                    editingView.change(writer => {\n                        writer.addClass('image__caption_highlighted', figcaptionElement);\n                    });\n                }\n                editor.editing.view.focus();\n            });\n            return view;\n        });\n    }\n}\n", "import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n", "import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nexport default createBaseEach;\n", "import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nexport default baseMap;\n", "import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageresize/resizeimagecommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The resize image command. Currently, it only supports the width attribute.\n */\nexport default class ResizeImageCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const element = imageUtils.getClosestSelectedImageElement(editor.model.document.selection);\n        this.isEnabled = !!element;\n        if (!element || !element.hasAttribute('resizedWidth')) {\n            this.value = null;\n        }\n        else {\n            this.value = {\n                width: element.getAttribute('resizedWidth'),\n                height: null\n            };\n        }\n    }\n    /**\n     * Executes the command.\n     *\n     * ```ts\n     * // Sets the width to 50%:\n     * editor.execute( 'resizeImage', { width: '50%' } );\n     *\n     * // Removes the width attribute:\n     * editor.execute( 'resizeImage', { width: null } );\n     * ```\n     *\n     * @param options\n     * @param options.width The new width of the image.\n     * @fires execute\n     */\n    execute(options) {\n        const editor = this.editor;\n        const model = editor.model;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n        this.value = {\n            width: options.width,\n            height: null\n        };\n        if (imageElement) {\n            model.change(writer => {\n                writer.setAttribute('resizedWidth', options.width, imageElement);\n                writer.removeAttribute('resizedHeight', imageElement);\n                imageUtils.setImageNaturalSizeAttributes(imageElement);\n            });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageUtils from '../imageutils.js';\nimport ResizeImageCommand from './resizeimagecommand.js';\nimport { widthAndHeightStylesAreBothSet } from '../image/utils.js';\n/**\n * The image resize editing feature.\n *\n * It adds the ability to resize each image using handles or manually by\n * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.\n */\nexport default class ImageResizeEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageResizeEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('image', {\n            resizeUnit: '%',\n            resizeOptions: [\n                {\n                    name: 'resizeImage:original',\n                    value: null,\n                    icon: 'original'\n                },\n                {\n                    name: 'resizeImage:custom',\n                    value: 'custom',\n                    icon: 'custom'\n                },\n                {\n                    name: 'resizeImage:25',\n                    value: '25',\n                    icon: 'small'\n                },\n                {\n                    name: 'resizeImage:50',\n                    value: '50',\n                    icon: 'medium'\n                },\n                {\n                    name: 'resizeImage:75',\n                    value: '75',\n                    icon: 'large'\n                }\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const resizeImageCommand = new ResizeImageCommand(editor);\n        this._registerConverters('imageBlock');\n        this._registerConverters('imageInline');\n        // Register `resizeImage` command and add `imageResize` command as an alias for backward compatibility.\n        editor.commands.add('resizeImage', resizeImageCommand);\n        editor.commands.add('imageResize', resizeImageCommand);\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        this._registerSchema();\n    }\n    _registerSchema() {\n        if (this.editor.plugins.has('ImageBlockEditing')) {\n            this.editor.model.schema.extend('imageBlock', { allowAttributes: ['resizedWidth', 'resizedHeight'] });\n        }\n        if (this.editor.plugins.has('ImageInlineEditing')) {\n            this.editor.model.schema.extend('imageInline', { allowAttributes: ['resizedWidth', 'resizedHeight'] });\n        }\n    }\n    /**\n     * Registers image resize converters.\n     *\n     * @param imageType The type of the image.\n     */\n    _registerConverters(imageType) {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        // Dedicated converter to propagate image's attribute to the img tag.\n        editor.conversion.for('downcast').add(dispatcher => dispatcher.on(`attribute:resizedWidth:${imageType}`, (evt, data, conversionApi) => {\n            if (!conversionApi.consumable.consume(data.item, evt.name)) {\n                return;\n            }\n            const viewWriter = conversionApi.writer;\n            const viewImg = conversionApi.mapper.toViewElement(data.item);\n            if (data.attributeNewValue !== null) {\n                viewWriter.setStyle('width', data.attributeNewValue, viewImg);\n                viewWriter.addClass('image_resized', viewImg);\n            }\n            else {\n                viewWriter.removeStyle('width', viewImg);\n                viewWriter.removeClass('image_resized', viewImg);\n            }\n        }));\n        editor.conversion.for('dataDowncast').attributeToAttribute({\n            model: {\n                name: imageType,\n                key: 'resizedHeight'\n            },\n            view: modelAttributeValue => ({\n                key: 'style',\n                value: {\n                    'height': modelAttributeValue\n                }\n            })\n        });\n        editor.conversion.for('editingDowncast').add(dispatcher => dispatcher.on(`attribute:resizedHeight:${imageType}`, (evt, data, conversionApi) => {\n            if (!conversionApi.consumable.consume(data.item, evt.name)) {\n                return;\n            }\n            const viewWriter = conversionApi.writer;\n            const viewImg = conversionApi.mapper.toViewElement(data.item);\n            const target = imageType === 'imageInline' ? imageUtils.findViewImgElement(viewImg) : viewImg;\n            if (data.attributeNewValue !== null) {\n                viewWriter.setStyle('height', data.attributeNewValue, target);\n            }\n            else {\n                viewWriter.removeStyle('height', target);\n            }\n        }));\n        editor.conversion.for('upcast')\n            .attributeToAttribute({\n            view: {\n                name: imageType === 'imageBlock' ? 'figure' : 'img',\n                styles: {\n                    width: /.+/\n                }\n            },\n            model: {\n                key: 'resizedWidth',\n                value: (viewElement) => {\n                    if (widthAndHeightStylesAreBothSet(viewElement)) {\n                        return null;\n                    }\n                    return viewElement.getStyle('width');\n                }\n            }\n        });\n        editor.conversion.for('upcast')\n            .attributeToAttribute({\n            view: {\n                name: imageType === 'imageBlock' ? 'figure' : 'img',\n                styles: {\n                    height: /.+/\n                }\n            },\n            model: {\n                key: 'resizedHeight',\n                value: (viewElement) => {\n                    if (widthAndHeightStylesAreBothSet(viewElement)) {\n                        return null;\n                    }\n                    return viewElement.getStyle('height');\n                }\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageresize/imageresizebuttons\n */\nimport { map } from 'lodash-es';\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { ButtonView, DropdownButtonView, ViewModel, createDropdown, addListToDropdown } from 'ckeditor5/src/ui.js';\nimport { CKEditorError, Collection } from 'ckeditor5/src/utils.js';\nimport ImageResizeEditing from './imageresizeediting.js';\nconst RESIZE_ICONS = /* #__PURE__ */ (() => ({\n    small: icons.objectSizeSmall,\n    medium: icons.objectSizeMedium,\n    large: icons.objectSizeLarge,\n    custom: icons.objectSizeCustom,\n    original: icons.objectSizeFull\n}))();\n/**\n * The image resize buttons plugin.\n *\n * It adds a possibility to resize images using the toolbar dropdown or individual buttons, depending on the plugin configuration.\n */\nexport default class ImageResizeButtons extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageResizeEditing];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageResizeButtons';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        this._resizeUnit = editor.config.get('image.resizeUnit');\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const options = editor.config.get('image.resizeOptions');\n        const command = editor.commands.get('resizeImage');\n        this.bind('isEnabled').to(command);\n        for (const option of options) {\n            this._registerImageResizeButton(option);\n        }\n        this._registerImageResizeDropdown(options);\n    }\n    /**\n     * A helper function that creates a standalone button component for the plugin.\n     *\n     * @param resizeOption A model of the resize option.\n     */\n    _registerImageResizeButton(option) {\n        const editor = this.editor;\n        const { name, value, icon } = option;\n        editor.ui.componentFactory.add(name, locale => {\n            const button = new ButtonView(locale);\n            const command = editor.commands.get('resizeImage');\n            const labelText = this._getOptionLabelValue(option, true);\n            if (!RESIZE_ICONS[icon]) {\n                /**\n                 * When configuring {@link module:image/imageconfig~ImageConfig#resizeOptions `config.image.resizeOptions`} for standalone\n                 * buttons, a valid `icon` token must be set for each option.\n                 *\n                 * See all valid options described in the\n                 * {@link module:image/imageconfig~ImageResizeOption plugin configuration}.\n                 *\n                 * @error imageresizebuttons-missing-icon\n                 * @param option Invalid image resize option.\n                */\n                throw new CKEditorError('imageresizebuttons-missing-icon', editor, option);\n            }\n            button.set({\n                // Use the `label` property for a verbose description (because of ARIA).\n                label: labelText,\n                icon: RESIZE_ICONS[icon],\n                tooltip: labelText,\n                isToggleable: true\n            });\n            // Bind button to the command.\n            button.bind('isEnabled').to(this);\n            if (editor.plugins.has('ImageCustomResizeUI') && isCustomImageResizeOption(option)) {\n                const customResizeUI = editor.plugins.get('ImageCustomResizeUI');\n                this.listenTo(button, 'execute', () => {\n                    customResizeUI._showForm(this._resizeUnit);\n                });\n            }\n            else {\n                const optionValueWithUnit = value ? value + this._resizeUnit : null;\n                button.bind('isOn').to(command, 'value', getIsOnButtonCallback(optionValueWithUnit));\n                this.listenTo(button, 'execute', () => {\n                    editor.execute('resizeImage', { width: optionValueWithUnit });\n                });\n            }\n            return button;\n        });\n    }\n    /**\n     * A helper function that creates a dropdown component for the plugin containing all the resize options defined in\n     * the editor configuration.\n     *\n     * @param options An array of configured options.\n     */\n    _registerImageResizeDropdown(options) {\n        const editor = this.editor;\n        const t = editor.t;\n        const originalSizeOption = options.find(option => !option.value);\n        const componentCreator = (locale) => {\n            const command = editor.commands.get('resizeImage');\n            const dropdownView = createDropdown(locale, DropdownButtonView);\n            const dropdownButton = dropdownView.buttonView;\n            const accessibleLabel = t('Resize image');\n            dropdownButton.set({\n                tooltip: accessibleLabel,\n                commandValue: originalSizeOption.value,\n                icon: RESIZE_ICONS.medium,\n                isToggleable: true,\n                label: this._getOptionLabelValue(originalSizeOption),\n                withText: true,\n                class: 'ck-resize-image-button',\n                ariaLabel: accessibleLabel,\n                ariaLabelledBy: undefined\n            });\n            dropdownButton.bind('label').to(command, 'value', commandValue => {\n                if (commandValue && commandValue.width) {\n                    return commandValue.width;\n                }\n                else {\n                    return this._getOptionLabelValue(originalSizeOption);\n                }\n            });\n            dropdownView.bind('isEnabled').to(this);\n            addListToDropdown(dropdownView, () => this._getResizeDropdownListItemDefinitions(options, command), {\n                ariaLabel: t('Image resize list'),\n                role: 'menu'\n            });\n            // Execute command when an item from the dropdown is selected.\n            this.listenTo(dropdownView, 'execute', evt => {\n                if ('onClick' in evt.source) {\n                    evt.source.onClick();\n                }\n                else {\n                    editor.execute(evt.source.commandName, { width: evt.source.commandValue });\n                    editor.editing.view.focus();\n                }\n            });\n            return dropdownView;\n        };\n        // Register `resizeImage` dropdown and add `imageResize` dropdown as an alias for backward compatibility.\n        editor.ui.componentFactory.add('resizeImage', componentCreator);\n        editor.ui.componentFactory.add('imageResize', componentCreator);\n    }\n    /**\n     * A helper function for creating an option label value string.\n     *\n     * @param option A resize option object.\n     * @param forTooltip An optional flag for creating a tooltip label.\n     * @returns A user-defined label combined from the numeric value and the resize unit or the default label\n     * for reset options (`Original`).\n     */\n    _getOptionLabelValue(option, forTooltip = false) {\n        const t = this.editor.t;\n        if (option.label) {\n            return option.label;\n        }\n        else if (forTooltip) {\n            if (isCustomImageResizeOption(option)) {\n                return t('Custom image size');\n            }\n            else if (option.value) {\n                return t('Resize image to %0', option.value + this._resizeUnit);\n            }\n            else {\n                return t('Resize image to the original size');\n            }\n        }\n        else {\n            if (isCustomImageResizeOption(option)) {\n                return t('Custom');\n            }\n            else if (option.value) {\n                return option.value + this._resizeUnit;\n            }\n            else {\n                return t('Original');\n            }\n        }\n    }\n    /**\n     * A helper function that parses the resize options and returns list item definitions ready for use in the dropdown.\n     *\n     * @param options The resize options.\n     * @param command The resize image command.\n     * @returns Dropdown item definitions.\n     */\n    _getResizeDropdownListItemDefinitions(options, command) {\n        const { editor } = this;\n        const itemDefinitions = new Collection();\n        const optionsWithSerializedValues = options.map(option => {\n            if (isCustomImageResizeOption(option)) {\n                return {\n                    ...option,\n                    valueWithUnits: 'custom'\n                };\n            }\n            if (!option.value) {\n                return {\n                    ...option,\n                    valueWithUnits: null\n                };\n            }\n            return {\n                ...option,\n                valueWithUnits: `${option.value}${this._resizeUnit}`\n            };\n        });\n        for (const option of optionsWithSerializedValues) {\n            let definition = null;\n            if (editor.plugins.has('ImageCustomResizeUI') && isCustomImageResizeOption(option)) {\n                const customResizeUI = editor.plugins.get('ImageCustomResizeUI');\n                definition = {\n                    type: 'button',\n                    model: new ViewModel({\n                        label: this._getOptionLabelValue(option),\n                        role: 'menuitemradio',\n                        withText: true,\n                        icon: null,\n                        onClick: () => {\n                            customResizeUI._showForm(this._resizeUnit);\n                        }\n                    })\n                };\n                const allDropdownValues = map(optionsWithSerializedValues, 'valueWithUnits');\n                definition.model.bind('isOn').to(command, 'value', getIsOnCustomButtonCallback(allDropdownValues));\n            }\n            else {\n                definition = {\n                    type: 'button',\n                    model: new ViewModel({\n                        commandName: 'resizeImage',\n                        commandValue: option.valueWithUnits,\n                        label: this._getOptionLabelValue(option),\n                        role: 'menuitemradio',\n                        withText: true,\n                        icon: null\n                    })\n                };\n                definition.model.bind('isOn').to(command, 'value', getIsOnButtonCallback(option.valueWithUnits));\n            }\n            definition.model.bind('isEnabled').to(command, 'isEnabled');\n            itemDefinitions.add(definition);\n        }\n        return itemDefinitions;\n    }\n}\n/**\n * A helper that checks if provided option triggers custom resize balloon.\n */\nfunction isCustomImageResizeOption(option) {\n    return option.value === 'custom';\n}\n/**\n * A helper function for setting the `isOn` state of buttons in value bindings.\n */\nfunction getIsOnButtonCallback(value) {\n    return (commandValue) => {\n        const objectCommandValue = commandValue;\n        if (value === null && objectCommandValue === value) {\n            return true;\n        }\n        return objectCommandValue !== null && objectCommandValue.width === value;\n    };\n}\n/**\n * A helper function for setting the `isOn` state of custom size button in value bindings.\n */\nfunction getIsOnCustomButtonCallback(allDropdownValues) {\n    return (commandValue) => !allDropdownValues.some(dropdownValue => getIsOnButtonCallback(dropdownValue)(commandValue));\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { WidgetResize } from 'ckeditor5/src/widget.js';\nimport ImageUtils from '../imageutils.js';\nimport ImageLoadObserver from '../image/imageloadobserver.js';\nconst RESIZABLE_IMAGES_CSS_SELECTOR = 'figure.image.ck-widget > img,' +\n    'figure.image.ck-widget > picture > img,' +\n    'figure.image.ck-widget > a > img,' +\n    'figure.image.ck-widget > a > picture > img,' +\n    'span.image-inline.ck-widget > img,' +\n    'span.image-inline.ck-widget > picture > img';\nconst RESIZED_IMAGE_CLASS = 'image_resized';\n/**\n * The image resize by handles feature.\n *\n * It adds the ability to resize each image using handles or manually by\n * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.\n */\nexport default class ImageResizeHandles extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [WidgetResize, ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageResizeHandles';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const command = this.editor.commands.get('resizeImage');\n        this.bind('isEnabled').to(command);\n        this._setupResizerCreator();\n    }\n    /**\n     * Attaches the listeners responsible for creating a resizer for each image, except for images inside the HTML embed preview.\n     */\n    _setupResizerCreator() {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        editingView.addObserver(ImageLoadObserver);\n        this.listenTo(editingView.document, 'imageLoaded', (evt, domEvent) => {\n            // The resizer must be attached only to images loaded by the `ImageInsert`, `ImageUpload` or `LinkImage` plugins.\n            if (!domEvent.target.matches(RESIZABLE_IMAGES_CSS_SELECTOR)) {\n                return;\n            }\n            const domConverter = editor.editing.view.domConverter;\n            const imageView = domConverter.domToView(domEvent.target);\n            const widgetView = imageUtils.getImageWidgetFromImageView(imageView);\n            let resizer = this.editor.plugins.get(WidgetResize).getResizerByViewElement(widgetView);\n            if (resizer) {\n                // There are rare cases when the image will be triggered multiple times for the same widget, e.g. when\n                // the image's source was changed after upload (https://github.com/ckeditor/ckeditor5/pull/8108#issuecomment-708302992).\n                resizer.redraw();\n                return;\n            }\n            const mapper = editor.editing.mapper;\n            const imageModel = mapper.toModelElement(widgetView);\n            resizer = editor.plugins\n                .get(WidgetResize)\n                .attachTo({\n                unit: editor.config.get('image.resizeUnit'),\n                modelElement: imageModel,\n                viewElement: widgetView,\n                editor,\n                getHandleHost(domWidgetElement) {\n                    return domWidgetElement.querySelector('img');\n                },\n                getResizeHost() {\n                    return domConverter.mapViewToDom(mapper.toViewElement(imageModel));\n                },\n                isCentered() {\n                    const imageStyle = imageModel.getAttribute('imageStyle');\n                    return imageStyle == 'alignCenter';\n                },\n                onCommit(newValue) {\n                    // Get rid of the CSS class in case the command execution that follows is unsuccessful\n                    // (e.g. Track Changes can override it and the new dimensions will not apply). Otherwise,\n                    // the presence of the class and the absence of the width style will cause it to take 100%\n                    // of the horizontal space.\n                    editingView.change(writer => {\n                        writer.removeClass(RESIZED_IMAGE_CLASS, widgetView);\n                    });\n                    editor.execute('resizeImage', { width: newValue });\n                }\n            });\n            resizer.on('updateSize', () => {\n                if (!widgetView.hasClass(RESIZED_IMAGE_CLASS)) {\n                    editingView.change(writer => {\n                        writer.addClass(RESIZED_IMAGE_CLASS, widgetView);\n                    });\n                }\n                const target = imageModel.name === 'imageInline' ? imageView : widgetView;\n                if (target.getStyle('height')) {\n                    editingView.change(writer => {\n                        writer.removeStyle('height', target);\n                    });\n                }\n            });\n            resizer.bind('isEnabled').to(this);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageresize/utils/tryparsedimensionwithunit\n */\n/**\n * Parses provided string with dimension value and returns extracted numeric value and unit.\n *\n * \t* If non-string dimension is passed then `null` value is returned.\n * \t* If unit is missing then `null` is returned.\n * \t* If numeric value part of string is not a number then `null` is returned.\n *\n * Example:\n * \t`\"222px\"` => `{ value: 222, unit: \"px\" }`\n *\t`\"99%\"` => `{ value: 99, unit: \"%\" }`\n\n * @param dimension Unsafe string with dimension.\n * @returns Parsed dimension with extracted numeric value and units.\n */\nexport function tryParseDimensionWithUnit(dimension) {\n    if (!dimension) {\n        return null;\n    }\n    const [, rawValue, unit] = dimension.trim().match(/([.,\\d]+)(%|px)$/) || [];\n    const parsedValue = Number.parseFloat(rawValue);\n    if (Number.isNaN(parsedValue)) {\n        return null;\n    }\n    return {\n        value: parsedValue,\n        unit\n    };\n}\n/**\n * Converts dimension between `px` -> `%` and `%` -> `px`.\n *\n * @param parentDimensionPx\tDimension of parent element that contains measured element.\n * @param dimension Measured element dimension.\n * @returns Casted dimension.\n */\nexport function tryCastDimensionsToUnit(parentDimensionPx, dimension, targetUnit) {\n    // \"%\" -> \"px\" conversion\n    if (targetUnit === 'px') {\n        return {\n            value: dimension.value,\n            unit: 'px'\n        };\n    }\n    // \"px\" -> \"%\" conversion\n    return {\n        value: dimension.value / parentDimensionPx * 100,\n        unit: '%'\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Finds model, view and DOM element for selected image element. Returns `null` if there is no image selected.\n *\n * @param editor Editor instance.\n */\nexport function getSelectedImageEditorNodes(editor) {\n    const { editing } = editor;\n    const imageUtils = editor.plugins.get('ImageUtils');\n    const imageModelElement = imageUtils.getClosestSelectedImageElement(editor.model.document.selection);\n    if (!imageModelElement) {\n        return null;\n    }\n    const imageViewElement = editing.mapper.toViewElement(imageModelElement);\n    const imageDOMElement = editing.view.domConverter.mapViewToDom(imageViewElement);\n    return {\n        model: imageModelElement,\n        view: imageViewElement,\n        dom: imageDOMElement\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageresize/ui/imagecustomresizeformview\n */\nimport { ButtonView, FocusCycler, LabeledFieldView, View, ViewCollection, createLabeledInputNumber, submitHandler } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\nimport { icons } from 'ckeditor5/src/core.js';\nimport '../../../theme/imagecustomresizeform.css';\n// See: #8833.\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport '@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css';\n/**\n * The ImageCustomResizeFormView class.\n */\nexport default class ImageCustomResizeFormView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, unit, validators) {\n        super(locale);\n        const t = this.locale.t;\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.unit = unit;\n        this.labeledInput = this._createLabeledInputView();\n        this.saveButtonView = this._createButton(t('Save'), icons.check, 'ck-button-save');\n        this.saveButtonView.type = 'submit';\n        this.cancelButtonView = this._createButton(t('Cancel'), icons.cancel, 'ck-button-cancel', 'cancel');\n        this._focusables = new ViewCollection();\n        this._validators = validators;\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-image-custom-resize-form',\n                    'ck-responsive-form'\n                ],\n                // https://github.com/ckeditor/ckeditor5-image/issues/40\n                tabindex: '-1'\n            },\n            children: [\n                this.labeledInput,\n                this.saveButtonView,\n                this.cancelButtonView\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.keystrokes.listenTo(this.element);\n        submitHandler({ view: this });\n        [this.labeledInput, this.saveButtonView, this.cancelButtonView]\n            .forEach(v => {\n            // Register the view as focusable.\n            this._focusables.add(v);\n            // Register the view in the focus tracker.\n            this.focusTracker.add(v.element);\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Creates the button view.\n     *\n     * @param label The button label\n     * @param icon The button's icon.\n     * @param className The additional button CSS class name.\n     * @param eventName The event name that the ButtonView#execute event will be delegated to.\n     * @returns The button view instance.\n     */\n    _createButton(label, icon, className, eventName) {\n        const button = new ButtonView(this.locale);\n        button.set({\n            label,\n            icon,\n            tooltip: true\n        });\n        button.extendTemplate({\n            attributes: {\n                class: className\n            }\n        });\n        if (eventName) {\n            button.delegate('execute').to(this, eventName);\n        }\n        return button;\n    }\n    /**\n     * Creates an input with a label.\n     *\n     * @returns Labeled field view instance.\n     */\n    _createLabeledInputView() {\n        const t = this.locale.t;\n        const labeledInput = new LabeledFieldView(this.locale, createLabeledInputNumber);\n        labeledInput.label = t('Resize image (in %0)', this.unit);\n        labeledInput.fieldView.set({\n            step: 0.1\n        });\n        return labeledInput;\n    }\n    /**\n     * Validates the form and returns `false` when some fields are invalid.\n     */\n    isValid() {\n        this.resetFormStatus();\n        for (const validator of this._validators) {\n            const errorText = validator(this);\n            // One error per field is enough.\n            if (errorText) {\n                // Apply updated error.\n                this.labeledInput.errorText = errorText;\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Cleans up the supplementary error and information text of the {@link #labeledInput}\n     * bringing them back to the state when the form has been displayed for the first time.\n     *\n     * See {@link #isValid}.\n     */\n    resetFormStatus() {\n        this.labeledInput.errorText = null;\n    }\n    /**\n     * The native DOM `value` of the input element of {@link #labeledInput}.\n     */\n    get rawSize() {\n        const { element } = this.labeledInput.fieldView;\n        if (!element) {\n            return null;\n        }\n        return element.value;\n    }\n    /**\n     * Get numeric value of size. Returns `null` if value of size input element in {@link #labeledInput}.is not a number.\n     */\n    get parsedSize() {\n        const { rawSize } = this;\n        if (rawSize === null) {\n            return null;\n        }\n        const parsed = Number.parseFloat(rawSize);\n        if (Number.isNaN(parsed)) {\n            return null;\n        }\n        return parsed;\n    }\n    /**\n     * Returns serialized image input size with unit.\n     * Returns `null` if value of size input element in {@link #labeledInput}.is not a number.\n     */\n    get sizeWithUnits() {\n        const { parsedSize, unit } = this;\n        if (parsedSize === null) {\n            return null;\n        }\n        return `${parsedSize}${unit}`;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageresize/imagecustomresizeui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ContextualBalloon, clickOutsideHandler, CssTransitionDisablerMixin } from 'ckeditor5/src/ui.js';\nimport { getBalloonPositionData } from '../image/ui/utils.js';\nimport { getSelectedImageWidthInUnits } from './utils/getselectedimagewidthinunits.js';\nimport ImageCustomResizeFormView from './ui/imagecustomresizeformview.js';\nimport { getSelectedImagePossibleResizeRange } from './utils/getselectedimagepossibleresizerange.js';\n/**\n * The custom resize image UI plugin.\n *\n * The plugin uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon}.\n */\nexport default class ImageCustomResizeUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ContextualBalloon];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageCustomResizeUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        // Destroy created UI components as they are not automatically destroyed (see ckeditor5#1341).\n        if (this._form) {\n            this._form.destroy();\n        }\n    }\n    /**\n     * Creates the {@link module:image/imageresize/ui/imagecustomresizeformview~ImageCustomResizeFormView}\n     * form.\n     */\n    _createForm(unit) {\n        const editor = this.editor;\n        this._balloon = this.editor.plugins.get('ContextualBalloon');\n        this._form = new (CssTransitionDisablerMixin(ImageCustomResizeFormView))(editor.locale, unit, getFormValidators(editor));\n        // Render the form so its #element is available for clickOutsideHandler.\n        this._form.render();\n        this.listenTo(this._form, 'submit', () => {\n            if (this._form.isValid()) {\n                editor.execute('resizeImage', {\n                    width: this._form.sizeWithUnits\n                });\n                this._hideForm(true);\n            }\n        });\n        // Update balloon position when form error label is added .\n        this.listenTo(this._form.labeledInput, 'change:errorText', () => {\n            editor.ui.update();\n        });\n        this.listenTo(this._form, 'cancel', () => {\n            this._hideForm(true);\n        });\n        // Close the form on Esc key press.\n        this._form.keystrokes.set('Esc', (data, cancel) => {\n            this._hideForm(true);\n            cancel();\n        });\n        // Close on click outside of balloon panel element.\n        clickOutsideHandler({\n            emitter: this._form,\n            activator: () => this._isVisible,\n            contextElements: () => [this._balloon.view.element],\n            callback: () => this._hideForm()\n        });\n    }\n    /**\n     * Shows the {@link #_form} in the {@link #_balloon}.\n     *\n     * @internal\n     */\n    _showForm(unit) {\n        if (this._isVisible) {\n            return;\n        }\n        if (!this._form) {\n            this._createForm(unit);\n        }\n        const editor = this.editor;\n        const labeledInput = this._form.labeledInput;\n        this._form.disableCssTransitions();\n        this._form.resetFormStatus();\n        if (!this._isInBalloon) {\n            this._balloon.add({\n                view: this._form,\n                position: getBalloonPositionData(editor)\n            });\n        }\n        // Make sure that each time the panel shows up, the field remains in sync with the value of\n        // the command. If the user typed in the input, then canceled the balloon (`labeledInput#value`\n        // stays unaltered) and re-opened it without changing the value of the command, they would see the\n        // old value instead of the actual value of the command.\n        const currentParsedWidth = getSelectedImageWidthInUnits(editor, unit);\n        const initialInputValue = currentParsedWidth ? currentParsedWidth.value.toFixed(1) : '';\n        const possibleRange = getSelectedImagePossibleResizeRange(editor, unit);\n        labeledInput.fieldView.value = labeledInput.fieldView.element.value = initialInputValue;\n        if (possibleRange) {\n            Object.assign(labeledInput.fieldView, {\n                min: possibleRange.lower.toFixed(1),\n                max: Math.ceil(possibleRange.upper).toFixed(1)\n            });\n        }\n        this._form.labeledInput.fieldView.select();\n        this._form.enableCssTransitions();\n    }\n    /**\n     * Removes the {@link #_form} from the {@link #_balloon}.\n     *\n     * @param focusEditable Controls whether the editing view is focused afterwards.\n     */\n    _hideForm(focusEditable = false) {\n        if (!this._isInBalloon) {\n            return;\n        }\n        // Blur the input element before removing it from DOM to prevent issues in some browsers.\n        // See https://github.com/ckeditor/ckeditor5/issues/1501.\n        if (this._form.focusTracker.isFocused) {\n            this._form.saveButtonView.focus();\n        }\n        this._balloon.remove(this._form);\n        if (focusEditable) {\n            this.editor.editing.view.focus();\n        }\n    }\n    /**\n     * Returns `true` when the {@link #_form} is the visible view in the {@link #_balloon}.\n     */\n    get _isVisible() {\n        return !!this._balloon && this._balloon.visibleView === this._form;\n    }\n    /**\n     * Returns `true` when the {@link #_form} is in the {@link #_balloon}.\n     */\n    get _isInBalloon() {\n        return !!this._balloon && this._balloon.hasView(this._form);\n    }\n}\n/**\n * Returns image resize form validation callbacks.\n *\n * @param editor Editor instance.\n */\nfunction getFormValidators(editor) {\n    const t = editor.t;\n    return [\n        form => {\n            if (form.rawSize.trim() === '') {\n                return t('The value must not be empty.');\n            }\n            if (form.parsedSize === null) {\n                return t('The value should be a plain number.');\n            }\n        }\n    ];\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageresize/utils/getselectedimagewidthinunits\n */\nimport { Rect } from 'ckeditor5/src/utils.js';\nimport { calculateResizeHostAncestorWidth } from 'ckeditor5/src/widget.js';\nimport { tryCastDimensionsToUnit, tryParseDimensionWithUnit } from './tryparsedimensionwithunit.js';\nimport { getSelectedImageEditorNodes } from './getselectedimageeditornodes.js';\n/**\n * Returns image width in specified units. It is width of image after resize.\n *\n * \t* If image is not selected or command is disabled then `null` will be returned.\n * \t* If image is not fully loaded (and it is impossible to determine its natural size) then `null` will be returned.\n *\t* If `targetUnit` percentage is passed then it will return width percentage of image related to its accessors.\n *\n * @param editor Editor instance.\n * @param targetUnit Unit in which dimension will be returned.\n * @returns Parsed image width after resize (with unit).\n */\nexport function getSelectedImageWidthInUnits(editor, targetUnit) {\n    const imageNodes = getSelectedImageEditorNodes(editor);\n    if (!imageNodes) {\n        return null;\n    }\n    const parsedResizedWidth = tryParseDimensionWithUnit(imageNodes.model.getAttribute('resizedWidth') || null);\n    if (!parsedResizedWidth) {\n        return null;\n    }\n    if (parsedResizedWidth.unit === targetUnit) {\n        return parsedResizedWidth;\n    }\n    const imageParentWidthPx = calculateResizeHostAncestorWidth(imageNodes.dom);\n    const imageHolderDimension = {\n        unit: 'px',\n        value: new Rect(imageNodes.dom).width\n    };\n    return tryCastDimensionsToUnit(imageParentWidthPx, imageHolderDimension, targetUnit);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { calculateResizeHostAncestorWidth } from 'ckeditor5/src/widget.js';\nimport { getSelectedImageEditorNodes } from './getselectedimageeditornodes.js';\nimport { tryCastDimensionsToUnit, tryParseDimensionWithUnit } from './tryparsedimensionwithunit.js';\n/**\n * Returns min and max value of resize image in specified unit.\n *\n * @param editor Editor instance.\n * @param targetUnit Unit in which dimension will be returned.\n * @returns Possible resize range in numeric form.\n */\nexport function getSelectedImagePossibleResizeRange(editor, targetUnit) {\n    const imageNodes = getSelectedImageEditorNodes(editor);\n    if (!imageNodes) {\n        return null;\n    }\n    const imageParentWidthPx = calculateResizeHostAncestorWidth(imageNodes.dom);\n    const minimumImageWidth = tryParseDimensionWithUnit(window.getComputedStyle(imageNodes.dom).minWidth) || {\n        value: 1,\n        unit: 'px'\n    };\n    const lower = Math.max(0.1, tryCastDimensionsToUnit(imageParentWidthPx, minimumImageWidth, targetUnit).value);\n    const upper = targetUnit === 'px' ? imageParentWidthPx : 100;\n    return {\n        unit: targetUnit,\n        lower,\n        upper\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The image style command. It is used to apply {@link module:image/imageconfig~ImageStyleConfig#options image style option}\n * to a selected image.\n *\n * **Note**: Executing this command may change the image model element if the desired style requires an image of a different\n * type. See {@link module:image/imagestyle/imagestylecommand~ImageStyleCommand#execute} to learn more.\n */\nexport default class ImageStyleCommand extends Command {\n    /**\n     * Creates an instance of the image style command. When executed, the command applies one of\n     * {@link module:image/imageconfig~ImageStyleConfig#options style options} to the currently selected image.\n     *\n     * @param editor The editor instance.\n     * @param styles The style options that this command supports.\n     */\n    constructor(editor, styles) {\n        super(editor);\n        this._defaultStyles = {\n            imageBlock: false,\n            imageInline: false\n        };\n        this._styles = new Map(styles.map(style => {\n            if (style.isDefault) {\n                for (const modelElementName of style.modelElements) {\n                    this._defaultStyles[modelElementName] = style.name;\n                }\n            }\n            return [style.name, style];\n        }));\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);\n        this.isEnabled = !!element;\n        if (!this.isEnabled) {\n            this.value = false;\n        }\n        else if (element.hasAttribute('imageStyle')) {\n            this.value = element.getAttribute('imageStyle');\n        }\n        else {\n            this.value = this._defaultStyles[element.name];\n        }\n    }\n    /**\n     * Executes the command and applies the style to the currently selected image:\n     *\n     * ```ts\n     * editor.execute( 'imageStyle', { value: 'side' } );\n     * ```\n     *\n     * **Note**: Executing this command may change the image model element if the desired style requires an image\n     * of a different type. Learn more about {@link module:image/imageconfig~ImageStyleOptionDefinition#modelElements model element}\n     * configuration for the style option.\n     *\n     * @param options.value The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).\n     * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.\n     * The default is `true`.\n     * @fires execute\n     */\n    execute(options = {}) {\n        const editor = this.editor;\n        const model = editor.model;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        model.change(writer => {\n            const requestedStyle = options.value;\n            const { setImageSizes = true } = options;\n            let imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n            // Change the image type if a style requires it.\n            if (requestedStyle && this.shouldConvertImageType(requestedStyle, imageElement)) {\n                this.editor.execute(imageUtils.isBlockImage(imageElement) ? 'imageTypeInline' : 'imageTypeBlock', { setImageSizes });\n                // Update the imageElement to the newly created image.\n                imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n            }\n            // Default style means that there is no `imageStyle` attribute in the model.\n            // https://github.com/ckeditor/ckeditor5-image/issues/147\n            if (!requestedStyle || this._styles.get(requestedStyle).isDefault) {\n                writer.removeAttribute('imageStyle', imageElement);\n            }\n            else {\n                writer.setAttribute('imageStyle', requestedStyle, imageElement);\n            }\n            if (setImageSizes) {\n                imageUtils.setImageNaturalSizeAttributes(imageElement);\n            }\n        });\n    }\n    /**\n     * Returns `true` if requested style change would trigger the image type change.\n     *\n     * @param requestedStyle The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).\n     * @param imageElement The image model element.\n     */\n    shouldConvertImageType(requestedStyle, imageElement) {\n        const supportedTypes = this._styles.get(requestedStyle).modelElements;\n        return !supportedTypes.includes(imageElement.name);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagestyle/utils\n */\nimport { icons } from 'ckeditor5/src/core.js';\nimport { logWarning } from 'ckeditor5/src/utils.js';\n/**\n * Default image style options provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#styles}\n * configuration.\n *\n * There are available 5 styles focused on formatting:\n *\n * * **`'alignLeft'`** aligns the inline or block image to the left and wraps it with the text using the `image-style-align-left` class,\n * * **`'alignRight'`** aligns the inline or block image to the right and wraps it with the text using the `image-style-align-right` class,\n * * **`'alignCenter'`** centers the block image using the `image-style-align-center` class,\n * * **`'alignBlockLeft'`** aligns the block image to the left using the `image-style-block-align-left` class,\n * * **`'alignBlockRight'`** aligns the block image to the right using the `image-style-block-align-right` class,\n *\n * and 3 semantic styles:\n *\n * * **`'inline'`** is an inline image without any CSS class,\n * * **`'block'`** is a block image without any CSS class,\n * * **`'side'`** is a block image styled with the `image-style-side` CSS class.\n */\nexport const DEFAULT_OPTIONS = {\n    // This style represents an image placed in the line of text.\n    get inline() {\n        return {\n            name: 'inline',\n            title: 'In line',\n            icon: icons.objectInline,\n            modelElements: ['imageInline'],\n            isDefault: true\n        };\n    },\n    // This style represents an image aligned to the left and wrapped with text.\n    get alignLeft() {\n        return {\n            name: 'alignLeft',\n            title: 'Left aligned image',\n            icon: icons.objectLeft,\n            modelElements: ['imageBlock', 'imageInline'],\n            className: 'image-style-align-left'\n        };\n    },\n    // This style represents an image aligned to the left.\n    get alignBlockLeft() {\n        return {\n            name: 'alignBlockLeft',\n            title: 'Left aligned image',\n            icon: icons.objectBlockLeft,\n            modelElements: ['imageBlock'],\n            className: 'image-style-block-align-left'\n        };\n    },\n    // This style represents a centered image.\n    get alignCenter() {\n        return {\n            name: 'alignCenter',\n            title: 'Centered image',\n            icon: icons.objectCenter,\n            modelElements: ['imageBlock'],\n            className: 'image-style-align-center'\n        };\n    },\n    // This style represents an image aligned to the right and wrapped with text.\n    get alignRight() {\n        return {\n            name: 'alignRight',\n            title: 'Right aligned image',\n            icon: icons.objectRight,\n            modelElements: ['imageBlock', 'imageInline'],\n            className: 'image-style-align-right'\n        };\n    },\n    // This style represents an image aligned to the right.\n    get alignBlockRight() {\n        return {\n            name: 'alignBlockRight',\n            title: 'Right aligned image',\n            icon: icons.objectBlockRight,\n            modelElements: ['imageBlock'],\n            className: 'image-style-block-align-right'\n        };\n    },\n    // This option is equal to the situation when no style is applied.\n    get block() {\n        return {\n            name: 'block',\n            title: 'Centered image',\n            icon: icons.objectCenter,\n            modelElements: ['imageBlock'],\n            isDefault: true\n        };\n    },\n    // This represents a side image.\n    get side() {\n        return {\n            name: 'side',\n            title: 'Side image',\n            icon: icons.objectRight,\n            modelElements: ['imageBlock'],\n            className: 'image-style-side'\n        };\n    }\n};\n/**\n * Default image style icons provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#styles}\n * configuration.\n *\n * See {@link module:image/imageconfig~ImageStyleOptionDefinition#icon} to learn more.\n *\n * There are 7 default icons available: `'full'`, `'left'`, `'inlineLeft'`, `'center'`, `'right'`, `'inlineRight'`, and `'inline'`.\n */\nexport const DEFAULT_ICONS = /* #__PURE__ */ (() => ({\n    full: icons.objectFullWidth,\n    left: icons.objectBlockLeft,\n    right: icons.objectBlockRight,\n    center: icons.objectCenter,\n    inlineLeft: icons.objectLeft,\n    inlineRight: icons.objectRight,\n    inline: icons.objectInline\n}))();\n/**\n * Default drop-downs provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#toolbar}\n * configuration. The drop-downs are containers for the {@link module:image/imageconfig~ImageStyleConfig#options image style options}.\n *\n * If both of the `ImageEditing` plugins are loaded, there are 2 predefined drop-downs available:\n *\n * * **`'imageStyle:wrapText'`**, which contains the `alignLeft` and `alignRight` options, that is,\n * those that wraps the text around the image,\n * * **`'imageStyle:breakText'`**, which contains the `alignBlockLeft`, `alignCenter` and `alignBlockRight` options, that is,\n * those that breaks the text around the image.\n */\nexport const DEFAULT_DROPDOWN_DEFINITIONS = [{\n        name: 'imageStyle:wrapText',\n        title: 'Wrap text',\n        defaultItem: 'imageStyle:alignLeft',\n        items: ['imageStyle:alignLeft', 'imageStyle:alignRight']\n    }, {\n        name: 'imageStyle:breakText',\n        title: 'Break text',\n        defaultItem: 'imageStyle:block',\n        items: ['imageStyle:alignBlockLeft', 'imageStyle:block', 'imageStyle:alignBlockRight']\n    }];\n/**\n * Returns a list of the normalized and validated image style options.\n *\n * @param config\n * @param config.isInlinePluginLoaded\n * Determines whether the {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugin has been loaded.\n * @param config.isBlockPluginLoaded\n * Determines whether the {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`} plugin has been loaded.\n * @param config.configuredStyles\n * The image styles configuration provided in the image styles {@link module:image/imageconfig~ImageConfig#styles configuration}\n * as a default or custom value.\n * @returns\n * * Each of options contains a complete icon markup.\n * * The image style options not supported by any of the loaded plugins are filtered out.\n */\nfunction normalizeStyles(config) {\n    const configuredStyles = config.configuredStyles.options || [];\n    const styles = configuredStyles\n        .map(arrangement => normalizeDefinition(arrangement))\n        .filter(arrangement => isValidOption(arrangement, config));\n    return styles;\n}\n/**\n * Returns the default image styles configuration depending on the loaded image editing plugins.\n *\n * @param isInlinePluginLoaded\n * Determines whether the {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugin has been loaded.\n *\n * @param isBlockPluginLoaded\n * Determines whether the {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`} plugin has been loaded.\n *\n * @returns\n * It returns an object with the lists of the image style options and groups defined as strings related to the\n * {@link module:image/imagestyle/utils#DEFAULT_OPTIONS default options}\n */\nfunction getDefaultStylesConfiguration(isBlockPluginLoaded, isInlinePluginLoaded) {\n    if (isBlockPluginLoaded && isInlinePluginLoaded) {\n        return {\n            options: [\n                'inline', 'alignLeft', 'alignRight',\n                'alignCenter', 'alignBlockLeft', 'alignBlockRight',\n                'block', 'side'\n            ]\n        };\n    }\n    else if (isBlockPluginLoaded) {\n        return {\n            options: ['block', 'side']\n        };\n    }\n    else if (isInlinePluginLoaded) {\n        return {\n            options: ['inline', 'alignLeft', 'alignRight']\n        };\n    }\n    return {};\n}\n/**\n * Returns a list of the available predefined drop-downs' definitions depending on the loaded image editing plugins.\n */\nfunction getDefaultDropdownDefinitions(pluginCollection) {\n    if (pluginCollection.has('ImageBlockEditing') && pluginCollection.has('ImageInlineEditing')) {\n        return [...DEFAULT_DROPDOWN_DEFINITIONS];\n    }\n    else {\n        return [];\n    }\n}\n/**\n * Normalizes an image style option or group provided in the {@link module:image/imageconfig~ImageConfig#styles}\n * and returns it in a {@link module:image/imageconfig~ImageStyleOptionDefinition}/\n */\nfunction normalizeDefinition(definition) {\n    if (typeof definition === 'string') {\n        // Just the name of the style has been passed, but none of the defaults.\n        if (!DEFAULT_OPTIONS[definition]) {\n            // Normalize the style anyway to prevent errors.\n            definition = { name: definition };\n        }\n        // Just the name of the style has been passed and it's one of the defaults, just use it.\n        // Clone the style to avoid overriding defaults.\n        else {\n            definition = { ...DEFAULT_OPTIONS[definition] };\n        }\n    }\n    else {\n        // If an object style has been passed and if the name matches one of the defaults,\n        // extend it with defaults – the user wants to customize a default style.\n        // Note: Don't override the user–defined style object, clone it instead.\n        definition = extendStyle(DEFAULT_OPTIONS[definition.name], definition);\n    }\n    // If an icon is defined as a string and correspond with a name\n    // in default icons, use the default icon provided by the plugin.\n    if (typeof definition.icon === 'string') {\n        definition.icon = DEFAULT_ICONS[definition.icon] || definition.icon;\n    }\n    return definition;\n}\n/**\n * Checks if the image style option is valid:\n * * if it has the modelElements fields defined and filled,\n * * if the defined modelElements are supported by any of the loaded image editing plugins.\n * It also displays a console warning these conditions are not met.\n *\n * @param option image style option\n */\nfunction isValidOption(option, { isBlockPluginLoaded, isInlinePluginLoaded }) {\n    const { modelElements, name } = option;\n    if (!modelElements || !modelElements.length || !name) {\n        warnInvalidStyle({ style: option });\n        return false;\n    }\n    else {\n        const supportedElements = [isBlockPluginLoaded ? 'imageBlock' : null, isInlinePluginLoaded ? 'imageInline' : null];\n        // Check if the option is supported by any of the loaded plugins.\n        if (!modelElements.some(elementName => supportedElements.includes(elementName))) {\n            /**\n             * In order to work correctly, each image style {@link module:image/imageconfig~ImageStyleOptionDefinition option}\n             * requires specific model elements (also: types of images) to be supported by the editor.\n             *\n             * Model element names to which the image style option can be applied are defined in the\n             * {@link module:image/imageconfig~ImageStyleOptionDefinition#modelElements} property of the style option\n             * definition.\n             *\n             * Explore the warning in the console to find out precisely which option is not supported and which editor plugins\n             * are missing. Make sure these plugins are loaded in your editor to get this image style option working.\n             *\n             * @error image-style-missing-dependency\n             * @param {String} [option] The name of the unsupported option.\n             * @param {String} [missingPlugins] The names of the plugins one of which has to be loaded for the particular option.\n             */\n            logWarning('image-style-missing-dependency', {\n                style: option,\n                missingPlugins: modelElements.map(name => name === 'imageBlock' ? 'ImageBlockEditing' : 'ImageInlineEditing')\n            });\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Extends the default style with a style provided by the developer.\n * Note: Don't override the custom–defined style object, clone it instead.\n */\nfunction extendStyle(source, style) {\n    const extendedStyle = { ...style };\n    for (const prop in source) {\n        if (!Object.prototype.hasOwnProperty.call(style, prop)) {\n            extendedStyle[prop] = source[prop];\n        }\n    }\n    return extendedStyle;\n}\n/**\n * Displays a console warning with the 'image-style-configuration-definition-invalid' error.\n */\nfunction warnInvalidStyle(info) {\n    /**\n     * The image style definition provided in the configuration is invalid.\n     *\n     * Please make sure the definition implements properly one of the following:\n     *\n     * * {@link module:image/imageconfig~ImageStyleOptionDefinition image style option definition},\n     * * {@link module:image/imageconfig~ImageStyleDropdownDefinition image style dropdown definition}\n     *\n     * @error image-style-configuration-definition-invalid\n     * @param {String} [dropdown] The name of the invalid drop-down\n     * @param {String} [style] The name of the invalid image style option\n     */\n    logWarning('image-style-configuration-definition-invalid', info);\n}\nexport default {\n    normalizeStyles,\n    getDefaultStylesConfiguration,\n    getDefaultDropdownDefinitions,\n    warnInvalidStyle,\n    DEFAULT_OPTIONS,\n    DEFAULT_ICONS,\n    DEFAULT_DROPDOWN_DEFINITIONS\n};\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { first } from 'ckeditor5/src/utils.js';\n/**\n * @module image/imagestyle/converters\n */\n/**\n * Returns a converter for the `imageStyle` attribute. It can be used for adding, changing and removing the attribute.\n *\n * @param styles An array containing available image style options.\n * @returns A model-to-view attribute converter.\n */\nexport function modelToViewStyleAttribute(styles) {\n    return (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        // Check if there is class name associated with given value.\n        const newStyle = getStyleDefinitionByName(data.attributeNewValue, styles);\n        const oldStyle = getStyleDefinitionByName(data.attributeOldValue, styles);\n        const viewElement = conversionApi.mapper.toViewElement(data.item);\n        const viewWriter = conversionApi.writer;\n        if (oldStyle) {\n            viewWriter.removeClass(oldStyle.className, viewElement);\n        }\n        if (newStyle) {\n            viewWriter.addClass(newStyle.className, viewElement);\n        }\n    };\n}\n/**\n * Returns a view-to-model converter converting image CSS classes to a proper value in the model.\n *\n * @param styles Image style options for which the converter is created.\n * @returns A view-to-model converter.\n */\nexport function viewToModelStyleAttribute(styles) {\n    // Convert only non–default styles.\n    const nonDefaultStyles = {\n        imageInline: styles.filter(style => !style.isDefault && style.modelElements.includes('imageInline')),\n        imageBlock: styles.filter(style => !style.isDefault && style.modelElements.includes('imageBlock'))\n    };\n    return (evt, data, conversionApi) => {\n        if (!data.modelRange) {\n            return;\n        }\n        const viewElement = data.viewItem;\n        const modelImageElement = first(data.modelRange.getItems());\n        // Run this converter only if an image has been found in the model.\n        // In some cases it may not be found (for example if we run this on a figure with different type than image).\n        if (!modelImageElement) {\n            return;\n        }\n        // ...and the `imageStyle` attribute is allowed for that element, otherwise stop conversion early.\n        if (!conversionApi.schema.checkAttribute(modelImageElement, 'imageStyle')) {\n            return;\n        }\n        // Convert styles one by one.\n        for (const style of nonDefaultStyles[modelImageElement.name]) {\n            // Try to consume class corresponding with the style.\n            if (conversionApi.consumable.consume(viewElement, { classes: style.className })) {\n                // And convert this style to model attribute.\n                conversionApi.writer.setAttribute('imageStyle', style.name, modelImageElement);\n            }\n        }\n    };\n}\n/**\n * Returns the style with a given `name` from an array of styles.\n */\nfunction getStyleDefinitionByName(name, styles) {\n    for (const style of styles) {\n        if (style.name === name) {\n            return style;\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagestyle/imagestyleediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageStyleCommand from './imagestylecommand.js';\nimport ImageUtils from '../imageutils.js';\nimport utils from './utils.js';\nimport { viewToModelStyleAttribute, modelToViewStyleAttribute } from './converters.js';\n/**\n * The image style engine plugin. It sets the default configuration, creates converters and registers\n * {@link module:image/imagestyle/imagestylecommand~ImageStyleCommand ImageStyleCommand}.\n */\nexport default class ImageStyleEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageStyleEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const { normalizeStyles, getDefaultStylesConfiguration } = utils;\n        const editor = this.editor;\n        const isBlockPluginLoaded = editor.plugins.has('ImageBlockEditing');\n        const isInlinePluginLoaded = editor.plugins.has('ImageInlineEditing');\n        editor.config.define('image.styles', getDefaultStylesConfiguration(isBlockPluginLoaded, isInlinePluginLoaded));\n        this.normalizedStyles = normalizeStyles({\n            configuredStyles: editor.config.get('image.styles'),\n            isBlockPluginLoaded,\n            isInlinePluginLoaded\n        });\n        this._setupConversion(isBlockPluginLoaded, isInlinePluginLoaded);\n        this._setupPostFixer();\n        // Register imageStyle command.\n        editor.commands.add('imageStyle', new ImageStyleCommand(editor, this.normalizedStyles));\n    }\n    /**\n     * Sets the editor conversion taking the presence of\n     * {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`}\n     * and {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugins into consideration.\n     */\n    _setupConversion(isBlockPluginLoaded, isInlinePluginLoaded) {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        const modelToViewConverter = modelToViewStyleAttribute(this.normalizedStyles);\n        const viewToModelConverter = viewToModelStyleAttribute(this.normalizedStyles);\n        editor.editing.downcastDispatcher.on('attribute:imageStyle', modelToViewConverter);\n        editor.data.downcastDispatcher.on('attribute:imageStyle', modelToViewConverter);\n        // Allow imageStyle attribute in image and imageInline.\n        // We could call it 'style' but https://github.com/ckeditor/ckeditor5-engine/issues/559.\n        if (isBlockPluginLoaded) {\n            schema.extend('imageBlock', { allowAttributes: 'imageStyle' });\n            // Converter for figure element from view to model.\n            editor.data.upcastDispatcher.on('element:figure', viewToModelConverter, { priority: 'low' });\n        }\n        if (isInlinePluginLoaded) {\n            schema.extend('imageInline', { allowAttributes: 'imageStyle' });\n            // Converter for the img element from view to model.\n            editor.data.upcastDispatcher.on('element:img', viewToModelConverter, { priority: 'low' });\n        }\n    }\n    /**\n     * Registers a post-fixer that will make sure that the style attribute value is correct for a specific image type (block vs inline).\n     */\n    _setupPostFixer() {\n        const editor = this.editor;\n        const document = editor.model.document;\n        const imageUtils = editor.plugins.get(ImageUtils);\n        const stylesMap = new Map(this.normalizedStyles.map(style => [style.name, style]));\n        // Make sure that style attribute is valid for the image type.\n        document.registerPostFixer(writer => {\n            let changed = false;\n            for (const change of document.differ.getChanges()) {\n                if (change.type == 'insert' || change.type == 'attribute' && change.attributeKey == 'imageStyle') {\n                    let element = change.type == 'insert' ? change.position.nodeAfter : change.range.start.nodeAfter;\n                    if (element && element.is('element', 'paragraph') && element.childCount > 0) {\n                        element = element.getChild(0);\n                    }\n                    if (!imageUtils.isImage(element)) {\n                        continue;\n                    }\n                    const imageStyle = element.getAttribute('imageStyle');\n                    if (!imageStyle) {\n                        continue;\n                    }\n                    const imageStyleDefinition = stylesMap.get(imageStyle);\n                    if (!imageStyleDefinition || !imageStyleDefinition.modelElements.includes(element.name)) {\n                        writer.removeAttribute('imageStyle', element);\n                        changed = true;\n                    }\n                }\n            }\n            return changed;\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagestyle/imagestyleui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, createDropdown, addToolbarToDropdown, SplitButtonView } from 'ckeditor5/src/ui.js';\nimport { isObject, identity } from 'lodash-es';\nimport ImageStyleEditing from './imagestyleediting.js';\nimport utils from './utils.js';\nimport '../../theme/imagestyle.css';\n/**\n * The image style UI plugin.\n *\n * It registers buttons corresponding to the {@link module:image/imageconfig~ImageConfig#styles} configuration.\n * It also registers the {@link module:image/imagestyle/utils#DEFAULT_DROPDOWN_DEFINITIONS default drop-downs} and the\n * custom drop-downs defined by the developer in the {@link module:image/imageconfig~ImageConfig#toolbar} configuration.\n */\nexport default class ImageStyleUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageStyleEditing];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageStyleUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * Returns the default localized style titles provided by the plugin.\n     *\n     * The following localized titles corresponding with\n     * {@link module:image/imagestyle/utils#DEFAULT_OPTIONS} are available:\n     *\n     * * `'Wrap text'`,\n     * * `'Break text'`,\n     * * `'In line'`,\n     * * `'Full size image'`,\n     * * `'Side image'`,\n     * * `'Left aligned image'`,\n     * * `'Centered image'`,\n     * * `'Right aligned image'`\n     */\n    get localizedDefaultStylesTitles() {\n        const t = this.editor.t;\n        return {\n            'Wrap text': t('Wrap text'),\n            'Break text': t('Break text'),\n            'In line': t('In line'),\n            'Full size image': t('Full size image'),\n            'Side image': t('Side image'),\n            'Left aligned image': t('Left aligned image'),\n            'Centered image': t('Centered image'),\n            'Right aligned image': t('Right aligned image')\n        };\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const plugins = this.editor.plugins;\n        const toolbarConfig = this.editor.config.get('image.toolbar') || [];\n        const imageStyleEditing = plugins.get('ImageStyleEditing');\n        const definedStyles = translateStyles(imageStyleEditing.normalizedStyles, this.localizedDefaultStylesTitles);\n        for (const styleConfig of definedStyles) {\n            this._createButton(styleConfig);\n        }\n        const definedDropdowns = translateStyles([\n            ...toolbarConfig.filter(isObject),\n            ...utils.getDefaultDropdownDefinitions(plugins)\n        ], this.localizedDefaultStylesTitles);\n        for (const dropdownConfig of definedDropdowns) {\n            this._createDropdown(dropdownConfig, definedStyles);\n        }\n    }\n    /**\n     * Creates a dropdown and stores it in the editor {@link module:ui/componentfactory~ComponentFactory}.\n     */\n    _createDropdown(dropdownConfig, definedStyles) {\n        const factory = this.editor.ui.componentFactory;\n        factory.add(dropdownConfig.name, locale => {\n            let defaultButton;\n            const { defaultItem, items, title } = dropdownConfig;\n            const buttonViews = items\n                .filter(itemName => definedStyles.find(({ name }) => getUIComponentName(name) === itemName))\n                .map(buttonName => {\n                const button = factory.create(buttonName);\n                if (buttonName === defaultItem) {\n                    defaultButton = button;\n                }\n                return button;\n            });\n            if (items.length !== buttonViews.length) {\n                utils.warnInvalidStyle({ dropdown: dropdownConfig });\n            }\n            const dropdownView = createDropdown(locale, SplitButtonView);\n            const splitButtonView = dropdownView.buttonView;\n            const splitButtonViewArrow = splitButtonView.arrowView;\n            addToolbarToDropdown(dropdownView, buttonViews, { enableActiveItemFocusOnDropdownOpen: true });\n            splitButtonView.set({\n                label: getDropdownButtonTitle(title, defaultButton.label),\n                class: null,\n                tooltip: true\n            });\n            splitButtonViewArrow.unbind('label');\n            splitButtonViewArrow.set({\n                label: title\n            });\n            splitButtonView.bind('icon').toMany(buttonViews, 'isOn', (...areOn) => {\n                const index = areOn.findIndex(identity);\n                return (index < 0) ? defaultButton.icon : buttonViews[index].icon;\n            });\n            splitButtonView.bind('label').toMany(buttonViews, 'isOn', (...areOn) => {\n                const index = areOn.findIndex(identity);\n                return getDropdownButtonTitle(title, (index < 0) ? defaultButton.label : buttonViews[index].label);\n            });\n            splitButtonView.bind('isOn').toMany(buttonViews, 'isOn', (...areOn) => areOn.some(identity));\n            splitButtonView.bind('class')\n                .toMany(buttonViews, 'isOn', (...areOn) => areOn.some(identity) ? 'ck-splitbutton_flatten' : undefined);\n            splitButtonView.on('execute', () => {\n                if (!buttonViews.some(({ isOn }) => isOn)) {\n                    defaultButton.fire('execute');\n                }\n                else {\n                    dropdownView.isOpen = !dropdownView.isOpen;\n                }\n            });\n            dropdownView.bind('isEnabled')\n                .toMany(buttonViews, 'isEnabled', (...areEnabled) => areEnabled.some(identity));\n            // Focus the editable after executing the command.\n            // Overrides a default behaviour where the focus is moved to the dropdown button (#12125).\n            this.listenTo(dropdownView, 'execute', () => {\n                this.editor.editing.view.focus();\n            });\n            return dropdownView;\n        });\n    }\n    /**\n     * Creates a button and stores it in the editor {@link module:ui/componentfactory~ComponentFactory}.\n     */\n    _createButton(buttonConfig) {\n        const buttonName = buttonConfig.name;\n        this.editor.ui.componentFactory.add(getUIComponentName(buttonName), locale => {\n            const command = this.editor.commands.get('imageStyle');\n            const view = new ButtonView(locale);\n            view.set({\n                label: buttonConfig.title,\n                icon: buttonConfig.icon,\n                tooltip: true,\n                isToggleable: true\n            });\n            view.bind('isEnabled').to(command, 'isEnabled');\n            view.bind('isOn').to(command, 'value', value => value === buttonName);\n            view.on('execute', this._executeCommand.bind(this, buttonName));\n            return view;\n        });\n    }\n    _executeCommand(name) {\n        this.editor.execute('imageStyle', { value: name });\n        this.editor.editing.view.focus();\n    }\n}\n/**\n * Returns the translated `title` from the passed styles array.\n */\nfunction translateStyles(styles, titles) {\n    for (const style of styles) {\n        // Localize the titles of the styles, if a title corresponds with\n        // a localized default provided by the plugin.\n        if (titles[style.title]) {\n            style.title = titles[style.title];\n        }\n    }\n    return styles;\n}\n/**\n * Returns the image style component name with the \"imageStyle:\" prefix.\n */\nfunction getUIComponentName(name) {\n    return `imageStyle:${name}`;\n}\n/**\n * Returns title for the splitbutton containing the dropdown title and default action item title.\n */\nfunction getDropdownButtonTitle(dropdownTitle, buttonTitle) {\n    return (dropdownTitle ? dropdownTitle + ': ' : '') + buttonTitle;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { global } from 'ckeditor5/src/utils.js';\n/**\n * Creates a regular expression used to test for image files.\n *\n * ```ts\n * const imageType = createImageTypeRegExp( [ 'png', 'jpeg', 'svg+xml', 'vnd.microsoft.icon' ] );\n *\n * console.log( 'is supported image', imageType.test( file.type ) );\n * ```\n */\nexport function createImageTypeRegExp(types) {\n    // Sanitize the MIME type name which may include: \"+\", \"-\" or \".\".\n    const regExpSafeNames = types.map(type => type.replace('+', '\\\\+'));\n    return new RegExp(`^image\\\\/(${regExpSafeNames.join('|')})$`);\n}\n/**\n * Creates a promise that fetches the image local source (Base64 or blob) and resolves with a `File` object.\n *\n * @param image Image whose source to fetch.\n * @returns A promise which resolves when an image source is fetched and converted to a `File` instance.\n * It resolves with a `File` object. If there were any errors during file processing, the promise will be rejected.\n */\nexport function fetchLocalImage(image) {\n    return new Promise((resolve, reject) => {\n        const imageSrc = image.getAttribute('src');\n        // Fetch works asynchronously and so does not block browser UI when processing data.\n        fetch(imageSrc)\n            .then(resource => resource.blob())\n            .then(blob => {\n            const mimeType = getImageMimeType(blob, imageSrc);\n            const ext = mimeType.replace('image/', '');\n            const filename = `image.${ext}`;\n            const file = new File([blob], filename, { type: mimeType });\n            resolve(file);\n        })\n            .catch(err => {\n            // Fetch fails only, if it can't make a request due to a network failure or if anything prevented the request\n            // from completing, i.e. the Content Security Policy rules. It is not possible to detect the exact cause of failure,\n            // so we are just trying the fallback solution, if general TypeError is thrown.\n            return err && err.name === 'TypeError' ?\n                convertLocalImageOnCanvas(imageSrc).then(resolve).catch(reject) :\n                reject(err);\n        });\n    });\n}\n/**\n * Checks whether a given node is an image element with a local source (Base64 or blob).\n *\n * @param node The node to check.\n */\nexport function isLocalImage(imageUtils, node) {\n    if (!imageUtils.isInlineImageView(node) || !node.getAttribute('src')) {\n        return false;\n    }\n    return !!node.getAttribute('src').match(/^data:image\\/\\w+;base64,/g) ||\n        !!node.getAttribute('src').match(/^blob:/g);\n}\n/**\n * Extracts an image type based on its blob representation or its source.\n * @param blob Image blob representation.\n * @param src Image `src` attribute value.\n */\nfunction getImageMimeType(blob, src) {\n    if (blob.type) {\n        return blob.type;\n    }\n    else if (src.match(/data:(image\\/\\w+);base64/)) {\n        return src.match(/data:(image\\/\\w+);base64/)[1].toLowerCase();\n    }\n    else {\n        // Fallback to 'jpeg' as common extension.\n        return 'image/jpeg';\n    }\n}\n/**\n * Creates a promise that converts the image local source (Base64 or blob) to a blob using canvas and resolves\n * with a `File` object.\n * @param imageSrc Image `src` attribute value.\n * @returns A promise which resolves when an image source is converted to a `File` instance.\n * It resolves with a `File` object. If there were any errors during file processing, the promise will be rejected.\n */\nfunction convertLocalImageOnCanvas(imageSrc) {\n    return getBlobFromCanvas(imageSrc).then(blob => {\n        const mimeType = getImageMimeType(blob, imageSrc);\n        const ext = mimeType.replace('image/', '');\n        const filename = `image.${ext}`;\n        return new File([blob], filename, { type: mimeType });\n    });\n}\n/**\n * Creates a promise that resolves with a `Blob` object converted from the image source (Base64 or blob).\n * @param imageSrc Image `src` attribute value.\n */\nfunction getBlobFromCanvas(imageSrc) {\n    return new Promise((resolve, reject) => {\n        const image = global.document.createElement('img');\n        image.addEventListener('load', () => {\n            const canvas = global.document.createElement('canvas');\n            canvas.width = image.width;\n            canvas.height = image.height;\n            const ctx = canvas.getContext('2d');\n            ctx.drawImage(image, 0, 0);\n            canvas.toBlob(blob => blob ? resolve(blob) : reject());\n        });\n        image.addEventListener('error', () => reject());\n        image.src = imageSrc;\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageupload/imageuploadui\n */\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { FileDialogButtonView, MenuBarMenuListItemFileDialogButtonView } from 'ckeditor5/src/ui.js';\nimport { createImageTypeRegExp } from './utils.js';\n/**\n * The image upload button plugin.\n *\n * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature} documentation.\n *\n * Adds the `'uploadImage'` button to the {@link module:ui/componentfactory~ComponentFactory UI component factory}\n * and also the `imageUpload` button as an alias for backward compatibility.\n *\n * Adds the `'menuBar:uploadImage'` menu button to the {@link module:ui/componentfactory~ComponentFactory UI component factory}.\n *\n * It also integrates with the `insertImage` toolbar component and `menuBar:insertImage` menu component, which are the default components\n * through which image upload is available.\n */\nexport default class ImageUploadUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageUploadUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        // Setup `uploadImage` button and add `imageUpload` button as an alias for backward compatibility.\n        editor.ui.componentFactory.add('uploadImage', () => this._createToolbarButton());\n        editor.ui.componentFactory.add('imageUpload', () => this._createToolbarButton());\n        editor.ui.componentFactory.add('menuBar:uploadImage', () => this._createMenuBarButton('standalone'));\n        if (editor.plugins.has('ImageInsertUI')) {\n            editor.plugins.get('ImageInsertUI').registerIntegration({\n                name: 'upload',\n                observable: () => editor.commands.get('uploadImage'),\n                buttonViewCreator: () => this._createToolbarButton(),\n                formViewCreator: () => this._createDropdownButton(),\n                menuBarButtonViewCreator: isOnly => this._createMenuBarButton(isOnly ? 'insertOnly' : 'insertNested')\n            });\n        }\n    }\n    /**\n     * Creates the base for various kinds of the button component provided by this feature.\n     */\n    _createButton(ButtonClass) {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const command = editor.commands.get('uploadImage');\n        const imageTypes = editor.config.get('image.upload.types');\n        const imageTypesRegExp = createImageTypeRegExp(imageTypes);\n        const view = new ButtonClass(editor.locale);\n        const t = locale.t;\n        view.set({\n            acceptedType: imageTypes.map(type => `image/${type}`).join(','),\n            allowMultipleFiles: true,\n            label: t('Upload from computer'),\n            icon: icons.imageUpload\n        });\n        view.bind('isEnabled').to(command);\n        view.on('done', (evt, files) => {\n            const imagesToUpload = Array.from(files).filter(file => imageTypesRegExp.test(file.type));\n            if (imagesToUpload.length) {\n                editor.execute('uploadImage', { file: imagesToUpload });\n                editor.editing.view.focus();\n            }\n        });\n        return view;\n    }\n    /**\n     * Creates a simple toolbar button, with an icon and a tooltip.\n     */\n    _createToolbarButton() {\n        const t = this.editor.locale.t;\n        const imageInsertUI = this.editor.plugins.get('ImageInsertUI');\n        const uploadImageCommand = this.editor.commands.get('uploadImage');\n        const button = this._createButton(FileDialogButtonView);\n        button.tooltip = true;\n        button.bind('label').to(imageInsertUI, 'isImageSelected', uploadImageCommand, 'isAccessAllowed', (isImageSelected, isAccessAllowed) => {\n            if (!isAccessAllowed) {\n                return t('You have no image upload permissions.');\n            }\n            return isImageSelected ? t('Replace image from computer') : t('Upload image from computer');\n        });\n        return button;\n    }\n    /**\n     * Creates a button for the dropdown view, with an icon, text and no tooltip.\n     */\n    _createDropdownButton() {\n        const t = this.editor.locale.t;\n        const imageInsertUI = this.editor.plugins.get('ImageInsertUI');\n        const button = this._createButton(FileDialogButtonView);\n        button.withText = true;\n        button.bind('label').to(imageInsertUI, 'isImageSelected', isImageSelected => isImageSelected ? t('Replace from computer') : t('Upload from computer'));\n        button.on('execute', () => {\n            imageInsertUI.dropdownView.isOpen = false;\n        });\n        return button;\n    }\n    /**\n     * Creates a button for the menu bar.\n     */\n    _createMenuBarButton(type) {\n        const t = this.editor.locale.t;\n        const button = this._createButton(MenuBarMenuListItemFileDialogButtonView);\n        button.withText = true;\n        switch (type) {\n            case 'standalone':\n                button.label = t('Image from computer');\n                break;\n            case 'insertOnly':\n                button.label = t('Image');\n                break;\n            case 'insertNested':\n                button.label = t('From computer');\n                break;\n        }\n        return button;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module upload/filereader\n */\n/* globals window */\nimport { ObservableMixin } from '@ckeditor/ckeditor5-utils';\n/**\n * Wrapper over the native `FileReader`.\n */\nexport default class FileReader extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates an instance of the FileReader.\n     */\n    constructor() {\n        super();\n        const reader = new window.FileReader();\n        this._reader = reader;\n        this._data = undefined;\n        this.set('loaded', 0);\n        reader.onprogress = evt => {\n            this.loaded = evt.loaded;\n        };\n    }\n    /**\n     * Returns error that occurred during file reading.\n     */\n    get error() {\n        return this._reader.error;\n    }\n    /**\n     * Holds the data of an already loaded file. The file must be first loaded\n     * by using {@link module:upload/filereader~FileReader#read `read()`}.\n     */\n    get data() {\n        return this._data;\n    }\n    /**\n     * Reads the provided file.\n     *\n     * @param file Native File object.\n     * @returns Returns a promise that will be resolved with file's content.\n     * The promise will be rejected in case of an error or when the reading process is aborted.\n     */\n    read(file) {\n        const reader = this._reader;\n        this.total = file.size;\n        return new Promise((resolve, reject) => {\n            reader.onload = () => {\n                const result = reader.result;\n                this._data = result;\n                resolve(result);\n            };\n            reader.onerror = () => {\n                reject('error');\n            };\n            reader.onabort = () => {\n                reject('aborted');\n            };\n            this._reader.readAsDataURL(file);\n        });\n    }\n    /**\n     * Aborts file reader.\n     */\n    abort() {\n        this._reader.abort();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module upload/filerepository\n */\nimport { Plugin, PendingActions } from '@ckeditor/ckeditor5-core';\nimport { CKEditorError, Collection, ObservableMixin, logWarning, uid } from '@ckeditor/ckeditor5-utils';\nimport FileReader from './filereader.js';\n/**\n * File repository plugin. A central point for managing file upload.\n *\n * To use it, first you need an upload adapter. Upload adapter's job is to handle communication with the server\n * (sending the file and handling server's response). You can use one of the existing plugins introducing upload adapters\n * (e.g. {@link module:easy-image/cloudservicesuploadadapter~CloudServicesUploadAdapter} or\n * {@link module:adapter-ckfinder/uploadadapter~CKFinderUploadAdapter}) or write your own one – see\n * the {@glink framework/deep-dive/upload-adapter Custom image upload adapter deep-dive} guide.\n *\n * Then, you can use {@link module:upload/filerepository~FileRepository#createLoader `createLoader()`} and the returned\n * {@link module:upload/filerepository~FileLoader} instance to load and upload files.\n */\nexport default class FileRepository extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * Collection of loaders associated with this repository.\n         */\n        this.loaders = new Collection();\n        /**\n         * Loaders mappings used to retrieve loaders references.\n         */\n        this._loadersMap = new Map();\n        /**\n         * Reference to a pending action registered in a {@link module:core/pendingactions~PendingActions} plugin\n         * while upload is in progress. When there is no upload then value is `null`.\n         */\n        this._pendingAction = null;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'FileRepository';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [PendingActions];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        // Keeps upload in a sync with pending actions.\n        this.loaders.on('change', () => this._updatePendingAction());\n        this.set('uploaded', 0);\n        this.set('uploadTotal', null);\n        this.bind('uploadedPercent').to(this, 'uploaded', this, 'uploadTotal', (uploaded, total) => {\n            return total ? (uploaded / total * 100) : 0;\n        });\n    }\n    /**\n     * Returns the loader associated with specified file or promise.\n     *\n     * To get loader by id use `fileRepository.loaders.get( id )`.\n     *\n     * @param fileOrPromise Native file or promise handle.\n     */\n    getLoader(fileOrPromise) {\n        return this._loadersMap.get(fileOrPromise) || null;\n    }\n    /**\n     * Creates a loader instance for the given file.\n     *\n     * Requires {@link #createUploadAdapter} factory to be defined.\n     *\n     * @param fileOrPromise Native File object or native Promise object which resolves to a File.\n     */\n    createLoader(fileOrPromise) {\n        if (!this.createUploadAdapter) {\n            /**\n             * You need to enable an upload adapter in order to be able to upload files.\n             *\n             * This warning shows up when {@link module:upload/filerepository~FileRepository} is being used\n             * without {@link module:upload/filerepository~FileRepository#createUploadAdapter defining an upload adapter}.\n             *\n             * **If you see this warning when using one of the {@glink getting-started/legacy/installation-methods/predefined-builds\n             * CKEditor 5 Builds}**\n             * it means that you did not configure any of the upload adapters available by default in those builds.\n             *\n             * Predefined builds are a deprecated solution and we strongly advise\n             * {@glink updating/nim-migration/migration-to-new-installation-methods migrating to new installation methods}.\n             *\n             * See the {@glink features/images/image-upload/image-upload comprehensive \"Image upload overview\"} to learn which upload\n             * adapters are available in the builds and how to configure them.\n             *\n             * Otherwise, if you see this warning, there is a chance that you enabled\n             * a feature like {@link module:image/imageupload~ImageUpload},\n             * or {@link module:image/imageupload/imageuploadui~ImageUploadUI} but you did not enable any upload adapter.\n             * You can choose one of the existing upload adapters listed in the\n             * {@glink features/images/image-upload/image-upload \"Image upload overview\"}.\n             *\n             * You can also implement your {@glink framework/deep-dive/upload-adapter own image upload adapter}.\n             *\n             * @error filerepository-no-upload-adapter\n             */\n            logWarning('filerepository-no-upload-adapter');\n            return null;\n        }\n        const loader = new FileLoader(Promise.resolve(fileOrPromise), this.createUploadAdapter);\n        this.loaders.add(loader);\n        this._loadersMap.set(fileOrPromise, loader);\n        // Store also file => loader mapping so loader can be retrieved by file instance returned upon Promise resolution.\n        if (fileOrPromise instanceof Promise) {\n            loader.file\n                .then(file => {\n                this._loadersMap.set(file, loader);\n            })\n                // Every then() must have a catch().\n                // File loader state (and rejections) are handled in read() and upload().\n                // Also, see the \"does not swallow the file promise rejection\" test.\n                .catch(() => { });\n        }\n        loader.on('change:uploaded', () => {\n            let aggregatedUploaded = 0;\n            for (const loader of this.loaders) {\n                aggregatedUploaded += loader.uploaded;\n            }\n            this.uploaded = aggregatedUploaded;\n        });\n        loader.on('change:uploadTotal', () => {\n            let aggregatedTotal = 0;\n            for (const loader of this.loaders) {\n                if (loader.uploadTotal) {\n                    aggregatedTotal += loader.uploadTotal;\n                }\n            }\n            this.uploadTotal = aggregatedTotal;\n        });\n        return loader;\n    }\n    /**\n     * Destroys the given loader.\n     *\n     * @param fileOrPromiseOrLoader File or Promise associated with that loader or loader itself.\n     */\n    destroyLoader(fileOrPromiseOrLoader) {\n        const loader = fileOrPromiseOrLoader instanceof FileLoader ? fileOrPromiseOrLoader : this.getLoader(fileOrPromiseOrLoader);\n        loader._destroy();\n        this.loaders.remove(loader);\n        this._loadersMap.forEach((value, key) => {\n            if (value === loader) {\n                this._loadersMap.delete(key);\n            }\n        });\n    }\n    /**\n     * Registers or deregisters pending action bound with upload progress.\n     */\n    _updatePendingAction() {\n        const pendingActions = this.editor.plugins.get(PendingActions);\n        if (this.loaders.length) {\n            if (!this._pendingAction) {\n                const t = this.editor.t;\n                const getMessage = (value) => `${t('Upload in progress')} ${parseInt(value)}%.`;\n                this._pendingAction = pendingActions.add(getMessage(this.uploadedPercent));\n                this._pendingAction.bind('message').to(this, 'uploadedPercent', getMessage);\n            }\n        }\n        else {\n            pendingActions.remove(this._pendingAction);\n            this._pendingAction = null;\n        }\n    }\n}\n/**\n * File loader class.\n *\n * It is used to control the process of reading the file and uploading it using the specified upload adapter.\n */\nclass FileLoader extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a new instance of `FileLoader`.\n     *\n     * @param filePromise A promise which resolves to a file instance.\n     * @param uploadAdapterCreator The function which returns {@link module:upload/filerepository~UploadAdapter} instance.\n     */\n    constructor(filePromise, uploadAdapterCreator) {\n        super();\n        this.id = uid();\n        this._filePromiseWrapper = this._createFilePromiseWrapper(filePromise);\n        this._adapter = uploadAdapterCreator(this);\n        this._reader = new FileReader();\n        this.set('status', 'idle');\n        this.set('uploaded', 0);\n        this.set('uploadTotal', null);\n        this.bind('uploadedPercent').to(this, 'uploaded', this, 'uploadTotal', (uploaded, total) => {\n            return total ? (uploaded / total * 100) : 0;\n        });\n        this.set('uploadResponse', null);\n    }\n    /**\n     * A `Promise` which resolves to a `File` instance associated with this file loader.\n     */\n    get file() {\n        if (!this._filePromiseWrapper) {\n            // Loader was destroyed, return promise which resolves to null.\n            return Promise.resolve(null);\n        }\n        else {\n            // The `this._filePromiseWrapper.promise` is chained and not simply returned to handle a case when:\n            //\n            //\t\t* The `loader.file.then( ... )` is called by external code (returned promise is pending).\n            //\t\t* Then `loader._destroy()` is called (call is synchronous) which destroys the `loader`.\n            //\t\t* Promise returned by the first `loader.file.then( ... )` call is resolved.\n            //\n            // Returning `this._filePromiseWrapper.promise` will still resolve to a `File` instance so there\n            // is an additional check needed in the chain to see if `loader` was destroyed in the meantime.\n            return this._filePromiseWrapper.promise.then(file => this._filePromiseWrapper ? file : null);\n        }\n    }\n    /**\n     * Returns the file data. To read its data, you need for first load the file\n     * by using the {@link module:upload/filerepository~FileLoader#read `read()`} method.\n     */\n    get data() {\n        return this._reader.data;\n    }\n    /**\n     * Reads file using {@link module:upload/filereader~FileReader}.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `filerepository-read-wrong-status` when status\n     * is different than `idle`.\n     *\n     * Example usage:\n     *\n     * ```ts\n     * fileLoader.read()\n     * \t.then( data => { ... } )\n     * \t.catch( err => {\n     * \t\tif ( err === 'aborted' ) {\n     * \t\t\tconsole.log( 'Reading aborted.' );\n     * \t\t} else {\n     * \t\t\tconsole.log( 'Reading error.', err );\n     * \t\t}\n     * \t} );\n     * ```\n     *\n     * @returns Returns promise that will be resolved with read data. Promise will be rejected if error\n     * occurs or if read process is aborted.\n     */\n    read() {\n        if (this.status != 'idle') {\n            /**\n             * You cannot call read if the status is different than idle.\n             *\n             * @error filerepository-read-wrong-status\n             */\n            throw new CKEditorError('filerepository-read-wrong-status', this);\n        }\n        this.status = 'reading';\n        return this.file\n            .then(file => this._reader.read(file))\n            .then(data => {\n            // Edge case: reader was aborted after file was read - double check for proper status.\n            // It can happen when image was deleted during its upload.\n            if (this.status !== 'reading') {\n                throw this.status;\n            }\n            this.status = 'idle';\n            return data;\n        })\n            .catch(err => {\n            if (err === 'aborted') {\n                this.status = 'aborted';\n                throw 'aborted';\n            }\n            this.status = 'error';\n            throw this._reader.error ? this._reader.error : err;\n        });\n    }\n    /**\n     * Reads file using the provided {@link module:upload/filerepository~UploadAdapter}.\n     *\n     * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `filerepository-upload-wrong-status` when status\n     * is different than `idle`.\n     * Example usage:\n     *\n     * ```ts\n     * fileLoader.upload()\n     * \t.then( data => { ... } )\n     * \t.catch( e => {\n     * \t\tif ( e === 'aborted' ) {\n     * \t\t\tconsole.log( 'Uploading aborted.' );\n     * \t\t} else {\n     * \t\t\tconsole.log( 'Uploading error.', e );\n     * \t\t}\n     * \t} );\n     * ```\n     *\n     * @returns Returns promise that will be resolved with response data. Promise will be rejected if error\n     * occurs or if read process is aborted.\n     */\n    upload() {\n        if (this.status != 'idle') {\n            /**\n             * You cannot call upload if the status is different than idle.\n             *\n             * @error filerepository-upload-wrong-status\n             */\n            throw new CKEditorError('filerepository-upload-wrong-status', this);\n        }\n        this.status = 'uploading';\n        return this.file\n            .then(() => this._adapter.upload())\n            .then(data => {\n            this.uploadResponse = data;\n            this.status = 'idle';\n            return data;\n        })\n            .catch(err => {\n            if (this.status === 'aborted') {\n                throw 'aborted';\n            }\n            this.status = 'error';\n            throw err;\n        });\n    }\n    /**\n     * Aborts loading process.\n     */\n    abort() {\n        const status = this.status;\n        this.status = 'aborted';\n        if (!this._filePromiseWrapper.isFulfilled) {\n            // Edge case: file loader is aborted before read() is called\n            // so it might happen that no one handled the rejection of this promise.\n            // See https://github.com/ckeditor/ckeditor5-upload/pull/100\n            this._filePromiseWrapper.promise.catch(() => { });\n            this._filePromiseWrapper.rejecter('aborted');\n        }\n        else if (status == 'reading') {\n            this._reader.abort();\n        }\n        else if (status == 'uploading' && this._adapter.abort) {\n            this._adapter.abort();\n        }\n        this._destroy();\n    }\n    /**\n     * Performs cleanup.\n     *\n     * @internal\n     */\n    _destroy() {\n        this._filePromiseWrapper = undefined;\n        this._reader = undefined;\n        this._adapter = undefined;\n        this.uploadResponse = undefined;\n    }\n    /**\n     * Wraps a given file promise into another promise giving additional\n     * control (resolving, rejecting, checking if fulfilled) over it.\n     *\n     * @param filePromise The initial file promise to be wrapped.\n     */\n    _createFilePromiseWrapper(filePromise) {\n        const wrapper = {};\n        wrapper.promise = new Promise((resolve, reject) => {\n            wrapper.rejecter = reject;\n            wrapper.isFulfilled = false;\n            filePromise\n                .then(file => {\n                wrapper.isFulfilled = true;\n                resolve(file);\n            })\n                .catch(err => {\n                wrapper.isFulfilled = true;\n                reject(err);\n            });\n        });\n        return wrapper;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageupload/imageuploadprogress\n */\n/* globals setTimeout */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { FileRepository } from 'ckeditor5/src/upload.js';\nimport '../../theme/imageuploadprogress.css';\nimport '../../theme/imageuploadicon.css';\nimport '../../theme/imageuploadloader.css';\n/**\n * The image upload progress plugin.\n * It shows a placeholder when the image is read from the disk and a progress bar while the image is uploading.\n */\nexport default class ImageUploadProgress extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageUploadProgress';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        /**\n         * This method is called each time the image `uploadStatus` attribute is changed.\n         *\n         * @param evt An object containing information about the fired event.\n         * @param data Additional information about the change.\n         */\n        this.uploadStatusChange = (evt, data, conversionApi) => {\n            const editor = this.editor;\n            const modelImage = data.item;\n            const uploadId = modelImage.getAttribute('uploadId');\n            if (!conversionApi.consumable.consume(data.item, evt.name)) {\n                return;\n            }\n            const imageUtils = editor.plugins.get('ImageUtils');\n            const fileRepository = editor.plugins.get(FileRepository);\n            const status = uploadId ? data.attributeNewValue : null;\n            const placeholder = this.placeholder;\n            const viewFigure = editor.editing.mapper.toViewElement(modelImage);\n            const viewWriter = conversionApi.writer;\n            if (status == 'reading') {\n                // Start \"appearing\" effect and show placeholder with infinite progress bar on the top\n                // while image is read from disk.\n                _startAppearEffect(viewFigure, viewWriter);\n                _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);\n                return;\n            }\n            // Show progress bar on the top of the image when image is uploading.\n            if (status == 'uploading') {\n                const loader = fileRepository.loaders.get(uploadId);\n                // Start appear effect if needed - see https://github.com/ckeditor/ckeditor5-image/issues/191.\n                _startAppearEffect(viewFigure, viewWriter);\n                if (!loader) {\n                    // There is no loader associated with uploadId - this means that image came from external changes.\n                    // In such cases we still want to show the placeholder until image is fully uploaded.\n                    // Show placeholder if needed - see https://github.com/ckeditor/ckeditor5-image/issues/191.\n                    _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);\n                }\n                else {\n                    // Hide placeholder and initialize progress bar showing upload progress.\n                    _hidePlaceholder(viewFigure, viewWriter);\n                    _showProgressBar(viewFigure, viewWriter, loader, editor.editing.view);\n                    _displayLocalImage(imageUtils, viewFigure, viewWriter, loader);\n                }\n                return;\n            }\n            if (status == 'complete' && fileRepository.loaders.get(uploadId)) {\n                _showCompleteIcon(viewFigure, viewWriter, editor.editing.view);\n            }\n            // Clean up.\n            _hideProgressBar(viewFigure, viewWriter);\n            _hidePlaceholder(viewFigure, viewWriter);\n            _stopAppearEffect(viewFigure, viewWriter);\n        };\n        this.placeholder = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        // Upload status change - update image's view according to that status.\n        if (editor.plugins.has('ImageBlockEditing')) {\n            editor.editing.downcastDispatcher.on('attribute:uploadStatus:imageBlock', this.uploadStatusChange);\n        }\n        if (editor.plugins.has('ImageInlineEditing')) {\n            editor.editing.downcastDispatcher.on('attribute:uploadStatus:imageInline', this.uploadStatusChange);\n        }\n    }\n}\n/**\n * Adds ck-appear class to the image figure if one is not already applied.\n */\nfunction _startAppearEffect(viewFigure, writer) {\n    if (!viewFigure.hasClass('ck-appear')) {\n        writer.addClass('ck-appear', viewFigure);\n    }\n}\n/**\n * Removes ck-appear class to the image figure if one is not already removed.\n */\nfunction _stopAppearEffect(viewFigure, writer) {\n    writer.removeClass('ck-appear', viewFigure);\n}\n/**\n * Shows placeholder together with infinite progress bar on given image figure.\n */\nfunction _showPlaceholder(imageUtils, placeholder, viewFigure, writer) {\n    if (!viewFigure.hasClass('ck-image-upload-placeholder')) {\n        writer.addClass('ck-image-upload-placeholder', viewFigure);\n    }\n    const viewImg = imageUtils.findViewImgElement(viewFigure);\n    if (viewImg.getAttribute('src') !== placeholder) {\n        writer.setAttribute('src', placeholder, viewImg);\n    }\n    if (!_getUIElement(viewFigure, 'placeholder')) {\n        writer.insert(writer.createPositionAfter(viewImg), _createPlaceholder(writer));\n    }\n}\n/**\n * Removes placeholder together with infinite progress bar on given image figure.\n */\nfunction _hidePlaceholder(viewFigure, writer) {\n    if (viewFigure.hasClass('ck-image-upload-placeholder')) {\n        writer.removeClass('ck-image-upload-placeholder', viewFigure);\n    }\n    _removeUIElement(viewFigure, writer, 'placeholder');\n}\n/**\n * Shows progress bar displaying upload progress.\n * Attaches it to the file loader to update when upload percentace is changed.\n */\nfunction _showProgressBar(viewFigure, writer, loader, view) {\n    const progressBar = _createProgressBar(writer);\n    writer.insert(writer.createPositionAt(viewFigure, 'end'), progressBar);\n    // Update progress bar width when uploadedPercent is changed.\n    loader.on('change:uploadedPercent', (evt, name, value) => {\n        view.change(writer => {\n            writer.setStyle('width', value + '%', progressBar);\n        });\n    });\n}\n/**\n * Hides upload progress bar.\n */\nfunction _hideProgressBar(viewFigure, writer) {\n    _removeUIElement(viewFigure, writer, 'progressBar');\n}\n/**\n * Shows complete icon and hides after a certain amount of time.\n */\nfunction _showCompleteIcon(viewFigure, writer, view) {\n    const completeIcon = writer.createUIElement('div', { class: 'ck-image-upload-complete-icon' });\n    writer.insert(writer.createPositionAt(viewFigure, 'end'), completeIcon);\n    setTimeout(() => {\n        view.change(writer => writer.remove(writer.createRangeOn(completeIcon)));\n    }, 3000);\n}\n/**\n * Create progress bar element using {@link module:engine/view/uielement~UIElement}.\n */\nfunction _createProgressBar(writer) {\n    const progressBar = writer.createUIElement('div', { class: 'ck-progress-bar' });\n    writer.setCustomProperty('progressBar', true, progressBar);\n    return progressBar;\n}\n/**\n * Create placeholder element using {@link module:engine/view/uielement~UIElement}.\n */\nfunction _createPlaceholder(writer) {\n    const placeholder = writer.createUIElement('div', { class: 'ck-upload-placeholder-loader' });\n    writer.setCustomProperty('placeholder', true, placeholder);\n    return placeholder;\n}\n/**\n * Returns {@link module:engine/view/uielement~UIElement} of given unique property from image figure element.\n * Returns `undefined` if element is not found.\n */\nfunction _getUIElement(imageFigure, uniqueProperty) {\n    for (const child of imageFigure.getChildren()) {\n        if (child.getCustomProperty(uniqueProperty)) {\n            return child;\n        }\n    }\n}\n/**\n * Removes {@link module:engine/view/uielement~UIElement} of given unique property from image figure element.\n */\nfunction _removeUIElement(viewFigure, writer, uniqueProperty) {\n    const element = _getUIElement(viewFigure, uniqueProperty);\n    if (element) {\n        writer.remove(writer.createRangeOn(element));\n    }\n}\n/**\n * Displays local data from file loader.\n */\nfunction _displayLocalImage(imageUtils, viewFigure, writer, loader) {\n    if (loader.data) {\n        const viewImg = imageUtils.findViewImgElement(viewFigure);\n        writer.setAttribute('src', loader.data, viewImg);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { FileRepository } from 'ckeditor5/src/upload.js';\nimport { Command } from 'ckeditor5/src/core.js';\nimport { toArray } from 'ckeditor5/src/utils.js';\n/**\n * @module image/imageupload/uploadimagecommand\n */\n/**\n * The upload image command.\n *\n * The command is registered by the {@link module:image/imageupload/imageuploadediting~ImageUploadEditing} plugin as `uploadImage`\n * and it is also available via aliased `imageUpload` name.\n *\n * In order to upload an image at the current selection position\n * (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),\n * execute the command and pass the native image file instance:\n *\n * ```ts\n * this.listenTo( editor.editing.view.document, 'clipboardInput', ( evt, data ) => {\n * \t// Assuming that only images were pasted:\n * \tconst images = Array.from( data.dataTransfer.files );\n *\n * \t// Upload the first image:\n * \teditor.execute( 'uploadImage', { file: images[ 0 ] } );\n * } );\n * ```\n *\n * It is also possible to insert multiple images at once:\n *\n * ```ts\n * editor.execute( 'uploadImage', {\n * \tfile: [\n * \t\tfile1,\n * \t\tfile2\n * \t]\n * } );\n * ```\n */\nexport default class UploadImageCommand extends Command {\n    /**\n     * Creates an instance of the `imageUlpoad` command. When executed, the command upload one of\n     * the currently selected image from computer.\n     *\n     * @param editor The editor instance.\n     */\n    constructor(editor) {\n        super(editor);\n        this.set('isAccessAllowed', true);\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const selectedElement = editor.model.document.selection.getSelectedElement();\n        // TODO: This needs refactoring.\n        this.isEnabled = imageUtils.isImageAllowed() || imageUtils.isImage(selectedElement);\n    }\n    /**\n     * Executes the command.\n     *\n     * @fires execute\n     * @param options Options for the executed command.\n     * @param options.file The image file or an array of image files to upload.\n     */\n    execute(options) {\n        const files = toArray(options.file);\n        const selection = this.editor.model.document.selection;\n        const imageUtils = this.editor.plugins.get('ImageUtils');\n        // In case of multiple files, each file (starting from the 2nd) will be inserted at a position that\n        // follows the previous one. That will move the selection and, to stay on the safe side and make sure\n        // all images inherit the same selection attributes, they are collected beforehand.\n        //\n        // Applying these attributes ensures, for instance, that inserting an (inline) image into a link does\n        // not split that link but preserves its continuity.\n        //\n        // Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.\n        const selectionAttributes = Object.fromEntries(selection.getAttributes());\n        files.forEach((file, index) => {\n            const selectedElement = selection.getSelectedElement();\n            // Inserting of an inline image replace the selected element and make a selection on the inserted image.\n            // Therefore inserting multiple inline images requires creating position after each element.\n            if (index && selectedElement && imageUtils.isImage(selectedElement)) {\n                const position = this.editor.model.createPositionAfter(selectedElement);\n                this._uploadImage(file, selectionAttributes, position);\n            }\n            else {\n                this._uploadImage(file, selectionAttributes);\n            }\n        });\n    }\n    /**\n     * Handles uploading single file.\n     */\n    _uploadImage(file, attributes, position) {\n        const editor = this.editor;\n        const fileRepository = editor.plugins.get(FileRepository);\n        const loader = fileRepository.createLoader(file);\n        const imageUtils = editor.plugins.get('ImageUtils');\n        // Do not throw when upload adapter is not set. FileRepository will log an error anyway.\n        if (!loader) {\n            return;\n        }\n        imageUtils.insertImage({ ...attributes, uploadId: loader.id }, position);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageupload/imageuploadediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { Notification } from 'ckeditor5/src/ui.js';\nimport { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';\nimport { FileRepository } from 'ckeditor5/src/upload.js';\nimport { env } from 'ckeditor5/src/utils.js';\nimport ImageUtils from '../imageutils.js';\nimport UploadImageCommand from './uploadimagecommand.js';\nimport { fetchLocalImage, isLocalImage } from '../../src/imageupload/utils.js';\nimport { createImageTypeRegExp } from './utils.js';\n/**\n * The editing part of the image upload feature. It registers the `'uploadImage'` command\n * and the `imageUpload` command as an aliased name.\n *\n * When an image is uploaded, it fires the {@link ~ImageUploadEditing#event:uploadComplete `uploadComplete`} event\n * that allows adding custom attributes to the {@link module:engine/model/element~Element image element}.\n */\nexport default class ImageUploadEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [FileRepository, Notification, ClipboardPipeline, ImageUtils];\n    }\n    static get pluginName() {\n        return 'ImageUploadEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('image', {\n            upload: {\n                types: ['jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff']\n            }\n        });\n        this._uploadImageElements = new Map();\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const doc = editor.model.document;\n        const conversion = editor.conversion;\n        const fileRepository = editor.plugins.get(FileRepository);\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const clipboardPipeline = editor.plugins.get('ClipboardPipeline');\n        const imageTypes = createImageTypeRegExp(editor.config.get('image.upload.types'));\n        const uploadImageCommand = new UploadImageCommand(editor);\n        // Register `uploadImage` command and add `imageUpload` command as an alias for backward compatibility.\n        editor.commands.add('uploadImage', uploadImageCommand);\n        editor.commands.add('imageUpload', uploadImageCommand);\n        // Register upcast converter for uploadId.\n        conversion.for('upcast')\n            .attributeToAttribute({\n            view: {\n                name: 'img',\n                key: 'uploadId'\n            },\n            model: 'uploadId'\n        });\n        // Handle pasted images.\n        // For every image file, a new file loader is created and a placeholder image is\n        // inserted into the content. Then, those images are uploaded once they appear in the model\n        // (see Document#change listener below).\n        this.listenTo(editor.editing.view.document, 'clipboardInput', (evt, data) => {\n            // Skip if non empty HTML data is included.\n            // https://github.com/ckeditor/ckeditor5-upload/issues/68\n            if (isHtmlIncluded(data.dataTransfer)) {\n                return;\n            }\n            const images = Array.from(data.dataTransfer.files).filter(file => {\n                // See https://github.com/ckeditor/ckeditor5-image/pull/254.\n                if (!file) {\n                    return false;\n                }\n                return imageTypes.test(file.type);\n            });\n            if (!images.length) {\n                return;\n            }\n            evt.stop();\n            editor.model.change(writer => {\n                // Set selection to paste target.\n                if (data.targetRanges) {\n                    writer.setSelection(data.targetRanges.map(viewRange => editor.editing.mapper.toModelRange(viewRange)));\n                }\n                editor.execute('uploadImage', { file: images });\n            });\n            const uploadImageCommand = editor.commands.get('uploadImage');\n            if (!uploadImageCommand.isAccessAllowed) {\n                const notification = editor.plugins.get('Notification');\n                const t = editor.locale.t;\n                // eslint-disable-next-line max-len\n                notification.showWarning(t('You have no image upload permissions.'), {\n                    namespace: 'image'\n                });\n            }\n        });\n        // Handle HTML pasted with images with base64 or blob sources.\n        // For every image file, a new file loader is created and a placeholder image is\n        // inserted into the content. Then, those images are uploaded once they appear in the model\n        // (see Document#change listener below).\n        this.listenTo(clipboardPipeline, 'inputTransformation', (evt, data) => {\n            const fetchableImages = Array.from(editor.editing.view.createRangeIn(data.content))\n                .map(value => value.item)\n                .filter(viewElement => isLocalImage(imageUtils, viewElement) &&\n                !viewElement.getAttribute('uploadProcessed'))\n                .map(viewElement => { return { promise: fetchLocalImage(viewElement), imageElement: viewElement }; });\n            if (!fetchableImages.length) {\n                return;\n            }\n            const writer = new UpcastWriter(editor.editing.view.document);\n            for (const fetchableImage of fetchableImages) {\n                // Set attribute marking that the image was processed already.\n                writer.setAttribute('uploadProcessed', true, fetchableImage.imageElement);\n                const loader = fileRepository.createLoader(fetchableImage.promise);\n                if (loader) {\n                    writer.setAttribute('src', '', fetchableImage.imageElement);\n                    writer.setAttribute('uploadId', loader.id, fetchableImage.imageElement);\n                }\n            }\n        });\n        // Prevents from the browser redirecting to the dropped image.\n        editor.editing.view.document.on('dragover', (evt, data) => {\n            data.preventDefault();\n        });\n        // Upload placeholder images that appeared in the model.\n        doc.on('change', () => {\n            // Note: Reversing changes to start with insertions and only then handle removals. If it was the other way around,\n            // loaders for **all** images that land in the $graveyard would abort while in fact only those that were **not** replaced\n            // by other images should be aborted.\n            const changes = doc.differ.getChanges({ includeChangesInGraveyard: true }).reverse();\n            const insertedImagesIds = new Set();\n            for (const entry of changes) {\n                if (entry.type == 'insert' && entry.name != '$text') {\n                    const item = entry.position.nodeAfter;\n                    const isInsertedInGraveyard = entry.position.root.rootName == '$graveyard';\n                    for (const imageElement of getImagesFromChangeItem(editor, item)) {\n                        // Check if the image element still has upload id.\n                        const uploadId = imageElement.getAttribute('uploadId');\n                        if (!uploadId) {\n                            continue;\n                        }\n                        // Check if the image is loaded on this client.\n                        const loader = fileRepository.loaders.get(uploadId);\n                        if (!loader) {\n                            continue;\n                        }\n                        if (isInsertedInGraveyard) {\n                            // If the image was inserted to the graveyard for good (**not** replaced by another image),\n                            // only then abort the loading process.\n                            if (!insertedImagesIds.has(uploadId)) {\n                                loader.abort();\n                            }\n                        }\n                        else {\n                            // Remember the upload id of the inserted image. If it acted as a replacement for another\n                            // image (which landed in the $graveyard), the related loader will not be aborted because\n                            // this is still the same image upload.\n                            insertedImagesIds.add(uploadId);\n                            // Keep the mapping between the upload ID and the image model element so the upload\n                            // can later resolve in the context of the correct model element. The model element could\n                            // change for the same upload if one image was replaced by another (e.g. image type was changed),\n                            // so this may also replace an existing mapping.\n                            this._uploadImageElements.set(uploadId, imageElement);\n                            if (loader.status == 'idle') {\n                                // If the image was inserted into content and has not been loaded yet, start loading it.\n                                this._readAndUpload(loader);\n                            }\n                        }\n                    }\n                }\n            }\n        });\n        // Set the default handler for feeding the image element with `src` and `srcset` attributes.\n        // Also set the natural `width` and `height` attributes (if not already set).\n        this.on('uploadComplete', (evt, { imageElement, data }) => {\n            const urls = data.urls ? data.urls : data;\n            this.editor.model.change(writer => {\n                writer.setAttribute('src', urls.default, imageElement);\n                this._parseAndSetSrcsetAttributeOnImage(urls, imageElement, writer);\n                imageUtils.setImageNaturalSizeAttributes(imageElement);\n            });\n        }, { priority: 'low' });\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        const schema = this.editor.model.schema;\n        // Setup schema to allow uploadId and uploadStatus for images.\n        // Wait for ImageBlockEditing or ImageInlineEditing to register their elements first,\n        // that's why doing this in afterInit() instead of init().\n        if (this.editor.plugins.has('ImageBlockEditing')) {\n            schema.extend('imageBlock', {\n                allowAttributes: ['uploadId', 'uploadStatus']\n            });\n        }\n        if (this.editor.plugins.has('ImageInlineEditing')) {\n            schema.extend('imageInline', {\n                allowAttributes: ['uploadId', 'uploadStatus']\n            });\n        }\n    }\n    /**\n     * Reads and uploads an image.\n     *\n     * The image is read from the disk and as a Base64-encoded string it is set temporarily to\n     * `image[src]`. When the image is successfully uploaded, the temporary data is replaced with the target\n     * image's URL (the URL to the uploaded image on the server).\n     */\n    _readAndUpload(loader) {\n        const editor = this.editor;\n        const model = editor.model;\n        const t = editor.locale.t;\n        const fileRepository = editor.plugins.get(FileRepository);\n        const notification = editor.plugins.get(Notification);\n        const imageUtils = editor.plugins.get('ImageUtils');\n        const imageUploadElements = this._uploadImageElements;\n        model.enqueueChange({ isUndoable: false }, writer => {\n            writer.setAttribute('uploadStatus', 'reading', imageUploadElements.get(loader.id));\n        });\n        return loader.read()\n            .then(() => {\n            const promise = loader.upload();\n            const imageElement = imageUploadElements.get(loader.id);\n            // Force re–paint in Safari. Without it, the image will display with a wrong size.\n            // https://github.com/ckeditor/ckeditor5/issues/1975\n            /* istanbul ignore next -- @preserve */\n            if (env.isSafari) {\n                const viewFigure = editor.editing.mapper.toViewElement(imageElement);\n                const viewImg = imageUtils.findViewImgElement(viewFigure);\n                editor.editing.view.once('render', () => {\n                    // Early returns just to be safe. There might be some code ran\n                    // in between the outer scope and this callback.\n                    if (!viewImg.parent) {\n                        return;\n                    }\n                    const domFigure = editor.editing.view.domConverter.mapViewToDom(viewImg.parent);\n                    if (!domFigure) {\n                        return;\n                    }\n                    const originalDisplay = domFigure.style.display;\n                    domFigure.style.display = 'none';\n                    // Make sure this line will never be removed during minification for having \"no effect\".\n                    domFigure._ckHack = domFigure.offsetHeight;\n                    domFigure.style.display = originalDisplay;\n                });\n            }\n            if (editor.ui) {\n                editor.ui.ariaLiveAnnouncer.announce(t('Uploading image'));\n            }\n            model.enqueueChange({ isUndoable: false }, writer => {\n                writer.setAttribute('uploadStatus', 'uploading', imageElement);\n            });\n            return promise;\n        })\n            .then(data => {\n            model.enqueueChange({ isUndoable: false }, writer => {\n                const imageElement = imageUploadElements.get(loader.id);\n                writer.setAttribute('uploadStatus', 'complete', imageElement);\n                if (editor.ui) {\n                    editor.ui.ariaLiveAnnouncer.announce(t('Image upload complete'));\n                }\n                this.fire('uploadComplete', { data, imageElement });\n            });\n            clean();\n        })\n            .catch(error => {\n            if (editor.ui) {\n                editor.ui.ariaLiveAnnouncer.announce(t('Error during image upload'));\n            }\n            // If status is not 'error' nor 'aborted' - throw error because it means that something else went wrong,\n            // it might be generic error and it would be real pain to find what is going on.\n            if (loader.status !== 'error' && loader.status !== 'aborted') {\n                throw error;\n            }\n            // Might be 'aborted'.\n            if (loader.status == 'error' && error) {\n                notification.showWarning(error, {\n                    title: t('Upload failed'),\n                    namespace: 'upload'\n                });\n            }\n            // Permanently remove image from insertion batch.\n            model.enqueueChange({ isUndoable: false }, writer => {\n                writer.remove(imageUploadElements.get(loader.id));\n            });\n            clean();\n        });\n        function clean() {\n            model.enqueueChange({ isUndoable: false }, writer => {\n                const imageElement = imageUploadElements.get(loader.id);\n                writer.removeAttribute('uploadId', imageElement);\n                writer.removeAttribute('uploadStatus', imageElement);\n                imageUploadElements.delete(loader.id);\n            });\n            fileRepository.destroyLoader(loader);\n        }\n    }\n    /**\n     * Creates the `srcset` attribute based on a given file upload response and sets it as an attribute to a specific image element.\n     *\n     * @param data Data object from which `srcset` will be created.\n     * @param image The image element on which the `srcset` attribute will be set.\n     */\n    _parseAndSetSrcsetAttributeOnImage(data, image, writer) {\n        // Srcset attribute for responsive images support.\n        let maxWidth = 0;\n        const srcsetAttribute = Object.keys(data)\n            // Filter out keys that are not integers.\n            .filter(key => {\n            const width = parseInt(key, 10);\n            if (!isNaN(width)) {\n                maxWidth = Math.max(maxWidth, width);\n                return true;\n            }\n        })\n            // Convert each key to srcset entry.\n            .map(key => `${data[key]} ${key}w`)\n            // Join all entries.\n            .join(', ');\n        if (srcsetAttribute != '') {\n            const attributes = {\n                srcset: srcsetAttribute\n            };\n            if (!image.hasAttribute('width') && !image.hasAttribute('height')) {\n                attributes.width = maxWidth;\n            }\n            writer.setAttributes(attributes, image);\n        }\n    }\n}\n/**\n * Returns `true` if non-empty `text/html` is included in the data transfer.\n */\nexport function isHtmlIncluded(dataTransfer) {\n    return Array.from(dataTransfer.types).includes('text/html') && dataTransfer.getData('text/html') !== '';\n}\nfunction getImagesFromChangeItem(editor, item) {\n    const imageUtils = editor.plugins.get('ImageUtils');\n    return Array.from(editor.model.createRangeOn(item))\n        .filter(value => imageUtils.isImage(value.item))\n        .map(value => value.item);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module indent/indentediting\n */\nimport { Plugin, MultiCommand } from 'ckeditor5/src/core.js';\n/**\n * The indent editing feature.\n *\n * This plugin registers the `'indent'` and `'outdent'` commands.\n *\n * **Note**: In order for the commands to work, at least one of the compatible features is required. Read more in the\n * {@link module:indent/indent~Indent indent feature} API documentation.\n */\nexport default class IndentEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'IndentEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        editor.commands.add('indent', new MultiCommand(editor));\n        editor.commands.add('outdent', new MultiCommand(editor));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module indent/indentui\n */\nimport { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { icons, Plugin } from 'ckeditor5/src/core.js';\n/**\n * The indent UI feature.\n *\n * This plugin registers the `'indent'` and `'outdent'` buttons.\n *\n * **Note**: In order for the commands to work, at least one of the compatible features is required. Read more in\n * the {@link module:indent/indent~Indent indent feature} API documentation.\n */\nexport default class IndentUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'IndentUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const t = editor.t;\n        const localizedIndentIcon = locale.uiLanguageDirection == 'ltr' ? icons.indent : icons.outdent;\n        const localizedOutdentIcon = locale.uiLanguageDirection == 'ltr' ? icons.outdent : icons.indent;\n        this._defineButton('indent', t('Increase indent'), localizedIndentIcon);\n        this._defineButton('outdent', t('Decrease indent'), localizedOutdentIcon);\n    }\n    /**\n     * Defines UI buttons for both toolbar and menu bar.\n     */\n    _defineButton(commandName, label, icon) {\n        const editor = this.editor;\n        editor.ui.componentFactory.add(commandName, () => {\n            const buttonView = this._createButton(ButtonView, commandName, label, icon);\n            buttonView.set({\n                tooltip: true\n            });\n            return buttonView;\n        });\n        editor.ui.componentFactory.add('menuBar:' + commandName, () => {\n            return this._createButton(MenuBarMenuListItemButtonView, commandName, label, icon);\n        });\n    }\n    /**\n     * Creates a button to use either in toolbar or in menu bar.\n     */\n    _createButton(ButtonClass, commandName, label, icon) {\n        const editor = this.editor;\n        const command = editor.commands.get(commandName);\n        const view = new ButtonClass(editor.locale);\n        view.set({\n            label,\n            icon\n        });\n        view.bind('isEnabled').to(command, 'isEnabled');\n        // Execute the command.\n        this.listenTo(view, 'execute', () => {\n            editor.execute(commandName);\n            editor.editing.view.focus();\n        });\n        return view;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module indent/indentblockcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { first } from 'ckeditor5/src/utils.js';\n/**\n * The indent block command.\n *\n * The command is registered by the {@link module:indent/indentblock~IndentBlock} as `'indentBlock'` for indenting blocks and\n * `'outdentBlock'` for outdenting blocks.\n *\n * To increase block indentation at the current selection, execute the command:\n *\n * ```ts\n * editor.execute( 'indentBlock' );\n * ```\n *\n * To decrease block indentation at the current selection, execute the command:\n *\n * ```ts\n * editor.execute( 'outdentBlock' );\n * ```\n */\nexport default class IndentBlockCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     */\n    constructor(editor, indentBehavior) {\n        super(editor);\n        this._indentBehavior = indentBehavior;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const model = editor.model;\n        const block = first(model.document.selection.getSelectedBlocks());\n        if (!block || !this._isIndentationChangeAllowed(block)) {\n            this.isEnabled = false;\n            return;\n        }\n        this.isEnabled = this._indentBehavior.checkEnabled(block.getAttribute('blockIndent'));\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const model = this.editor.model;\n        const blocksToChange = this._getBlocksToChange();\n        model.change(writer => {\n            for (const block of blocksToChange) {\n                const currentIndent = block.getAttribute('blockIndent');\n                const nextIndent = this._indentBehavior.getNextIndent(currentIndent);\n                if (nextIndent) {\n                    writer.setAttribute('blockIndent', nextIndent, block);\n                }\n                else {\n                    writer.removeAttribute('blockIndent', block);\n                }\n            }\n        });\n    }\n    /**\n     * Returns blocks from selection that should have blockIndent selection set.\n     */\n    _getBlocksToChange() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const blocksInSelection = Array.from(selection.getSelectedBlocks());\n        return blocksInSelection.filter(block => this._isIndentationChangeAllowed(block));\n    }\n    /**\n     * Returns false if indentation cannot be applied, i.e.:\n     * - for blocks disallowed by schema declaration\n     * - for blocks in Document Lists (disallowed forward indentation only). See https://github.com/ckeditor/ckeditor5/issues/14155.\n     * Otherwise returns true.\n     */\n    _isIndentationChangeAllowed(element) {\n        const editor = this.editor;\n        if (!editor.model.schema.checkAttribute(element, 'blockIndent')) {\n            return false;\n        }\n        if (!editor.plugins.has('ListUtils')) {\n            return true;\n        }\n        // Only forward indentation is disallowed in list items. This allows the user to outdent blocks that are already indented.\n        if (!this._indentBehavior.isForward) {\n            return true;\n        }\n        const documentListUtils = editor.plugins.get('ListUtils');\n        return !documentListUtils.isListItemBlock(element);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * The block indentation behavior that uses offsets to set indentation.\n */\nexport default class IndentUsingOffset {\n    /**\n     * Creates an instance of the indentation behavior.\n     *\n     * @param config.direction The direction of indentation.\n     * @param config.offset The offset of the next indentation step.\n     * @param config.unit Indentation unit.\n     */\n    constructor(config) {\n        this.isForward = config.direction === 'forward';\n        this.offset = config.offset;\n        this.unit = config.unit;\n    }\n    /**\n     * @inheritDoc\n     */\n    checkEnabled(indentAttributeValue) {\n        const currentOffset = parseFloat(indentAttributeValue || '0');\n        // The command is always enabled for forward indentation.\n        return this.isForward || currentOffset > 0;\n    }\n    /**\n     * @inheritDoc\n     */\n    getNextIndent(indentAttributeValue) {\n        const currentOffset = parseFloat(indentAttributeValue || '0');\n        const isSameUnit = !indentAttributeValue || indentAttributeValue.endsWith(this.unit);\n        if (!isSameUnit) {\n            return this.isForward ? this.offset + this.unit : undefined;\n        }\n        const nextOffset = this.isForward ? this.offset : -this.offset;\n        const offsetToSet = currentOffset + nextOffset;\n        return offsetToSet > 0 ? offsetToSet + this.unit : undefined;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * The block indentation behavior that uses classes to set indentation.\n */\nexport default class IndentUsingClasses {\n    /**\n     * Creates an instance of the indentation behavior.\n     *\n     * @param config.direction The direction of indentation.\n     * @param config.classes A list of classes used for indentation.\n     */\n    constructor(config) {\n        this.isForward = config.direction === 'forward';\n        this.classes = config.classes;\n    }\n    /**\n     * @inheritDoc\n     */\n    checkEnabled(indentAttributeValue) {\n        const currentIndex = this.classes.indexOf(indentAttributeValue);\n        if (this.isForward) {\n            return currentIndex < this.classes.length - 1;\n        }\n        else {\n            return currentIndex >= 0;\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    getNextIndent(indentAttributeValue) {\n        const currentIndex = this.classes.indexOf(indentAttributeValue);\n        const indexStep = this.isForward ? 1 : -1;\n        return this.classes[currentIndex + indexStep];\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module indent/indentblock\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { addMarginRules } from 'ckeditor5/src/engine.js';\nimport IndentBlockCommand from './indentblockcommand.js';\nimport IndentUsingOffset from './indentcommandbehavior/indentusingoffset.js';\nimport IndentUsingClasses from './indentcommandbehavior/indentusingclasses.js';\nconst DEFAULT_ELEMENTS = ['paragraph', 'heading1', 'heading2', 'heading3', 'heading4', 'heading5', 'heading6'];\n/**\n * The block indentation feature.\n *\n * It registers the `'indentBlock'` and `'outdentBlock'` commands.\n *\n * If the plugin {@link module:indent/indent~Indent} is defined, it also attaches the `'indentBlock'` and `'outdentBlock'` commands to\n * the `'indent'` and `'outdent'` commands.\n */\nexport default class IndentBlock extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('indentBlock', {\n            offset: 40,\n            unit: 'px'\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'IndentBlock';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const configuration = editor.config.get('indentBlock');\n        if (configuration.classes && configuration.classes.length) {\n            this._setupConversionUsingClasses(configuration.classes);\n            editor.commands.add('indentBlock', new IndentBlockCommand(editor, new IndentUsingClasses({\n                direction: 'forward',\n                classes: configuration.classes\n            })));\n            editor.commands.add('outdentBlock', new IndentBlockCommand(editor, new IndentUsingClasses({\n                direction: 'backward',\n                classes: configuration.classes\n            })));\n        }\n        else {\n            editor.data.addStyleProcessorRules(addMarginRules);\n            this._setupConversionUsingOffset();\n            editor.commands.add('indentBlock', new IndentBlockCommand(editor, new IndentUsingOffset({\n                direction: 'forward',\n                offset: configuration.offset,\n                unit: configuration.unit\n            })));\n            editor.commands.add('outdentBlock', new IndentBlockCommand(editor, new IndentUsingOffset({\n                direction: 'backward',\n                offset: configuration.offset,\n                unit: configuration.unit\n            })));\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        const indentCommand = editor.commands.get('indent');\n        const outdentCommand = editor.commands.get('outdent');\n        // Enable block indentation to heading configuration options. If it is not defined enable in paragraph and default headings.\n        const options = editor.config.get('heading.options');\n        const configuredElements = options && options.map(option => option.model);\n        const knownElements = configuredElements || DEFAULT_ELEMENTS;\n        knownElements.forEach(elementName => {\n            if (schema.isRegistered(elementName)) {\n                schema.extend(elementName, { allowAttributes: 'blockIndent' });\n            }\n        });\n        schema.setAttributeProperties('blockIndent', { isFormatting: true });\n        indentCommand.registerChildCommand(editor.commands.get('indentBlock'));\n        outdentCommand.registerChildCommand(editor.commands.get('outdentBlock'));\n    }\n    /**\n     * Setups conversion for using offset indents.\n     */\n    _setupConversionUsingOffset() {\n        const conversion = this.editor.conversion;\n        const locale = this.editor.locale;\n        const marginProperty = locale.contentLanguageDirection === 'rtl' ? 'margin-right' : 'margin-left';\n        conversion.for('upcast').attributeToAttribute({\n            view: {\n                styles: {\n                    [marginProperty]: /[\\s\\S]+/\n                }\n            },\n            model: {\n                key: 'blockIndent',\n                value: (viewElement) => {\n                    // Do not indent block elements in Document Lists. See https://github.com/ckeditor/ckeditor5/issues/12466.\n                    if (!viewElement.is('element', 'li')) {\n                        return viewElement.getStyle(marginProperty);\n                    }\n                }\n            }\n        });\n        conversion.for('downcast').attributeToAttribute({\n            model: 'blockIndent',\n            view: modelAttributeValue => {\n                return {\n                    key: 'style',\n                    value: {\n                        [marginProperty]: modelAttributeValue\n                    }\n                };\n            }\n        });\n    }\n    /**\n     * Setups conversion for using classes.\n     */\n    _setupConversionUsingClasses(classes) {\n        const definition = {\n            model: {\n                key: 'blockIndent',\n                values: []\n            },\n            view: {}\n        };\n        for (const className of classes) {\n            definition.model.values.push(className);\n            definition.view[className] = {\n                key: 'class',\n                value: [className]\n            };\n        }\n        this.editor.conversion.attributeToAttribute(definition);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/italic/italicediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport AttributeCommand from '../attributecommand.js';\nconst ITALIC = 'italic';\n/**\n * The italic editing feature.\n *\n * It registers the `'italic'` command, the <kbd>Ctrl+I</kbd> keystroke and introduces the `italic` attribute in the model\n * which renders to the view as an `<i>` element.\n */\nexport default class ItalicEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ItalicEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = this.editor.t;\n        // Allow italic attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: ITALIC });\n        editor.model.schema.setAttributeProperties(ITALIC, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n        editor.conversion.attributeToElement({\n            model: ITALIC,\n            view: 'i',\n            upcastAlso: [\n                'em',\n                {\n                    styles: {\n                        'font-style': 'italic'\n                    }\n                }\n            ]\n        });\n        // Create italic command.\n        editor.commands.add(ITALIC, new AttributeCommand(editor, ITALIC));\n        // Set the Ctrl+I keystroke.\n        editor.keystrokes.set('CTRL+I', ITALIC);\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Italic text'),\n                    keystroke: 'CTRL+I'\n                }\n            ]\n        });\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m9.586 14.633.021.004c-.036.335.095.655.393.962.082.083.173.15.274.201h1.474a.6.6 0 1 1 0 1.2H5.304a.6.6 0 0 1 0-1.2h1.15c.474-.07.809-.182 1.005-.334.157-.122.291-.32.404-.597l2.416-9.55a1.053 1.053 0 0 0-.281-.823 1.12 1.12 0 0 0-.442-.296H8.15a.6.6 0 0 1 0-1.2h6.443a.6.6 0 1 1 0 1.2h-1.195c-.376.056-.65.155-.823.296-.215.175-.423.439-.623.79l-2.366 9.347z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/italic/italicui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { MenuBarMenuListItemButtonView, ButtonView } from 'ckeditor5/src/ui.js';\nimport { getButtonCreator } from '../utils.js';\nimport italicIcon from '../../theme/icons/italic.svg';\nconst ITALIC = 'italic';\n/**\n * The italic UI feature. It introduces the Italic button.\n */\nexport default class ItalicUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ItalicUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.locale.t;\n        const createButton = getButtonCreator({\n            editor,\n            commandName: ITALIC,\n            plugin: this,\n            icon: italicIcon,\n            keystroke: 'CTRL+I',\n            label: t('Italic')\n        });\n        // Add bold button to feature components.\n        editor.ui.componentFactory.add(ITALIC, () => createButton(ButtonView));\n        editor.ui.componentFactory.add('menuBar:' + ITALIC, () => createButton(MenuBarMenuListItemButtonView));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/utils/automaticdecorators\n */\nimport { toMap } from 'ckeditor5/src/utils.js';\n/**\n * Helper class that ties together all {@link module:link/linkconfig~LinkDecoratorAutomaticDefinition} and provides\n * the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement downcast dispatchers} for them.\n */\nexport default class AutomaticDecorators {\n    constructor() {\n        /**\n         * Stores the definition of {@link module:link/linkconfig~LinkDecoratorAutomaticDefinition automatic decorators}.\n         * This data is used as a source for a downcast dispatcher to create a proper conversion to output data.\n         */\n        this._definitions = new Set();\n    }\n    /**\n     * Gives information about the number of decorators stored in the {@link module:link/utils/automaticdecorators~AutomaticDecorators}\n     * instance.\n     */\n    get length() {\n        return this._definitions.size;\n    }\n    /**\n     * Adds automatic decorator objects or an array with them to be used during downcasting.\n     *\n     * @param item A configuration object of automatic rules for decorating links. It might also be an array of such objects.\n     */\n    add(item) {\n        if (Array.isArray(item)) {\n            item.forEach(item => this._definitions.add(item));\n        }\n        else {\n            this._definitions.add(item);\n        }\n    }\n    /**\n     * Provides the conversion helper used in the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add} method.\n     *\n     * @returns A dispatcher function used as conversion helper in {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add}.\n     */\n    getDispatcher() {\n        return dispatcher => {\n            dispatcher.on('attribute:linkHref', (evt, data, conversionApi) => {\n                // There is only test as this behavior decorates links and\n                // it is run before dispatcher which actually consumes this node.\n                // This allows on writing own dispatcher with highest priority,\n                // which blocks both native converter and this additional decoration.\n                if (!conversionApi.consumable.test(data.item, 'attribute:linkHref')) {\n                    return;\n                }\n                // Automatic decorators for block links are handled e.g. in LinkImageEditing.\n                if (!(data.item.is('selection') || conversionApi.schema.isInline(data.item))) {\n                    return;\n                }\n                const viewWriter = conversionApi.writer;\n                const viewSelection = viewWriter.document.selection;\n                for (const item of this._definitions) {\n                    const viewElement = viewWriter.createAttributeElement('a', item.attributes, {\n                        priority: 5\n                    });\n                    if (item.classes) {\n                        viewWriter.addClass(item.classes, viewElement);\n                    }\n                    for (const key in item.styles) {\n                        viewWriter.setStyle(key, item.styles[key], viewElement);\n                    }\n                    viewWriter.setCustomProperty('link', true, viewElement);\n                    if (item.callback(data.attributeNewValue)) {\n                        if (data.item.is('selection')) {\n                            viewWriter.wrap(viewSelection.getFirstRange(), viewElement);\n                        }\n                        else {\n                            viewWriter.wrap(conversionApi.mapper.toViewRange(data.range), viewElement);\n                        }\n                    }\n                    else {\n                        viewWriter.unwrap(conversionApi.mapper.toViewRange(data.range), viewElement);\n                    }\n                }\n            }, { priority: 'high' });\n        };\n    }\n    /**\n     * Provides the conversion helper used in the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add} method\n     * when linking images.\n     *\n     * @returns A dispatcher function used as conversion helper in {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add}.\n     */\n    getDispatcherForLinkedImage() {\n        return dispatcher => {\n            dispatcher.on('attribute:linkHref:imageBlock', (evt, data, { writer, mapper }) => {\n                const viewFigure = mapper.toViewElement(data.item);\n                const linkInImage = Array.from(viewFigure.getChildren())\n                    .find((child) => child.is('element', 'a'));\n                // It's not guaranteed that the anchor is present in the image block during execution of this dispatcher.\n                // It might have been removed during the execution of unlink command that runs the image link downcast dispatcher\n                // that is executed before this one and removes the anchor from the image block.\n                if (!linkInImage) {\n                    return;\n                }\n                for (const item of this._definitions) {\n                    const attributes = toMap(item.attributes);\n                    if (item.callback(data.attributeNewValue)) {\n                        for (const [key, val] of attributes) {\n                            // Left for backward compatibility. Since v30 decorator should\n                            // accept `classes` and `styles` separately from `attributes`.\n                            if (key === 'class') {\n                                writer.addClass(val, linkInImage);\n                            }\n                            else {\n                                writer.setAttribute(key, val, linkInImage);\n                            }\n                        }\n                        if (item.classes) {\n                            writer.addClass(item.classes, linkInImage);\n                        }\n                        for (const key in item.styles) {\n                            writer.setStyle(key, item.styles[key], linkInImage);\n                        }\n                    }\n                    else {\n                        for (const [key, val] of attributes) {\n                            if (key === 'class') {\n                                writer.removeClass(val, linkInImage);\n                            }\n                            else {\n                                writer.removeAttribute(key, linkInImage);\n                            }\n                        }\n                        if (item.classes) {\n                            writer.removeClass(item.classes, linkInImage);\n                        }\n                        for (const key in item.styles) {\n                            writer.removeStyle(key, linkInImage);\n                        }\n                    }\n                }\n            });\n        };\n    }\n}\n", "import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n", "/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nexport default asciiToArray;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n", "import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nexport default stringToArray;\n", "import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n", "import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nexport default createCaseFirst;\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { upperFirst } from 'lodash-es';\nconst ATTRIBUTE_WHITESPACES = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\nconst SAFE_URL_TEMPLATE = '^(?:(?:<protocols>):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))';\n// Simplified email test - should be run over previously found URL.\nconst EMAIL_REG_EXP = /^[\\S]+@((?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.))+(?:[a-z\\u00a1-\\uffff]{2,})$/i;\n// The regex checks for the protocol syntax ('xxxx://' or 'xxxx:')\n// or non-word characters at the beginning of the link ('/', '#' etc.).\nconst PROTOCOL_REG_EXP = /^((\\w+:(\\/{2,})?)|(\\W))/i;\nconst DEFAULT_LINK_PROTOCOLS = [\n    'https?',\n    'ftps?',\n    'mailto'\n];\n/**\n * A keystroke used by the {@link module:link/linkui~LinkUI link UI feature}.\n */\nexport const LINK_KEYSTROKE = 'Ctrl+K';\n/**\n * Returns `true` if a given view node is the link element.\n */\nexport function isLinkElement(node) {\n    return node.is('attributeElement') && !!node.getCustomProperty('link');\n}\n/**\n * Creates a link {@link module:engine/view/attributeelement~AttributeElement} with the provided `href` attribute.\n */\nexport function createLinkElement(href, { writer }) {\n    // Priority 5 - https://github.com/ckeditor/ckeditor5-link/issues/121.\n    const linkElement = writer.createAttributeElement('a', { href }, { priority: 5 });\n    writer.setCustomProperty('link', true, linkElement);\n    return linkElement;\n}\n/**\n * Returns a safe URL based on a given value.\n *\n * A URL is considered safe if it is safe for the user (does not contain any malicious code).\n *\n * If a URL is considered unsafe, a simple `\"#\"` is returned.\n *\n * @internal\n */\nexport function ensureSafeUrl(url, allowedProtocols = DEFAULT_LINK_PROTOCOLS) {\n    const urlString = String(url);\n    const protocolsList = allowedProtocols.join('|');\n    const customSafeRegex = new RegExp(`${SAFE_URL_TEMPLATE.replace('<protocols>', protocolsList)}`, 'i');\n    return isSafeUrl(urlString, customSafeRegex) ? urlString : '#';\n}\n/**\n * Checks whether the given URL is safe for the user (does not contain any malicious code).\n */\nfunction isSafeUrl(url, customRegexp) {\n    const normalizedUrl = url.replace(ATTRIBUTE_WHITESPACES, '');\n    return !!normalizedUrl.match(customRegexp);\n}\n/**\n * Returns the {@link module:link/linkconfig~LinkConfig#decorators `config.link.decorators`} configuration processed\n * to respect the locale of the editor, i.e. to display the {@link module:link/linkconfig~LinkDecoratorManualDefinition label}\n * in the correct language.\n *\n * **Note**: Only the few most commonly used labels are translated automatically. Other labels should be manually\n * translated in the {@link module:link/linkconfig~LinkConfig#decorators `config.link.decorators`} configuration.\n *\n * @param t Shorthand for {@link module:utils/locale~Locale#t Locale#t}.\n * @param decorators The decorator reference where the label values should be localized.\n */\nexport function getLocalizedDecorators(t, decorators) {\n    const localizedDecoratorsLabels = {\n        'Open in a new tab': t('Open in a new tab'),\n        'Downloadable': t('Downloadable')\n    };\n    decorators.forEach(decorator => {\n        if ('label' in decorator && localizedDecoratorsLabels[decorator.label]) {\n            decorator.label = localizedDecoratorsLabels[decorator.label];\n        }\n        return decorator;\n    });\n    return decorators;\n}\n/**\n * Converts an object with defined decorators to a normalized array of decorators. The `id` key is added for each decorator and\n * is used as the attribute's name in the model.\n */\nexport function normalizeDecorators(decorators) {\n    const retArray = [];\n    if (decorators) {\n        for (const [key, value] of Object.entries(decorators)) {\n            const decorator = Object.assign({}, value, { id: `link${upperFirst(key)}` });\n            retArray.push(decorator);\n        }\n    }\n    return retArray;\n}\n/**\n * Returns `true` if the specified `element` can be linked (the element allows the `linkHref` attribute).\n */\nexport function isLinkableElement(element, schema) {\n    if (!element) {\n        return false;\n    }\n    return schema.checkAttribute(element.name, 'linkHref');\n}\n/**\n * Returns `true` if the specified `value` is an email.\n */\nexport function isEmail(value) {\n    return EMAIL_REG_EXP.test(value);\n}\n/**\n * Adds the protocol prefix to the specified `link` when:\n *\n * * it does not contain it already, and there is a {@link module:link/linkconfig~LinkConfig#defaultProtocol `defaultProtocol` }\n * configuration value provided,\n * * or the link is an email address.\n */\nexport function addLinkProtocolIfApplicable(link, defaultProtocol) {\n    const protocol = isEmail(link) ? 'mailto:' : defaultProtocol;\n    const isProtocolNeeded = !!protocol && !linkHasProtocol(link);\n    return link && isProtocolNeeded ? protocol + link : link;\n}\n/**\n * Checks if protocol is already included in the link.\n */\nexport function linkHasProtocol(link) {\n    return PROTOCOL_REG_EXP.test(link);\n}\n/**\n * Opens the link in a new browser tab.\n */\nexport function openLink(link) {\n    window.open(link, '_blank', 'noopener');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/linkcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { findAttributeRange } from 'ckeditor5/src/typing.js';\nimport { Collection, first, toMap } from 'ckeditor5/src/utils.js';\nimport AutomaticDecorators from './utils/automaticdecorators.js';\nimport { isLinkableElement } from './utils.js';\n/**\n * The link command. It is used by the {@link module:link/link~Link link feature}.\n */\nexport default class LinkCommand extends Command {\n    constructor() {\n        super(...arguments);\n        /**\n         * A collection of {@link module:link/utils/manualdecorator~ManualDecorator manual decorators}\n         * corresponding to the {@link module:link/linkconfig~LinkConfig#decorators decorator configuration}.\n         *\n         * You can consider it a model with states of manual decorators added to the currently selected link.\n         */\n        this.manualDecorators = new Collection();\n        /**\n         * An instance of the helper that ties together all {@link module:link/linkconfig~LinkDecoratorAutomaticDefinition}\n         * that are used by the {@glink features/link link} and the {@glink features/images/images-linking linking images} features.\n         */\n        this.automaticDecorators = new AutomaticDecorators();\n    }\n    /**\n     * Synchronizes the state of {@link #manualDecorators} with the currently present elements in the model.\n     */\n    restoreManualDecoratorStates() {\n        for (const manualDecorator of this.manualDecorators) {\n            manualDecorator.value = this._getDecoratorStateFromModel(manualDecorator.id);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const selectedElement = selection.getSelectedElement() || first(selection.getSelectedBlocks());\n        // A check for any integration that allows linking elements (e.g. `LinkImage`).\n        // Currently the selection reads attributes from text nodes only. See #7429 and #7465.\n        if (isLinkableElement(selectedElement, model.schema)) {\n            this.value = selectedElement.getAttribute('linkHref');\n            this.isEnabled = model.schema.checkAttribute(selectedElement, 'linkHref');\n        }\n        else {\n            this.value = selection.getAttribute('linkHref');\n            this.isEnabled = model.schema.checkAttributeInSelection(selection, 'linkHref');\n        }\n        for (const manualDecorator of this.manualDecorators) {\n            manualDecorator.value = this._getDecoratorStateFromModel(manualDecorator.id);\n        }\n    }\n    /**\n     * Executes the command.\n     *\n     * When the selection is non-collapsed, the `linkHref` attribute will be applied to nodes inside the selection, but only to\n     * those nodes where the `linkHref` attribute is allowed (disallowed nodes will be omitted).\n     *\n     * When the selection is collapsed and is not inside the text with the `linkHref` attribute, a\n     * new {@link module:engine/model/text~Text text node} with the `linkHref` attribute will be inserted in place of the caret, but\n     * only if such element is allowed in this place. The `_data` of the inserted text will equal the `href` parameter.\n     * The selection will be updated to wrap the just inserted text node.\n     *\n     * When the selection is collapsed and inside the text with the `linkHref` attribute, the attribute value will be updated.\n     *\n     * # Decorators and model attribute management\n     *\n     * There is an optional argument to this command that applies or removes model\n     * {@glink framework/architecture/editing-engine#text-attributes text attributes} brought by\n     * {@link module:link/utils/manualdecorator~ManualDecorator manual link decorators}.\n     *\n     * Text attribute names in the model correspond to the entries in the {@link module:link/linkconfig~LinkConfig#decorators\n     * configuration}.\n     * For every decorator configured, a model text attribute exists with the \"link\" prefix. For example, a `'linkMyDecorator'` attribute\n     * corresponds to `'myDecorator'` in the configuration.\n     *\n     * To learn more about link decorators, check out the {@link module:link/linkconfig~LinkConfig#decorators `config.link.decorators`}\n     * documentation.\n     *\n     * Here is how to manage decorator attributes with the link command:\n     *\n     * ```ts\n     * const linkCommand = editor.commands.get( 'link' );\n     *\n     * // Adding a new decorator attribute.\n     * linkCommand.execute( 'http://example.com', {\n     * \tlinkIsExternal: true\n     * } );\n     *\n     * // Removing a decorator attribute from the selection.\n     * linkCommand.execute( 'http://example.com', {\n     * \tlinkIsExternal: false\n     * } );\n     *\n     * // Adding multiple decorator attributes at the same time.\n     * linkCommand.execute( 'http://example.com', {\n     * \tlinkIsExternal: true,\n     * \tlinkIsDownloadable: true,\n     * } );\n     *\n     * // Removing and adding decorator attributes at the same time.\n     * linkCommand.execute( 'http://example.com', {\n     * \tlinkIsExternal: false,\n     * \tlinkFoo: true,\n     * \tlinkIsDownloadable: false,\n     * } );\n     * ```\n     *\n     * **Note**: If the decorator attribute name is not specified, its state remains untouched.\n     *\n     * **Note**: {@link module:link/unlinkcommand~UnlinkCommand#execute `UnlinkCommand#execute()`} removes all\n     * decorator attributes.\n     *\n     * @fires execute\n     * @param href Link destination.\n     * @param manualDecoratorIds The information about manual decorator attributes to be applied or removed upon execution.\n     */\n    execute(href, manualDecoratorIds = {}) {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        // Stores information about manual decorators to turn them on/off when command is applied.\n        const truthyManualDecorators = [];\n        const falsyManualDecorators = [];\n        for (const name in manualDecoratorIds) {\n            if (manualDecoratorIds[name]) {\n                truthyManualDecorators.push(name);\n            }\n            else {\n                falsyManualDecorators.push(name);\n            }\n        }\n        model.change(writer => {\n            // If selection is collapsed then update selected link or insert new one at the place of caret.\n            if (selection.isCollapsed) {\n                const position = selection.getFirstPosition();\n                // When selection is inside text with `linkHref` attribute.\n                if (selection.hasAttribute('linkHref')) {\n                    const linkText = extractTextFromSelection(selection);\n                    // Then update `linkHref` value.\n                    let linkRange = findAttributeRange(position, 'linkHref', selection.getAttribute('linkHref'), model);\n                    if (selection.getAttribute('linkHref') === linkText) {\n                        linkRange = this._updateLinkContent(model, writer, linkRange, href);\n                    }\n                    writer.setAttribute('linkHref', href, linkRange);\n                    truthyManualDecorators.forEach(item => {\n                        writer.setAttribute(item, true, linkRange);\n                    });\n                    falsyManualDecorators.forEach(item => {\n                        writer.removeAttribute(item, linkRange);\n                    });\n                    // Put the selection at the end of the updated link.\n                    writer.setSelection(writer.createPositionAfter(linkRange.end.nodeBefore));\n                }\n                // If not then insert text node with `linkHref` attribute in place of caret.\n                // However, since selection is collapsed, attribute value will be used as data for text node.\n                // So, if `href` is empty, do not create text node.\n                else if (href !== '') {\n                    const attributes = toMap(selection.getAttributes());\n                    attributes.set('linkHref', href);\n                    truthyManualDecorators.forEach(item => {\n                        attributes.set(item, true);\n                    });\n                    const { end: positionAfter } = model.insertContent(writer.createText(href, attributes), position);\n                    // Put the selection at the end of the inserted link.\n                    // Using end of range returned from insertContent in case nodes with the same attributes got merged.\n                    writer.setSelection(positionAfter);\n                }\n                // Remove the `linkHref` attribute and all link decorators from the selection.\n                // It stops adding a new content into the link element.\n                ['linkHref', ...truthyManualDecorators, ...falsyManualDecorators].forEach(item => {\n                    writer.removeSelectionAttribute(item);\n                });\n            }\n            else {\n                // If selection has non-collapsed ranges, we change attribute on nodes inside those ranges\n                // omitting nodes where the `linkHref` attribute is disallowed.\n                const ranges = model.schema.getValidRanges(selection.getRanges(), 'linkHref');\n                // But for the first, check whether the `linkHref` attribute is allowed on selected blocks (e.g. the \"image\" element).\n                const allowedRanges = [];\n                for (const element of selection.getSelectedBlocks()) {\n                    if (model.schema.checkAttribute(element, 'linkHref')) {\n                        allowedRanges.push(writer.createRangeOn(element));\n                    }\n                }\n                // Ranges that accept the `linkHref` attribute. Since we will iterate over `allowedRanges`, let's clone it.\n                const rangesToUpdate = allowedRanges.slice();\n                // For all selection ranges we want to check whether given range is inside an element that accepts the `linkHref` attribute.\n                // If so, we don't want to propagate applying the attribute to its children.\n                for (const range of ranges) {\n                    if (this._isRangeToUpdate(range, allowedRanges)) {\n                        rangesToUpdate.push(range);\n                    }\n                }\n                for (const range of rangesToUpdate) {\n                    let linkRange = range;\n                    if (rangesToUpdate.length === 1) {\n                        // Current text of the link in the document.\n                        const linkText = extractTextFromSelection(selection);\n                        if (selection.getAttribute('linkHref') === linkText) {\n                            linkRange = this._updateLinkContent(model, writer, range, href);\n                            writer.setSelection(writer.createSelection(linkRange));\n                        }\n                    }\n                    writer.setAttribute('linkHref', href, linkRange);\n                    truthyManualDecorators.forEach(item => {\n                        writer.setAttribute(item, true, linkRange);\n                    });\n                    falsyManualDecorators.forEach(item => {\n                        writer.removeAttribute(item, linkRange);\n                    });\n                }\n            }\n        });\n    }\n    /**\n     * Provides information whether a decorator with a given name is present in the currently processed selection.\n     *\n     * @param decoratorName The name of the manual decorator used in the model\n     * @returns The information whether a given decorator is currently present in the selection.\n     */\n    _getDecoratorStateFromModel(decoratorName) {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const selectedElement = selection.getSelectedElement();\n        // A check for the `LinkImage` plugin. If the selection contains an element, get values from the element.\n        // Currently the selection reads attributes from text nodes only. See #7429 and #7465.\n        if (isLinkableElement(selectedElement, model.schema)) {\n            return selectedElement.getAttribute(decoratorName);\n        }\n        return selection.getAttribute(decoratorName);\n    }\n    /**\n     * Checks whether specified `range` is inside an element that accepts the `linkHref` attribute.\n     *\n     * @param range A range to check.\n     * @param allowedRanges An array of ranges created on elements where the attribute is accepted.\n     */\n    _isRangeToUpdate(range, allowedRanges) {\n        for (const allowedRange of allowedRanges) {\n            // A range is inside an element that will have the `linkHref` attribute. Do not modify its nodes.\n            if (allowedRange.containsRange(range)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Updates selected link with a new value as its content and as its href attribute.\n     *\n     * @param model Model is need to insert content.\n     * @param writer Writer is need to create text element in model.\n     * @param range A range where should be inserted content.\n     * @param href A link value which should be in the href attribute and in the content.\n     */\n    _updateLinkContent(model, writer, range, href) {\n        const text = writer.createText(href, { linkHref: href });\n        return model.insertContent(text, range);\n    }\n}\n// Returns a text of a link under the collapsed selection or a selection that contains the entire link.\nfunction extractTextFromSelection(selection) {\n    if (selection.isCollapsed) {\n        const firstPosition = selection.getFirstPosition();\n        return firstPosition.textNode && firstPosition.textNode.data;\n    }\n    else {\n        const rangeItems = Array.from(selection.getFirstRange().getItems());\n        if (rangeItems.length > 1) {\n            return null;\n        }\n        const firstNode = rangeItems[0];\n        if (firstNode.is('$text') || firstNode.is('$textProxy')) {\n            return firstNode.data;\n        }\n        return null;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/unlinkcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { findAttributeRange } from 'ckeditor5/src/typing.js';\nimport { isLinkableElement } from './utils.js';\n/**\n * The unlink command. It is used by the {@link module:link/link~Link link plugin}.\n */\nexport default class UnlinkCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const selectedElement = selection.getSelectedElement();\n        // A check for any integration that allows linking elements (e.g. `LinkImage`).\n        // Currently the selection reads attributes from text nodes only. See #7429 and #7465.\n        if (isLinkableElement(selectedElement, model.schema)) {\n            this.isEnabled = model.schema.checkAttribute(selectedElement, 'linkHref');\n        }\n        else {\n            this.isEnabled = model.schema.checkAttributeInSelection(selection, 'linkHref');\n        }\n    }\n    /**\n     * Executes the command.\n     *\n     * When the selection is collapsed, it removes the `linkHref` attribute from each node with the same `linkHref` attribute value.\n     * When the selection is non-collapsed, it removes the `linkHref` attribute from each node in selected ranges.\n     *\n     * # Decorators\n     *\n     * If {@link module:link/linkconfig~LinkConfig#decorators `config.link.decorators`} is specified,\n     * all configured decorators are removed together with the `linkHref` attribute.\n     *\n     * @fires execute\n     */\n    execute() {\n        const editor = this.editor;\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const linkCommand = editor.commands.get('link');\n        model.change(writer => {\n            // Get ranges to unlink.\n            const rangesToUnlink = selection.isCollapsed ?\n                [findAttributeRange(selection.getFirstPosition(), 'linkHref', selection.getAttribute('linkHref'), model)] :\n                model.schema.getValidRanges(selection.getRanges(), 'linkHref');\n            // Remove `linkHref` attribute from specified ranges.\n            for (const range of rangesToUnlink) {\n                writer.removeAttribute('linkHref', range);\n                // If there are registered custom attributes, then remove them during unlink.\n                if (linkCommand) {\n                    for (const manualDecorator of linkCommand.manualDecorators) {\n                        writer.removeAttribute(manualDecorator.id, range);\n                    }\n                }\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/utils/manualdecorator\n */\nimport { ObservableMixin } from 'ckeditor5/src/utils.js';\n/**\n * Helper class that stores manual decorators with observable {@link module:link/utils/manualdecorator~ManualDecorator#value}\n * to support integration with the UI state. An instance of this class is a model with the state of individual manual decorators.\n * These decorators are kept as collections in {@link module:link/linkcommand~LinkCommand#manualDecorators}.\n */\nexport default class ManualDecorator extends /* #__PURE__ */ ObservableMixin() {\n    /**\n     * Creates a new instance of {@link module:link/utils/manualdecorator~ManualDecorator}.\n     *\n     * @param config.id The name of the attribute used in the model that represents a given manual decorator.\n     * For example: `'linkIsExternal'`.\n     * @param config.label The label used in the user interface to toggle the manual decorator.\n     * @param config.attributes A set of attributes added to output data when the decorator is active for a specific link.\n     * Attributes should keep the format of attributes defined in {@link module:engine/view/elementdefinition~ElementDefinition}.\n     * @param [config.defaultValue] Controls whether the decorator is \"on\" by default.\n     */\n    constructor({ id, label, attributes, classes, styles, defaultValue }) {\n        super();\n        this.id = id;\n        this.set('value', undefined);\n        this.defaultValue = defaultValue;\n        this.label = label;\n        this.attributes = attributes;\n        this.classes = classes;\n        this.styles = styles;\n    }\n    /**\n     * Returns {@link module:engine/view/matcher~MatcherPattern} with decorator attributes.\n     *\n     * @internal\n     */\n    _createPattern() {\n        return {\n            attributes: this.attributes,\n            classes: this.classes,\n            styles: this.styles\n        };\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/linkediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Input, TwoStepCaretMovement, inlineHighlight } from 'ckeditor5/src/typing.js';\nimport { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';\nimport { keyCodes, env } from 'ckeditor5/src/utils.js';\nimport LinkCommand from './linkcommand.js';\nimport UnlinkCommand from './unlinkcommand.js';\nimport ManualDecorator from './utils/manualdecorator.js';\nimport { createLinkElement, ensureSafeUrl, getLocalizedDecorators, normalizeDecorators, openLink, addLinkProtocolIfApplicable } from './utils.js';\nimport '../theme/link.css';\nconst HIGHLIGHT_CLASS = 'ck-link_selected';\nconst DECORATOR_AUTOMATIC = 'automatic';\nconst DECORATOR_MANUAL = 'manual';\nconst EXTERNAL_LINKS_REGEXP = /^(https?:)?\\/\\//;\n/**\n * The link engine feature.\n *\n * It introduces the `linkHref=\"url\"` attribute in the model which renders to the view as a `<a href=\"url\">` element\n * as well as `'link'` and `'unlink'` commands.\n */\nexport default class LinkEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'LinkEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        // Clipboard is required for handling cut and paste events while typing over the link.\n        return [TwoStepCaretMovement, Input, ClipboardPipeline];\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('link', {\n            allowCreatingEmptyLinks: false,\n            addTargetToExternalLinks: false\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const allowedProtocols = this.editor.config.get('link.allowedProtocols');\n        // Allow link attribute on all inline nodes.\n        editor.model.schema.extend('$text', { allowAttributes: 'linkHref' });\n        editor.conversion.for('dataDowncast')\n            .attributeToElement({ model: 'linkHref', view: createLinkElement });\n        editor.conversion.for('editingDowncast')\n            .attributeToElement({ model: 'linkHref', view: (href, conversionApi) => {\n                return createLinkElement(ensureSafeUrl(href, allowedProtocols), conversionApi);\n            } });\n        editor.conversion.for('upcast')\n            .elementToAttribute({\n            view: {\n                name: 'a',\n                attributes: {\n                    href: true\n                }\n            },\n            model: {\n                key: 'linkHref',\n                value: (viewElement) => viewElement.getAttribute('href')\n            }\n        });\n        // Create linking commands.\n        editor.commands.add('link', new LinkCommand(editor));\n        editor.commands.add('unlink', new UnlinkCommand(editor));\n        const linkDecorators = getLocalizedDecorators(editor.t, normalizeDecorators(editor.config.get('link.decorators')));\n        this._enableAutomaticDecorators(linkDecorators\n            .filter((item) => item.mode === DECORATOR_AUTOMATIC));\n        this._enableManualDecorators(linkDecorators\n            .filter((item) => item.mode === DECORATOR_MANUAL));\n        // Enable two-step caret movement for `linkHref` attribute.\n        const twoStepCaretMovementPlugin = editor.plugins.get(TwoStepCaretMovement);\n        twoStepCaretMovementPlugin.registerAttribute('linkHref');\n        // Setup highlight over selected link.\n        inlineHighlight(editor, 'linkHref', 'a', HIGHLIGHT_CLASS);\n        // Handle link following by CTRL+click or ALT+ENTER\n        this._enableLinkOpen();\n        // Clears the DocumentSelection decorator attributes if the selection is no longer in a link (for example while using 2-SCM).\n        this._enableSelectionAttributesFixer();\n        // Handle adding default protocol to pasted links.\n        this._enableClipboardIntegration();\n    }\n    /**\n     * Processes an array of configured {@link module:link/linkconfig~LinkDecoratorAutomaticDefinition automatic decorators}\n     * and registers a {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast dispatcher}\n     * for each one of them. Downcast dispatchers are obtained using the\n     * {@link module:link/utils/automaticdecorators~AutomaticDecorators#getDispatcher} method.\n     *\n     * **Note**: This method also activates the automatic external link decorator if enabled with\n     * {@link module:link/linkconfig~LinkConfig#addTargetToExternalLinks `config.link.addTargetToExternalLinks`}.\n     */\n    _enableAutomaticDecorators(automaticDecoratorDefinitions) {\n        const editor = this.editor;\n        // Store automatic decorators in the command instance as we do the same with manual decorators.\n        // Thanks to that, `LinkImageEditing` plugin can re-use the same definitions.\n        const command = editor.commands.get('link');\n        const automaticDecorators = command.automaticDecorators;\n        // Adds a default decorator for external links.\n        if (editor.config.get('link.addTargetToExternalLinks')) {\n            automaticDecorators.add({\n                id: 'linkIsExternal',\n                mode: DECORATOR_AUTOMATIC,\n                callback: url => !!url && EXTERNAL_LINKS_REGEXP.test(url),\n                attributes: {\n                    target: '_blank',\n                    rel: 'noopener noreferrer'\n                }\n            });\n        }\n        automaticDecorators.add(automaticDecoratorDefinitions);\n        if (automaticDecorators.length) {\n            editor.conversion.for('downcast').add(automaticDecorators.getDispatcher());\n        }\n    }\n    /**\n     * Processes an array of configured {@link module:link/linkconfig~LinkDecoratorManualDefinition manual decorators},\n     * transforms them into {@link module:link/utils/manualdecorator~ManualDecorator} instances and stores them in the\n     * {@link module:link/linkcommand~LinkCommand#manualDecorators} collection (a model for manual decorators state).\n     *\n     * Also registers an {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement attribute-to-element}\n     * converter for each manual decorator and extends the {@link module:engine/model/schema~Schema model's schema}\n     * with adequate model attributes.\n     */\n    _enableManualDecorators(manualDecoratorDefinitions) {\n        if (!manualDecoratorDefinitions.length) {\n            return;\n        }\n        const editor = this.editor;\n        const command = editor.commands.get('link');\n        const manualDecorators = command.manualDecorators;\n        manualDecoratorDefinitions.forEach(decoratorDefinition => {\n            editor.model.schema.extend('$text', { allowAttributes: decoratorDefinition.id });\n            // Keeps reference to manual decorator to decode its name to attributes during downcast.\n            const decorator = new ManualDecorator(decoratorDefinition);\n            manualDecorators.add(decorator);\n            editor.conversion.for('downcast').attributeToElement({\n                model: decorator.id,\n                view: (manualDecoratorValue, { writer, schema }, { item }) => {\n                    // Manual decorators for block links are handled e.g. in LinkImageEditing.\n                    if (!(item.is('selection') || schema.isInline(item))) {\n                        return;\n                    }\n                    if (manualDecoratorValue) {\n                        const element = writer.createAttributeElement('a', decorator.attributes, { priority: 5 });\n                        if (decorator.classes) {\n                            writer.addClass(decorator.classes, element);\n                        }\n                        for (const key in decorator.styles) {\n                            writer.setStyle(key, decorator.styles[key], element);\n                        }\n                        writer.setCustomProperty('link', true, element);\n                        return element;\n                    }\n                }\n            });\n            editor.conversion.for('upcast').elementToAttribute({\n                view: {\n                    name: 'a',\n                    ...decorator._createPattern()\n                },\n                model: {\n                    key: decorator.id\n                }\n            });\n        });\n    }\n    /**\n     * Attaches handlers for {@link module:engine/view/document~Document#event:enter} and\n     * {@link module:engine/view/document~Document#event:click} to enable link following.\n     */\n    _enableLinkOpen() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        this.listenTo(viewDocument, 'click', (evt, data) => {\n            const shouldOpen = env.isMac ? data.domEvent.metaKey : data.domEvent.ctrlKey;\n            if (!shouldOpen) {\n                return;\n            }\n            let clickedElement = data.domTarget;\n            if (clickedElement.tagName.toLowerCase() != 'a') {\n                clickedElement = clickedElement.closest('a');\n            }\n            if (!clickedElement) {\n                return;\n            }\n            const url = clickedElement.getAttribute('href');\n            if (!url) {\n                return;\n            }\n            evt.stop();\n            data.preventDefault();\n            openLink(url);\n        }, { context: '$capture' });\n        // Open link on Alt+Enter.\n        this.listenTo(viewDocument, 'keydown', (evt, data) => {\n            const linkCommand = editor.commands.get('link');\n            const url = linkCommand.value;\n            const shouldOpen = !!url && data.keyCode === keyCodes.enter && data.altKey;\n            if (!shouldOpen) {\n                return;\n            }\n            evt.stop();\n            openLink(url);\n        });\n    }\n    /**\n     * Watches the DocumentSelection attribute changes and removes link decorator attributes when the linkHref attribute is removed.\n     *\n     * This is to ensure that there is no left-over link decorator attributes on the document selection that is no longer in a link.\n     */\n    _enableSelectionAttributesFixer() {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        this.listenTo(selection, 'change:attribute', (evt, { attributeKeys }) => {\n            if (!attributeKeys.includes('linkHref') || selection.hasAttribute('linkHref')) {\n                return;\n            }\n            model.change(writer => {\n                removeLinkAttributesFromSelection(writer, getLinkAttributesAllowedOnText(model.schema));\n            });\n        });\n    }\n    /**\n     * Enables URL fixing on pasting.\n     */\n    _enableClipboardIntegration() {\n        const editor = this.editor;\n        const model = editor.model;\n        const defaultProtocol = this.editor.config.get('link.defaultProtocol');\n        if (!defaultProtocol) {\n            return;\n        }\n        this.listenTo(editor.plugins.get('ClipboardPipeline'), 'contentInsertion', (evt, data) => {\n            model.change(writer => {\n                const range = writer.createRangeIn(data.content);\n                for (const item of range.getItems()) {\n                    if (item.hasAttribute('linkHref')) {\n                        const newLink = addLinkProtocolIfApplicable(item.getAttribute('linkHref'), defaultProtocol);\n                        writer.setAttribute('linkHref', newLink, item);\n                    }\n                }\n            });\n        });\n    }\n}\n/**\n * Make the selection free of link-related model attributes.\n * All link-related model attributes start with \"link\". That includes not only \"linkHref\"\n * but also all decorator attributes (they have dynamic names), or even custom plugins.\n */\nfunction removeLinkAttributesFromSelection(writer, linkAttributes) {\n    writer.removeSelectionAttribute('linkHref');\n    for (const attribute of linkAttributes) {\n        writer.removeSelectionAttribute(attribute);\n    }\n}\n/**\n * Returns an array containing names of the attributes allowed on `$text` that describes the link item.\n */\nfunction getLinkAttributesAllowedOnText(schema) {\n    const textAttributes = schema.getDefinition('$text').allowAttributes;\n    return textAttributes.filter(attribute => attribute.startsWith('link'));\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module typing/utils/inlinehighlight\n */\nimport findAttributeRange from './findattributerange.js';\n/**\n * Adds a visual highlight style to an attribute element in which the selection is anchored.\n * Together with two-step caret movement, they indicate that the user is typing inside the element.\n *\n * Highlight is turned on by adding the given class to the attribute element in the view:\n *\n * * The class is removed before the conversion has started, as callbacks added with the `'highest'` priority\n * to {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} events.\n * * The class is added in the view post fixer, after other changes in the model tree were converted to the view.\n *\n * This way, adding and removing the highlight does not interfere with conversion.\n *\n * Usage:\n *\n * ```ts\n * import inlineHighlight from '@ckeditor/ckeditor5-typing/src/utils/inlinehighlight';\n *\n * // Make `ck-link_selected` class be applied on an `a` element\n * // whenever the corresponding `linkHref` attribute element is selected.\n * inlineHighlight( editor, 'linkHref', 'a', 'ck-link_selected' );\n * ```\n *\n * @param editor The editor instance.\n * @param attributeName The attribute name to check.\n * @param tagName The tagName of a view item.\n * @param className The class name to apply in the view.\n */\nexport default function inlineHighlight(editor, attributeName, tagName, className) {\n    const view = editor.editing.view;\n    const highlightedElements = new Set();\n    // Adding the class.\n    view.document.registerPostFixer(writer => {\n        const selection = editor.model.document.selection;\n        let changed = false;\n        if (selection.hasAttribute(attributeName)) {\n            const modelRange = findAttributeRange(selection.getFirstPosition(), attributeName, selection.getAttribute(attributeName), editor.model);\n            const viewRange = editor.editing.mapper.toViewRange(modelRange);\n            // There might be multiple view elements in the `viewRange`, for example, when the `a` element is\n            // broken by a UIElement.\n            for (const item of viewRange.getItems()) {\n                if (item.is('element', tagName) && !item.hasClass(className)) {\n                    writer.addClass(className, item);\n                    highlightedElements.add(item);\n                    changed = true;\n                }\n            }\n        }\n        return changed;\n    });\n    // Removing the class.\n    editor.conversion.for('editingDowncast').add(dispatcher => {\n        // Make sure the highlight is removed on every possible event, before conversion is started.\n        dispatcher.on('insert', removeHighlight, { priority: 'highest' });\n        dispatcher.on('remove', removeHighlight, { priority: 'highest' });\n        dispatcher.on('attribute', removeHighlight, { priority: 'highest' });\n        dispatcher.on('selection', removeHighlight, { priority: 'highest' });\n        function removeHighlight() {\n            view.change(writer => {\n                for (const item of highlightedElements.values()) {\n                    writer.removeClass(className, item);\n                    highlightedElements.delete(item);\n                }\n            });\n        }\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/ui/linkformview\n */\nimport { ButtonView, FocusCycler, LabeledFieldView, SwitchButtonView, View, ViewCollection, createLabeledInputText, submitHandler } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\nimport { icons } from 'ckeditor5/src/core.js';\n// See: #8833.\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport '@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css';\nimport '../../theme/linkform.css';\n/**\n * The link form view controller class.\n *\n * See {@link module:link/ui/linkformview~LinkFormView}.\n */\nexport default class LinkFormView extends View {\n    /**\n     * Creates an instance of the {@link module:link/ui/linkformview~LinkFormView} class.\n     *\n     * Also see {@link #render}.\n     *\n     * @param locale The localization services instance.\n     * @param linkCommand Reference to {@link module:link/linkcommand~LinkCommand}.\n     * @param validators  Form validators used by {@link #isValid}.\n     */\n    constructor(locale, linkCommand, validators) {\n        super(locale);\n        /**\n         * Tracks information about DOM focus in the form.\n         */\n        this.focusTracker = new FocusTracker();\n        /**\n         * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n         */\n        this.keystrokes = new KeystrokeHandler();\n        /**\n         * A collection of views that can be focused in the form.\n         */\n        this._focusables = new ViewCollection();\n        const t = locale.t;\n        this._validators = validators;\n        this.urlInputView = this._createUrlInput();\n        this.saveButtonView = this._createButton(t('Save'), icons.check, 'ck-button-save');\n        this.saveButtonView.type = 'submit';\n        this.cancelButtonView = this._createButton(t('Cancel'), icons.cancel, 'ck-button-cancel', 'cancel');\n        this._manualDecoratorSwitches = this._createManualDecoratorSwitches(linkCommand);\n        this.children = this._createFormChildren(linkCommand.manualDecorators);\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        const classList = ['ck', 'ck-link-form', 'ck-responsive-form'];\n        if (linkCommand.manualDecorators.length) {\n            classList.push('ck-link-form_layout-vertical', 'ck-vertical-form');\n        }\n        this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: classList,\n                // https://github.com/ckeditor/ckeditor5-link/issues/90\n                tabindex: '-1'\n            },\n            children: this.children\n        });\n    }\n    /**\n     * Obtains the state of the {@link module:ui/button/switchbuttonview~SwitchButtonView switch buttons} representing\n     * {@link module:link/linkcommand~LinkCommand#manualDecorators manual link decorators}\n     * in the {@link module:link/ui/linkformview~LinkFormView}.\n     *\n     * @returns Key-value pairs, where the key is the name of the decorator and the value is its state.\n     */\n    getDecoratorSwitchesState() {\n        return Array\n            .from(this._manualDecoratorSwitches)\n            .reduce((accumulator, switchButton) => {\n            accumulator[switchButton.name] = switchButton.isOn;\n            return accumulator;\n        }, {});\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        submitHandler({\n            view: this\n        });\n        const childViews = [\n            this.urlInputView,\n            ...this._manualDecoratorSwitches,\n            this.saveButtonView,\n            this.cancelButtonView\n        ];\n        childViews.forEach(v => {\n            // Register the view as focusable.\n            this._focusables.add(v);\n            // Register the view in the focus tracker.\n            this.focusTracker.add(v.element);\n        });\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the fist {@link #_focusables} in the form.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Validates the form and returns `false` when some fields are invalid.\n     */\n    isValid() {\n        this.resetFormStatus();\n        for (const validator of this._validators) {\n            const errorText = validator(this);\n            // One error per field is enough.\n            if (errorText) {\n                // Apply updated error.\n                this.urlInputView.errorText = errorText;\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Cleans up the supplementary error and information text of the {@link #urlInputView}\n     * bringing them back to the state when the form has been displayed for the first time.\n     *\n     * See {@link #isValid}.\n     */\n    resetFormStatus() {\n        this.urlInputView.errorText = null;\n    }\n    /**\n     * Creates a labeled input view.\n     *\n     * @returns Labeled field view instance.\n     */\n    _createUrlInput() {\n        const t = this.locale.t;\n        const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n        labeledInput.fieldView.inputMode = 'url';\n        labeledInput.label = t('Link URL');\n        return labeledInput;\n    }\n    /**\n     * Creates a button view.\n     *\n     * @param label The button label.\n     * @param icon The button icon.\n     * @param className The additional button CSS class name.\n     * @param eventName An event name that the `ButtonView#execute` event will be delegated to.\n     * @returns The button view instance.\n     */\n    _createButton(label, icon, className, eventName) {\n        const button = new ButtonView(this.locale);\n        button.set({\n            label,\n            icon,\n            tooltip: true\n        });\n        button.extendTemplate({\n            attributes: {\n                class: className\n            }\n        });\n        if (eventName) {\n            button.delegate('execute').to(this, eventName);\n        }\n        return button;\n    }\n    /**\n     * Populates {@link module:ui/viewcollection~ViewCollection} of {@link module:ui/button/switchbuttonview~SwitchButtonView}\n     * made based on {@link module:link/linkcommand~LinkCommand#manualDecorators}.\n     *\n     * @param linkCommand A reference to the link command.\n     * @returns ViewCollection of switch buttons.\n     */\n    _createManualDecoratorSwitches(linkCommand) {\n        const switches = this.createCollection();\n        for (const manualDecorator of linkCommand.manualDecorators) {\n            const switchButton = new SwitchButtonView(this.locale);\n            switchButton.set({\n                name: manualDecorator.id,\n                label: manualDecorator.label,\n                withText: true\n            });\n            switchButton.bind('isOn').toMany([manualDecorator, linkCommand], 'value', (decoratorValue, commandValue) => {\n                return commandValue === undefined && decoratorValue === undefined ? !!manualDecorator.defaultValue : !!decoratorValue;\n            });\n            switchButton.on('execute', () => {\n                manualDecorator.set('value', !switchButton.isOn);\n            });\n            switches.add(switchButton);\n        }\n        return switches;\n    }\n    /**\n     * Populates the {@link #children} collection of the form.\n     *\n     * If {@link module:link/linkcommand~LinkCommand#manualDecorators manual decorators} are configured in the editor, it creates an\n     * additional `View` wrapping all {@link #_manualDecoratorSwitches} switch buttons corresponding\n     * to these decorators.\n     *\n     * @param manualDecorators A reference to\n     * the collection of manual decorators stored in the link command.\n     * @returns The children of link form view.\n     */\n    _createFormChildren(manualDecorators) {\n        const children = this.createCollection();\n        children.add(this.urlInputView);\n        if (manualDecorators.length) {\n            const additionalButtonsView = new View();\n            additionalButtonsView.setTemplate({\n                tag: 'ul',\n                children: this._manualDecoratorSwitches.map(switchButton => ({\n                    tag: 'li',\n                    children: [switchButton],\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-list__item'\n                        ]\n                    }\n                })),\n                attributes: {\n                    class: [\n                        'ck',\n                        'ck-reset',\n                        'ck-list'\n                    ]\n                }\n            });\n            children.add(additionalButtonsView);\n        }\n        children.add(this.saveButtonView);\n        children.add(this.cancelButtonView);\n        return children;\n    }\n    /**\n     * The native DOM `value` of the {@link #urlInputView} element.\n     *\n     * **Note**: Do not confuse it with the {@link module:ui/inputtext/inputtextview~InputTextView#value}\n     * which works one way only and may not represent the actual state of the component in the DOM.\n     */\n    get url() {\n        const { element } = this.urlInputView.fieldView;\n        if (!element) {\n            return null;\n        }\n        return element.value.trim();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/ui/linkactionsview\n */\nimport { ButtonView, View, ViewCollection, FocusCycler } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\nimport { icons } from 'ckeditor5/src/core.js';\nimport { ensureSafeUrl } from '../utils.js';\n// See: #8833.\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport '@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css';\nimport '../../theme/linkactions.css';\nimport unlinkIcon from '../../theme/icons/unlink.svg';\n/**\n * The link actions view class. This view displays the link preview, allows\n * unlinking or editing the link.\n */\nexport default class LinkActionsView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale, linkConfig = {}) {\n        super(locale);\n        /**\n         * Tracks information about DOM focus in the actions.\n         */\n        this.focusTracker = new FocusTracker();\n        /**\n         * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n         */\n        this.keystrokes = new KeystrokeHandler();\n        /**\n         * A collection of views that can be focused in the view.\n         */\n        this._focusables = new ViewCollection();\n        const t = locale.t;\n        this.previewButtonView = this._createPreviewButton();\n        this.unlinkButtonView = this._createButton(t('Unlink'), unlinkIcon, 'unlink');\n        this.editButtonView = this._createButton(t('Edit link'), icons.pencil, 'edit');\n        this.set('href', undefined);\n        this._linkConfig = linkConfig;\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-link-actions',\n                    'ck-responsive-form'\n                ],\n                // https://github.com/ckeditor/ckeditor5-link/issues/90\n                tabindex: '-1'\n            },\n            children: [\n                this.previewButtonView,\n                this.editButtonView,\n                this.unlinkButtonView\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        const childViews = [\n            this.previewButtonView,\n            this.editButtonView,\n            this.unlinkButtonView\n        ];\n        childViews.forEach(v => {\n            // Register the view as focusable.\n            this._focusables.add(v);\n            // Register the view in the focus tracker.\n            this.focusTracker.add(v.element);\n        });\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the fist {@link #_focusables} in the actions.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Creates a button view.\n     *\n     * @param label The button label.\n     * @param icon The button icon.\n     * @param eventName An event name that the `ButtonView#execute` event will be delegated to.\n     * @returns The button view instance.\n     */\n    _createButton(label, icon, eventName) {\n        const button = new ButtonView(this.locale);\n        button.set({\n            label,\n            icon,\n            tooltip: true\n        });\n        button.delegate('execute').to(this, eventName);\n        return button;\n    }\n    /**\n     * Creates a link href preview button.\n     *\n     * @returns The button view instance.\n     */\n    _createPreviewButton() {\n        const button = new ButtonView(this.locale);\n        const bind = this.bindTemplate;\n        const t = this.t;\n        button.set({\n            withText: true,\n            tooltip: t('Open link in new tab')\n        });\n        button.extendTemplate({\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-link-actions__preview'\n                ],\n                href: bind.to('href', href => href && ensureSafeUrl(href, this._linkConfig.allowedProtocols)),\n                target: '_blank',\n                rel: 'noopener noreferrer'\n            }\n        });\n        button.bind('label').to(this, 'href', href => {\n            return href || t('This link has no URL');\n        });\n        button.bind('isEnabled').to(this, 'href', href => !!href);\n        button.template.tag = 'a';\n        button.template.eventListeners = {};\n        return button;\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184zm4.919 10.562-1.414 1.414a.75.75 0 1 1-1.06-1.06l1.414-1.415-1.415-1.414a.75.75 0 0 1 1.061-1.06l1.414 1.414 1.414-1.415a.75.75 0 0 1 1.061 1.061l-1.414 1.414 1.414 1.415a.75.75 0 0 1-1.06 1.06l-1.415-1.414z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/linkui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ClickObserver } from 'ckeditor5/src/engine.js';\nimport { ButtonView, ContextualBalloon, clickOutsideHandler, CssTransitionDisablerMixin, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { isWidget } from 'ckeditor5/src/widget.js';\nimport LinkFormView from './ui/linkformview.js';\nimport LinkActionsView from './ui/linkactionsview.js';\nimport { addLinkProtocolIfApplicable, isLinkElement, LINK_KEYSTROKE } from './utils.js';\nimport linkIcon from '../theme/icons/link.svg';\nconst VISUAL_SELECTION_MARKER_NAME = 'link-ui';\n/**\n * The link UI plugin. It introduces the `'link'` and `'unlink'` buttons and support for the <kbd>Ctrl+K</kbd> keystroke.\n *\n * It uses the\n * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.\n */\nexport default class LinkUI extends Plugin {\n    constructor() {\n        super(...arguments);\n        /**\n         * The actions view displayed inside of the balloon.\n         */\n        this.actionsView = null;\n        /**\n         * The form view displayed inside the balloon.\n         */\n        this.formView = null;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ContextualBalloon];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'LinkUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = this.editor.t;\n        editor.editing.view.addObserver(ClickObserver);\n        this._balloon = editor.plugins.get(ContextualBalloon);\n        // Create toolbar buttons.\n        this._createToolbarLinkButton();\n        this._enableBalloonActivators();\n        // Renders a fake visual selection marker on an expanded selection.\n        editor.conversion.for('editingDowncast').markerToHighlight({\n            model: VISUAL_SELECTION_MARKER_NAME,\n            view: {\n                classes: ['ck-fake-link-selection']\n            }\n        });\n        // Renders a fake visual selection marker on a collapsed selection.\n        editor.conversion.for('editingDowncast').markerToElement({\n            model: VISUAL_SELECTION_MARKER_NAME,\n            view: (data, { writer }) => {\n                if (!data.markerRange.isCollapsed) {\n                    return null;\n                }\n                const markerElement = writer.createUIElement('span');\n                writer.addClass(['ck-fake-link-selection', 'ck-fake-link-selection_collapsed'], markerElement);\n                return markerElement;\n            }\n        });\n        // Add the information about the keystrokes to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Create link'),\n                    keystroke: LINK_KEYSTROKE\n                },\n                {\n                    label: t('Move out of a link'),\n                    keystroke: [\n                        ['arrowleft', 'arrowleft'],\n                        ['arrowright', 'arrowright']\n                    ]\n                }\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        // Destroy created UI components as they are not automatically destroyed (see ckeditor5#1341).\n        if (this.formView) {\n            this.formView.destroy();\n        }\n        if (this.actionsView) {\n            this.actionsView.destroy();\n        }\n    }\n    /**\n     * Creates views.\n     */\n    _createViews() {\n        this.actionsView = this._createActionsView();\n        this.formView = this._createFormView();\n        // Attach lifecycle actions to the the balloon.\n        this._enableUserBalloonInteractions();\n    }\n    /**\n     * Creates the {@link module:link/ui/linkactionsview~LinkActionsView} instance.\n     */\n    _createActionsView() {\n        const editor = this.editor;\n        const actionsView = new LinkActionsView(editor.locale, editor.config.get('link'));\n        const linkCommand = editor.commands.get('link');\n        const unlinkCommand = editor.commands.get('unlink');\n        actionsView.bind('href').to(linkCommand, 'value');\n        actionsView.editButtonView.bind('isEnabled').to(linkCommand);\n        actionsView.unlinkButtonView.bind('isEnabled').to(unlinkCommand);\n        // Execute unlink command after clicking on the \"Edit\" button.\n        this.listenTo(actionsView, 'edit', () => {\n            this._addFormView();\n        });\n        // Execute unlink command after clicking on the \"Unlink\" button.\n        this.listenTo(actionsView, 'unlink', () => {\n            editor.execute('unlink');\n            this._hideUI();\n        });\n        // Close the panel on esc key press when the **actions have focus**.\n        actionsView.keystrokes.set('Esc', (data, cancel) => {\n            this._hideUI();\n            cancel();\n        });\n        // Open the form view on Ctrl+K when the **actions have focus**..\n        actionsView.keystrokes.set(LINK_KEYSTROKE, (data, cancel) => {\n            this._addFormView();\n            cancel();\n        });\n        return actionsView;\n    }\n    /**\n     * Creates the {@link module:link/ui/linkformview~LinkFormView} instance.\n     */\n    _createFormView() {\n        const editor = this.editor;\n        const linkCommand = editor.commands.get('link');\n        const defaultProtocol = editor.config.get('link.defaultProtocol');\n        const formView = new (CssTransitionDisablerMixin(LinkFormView))(editor.locale, linkCommand, getFormValidators(editor));\n        formView.urlInputView.fieldView.bind('value').to(linkCommand, 'value');\n        // Form elements should be read-only when corresponding commands are disabled.\n        formView.urlInputView.bind('isEnabled').to(linkCommand, 'isEnabled');\n        // Disable the \"save\" button if the command is disabled.\n        formView.saveButtonView.bind('isEnabled').to(linkCommand, 'isEnabled');\n        // Execute link command after clicking the \"Save\" button.\n        this.listenTo(formView, 'submit', () => {\n            if (formView.isValid()) {\n                const { value } = formView.urlInputView.fieldView.element;\n                const parsedUrl = addLinkProtocolIfApplicable(value, defaultProtocol);\n                editor.execute('link', parsedUrl, formView.getDecoratorSwitchesState());\n                this._closeFormView();\n            }\n        });\n        // Update balloon position when form error changes.\n        this.listenTo(formView.urlInputView, 'change:errorText', () => {\n            editor.ui.update();\n        });\n        // Hide the panel after clicking the \"Cancel\" button.\n        this.listenTo(formView, 'cancel', () => {\n            this._closeFormView();\n        });\n        // Close the panel on esc key press when the **form has focus**.\n        formView.keystrokes.set('Esc', (data, cancel) => {\n            this._closeFormView();\n            cancel();\n        });\n        return formView;\n    }\n    /**\n     * Creates a toolbar Link button. Clicking this button will show\n     * a {@link #_balloon} attached to the selection.\n     */\n    _createToolbarLinkButton() {\n        const editor = this.editor;\n        editor.ui.componentFactory.add('link', () => {\n            const button = this._createButton(ButtonView);\n            button.set({\n                tooltip: true\n            });\n            return button;\n        });\n        editor.ui.componentFactory.add('menuBar:link', () => {\n            const button = this._createButton(MenuBarMenuListItemButtonView);\n            button.set({\n                role: 'menuitemcheckbox'\n            });\n            return button;\n        });\n    }\n    /**\n     * Creates a button for link command to use either in toolbar or in menu bar.\n     */\n    _createButton(ButtonClass) {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const command = editor.commands.get('link');\n        const view = new ButtonClass(editor.locale);\n        const t = locale.t;\n        view.set({\n            label: t('Link'),\n            icon: linkIcon,\n            keystroke: LINK_KEYSTROKE,\n            isToggleable: true\n        });\n        view.bind('isEnabled').to(command, 'isEnabled');\n        view.bind('isOn').to(command, 'value', value => !!value);\n        // Show the panel on button click.\n        this.listenTo(view, 'execute', () => this._showUI(true));\n        return view;\n    }\n    /**\n     * Attaches actions that control whether the balloon panel containing the\n     * {@link #formView} should be displayed.\n     */\n    _enableBalloonActivators() {\n        const editor = this.editor;\n        const viewDocument = editor.editing.view.document;\n        // Handle click on view document and show panel when selection is placed inside the link element.\n        // Keep panel open until selection will be inside the same link element.\n        this.listenTo(viewDocument, 'click', () => {\n            const parentLink = this._getSelectedLinkElement();\n            if (parentLink) {\n                // Then show panel but keep focus inside editor editable.\n                this._showUI();\n            }\n        });\n        // Handle the `Ctrl+K` keystroke and show the panel.\n        editor.keystrokes.set(LINK_KEYSTROKE, (keyEvtData, cancel) => {\n            // Prevent focusing the search bar in FF, Chrome and Edge. See https://github.com/ckeditor/ckeditor5/issues/4811.\n            cancel();\n            if (editor.commands.get('link').isEnabled) {\n                this._showUI(true);\n            }\n        });\n    }\n    /**\n     * Attaches actions that control whether the balloon panel containing the\n     * {@link #formView} is visible or not.\n     */\n    _enableUserBalloonInteractions() {\n        // Focus the form if the balloon is visible and the Tab key has been pressed.\n        this.editor.keystrokes.set('Tab', (data, cancel) => {\n            if (this._areActionsVisible && !this.actionsView.focusTracker.isFocused) {\n                this.actionsView.focus();\n                cancel();\n            }\n        }, {\n            // Use the high priority because the link UI navigation is more important\n            // than other feature's actions, e.g. list indentation.\n            // https://github.com/ckeditor/ckeditor5-link/issues/146\n            priority: 'high'\n        });\n        // Close the panel on the Esc key press when the editable has focus and the balloon is visible.\n        this.editor.keystrokes.set('Esc', (data, cancel) => {\n            if (this._isUIVisible) {\n                this._hideUI();\n                cancel();\n            }\n        });\n        // Close on click outside of balloon panel element.\n        clickOutsideHandler({\n            emitter: this.formView,\n            activator: () => this._isUIInPanel,\n            contextElements: () => [this._balloon.view.element],\n            callback: () => this._hideUI()\n        });\n    }\n    /**\n     * Adds the {@link #actionsView} to the {@link #_balloon}.\n     *\n     * @internal\n     */\n    _addActionsView() {\n        if (!this.actionsView) {\n            this._createViews();\n        }\n        if (this._areActionsInPanel) {\n            return;\n        }\n        this._balloon.add({\n            view: this.actionsView,\n            position: this._getBalloonPositionData()\n        });\n    }\n    /**\n     * Adds the {@link #formView} to the {@link #_balloon}.\n     */\n    _addFormView() {\n        if (!this.formView) {\n            this._createViews();\n        }\n        if (this._isFormInPanel) {\n            return;\n        }\n        const editor = this.editor;\n        const linkCommand = editor.commands.get('link');\n        this.formView.disableCssTransitions();\n        this.formView.resetFormStatus();\n        this._balloon.add({\n            view: this.formView,\n            position: this._getBalloonPositionData()\n        });\n        // Make sure that each time the panel shows up, the URL field remains in sync with the value of\n        // the command. If the user typed in the input, then canceled the balloon (`urlInputView.fieldView#value` stays\n        // unaltered) and re-opened it without changing the value of the link command (e.g. because they\n        // clicked the same link), they would see the old value instead of the actual value of the command.\n        // https://github.com/ckeditor/ckeditor5-link/issues/78\n        // https://github.com/ckeditor/ckeditor5-link/issues/123\n        this.formView.urlInputView.fieldView.value = linkCommand.value || '';\n        // Select input when form view is currently visible.\n        if (this._balloon.visibleView === this.formView) {\n            this.formView.urlInputView.fieldView.select();\n        }\n        this.formView.enableCssTransitions();\n    }\n    /**\n     * Closes the form view. Decides whether the balloon should be hidden completely or if the action view should be shown. This is\n     * decided upon the link command value (which has a value if the document selection is in the link).\n     *\n     * Additionally, if any {@link module:link/linkconfig~LinkConfig#decorators} are defined in the editor configuration, the state of\n     * switch buttons responsible for manual decorator handling is restored.\n     */\n    _closeFormView() {\n        const linkCommand = this.editor.commands.get('link');\n        // Restore manual decorator states to represent the current model state. This case is important to reset the switch buttons\n        // when the user cancels the editing form.\n        linkCommand.restoreManualDecoratorStates();\n        if (linkCommand.value !== undefined) {\n            this._removeFormView();\n        }\n        else {\n            this._hideUI();\n        }\n    }\n    /**\n     * Removes the {@link #formView} from the {@link #_balloon}.\n     */\n    _removeFormView() {\n        if (this._isFormInPanel) {\n            // Blur the input element before removing it from DOM to prevent issues in some browsers.\n            // See https://github.com/ckeditor/ckeditor5/issues/1501.\n            this.formView.saveButtonView.focus();\n            // Reset the URL field to update the state of the submit button.\n            this.formView.urlInputView.fieldView.reset();\n            this._balloon.remove(this.formView);\n            // Because the form has an input which has focus, the focus must be brought back\n            // to the editor. Otherwise, it would be lost.\n            this.editor.editing.view.focus();\n            this._hideFakeVisualSelection();\n        }\n    }\n    /**\n     * Shows the correct UI type. It is either {@link #formView} or {@link #actionsView}.\n     *\n     * @internal\n     */\n    _showUI(forceVisible = false) {\n        if (!this.formView) {\n            this._createViews();\n        }\n        // When there's no link under the selection, go straight to the editing UI.\n        if (!this._getSelectedLinkElement()) {\n            // Show visual selection on a text without a link when the contextual balloon is displayed.\n            // See https://github.com/ckeditor/ckeditor5/issues/4721.\n            this._showFakeVisualSelection();\n            this._addActionsView();\n            // Be sure panel with link is visible.\n            if (forceVisible) {\n                this._balloon.showStack('main');\n            }\n            this._addFormView();\n        }\n        // If there's a link under the selection...\n        else {\n            // Go to the editing UI if actions are already visible.\n            if (this._areActionsVisible) {\n                this._addFormView();\n            }\n            // Otherwise display just the actions UI.\n            else {\n                this._addActionsView();\n            }\n            // Be sure panel with link is visible.\n            if (forceVisible) {\n                this._balloon.showStack('main');\n            }\n        }\n        // Begin responding to ui#update once the UI is added.\n        this._startUpdatingUI();\n    }\n    /**\n     * Removes the {@link #formView} from the {@link #_balloon}.\n     *\n     * See {@link #_addFormView}, {@link #_addActionsView}.\n     */\n    _hideUI() {\n        if (!this._isUIInPanel) {\n            return;\n        }\n        const editor = this.editor;\n        this.stopListening(editor.ui, 'update');\n        this.stopListening(this._balloon, 'change:visibleView');\n        // Make sure the focus always gets back to the editable _before_ removing the focused form view.\n        // Doing otherwise causes issues in some browsers. See https://github.com/ckeditor/ckeditor5-link/issues/193.\n        editor.editing.view.focus();\n        // Remove form first because it's on top of the stack.\n        this._removeFormView();\n        // Then remove the actions view because it's beneath the form.\n        this._balloon.remove(this.actionsView);\n        this._hideFakeVisualSelection();\n    }\n    /**\n     * Makes the UI react to the {@link module:ui/editorui/editorui~EditorUI#event:update} event to\n     * reposition itself when the editor UI should be refreshed.\n     *\n     * See: {@link #_hideUI} to learn when the UI stops reacting to the `update` event.\n     */\n    _startUpdatingUI() {\n        const editor = this.editor;\n        const viewDocument = editor.editing.view.document;\n        let prevSelectedLink = this._getSelectedLinkElement();\n        let prevSelectionParent = getSelectionParent();\n        const update = () => {\n            const selectedLink = this._getSelectedLinkElement();\n            const selectionParent = getSelectionParent();\n            // Hide the panel if:\n            //\n            // * the selection went out of the EXISTING link element. E.g. user moved the caret out\n            //   of the link,\n            // * the selection went to a different parent when creating a NEW link. E.g. someone\n            //   else modified the document.\n            // * the selection has expanded (e.g. displaying link actions then pressing SHIFT+Right arrow).\n            //\n            // Note: #_getSelectedLinkElement will return a link for a non-collapsed selection only\n            // when fully selected.\n            if ((prevSelectedLink && !selectedLink) ||\n                (!prevSelectedLink && selectionParent !== prevSelectionParent)) {\n                this._hideUI();\n            }\n            // Update the position of the panel when:\n            //  * link panel is in the visible stack\n            //  * the selection remains in the original link element,\n            //  * there was no link element in the first place, i.e. creating a new link\n            else if (this._isUIVisible) {\n                // If still in a link element, simply update the position of the balloon.\n                // If there was no link (e.g. inserting one), the balloon must be moved\n                // to the new position in the editing view (a new native DOM range).\n                this._balloon.updatePosition(this._getBalloonPositionData());\n            }\n            prevSelectedLink = selectedLink;\n            prevSelectionParent = selectionParent;\n        };\n        function getSelectionParent() {\n            return viewDocument.selection.focus.getAncestors()\n                .reverse()\n                .find((node) => node.is('element'));\n        }\n        this.listenTo(editor.ui, 'update', update);\n        this.listenTo(this._balloon, 'change:visibleView', update);\n    }\n    /**\n     * Returns `true` when {@link #formView} is in the {@link #_balloon}.\n     */\n    get _isFormInPanel() {\n        return !!this.formView && this._balloon.hasView(this.formView);\n    }\n    /**\n     * Returns `true` when {@link #actionsView} is in the {@link #_balloon}.\n     */\n    get _areActionsInPanel() {\n        return !!this.actionsView && this._balloon.hasView(this.actionsView);\n    }\n    /**\n     * Returns `true` when {@link #actionsView} is in the {@link #_balloon} and it is\n     * currently visible.\n     */\n    get _areActionsVisible() {\n        return !!this.actionsView && this._balloon.visibleView === this.actionsView;\n    }\n    /**\n     * Returns `true` when {@link #actionsView} or {@link #formView} is in the {@link #_balloon}.\n     */\n    get _isUIInPanel() {\n        return this._isFormInPanel || this._areActionsInPanel;\n    }\n    /**\n     * Returns `true` when {@link #actionsView} or {@link #formView} is in the {@link #_balloon} and it is\n     * currently visible.\n     */\n    get _isUIVisible() {\n        const visibleView = this._balloon.visibleView;\n        return !!this.formView && visibleView == this.formView || this._areActionsVisible;\n    }\n    /**\n     * Returns positioning options for the {@link #_balloon}. They control the way the balloon is attached\n     * to the target element or selection.\n     *\n     * If the selection is collapsed and inside a link element, the panel will be attached to the\n     * entire link element. Otherwise, it will be attached to the selection.\n     */\n    _getBalloonPositionData() {\n        const view = this.editor.editing.view;\n        const model = this.editor.model;\n        const viewDocument = view.document;\n        let target;\n        if (model.markers.has(VISUAL_SELECTION_MARKER_NAME)) {\n            // There are cases when we highlight selection using a marker (#7705, #4721).\n            const markerViewElements = Array.from(this.editor.editing.mapper.markerNameToElements(VISUAL_SELECTION_MARKER_NAME));\n            const newRange = view.createRange(view.createPositionBefore(markerViewElements[0]), view.createPositionAfter(markerViewElements[markerViewElements.length - 1]));\n            target = view.domConverter.viewRangeToDom(newRange);\n        }\n        else {\n            // Make sure the target is calculated on demand at the last moment because a cached DOM range\n            // (which is very fragile) can desynchronize with the state of the editing view if there was\n            // any rendering done in the meantime. This can happen, for instance, when an inline widget\n            // gets unlinked.\n            target = () => {\n                const targetLink = this._getSelectedLinkElement();\n                return targetLink ?\n                    // When selection is inside link element, then attach panel to this element.\n                    view.domConverter.mapViewToDom(targetLink) :\n                    // Otherwise attach panel to the selection.\n                    view.domConverter.viewRangeToDom(viewDocument.selection.getFirstRange());\n            };\n        }\n        return { target };\n    }\n    /**\n     * Returns the link {@link module:engine/view/attributeelement~AttributeElement} under\n     * the {@link module:engine/view/document~Document editing view's} selection or `null`\n     * if there is none.\n     *\n     * **Note**: For a non–collapsed selection, the link element is returned when **fully**\n     * selected and the **only** element within the selection boundaries, or when\n     * a linked widget is selected.\n     */\n    _getSelectedLinkElement() {\n        const view = this.editor.editing.view;\n        const selection = view.document.selection;\n        const selectedElement = selection.getSelectedElement();\n        // The selection is collapsed or some widget is selected (especially inline widget).\n        if (selection.isCollapsed || selectedElement && isWidget(selectedElement)) {\n            return findLinkElementAncestor(selection.getFirstPosition());\n        }\n        else {\n            // The range for fully selected link is usually anchored in adjacent text nodes.\n            // Trim it to get closer to the actual link element.\n            const range = selection.getFirstRange().getTrimmed();\n            const startLink = findLinkElementAncestor(range.start);\n            const endLink = findLinkElementAncestor(range.end);\n            if (!startLink || startLink != endLink) {\n                return null;\n            }\n            // Check if the link element is fully selected.\n            if (view.createRangeIn(startLink).getTrimmed().isEqual(range)) {\n                return startLink;\n            }\n            else {\n                return null;\n            }\n        }\n    }\n    /**\n     * Displays a fake visual selection when the contextual balloon is displayed.\n     *\n     * This adds a 'link-ui' marker into the document that is rendered as a highlight on selected text fragment.\n     */\n    _showFakeVisualSelection() {\n        const model = this.editor.model;\n        model.change(writer => {\n            const range = model.document.selection.getFirstRange();\n            if (model.markers.has(VISUAL_SELECTION_MARKER_NAME)) {\n                writer.updateMarker(VISUAL_SELECTION_MARKER_NAME, { range });\n            }\n            else {\n                if (range.start.isAtEnd) {\n                    const startPosition = range.start.getLastMatchingPosition(({ item }) => !model.schema.isContent(item), { boundaries: range });\n                    writer.addMarker(VISUAL_SELECTION_MARKER_NAME, {\n                        usingOperation: false,\n                        affectsData: false,\n                        range: writer.createRange(startPosition, range.end)\n                    });\n                }\n                else {\n                    writer.addMarker(VISUAL_SELECTION_MARKER_NAME, {\n                        usingOperation: false,\n                        affectsData: false,\n                        range\n                    });\n                }\n            }\n        });\n    }\n    /**\n     * Hides the fake visual selection created in {@link #_showFakeVisualSelection}.\n     */\n    _hideFakeVisualSelection() {\n        const model = this.editor.model;\n        if (model.markers.has(VISUAL_SELECTION_MARKER_NAME)) {\n            model.change(writer => {\n                writer.removeMarker(VISUAL_SELECTION_MARKER_NAME);\n            });\n        }\n    }\n}\n/**\n * Returns a link element if there's one among the ancestors of the provided `Position`.\n *\n * @param View position to analyze.\n * @returns Link element at the position or null.\n */\nfunction findLinkElementAncestor(position) {\n    return position.getAncestors().find((ancestor) => isLinkElement(ancestor)) || null;\n}\n/**\n * Returns link form validation callbacks.\n *\n * @param editor Editor instance.\n */\nfunction getFormValidators(editor) {\n    const t = editor.t;\n    const allowCreatingEmptyLinks = editor.config.get('link.allowCreatingEmptyLinks');\n    return [\n        form => {\n            if (!allowCreatingEmptyLinks && !form.url.length) {\n                return t('Link URL must not be empty.');\n            }\n        }\n    ];\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/autolink\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Delete, TextWatcher, getLastTextLine, findAttributeRange } from 'ckeditor5/src/typing.js';\nimport { addLinkProtocolIfApplicable, linkHasProtocol } from './utils.js';\nimport LinkEditing from './linkediting.js';\nconst MIN_LINK_LENGTH_WITH_SPACE_AT_END = 4; // Ie: \"t.co \" (length 5).\n// This was a tweak from https://gist.github.com/dperini/729294.\nconst URL_REG_EXP = new RegExp(\n// Group 1: Line start or after a space.\n'(^|\\\\s)' +\n    // Group 2: Detected URL (or e-mail).\n    '(' +\n    // Protocol identifier or short syntax \"//\"\n    // a. Full form http://user@foo.bar.baz:8080/foo/bar.html#baz?foo=bar\n    '(' +\n    '(?:(?:(?:https?|ftp):)?\\\\/\\\\/)' +\n    // BasicAuth using user:pass (optional)\n    '(?:\\\\S+(?::\\\\S*)?@)?' +\n    '(?:' +\n    // IP address dotted notation octets\n    // excludes loopback network 0.0.0.0\n    // excludes reserved space >= 224.0.0.0\n    // excludes network & broadcast addresses\n    // (first & last IP address of each class)\n    '(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])' +\n    '(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}' +\n    '(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))' +\n    '|' +\n    '(' +\n    // Do not allow `www.foo` - see https://github.com/ckeditor/ckeditor5/issues/8050.\n    '((?!www\\\\.)|(www\\\\.))' +\n    // Host & domain names.\n    '(?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.)+' +\n    // TLD identifier name.\n    '(?:[a-z\\\\u00a1-\\\\uffff]{2,63})' +\n    ')' +\n    ')' +\n    // port number (optional)\n    '(?::\\\\d{2,5})?' +\n    // resource path (optional)\n    '(?:[/?#]\\\\S*)?' +\n    ')' +\n    '|' +\n    // b. Short form (either www.example.com or example@example.com)\n    '(' +\n    '(www.|(\\\\S+@))' +\n    // Host & domain names.\n    '((?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.))+' +\n    // TLD identifier name.\n    '(?:[a-z\\\\u00a1-\\\\uffff]{2,63})' +\n    ')' +\n    ')$', 'i');\nconst URL_GROUP_IN_MATCH = 2;\n/**\n * The autolink plugin.\n */\nexport default class AutoLink extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [Delete, LinkEditing];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'AutoLink';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        selection.on('change:range', () => {\n            // Disable plugin when selection is inside a code block.\n            this.isEnabled = !selection.anchor.parent.is('element', 'codeBlock');\n        });\n        this._enableTypingHandling();\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        this._enableEnterHandling();\n        this._enableShiftEnterHandling();\n        this._enablePasteLinking();\n    }\n    /**\n     * For given position, returns a range that includes the whole link that contains the position.\n     *\n     * If position is not inside a link, returns `null`.\n     */\n    _expandLinkRange(model, position) {\n        if (position.textNode && position.textNode.hasAttribute('linkHref')) {\n            return findAttributeRange(position, 'linkHref', position.textNode.getAttribute('linkHref'), model);\n        }\n        else {\n            return null;\n        }\n    }\n    /**\n     * Extends the document selection to includes all links that intersects with given `selectedRange`.\n     */\n    _selectEntireLinks(writer, selectedRange) {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        const selStart = selection.getFirstPosition();\n        const selEnd = selection.getLastPosition();\n        let updatedSelection = selectedRange.getJoined(this._expandLinkRange(model, selStart) || selectedRange);\n        if (updatedSelection) {\n            updatedSelection = updatedSelection.getJoined(this._expandLinkRange(model, selEnd) || selectedRange);\n        }\n        if (updatedSelection && (updatedSelection.start.isBefore(selStart) || updatedSelection.end.isAfter(selEnd))) {\n            // Only update the selection if it changed.\n            writer.setSelection(updatedSelection);\n        }\n    }\n    /**\n     * Enables autolinking on pasting a URL when some content is selected.\n     */\n    _enablePasteLinking() {\n        const editor = this.editor;\n        const model = editor.model;\n        const selection = model.document.selection;\n        const clipboardPipeline = editor.plugins.get('ClipboardPipeline');\n        const linkCommand = editor.commands.get('link');\n        clipboardPipeline.on('inputTransformation', (evt, data) => {\n            if (!this.isEnabled || !linkCommand.isEnabled || selection.isCollapsed || data.method !== 'paste') {\n                // Abort if we are disabled or the selection is collapsed.\n                return;\n            }\n            if (selection.rangeCount > 1) {\n                // Abort if there are multiple selection ranges.\n                return;\n            }\n            const selectedRange = selection.getFirstRange();\n            const newLink = data.dataTransfer.getData('text/plain');\n            if (!newLink) {\n                // Abort if there is no plain text on the clipboard.\n                return;\n            }\n            const matches = newLink.match(URL_REG_EXP);\n            // If the text in the clipboard has a URL, and that URL is the whole clipboard.\n            if (matches && matches[2] === newLink) {\n                model.change(writer => {\n                    this._selectEntireLinks(writer, selectedRange);\n                    linkCommand.execute(newLink);\n                });\n                evt.stop();\n            }\n        }, { priority: 'high' });\n    }\n    /**\n     * Enables autolinking on typing.\n     */\n    _enableTypingHandling() {\n        const editor = this.editor;\n        const watcher = new TextWatcher(editor.model, text => {\n            // 1. Detect <kbd>Space</kbd> after a text with a potential link.\n            if (!isSingleSpaceAtTheEnd(text)) {\n                return;\n            }\n            // 2. Check text before last typed <kbd>Space</kbd>.\n            const url = getUrlAtTextEnd(text.substr(0, text.length - 1));\n            if (url) {\n                return { url };\n            }\n        });\n        watcher.on('matched:data', (evt, data) => {\n            const { batch, range, url } = data;\n            if (!batch.isTyping) {\n                return;\n            }\n            const linkEnd = range.end.getShiftedBy(-1); // Executed after a space character.\n            const linkStart = linkEnd.getShiftedBy(-url.length);\n            const linkRange = editor.model.createRange(linkStart, linkEnd);\n            this._applyAutoLink(url, linkRange);\n        });\n        watcher.bind('isEnabled').to(this);\n    }\n    /**\n     * Enables autolinking on the <kbd>Enter</kbd> key.\n     */\n    _enableEnterHandling() {\n        const editor = this.editor;\n        const model = editor.model;\n        const enterCommand = editor.commands.get('enter');\n        if (!enterCommand) {\n            return;\n        }\n        enterCommand.on('execute', () => {\n            const position = model.document.selection.getFirstPosition();\n            if (!position.parent.previousSibling) {\n                return;\n            }\n            const rangeToCheck = model.createRangeIn(position.parent.previousSibling);\n            this._checkAndApplyAutoLinkOnRange(rangeToCheck);\n        });\n    }\n    /**\n     * Enables autolinking on the <kbd>Shift</kbd>+<kbd>Enter</kbd> keyboard shortcut.\n     */\n    _enableShiftEnterHandling() {\n        const editor = this.editor;\n        const model = editor.model;\n        const shiftEnterCommand = editor.commands.get('shiftEnter');\n        if (!shiftEnterCommand) {\n            return;\n        }\n        shiftEnterCommand.on('execute', () => {\n            const position = model.document.selection.getFirstPosition();\n            const rangeToCheck = model.createRange(model.createPositionAt(position.parent, 0), position.getShiftedBy(-1));\n            this._checkAndApplyAutoLinkOnRange(rangeToCheck);\n        });\n    }\n    /**\n     * Checks if the passed range contains a linkable text.\n     */\n    _checkAndApplyAutoLinkOnRange(rangeToCheck) {\n        const model = this.editor.model;\n        const { text, range } = getLastTextLine(rangeToCheck, model);\n        const url = getUrlAtTextEnd(text);\n        if (url) {\n            const linkRange = model.createRange(range.end.getShiftedBy(-url.length), range.end);\n            this._applyAutoLink(url, linkRange);\n        }\n    }\n    /**\n     * Applies a link on a given range if the link should be applied.\n     *\n     * @param url The URL to link.\n     * @param range The text range to apply the link attribute to.\n     */\n    _applyAutoLink(url, range) {\n        const model = this.editor.model;\n        const defaultProtocol = this.editor.config.get('link.defaultProtocol');\n        const fullUrl = addLinkProtocolIfApplicable(url, defaultProtocol);\n        if (!this.isEnabled || !isLinkAllowedOnRange(range, model) || !linkHasProtocol(fullUrl) || linkIsAlreadySet(range)) {\n            return;\n        }\n        this._persistAutoLink(fullUrl, range);\n    }\n    /**\n     * Enqueues autolink changes in the model.\n     *\n     * @param url The URL to link.\n     * @param range The text range to apply the link attribute to.\n     */\n    _persistAutoLink(url, range) {\n        const model = this.editor.model;\n        const deletePlugin = this.editor.plugins.get('Delete');\n        // Enqueue change to make undo step.\n        model.enqueueChange(writer => {\n            writer.setAttribute('linkHref', url, range);\n            model.enqueueChange(() => {\n                deletePlugin.requestUndoOnBackspace();\n            });\n        });\n    }\n}\n// Check if text should be evaluated by the plugin in order to reduce number of RegExp checks on whole text.\nfunction isSingleSpaceAtTheEnd(text) {\n    return text.length > MIN_LINK_LENGTH_WITH_SPACE_AT_END && text[text.length - 1] === ' ' && text[text.length - 2] !== ' ';\n}\nfunction getUrlAtTextEnd(text) {\n    const match = URL_REG_EXP.exec(text);\n    return match ? match[URL_GROUP_IN_MATCH] : null;\n}\nfunction isLinkAllowedOnRange(range, model) {\n    return model.schema.checkAttributeInSelection(model.createSelection(range), 'linkHref');\n}\nfunction linkIsAlreadySet(range) {\n    const item = range.start.nodeAfter;\n    return !!item && item.hasAttribute('linkHref');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module list/list/utils/listwalker\n */\nimport { first, toArray } from 'ckeditor5/src/utils.js';\nimport { isListItemBlock } from './model.js';\n/**\n * Document list blocks iterator.\n */\nexport default class ListWalker {\n    /**\n     * Creates a document list iterator.\n     *\n     * @param startElement The start list item block element.\n     * @param options.direction The iterating direction.\n     * @param options.includeSelf Whether start block should be included in the result (if it's matching other criteria).\n     * @param options.sameAttributes Additional attributes that must be the same for each block.\n     * @param options.sameIndent Whether blocks with the same indent level as the start block should be included\n     * in the result.\n     * @param options.lowerIndent Whether blocks with a lower indent level than the start block should be included\n     * in the result.\n     * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included\n     * in the result.\n     */\n    constructor(startElement, options) {\n        this._startElement = startElement;\n        this._referenceIndent = startElement.getAttribute('listIndent');\n        this._isForward = options.direction == 'forward';\n        this._includeSelf = !!options.includeSelf;\n        this._sameAttributes = toArray(options.sameAttributes || []);\n        this._sameIndent = !!options.sameIndent;\n        this._lowerIndent = !!options.lowerIndent;\n        this._higherIndent = !!options.higherIndent;\n    }\n    /**\n     * Performs only first step of iteration and returns the result.\n     *\n     * @param startElement The start list item block element.\n     * @param options.direction The iterating direction.\n     * @param options.includeSelf Whether start block should be included in the result (if it's matching other criteria).\n     * @param options.sameAttributes Additional attributes that must be the same for each block.\n     * @param options.sameIndent Whether blocks with the same indent level as the start block should be included\n     * in the result.\n     * @param options.lowerIndent Whether blocks with a lower indent level than the start block should be included\n     * in the result.\n     * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included\n     * in the result.\n     */\n    static first(startElement, options) {\n        const walker = new this(startElement, options);\n        const iterator = walker[Symbol.iterator]();\n        return first(iterator);\n    }\n    /**\n     * Iterable interface.\n     */\n    *[Symbol.iterator]() {\n        const nestedItems = [];\n        for (const { node } of iterateSiblingListBlocks(this._getStartNode(), this._isForward ? 'forward' : 'backward')) {\n            const indent = node.getAttribute('listIndent');\n            // Leaving a nested list.\n            if (indent < this._referenceIndent) {\n                // Abort searching blocks.\n                if (!this._lowerIndent) {\n                    break;\n                }\n                // While searching for lower indents, update the reference indent to find another parent in the next step.\n                this._referenceIndent = indent;\n            }\n            // Entering a nested list.\n            else if (indent > this._referenceIndent) {\n                // Ignore nested blocks.\n                if (!this._higherIndent) {\n                    continue;\n                }\n                // Collect nested blocks to verify if they are really nested, or it's a different item.\n                if (!this._isForward) {\n                    nestedItems.push(node);\n                    continue;\n                }\n            }\n            // Same indent level block.\n            else {\n                // Ignore same indent block.\n                if (!this._sameIndent) {\n                    // While looking for nested blocks, stop iterating while encountering first same indent block.\n                    if (this._higherIndent) {\n                        // No more nested blocks so yield nested items.\n                        if (nestedItems.length) {\n                            yield* nestedItems;\n                            nestedItems.length = 0;\n                        }\n                        break;\n                    }\n                    continue;\n                }\n                // Abort if item has any additionally specified attribute different.\n                if (this._sameAttributes.some(attr => node.getAttribute(attr) !== this._startElement.getAttribute(attr))) {\n                    break;\n                }\n            }\n            // There is another block for the same list item so the nested items were in the same list item.\n            if (nestedItems.length) {\n                yield* nestedItems;\n                nestedItems.length = 0;\n            }\n            yield node;\n        }\n    }\n    /**\n     * Returns the model element to start iterating.\n     */\n    _getStartNode() {\n        if (this._includeSelf) {\n            return this._startElement;\n        }\n        return this._isForward ?\n            this._startElement.nextSibling :\n            this._startElement.previousSibling;\n    }\n}\n/**\n * Iterates sibling list blocks starting from the given node.\n *\n * @internal\n * @param node The model node.\n * @param direction Iteration direction.\n * @returns The object with `node` and `previous` {@link module:engine/model/element~Element blocks}.\n */\nexport function* iterateSiblingListBlocks(node, direction = 'forward') {\n    const isForward = direction == 'forward';\n    const previousNodesByIndent = []; // Last seen nodes of lower indented lists.\n    let previous = null;\n    while (isListItemBlock(node)) {\n        let previousNodeInList = null; // It's like `previous` but has the same indent as current node.\n        if (previous) {\n            const nodeIndent = node.getAttribute('listIndent');\n            const previousNodeIndent = previous.getAttribute('listIndent');\n            // Let's find previous node for the same indent.\n            // We're going to need that when we get back to previous indent.\n            if (nodeIndent > previousNodeIndent) {\n                previousNodesByIndent[previousNodeIndent] = previous;\n            }\n            // Restore the one for given indent.\n            else if (nodeIndent < previousNodeIndent) {\n                previousNodeInList = previousNodesByIndent[nodeIndent];\n                previousNodesByIndent.length = nodeIndent;\n            }\n            // Same indent.\n            else {\n                previousNodeInList = previous;\n            }\n        }\n        yield { node, previous, previousNodeInList };\n        previous = node;\n        node = isForward ? node.nextSibling : node.previousSibling;\n    }\n}\n/**\n * The iterable protocol over the list elements.\n *\n * @internal\n */\nexport class ListBlocksIterable {\n    /**\n     * @param listHead The head element of a list.\n     */\n    constructor(listHead) {\n        this._listHead = listHead;\n    }\n    /**\n     * List blocks iterator.\n     *\n     * Iterates over all blocks of a list.\n     */\n    [Symbol.iterator]() {\n        return iterateSiblingListBlocks(this._listHead, 'forward');\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { uid, toArray } from 'ckeditor5/src/utils.js';\nimport ListWalker, { iterateSiblingListBlocks } from './listwalker.js';\n/**\n * The list item ID generator.\n *\n * @internal\n */\nexport class ListItemUid {\n    /**\n     * Returns the next ID.\n     *\n     * @internal\n     */\n    /* istanbul ignore next: static function definition -- @preserve */\n    static next() {\n        return uid();\n    }\n}\n/**\n * Returns true if the given model node is a list item block.\n *\n * @internal\n */\nexport function isListItemBlock(node) {\n    return !!node && node.is('element') && node.hasAttribute('listItemId');\n}\n/**\n * Returns an array with all elements that represents the same list item.\n *\n * It means that values for `listIndent`, and `listItemId` for all items are equal.\n *\n * @internal\n * @param listItem Starting list item element.\n * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included\n * in the result.\n */\nexport function getAllListItemBlocks(listItem, options = {}) {\n    return [\n        ...getListItemBlocks(listItem, { ...options, direction: 'backward' }),\n        ...getListItemBlocks(listItem, { ...options, direction: 'forward' })\n    ];\n}\n/**\n * Returns an array with elements that represents the same list item in the specified direction.\n *\n * It means that values for `listIndent` and `listItemId` for all items are equal.\n *\n * **Note**: For backward search the provided item is not included, but for forward search it is included in the result.\n *\n * @internal\n * @param listItem Starting list item element.\n * @param options.direction Walking direction.\n * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included in the result.\n */\nexport function getListItemBlocks(listItem, options = {}) {\n    const isForward = options.direction == 'forward';\n    const items = Array.from(new ListWalker(listItem, {\n        ...options,\n        includeSelf: isForward,\n        sameIndent: true,\n        sameAttributes: 'listItemId'\n    }));\n    return isForward ? items : items.reverse();\n}\n/**\n * Returns a list items nested inside the given list item.\n *\n * @internal\n */\nexport function getNestedListBlocks(listItem) {\n    return Array.from(new ListWalker(listItem, {\n        direction: 'forward',\n        higherIndent: true\n    }));\n}\n/**\n * Returns array of all blocks/items of the same list as given block (same indent, same type and properties).\n *\n * @internal\n * @param listItem Starting list item element.\n * @param options Additional list walker options to modify the range of returned list items.\n */\nexport function getListItems(listItem, options) {\n    const backwardBlocks = new ListWalker(listItem, {\n        sameIndent: true,\n        sameAttributes: 'listType',\n        ...options\n    });\n    const forwardBlocks = new ListWalker(listItem, {\n        sameIndent: true,\n        sameAttributes: 'listType',\n        includeSelf: true,\n        direction: 'forward',\n        ...options\n    });\n    return [\n        ...Array.from(backwardBlocks).reverse(),\n        ...forwardBlocks\n    ];\n}\n/**\n * Check if the given block is the first in the list item.\n *\n * @internal\n * @param listBlock The list block element.\n */\nexport function isFirstBlockOfListItem(listBlock) {\n    const previousSibling = ListWalker.first(listBlock, {\n        sameIndent: true,\n        sameAttributes: 'listItemId'\n    });\n    if (!previousSibling) {\n        return true;\n    }\n    return false;\n}\n/**\n * Check if the given block is the last in the list item.\n *\n * @internal\n */\nexport function isLastBlockOfListItem(listBlock) {\n    const nextSibling = ListWalker.first(listBlock, {\n        direction: 'forward',\n        sameIndent: true,\n        sameAttributes: 'listItemId'\n    });\n    if (!nextSibling) {\n        return true;\n    }\n    return false;\n}\n/**\n * Expands the given list of selected blocks to include the leading and tailing blocks of partially selected list items.\n *\n * @internal\n * @param blocks The list of selected blocks.\n * @param options.withNested Whether should include nested list items.\n */\nexport function expandListBlocksToCompleteItems(blocks, options = {}) {\n    blocks = toArray(blocks);\n    const higherIndent = options.withNested !== false;\n    const allBlocks = new Set();\n    for (const block of blocks) {\n        for (const itemBlock of getAllListItemBlocks(block, { higherIndent })) {\n            allBlocks.add(itemBlock);\n        }\n    }\n    return sortBlocks(allBlocks);\n}\n/**\n * Expands the given list of selected blocks to include all the items of the lists they're in.\n *\n * @internal\n * @param blocks The list of selected blocks.\n */\nexport function expandListBlocksToCompleteList(blocks) {\n    blocks = toArray(blocks);\n    const allBlocks = new Set();\n    for (const block of blocks) {\n        for (const itemBlock of getListItems(block)) {\n            allBlocks.add(itemBlock);\n        }\n    }\n    return sortBlocks(allBlocks);\n}\n/**\n * Splits the list item just before the provided list block.\n *\n * @internal\n * @param listBlock The list block element.\n * @param writer The model writer.\n * @returns The array of updated blocks.\n */\nexport function splitListItemBefore(listBlock, writer) {\n    const blocks = getListItemBlocks(listBlock, { direction: 'forward' });\n    const id = ListItemUid.next();\n    for (const block of blocks) {\n        writer.setAttribute('listItemId', id, block);\n    }\n    return blocks;\n}\n/**\n * Merges the list item with the parent list item.\n *\n * @internal\n * @param listBlock The list block element.\n * @param parentBlock The list block element to merge with.\n * @param writer The model writer.\n * @returns The array of updated blocks.\n */\nexport function mergeListItemBefore(listBlock, parentBlock, writer) {\n    const attributes = {};\n    for (const [key, value] of parentBlock.getAttributes()) {\n        if (key.startsWith('list')) {\n            attributes[key] = value;\n        }\n    }\n    const blocks = getListItemBlocks(listBlock, { direction: 'forward' });\n    for (const block of blocks) {\n        writer.setAttributes(attributes, block);\n    }\n    return blocks;\n}\n/**\n * Increases indentation of given list blocks.\n *\n * @internal\n * @param blocks The block or iterable of blocks.\n * @param writer The model writer.\n * @param options.expand Whether should expand the list of blocks to include complete list items.\n * @param options.indentBy The number of levels the indentation should change (could be negative).\n */\nexport function indentBlocks(blocks, writer, { expand, indentBy = 1 } = {}) {\n    blocks = toArray(blocks);\n    // Expand the selected blocks to contain the whole list items.\n    const allBlocks = expand ? expandListBlocksToCompleteItems(blocks) : blocks;\n    for (const block of allBlocks) {\n        const blockIndent = block.getAttribute('listIndent') + indentBy;\n        if (blockIndent < 0) {\n            removeListAttributes(block, writer);\n        }\n        else {\n            writer.setAttribute('listIndent', blockIndent, block);\n        }\n    }\n    return allBlocks;\n}\n/**\n * Decreases indentation of given list of blocks. If the indentation of some blocks matches the indentation\n * of surrounding blocks, they get merged together.\n *\n * @internal\n * @param blocks The block or iterable of blocks.\n * @param writer The model writer.\n */\nexport function outdentBlocksWithMerge(blocks, writer) {\n    blocks = toArray(blocks);\n    // Expand the selected blocks to contain the whole list items.\n    const allBlocks = expandListBlocksToCompleteItems(blocks);\n    const visited = new Set();\n    const referenceIndent = Math.min(...allBlocks.map(block => block.getAttribute('listIndent')));\n    const parentBlocks = new Map();\n    // Collect parent blocks before the list structure gets altered.\n    for (const block of allBlocks) {\n        parentBlocks.set(block, ListWalker.first(block, { lowerIndent: true }));\n    }\n    for (const block of allBlocks) {\n        if (visited.has(block)) {\n            continue;\n        }\n        visited.add(block);\n        const blockIndent = block.getAttribute('listIndent') - 1;\n        if (blockIndent < 0) {\n            removeListAttributes(block, writer);\n            continue;\n        }\n        // Merge with parent list item while outdenting and indent matches reference indent.\n        if (block.getAttribute('listIndent') == referenceIndent) {\n            const mergedBlocks = mergeListItemIfNotLast(block, parentBlocks.get(block), writer);\n            // All list item blocks are updated while merging so add those to visited set.\n            for (const mergedBlock of mergedBlocks) {\n                visited.add(mergedBlock);\n            }\n            // The indent level was updated while merging so continue to next block.\n            if (mergedBlocks.length) {\n                continue;\n            }\n        }\n        writer.setAttribute('listIndent', blockIndent, block);\n    }\n    return sortBlocks(visited);\n}\n/**\n * Removes all list attributes from the given blocks.\n *\n * @internal\n * @param blocks The block or iterable of blocks.\n * @param writer The model writer.\n * @returns Array of altered blocks.\n */\nexport function removeListAttributes(blocks, writer) {\n    blocks = toArray(blocks);\n    // Convert simple list items to plain paragraphs.\n    for (const block of blocks) {\n        if (block.is('element', 'listItem')) {\n            writer.rename(block, 'paragraph');\n        }\n    }\n    // Remove list attributes.\n    for (const block of blocks) {\n        for (const attributeKey of block.getAttributeKeys()) {\n            if (attributeKey.startsWith('list')) {\n                writer.removeAttribute(attributeKey, block);\n            }\n        }\n    }\n    return blocks;\n}\n/**\n * Checks whether the given blocks are related to a single list item.\n *\n * @internal\n * @param blocks The list block elements.\n */\nexport function isSingleListItem(blocks) {\n    if (!blocks.length) {\n        return false;\n    }\n    const firstItemId = blocks[0].getAttribute('listItemId');\n    if (!firstItemId) {\n        return false;\n    }\n    return !blocks.some(item => item.getAttribute('listItemId') != firstItemId);\n}\n/**\n * Modifies the indents of list blocks following the given list block so the indentation is valid after\n * the given block is no longer a list item.\n *\n * @internal\n * @param lastBlock The last list block that has become a non-list element.\n * @param writer The model writer.\n * @returns Array of altered blocks.\n */\nexport function outdentFollowingItems(lastBlock, writer) {\n    const changedBlocks = [];\n    // Start from the model item that is just after the last turned-off item.\n    let currentIndent = Number.POSITIVE_INFINITY;\n    // Correct indent of all items after the last turned off item.\n    // Rules that should be followed:\n    // 1. All direct sub-items of turned-off item should become indent 0, because the first item after it\n    //    will be the first item of a new list. Other items are at the same level, so should have same 0 index.\n    // 2. All items with indent lower than indent of turned-off item should become indent 0, because they\n    //    should not end up as a child of any of list items that they were not children of before.\n    // 3. All other items should have their indent changed relatively to it's parent.\n    //\n    // For example:\n    // 1  * --------\n    // 2     * --------\n    // 3        * --------\t\t\t<-- this is turned off.\n    // 4           * --------\t\t<-- this has to become indent = 0, because it will be first item on a new list.\n    // 5              * --------\t<-- this should be still be a child of item above, so indent = 1.\n    // 6        * --------\t\t\t<-- this has to become indent = 0, because it should not be a child of any of items above.\n    // 7           * --------\t\t<-- this should be still be a child of item above, so indent = 1.\n    // 8     * --------\t\t\t\t<-- this has to become indent = 0.\n    // 9        * --------\t\t\t<-- this should still be a child of item above, so indent = 1.\n    // 10          * --------\t\t<-- this should still be a child of item above, so indent = 2.\n    // 11          * --------\t\t<-- this should still be at the same level as item above, so indent = 2.\n    // 12 * --------\t\t\t\t<-- this and all below are left unchanged.\n    // 13    * --------\n    // 14       * --------\n    //\n    // After turning off 3 the list becomes:\n    //\n    // 1  * --------\n    // 2     * --------\n    //\n    // 3  --------\n    //\n    // 4  * --------\n    // 5     * --------\n    // 6  * --------\n    // 7     * --------\n    // 8  * --------\n    // 9     * --------\n    // 10       * --------\n    // 11       * --------\n    // 12 * --------\n    // 13    * --------\n    // 14       * --------\n    //\n    // Thanks to this algorithm no lists are mismatched and no items get unexpected children/parent, while\n    // those parent-child connection which are possible to maintain are still maintained. It's worth noting\n    // that this is the same effect that we would be get by multiple use of outdent command. However doing\n    // it like this is much more efficient because it's less operation (less memory usage, easier OT) and\n    // less conversion (faster).\n    for (const { node } of iterateSiblingListBlocks(lastBlock.nextSibling, 'forward')) {\n        // Check each next list item, as long as its indent is higher than 0.\n        const indent = node.getAttribute('listIndent');\n        // If the indent is 0 we are not going to change anything anyway.\n        if (indent == 0) {\n            break;\n        }\n        // We check if that's item indent is lower than current relative indent.\n        if (indent < currentIndent) {\n            // If it is, current relative indent becomes that indent.\n            currentIndent = indent;\n        }\n        // Fix indent relatively to current relative indent.\n        // Note, that if we just changed the current relative indent, the newIndent will be equal to 0.\n        const newIndent = indent - currentIndent;\n        writer.setAttribute('listIndent', newIndent, node);\n        changedBlocks.push(node);\n    }\n    return changedBlocks;\n}\n/**\n * Returns the array of given blocks sorted by model indexes (document order).\n *\n * @internal\n */\nexport function sortBlocks(blocks) {\n    return Array.from(blocks)\n        .filter(block => block.root.rootName !== '$graveyard')\n        .sort((a, b) => a.index - b.index);\n}\n/**\n * Returns a selected block object. If a selected object is inline or when there is no selected\n * object, `null` is returned.\n *\n * @internal\n * @param model The instance of editor model.\n * @returns Selected block object or `null`.\n */\nexport function getSelectedBlockObject(model) {\n    const selectedElement = model.document.selection.getSelectedElement();\n    if (!selectedElement) {\n        return null;\n    }\n    if (model.schema.isObject(selectedElement) && model.schema.isBlock(selectedElement)) {\n        return selectedElement;\n    }\n    return null;\n}\n/**\n * Checks whether the given block can be replaced by a listItem.\n *\n * Note that this is possible only when multiBlock = false option is set in feature config.\n *\n * @param block A block to be tested.\n * @param schema The schema of the document.\n */\nexport function canBecomeSimpleListItem(block, schema) {\n    return schema.checkChild(block.parent, 'listItem') && schema.checkChild(block, '$text') && !schema.isObject(block);\n}\n/**\n * Returns true if listType is of type `numbered` or `customNumbered`.\n */\nexport function isNumberedListType(listType) {\n    return listType == 'numbered' || listType == 'customNumbered';\n}\n/**\n * Merges a given block to the given parent block if parent is a list item and there is no more blocks in the same item.\n */\nfunction mergeListItemIfNotLast(block, parentBlock, writer) {\n    const parentItemBlocks = getListItemBlocks(parentBlock, { direction: 'forward' });\n    // Merge with parent only if outdented item wasn't the last one in its parent.\n    // Merge:\n    // * a\t\t\t->\t\t* a\n    //   * [b]\t\t->\t\t  b\n    //   c\t\t\t->\t\t  c\n    // Don't merge:\n    // * a\t\t\t->\t\t* a\n    //   * [b]\t\t-> \t\t* b\n    // * c\t\t\t->\t\t* c\n    if (parentItemBlocks.pop().index > block.index) {\n        return mergeListItemBefore(block, parentBlock, writer);\n    }\n    return [];\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module list/list/listindentcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { expandListBlocksToCompleteItems, indentBlocks, isFirstBlockOfListItem, isListItemBlock, isSingleListItem, outdentBlocksWithMerge, sortBlocks, splitListItemBefore } from './utils/model.js';\nimport ListWalker from './utils/listwalker.js';\n/**\n * The document list indent command. It is used by the {@link module:list/list~List list feature}.\n */\nexport default class ListIndentCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param editor The editor instance.\n     * @param indentDirection The direction of indent. If it is equal to `backward`, the command\n     * will outdent a list item.\n     */\n    constructor(editor, indentDirection) {\n        super(editor);\n        this._direction = indentDirection;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        this.isEnabled = this._checkEnabled();\n    }\n    /**\n     * Indents or outdents (depending on the {@link #constructor}'s `indentDirection` parameter) selected list items.\n     *\n     * @fires execute\n     * @fires afterExecute\n     */\n    execute() {\n        const model = this.editor.model;\n        const blocks = getSelectedListBlocks(model.document.selection);\n        model.change(writer => {\n            const changedBlocks = [];\n            // Handle selection contained in the single list item and starting in the following blocks.\n            if (isSingleListItem(blocks) && !isFirstBlockOfListItem(blocks[0])) {\n                // Allow increasing indent of following list item blocks.\n                if (this._direction == 'forward') {\n                    changedBlocks.push(...indentBlocks(blocks, writer));\n                }\n                // For indent make sure that indented blocks have a new ID.\n                // For outdent just split blocks from the list item (give them a new IDs).\n                changedBlocks.push(...splitListItemBefore(blocks[0], writer));\n            }\n            // More than a single list item is selected, or the first block of list item is selected.\n            else {\n                // Now just update the attributes of blocks.\n                if (this._direction == 'forward') {\n                    changedBlocks.push(...indentBlocks(blocks, writer, { expand: true }));\n                }\n                else {\n                    changedBlocks.push(...outdentBlocksWithMerge(blocks, writer));\n                }\n            }\n            // Align the list item type to match the previous list item (from the same list).\n            for (const block of changedBlocks) {\n                // This block become a plain block (for example a paragraph).\n                if (!block.hasAttribute('listType')) {\n                    continue;\n                }\n                const previousItemBlock = ListWalker.first(block, { sameIndent: true });\n                if (previousItemBlock) {\n                    writer.setAttribute('listType', previousItemBlock.getAttribute('listType'), block);\n                }\n            }\n            this._fireAfterExecute(changedBlocks);\n        });\n    }\n    /**\n     * Fires the `afterExecute` event.\n     *\n     * @param changedBlocks The changed list elements.\n     */\n    _fireAfterExecute(changedBlocks) {\n        this.fire('afterExecute', sortBlocks(new Set(changedBlocks)));\n    }\n    /**\n     * Checks whether the command can be enabled in the current context.\n     *\n     * @returns Whether the command should be enabled.\n     */\n    _checkEnabled() {\n        // Check whether any of position's ancestor is a list item.\n        let blocks = getSelectedListBlocks(this.editor.model.document.selection);\n        let firstBlock = blocks[0];\n        // If selection is not in a list item, the command is disabled.\n        if (!firstBlock) {\n            return false;\n        }\n        // If we are outdenting it is enough to be in list item. Every list item can always be outdented.\n        if (this._direction == 'backward') {\n            return true;\n        }\n        // A single block of a list item is selected, so it could be indented as a sublist.\n        if (isSingleListItem(blocks) && !isFirstBlockOfListItem(blocks[0])) {\n            return true;\n        }\n        blocks = expandListBlocksToCompleteItems(blocks);\n        firstBlock = blocks[0];\n        // Check if there is any list item before selected items that could become a parent of selected items.\n        const siblingItem = ListWalker.first(firstBlock, { sameIndent: true });\n        if (!siblingItem) {\n            return false;\n        }\n        if (siblingItem.getAttribute('listType') == firstBlock.getAttribute('listType')) {\n            return true;\n        }\n        return false;\n    }\n}\n/**\n * Returns an array of selected blocks truncated to the first non list block element.\n */\nfunction getSelectedListBlocks(selection) {\n    const blocks = Array.from(selection.getSelectedBlocks());\n    const firstNonListBlockIndex = blocks.findIndex(block => !isListItemBlock(block));\n    if (firstNonListBlockIndex != -1) {\n        blocks.length = firstNonListBlockIndex;\n    }\n    return blocks;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { splitListItemBefore, expandListBlocksToCompleteItems, getListItemBlocks, getListItems, removeListAttributes, outdentFollowingItems, ListItemUid, sortBlocks, getSelectedBlockObject, isListItemBlock, canBecomeSimpleListItem } from './utils/model.js';\n/**\n * The list command. It is used by the {@link module:list/list~List list feature}.\n */\nexport default class ListCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param editor The editor instance.\n     * @param type List type that will be handled by this command.\n     */\n    constructor(editor, type, options = {}) {\n        super(editor);\n        this.type = type;\n        this._listWalkerOptions = options.multiLevel ? {\n            higherIndent: true,\n            lowerIndent: true,\n            sameAttributes: []\n        } : undefined;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        this.value = this._getValue();\n        this.isEnabled = this._checkEnabled();\n    }\n    /**\n     * Executes the list command.\n     *\n     * @fires execute\n     * @fires afterExecute\n     * @param options Command options.\n     * @param options.forceValue If set, it will force the command behavior. If `true`, the command will try to convert the\n     * selected items and potentially the neighbor elements to the proper list items. If set to `false` it will convert selected elements\n     * to paragraphs. If not set, the command will toggle selected elements to list items or paragraphs, depending on the selection.\n     * @param options.additionalAttributes Additional attributes that are set for list items when the command is executed.\n     */\n    execute(options = {}) {\n        const model = this.editor.model;\n        const document = model.document;\n        const selectedBlockObject = getSelectedBlockObject(model);\n        const blocks = Array.from(document.selection.getSelectedBlocks())\n            .filter(block => model.schema.checkAttribute(block, 'listType') || canBecomeSimpleListItem(block, model.schema));\n        // Whether we are turning off some items.\n        const turnOff = options.forceValue !== undefined ? !options.forceValue : this.value;\n        model.change(writer => {\n            if (turnOff) {\n                const lastBlock = blocks[blocks.length - 1];\n                // Split the first block from the list item.\n                const itemBlocks = getListItemBlocks(lastBlock, { direction: 'forward' });\n                const changedBlocks = [];\n                if (itemBlocks.length > 1) {\n                    changedBlocks.push(...splitListItemBefore(itemBlocks[1], writer));\n                }\n                // Strip list attributes.\n                changedBlocks.push(...removeListAttributes(blocks, writer));\n                // Outdent items following the selected list item.\n                changedBlocks.push(...outdentFollowingItems(lastBlock, writer));\n                this._fireAfterExecute(changedBlocks);\n            }\n            // Changing type of list items for a collapsed selection inside a list item.\n            else if ((selectedBlockObject || document.selection.isCollapsed) && isListItemBlock(blocks[0])) {\n                const changedBlocks = getListItems(selectedBlockObject || blocks[0], this._listWalkerOptions);\n                for (const block of changedBlocks) {\n                    writer.setAttributes({\n                        ...options.additionalAttributes,\n                        listType: this.type\n                    }, block);\n                }\n                this._fireAfterExecute(changedBlocks);\n            }\n            // Turning on the list items for a non-collapsed selection.\n            else {\n                const changedBlocks = [];\n                for (const block of blocks) {\n                    // Promote the given block to the list item.\n                    if (!block.hasAttribute('listType')) {\n                        // Rename block to a simple list item if this option is enabled.\n                        if (!block.is('element', 'listItem') && canBecomeSimpleListItem(block, model.schema)) {\n                            writer.rename(block, 'listItem');\n                        }\n                        writer.setAttributes({\n                            ...options.additionalAttributes,\n                            listIndent: 0,\n                            listItemId: ListItemUid.next(),\n                            listType: this.type\n                        }, block);\n                        changedBlocks.push(block);\n                    }\n                    // Change the type of list item.\n                    else {\n                        for (const node of expandListBlocksToCompleteItems(block, { withNested: false })) {\n                            if (node.getAttribute('listType') != this.type) {\n                                writer.setAttributes({\n                                    ...options.additionalAttributes,\n                                    listType: this.type\n                                }, node);\n                                changedBlocks.push(node);\n                            }\n                        }\n                    }\n                }\n                this._fireAfterExecute(changedBlocks);\n            }\n        });\n    }\n    /**\n     * Fires the `afterExecute` event.\n     *\n     * @param changedBlocks The changed list elements.\n     */\n    _fireAfterExecute(changedBlocks) {\n        this.fire('afterExecute', sortBlocks(new Set(changedBlocks)));\n    }\n    /**\n     * Checks the command's {@link #value}.\n     *\n     * @returns The current value.\n     */\n    _getValue() {\n        const selection = this.editor.model.document.selection;\n        const blocks = Array.from(selection.getSelectedBlocks());\n        if (!blocks.length) {\n            return false;\n        }\n        for (const block of blocks) {\n            if (block.getAttribute('listType') != this.type) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Checks whether the command can be enabled in the current context.\n     *\n     * @returns Whether the command should be enabled.\n     */\n    _checkEnabled() {\n        const model = this.editor.model;\n        const schema = model.schema;\n        const selection = model.document.selection;\n        const blocks = Array.from(selection.getSelectedBlocks());\n        if (!blocks.length) {\n            return false;\n        }\n        // If command value is true it means that we are in list item, so the command should be enabled.\n        if (this.value) {\n            return true;\n        }\n        for (const block of blocks) {\n            if (schema.checkAttribute(block, 'listType') || canBecomeSimpleListItem(block, schema)) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module list/list/listmergecommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { getNestedListBlocks, indentBlocks, sortBlocks, isFirstBlockOfListItem, mergeListItemBefore, isSingleListItem, getSelectedBlockObject, isListItemBlock } from './utils/model.js';\nimport ListWalker from './utils/listwalker.js';\n/**\n * The document list merge command. It is used by the {@link module:list/list~List list feature}.\n */\nexport default class ListMergeCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param editor The editor instance.\n     * @param direction Whether list item should be merged before or after the selected block.\n     */\n    constructor(editor, direction) {\n        super(editor);\n        this._direction = direction;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        this.isEnabled = this._checkEnabled();\n    }\n    /**\n     * Merges list blocks together (depending on the {@link #constructor}'s `direction` parameter).\n     *\n     * @fires execute\n     * @fires afterExecute\n     * @param options Command options.\n     * @param options.shouldMergeOnBlocksContentLevel When set `true`, merging will be performed together\n     * with {@link module:engine/model/model~Model#deleteContent} to get rid of the inline content in the selection or take advantage\n     * of the heuristics in `deleteContent()` that helps convert lists into paragraphs in certain cases.\n     */\n    execute({ shouldMergeOnBlocksContentLevel = false } = {}) {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const changedBlocks = [];\n        model.change(writer => {\n            const { firstElement, lastElement } = this._getMergeSubjectElements(selection, shouldMergeOnBlocksContentLevel);\n            const firstIndent = firstElement.getAttribute('listIndent') || 0;\n            const lastIndent = lastElement.getAttribute('listIndent');\n            const lastElementId = lastElement.getAttribute('listItemId');\n            if (firstIndent != lastIndent) {\n                const nestedLastElementBlocks = getNestedListBlocks(lastElement);\n                changedBlocks.push(...indentBlocks([lastElement, ...nestedLastElementBlocks], writer, {\n                    indentBy: firstIndent - lastIndent,\n                    // If outdenting, the entire sub-tree that follows must be included.\n                    expand: firstIndent < lastIndent\n                }));\n            }\n            if (shouldMergeOnBlocksContentLevel) {\n                let sel = selection;\n                if (selection.isCollapsed) {\n                    sel = writer.createSelection(writer.createRange(writer.createPositionAt(firstElement, 'end'), writer.createPositionAt(lastElement, 0)));\n                }\n                // Delete selected content. Replace entire content only for non-collapsed selection.\n                model.deleteContent(sel, { doNotResetEntireContent: selection.isCollapsed });\n                // Get the last \"touched\" element after deleteContent call (can't use the lastElement because\n                // it could get merged into the firstElement while deleting content).\n                const lastElementAfterDelete = sel.getLastPosition().parent;\n                // Check if the element after it was in the same list item and adjust it if needed.\n                const nextSibling = lastElementAfterDelete.nextSibling;\n                changedBlocks.push(lastElementAfterDelete);\n                if (nextSibling && nextSibling !== lastElement && nextSibling.getAttribute('listItemId') == lastElementId) {\n                    changedBlocks.push(...mergeListItemBefore(nextSibling, lastElementAfterDelete, writer));\n                }\n            }\n            else {\n                changedBlocks.push(...mergeListItemBefore(lastElement, firstElement, writer));\n            }\n            this._fireAfterExecute(changedBlocks);\n        });\n    }\n    /**\n     * Fires the `afterExecute` event.\n     *\n     * @param changedBlocks The changed list elements.\n     */\n    _fireAfterExecute(changedBlocks) {\n        this.fire('afterExecute', sortBlocks(new Set(changedBlocks)));\n    }\n    /**\n     * Checks whether the command can be enabled in the current context.\n     *\n     * @returns Whether the command should be enabled.\n     */\n    _checkEnabled() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const selectedBlockObject = getSelectedBlockObject(model);\n        if (selection.isCollapsed || selectedBlockObject) {\n            const positionParent = selectedBlockObject || selection.getFirstPosition().parent;\n            if (!isListItemBlock(positionParent)) {\n                return false;\n            }\n            const siblingNode = this._direction == 'backward' ?\n                positionParent.previousSibling :\n                positionParent.nextSibling;\n            if (!siblingNode) {\n                return false;\n            }\n            if (isSingleListItem([positionParent, siblingNode])) {\n                return false;\n            }\n        }\n        else {\n            const lastPosition = selection.getLastPosition();\n            const firstPosition = selection.getFirstPosition();\n            // If deleting within a single block of a list item, there's no need to merge anything.\n            // The default delete should be executed instead.\n            if (lastPosition.parent === firstPosition.parent) {\n                return false;\n            }\n            if (!isListItemBlock(lastPosition.parent)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Returns the boundary elements the merge should be executed for. These are not necessarily selection's first\n     * and last position parents but sometimes sibling or even further blocks depending on the context.\n     *\n     * @param selection The selection the merge is executed for.\n     * @param shouldMergeOnBlocksContentLevel When `true`, merge is performed together with\n     * {@link module:engine/model/model~Model#deleteContent} to remove the inline content within the selection.\n     */\n    _getMergeSubjectElements(selection, shouldMergeOnBlocksContentLevel) {\n        const model = this.editor.model;\n        const selectedBlockObject = getSelectedBlockObject(model);\n        let firstElement, lastElement;\n        if (selection.isCollapsed || selectedBlockObject) {\n            const positionParent = selectedBlockObject || selection.getFirstPosition().parent;\n            const isFirstBlock = isFirstBlockOfListItem(positionParent);\n            if (this._direction == 'backward') {\n                lastElement = positionParent;\n                if (isFirstBlock && !shouldMergeOnBlocksContentLevel) {\n                    // For the \"c\" as an anchorElement:\n                    //  * a\n                    //    * b\n                    //  * [c]  <-- this block should be merged with \"a\"\n                    // It should find \"a\" element to merge with:\n                    //  * a\n                    //    * b\n                    //    c\n                    firstElement = ListWalker.first(positionParent, { sameIndent: true, lowerIndent: true });\n                }\n                else {\n                    firstElement = positionParent.previousSibling;\n                }\n            }\n            else {\n                // In case of the forward merge there is no case as above, just merge with next sibling.\n                firstElement = positionParent;\n                lastElement = positionParent.nextSibling;\n            }\n        }\n        else {\n            firstElement = selection.getFirstPosition().parent;\n            lastElement = selection.getLastPosition().parent;\n        }\n        return {\n            firstElement: firstElement,\n            lastElement: lastElement\n        };\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { isFirstBlockOfListItem, isListItemBlock, sortBlocks, splitListItemBefore } from './utils/model.js';\n/**\n * The document list split command that splits the list item at the selection.\n *\n * It is used by the {@link module:list/list~List list feature}.\n */\nexport default class ListSplitCommand extends Command {\n    /**\n     * Creates an instance of the command.\n     *\n     * @param editor The editor instance.\n     * @param direction Whether list item should be split before or after the selected block.\n     */\n    constructor(editor, direction) {\n        super(editor);\n        this._direction = direction;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        this.isEnabled = this._checkEnabled();\n    }\n    /**\n     * Splits the list item at the selection.\n     *\n     * @fires execute\n     * @fires afterExecute\n     */\n    execute() {\n        const editor = this.editor;\n        editor.model.change(writer => {\n            const changedBlocks = splitListItemBefore(this._getStartBlock(), writer);\n            this._fireAfterExecute(changedBlocks);\n        });\n    }\n    /**\n     * Fires the `afterExecute` event.\n     *\n     * @param changedBlocks The changed list elements.\n     */\n    _fireAfterExecute(changedBlocks) {\n        this.fire('afterExecute', sortBlocks(new Set(changedBlocks)));\n    }\n    /**\n     * Checks whether the command can be enabled in the current context.\n     *\n     * @returns Whether the command should be enabled.\n     */\n    _checkEnabled() {\n        const selection = this.editor.model.document.selection;\n        const block = this._getStartBlock();\n        return selection.isCollapsed &&\n            isListItemBlock(block) &&\n            !isFirstBlockOfListItem(block);\n    }\n    /**\n     * Returns the model element that is the main focus of the command (according to the current selection and command direction).\n     */\n    _getStartBlock() {\n        const doc = this.editor.model.document;\n        const positionParent = doc.selection.getFirstPosition().parent;\n        return (this._direction == 'before' ? positionParent : positionParent.nextSibling);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { expandListBlocksToCompleteItems, expandListBlocksToCompleteList, isFirstBlockOfListItem, isListItemBlock, isNumberedListType } from './utils/model.js';\n/**\n * A set of helpers related to document lists.\n */\nexport default class ListUtils extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ListUtils';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * Expands the given list of selected blocks to include all the items of the lists they're in.\n     *\n     * @param blocks The list of selected blocks.\n     */\n    expandListBlocksToCompleteList(blocks) {\n        return expandListBlocksToCompleteList(blocks);\n    }\n    /**\n     * Check if the given block is the first in the list item.\n     *\n     * @param listBlock The list block element.\n     */\n    isFirstBlockOfListItem(listBlock) {\n        return isFirstBlockOfListItem(listBlock);\n    }\n    /**\n     * Returns true if the given model node is a list item block.\n     *\n     * @param node A model node.\n     */\n    isListItemBlock(node) {\n        return isListItemBlock(node);\n    }\n    /**\n     * Expands the given list of selected blocks to include the leading and tailing blocks of partially selected list items.\n     *\n     * @param blocks The list of selected blocks.\n     * @param options.withNested Whether should include nested list items.\n     */\n    expandListBlocksToCompleteItems(blocks, options = {}) {\n        return expandListBlocksToCompleteItems(blocks, options);\n    }\n    /**\n     * Returns true if listType is of type `numbered` or `customNumbered`.\n     */\n    isNumberedListType(listType) {\n        return isNumberedListType(listType);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Checks if view element is a list type (ul or ol).\n *\n * @internal\n */\nexport function isListView(viewElement) {\n    return viewElement.is('element', 'ol') || viewElement.is('element', 'ul');\n}\n/**\n * Checks if view element is a list item (li).\n *\n * @internal\n */\nexport function isListItemView(viewElement) {\n    return viewElement.is('element', 'li');\n}\n/**\n * Calculates the indent value for a list item. Handles HTML compliant and non-compliant lists.\n *\n * Also, fixes non HTML compliant lists indents:\n *\n * ```\n * before:                                     fixed list:\n * OL                                          OL\n * |-> LI (parent LIs: 0)                      |-> LI     (indent: 0)\n *     |-> OL                                  |-> OL\n *         |-> OL                                  |\n *         |   |-> OL                              |\n *         |       |-> OL                          |\n *         |           |-> LI (parent LIs: 1)      |-> LI (indent: 1)\n *         |-> LI (parent LIs: 1)                  |-> LI (indent: 1)\n *\n * before:                                     fixed list:\n * OL                                          OL\n * |-> OL                                      |\n *     |-> OL                                  |\n *          |-> OL                             |\n *              |-> LI (parent LIs: 0)         |-> LI        (indent: 0)\n *\n * before:                                     fixed list:\n * OL                                          OL\n * |-> LI (parent LIs: 0)                      |-> LI         (indent: 0)\n * |-> OL                                          |-> OL\n *     |-> LI (parent LIs: 0)                          |-> LI (indent: 1)\n * ```\n *\n * @internal\n */\nexport function getIndent(listItem) {\n    let indent = 0;\n    let parent = listItem.parent;\n    while (parent) {\n        // Each LI in the tree will result in an increased indent for HTML compliant lists.\n        if (isListItemView(parent)) {\n            indent++;\n        }\n        else {\n            // If however the list is nested in other list we should check previous sibling of any of the list elements...\n            const previousSibling = parent.previousSibling;\n            // ...because the we might need increase its indent:\n            //\t\tbefore:                           fixed list:\n            //\t\tOL                                OL\n            //\t\t|-> LI (parent LIs: 0)            |-> LI         (indent: 0)\n            //\t\t|-> OL                                |-> OL\n            //\t\t    |-> LI (parent LIs: 0)                |-> LI (indent: 1)\n            if (previousSibling && isListItemView(previousSibling)) {\n                indent++;\n            }\n        }\n        parent = parent.parent;\n    }\n    return indent;\n}\n/**\n * Creates a list attribute element (ol or ul).\n *\n * @internal\n */\nexport function createListElement(writer, indent, type, id = getViewElementIdForListType(type, indent)) {\n    // Negative priorities so that restricted editing attribute won't wrap lists.\n    return writer.createAttributeElement(getViewElementNameForListType(type), null, {\n        priority: 2 * indent / 100 - 100,\n        id\n    });\n}\n/**\n * Creates a list item attribute element (li).\n *\n * @internal\n */\nexport function createListItemElement(writer, indent, id) {\n    // Negative priorities so that restricted editing attribute won't wrap list items.\n    return writer.createAttributeElement('li', null, {\n        priority: (2 * indent + 1) / 100 - 100,\n        id\n    });\n}\n/**\n * Returns a view element name for the given list type.\n *\n * @internal\n */\nexport function getViewElementNameForListType(type) {\n    return type == 'numbered' || type == 'customNumbered' ? 'ol' : 'ul';\n}\n/**\n * Returns a view element ID for the given list type and indent.\n *\n * @internal\n */\nexport function getViewElementIdForListType(type, indent) {\n    return `list-${type}-${indent}`;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { iterateSiblingListBlocks } from './listwalker.js';\nimport { getListItemBlocks, isListItemBlock, ListItemUid } from './model.js';\n/**\n * Based on the provided positions looks for the list head and stores it in the provided map.\n *\n * @internal\n * @param position The search starting position.\n * @param itemToListHead The map from list item element to the list head element.\n */\nexport function findAndAddListHeadToMap(position, itemToListHead) {\n    const previousNode = position.nodeBefore;\n    if (!isListItemBlock(previousNode)) {\n        const item = position.nodeAfter;\n        if (isListItemBlock(item)) {\n            itemToListHead.set(item, item);\n        }\n    }\n    else {\n        let listHead = previousNode;\n        // Previously, the loop below was defined like this:\n        //\n        // \t\tfor ( { node: listHead } of iterateSiblingListBlocks( listHead, 'backward' ) )\n        //\n        // Unfortunately, such a destructuring is incorrectly transpiled by Babel and the loop never ends.\n        // See: https://github.com/ckeditor/ckeditor5-react/issues/345.\n        for (const { node } of iterateSiblingListBlocks(listHead, 'backward')) {\n            listHead = node;\n            if (itemToListHead.has(listHead)) {\n                return;\n            }\n        }\n        itemToListHead.set(previousNode, listHead);\n    }\n}\n/**\n * Scans the list starting from the given list head element and fixes items' indentation.\n *\n * @internal\n * @param listNodes The iterable of list nodes.\n * @param writer The model writer.\n * @returns Whether the model was modified.\n */\nexport function fixListIndents(listNodes, writer) {\n    let maxIndent = 0; // Guards local sublist max indents that need fixing.\n    let prevIndent = -1; // Previous item indent.\n    let fixBy = null;\n    let applied = false;\n    for (const { node } of listNodes) {\n        const itemIndent = node.getAttribute('listIndent');\n        if (itemIndent > maxIndent) {\n            let newIndent;\n            if (fixBy === null) {\n                fixBy = itemIndent - maxIndent;\n                newIndent = maxIndent;\n            }\n            else {\n                if (fixBy > itemIndent) {\n                    fixBy = itemIndent;\n                }\n                newIndent = itemIndent - fixBy;\n            }\n            if (newIndent > prevIndent + 1) {\n                newIndent = prevIndent + 1;\n            }\n            writer.setAttribute('listIndent', newIndent, node);\n            applied = true;\n            prevIndent = newIndent;\n        }\n        else {\n            fixBy = null;\n            maxIndent = itemIndent + 1;\n            prevIndent = itemIndent;\n        }\n    }\n    return applied;\n}\n/**\n * Scans the list starting from the given list head element and fixes items' types.\n *\n * @internal\n * @param listNodes The iterable of list nodes.\n * @param seenIds The set of already known IDs.\n * @param writer The model writer.\n * @returns Whether the model was modified.\n */\nexport function fixListItemIds(listNodes, seenIds, writer) {\n    const visited = new Set();\n    let applied = false;\n    for (const { node } of listNodes) {\n        if (visited.has(node)) {\n            continue;\n        }\n        let listType = node.getAttribute('listType');\n        let listItemId = node.getAttribute('listItemId');\n        // Use a new ID if this one was spot earlier (even in other list).\n        if (seenIds.has(listItemId)) {\n            listItemId = ListItemUid.next();\n        }\n        seenIds.add(listItemId);\n        // Make sure that all items in a simple list have unique IDs.\n        if (node.is('element', 'listItem')) {\n            if (node.getAttribute('listItemId') != listItemId) {\n                writer.setAttribute('listItemId', listItemId, node);\n                applied = true;\n            }\n            continue;\n        }\n        for (const block of getListItemBlocks(node, { direction: 'forward' })) {\n            visited.add(block);\n            // Use a new ID if a block of a bigger list item has different type.\n            if (block.getAttribute('listType') != listType) {\n                listItemId = ListItemUid.next();\n                listType = block.getAttribute('listType');\n            }\n            if (block.getAttribute('listItemId') != listItemId) {\n                writer.setAttribute('listItemId', listItemId, block);\n                applied = true;\n            }\n        }\n    }\n    return applied;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { getAllListItemBlocks, getListItemBlocks, isListItemBlock, isFirstBlockOfListItem, ListItemUid } from './utils/model.js';\nimport { createListElement, createListItemElement, getIndent, isListView, isListItemView } from './utils/view.js';\nimport ListWalker, { iterateSiblingListBlocks } from './utils/listwalker.js';\nimport { findAndAddListHeadToMap } from './utils/postfixers.js';\n/**\n * Returns the upcast converter for list items. It's supposed to work after the block converters (content inside list items) are converted.\n *\n * @internal\n */\nexport function listItemUpcastConverter() {\n    return (evt, data, conversionApi) => {\n        const { writer, schema } = conversionApi;\n        if (!data.modelRange) {\n            return;\n        }\n        const items = Array.from(data.modelRange.getItems({ shallow: true }))\n            .filter((item) => schema.checkAttribute(item, 'listItemId'));\n        if (!items.length) {\n            return;\n        }\n        const listItemId = ListItemUid.next();\n        const listIndent = getIndent(data.viewItem);\n        let listType = data.viewItem.parent && data.viewItem.parent.is('element', 'ol') ? 'numbered' : 'bulleted';\n        // Preserve list type if was already set (for example by to-do list feature).\n        const firstItemListType = items[0].getAttribute('listType');\n        if (firstItemListType) {\n            listType = firstItemListType;\n        }\n        const attributes = {\n            listItemId,\n            listIndent,\n            listType\n        };\n        for (const item of items) {\n            // Set list attributes only on same level items, those nested deeper are already handled by the recursive conversion.\n            if (!item.hasAttribute('listItemId')) {\n                writer.setAttributes(attributes, item);\n            }\n        }\n        if (items.length > 1) {\n            // Make sure that list item that contain only nested list will preserve paragraph for itself:\n            //\t<ul>\n            //\t\t<li>\n            //\t\t\t<p></p>  <-- this one must be kept\n            //\t\t\t<ul>\n            //\t\t\t\t<li></li>\n            //\t\t\t</ul>\n            //\t\t</li>\n            //\t</ul>\n            if (items[1].getAttribute('listItemId') != attributes.listItemId) {\n                conversionApi.keepEmptyElement(items[0]);\n            }\n        }\n    };\n}\n/**\n * Returns a model document change:data event listener that triggers conversion of related items if needed.\n *\n * @internal\n * @param model The editor model.\n * @param editing The editing controller.\n * @param attributeNames The list of all model list attributes (including registered strategies).\n * @param listEditing The document list editing plugin.\n */\nexport function reconvertItemsOnDataChange(model, editing, attributeNames, listEditing) {\n    return () => {\n        const changes = model.document.differ.getChanges();\n        const itemsToRefresh = [];\n        const itemToListHead = new Map();\n        const changedItems = new Set();\n        for (const entry of changes) {\n            if (entry.type == 'insert' && entry.name != '$text') {\n                findAndAddListHeadToMap(entry.position, itemToListHead);\n                // Insert of a non-list item.\n                if (!entry.attributes.has('listItemId')) {\n                    findAndAddListHeadToMap(entry.position.getShiftedBy(entry.length), itemToListHead);\n                }\n                else {\n                    changedItems.add(entry.position.nodeAfter);\n                }\n            }\n            // Removed list item.\n            else if (entry.type == 'remove' && entry.attributes.has('listItemId')) {\n                findAndAddListHeadToMap(entry.position, itemToListHead);\n            }\n            // Changed list attribute.\n            else if (entry.type == 'attribute') {\n                const item = entry.range.start.nodeAfter;\n                if (attributeNames.includes(entry.attributeKey)) {\n                    findAndAddListHeadToMap(entry.range.start, itemToListHead);\n                    if (entry.attributeNewValue === null) {\n                        findAndAddListHeadToMap(entry.range.start.getShiftedBy(1), itemToListHead);\n                        // Check if paragraph should be converted from bogus to plain paragraph.\n                        if (doesItemBlockRequiresRefresh(item)) {\n                            itemsToRefresh.push(item);\n                        }\n                    }\n                    else {\n                        changedItems.add(item);\n                    }\n                }\n                else if (isListItemBlock(item)) {\n                    // Some other attribute was changed on the list item,\n                    // check if paragraph does not need to be converted to bogus or back.\n                    if (doesItemBlockRequiresRefresh(item)) {\n                        itemsToRefresh.push(item);\n                    }\n                }\n            }\n        }\n        for (const listHead of itemToListHead.values()) {\n            itemsToRefresh.push(...collectListItemsToRefresh(listHead, changedItems));\n        }\n        for (const item of new Set(itemsToRefresh)) {\n            editing.reconvertItem(item);\n        }\n    };\n    function collectListItemsToRefresh(listHead, changedItems) {\n        const itemsToRefresh = [];\n        const visited = new Set();\n        const stack = [];\n        for (const { node, previous } of iterateSiblingListBlocks(listHead, 'forward')) {\n            if (visited.has(node)) {\n                continue;\n            }\n            const itemIndent = node.getAttribute('listIndent');\n            // Current node is at the lower indent so trim the stack.\n            if (previous && itemIndent < previous.getAttribute('listIndent')) {\n                stack.length = itemIndent + 1;\n            }\n            // Update the stack for the current indent level.\n            stack[itemIndent] = Object.fromEntries(Array.from(node.getAttributes())\n                .filter(([key]) => attributeNames.includes(key)));\n            // Find all blocks of the current node.\n            const blocks = getListItemBlocks(node, { direction: 'forward' });\n            for (const block of blocks) {\n                visited.add(block);\n                // Check if bogus vs plain paragraph needs refresh.\n                if (doesItemBlockRequiresRefresh(block, blocks)) {\n                    itemsToRefresh.push(block);\n                }\n                // Check if wrapping with UL, OL, LIs needs refresh.\n                else if (doesItemWrappingRequiresRefresh(block, stack, changedItems)) {\n                    itemsToRefresh.push(block);\n                }\n            }\n        }\n        return itemsToRefresh;\n    }\n    function doesItemBlockRequiresRefresh(item, blocks) {\n        const viewElement = editing.mapper.toViewElement(item);\n        if (!viewElement) {\n            return false;\n        }\n        const needsRefresh = listEditing.fire('checkElement', {\n            modelElement: item,\n            viewElement\n        });\n        if (needsRefresh) {\n            return true;\n        }\n        if (!item.is('element', 'paragraph') && !item.is('element', 'listItem')) {\n            return false;\n        }\n        const useBogus = shouldUseBogusParagraph(item, attributeNames, blocks);\n        if (useBogus && viewElement.is('element', 'p')) {\n            return true;\n        }\n        else if (!useBogus && viewElement.is('element', 'span')) {\n            return true;\n        }\n        return false;\n    }\n    function doesItemWrappingRequiresRefresh(item, stack, changedItems) {\n        // Items directly affected by some \"change\" don't need a refresh, they will be converted by their own changes.\n        if (changedItems.has(item)) {\n            return false;\n        }\n        const viewElement = editing.mapper.toViewElement(item);\n        let indent = stack.length - 1;\n        // Traverse down the stack to the root to verify if all ULs, OLs, and LIs are as expected.\n        for (let element = viewElement.parent; !element.is('editableElement'); element = element.parent) {\n            const isListItemElement = isListItemView(element);\n            const isListElement = isListView(element);\n            if (!isListElement && !isListItemElement) {\n                continue;\n            }\n            const eventName = `checkAttributes:${isListItemElement ? 'item' : 'list'}`;\n            const needsRefresh = listEditing.fire(eventName, {\n                viewElement: element,\n                modelAttributes: stack[indent]\n            });\n            if (needsRefresh) {\n                break;\n            }\n            if (isListElement) {\n                indent--;\n                // Don't need to iterate further if we already know that the item is wrapped appropriately.\n                if (indent < 0) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n}\n/**\n * Returns the list item downcast converter.\n *\n * @internal\n * @param attributeNames A list of attribute names that should be converted if they are set.\n * @param strategies The strategies.\n * @param model The model.\n */\nexport function listItemDowncastConverter(attributeNames, strategies, model, { dataPipeline } = {}) {\n    const consumer = createAttributesConsumer(attributeNames);\n    return (evt, data, conversionApi) => {\n        const { writer, mapper, consumable } = conversionApi;\n        const listItem = data.item;\n        if (!attributeNames.includes(data.attributeKey)) {\n            return;\n        }\n        // Test if attributes on the converted items are not consumed.\n        if (!consumer(listItem, consumable)) {\n            return;\n        }\n        // Use positions mapping instead of mapper.toViewElement( listItem ) to find outermost view element.\n        // This is for cases when mapping is using inner view element like in the code blocks (pre > code).\n        const viewElement = findMappedViewElement(listItem, mapper, model);\n        // Remove custom item marker.\n        removeCustomMarkerElements(viewElement, writer, mapper);\n        // Unwrap element from current list wrappers.\n        unwrapListItemBlock(viewElement, writer);\n        // Insert custom item marker.\n        const viewRange = insertCustomMarkerElements(listItem, viewElement, strategies, writer, { dataPipeline });\n        // Then wrap them with the new list wrappers (UL, OL, LI).\n        wrapListItemBlock(listItem, viewRange, strategies, writer);\n    };\n}\n/**\n * The 'remove' downcast converter for custom markers.\n */\nexport function listItemDowncastRemoveConverter(schema) {\n    return (evt, data, conversionApi) => {\n        const { writer, mapper } = conversionApi;\n        const elementName = evt.name.split(':')[1];\n        // Do not remove marker if the deleted element is some inline object inside paragraph.\n        // See https://github.com/cksource/ckeditor5-internal/issues/3680.\n        if (!schema.checkAttribute(elementName, 'listItemId')) {\n            return;\n        }\n        // Find the view range start position by mapping the model position at which the remove happened.\n        const viewStart = mapper.toViewPosition(data.position);\n        const modelEnd = data.position.getShiftedBy(data.length);\n        const viewEnd = mapper.toViewPosition(modelEnd, { isPhantom: true });\n        // Trim the range to remove in case some UI elements are on the view range boundaries.\n        const viewRange = writer.createRange(viewStart, viewEnd).getTrimmed();\n        // Use positions mapping instead of mapper.toViewElement( listItem ) to find outermost view element.\n        // This is for cases when mapping is using inner view element like in the code blocks (pre > code).\n        const viewElement = viewRange.end.nodeBefore;\n        /* istanbul ignore next -- @preserve */\n        if (!viewElement) {\n            return;\n        }\n        // Remove custom item marker.\n        removeCustomMarkerElements(viewElement, writer, mapper);\n    };\n}\n/**\n * Returns the bogus paragraph view element creator. A bogus paragraph is used if a list item contains only a single block or nested list.\n *\n * @internal\n * @param attributeNames The list of all model list attributes (including registered strategies).\n */\nexport function bogusParagraphCreator(attributeNames, { dataPipeline } = {}) {\n    return (modelElement, { writer }) => {\n        // Convert only if a bogus paragraph should be used.\n        if (!shouldUseBogusParagraph(modelElement, attributeNames)) {\n            return null;\n        }\n        if (!dataPipeline) {\n            return writer.createContainerElement('span', { class: 'ck-list-bogus-paragraph' });\n        }\n        // Using `<p>` in case there are some markers on it and transparentRendering will render it anyway.\n        const viewElement = writer.createContainerElement('p');\n        writer.setCustomProperty('dataPipeline:transparentRendering', true, viewElement);\n        return viewElement;\n    };\n}\n/**\n * Helper for mapping mode to view elements. It's using positions mapping instead of mapper.toViewElement( element )\n * to find outermost view element. This is for cases when mapping is using inner view element like in the code blocks (pre > code).\n *\n * @internal\n * @param element The model element.\n * @param mapper The mapper instance.\n * @param model The model.\n */\nexport function findMappedViewElement(element, mapper, model) {\n    const modelRange = model.createRangeOn(element);\n    const viewRange = mapper.toViewRange(modelRange).getTrimmed();\n    return viewRange.end.nodeBefore;\n}\n/**\n * The model to view custom position mapping for cases when marker is injected at the beginning of a block.\n */\nexport function createModelToViewPositionMapper(strategies, view) {\n    return (evt, data) => {\n        if (data.modelPosition.offset > 0) {\n            return;\n        }\n        const positionParent = data.modelPosition.parent;\n        if (!isListItemBlock(positionParent)) {\n            return;\n        }\n        if (!strategies.some(strategy => (strategy.scope == 'itemMarker' &&\n            strategy.canInjectMarkerIntoElement &&\n            strategy.canInjectMarkerIntoElement(positionParent)))) {\n            return;\n        }\n        const viewElement = data.mapper.toViewElement(positionParent);\n        const viewRange = view.createRangeIn(viewElement);\n        const viewWalker = viewRange.getWalker();\n        let positionAfterLastMarker = viewRange.start;\n        for (const { item } of viewWalker) {\n            // Walk only over the non-mapped elements (UIElements, AttributeElements, $text, or any other element without mapping).\n            if (item.is('element') && data.mapper.toModelElement(item) || item.is('$textProxy')) {\n                break;\n            }\n            if (item.is('element') && item.getCustomProperty('listItemMarker')) {\n                positionAfterLastMarker = view.createPositionAfter(item);\n                // Jump over the content of the marker (this is not needed for UIElement but required for other element types).\n                viewWalker.skip(({ previousPosition }) => !previousPosition.isEqual(positionAfterLastMarker));\n            }\n        }\n        data.viewPosition = positionAfterLastMarker;\n    };\n}\n/**\n * Removes a custom marker elements and item wrappers related to that marker.\n */\nfunction removeCustomMarkerElements(viewElement, viewWriter, mapper) {\n    // Remove item wrapper.\n    while (viewElement.parent.is('attributeElement') && viewElement.parent.getCustomProperty('listItemWrapper')) {\n        viewWriter.unwrap(viewWriter.createRangeOn(viewElement), viewElement.parent);\n    }\n    // Remove custom item markers.\n    const markersToRemove = [];\n    // Markers before a block.\n    collectMarkersToRemove(viewWriter.createPositionBefore(viewElement).getWalker({ direction: 'backward' }));\n    // Markers inside a block.\n    collectMarkersToRemove(viewWriter.createRangeIn(viewElement).getWalker());\n    for (const marker of markersToRemove) {\n        viewWriter.remove(marker);\n    }\n    function collectMarkersToRemove(viewWalker) {\n        for (const { item } of viewWalker) {\n            // Walk only over the non-mapped elements (UIElements, AttributeElements, $text, or any other element without mapping).\n            if (item.is('element') && mapper.toModelElement(item)) {\n                break;\n            }\n            if (item.is('element') && item.getCustomProperty('listItemMarker')) {\n                markersToRemove.push(item);\n            }\n        }\n    }\n}\n/**\n * Inserts a custom marker elements and wraps first block of a list item if marker requires it.\n */\nfunction insertCustomMarkerElements(listItem, viewElement, strategies, writer, { dataPipeline }) {\n    let viewRange = writer.createRangeOn(viewElement);\n    // Marker can be inserted only before the first block of a list item.\n    if (!isFirstBlockOfListItem(listItem)) {\n        return viewRange;\n    }\n    for (const strategy of strategies) {\n        if (strategy.scope != 'itemMarker') {\n            continue;\n        }\n        // Create the custom marker element and inject it before the first block of the list item.\n        const markerElement = strategy.createElement(writer, listItem, { dataPipeline });\n        if (!markerElement) {\n            continue;\n        }\n        writer.setCustomProperty('listItemMarker', true, markerElement);\n        if (strategy.canInjectMarkerIntoElement && strategy.canInjectMarkerIntoElement(listItem)) {\n            writer.insert(writer.createPositionAt(viewElement, 0), markerElement);\n        }\n        else {\n            writer.insert(viewRange.start, markerElement);\n            viewRange = writer.createRange(writer.createPositionBefore(markerElement), writer.createPositionAfter(viewElement));\n        }\n        // Wrap the marker and optionally the first block with an attribute element (label for to-do lists).\n        if (!strategy.createWrapperElement || !strategy.canWrapElement) {\n            continue;\n        }\n        const wrapper = strategy.createWrapperElement(writer, listItem, { dataPipeline });\n        writer.setCustomProperty('listItemWrapper', true, wrapper);\n        // The whole block can be wrapped...\n        if (strategy.canWrapElement(listItem)) {\n            viewRange = writer.wrap(viewRange, wrapper);\n        }\n        else {\n            // ... or only the marker element (if the block is downcasted to heading or block widget).\n            viewRange = writer.wrap(writer.createRangeOn(markerElement), wrapper);\n            viewRange = writer.createRange(viewRange.start, writer.createPositionAfter(viewElement));\n        }\n    }\n    return viewRange;\n}\n/**\n * Unwraps all ol, ul, and li attribute elements that are wrapping the provided view element.\n */\nfunction unwrapListItemBlock(viewElement, viewWriter) {\n    let attributeElement = viewElement.parent;\n    while (attributeElement.is('attributeElement') && ['ul', 'ol', 'li'].includes(attributeElement.name)) {\n        const parentElement = attributeElement.parent;\n        viewWriter.unwrap(viewWriter.createRangeOn(viewElement), attributeElement);\n        attributeElement = parentElement;\n    }\n}\n/**\n * Wraps the given list item with appropriate attribute elements for ul, ol, and li.\n */\nfunction wrapListItemBlock(listItem, viewRange, strategies, writer) {\n    if (!listItem.hasAttribute('listIndent')) {\n        return;\n    }\n    const listItemIndent = listItem.getAttribute('listIndent');\n    let currentListItem = listItem;\n    for (let indent = listItemIndent; indent >= 0; indent--) {\n        const listItemViewElement = createListItemElement(writer, indent, currentListItem.getAttribute('listItemId'));\n        const listViewElement = createListElement(writer, indent, currentListItem.getAttribute('listType'));\n        for (const strategy of strategies) {\n            if ((strategy.scope == 'list' || strategy.scope == 'item') &&\n                currentListItem.hasAttribute(strategy.attributeName)) {\n                strategy.setAttributeOnDowncast(writer, currentListItem.getAttribute(strategy.attributeName), strategy.scope == 'list' ? listViewElement : listItemViewElement);\n            }\n        }\n        viewRange = writer.wrap(viewRange, listItemViewElement);\n        viewRange = writer.wrap(viewRange, listViewElement);\n        if (indent == 0) {\n            break;\n        }\n        currentListItem = ListWalker.first(currentListItem, { lowerIndent: true });\n        // There is no list item with lower indent, this means this is a document fragment containing\n        // only a part of nested list (like copy to clipboard) so we don't need to try to wrap it further.\n        if (!currentListItem) {\n            break;\n        }\n    }\n}\n// Returns the function that is responsible for consuming attributes that are set on the model node.\nfunction createAttributesConsumer(attributeNames) {\n    return (node, consumable) => {\n        const events = [];\n        // Collect all set attributes that are triggering conversion.\n        for (const attributeName of attributeNames) {\n            if (node.hasAttribute(attributeName)) {\n                events.push(`attribute:${attributeName}`);\n            }\n        }\n        if (!events.every(event => consumable.test(node, event) !== false)) {\n            return false;\n        }\n        events.forEach(event => consumable.consume(node, event));\n        return true;\n    };\n}\n// Whether the given item should be rendered as a bogus paragraph.\nfunction shouldUseBogusParagraph(item, attributeNames, blocks = getAllListItemBlocks(item)) {\n    if (!isListItemBlock(item)) {\n        return false;\n    }\n    for (const attributeKey of item.getAttributeKeys()) {\n        // Ignore selection attributes stored on block elements.\n        if (attributeKey.startsWith('selection:')) {\n            continue;\n        }\n        // Don't use bogus paragraph if there are attributes from other features.\n        if (!attributeNames.includes(attributeKey)) {\n            return false;\n        }\n    }\n    return blocks.length < 2;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module list/list/listediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Delete } from 'ckeditor5/src/typing.js';\nimport { Enter } from 'ckeditor5/src/enter.js';\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\nimport ListIndentCommand from './listindentcommand.js';\nimport ListCommand from './listcommand.js';\nimport ListMergeCommand from './listmergecommand.js';\nimport ListSplitCommand from './listsplitcommand.js';\nimport ListUtils from './listutils.js';\nimport { bogusParagraphCreator, createModelToViewPositionMapper, listItemDowncastConverter, listItemDowncastRemoveConverter, listItemUpcastConverter, reconvertItemsOnDataChange } from './converters.js';\nimport { findAndAddListHeadToMap, fixListIndents, fixListItemIds } from './utils/postfixers.js';\nimport { getAllListItemBlocks, isFirstBlockOfListItem, isLastBlockOfListItem, isSingleListItem, getSelectedBlockObject, isListItemBlock, removeListAttributes, ListItemUid } from './utils/model.js';\nimport { getViewElementIdForListType, getViewElementNameForListType } from './utils/view.js';\nimport ListWalker, { ListBlocksIterable } from './utils/listwalker.js';\nimport { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';\nimport '../../theme/documentlist.css';\nimport '../../theme/list.css';\n/**\n * A list of base list model attributes.\n */\nconst LIST_BASE_ATTRIBUTES = ['listType', 'listIndent', 'listItemId'];\n/**\n * The editing part of the document-list feature. It handles creating, editing and removing lists and list items.\n */\nexport default class ListEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ListEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [Enter, Delete, ListUtils, ClipboardPipeline];\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        /**\n         * The list of registered downcast strategies.\n         */\n        this._downcastStrategies = [];\n        editor.config.define('list.multiBlock', true);\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        const multiBlock = editor.config.get('list.multiBlock');\n        if (editor.plugins.has('LegacyListEditing')) {\n            /**\n             * The `List` feature can not be loaded together with the `LegacyList` plugin.\n             *\n             * @error list-feature-conflict\n             * @param conflictPlugin Name of the plugin.\n             */\n            throw new CKEditorError('list-feature-conflict', this, { conflictPlugin: 'LegacyListEditing' });\n        }\n        model.schema.register('$listItem', { allowAttributes: LIST_BASE_ATTRIBUTES });\n        if (multiBlock) {\n            model.schema.extend('$container', { allowAttributesOf: '$listItem' });\n            model.schema.extend('$block', { allowAttributesOf: '$listItem' });\n            model.schema.extend('$blockObject', { allowAttributesOf: '$listItem' });\n        }\n        else {\n            model.schema.register('listItem', {\n                inheritAllFrom: '$block',\n                allowAttributesOf: '$listItem'\n            });\n        }\n        for (const attribute of LIST_BASE_ATTRIBUTES) {\n            model.schema.setAttributeProperties(attribute, {\n                copyOnReplace: true\n            });\n        }\n        // Register commands.\n        editor.commands.add('numberedList', new ListCommand(editor, 'numbered'));\n        editor.commands.add('bulletedList', new ListCommand(editor, 'bulleted'));\n        editor.commands.add('customNumberedList', new ListCommand(editor, 'customNumbered', { multiLevel: true }));\n        editor.commands.add('customBulletedList', new ListCommand(editor, 'customBulleted', { multiLevel: true }));\n        editor.commands.add('indentList', new ListIndentCommand(editor, 'forward'));\n        editor.commands.add('outdentList', new ListIndentCommand(editor, 'backward'));\n        editor.commands.add('splitListItemBefore', new ListSplitCommand(editor, 'before'));\n        editor.commands.add('splitListItemAfter', new ListSplitCommand(editor, 'after'));\n        if (multiBlock) {\n            editor.commands.add('mergeListItemBackward', new ListMergeCommand(editor, 'backward'));\n            editor.commands.add('mergeListItemForward', new ListMergeCommand(editor, 'forward'));\n        }\n        this._setupDeleteIntegration();\n        this._setupEnterIntegration();\n        this._setupTabIntegration();\n        this._setupClipboardIntegration();\n        this._setupAccessibilityIntegration();\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        const editor = this.editor;\n        const commands = editor.commands;\n        const indent = commands.get('indent');\n        const outdent = commands.get('outdent');\n        if (indent) {\n            // Priority is high due to integration with `IndentBlock` plugin. We want to indent list first and if it's not possible\n            // user can indent content with `IndentBlock` plugin.\n            indent.registerChildCommand(commands.get('indentList'), { priority: 'high' });\n        }\n        if (outdent) {\n            // Priority is lowest due to integration with `IndentBlock` and `IndentCode` plugins.\n            // First we want to allow user to outdent all indendations from other features then he can oudent list item.\n            outdent.registerChildCommand(commands.get('outdentList'), { priority: 'lowest' });\n        }\n        // Register conversion and model post-fixer after other plugins had a chance to register their attribute strategies.\n        this._setupModelPostFixing();\n        this._setupConversion();\n    }\n    /**\n     * Registers a downcast strategy.\n     *\n     * **Note**: Strategies must be registered in the `Plugin#init()` phase so that it can be applied\n     * in the `ListEditing#afterInit()`.\n     *\n     * @param strategy The downcast strategy to register.\n     */\n    registerDowncastStrategy(strategy) {\n        this._downcastStrategies.push(strategy);\n    }\n    /**\n     * Returns list of model attribute names that should affect downcast conversion.\n     */\n    getListAttributeNames() {\n        return [\n            ...LIST_BASE_ATTRIBUTES,\n            ...this._downcastStrategies.map(strategy => strategy.attributeName)\n        ];\n    }\n    /**\n     * Attaches the listener to the {@link module:engine/view/document~Document#event:delete} event and handles backspace/delete\n     * keys in and around document lists.\n     */\n    _setupDeleteIntegration() {\n        const editor = this.editor;\n        const mergeBackwardCommand = editor.commands.get('mergeListItemBackward');\n        const mergeForwardCommand = editor.commands.get('mergeListItemForward');\n        this.listenTo(editor.editing.view.document, 'delete', (evt, data) => {\n            const selection = editor.model.document.selection;\n            // Let the Widget plugin take care of block widgets while deleting (https://github.com/ckeditor/ckeditor5/issues/11346).\n            if (getSelectedBlockObject(editor.model)) {\n                return;\n            }\n            editor.model.change(() => {\n                const firstPosition = selection.getFirstPosition();\n                if (selection.isCollapsed && data.direction == 'backward') {\n                    if (!firstPosition.isAtStart) {\n                        return;\n                    }\n                    const positionParent = firstPosition.parent;\n                    if (!isListItemBlock(positionParent)) {\n                        return;\n                    }\n                    const previousBlock = ListWalker.first(positionParent, {\n                        sameAttributes: 'listType',\n                        sameIndent: true\n                    });\n                    // Outdent the first block of a first list item.\n                    if (!previousBlock && positionParent.getAttribute('listIndent') === 0) {\n                        if (!isLastBlockOfListItem(positionParent)) {\n                            editor.execute('splitListItemAfter');\n                        }\n                        editor.execute('outdentList');\n                    }\n                    // Merge block with previous one (on the block level or on the content level).\n                    else {\n                        if (!mergeBackwardCommand || !mergeBackwardCommand.isEnabled) {\n                            return;\n                        }\n                        mergeBackwardCommand.execute({\n                            shouldMergeOnBlocksContentLevel: shouldMergeOnBlocksContentLevel(editor.model, 'backward')\n                        });\n                    }\n                    data.preventDefault();\n                    evt.stop();\n                }\n                // Non-collapsed selection or forward delete.\n                else {\n                    // Collapsed selection should trigger forward merging only if at the end of a block.\n                    if (selection.isCollapsed && !selection.getLastPosition().isAtEnd) {\n                        return;\n                    }\n                    if (!mergeForwardCommand || !mergeForwardCommand.isEnabled) {\n                        return;\n                    }\n                    mergeForwardCommand.execute({\n                        shouldMergeOnBlocksContentLevel: shouldMergeOnBlocksContentLevel(editor.model, 'forward')\n                    });\n                    data.preventDefault();\n                    evt.stop();\n                }\n            });\n        }, { context: 'li' });\n    }\n    /**\n     * Attaches a listener to the {@link module:engine/view/document~Document#event:enter} event and handles enter key press\n     * in document lists.\n     */\n    _setupEnterIntegration() {\n        const editor = this.editor;\n        const model = editor.model;\n        const commands = editor.commands;\n        const enterCommand = commands.get('enter');\n        // Overwrite the default Enter key behavior: outdent or split the list in certain cases.\n        this.listenTo(editor.editing.view.document, 'enter', (evt, data) => {\n            const doc = model.document;\n            const positionParent = doc.selection.getFirstPosition().parent;\n            if (doc.selection.isCollapsed &&\n                isListItemBlock(positionParent) &&\n                positionParent.isEmpty &&\n                !data.isSoft) {\n                const isFirstBlock = isFirstBlockOfListItem(positionParent);\n                const isLastBlock = isLastBlockOfListItem(positionParent);\n                // * a      →      * a\n                // * []     →      []\n                if (isFirstBlock && isLastBlock) {\n                    editor.execute('outdentList');\n                    data.preventDefault();\n                    evt.stop();\n                }\n                // * []     →      * []\n                //   a      →      * a\n                else if (isFirstBlock && !isLastBlock) {\n                    editor.execute('splitListItemAfter');\n                    data.preventDefault();\n                    evt.stop();\n                }\n                // * a      →      * a\n                //   []     →      * []\n                else if (isLastBlock) {\n                    editor.execute('splitListItemBefore');\n                    data.preventDefault();\n                    evt.stop();\n                }\n            }\n        }, { context: 'li' });\n        // In some cases, after the default block splitting, we want to modify the new block to become a new list item\n        // instead of an additional block in the same list item.\n        this.listenTo(enterCommand, 'afterExecute', () => {\n            const splitCommand = commands.get('splitListItemBefore');\n            // The command has not refreshed because the change block related to EnterCommand#execute() is not over yet.\n            // Let's keep it up to date and take advantage of ListSplitCommand#isEnabled.\n            splitCommand.refresh();\n            if (!splitCommand.isEnabled) {\n                return;\n            }\n            const doc = editor.model.document;\n            const positionParent = doc.selection.getLastPosition().parent;\n            const listItemBlocks = getAllListItemBlocks(positionParent);\n            // Keep in mind this split happens after the default enter handler was executed. For instance:\n            //\n            // │       Initial state       │    After default enter    │   Here in #afterExecute   │\n            // ├───────────────────────────┼───────────────────────────┼───────────────────────────┤\n            // │          * a[]            │           * a             │           * a             │\n            // │                           │             []            │           * []            │\n            if (listItemBlocks.length === 2) {\n                splitCommand.execute();\n            }\n        });\n    }\n    /**\n     * Attaches a listener to the {@link module:engine/view/document~Document#event:tab} event and handles tab key and tab+shift keys\n     * presses in document lists.\n     */\n    _setupTabIntegration() {\n        const editor = this.editor;\n        this.listenTo(editor.editing.view.document, 'tab', (evt, data) => {\n            const commandName = data.shiftKey ? 'outdentList' : 'indentList';\n            const command = this.editor.commands.get(commandName);\n            if (command.isEnabled) {\n                editor.execute(commandName);\n                data.stopPropagation();\n                data.preventDefault();\n                evt.stop();\n            }\n        }, { context: 'li' });\n    }\n    /**\n     * Registers the conversion helpers for the document-list feature.\n     */\n    _setupConversion() {\n        const editor = this.editor;\n        const model = editor.model;\n        const attributeNames = this.getListAttributeNames();\n        const multiBlock = editor.config.get('list.multiBlock');\n        const elementName = multiBlock ? 'paragraph' : 'listItem';\n        editor.conversion.for('upcast')\n            // Convert <li> to a generic paragraph (or listItem element) so the content of <li> is always inside a block.\n            // Setting the listType attribute to let other features (to-do list) know that this is part of a list item.\n            // This is also important to properly handle simple lists so that paragraphs inside a list item won't break the list item.\n            // <li>  <-- converted to listItem\n            //   <p></p> <-- should be also converted to listItem, so it won't split and replace the listItem generated from the above li.\n            .elementToElement({\n            view: 'li',\n            model: (viewElement, { writer }) => writer.createElement(elementName, { listType: '' })\n        })\n            // Convert paragraph to the list block (without list type defined yet).\n            // This is important to properly handle bogus paragraph and to-do lists.\n            // Most of the time the bogus paragraph should not appear in the data of to-do list,\n            // but if there is any marker or an attribute on the paragraph then the bogus paragraph\n            // is preserved in the data, and we need to be able to detect this case.\n            .elementToElement({\n            view: 'p',\n            model: (viewElement, { writer }) => {\n                if (viewElement.parent && viewElement.parent.is('element', 'li')) {\n                    return writer.createElement(elementName, { listType: '' });\n                }\n                return null;\n            },\n            converterPriority: 'high'\n        })\n            .add(dispatcher => {\n            dispatcher.on('element:li', listItemUpcastConverter());\n        });\n        if (!multiBlock) {\n            editor.conversion.for('downcast')\n                .elementToElement({\n                model: 'listItem',\n                view: 'p'\n            });\n        }\n        editor.conversion.for('editingDowncast')\n            .elementToElement({\n            model: elementName,\n            view: bogusParagraphCreator(attributeNames),\n            converterPriority: 'high'\n        })\n            .add(dispatcher => {\n            dispatcher.on('attribute', listItemDowncastConverter(attributeNames, this._downcastStrategies, model));\n            dispatcher.on('remove', listItemDowncastRemoveConverter(model.schema));\n        });\n        editor.conversion.for('dataDowncast')\n            .elementToElement({\n            model: elementName,\n            view: bogusParagraphCreator(attributeNames, { dataPipeline: true }),\n            converterPriority: 'high'\n        })\n            .add(dispatcher => {\n            dispatcher.on('attribute', listItemDowncastConverter(attributeNames, this._downcastStrategies, model, { dataPipeline: true }));\n        });\n        const modelToViewPositionMapper = createModelToViewPositionMapper(this._downcastStrategies, editor.editing.view);\n        editor.editing.mapper.on('modelToViewPosition', modelToViewPositionMapper);\n        editor.data.mapper.on('modelToViewPosition', modelToViewPositionMapper);\n        this.listenTo(model.document, 'change:data', reconvertItemsOnDataChange(model, editor.editing, attributeNames, this), { priority: 'high' });\n        // For LI verify if an ID of the attribute element is correct.\n        this.on('checkAttributes:item', (evt, { viewElement, modelAttributes }) => {\n            if (viewElement.id != modelAttributes.listItemId) {\n                evt.return = true;\n                evt.stop();\n            }\n        });\n        // For UL and OL check if the name and ID of element is correct.\n        this.on('checkAttributes:list', (evt, { viewElement, modelAttributes }) => {\n            if (viewElement.name != getViewElementNameForListType(modelAttributes.listType) ||\n                viewElement.id != getViewElementIdForListType(modelAttributes.listType, modelAttributes.listIndent)) {\n                evt.return = true;\n                evt.stop();\n            }\n        });\n    }\n    /**\n     * Registers model post-fixers.\n     */\n    _setupModelPostFixing() {\n        const model = this.editor.model;\n        const attributeNames = this.getListAttributeNames();\n        // Register list fixing.\n        // First the low level handler.\n        model.document.registerPostFixer(writer => modelChangePostFixer(model, writer, attributeNames, this));\n        // Then the callbacks for the specific lists.\n        // The indentation fixing must be the first one...\n        this.on('postFixer', (evt, { listNodes, writer }) => {\n            evt.return = fixListIndents(listNodes, writer) || evt.return;\n        }, { priority: 'high' });\n        // ...then the item ids... and after that other fixers that rely on the correct indentation and ids.\n        this.on('postFixer', (evt, { listNodes, writer, seenIds }) => {\n            evt.return = fixListItemIds(listNodes, seenIds, writer) || evt.return;\n        }, { priority: 'high' });\n    }\n    /**\n     * Integrates the feature with the clipboard via {@link module:engine/model/model~Model#insertContent} and\n     * {@link module:engine/model/model~Model#getSelectedContent}.\n     */\n    _setupClipboardIntegration() {\n        const model = this.editor.model;\n        const clipboardPipeline = this.editor.plugins.get('ClipboardPipeline');\n        this.listenTo(model, 'insertContent', createModelIndentPasteFixer(model), { priority: 'high' });\n        // To enhance the UX, the editor should not copy list attributes to the clipboard if the selection\n        // started and ended in the same list item.\n        //\n        // If the selection was enclosed in a single list item, there is a good chance the user did not want it\n        // copied as a list item but plain blocks.\n        //\n        // This avoids pasting orphaned list items instead of paragraphs, for instance, straight into the root.\n        //\n        //\t                       ┌─────────────────────┬───────────────────┐\n        //\t                       │ Selection           │ Clipboard content │\n        //\t                       ├─────────────────────┼───────────────────┤\n        //\t                       │ [* <Widget />]      │ <Widget />        │\n        //\t                       ├─────────────────────┼───────────────────┤\n        //\t                       │ [* Foo]             │ Foo               │\n        //\t                       ├─────────────────────┼───────────────────┤\n        //\t                       │ * Foo [bar] baz     │ bar               │\n        //\t                       ├─────────────────────┼───────────────────┤\n        //\t                       │ * Fo[o              │ o                 │\n        //\t                       │   ba]r              │ ba                │\n        //\t                       ├─────────────────────┼───────────────────┤\n        //\t                       │ * Fo[o              │ * o               │\n        //\t                       │ * ba]r              │ * ba              │\n        //\t                       ├─────────────────────┼───────────────────┤\n        //\t                       │ [* Foo              │ * Foo             │\n        //\t                       │  * bar]             │ * bar             │\n        //\t                       └─────────────────────┴───────────────────┘\n        //\n        // See https://github.com/ckeditor/ckeditor5/issues/11608, https://github.com/ckeditor/ckeditor5/issues/14969\n        this.listenTo(clipboardPipeline, 'outputTransformation', (evt, data) => {\n            model.change(writer => {\n                // Remove last block if it's empty.\n                const allContentChildren = Array.from(data.content.getChildren());\n                const lastItem = allContentChildren[allContentChildren.length - 1];\n                if (allContentChildren.length > 1 && lastItem.is('element') && lastItem.isEmpty) {\n                    const contentChildrenExceptLastItem = allContentChildren.slice(0, -1);\n                    if (contentChildrenExceptLastItem.every(isListItemBlock)) {\n                        writer.remove(lastItem);\n                    }\n                }\n                // Copy/cut only content of a list item (for drag-drop move the whole list item).\n                if (data.method == 'copy' || data.method == 'cut') {\n                    const allChildren = Array.from(data.content.getChildren());\n                    const isSingleListItemSelected = isSingleListItem(allChildren);\n                    if (isSingleListItemSelected) {\n                        removeListAttributes(allChildren, writer);\n                    }\n                }\n            });\n        });\n    }\n    /**\n     * Informs editor accessibility features about keystrokes brought by the plugin.\n     */\n    _setupAccessibilityIntegration() {\n        const editor = this.editor;\n        const t = editor.t;\n        editor.accessibility.addKeystrokeInfoGroup({\n            id: 'list',\n            label: t('Keystrokes that can be used in a list'),\n            keystrokes: [\n                {\n                    label: t('Increase list item indent'),\n                    keystroke: 'Tab'\n                },\n                {\n                    label: t('Decrease list item indent'),\n                    keystroke: 'Shift+Tab'\n                }\n            ]\n        });\n    }\n}\n/**\n * Post-fixer that reacts to changes on document and fixes incorrect model states (invalid `listItemId` and `listIndent` values).\n *\n * In the example below, there is a correct list structure.\n * Then the middle element is removed so the list structure will become incorrect:\n *\n * ```xml\n * <paragraph listType=\"bulleted\" listItemId=\"a\" listIndent=0>Item 1</paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"b\" listIndent=1>Item 2</paragraph>   <--- this is removed.\n * <paragraph listType=\"bulleted\" listItemId=\"c\" listIndent=2>Item 3</paragraph>\n * ```\n *\n * The list structure after the middle element is removed:\n *\n * ```xml\n * <paragraph listType=\"bulleted\" listItemId=\"a\" listIndent=0>Item 1</paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"c\" listIndent=2>Item 3</paragraph>\n * ```\n *\n * Should become:\n *\n * ```xml\n * <paragraph listType=\"bulleted\" listItemId=\"a\" listIndent=0>Item 1</paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"c\" listIndent=1>Item 3</paragraph>   <--- note that indent got post-fixed.\n * ```\n *\n * @param model The data model.\n * @param writer The writer to do changes with.\n * @param attributeNames The list of all model list attributes (including registered strategies).\n * @param ListEditing The document list editing plugin.\n * @returns `true` if any change has been applied, `false` otherwise.\n */\nfunction modelChangePostFixer(model, writer, attributeNames, listEditing) {\n    const changes = model.document.differ.getChanges();\n    const itemToListHead = new Map();\n    const multiBlock = listEditing.editor.config.get('list.multiBlock');\n    let applied = false;\n    for (const entry of changes) {\n        if (entry.type == 'insert' && entry.name != '$text') {\n            const item = entry.position.nodeAfter;\n            // Remove attributes in case of renamed element.\n            if (!model.schema.checkAttribute(item, 'listItemId')) {\n                for (const attributeName of Array.from(item.getAttributeKeys())) {\n                    if (attributeNames.includes(attributeName)) {\n                        writer.removeAttribute(attributeName, item);\n                        applied = true;\n                    }\n                }\n            }\n            findAndAddListHeadToMap(entry.position, itemToListHead);\n            // Insert of a non-list item - check if there is a list after it.\n            if (!entry.attributes.has('listItemId')) {\n                findAndAddListHeadToMap(entry.position.getShiftedBy(entry.length), itemToListHead);\n            }\n            // Check if there is no nested list.\n            for (const { item: innerItem, previousPosition } of model.createRangeIn(item)) {\n                if (isListItemBlock(innerItem)) {\n                    findAndAddListHeadToMap(previousPosition, itemToListHead);\n                }\n            }\n        }\n        // Removed list item or block adjacent to a list.\n        else if (entry.type == 'remove') {\n            findAndAddListHeadToMap(entry.position, itemToListHead);\n        }\n        // Changed list item indent or type.\n        else if (entry.type == 'attribute' && attributeNames.includes(entry.attributeKey)) {\n            findAndAddListHeadToMap(entry.range.start, itemToListHead);\n            if (entry.attributeNewValue === null) {\n                findAndAddListHeadToMap(entry.range.start.getShiftedBy(1), itemToListHead);\n            }\n        }\n        // Make sure that there is no left over listItem element without attributes or a block with list attributes that is not a listItem.\n        if (!multiBlock && entry.type == 'attribute' && LIST_BASE_ATTRIBUTES.includes(entry.attributeKey)) {\n            const element = entry.range.start.nodeAfter;\n            if (entry.attributeNewValue === null && element && element.is('element', 'listItem')) {\n                writer.rename(element, 'paragraph');\n                applied = true;\n            }\n            else if (entry.attributeOldValue === null && element && element.is('element') && element.name != 'listItem') {\n                writer.rename(element, 'listItem');\n                applied = true;\n            }\n        }\n    }\n    // Make sure that IDs are not shared by split list.\n    const seenIds = new Set();\n    for (const listHead of itemToListHead.values()) {\n        applied = listEditing.fire('postFixer', {\n            listNodes: new ListBlocksIterable(listHead),\n            listHead,\n            writer,\n            seenIds\n        }) || applied;\n    }\n    return applied;\n}\n/**\n * A fixer for pasted content that includes list items.\n *\n * It fixes indentation of pasted list items so the pasted items match correctly to the context they are pasted into.\n *\n * Example:\n *\n * ```xml\n * <paragraph listType=\"bulleted\" listItemId=\"a\" listIndent=\"0\">A</paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"b\" listIndent=\"1\">B^</paragraph>\n * // At ^ paste:  <paragraph listType=\"numbered\" listItemId=\"x\" listIndent=\"0\">X</paragraph>\n * //              <paragraph listType=\"numbered\" listItemId=\"y\" listIndent=\"1\">Y</paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"c\" listIndent=\"2\">C</paragraph>\n * ```\n *\n * Should become:\n *\n * ```xml\n * <paragraph listType=\"bulleted\" listItemId=\"a\" listIndent=\"0\">A</paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"b\" listIndent=\"1\">BX</paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"y\" listIndent=\"2\">Y/paragraph>\n * <paragraph listType=\"bulleted\" listItemId=\"c\" listIndent=\"2\">C</paragraph>\n * ```\n */\nfunction createModelIndentPasteFixer(model) {\n    return (evt, [content, selectable]) => {\n        const items = content.is('documentFragment') ?\n            Array.from(content.getChildren()) :\n            [content];\n        if (!items.length) {\n            return;\n        }\n        const selection = selectable ?\n            model.createSelection(selectable) :\n            model.document.selection;\n        const position = selection.getFirstPosition();\n        // Get a reference list item. Attributes of the inserted list items will be fixed according to that item.\n        let refItem;\n        if (isListItemBlock(position.parent)) {\n            refItem = position.parent;\n        }\n        else if (isListItemBlock(position.nodeBefore)) {\n            refItem = position.nodeBefore;\n        }\n        else {\n            return; // Content is not copied into a list.\n        }\n        model.change(writer => {\n            const refType = refItem.getAttribute('listType');\n            const refIndent = refItem.getAttribute('listIndent');\n            const firstElementIndent = items[0].getAttribute('listIndent') || 0;\n            const indentDiff = Math.max(refIndent - firstElementIndent, 0);\n            for (const item of items) {\n                const isListItem = isListItemBlock(item);\n                if (refItem.is('element', 'listItem') && item.is('element', 'paragraph')) {\n                    /**\n                     * When paragraphs or a plain text list is pasted into a simple list, convert\n                     * the `<paragraphs>' to `<listItem>' to avoid breaking the target list.\n                     *\n                     * See https://github.com/ckeditor/ckeditor5/issues/13826.\n                     */\n                    writer.rename(item, 'listItem');\n                }\n                writer.setAttributes({\n                    listIndent: (isListItem ? item.getAttribute('listIndent') : 0) + indentDiff,\n                    listItemId: isListItem ? item.getAttribute('listItemId') : ListItemUid.next(),\n                    listType: refType\n                }, item);\n            }\n        });\n    };\n}\n/**\n * Decides whether the merge should be accompanied by the model's `deleteContent()`, for instance, to get rid of the inline\n * content in the selection or take advantage of the heuristics in `deleteContent()` that helps convert lists into paragraphs\n * in certain cases.\n */\nfunction shouldMergeOnBlocksContentLevel(model, direction) {\n    const selection = model.document.selection;\n    if (!selection.isCollapsed) {\n        return !getSelectedBlockObject(model);\n    }\n    if (direction === 'forward') {\n        return true;\n    }\n    const firstPosition = selection.getFirstPosition();\n    const positionParent = firstPosition.parent;\n    const previousSibling = positionParent.previousSibling;\n    if (model.schema.isObject(previousSibling)) {\n        return false;\n    }\n    if (previousSibling.isEmpty) {\n        return true;\n    }\n    return isSingleListItem([positionParent, previousSibling]);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\n/**\n * Helper method for creating toolbar and menu buttons and linking them with an appropriate command.\n *\n * @internal\n * @param editor The editor instance to which the UI component will be added.\n * @param commandName The name of the command.\n * @param label The button label.\n * @param icon The source of the icon.\n */\nexport function createUIComponents(editor, commandName, label, icon) {\n    editor.ui.componentFactory.add(commandName, () => {\n        const buttonView = _createButton(ButtonView, editor, commandName, label, icon);\n        buttonView.set({\n            tooltip: true,\n            isToggleable: true\n        });\n        return buttonView;\n    });\n    editor.ui.componentFactory.add(`menuBar:${commandName}`, () => {\n        const buttonView = _createButton(MenuBarMenuListItemButtonView, editor, commandName, label, icon);\n        buttonView.set({\n            role: 'menuitemcheckbox',\n            isToggleable: true\n        });\n        return buttonView;\n    });\n}\n/**\n * Creates a button to use either in toolbar or in menu bar.\n */\nfunction _createButton(ButtonClass, editor, commandName, label, icon) {\n    const command = editor.commands.get(commandName);\n    const view = new ButtonClass(editor.locale);\n    view.set({\n        label,\n        icon\n    });\n    // Bind button model to command.\n    view.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');\n    // Execute the command.\n    view.on('execute', () => {\n        editor.execute(commandName);\n        editor.editing.view.focus();\n    });\n    return view;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module list/list/listui\n */\nimport { createUIComponents } from './utils.js';\nimport { icons, Plugin } from 'ckeditor5/src/core.js';\n/**\n * The list UI feature. It introduces the `'numberedList'` and `'bulletedList'` buttons that\n * allow to convert paragraphs to and from list items and indent or outdent them.\n */\nexport default class ListUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ListUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const t = this.editor.t;\n        // Create button numberedList.\n        if (!this.editor.ui.componentFactory.has('numberedList')) {\n            createUIComponents(this.editor, 'numberedList', t('Numbered List'), icons.numberedList);\n        }\n        // Create button bulletedList.\n        if (!this.editor.ui.componentFactory.has('bulletedList')) {\n            createUIComponents(this.editor, 'bulletedList', t('Bulleted List'), icons.bulletedList);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Returns a function that converts the model \"url\" attribute to the view representation.\n *\n * Depending on the configuration, the view representation can be \"semantic\" (for the data pipeline):\n *\n * ```html\n * <figure class=\"media\">\n * \t<oembed url=\"foo\"></oembed>\n * </figure>\n * ```\n *\n * or \"non-semantic\" (for the editing view pipeline):\n *\n * ```html\n * <figure class=\"media\">\n * \t<div data-oembed-url=\"foo\">[ non-semantic media preview for \"foo\" ]</div>\n * </figure>\n * ```\n *\n * **Note:** Changing the model \"url\" attribute replaces the entire content of the\n * `<figure>` in the view.\n *\n * @param registry The registry providing\n * the media and their content.\n * @param options options object with following properties:\n * - elementName When set, overrides the default element name for semantic media embeds.\n * - renderMediaPreview When `true`, the converter will create the view in the non-semantic form.\n * - renderForEditingView When `true`, the converter will create a view specific for the\n * editing pipeline (e.g. including CSS classes, content placeholders).\n */\nexport function modelToViewUrlAttributeConverter(registry, options) {\n    const converter = (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        const url = data.attributeNewValue;\n        const viewWriter = conversionApi.writer;\n        const figure = conversionApi.mapper.toViewElement(data.item);\n        const mediaContentElement = [...figure.getChildren()]\n            .find(child => child.getCustomProperty('media-content'));\n        // TODO: removing the wrapper and creating it from scratch is a hack. We can do better than that.\n        viewWriter.remove(mediaContentElement);\n        const mediaViewElement = registry.getMediaViewElement(viewWriter, url, options);\n        viewWriter.insert(viewWriter.createPositionAt(figure, 0), mediaViewElement);\n    };\n    return dispatcher => {\n        dispatcher.on('attribute:url:media', converter);\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { isWidget, toWidget } from 'ckeditor5/src/widget.js';\n/**\n * Converts a given {@link module:engine/view/element~Element} to a media embed widget:\n * * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the media widget element.\n * * Calls the {@link module:widget/utils~toWidget} function with the proper element's label creator.\n *\n * @param writer An instance of the view writer.\n * @param label The element's label.\n */\nexport function toMediaWidget(viewElement, writer, label) {\n    writer.setCustomProperty('media', true, viewElement);\n    return toWidget(viewElement, writer, { label });\n}\n/**\n * Returns a media widget editing view element if one is selected.\n */\nexport function getSelectedMediaViewWidget(selection) {\n    const viewElement = selection.getSelectedElement();\n    if (viewElement && isMediaWidget(viewElement)) {\n        return viewElement;\n    }\n    return null;\n}\n/**\n * Checks if a given view element is a media widget.\n */\nexport function isMediaWidget(viewElement) {\n    return !!viewElement.getCustomProperty('media') && isWidget(viewElement);\n}\n/**\n * Creates a view element representing the media. Either a \"semantic\" one for the data pipeline:\n *\n * ```html\n * <figure class=\"media\">\n * \t<oembed url=\"foo\"></oembed>\n * </figure>\n * ```\n *\n * or a \"non-semantic\" (for the editing view pipeline):\n *\n * ```html\n * <figure class=\"media\">\n * \t<div data-oembed-url=\"foo\">[ non-semantic media preview for \"foo\" ]</div>\n * </figure>\n * ```\n */\nexport function createMediaFigureElement(writer, registry, url, options) {\n    return writer.createContainerElement('figure', { class: 'media' }, [\n        registry.getMediaViewElement(writer, url, options),\n        writer.createSlot()\n    ]);\n}\n/**\n * Returns a selected media element in the model, if any.\n */\nexport function getSelectedMediaModelWidget(selection) {\n    const selectedElement = selection.getSelectedElement();\n    if (selectedElement && selectedElement.is('element', 'media')) {\n        return selectedElement;\n    }\n    return null;\n}\n/**\n * Creates a media element and inserts it into the model.\n *\n * **Note**: This method will use {@link module:engine/model/model~Model#insertContent `model.insertContent()`} logic of inserting content\n * if no `insertPosition` is passed.\n *\n * @param url An URL of an embeddable media.\n * @param findOptimalPosition If true it will try to find optimal position to insert media without breaking content\n * in which a selection is.\n */\nexport function insertMedia(model, url, selectable, findOptimalPosition) {\n    model.change(writer => {\n        const mediaElement = writer.createElement('media', { url });\n        model.insertObject(mediaElement, selectable, null, {\n            setSelection: 'on',\n            findOptimalPosition: findOptimalPosition ? 'auto' : undefined\n        });\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { findOptimalInsertionRange } from 'ckeditor5/src/widget.js';\nimport { getSelectedMediaModelWidget, insertMedia } from './utils.js';\n/**\n * The insert media command.\n *\n * The command is registered by the {@link module:media-embed/mediaembedediting~MediaEmbedEditing} as `'mediaEmbed'`.\n *\n * To insert media at the current selection, execute the command and specify the URL:\n *\n * ```ts\n * editor.execute( 'mediaEmbed', 'http://url.to.the/media' );\n * ```\n */\nexport default class MediaEmbedCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const selectedMedia = getSelectedMediaModelWidget(selection);\n        this.value = selectedMedia ? selectedMedia.getAttribute('url') : undefined;\n        this.isEnabled = isMediaSelected(selection) || isAllowedInParent(selection, model);\n    }\n    /**\n     * Executes the command, which either:\n     *\n     * * updates the URL of the selected media,\n     * * inserts the new media into the editor and puts the selection around it.\n     *\n     * @fires execute\n     * @param url The URL of the media.\n     */\n    execute(url) {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const selectedMedia = getSelectedMediaModelWidget(selection);\n        if (selectedMedia) {\n            model.change(writer => {\n                writer.setAttribute('url', url, selectedMedia);\n            });\n        }\n        else {\n            insertMedia(model, url, selection, true);\n        }\n    }\n}\n/**\n * Checks if the media embed is allowed in the parent.\n */\nfunction isAllowedInParent(selection, model) {\n    const insertionRange = findOptimalInsertionRange(selection, model);\n    let parent = insertionRange.start.parent;\n    // The model.insertContent() will remove empty parent (unless it is a $root or a limit).\n    if (parent.isEmpty && !model.schema.isLimit(parent)) {\n        parent = parent.parent;\n    }\n    return model.schema.checkChild(parent, 'media');\n}\n/**\n * Checks if the media object is selected.\n */\nfunction isMediaSelected(selection) {\n    const element = selection.getSelectedElement();\n    return !!element && element.name === 'media';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { IconView, Template } from 'ckeditor5/src/ui.js';\nimport { logWarning, toArray } from 'ckeditor5/src/utils.js';\nimport mediaPlaceholderIcon from '../theme/icons/media-placeholder.svg';\nconst mediaPlaceholderIconViewBox = '0 0 64 42';\n/**\n * A bridge between the raw media content provider definitions and the editor view content.\n *\n * It helps translating media URLs to corresponding {@link module:engine/view/element~Element view elements}.\n *\n * Mostly used by the {@link module:media-embed/mediaembedediting~MediaEmbedEditing} plugin.\n */\nexport default class MediaRegistry {\n    /**\n     * Creates an instance of the {@link module:media-embed/mediaregistry~MediaRegistry} class.\n     *\n     * @param locale The localization services instance.\n     * @param config The configuration of the media embed feature.\n     */\n    constructor(locale, config) {\n        const providers = config.providers;\n        const extraProviders = config.extraProviders || [];\n        const removedProviders = new Set(config.removeProviders);\n        const providerDefinitions = providers\n            .concat(extraProviders)\n            .filter(provider => {\n            const name = provider.name;\n            if (!name) {\n                /**\n                 * One of the providers (or extra providers) specified in the media embed configuration\n                 * has no name and will not be used by the editor. In order to get this media\n                 * provider working, double check your editor configuration.\n                 *\n                 * @error media-embed-no-provider-name\n                 */\n                logWarning('media-embed-no-provider-name', { provider });\n                return false;\n            }\n            return !removedProviders.has(name);\n        });\n        this.locale = locale;\n        this.providerDefinitions = providerDefinitions;\n    }\n    /**\n     * Checks whether the passed URL is representing a certain media type allowed in the editor.\n     *\n     * @param url The URL to be checked\n     */\n    hasMedia(url) {\n        return !!this._getMedia(url);\n    }\n    /**\n     * For the given media URL string and options, it returns the {@link module:engine/view/element~Element view element}\n     * representing that media.\n     *\n     * **Note:** If no URL is specified, an empty view element is returned.\n     *\n     * @param writer The view writer used to produce a view element.\n     * @param url The URL to be translated into a view element.\n     */\n    getMediaViewElement(writer, url, options) {\n        return this._getMedia(url).getViewElement(writer, options);\n    }\n    /**\n     * Returns a `Media` instance for the given URL.\n     *\n     * @param url The URL of the media.\n     * @returns The `Media` instance or `null` when there is none.\n     */\n    _getMedia(url) {\n        if (!url) {\n            return new Media(this.locale);\n        }\n        url = url.trim();\n        for (const definition of this.providerDefinitions) {\n            const previewRenderer = definition.html;\n            const pattern = toArray(definition.url);\n            for (const subPattern of pattern) {\n                const match = this._getUrlMatches(url, subPattern);\n                if (match) {\n                    return new Media(this.locale, url, match, previewRenderer);\n                }\n            }\n        }\n        return null;\n    }\n    /**\n     * Tries to match `url` to `pattern`.\n     *\n     * @param url The URL of the media.\n     * @param pattern The pattern that should accept the media URL.\n     */\n    _getUrlMatches(url, pattern) {\n        // 1. Try to match without stripping the protocol and \"www\" subdomain.\n        let match = url.match(pattern);\n        if (match) {\n            return match;\n        }\n        // 2. Try to match after stripping the protocol.\n        let rawUrl = url.replace(/^https?:\\/\\//, '');\n        match = rawUrl.match(pattern);\n        if (match) {\n            return match;\n        }\n        // 3. Try to match after stripping the \"www\" subdomain.\n        rawUrl = rawUrl.replace(/^www\\./, '');\n        match = rawUrl.match(pattern);\n        if (match) {\n            return match;\n        }\n        return null;\n    }\n}\n/**\n * Represents media defined by the provider configuration.\n *\n * It can be rendered to the {@link module:engine/view/element~Element view element} and used in the editing or data pipeline.\n */\nclass Media {\n    constructor(locale, url, match, previewRenderer) {\n        this.url = this._getValidUrl(url);\n        this._locale = locale;\n        this._match = match;\n        this._previewRenderer = previewRenderer;\n    }\n    /**\n     * Returns the view element representation of the media.\n     *\n     * @param writer The view writer used to produce a view element.\n     */\n    getViewElement(writer, options) {\n        const attributes = {};\n        let viewElement;\n        if (options.renderForEditingView || (options.renderMediaPreview && this.url && this._previewRenderer)) {\n            if (this.url) {\n                attributes['data-oembed-url'] = this.url;\n            }\n            if (options.renderForEditingView) {\n                attributes.class = 'ck-media__wrapper';\n            }\n            const mediaHtml = this._getPreviewHtml(options);\n            viewElement = writer.createRawElement('div', attributes, (domElement, domConverter) => {\n                domConverter.setContentOf(domElement, mediaHtml);\n            });\n        }\n        else {\n            if (this.url) {\n                attributes.url = this.url;\n            }\n            viewElement = writer.createEmptyElement(options.elementName, attributes);\n        }\n        writer.setCustomProperty('media-content', true, viewElement);\n        return viewElement;\n    }\n    /**\n     * Returns the HTML string of the media content preview.\n     */\n    _getPreviewHtml(options) {\n        if (this._previewRenderer) {\n            return this._previewRenderer(this._match);\n        }\n        else {\n            // The placeholder only makes sense for editing view and media which have URLs.\n            // Placeholder is never displayed in data and URL-less media have no content.\n            if (this.url && options.renderForEditingView) {\n                return this._getPlaceholderHtml();\n            }\n            return '';\n        }\n    }\n    /**\n     * Returns the placeholder HTML when the media has no content preview.\n     */\n    _getPlaceholderHtml() {\n        const icon = new IconView();\n        const t = this._locale.t;\n        icon.content = mediaPlaceholderIcon;\n        icon.viewBox = mediaPlaceholderIconViewBox;\n        const placeholder = new Template({\n            tag: 'div',\n            attributes: {\n                class: 'ck ck-reset_all ck-media__placeholder'\n            },\n            children: [\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: 'ck-media__placeholder__icon'\n                    },\n                    children: [icon]\n                },\n                {\n                    tag: 'a',\n                    attributes: {\n                        class: 'ck-media__placeholder__url',\n                        target: '_blank',\n                        rel: 'noopener noreferrer',\n                        href: this.url,\n                        'data-cke-tooltip-text': t('Open media in new tab')\n                    },\n                    children: [\n                        {\n                            tag: 'span',\n                            attributes: {\n                                class: 'ck-media__placeholder__url__text'\n                            },\n                            children: [this.url]\n                        }\n                    ]\n                }\n            ]\n        }).render();\n        return placeholder.outerHTML;\n    }\n    /**\n     * Returns the full URL to the specified media.\n     *\n     * @param url The URL of the media.\n     */\n    _getValidUrl(url) {\n        if (!url) {\n            return null;\n        }\n        if (url.match(/^https?/)) {\n            return url;\n        }\n        return 'https://' + url;\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 64 42\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M47.426 17V3.713L63.102 0v19.389h-.001l.001.272c0 1.595-2.032 3.43-4.538 4.098-2.506.668-4.538-.083-4.538-1.678 0-1.594 2.032-3.43 4.538-4.098.914-.244 2.032-.565 2.888-.603V4.516L49.076 7.447v9.556A1.014 1.014 0 0 0 49 17h-1.574zM29.5 17h-8.343a7.073 7.073 0 1 0-4.657 4.06v3.781H3.3a2.803 2.803 0 0 1-2.8-2.804V8.63a2.803 2.803 0 0 1 2.8-2.805h4.082L8.58 2.768A1.994 1.994 0 0 1 10.435 1.5h8.985c.773 0 1.477.448 1.805 1.149l1.488 3.177H26.7c1.546 0 2.8 1.256 2.8 2.805V17zm-11.637 0H17.5a1 1 0 0 0-1 1v.05A4.244 4.244 0 1 1 17.863 17zm29.684 2c.97 0 .953-.048.953.889v20.743c0 .953.016.905-.953.905H19.453c-.97 0-.953.048-.953-.905V19.89c0-.937-.016-.889.97-.889h28.077zm-4.701 19.338V22.183H24.154v16.155h18.692zM20.6 21.375v1.616h1.616v-1.616H20.6zm0 3.231v1.616h1.616v-1.616H20.6zm0 3.231v1.616h1.616v-1.616H20.6zm0 3.231v1.616h1.616v-1.616H20.6zm0 3.231v1.616h1.616v-1.616H20.6zm0 3.231v1.616h1.616V37.53H20.6zm24.233-16.155v1.616h1.615v-1.616h-1.615zm0 3.231v1.616h1.615v-1.616h-1.615zm0 3.231v1.616h1.615v-1.616h-1.615zm0 3.231v1.616h1.615v-1.616h-1.615zm0 3.231v1.616h1.615v-1.616h-1.615zm0 3.231v1.616h1.615V37.53h-1.615zM29.485 25.283a.4.4 0 0 1 .593-.35l9.05 4.977a.4.4 0 0 1 0 .701l-9.05 4.978a.4.4 0 0 1-.593-.35v-9.956z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module media-embed/mediaembedediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { first } from 'ckeditor5/src/utils.js';\nimport { modelToViewUrlAttributeConverter } from './converters.js';\nimport MediaEmbedCommand from './mediaembedcommand.js';\nimport MediaRegistry from './mediaregistry.js';\nimport { toMediaWidget, createMediaFigureElement } from './utils.js';\nimport '../theme/mediaembedediting.css';\n/**\n * The media embed editing feature.\n */\nexport default class MediaEmbedEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'MediaEmbedEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('mediaEmbed', {\n            elementName: 'oembed',\n            providers: [\n                {\n                    name: 'dailymotion',\n                    url: [\n                        /^dailymotion\\.com\\/video\\/(\\w+)/,\n                        /^dai.ly\\/(\\w+)/\n                    ],\n                    html: match => {\n                        const id = match[1];\n                        return ('<div style=\"position: relative; padding-bottom: 100%; height: 0; \">' +\n                            `<iframe src=\"https://www.dailymotion.com/embed/video/${id}\" ` +\n                            'style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" ' +\n                            'frameborder=\"0\" width=\"480\" height=\"270\" allowfullscreen allow=\"autoplay\">' +\n                            '</iframe>' +\n                            '</div>');\n                    }\n                },\n                {\n                    name: 'spotify',\n                    url: [\n                        /^open\\.spotify\\.com\\/(artist\\/\\w+)/,\n                        /^open\\.spotify\\.com\\/(album\\/\\w+)/,\n                        /^open\\.spotify\\.com\\/(track\\/\\w+)/\n                    ],\n                    html: match => {\n                        const id = match[1];\n                        return ('<div style=\"position: relative; padding-bottom: 100%; height: 0; padding-bottom: 126%;\">' +\n                            `<iframe src=\"https://open.spotify.com/embed/${id}\" ` +\n                            'style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" ' +\n                            'frameborder=\"0\" allowtransparency=\"true\" allow=\"encrypted-media\">' +\n                            '</iframe>' +\n                            '</div>');\n                    }\n                },\n                {\n                    name: 'youtube',\n                    url: [\n                        /^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)(?:&t=(\\d+))?/,\n                        /^(?:m\\.)?youtube\\.com\\/shorts\\/([\\w-]+)(?:\\?t=(\\d+))?/,\n                        /^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)(?:\\?t=(\\d+))?/,\n                        /^youtube\\.com\\/embed\\/([\\w-]+)(?:\\?start=(\\d+))?/,\n                        /^youtu\\.be\\/([\\w-]+)(?:\\?t=(\\d+))?/\n                    ],\n                    html: match => {\n                        const id = match[1];\n                        const time = match[2];\n                        return ('<div style=\"position: relative; padding-bottom: 100%; height: 0; padding-bottom: 56.2493%;\">' +\n                            `<iframe src=\"https://www.youtube.com/embed/${id}${time ? `?start=${time}` : ''}\" ` +\n                            'style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" ' +\n                            'frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen>' +\n                            '</iframe>' +\n                            '</div>');\n                    }\n                },\n                {\n                    name: 'vimeo',\n                    url: [\n                        /^vimeo\\.com\\/(\\d+)/,\n                        /^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,\n                        /^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,\n                        /^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,\n                        /^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,\n                        /^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,\n                        /^player\\.vimeo\\.com\\/video\\/(\\d+)/\n                    ],\n                    html: match => {\n                        const id = match[1];\n                        return ('<div style=\"position: relative; padding-bottom: 100%; height: 0; padding-bottom: 56.2493%;\">' +\n                            `<iframe src=\"https://player.vimeo.com/video/${id}\" ` +\n                            'style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" ' +\n                            'frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen>' +\n                            '</iframe>' +\n                            '</div>');\n                    }\n                },\n                {\n                    name: 'instagram',\n                    url: [\n                        /^instagram\\.com\\/p\\/(\\w+)/,\n                        /^instagram\\.com\\/reel\\/(\\w+)/\n                    ]\n                },\n                {\n                    name: 'twitter',\n                    url: [\n                        /^twitter\\.com/,\n                        /^x\\.com/\n                    ]\n                },\n                {\n                    name: 'googleMaps',\n                    url: [\n                        /^google\\.com\\/maps/,\n                        /^goo\\.gl\\/maps/,\n                        /^maps\\.google\\.com/,\n                        /^maps\\.app\\.goo\\.gl/\n                    ]\n                },\n                {\n                    name: 'flickr',\n                    url: /^flickr\\.com/\n                },\n                {\n                    name: 'facebook',\n                    url: /^facebook\\.com/\n                }\n            ]\n        });\n        this.registry = new MediaRegistry(editor.locale, editor.config.get('mediaEmbed'));\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        const t = editor.t;\n        const conversion = editor.conversion;\n        const renderMediaPreview = editor.config.get('mediaEmbed.previewsInData');\n        const elementName = editor.config.get('mediaEmbed.elementName');\n        const registry = this.registry;\n        editor.commands.add('mediaEmbed', new MediaEmbedCommand(editor));\n        // Configure the schema.\n        schema.register('media', {\n            inheritAllFrom: '$blockObject',\n            allowAttributes: ['url']\n        });\n        // Model -> Data\n        conversion.for('dataDowncast').elementToStructure({\n            model: 'media',\n            view: (modelElement, { writer }) => {\n                const url = modelElement.getAttribute('url');\n                return createMediaFigureElement(writer, registry, url, {\n                    elementName,\n                    renderMediaPreview: !!url && renderMediaPreview\n                });\n            }\n        });\n        // Model -> Data (url -> data-oembed-url)\n        conversion.for('dataDowncast').add(modelToViewUrlAttributeConverter(registry, {\n            elementName,\n            renderMediaPreview\n        }));\n        // Model -> View (element)\n        conversion.for('editingDowncast').elementToStructure({\n            model: 'media',\n            view: (modelElement, { writer }) => {\n                const url = modelElement.getAttribute('url');\n                const figure = createMediaFigureElement(writer, registry, url, {\n                    elementName,\n                    renderForEditingView: true\n                });\n                return toMediaWidget(figure, writer, t('media widget'));\n            }\n        });\n        // Model -> View (url -> data-oembed-url)\n        conversion.for('editingDowncast').add(modelToViewUrlAttributeConverter(registry, {\n            elementName,\n            renderForEditingView: true\n        }));\n        // View -> Model (data-oembed-url -> url)\n        conversion.for('upcast')\n            // Upcast semantic media.\n            .elementToElement({\n            view: element => ['oembed', elementName].includes(element.name) && element.getAttribute('url') ?\n                { name: true } :\n                null,\n            model: (viewMedia, { writer }) => {\n                const url = viewMedia.getAttribute('url');\n                if (registry.hasMedia(url)) {\n                    return writer.createElement('media', { url });\n                }\n                return null;\n            }\n        })\n            // Upcast non-semantic media.\n            .elementToElement({\n            view: {\n                name: 'div',\n                attributes: {\n                    'data-oembed-url': true\n                }\n            },\n            model: (viewMedia, { writer }) => {\n                const url = viewMedia.getAttribute('data-oembed-url');\n                if (registry.hasMedia(url)) {\n                    return writer.createElement('media', { url });\n                }\n                return null;\n            }\n        })\n            // Consume `<figure class=\"media\">` elements, that were left after upcast.\n            .add(dispatcher => {\n            const converter = (evt, data, conversionApi) => {\n                if (!conversionApi.consumable.consume(data.viewItem, { name: true, classes: 'media' })) {\n                    return;\n                }\n                const { modelRange, modelCursor } = conversionApi.convertChildren(data.viewItem, data.modelCursor);\n                data.modelRange = modelRange;\n                data.modelCursor = modelCursor;\n                const modelElement = first(modelRange.getItems());\n                if (!modelElement) {\n                    // Revert consumed figure so other features can convert it.\n                    conversionApi.consumable.revert(data.viewItem, { name: true, classes: 'media' });\n                }\n            };\n            dispatcher.on('element:figure', converter);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module media-embed/automediaembed\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { LiveRange, LivePosition } from 'ckeditor5/src/engine.js';\nimport { Clipboard } from 'ckeditor5/src/clipboard.js';\nimport { Delete } from 'ckeditor5/src/typing.js';\nimport { Undo } from 'ckeditor5/src/undo.js';\nimport { global } from 'ckeditor5/src/utils.js';\nimport MediaEmbedEditing from './mediaembedediting.js';\nimport { insertMedia } from './utils.js';\nconst URL_REGEXP = /^(?:http(s)?:\\/\\/)?[\\w-]+\\.[\\w-.~:/?#[\\]@!$&'()*+,;=%]+$/;\n/**\n * The auto-media embed plugin. It recognizes media links in the pasted content and embeds\n * them shortly after they are injected into the document.\n */\nexport default class AutoMediaEmbed extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [Clipboard, Delete, Undo];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'AutoMediaEmbed';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        this._timeoutId = null;\n        this._positionToInsert = null;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const modelDocument = editor.model.document;\n        // We need to listen on `Clipboard#inputTransformation` because we need to save positions of selection.\n        // After pasting, the content between those positions will be checked for a URL that could be transformed\n        // into media.\n        const clipboardPipeline = editor.plugins.get('ClipboardPipeline');\n        this.listenTo(clipboardPipeline, 'inputTransformation', () => {\n            const firstRange = modelDocument.selection.getFirstRange();\n            const leftLivePosition = LivePosition.fromPosition(firstRange.start);\n            leftLivePosition.stickiness = 'toPrevious';\n            const rightLivePosition = LivePosition.fromPosition(firstRange.end);\n            rightLivePosition.stickiness = 'toNext';\n            modelDocument.once('change:data', () => {\n                this._embedMediaBetweenPositions(leftLivePosition, rightLivePosition);\n                leftLivePosition.detach();\n                rightLivePosition.detach();\n            }, { priority: 'high' });\n        });\n        const undoCommand = editor.commands.get('undo');\n        undoCommand.on('execute', () => {\n            if (this._timeoutId) {\n                global.window.clearTimeout(this._timeoutId);\n                this._positionToInsert.detach();\n                this._timeoutId = null;\n                this._positionToInsert = null;\n            }\n        }, { priority: 'high' });\n    }\n    /**\n     * Analyzes the part of the document between provided positions in search for a URL representing media.\n     * When the URL is found, it is automatically converted into media.\n     *\n     * @param leftPosition Left position of the selection.\n     * @param rightPosition Right position of the selection.\n     */\n    _embedMediaBetweenPositions(leftPosition, rightPosition) {\n        const editor = this.editor;\n        const mediaRegistry = editor.plugins.get(MediaEmbedEditing).registry;\n        // TODO: Use marker instead of LiveRange & LivePositions.\n        const urlRange = new LiveRange(leftPosition, rightPosition);\n        const walker = urlRange.getWalker({ ignoreElementEnd: true });\n        let url = '';\n        for (const node of walker) {\n            if (node.item.is('$textProxy')) {\n                url += node.item.data;\n            }\n        }\n        url = url.trim();\n        // If the URL does not match to universal URL regexp, let's skip that.\n        if (!url.match(URL_REGEXP)) {\n            urlRange.detach();\n            return;\n        }\n        // If the URL represents a media, let's use it.\n        if (!mediaRegistry.hasMedia(url)) {\n            urlRange.detach();\n            return;\n        }\n        const mediaEmbedCommand = editor.commands.get('mediaEmbed');\n        // Do not anything if media element cannot be inserted at the current position (#47).\n        if (!mediaEmbedCommand.isEnabled) {\n            urlRange.detach();\n            return;\n        }\n        // Position won't be available in the `setTimeout` function so let's clone it.\n        this._positionToInsert = LivePosition.fromPosition(leftPosition);\n        // This action mustn't be executed if undo was called between pasting and auto-embedding.\n        this._timeoutId = global.window.setTimeout(() => {\n            editor.model.change(writer => {\n                this._timeoutId = null;\n                writer.remove(urlRange);\n                urlRange.detach();\n                let insertionPosition = null;\n                // Check if position where the media element should be inserted is still valid.\n                // Otherwise leave it as undefined to use document.selection - default behavior of model.insertContent().\n                if (this._positionToInsert.root.rootName !== '$graveyard') {\n                    insertionPosition = this._positionToInsert;\n                }\n                insertMedia(editor.model, url, insertionPosition, false);\n                this._positionToInsert.detach();\n                this._positionToInsert = null;\n            });\n            editor.plugins.get(Delete).requestUndoOnBackspace();\n        }, 100);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module media-embed/ui/mediaformview\n */\nimport { LabeledFieldView, View, createLabeledInputText, submitHandler } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\n// See: #8833.\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport '@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css';\nimport '../../theme/mediaform.css';\n/**\n * The media form view controller class.\n *\n * See {@link module:media-embed/ui/mediaformview~MediaFormView}.\n */\nexport default class MediaFormView extends View {\n    /**\n     * @param validators Form validators used by {@link #isValid}.\n     * @param locale The localization services instance.\n     */\n    constructor(validators, locale) {\n        super(locale);\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.set('mediaURLInputValue', '');\n        this.urlInputView = this._createUrlInput();\n        this._validators = validators;\n        this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-media-form',\n                    'ck-responsive-form'\n                ],\n                tabindex: '-1'\n            },\n            children: [\n                this.urlInputView\n            ]\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        submitHandler({\n            view: this\n        });\n        // Register the view in the focus tracker.\n        this.focusTracker.add(this.urlInputView.element);\n        // Start listening for the keystrokes coming from #element.\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the {@link #urlInputView}.\n     */\n    focus() {\n        this.urlInputView.focus();\n    }\n    /**\n     * The native DOM `value` of the {@link #urlInputView} element.\n     *\n     * **Note**: Do not confuse it with the {@link module:ui/inputtext/inputtextview~InputTextView#value}\n     * which works one way only and may not represent the actual state of the component in the DOM.\n     */\n    get url() {\n        return this.urlInputView.fieldView.element.value.trim();\n    }\n    set url(url) {\n        this.urlInputView.fieldView.value = url.trim();\n    }\n    /**\n     * Validates the form and returns `false` when some fields are invalid.\n     */\n    isValid() {\n        this.resetFormStatus();\n        for (const validator of this._validators) {\n            const errorText = validator(this);\n            // One error per field is enough.\n            if (errorText) {\n                // Apply updated error.\n                this.urlInputView.errorText = errorText;\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Cleans up the supplementary error and information text of the {@link #urlInputView}\n     * bringing them back to the state when the form has been displayed for the first time.\n     *\n     * See {@link #isValid}.\n     */\n    resetFormStatus() {\n        this.urlInputView.errorText = null;\n        this.urlInputView.infoText = this._urlInputViewInfoDefault;\n    }\n    /**\n     * Creates a labeled input view.\n     *\n     * @returns Labeled input view instance.\n     */\n    _createUrlInput() {\n        const t = this.locale.t;\n        const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n        const inputField = labeledInput.fieldView;\n        this._urlInputViewInfoDefault = t('Paste the media URL in the input.');\n        this._urlInputViewInfoTip = t('Tip: Paste the URL into the content to embed faster.');\n        labeledInput.label = t('Media URL');\n        labeledInput.infoText = this._urlInputViewInfoDefault;\n        inputField.inputMode = 'url';\n        inputField.on('input', () => {\n            // Display the tip text only when there is some value. Otherwise fall back to the default info text.\n            labeledInput.infoText = inputField.element.value ? this._urlInputViewInfoTip : this._urlInputViewInfoDefault;\n            this.mediaURLInputValue = inputField.element.value.trim();\n        });\n        return labeledInput;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module media-embed/mediaembedui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, CssTransitionDisablerMixin, MenuBarMenuListItemButtonView, Dialog } from 'ckeditor5/src/ui.js';\nimport MediaFormView from './ui/mediaformview.js';\nimport MediaEmbedEditing from './mediaembedediting.js';\nimport mediaIcon from '../theme/icons/media.svg';\n/**\n * The media embed UI plugin.\n */\nexport default class MediaEmbedUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [MediaEmbedEditing, Dialog];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'MediaEmbedUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        editor.ui.componentFactory.add('mediaEmbed', () => {\n            const t = this.editor.locale.t;\n            const button = this._createDialogButton(ButtonView);\n            button.tooltip = true;\n            button.label = t('Insert media');\n            return button;\n        });\n        editor.ui.componentFactory.add('menuBar:mediaEmbed', () => {\n            const t = this.editor.locale.t;\n            const button = this._createDialogButton(MenuBarMenuListItemButtonView);\n            button.label = t('Media');\n            return button;\n        });\n    }\n    /**\n     * Creates a button for menu bar that will show media embed dialog.\n     */\n    _createDialogButton(ButtonClass) {\n        const editor = this.editor;\n        const buttonView = new ButtonClass(editor.locale);\n        const command = editor.commands.get('mediaEmbed');\n        const dialogPlugin = this.editor.plugins.get('Dialog');\n        buttonView.icon = mediaIcon;\n        buttonView.bind('isEnabled').to(command, 'isEnabled');\n        buttonView.on('execute', () => {\n            if (dialogPlugin.id === 'mediaEmbed') {\n                dialogPlugin.hide();\n            }\n            else {\n                this._showDialog();\n            }\n        });\n        return buttonView;\n    }\n    _showDialog() {\n        const editor = this.editor;\n        const dialog = editor.plugins.get('Dialog');\n        const command = editor.commands.get('mediaEmbed');\n        const t = editor.locale.t;\n        if (!this._formView) {\n            const registry = editor.plugins.get(MediaEmbedEditing).registry;\n            this._formView = new (CssTransitionDisablerMixin(MediaFormView))(getFormValidators(editor.t, registry), editor.locale);\n            this._formView.on('submit', () => this._handleSubmitForm());\n        }\n        dialog.show({\n            id: 'mediaEmbed',\n            title: t('Insert media'),\n            content: this._formView,\n            isModal: true,\n            onShow: () => {\n                this._formView.url = command.value || '';\n                this._formView.resetFormStatus();\n                this._formView.urlInputView.fieldView.select();\n            },\n            actionButtons: [\n                {\n                    label: t('Cancel'),\n                    withText: true,\n                    onExecute: () => dialog.hide()\n                },\n                {\n                    label: t('Accept'),\n                    class: 'ck-button-action',\n                    withText: true,\n                    onExecute: () => this._handleSubmitForm()\n                }\n            ]\n        });\n    }\n    _handleSubmitForm() {\n        const editor = this.editor;\n        const dialog = editor.plugins.get('Dialog');\n        if (this._formView.isValid()) {\n            editor.execute('mediaEmbed', this._formView.url);\n            dialog.hide();\n            editor.editing.view.focus();\n        }\n    }\n}\nfunction getFormValidators(t, registry) {\n    return [\n        form => {\n            if (!form.url.length) {\n                return t('The URL must not be empty.');\n            }\n        },\n        form => {\n            if (!registry.hasMedia(form.url)) {\n                return t('This media URL is not supported.');\n            }\n        }\n    ];\n}\n", "export default \"<svg viewBox=\\\"0 0 22 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M1.587 1.5c-.612 0-.601-.029-.601.551v14.84c0 .59-.01.559.591.559h18.846c.602 0 .591.03.591-.56V2.052c0-.58.01-.55-.591-.55H1.587Zm.701.971h1.003v1H2.288v-1Zm16.448 0h1.003v1h-1.003v-1Zm-14.24 1h13.008v12H4.467l.029-12Zm-2.208 1h1.003v1H2.288v-1Zm16.448 0h1.003v1h-1.003v-1Zm-16.448 2h1.003v1H2.288v-1Zm16.448 0h1.003v1h-1.003v-1Zm-16.448 2h1.003v1H2.288v-1Zm16.448 0h1.003v1h-1.003v-1Zm-16.448 2h1.003v1H2.288v-1Zm16.448 0h1.003v1h-1.003v-1Zm-16.448 2h1.003l-.029 1h-.974v-1Zm16.448 0h1.003v1h-1.003v-1Zm-16.448 2h.974v1h-.974v-1Zm16.448 0h1.003v1h-1.003v-1Z\\\"/><path d=\\\"M8.374 6.648a.399.399 0 0 1 .395-.4.402.402 0 0 1 .2.049l5.148 2.824a.4.4 0 0 1 0 .7l-5.148 2.824a.403.403 0 0 1-.595-.35V6.648Z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module mention/mentioncommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { CKEditorError, toMap } from 'ckeditor5/src/utils.js';\nimport { _addMentionAttributes } from './mentionediting.js';\nconst BRACKET_PAIRS = {\n    '(': ')',\n    '[': ']',\n    '{': '}'\n};\n/**\n * The mention command.\n *\n * The command is registered by {@link module:mention/mentionediting~MentionEditing} as `'mention'`.\n *\n * To insert a mention into a range, execute the command and specify a mention object with a range to replace:\n *\n * ```ts\n * const focus = editor.model.document.selection.focus;\n *\n * // It will replace one character before the selection focus with the '#1234' text\n * // with the mention attribute filled with passed attributes.\n * editor.execute( 'mention', {\n * \tmarker: '#',\n * \tmention: {\n * \t\tid: '#1234',\n * \t\tname: 'Foo',\n * \t\ttitle: 'Big Foo'\n * \t},\n * \trange: editor.model.createRange( focus.getShiftedBy( -1 ), focus )\n * } );\n *\n * // It will replace one character before the selection focus with the 'The \"Big Foo\"' text\n * // with the mention attribute filled with passed attributes.\n * editor.execute( 'mention', {\n * \tmarker: '#',\n * \tmention: {\n * \t\tid: '#1234',\n * \t\tname: 'Foo',\n * \t\ttitle: 'Big Foo'\n * \t},\n * \ttext: 'The \"Big Foo\"',\n * \trange: editor.model.createRange( focus.getShiftedBy( -1 ), focus )\n * } );\n *\t```\n */\nexport default class MentionCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        // Since this command may pass range in execution parameters, it should be checked directly in execute block.\n        this._isEnabledBasedOnSelection = false;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const doc = model.document;\n        this.isEnabled = model.schema.checkAttributeInSelection(doc.selection, 'mention');\n    }\n    /**\n     * Executes the command.\n     *\n     * @param options Options for the executed command.\n     * @param options.mention The mention object to insert. When a string is passed, it will be used to create a plain\n     * object with the name attribute that equals the passed string.\n     * @param options.marker The marker character (e.g. `'@'`).\n     * @param options.text The text of the inserted mention. Defaults to the full mention string composed from `marker` and\n     * `mention` string or `mention.id` if an object is passed.\n     * @param options.range The range to replace.\n     * Note that the replaced range might be shorter than the inserted text with the mention attribute.\n     * @fires execute\n     */\n    execute(options) {\n        const model = this.editor.model;\n        const document = model.document;\n        const selection = document.selection;\n        const mentionData = typeof options.mention == 'string' ? { id: options.mention } : options.mention;\n        const mentionID = mentionData.id;\n        const range = options.range || selection.getFirstRange();\n        // Don't execute command if range is in non-editable place.\n        if (!model.canEditAt(range)) {\n            return;\n        }\n        const mentionText = options.text || mentionID;\n        const mention = _addMentionAttributes({ _text: mentionText, id: mentionID }, mentionData);\n        if (options.marker.length != 1) {\n            /**\n             * The marker must be a single character.\n             *\n             * Correct markers: `'@'`, `'#'`.\n             *\n             * Incorrect markers: `'@@'`, `'[@'`.\n             *\n             * See {@link module:mention/mentionconfig~MentionConfig}.\n             *\n             * @error mentioncommand-incorrect-marker\n             */\n            throw new CKEditorError('mentioncommand-incorrect-marker', this);\n        }\n        if (mentionID.charAt(0) != options.marker) {\n            /**\n             * The feed item ID must start with the marker character.\n             *\n             * Correct mention feed setting:\n             *\n             * ```ts\n             * mentions: [\n             * \t{\n             * \t\tmarker: '@',\n             * \t\tfeed: [ '@Ann', '@Barney', ... ]\n             * \t}\n             * ]\n             * ```\n             *\n             * Incorrect mention feed setting:\n             *\n             * ```ts\n             * mentions: [\n             * \t{\n             * \t\tmarker: '@',\n             * \t\tfeed: [ 'Ann', 'Barney', ... ]\n             * \t}\n             * ]\n             * ```\n             *\n             * See {@link module:mention/mentionconfig~MentionConfig}.\n             *\n             * @error mentioncommand-incorrect-id\n             */\n            throw new CKEditorError('mentioncommand-incorrect-id', this);\n        }\n        model.change(writer => {\n            const currentAttributes = toMap(selection.getAttributes());\n            const attributesWithMention = new Map(currentAttributes.entries());\n            attributesWithMention.set('mention', mention);\n            // Replace a range with the text with a mention.\n            const insertionRange = model.insertContent(writer.createText(mentionText, attributesWithMention), range);\n            const nodeBefore = insertionRange.start.nodeBefore;\n            const nodeAfter = insertionRange.end.nodeAfter;\n            const isFollowedByWhiteSpace = nodeAfter && nodeAfter.is('$text') && nodeAfter.data.startsWith(' ');\n            let isInsertedInBrackets = false;\n            if (nodeBefore && nodeAfter && nodeBefore.is('$text') && nodeAfter.is('$text')) {\n                const precedingCharacter = nodeBefore.data.slice(-1);\n                const isPrecededByOpeningBracket = precedingCharacter in BRACKET_PAIRS;\n                const isFollowedByBracketClosure = isPrecededByOpeningBracket && nodeAfter.data.startsWith(BRACKET_PAIRS[precedingCharacter]);\n                isInsertedInBrackets = isPrecededByOpeningBracket && isFollowedByBracketClosure;\n            }\n            // Don't add a white space if either of the following is true:\n            // * there's already one after the mention;\n            // * the mention was inserted in the empty matching brackets.\n            // https://github.com/ckeditor/ckeditor5/issues/4651\n            if (!isInsertedInBrackets && !isFollowedByWhiteSpace) {\n                model.insertContent(writer.createText(' ', currentAttributes), range.start.getShiftedBy(mentionText.length));\n            }\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module mention/mentionediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { uid } from 'ckeditor5/src/utils.js';\nimport MentionCommand from './mentioncommand.js';\n/**\n * The mention editing feature.\n *\n * It introduces the {@link module:mention/mentioncommand~MentionCommand command} and the `mention`\n * attribute in the {@link module:engine/model/model~Model model} which renders in the {@link module:engine/view/view view}\n * as a `<span class=\"mention\" data-mention=\"@mention\">`.\n */\nexport default class MentionEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'MentionEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        const doc = model.document;\n        // Allow the mention attribute on all text nodes.\n        model.schema.extend('$text', { allowAttributes: 'mention' });\n        // Upcast conversion.\n        editor.conversion.for('upcast').elementToAttribute({\n            view: {\n                name: 'span',\n                key: 'data-mention',\n                classes: 'mention'\n            },\n            model: {\n                key: 'mention',\n                value: (viewElement) => _toMentionAttribute(viewElement)\n            }\n        });\n        // Downcast conversion.\n        editor.conversion.for('downcast').attributeToElement({\n            model: 'mention',\n            view: createViewMentionElement\n        });\n        editor.conversion.for('downcast').add(preventPartialMentionDowncast);\n        doc.registerPostFixer(writer => removePartialMentionPostFixer(writer, doc, model.schema));\n        doc.registerPostFixer(writer => extendAttributeOnMentionPostFixer(writer, doc));\n        doc.registerPostFixer(writer => selectionMentionAttributePostFixer(writer, doc));\n        editor.commands.add('mention', new MentionCommand(editor));\n    }\n}\n/**\n * @internal\n */\nexport function _addMentionAttributes(baseMentionData, data) {\n    return Object.assign({ uid: uid() }, baseMentionData, data || {});\n}\n/**\n * Creates a mention attribute value from the provided view element and optional data.\n *\n * This function is exposed as\n * {@link module:mention/mention~Mention#toMentionAttribute `editor.plugins.get( 'Mention' ).toMentionAttribute()`}.\n *\n * @internal\n */\nexport function _toMentionAttribute(viewElementOrMention, data) {\n    const dataMention = viewElementOrMention.getAttribute('data-mention');\n    const textNode = viewElementOrMention.getChild(0);\n    // Do not convert empty mentions.\n    if (!textNode) {\n        return;\n    }\n    const baseMentionData = {\n        id: dataMention,\n        _text: textNode.data\n    };\n    return _addMentionAttributes(baseMentionData, data);\n}\n/**\n * A converter that blocks partial mention from being converted.\n *\n * This converter is registered with 'highest' priority in order to consume mention attribute before it is converted by\n * any other converters. This converter only consumes partial mention - those whose `_text` attribute is not equal to text with mention\n * attribute. This may happen when copying part of mention text.\n */\nfunction preventPartialMentionDowncast(dispatcher) {\n    dispatcher.on('attribute:mention', (evt, data, conversionApi) => {\n        const mention = data.attributeNewValue;\n        if (!data.item.is('$textProxy') || !mention) {\n            return;\n        }\n        const start = data.range.start;\n        const textNode = start.textNode || start.nodeAfter;\n        if (textNode.data != mention._text) {\n            // Consume item to prevent partial mention conversion.\n            conversionApi.consumable.consume(data.item, evt.name);\n        }\n    }, { priority: 'highest' });\n}\n/**\n * Creates a mention element from the mention data.\n */\nfunction createViewMentionElement(mention, { writer }) {\n    if (!mention) {\n        return;\n    }\n    const attributes = {\n        class: 'mention',\n        'data-mention': mention.id\n    };\n    const options = {\n        id: mention.uid,\n        priority: 20\n    };\n    return writer.createAttributeElement('span', attributes, options);\n}\n/**\n * Model post-fixer that disallows typing with selection when the selection is placed after the text node with the mention attribute or\n * before a text node with mention attribute.\n */\nfunction selectionMentionAttributePostFixer(writer, doc) {\n    const selection = doc.selection;\n    const focus = selection.focus;\n    if (selection.isCollapsed && selection.hasAttribute('mention') && shouldNotTypeWithMentionAt(focus)) {\n        writer.removeSelectionAttribute('mention');\n        return true;\n    }\n    return false;\n}\n/**\n * Helper function to detect if mention attribute should be removed from selection.\n * This check makes only sense if the selection has mention attribute.\n *\n * The mention attribute should be removed from a selection when selection focus is placed:\n * a) after a text node\n * b) the position is at parents start - the selection will set attributes from node after.\n */\nfunction shouldNotTypeWithMentionAt(position) {\n    const isAtStart = position.isAtStart;\n    const isAfterAMention = position.nodeBefore && position.nodeBefore.is('$text');\n    return isAfterAMention || isAtStart;\n}\n/**\n * Model post-fixer that removes the mention attribute from the modified text node.\n */\nfunction removePartialMentionPostFixer(writer, doc, schema) {\n    const changes = doc.differ.getChanges();\n    let wasChanged = false;\n    for (const change of changes) {\n        if (change.type == 'attribute') {\n            continue;\n        }\n        // Checks the text node on the current position.\n        const position = change.position;\n        if (change.name == '$text') {\n            const nodeAfterInsertedTextNode = position.textNode && position.textNode.nextSibling;\n            // Checks the text node where the change occurred.\n            wasChanged = checkAndFix(position.textNode, writer) || wasChanged;\n            // Occurs on paste inside a text node with mention.\n            wasChanged = checkAndFix(nodeAfterInsertedTextNode, writer) || wasChanged;\n            wasChanged = checkAndFix(position.nodeBefore, writer) || wasChanged;\n            wasChanged = checkAndFix(position.nodeAfter, writer) || wasChanged;\n        }\n        // Checks text nodes in inserted elements (might occur when splitting a paragraph or pasting content inside text with mention).\n        if (change.name != '$text' && change.type == 'insert') {\n            const insertedNode = position.nodeAfter;\n            for (const item of writer.createRangeIn(insertedNode).getItems()) {\n                wasChanged = checkAndFix(item, writer) || wasChanged;\n            }\n        }\n        // Inserted inline elements might break mention.\n        if (change.type == 'insert' && schema.isInline(change.name)) {\n            const nodeAfterInserted = position.nodeAfter && position.nodeAfter.nextSibling;\n            wasChanged = checkAndFix(position.nodeBefore, writer) || wasChanged;\n            wasChanged = checkAndFix(nodeAfterInserted, writer) || wasChanged;\n        }\n    }\n    return wasChanged;\n}\n/**\n * This post-fixer will extend the attribute applied on the part of the mention so the whole text node of the mention will have\n * the added attribute.\n */\nfunction extendAttributeOnMentionPostFixer(writer, doc) {\n    const changes = doc.differ.getChanges();\n    let wasChanged = false;\n    for (const change of changes) {\n        if (change.type === 'attribute' && change.attributeKey != 'mention') {\n            // Checks the node on the left side of the range...\n            const nodeBefore = change.range.start.nodeBefore;\n            // ... and on the right side of the range.\n            const nodeAfter = change.range.end.nodeAfter;\n            for (const node of [nodeBefore, nodeAfter]) {\n                if (isBrokenMentionNode(node) && node.getAttribute(change.attributeKey) != change.attributeNewValue) {\n                    writer.setAttribute(change.attributeKey, change.attributeNewValue, node);\n                    wasChanged = true;\n                }\n            }\n        }\n    }\n    return wasChanged;\n}\n/**\n * Checks if a node has a correct mention attribute if present.\n * Returns `true` if the node is text and has a mention attribute whose text does not match the expected mention text.\n */\nfunction isBrokenMentionNode(node) {\n    if (!node || !(node.is('$text') || node.is('$textProxy')) || !node.hasAttribute('mention')) {\n        return false;\n    }\n    const text = node.data;\n    const mention = node.getAttribute('mention');\n    const expectedText = mention._text;\n    return text != expectedText;\n}\n/**\n * Fixes a mention on a text node if it needs a fix.\n */\nfunction checkAndFix(textNode, writer) {\n    if (isBrokenMentionNode(textNode)) {\n        writer.removeAttribute('mention', textNode);\n        return true;\n    }\n    return false;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module mention/ui/mentionsview\n */\nimport { ListView } from 'ckeditor5/src/ui.js';\nimport { Rect } from 'ckeditor5/src/utils.js';\nimport '../../theme/mentionui.css';\n/**\n * The mention ui view.\n */\nexport default class MentionsView extends ListView {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        this.extendTemplate({\n            attributes: {\n                class: [\n                    'ck-mentions'\n                ],\n                tabindex: '-1'\n            }\n        });\n    }\n    /**\n     * {@link #select Selects} the first item.\n     */\n    selectFirst() {\n        this.select(0);\n    }\n    /**\n     * Selects next item to the currently {@link #select selected}.\n     *\n     * If the last item is already selected, it will select the first item.\n     */\n    selectNext() {\n        const item = this.selected;\n        const index = this.items.getIndex(item);\n        this.select(index + 1);\n    }\n    /**\n     * Selects previous item to the currently {@link #select selected}.\n     *\n     * If the first item is already selected, it will select the last item.\n     */\n    selectPrevious() {\n        const item = this.selected;\n        const index = this.items.getIndex(item);\n        this.select(index - 1);\n    }\n    /**\n     * Marks item at a given index as selected.\n     *\n     * Handles selection cycling when passed index is out of bounds:\n     * - if the index is lower than 0, it will select the last item,\n     * - if the index is higher than the last item index, it will select the first item.\n     *\n     * @param index Index of an item to be marked as selected.\n     */\n    select(index) {\n        let indexToGet = 0;\n        if (index > 0 && index < this.items.length) {\n            indexToGet = index;\n        }\n        else if (index < 0) {\n            indexToGet = this.items.length - 1;\n        }\n        const item = this.items.get(indexToGet);\n        // Return early if item is already selected.\n        if (this.selected === item) {\n            return;\n        }\n        // Remove highlight of previously selected item.\n        if (this.selected) {\n            this.selected.removeHighlight();\n        }\n        item.highlight();\n        this.selected = item;\n        // Scroll the mentions view to the selected element.\n        if (!this._isItemVisibleInScrolledArea(item)) {\n            this.element.scrollTop = item.element.offsetTop;\n        }\n    }\n    /**\n     * Triggers the `execute` event on the {@link #select selected} item.\n     */\n    executeSelected() {\n        this.selected.fire('execute');\n    }\n    /**\n     * Checks if an item is visible in the scrollable area.\n     *\n     * The item is considered visible when:\n     * - its top boundary is inside the scrollable rect\n     * - its bottom boundary is inside the scrollable rect (the whole item must be visible)\n     */\n    _isItemVisibleInScrolledArea(item) {\n        return new Rect(this.element).contains(new Rect(item.element));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module mention/ui/domwrapperview\n */\nimport { View } from 'ckeditor5/src/ui.js';\n/**\n * This class wraps DOM element as a CKEditor5 UI View.\n *\n * It allows to render any DOM element and use it in mentions list.\n */\nexport default class DomWrapperView extends View {\n    /**\n     * Creates an instance of {@link module:mention/ui/domwrapperview~DomWrapperView} class.\n     *\n     * Also see {@link #render}.\n     */\n    constructor(locale, domElement) {\n        super(locale);\n        // Disable template rendering on this view.\n        this.template = undefined;\n        this.domElement = domElement;\n        // Render dom wrapper as a button.\n        this.domElement.classList.add('ck-button');\n        this.set('isOn', false);\n        // Handle isOn state as in buttons.\n        this.on('change:isOn', (evt, name, isOn) => {\n            if (isOn) {\n                this.domElement.classList.add('ck-on');\n                this.domElement.classList.remove('ck-off');\n            }\n            else {\n                this.domElement.classList.add('ck-off');\n                this.domElement.classList.remove('ck-on');\n            }\n        });\n        // Pass click event as execute event.\n        this.listenTo(this.domElement, 'click', () => {\n            this.fire('execute');\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        this.element = this.domElement;\n    }\n    /**\n     * Focuses the DOM element.\n     */\n    focus() {\n        this.domElement.focus();\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module mention/ui/mentionlistitemview\n */\nimport { ListItemView } from 'ckeditor5/src/ui.js';\nexport default class MentionListItemView extends ListItemView {\n    highlight() {\n        const child = this.children.first;\n        child.isOn = true;\n    }\n    removeHighlight() {\n        const child = this.children.first;\n        child.isOn = false;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module mention/mentionui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, ContextualBalloon, clickOutsideHandler } from 'ckeditor5/src/ui.js';\nimport { CKEditorError, Collection, Rect, env, keyCodes, logWarning } from 'ckeditor5/src/utils.js';\nimport { TextWatcher } from 'ckeditor5/src/typing.js';\nimport { debounce } from 'lodash-es';\nimport MentionsView from './ui/mentionsview.js';\nimport DomWrapperView from './ui/domwrapperview.js';\nimport MentionListItemView from './ui/mentionlistitemview.js';\nconst VERTICAL_SPACING = 3;\n// The key codes that mention UI handles when it is open (without commit keys).\nconst defaultHandledKeyCodes = [\n    keyCodes.arrowup,\n    keyCodes.arrowdown,\n    keyCodes.esc\n];\n// Dropdown commit key codes.\nconst defaultCommitKeyCodes = [\n    keyCodes.enter,\n    keyCodes.tab\n];\n/**\n * The mention UI feature.\n */\nexport default class MentionUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'MentionUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ContextualBalloon];\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        this._items = new Collection();\n        this._mentionsView = this._createMentionView();\n        this._mentionsConfigurations = new Map();\n        this._requestFeedDebounced = debounce(this._requestFeed, 100);\n        editor.config.define('mention', { feeds: [] });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const commitKeys = editor.config.get('mention.commitKeys') || defaultCommitKeyCodes;\n        const handledKeyCodes = defaultHandledKeyCodes.concat(commitKeys);\n        this._balloon = editor.plugins.get(ContextualBalloon);\n        // Key listener that handles navigation in mention view.\n        editor.editing.view.document.on('keydown', (evt, data) => {\n            if (isHandledKey(data.keyCode) && this._isUIVisible) {\n                data.preventDefault();\n                evt.stop(); // Required for Enter key overriding.\n                if (data.keyCode == keyCodes.arrowdown) {\n                    this._mentionsView.selectNext();\n                }\n                if (data.keyCode == keyCodes.arrowup) {\n                    this._mentionsView.selectPrevious();\n                }\n                if (commitKeys.includes(data.keyCode)) {\n                    this._mentionsView.executeSelected();\n                }\n                if (data.keyCode == keyCodes.esc) {\n                    this._hideUIAndRemoveMarker();\n                }\n            }\n        }, { priority: 'highest' }); // Required to override the Enter key.\n        // Close the dropdown upon clicking outside of the plugin UI.\n        clickOutsideHandler({\n            emitter: this._mentionsView,\n            activator: () => this._isUIVisible,\n            contextElements: () => [this._balloon.view.element],\n            callback: () => this._hideUIAndRemoveMarker()\n        });\n        const feeds = editor.config.get('mention.feeds');\n        for (const mentionDescription of feeds) {\n            const { feed, marker, dropdownLimit } = mentionDescription;\n            if (!isValidMentionMarker(marker)) {\n                /**\n                 * The marker must be a single character.\n                 *\n                 * Correct markers: `'@'`, `'#'`.\n                 *\n                 * Incorrect markers: `'$$'`, `'[@'`.\n                 *\n                 * See {@link module:mention/mentionconfig~MentionConfig}.\n                 *\n                 * @error mentionconfig-incorrect-marker\n                 * @param marker Configured marker\n                 */\n                throw new CKEditorError('mentionconfig-incorrect-marker', null, { marker });\n            }\n            const feedCallback = typeof feed == 'function' ? feed.bind(this.editor) : createFeedCallback(feed);\n            const itemRenderer = mentionDescription.itemRenderer;\n            const definition = { marker, feedCallback, itemRenderer, dropdownLimit };\n            this._mentionsConfigurations.set(marker, definition);\n        }\n        this._setupTextWatcher(feeds);\n        this.listenTo(editor, 'change:isReadOnly', () => {\n            this._hideUIAndRemoveMarker();\n        });\n        this.on('requestFeed:response', (evt, data) => this._handleFeedResponse(data));\n        this.on('requestFeed:error', () => this._hideUIAndRemoveMarker());\n        /**\n         * Checks if a given key code is handled by the mention UI.\n         */\n        function isHandledKey(keyCode) {\n            return handledKeyCodes.includes(keyCode);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        // Destroy created UI components as they are not automatically destroyed (see ckeditor5#1341).\n        this._mentionsView.destroy();\n    }\n    /**\n     * Returns true when {@link #_mentionsView} is in the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon} and it is\n     * currently visible.\n     */\n    get _isUIVisible() {\n        return this._balloon.visibleView === this._mentionsView;\n    }\n    /**\n     * Creates the {@link #_mentionsView}.\n     */\n    _createMentionView() {\n        const locale = this.editor.locale;\n        const mentionsView = new MentionsView(locale);\n        mentionsView.items.bindTo(this._items).using(data => {\n            const { item, marker } = data;\n            const { dropdownLimit: markerDropdownLimit } = this._mentionsConfigurations.get(marker);\n            // Set to 10 by default for backwards compatibility. See: #10479\n            const dropdownLimit = markerDropdownLimit || this.editor.config.get('mention.dropdownLimit') || 10;\n            if (mentionsView.items.length >= dropdownLimit) {\n                return null;\n            }\n            const listItemView = new MentionListItemView(locale);\n            const view = this._renderItem(item, marker);\n            view.delegate('execute').to(listItemView);\n            listItemView.children.add(view);\n            listItemView.item = item;\n            listItemView.marker = marker;\n            listItemView.on('execute', () => {\n                mentionsView.fire('execute', {\n                    item,\n                    marker\n                });\n            });\n            return listItemView;\n        });\n        mentionsView.on('execute', (evt, data) => {\n            const editor = this.editor;\n            const model = editor.model;\n            const item = data.item;\n            const marker = data.marker;\n            const mentionMarker = editor.model.markers.get('mention');\n            // Create a range on matched text.\n            const end = model.createPositionAt(model.document.selection.focus);\n            const start = model.createPositionAt(mentionMarker.getStart());\n            const range = model.createRange(start, end);\n            this._hideUIAndRemoveMarker();\n            editor.execute('mention', {\n                mention: item,\n                text: item.text,\n                marker,\n                range\n            });\n            editor.editing.view.focus();\n        });\n        return mentionsView;\n    }\n    /**\n     * Returns item renderer for the marker.\n     */\n    _getItemRenderer(marker) {\n        const { itemRenderer } = this._mentionsConfigurations.get(marker);\n        return itemRenderer;\n    }\n    /**\n     * Requests a feed from a configured callbacks.\n     */\n    _requestFeed(marker, feedText) {\n        // @if CK_DEBUG_MENTION // console.log( '%c[Feed]%c Requesting for', 'color: blue', 'color: black', `\"${ feedText }\"` );\n        // Store the last requested feed - it is used to discard any out-of order requests.\n        this._lastRequested = feedText;\n        const { feedCallback } = this._mentionsConfigurations.get(marker);\n        const feedResponse = feedCallback(feedText);\n        const isAsynchronous = feedResponse instanceof Promise;\n        // For synchronous feeds (e.g. callbacks, arrays) fire the response event immediately.\n        if (!isAsynchronous) {\n            this.fire('requestFeed:response', { feed: feedResponse, marker, feedText });\n            return;\n        }\n        // Handle the asynchronous responses.\n        feedResponse\n            .then(response => {\n            // Check the feed text of this response with the last requested one so either:\n            if (this._lastRequested == feedText) {\n                // It is the same and fire the response event.\n                this.fire('requestFeed:response', { feed: response, marker, feedText });\n            }\n            else {\n                // It is different - most probably out-of-order one, so fire the discarded event.\n                this.fire('requestFeed:discarded', { feed: response, marker, feedText });\n            }\n        })\n            .catch(error => {\n            this.fire('requestFeed:error', { error });\n            /**\n             * The callback used for obtaining mention autocomplete feed thrown and error and the mention UI was hidden or\n             * not displayed at all.\n             *\n             * @error mention-feed-callback-error\n             */\n            logWarning('mention-feed-callback-error', { marker });\n        });\n    }\n    /**\n     * Registers a text watcher for the marker.\n     */\n    _setupTextWatcher(feeds) {\n        const editor = this.editor;\n        const feedsWithPattern = feeds.map(feed => ({\n            ...feed,\n            pattern: createRegExp(feed.marker, feed.minimumCharacters || 0)\n        }));\n        const watcher = new TextWatcher(editor.model, createTestCallback(feedsWithPattern));\n        watcher.on('matched', (evt, data) => {\n            const markerDefinition = getLastValidMarkerInText(feedsWithPattern, data.text);\n            const selection = editor.model.document.selection;\n            const focus = selection.focus;\n            const markerPosition = editor.model.createPositionAt(focus.parent, markerDefinition.position);\n            if (isPositionInExistingMention(focus) || isMarkerInExistingMention(markerPosition)) {\n                this._hideUIAndRemoveMarker();\n                return;\n            }\n            const feedText = requestFeedText(markerDefinition, data.text);\n            const matchedTextLength = markerDefinition.marker.length + feedText.length;\n            // Create a marker range.\n            const start = focus.getShiftedBy(-matchedTextLength);\n            const end = focus.getShiftedBy(-feedText.length);\n            const markerRange = editor.model.createRange(start, end);\n            // @if CK_DEBUG_MENTION // console.group( '%c[TextWatcher]%c matched', 'color: red', 'color: black', `\"${ feedText }\"` );\n            // @if CK_DEBUG_MENTION // console.log( 'data#text', `\"${ data.text }\"` );\n            // @if CK_DEBUG_MENTION // console.log( 'data#range', data.range.start.path, data.range.end.path );\n            // @if CK_DEBUG_MENTION // console.log( 'marker definition', markerDefinition );\n            // @if CK_DEBUG_MENTION // console.log( 'marker range', markerRange.start.path, markerRange.end.path );\n            if (checkIfStillInCompletionMode(editor)) {\n                const mentionMarker = editor.model.markers.get('mention');\n                // Update the marker - user might've moved the selection to other mention trigger.\n                editor.model.change(writer => {\n                    // @if CK_DEBUG_MENTION // console.log( '%c[Editing]%c Updating the marker.', 'color: purple', 'color: black' );\n                    writer.updateMarker(mentionMarker, { range: markerRange });\n                });\n            }\n            else {\n                editor.model.change(writer => {\n                    // @if CK_DEBUG_MENTION // console.log( '%c[Editing]%c Adding the marker.', 'color: purple', 'color: black' );\n                    writer.addMarker('mention', { range: markerRange, usingOperation: false, affectsData: false });\n                });\n            }\n            this._requestFeedDebounced(markerDefinition.marker, feedText);\n            // @if CK_DEBUG_MENTION // console.groupEnd();\n        });\n        watcher.on('unmatched', () => {\n            this._hideUIAndRemoveMarker();\n        });\n        const mentionCommand = editor.commands.get('mention');\n        watcher.bind('isEnabled').to(mentionCommand);\n        return watcher;\n    }\n    /**\n     * Handles the feed response event data.\n     */\n    _handleFeedResponse(data) {\n        const { feed, marker } = data;\n        // eslint-disable-next-line max-len\n        // @if CK_DEBUG_MENTION // console.log( `%c[Feed]%c Response for \"${ data.feedText }\" (${ feed.length })`, 'color: blue', 'color: black', feed );\n        // If the marker is not in the document happens when the selection had changed and the 'mention' marker was removed.\n        if (!checkIfStillInCompletionMode(this.editor)) {\n            return;\n        }\n        // Reset the view.\n        this._items.clear();\n        for (const feedItem of feed) {\n            const item = typeof feedItem != 'object' ? { id: feedItem, text: feedItem } : feedItem;\n            this._items.add({ item, marker });\n        }\n        const mentionMarker = this.editor.model.markers.get('mention');\n        if (this._items.length) {\n            this._showOrUpdateUI(mentionMarker);\n        }\n        else {\n            // Do not show empty mention UI.\n            this._hideUIAndRemoveMarker();\n        }\n    }\n    /**\n     * Shows the mentions balloon. If the panel is already visible, it will reposition it.\n     */\n    _showOrUpdateUI(markerMarker) {\n        if (this._isUIVisible) {\n            // @if CK_DEBUG_MENTION // console.log( '%c[UI]%c Updating position.', 'color: green', 'color: black' );\n            // Update balloon position as the mention list view may change its size.\n            this._balloon.updatePosition(this._getBalloonPanelPositionData(markerMarker, this._mentionsView.position));\n        }\n        else {\n            // @if CK_DEBUG_MENTION // console.log( '%c[UI]%c Showing the UI.', 'color: green', 'color: black' );\n            this._balloon.add({\n                view: this._mentionsView,\n                position: this._getBalloonPanelPositionData(markerMarker, this._mentionsView.position),\n                singleViewMode: true\n            });\n        }\n        this._mentionsView.position = this._balloon.view.position;\n        this._mentionsView.selectFirst();\n    }\n    /**\n     * Hides the mentions balloon and removes the 'mention' marker from the markers collection.\n     */\n    _hideUIAndRemoveMarker() {\n        // Remove the mention view from balloon before removing marker - it is used by balloon position target().\n        if (this._balloon.hasView(this._mentionsView)) {\n            // @if CK_DEBUG_MENTION // console.log( '%c[UI]%c Hiding the UI.', 'color: green', 'color: black' );\n            this._balloon.remove(this._mentionsView);\n        }\n        if (checkIfStillInCompletionMode(this.editor)) {\n            // @if CK_DEBUG_MENTION // console.log( '%c[Editing]%c Removing marker.', 'color: purple', 'color: black' );\n            this.editor.model.change(writer => writer.removeMarker('mention'));\n        }\n        // Make the last matched position on panel view undefined so the #_getBalloonPanelPositionData() method will return all positions\n        // on the next call.\n        this._mentionsView.position = undefined;\n    }\n    /**\n     * Renders a single item in the autocomplete list.\n     */\n    _renderItem(item, marker) {\n        const editor = this.editor;\n        let view;\n        let label = item.id;\n        const renderer = this._getItemRenderer(marker);\n        if (renderer) {\n            const renderResult = renderer(item);\n            if (typeof renderResult != 'string') {\n                view = new DomWrapperView(editor.locale, renderResult);\n            }\n            else {\n                label = renderResult;\n            }\n        }\n        if (!view) {\n            const buttonView = new ButtonView(editor.locale);\n            buttonView.label = label;\n            buttonView.withText = true;\n            view = buttonView;\n        }\n        return view;\n    }\n    /**\n     * Creates a position options object used to position the balloon panel.\n     *\n     * @param mentionMarker\n     * @param preferredPosition The name of the last matched position name.\n     */\n    _getBalloonPanelPositionData(mentionMarker, preferredPosition) {\n        const editor = this.editor;\n        const editing = editor.editing;\n        const domConverter = editing.view.domConverter;\n        const mapper = editing.mapper;\n        const uiLanguageDirection = editor.locale.uiLanguageDirection;\n        return {\n            target: () => {\n                let modelRange = mentionMarker.getRange();\n                // Target the UI to the model selection range - the marker has been removed so probably the UI will not be shown anyway.\n                // The logic is used by ContextualBalloon to display another panel in the same place.\n                if (modelRange.start.root.rootName == '$graveyard') {\n                    modelRange = editor.model.document.selection.getFirstRange();\n                }\n                const viewRange = mapper.toViewRange(modelRange);\n                const rangeRects = Rect.getDomRangeRects(domConverter.viewRangeToDom(viewRange));\n                return rangeRects.pop();\n            },\n            limiter: () => {\n                const view = this.editor.editing.view;\n                const viewDocument = view.document;\n                const editableElement = viewDocument.selection.editableElement;\n                if (editableElement) {\n                    return view.domConverter.mapViewToDom(editableElement.root);\n                }\n                return null;\n            },\n            positions: getBalloonPanelPositions(preferredPosition, uiLanguageDirection)\n        };\n    }\n}\n/**\n * Returns the balloon positions data callbacks.\n */\nfunction getBalloonPanelPositions(preferredPosition, uiLanguageDirection) {\n    const positions = {\n        // Positions the panel to the southeast of the caret rectangle.\n        'caret_se': (targetRect) => {\n            return {\n                top: targetRect.bottom + VERTICAL_SPACING,\n                left: targetRect.right,\n                name: 'caret_se',\n                config: {\n                    withArrow: false\n                }\n            };\n        },\n        // Positions the panel to the northeast of the caret rectangle.\n        'caret_ne': (targetRect, balloonRect) => {\n            return {\n                top: targetRect.top - balloonRect.height - VERTICAL_SPACING,\n                left: targetRect.right,\n                name: 'caret_ne',\n                config: {\n                    withArrow: false\n                }\n            };\n        },\n        // Positions the panel to the southwest of the caret rectangle.\n        'caret_sw': (targetRect, balloonRect) => {\n            return {\n                top: targetRect.bottom + VERTICAL_SPACING,\n                left: targetRect.right - balloonRect.width,\n                name: 'caret_sw',\n                config: {\n                    withArrow: false\n                }\n            };\n        },\n        // Positions the panel to the northwest of the caret rect.\n        'caret_nw': (targetRect, balloonRect) => {\n            return {\n                top: targetRect.top - balloonRect.height - VERTICAL_SPACING,\n                left: targetRect.right - balloonRect.width,\n                name: 'caret_nw',\n                config: {\n                    withArrow: false\n                }\n            };\n        }\n    };\n    // Returns only the last position if it was matched to prevent the panel from jumping after the first match.\n    if (Object.prototype.hasOwnProperty.call(positions, preferredPosition)) {\n        return [\n            positions[preferredPosition]\n        ];\n    }\n    // By default, return all position callbacks ordered depending on the UI language direction.\n    return uiLanguageDirection !== 'rtl' ? [\n        positions.caret_se,\n        positions.caret_sw,\n        positions.caret_ne,\n        positions.caret_nw\n    ] : [\n        positions.caret_sw,\n        positions.caret_se,\n        positions.caret_nw,\n        positions.caret_ne\n    ];\n}\n/**\n * Returns a marker definition of the last valid occurring marker in a given string.\n * If there is no valid marker in a string, it returns undefined.\n *\n * Example of returned object:\n *\n * ```ts\n * {\n * \tmarker: '@',\n * \tposition: 4,\n * \tminimumCharacters: 0\n * }\n * ````\n *\n * @param feedsWithPattern Registered feeds in editor for mention plugin with created RegExp for matching marker.\n * @param text String to find the marker in\n * @returns Matched marker's definition\n */\nfunction getLastValidMarkerInText(feedsWithPattern, text) {\n    let lastValidMarker;\n    for (const feed of feedsWithPattern) {\n        const currentMarkerLastIndex = text.lastIndexOf(feed.marker);\n        if (currentMarkerLastIndex > 0 && !text.substring(currentMarkerLastIndex - 1).match(feed.pattern)) {\n            continue;\n        }\n        if (!lastValidMarker || currentMarkerLastIndex >= lastValidMarker.position) {\n            lastValidMarker = {\n                marker: feed.marker,\n                position: currentMarkerLastIndex,\n                minimumCharacters: feed.minimumCharacters,\n                pattern: feed.pattern\n            };\n        }\n    }\n    return lastValidMarker;\n}\n/**\n * Creates a RegExp pattern for the marker.\n *\n * Function has to be exported to achieve 100% code coverage.\n */\nexport function createRegExp(marker, minimumCharacters) {\n    const numberOfCharacters = minimumCharacters == 0 ? '*' : `{${minimumCharacters},}`;\n    const openAfterCharacters = env.features.isRegExpUnicodePropertySupported ? '\\\\p{Ps}\\\\p{Pi}\"\\'' : '\\\\(\\\\[{\"\\'';\n    const mentionCharacters = '.';\n    // I wanted to make an util out of it, but since this regexp uses \"u\" flag, it became difficult.\n    // When \"u\" flag is used, the regexp has \"strict\" escaping rules, i.e. if you try to escape a character that does not need\n    // to be escaped, RegExp() will throw. It made it difficult to write a generic util, because different characters are\n    // allowed in different context. For example, escaping \"-\" sometimes was correct, but sometimes it threw an error.\n    marker = marker.replace(/[.*+?^${}()\\-|[\\]\\\\]/g, '\\\\$&');\n    // The pattern consists of 3 groups:\n    //\n    // - 0 (non-capturing): Opening sequence - start of the line, space or an opening punctuation character like \"(\" or \"\\\"\",\n    // - 1: The marker character,\n    // - 2: Mention input (taking the minimal length into consideration to trigger the UI),\n    //\n    // The pattern matches up to the caret (end of string switch - $).\n    //               (0:      opening sequence       )(1:   marker  )(2:                typed mention              )$\n    const pattern = `(?:^|[ ${openAfterCharacters}])([${marker}])(${mentionCharacters}${numberOfCharacters})$`;\n    return new RegExp(pattern, 'u');\n}\n/**\n * Creates a test callback for the marker to be used in the text watcher instance.\n *\n * @param feedsWithPattern Feeds of mention plugin configured in editor with RegExp to match marker in text\n */\nfunction createTestCallback(feedsWithPattern) {\n    const textMatcher = (text) => {\n        const markerDefinition = getLastValidMarkerInText(feedsWithPattern, text);\n        if (!markerDefinition) {\n            return false;\n        }\n        let splitStringFrom = 0;\n        if (markerDefinition.position !== 0) {\n            splitStringFrom = markerDefinition.position - 1;\n        }\n        const textToTest = text.substring(splitStringFrom);\n        return markerDefinition.pattern.test(textToTest);\n    };\n    return textMatcher;\n}\n/**\n * Creates a text matcher from the marker.\n */\nfunction requestFeedText(markerDefinition, text) {\n    let splitStringFrom = 0;\n    if (markerDefinition.position !== 0) {\n        splitStringFrom = markerDefinition.position - 1;\n    }\n    const regExp = createRegExp(markerDefinition.marker, 0);\n    const textToMatch = text.substring(splitStringFrom);\n    const match = textToMatch.match(regExp);\n    return match[2];\n}\n/**\n * The default feed callback.\n */\nfunction createFeedCallback(feedItems) {\n    return (feedText) => {\n        const filteredItems = feedItems\n            // Make the default mention feed case-insensitive.\n            .filter(item => {\n            // Item might be defined as object.\n            const itemId = typeof item == 'string' ? item : String(item.id);\n            // The default feed is case insensitive.\n            return itemId.toLowerCase().includes(feedText.toLowerCase());\n        });\n        return filteredItems;\n    };\n}\n/**\n * Checks if position in inside or right after a text with a mention.\n */\nfunction isPositionInExistingMention(position) {\n    // The text watcher listens only to changed range in selection - so the selection attributes are not yet available\n    // and you cannot use selection.hasAttribute( 'mention' ) just yet.\n    // See https://github.com/ckeditor/ckeditor5-engine/issues/1723.\n    const hasMention = position.textNode && position.textNode.hasAttribute('mention');\n    const nodeBefore = position.nodeBefore;\n    return hasMention || nodeBefore && nodeBefore.is('$text') && nodeBefore.hasAttribute('mention');\n}\n/**\n * Checks if the closest marker offset is at the beginning of a mention.\n *\n * See https://github.com/ckeditor/ckeditor5/issues/11400.\n */\nfunction isMarkerInExistingMention(markerPosition) {\n    const nodeAfter = markerPosition.nodeAfter;\n    return nodeAfter && nodeAfter.is('$text') && nodeAfter.hasAttribute('mention');\n}\n/**\n * Checks if string is a valid mention marker.\n */\nfunction isValidMentionMarker(marker) {\n    return marker && marker.length == 1;\n}\n/**\n * Checks the mention plugins is in completion mode (e.g. when typing is after a valid mention string like @foo).\n */\nfunction checkIfStillInCompletionMode(editor) {\n    return editor.model.markers.has('mention');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/filters/utils\n */\n/**\n * Normalizes CSS length value to 'px'.\n *\n * @internal\n */\nexport function convertCssLengthToPx(value) {\n    const numericValue = parseFloat(value);\n    if (value.endsWith('pt')) {\n        // 1pt = 1in / 72\n        return toPx(numericValue * 96 / 72);\n    }\n    else if (value.endsWith('pc')) {\n        // 1pc = 12pt = 1in / 6.\n        return toPx(numericValue * 12 * 96 / 72);\n    }\n    else if (value.endsWith('in')) {\n        // 1in = 2.54cm = 96px\n        return toPx(numericValue * 96);\n    }\n    else if (value.endsWith('cm')) {\n        // 1cm = 96px / 2.54\n        return toPx(numericValue * 96 / 2.54);\n    }\n    else if (value.endsWith('mm')) {\n        // 1mm = 1cm / 10\n        return toPx(numericValue / 10 * 96 / 2.54);\n    }\n    return value;\n}\n/**\n * Returns true for value with 'px' unit.\n *\n * @internal\n */\nexport function isPx(value) {\n    return value !== undefined && value.endsWith('px');\n}\n/**\n * Returns a rounded 'px' value.\n *\n * @internal\n */\nexport function toPx(value) {\n    return value.toFixed(2).replace(/\\.?0+$/, '') + 'px';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/filters/list\n */\nimport { Matcher, UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { convertCssLengthToPx, isPx, toPx } from './utils.js';\n/**\n * Transforms Word specific list-like elements to the semantic HTML lists.\n *\n * Lists in Word are represented by block elements with special attributes like:\n *\n * ```xml\n * <p class=MsoListParagraphCxSpFirst style='mso-list:l1 level1 lfo1'>...</p> // Paragraph based list.\n * <h1 style='mso-list:l0 level1 lfo1'>...</h1> // Heading 1 based list.\n * ```\n *\n * @param documentFragment The view structure to be transformed.\n * @param stylesString Styles from which list-like elements styling will be extracted.\n */\nexport function transformListItemLikeElementsIntoLists(documentFragment, stylesString, hasMultiLevelListPlugin) {\n    if (!documentFragment.childCount) {\n        return;\n    }\n    const writer = new UpcastWriter(documentFragment.document);\n    const itemLikeElements = findAllItemLikeElements(documentFragment, writer);\n    if (!itemLikeElements.length) {\n        return;\n    }\n    const encounteredLists = {};\n    const stack = [];\n    for (const itemLikeElement of itemLikeElements) {\n        if (itemLikeElement.indent !== undefined) {\n            if (!isListContinuation(itemLikeElement)) {\n                stack.length = 0;\n            }\n            // Combined list ID for addressing encounter lists counters.\n            const originalListId = `${itemLikeElement.id}:${itemLikeElement.indent}`;\n            // Normalized list item indentation.\n            const indent = Math.min(itemLikeElement.indent - 1, stack.length);\n            // Trimming of the list stack on list ID change.\n            if (indent < stack.length && stack[indent].id !== itemLikeElement.id) {\n                stack.length = indent;\n            }\n            // Trimming of the list stack on lower indent list encountered.\n            if (indent < stack.length - 1) {\n                stack.length = indent + 1;\n            }\n            else {\n                const listStyle = detectListStyle(itemLikeElement, stylesString);\n                // Create a new OL/UL if required (greater indent or different list type).\n                if (indent > stack.length - 1 || stack[indent].listElement.name != listStyle.type) {\n                    // Check if there is some start index to set from a previous list.\n                    if (indent == 0 &&\n                        listStyle.type == 'ol' &&\n                        itemLikeElement.id !== undefined &&\n                        encounteredLists[originalListId]) {\n                        listStyle.startIndex = encounteredLists[originalListId];\n                    }\n                    const listElement = createNewEmptyList(listStyle, writer, hasMultiLevelListPlugin);\n                    // Apply list padding only if we have margins for the item and the parent item.\n                    if (isPx(itemLikeElement.marginLeft) &&\n                        (indent == 0 || isPx(stack[indent - 1].marginLeft))) {\n                        let marginLeft = itemLikeElement.marginLeft;\n                        if (indent > 0) {\n                            // Convert the padding from absolute to relative.\n                            marginLeft = toPx(parseFloat(marginLeft) - parseFloat(stack[indent - 1].marginLeft));\n                        }\n                        writer.setStyle('padding-left', marginLeft, listElement);\n                    }\n                    // Insert the new OL/UL.\n                    if (stack.length == 0) {\n                        const parent = itemLikeElement.element.parent;\n                        const index = parent.getChildIndex(itemLikeElement.element) + 1;\n                        writer.insertChild(index, listElement, parent);\n                    }\n                    else {\n                        const parentListItems = stack[indent - 1].listItemElements;\n                        writer.appendChild(listElement, parentListItems[parentListItems.length - 1]);\n                    }\n                    // Update the list stack for other items to reference.\n                    stack[indent] = {\n                        ...itemLikeElement,\n                        listElement,\n                        listItemElements: []\n                    };\n                    // Prepare list counter for start index.\n                    if (indent == 0 && itemLikeElement.id !== undefined) {\n                        encounteredLists[originalListId] = listStyle.startIndex || 1;\n                    }\n                }\n            }\n            // Use LI if it is already it or create a new LI element.\n            // https://github.com/ckeditor/ckeditor5/issues/15964\n            const listItem = itemLikeElement.element.name == 'li' ? itemLikeElement.element : writer.createElement('li');\n            // Append the LI to OL/UL.\n            writer.appendChild(listItem, stack[indent].listElement);\n            stack[indent].listItemElements.push(listItem);\n            // Increment list counter.\n            if (indent == 0 && itemLikeElement.id !== undefined) {\n                encounteredLists[originalListId]++;\n            }\n            // Append list block to LI.\n            if (itemLikeElement.element != listItem) {\n                writer.appendChild(itemLikeElement.element, listItem);\n            }\n            // Clean list block.\n            removeBulletElement(itemLikeElement.element, writer);\n            writer.removeStyle('text-indent', itemLikeElement.element); // #12361\n            writer.removeStyle('margin-left', itemLikeElement.element);\n        }\n        else {\n            // Other blocks in a list item.\n            const stackItem = stack.find(stackItem => stackItem.marginLeft == itemLikeElement.marginLeft);\n            // This might be a paragraph that has known margin, but it is not a real list block.\n            if (stackItem) {\n                const listItems = stackItem.listItemElements;\n                // Append block to LI.\n                writer.appendChild(itemLikeElement.element, listItems[listItems.length - 1]);\n                writer.removeStyle('margin-left', itemLikeElement.element);\n            }\n            else {\n                stack.length = 0;\n            }\n        }\n    }\n}\n/**\n * Removes paragraph wrapping content inside a list item.\n */\nexport function unwrapParagraphInListItem(documentFragment, writer) {\n    for (const value of writer.createRangeIn(documentFragment)) {\n        const element = value.item;\n        if (element.is('element', 'li')) {\n            // Google Docs allows for single paragraph inside LI.\n            const firstChild = element.getChild(0);\n            if (firstChild && firstChild.is('element', 'p')) {\n                writer.unwrapElement(firstChild);\n            }\n        }\n    }\n}\n/**\n * Finds all list-like elements in a given document fragment.\n *\n * @param documentFragment Document fragment in which to look for list-like nodes.\n * @returns Array of found list-like items. Each item is an object containing:\n */\nfunction findAllItemLikeElements(documentFragment, writer) {\n    const range = writer.createRangeIn(documentFragment);\n    const itemLikeElements = [];\n    const foundMargins = new Set();\n    for (const item of range.getItems()) {\n        // https://github.com/ckeditor/ckeditor5/issues/15964\n        if (!item.is('element') || !item.name.match(/^(p|h\\d+|li|div)$/)) {\n            continue;\n        }\n        // Try to rely on margin-left style to find paragraphs visually aligned with previously encountered list item.\n        let marginLeft = getMarginLeftNormalized(item);\n        // Ignore margin-left 0 style if there is no MsoList... class.\n        if (marginLeft !== undefined &&\n            parseFloat(marginLeft) == 0 &&\n            !Array.from(item.getClassNames()).find(className => className.startsWith('MsoList'))) {\n            marginLeft = undefined;\n        }\n        // List item or a following list item block.\n        if (item.hasStyle('mso-list') || marginLeft !== undefined && foundMargins.has(marginLeft)) {\n            const itemData = getListItemData(item);\n            itemLikeElements.push({\n                element: item,\n                id: itemData.id,\n                order: itemData.order,\n                indent: itemData.indent,\n                marginLeft\n            });\n            if (marginLeft !== undefined) {\n                foundMargins.add(marginLeft);\n            }\n        }\n        // Clear found margins as we found block after a list.\n        else {\n            foundMargins.clear();\n        }\n    }\n    return itemLikeElements;\n}\n/**\n * Whether the given element is possibly a list continuation. Previous element was wrapped into a list\n * or the current element already is inside a list.\n */\nfunction isListContinuation(currentItem) {\n    const previousSibling = currentItem.element.previousSibling;\n    if (!previousSibling) {\n        // If it's a li inside ul or ol like in here: https://github.com/ckeditor/ckeditor5/issues/15964.\n        return isList(currentItem.element.parent);\n    }\n    // Even with the same id the list does not have to be continuous (#43).\n    return isList(previousSibling);\n}\nfunction isList(element) {\n    return element.is('element', 'ol') || element.is('element', 'ul');\n}\n/**\n * Extracts list item style from the provided CSS.\n *\n * List item style is extracted from the CSS stylesheet. Each list with its specific style attribute\n * value (`mso-list:l1 level1 lfo1`) has its dedicated properties in a CSS stylesheet defined with a selector like:\n *\n * ```css\n * @list l1:level1 { ... }\n * ```\n *\n * It contains `mso-level-number-format` property which defines list numbering/bullet style. If this property\n * is not defined it means default `decimal` numbering.\n *\n * Here CSS string representation is used as `mso-level-number-format` property is an invalid CSS property\n * and will be removed during CSS parsing.\n *\n * @param listLikeItem List-like item for which list style will be searched for. Usually\n * a result of `findAllItemLikeElements()` function.\n * @param stylesString CSS stylesheet.\n * @returns An object with properties:\n *\n * * type - List type, could be `ul` or `ol`.\n * * startIndex - List start index, valid only for ordered lists.\n * * style - List style, for example: `decimal`, `lower-roman`, etc. It is extracted\n *     directly from Word stylesheet and adjusted to represent proper values for the CSS `list-style-type` property.\n *     If it cannot be adjusted, the `null` value is returned.\n */\nfunction detectListStyle(listLikeItem, stylesString) {\n    const listStyleRegexp = new RegExp(`@list l${listLikeItem.id}:level${listLikeItem.indent}\\\\s*({[^}]*)`, 'gi');\n    const listStyleTypeRegex = /mso-level-number-format:([^;]{0,100});/gi;\n    const listStartIndexRegex = /mso-level-start-at:\\s{0,100}([0-9]{0,10})\\s{0,100};/gi;\n    const legalStyleListRegex = new RegExp(`@list\\\\s+l${listLikeItem.id}:level\\\\d\\\\s*{[^{]*mso-level-text:\"%\\\\d\\\\\\\\.`, 'gi');\n    const multiLevelNumberFormatTypeRegex = new RegExp(`@list l${listLikeItem.id}:level\\\\d\\\\s*{[^{]*mso-level-number-format:`, 'gi');\n    const legalStyleListMatch = legalStyleListRegex.exec(stylesString);\n    const multiLevelNumberFormatMatch = multiLevelNumberFormatTypeRegex.exec(stylesString);\n    // Multi level lists in Word have mso-level-number-format attribute except legal lists,\n    // so we used that. If list has legal list match and doesn't has mso-level-number-format\n    // then this is legal-list.\n    const islegalStyleList = legalStyleListMatch && !multiLevelNumberFormatMatch;\n    const listStyleMatch = listStyleRegexp.exec(stylesString);\n    let listStyleType = 'decimal'; // Decimal is default one.\n    let type = 'ol'; // <ol> is default list.\n    let startIndex = null;\n    if (listStyleMatch && listStyleMatch[1]) {\n        const listStyleTypeMatch = listStyleTypeRegex.exec(listStyleMatch[1]);\n        if (listStyleTypeMatch && listStyleTypeMatch[1]) {\n            listStyleType = listStyleTypeMatch[1].trim();\n            type = listStyleType !== 'bullet' && listStyleType !== 'image' ? 'ol' : 'ul';\n        }\n        // Styles for the numbered lists are always defined in the Word CSS stylesheet.\n        // Unordered lists MAY contain a value for the Word CSS definition `mso-level-text` but sometimes\n        // this tag is missing. And because of that, we cannot depend on that. We need to predict the list style value\n        // based on the list style marker element.\n        if (listStyleType === 'bullet') {\n            const bulletedStyle = findBulletedListStyle(listLikeItem.element);\n            if (bulletedStyle) {\n                listStyleType = bulletedStyle;\n            }\n        }\n        else {\n            const listStartIndexMatch = listStartIndexRegex.exec(listStyleMatch[1]);\n            if (listStartIndexMatch && listStartIndexMatch[1]) {\n                startIndex = parseInt(listStartIndexMatch[1]);\n            }\n        }\n        if (islegalStyleList) {\n            type = 'ol';\n        }\n    }\n    return {\n        type,\n        startIndex,\n        style: mapListStyleDefinition(listStyleType),\n        isLegalStyleList: islegalStyleList\n    };\n}\n/**\n * Tries to extract the `list-style-type` value based on the marker element for bulleted list.\n */\nfunction findBulletedListStyle(element) {\n    // https://github.com/ckeditor/ckeditor5/issues/15964\n    if (element.name == 'li' && element.parent.name == 'ul' && element.parent.hasAttribute('type')) {\n        return element.parent.getAttribute('type');\n    }\n    const listMarkerElement = findListMarkerNode(element);\n    if (!listMarkerElement) {\n        return null;\n    }\n    const listMarker = listMarkerElement._data;\n    if (listMarker === 'o') {\n        return 'circle';\n    }\n    else if (listMarker === '·') {\n        return 'disc';\n    }\n    // Word returns '§' instead of '■' for the square list style.\n    else if (listMarker === '§') {\n        return 'square';\n    }\n    return null;\n}\n/**\n * Tries to find a text node that represents the marker element (list-style-type).\n */\nfunction findListMarkerNode(element) {\n    // If the first child is a text node, it is the data for the element.\n    // The list-style marker is not present here.\n    if (element.getChild(0).is('$text')) {\n        return null;\n    }\n    for (const childNode of element.getChildren()) {\n        // The list-style marker will be inside the `<span>` element. Let's ignore all non-span elements.\n        // It may happen that the `<a>` element is added as the first child. Most probably, it's an anchor element.\n        if (!childNode.is('element', 'span')) {\n            continue;\n        }\n        const textNodeOrElement = childNode.getChild(0);\n        if (!textNodeOrElement) {\n            continue;\n        }\n        // If already found the marker element, use it.\n        if (textNodeOrElement.is('$text')) {\n            return textNodeOrElement;\n        }\n        return textNodeOrElement.getChild(0);\n    }\n    /* istanbul ignore next -- @preserve */\n    return null;\n}\n/**\n * Parses the `list-style-type` value extracted directly from the Word CSS stylesheet and returns proper CSS definition.\n */\nfunction mapListStyleDefinition(value) {\n    if (value.startsWith('arabic-leading-zero')) {\n        return 'decimal-leading-zero';\n    }\n    switch (value) {\n        case 'alpha-upper':\n            return 'upper-alpha';\n        case 'alpha-lower':\n            return 'lower-alpha';\n        case 'roman-upper':\n            return 'upper-roman';\n        case 'roman-lower':\n            return 'lower-roman';\n        case 'circle':\n        case 'disc':\n        case 'square':\n            return value;\n        default:\n            return null;\n    }\n}\n/**\n * Creates a new list OL/UL element.\n */\nfunction createNewEmptyList(listStyle, writer, hasMultiLevelListPlugin) {\n    const list = writer.createElement(listStyle.type);\n    // We do not support modifying the marker for a particular list item.\n    // Set the value for the `list-style-type` property directly to the list container.\n    if (listStyle.style) {\n        writer.setStyle('list-style-type', listStyle.style, list);\n    }\n    if (listStyle.startIndex && listStyle.startIndex > 1) {\n        writer.setAttribute('start', listStyle.startIndex, list);\n    }\n    if (listStyle.isLegalStyleList && hasMultiLevelListPlugin) {\n        writer.addClass('legal-list', list);\n    }\n    return list;\n}\n/**\n * Extracts list item information from Word specific list-like element style:\n *\n * ```\n * `style=\"mso-list:l1 level1 lfo1\"`\n * ```\n *\n * where:\n *\n * ```\n * * `l1` is a list id (however it does not mean this is a continuous list - see #43),\n * * `level1` is a list item indentation level,\n * * `lfo1` is a list insertion order in a document.\n * ```\n *\n * @param element Element from which style data is extracted.\n */\nfunction getListItemData(element) {\n    const listStyle = element.getStyle('mso-list');\n    if (listStyle === undefined) {\n        return {};\n    }\n    const idMatch = listStyle.match(/(^|\\s{1,100})l(\\d+)/i);\n    const orderMatch = listStyle.match(/\\s{0,100}lfo(\\d+)/i);\n    const indentMatch = listStyle.match(/\\s{0,100}level(\\d+)/i);\n    if (idMatch && orderMatch && indentMatch) {\n        return {\n            id: idMatch[2],\n            order: orderMatch[1],\n            indent: parseInt(indentMatch[1])\n        };\n    }\n    return {\n        indent: 1 // Handle empty mso-list style as a marked for default list item.\n    };\n}\n/**\n * Removes span with a numbering/bullet from a given element.\n */\nfunction removeBulletElement(element, writer) {\n    // Matcher for finding `span` elements holding lists numbering/bullets.\n    const bulletMatcher = new Matcher({\n        name: 'span',\n        styles: {\n            'mso-list': 'Ignore'\n        }\n    });\n    const range = writer.createRangeIn(element);\n    for (const value of range) {\n        if (value.type === 'elementStart' && bulletMatcher.match(value.item)) {\n            writer.remove(value.item);\n        }\n    }\n}\n/**\n * Returns element left margin normalized to 'px' if possible.\n */\nfunction getMarginLeftNormalized(element) {\n    const value = element.getStyle('margin-left');\n    if (value === undefined || value.endsWith('px')) {\n        return value;\n    }\n    return convertCssLengthToPx(value);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/filters/image\n */\n/* globals btoa */\nimport { Matcher, UpcastWriter } from 'ckeditor5/src/engine.js';\n/**\n * Replaces source attribute of all `<img>` elements representing regular\n * images (not the Word shapes) with inlined base64 image representation extracted from RTF or Blob data.\n *\n * @param documentFragment Document fragment on which transform images.\n * @param rtfData The RTF data from which images representation will be used.\n */\nexport function replaceImagesSourceWithBase64(documentFragment, rtfData) {\n    if (!documentFragment.childCount) {\n        return;\n    }\n    const upcastWriter = new UpcastWriter(documentFragment.document);\n    const shapesIds = findAllShapesIds(documentFragment, upcastWriter);\n    removeAllImgElementsRepresentingShapes(shapesIds, documentFragment, upcastWriter);\n    insertMissingImgs(shapesIds, documentFragment, upcastWriter);\n    removeAllShapeElements(documentFragment, upcastWriter);\n    const images = findAllImageElementsWithLocalSource(documentFragment, upcastWriter);\n    if (images.length) {\n        replaceImagesFileSourceWithInlineRepresentation(images, extractImageDataFromRtf(rtfData), upcastWriter);\n    }\n}\n/**\n * Converts given HEX string to base64 representation.\n *\n * @internal\n * @param hexString The HEX string to be converted.\n * @returns Base64 representation of a given HEX string.\n */\nexport function _convertHexToBase64(hexString) {\n    return btoa(hexString.match(/\\w{2}/g).map(char => {\n        return String.fromCharCode(parseInt(char, 16));\n    }).join(''));\n}\n/**\n * Finds all shapes (`<v:*>...</v:*>`) ids. Shapes can represent images (canvas)\n * or Word shapes (which does not have RTF or Blob representation).\n *\n * @param documentFragment Document fragment from which to extract shape ids.\n * @returns Array of shape ids.\n */\nfunction findAllShapesIds(documentFragment, writer) {\n    const range = writer.createRangeIn(documentFragment);\n    const shapeElementsMatcher = new Matcher({\n        name: /v:(.+)/\n    });\n    const shapesIds = [];\n    for (const value of range) {\n        if (value.type != 'elementStart') {\n            continue;\n        }\n        const el = value.item;\n        const previousSibling = el.previousSibling;\n        const prevSiblingName = previousSibling && previousSibling.is('element') ? previousSibling.name : null;\n        // List of ids which should not be considered as shapes.\n        // https://github.com/ckeditor/ckeditor5/pull/15847#issuecomment-1941543983\n        const exceptionIds = ['Chart'];\n        const isElementAShape = shapeElementsMatcher.match(el);\n        const hasElementGfxdataAttribute = el.getAttribute('o:gfxdata');\n        const isPreviousSiblingAShapeType = prevSiblingName === 'v:shapetype';\n        const isElementIdInExceptionsArray = hasElementGfxdataAttribute &&\n            exceptionIds.some(item => el.getAttribute('id').includes(item));\n        // If shape element has 'o:gfxdata' attribute and is not directly before\n        // `<v:shapetype>` element it means that it represents a Word shape.\n        if (isElementAShape &&\n            hasElementGfxdataAttribute &&\n            !isPreviousSiblingAShapeType &&\n            !isElementIdInExceptionsArray) {\n            shapesIds.push(value.item.getAttribute('id'));\n        }\n    }\n    return shapesIds;\n}\n/**\n * Removes all `<img>` elements which represents Word shapes and not regular images.\n *\n * @param shapesIds Shape ids which will be checked against `<img>` elements.\n * @param documentFragment Document fragment from which to remove `<img>` elements.\n */\nfunction removeAllImgElementsRepresentingShapes(shapesIds, documentFragment, writer) {\n    const range = writer.createRangeIn(documentFragment);\n    const imageElementsMatcher = new Matcher({\n        name: 'img'\n    });\n    const imgs = [];\n    for (const value of range) {\n        if (value.item.is('element') && imageElementsMatcher.match(value.item)) {\n            const el = value.item;\n            const shapes = el.getAttribute('v:shapes') ? el.getAttribute('v:shapes').split(' ') : [];\n            if (shapes.length && shapes.every(shape => shapesIds.indexOf(shape) > -1)) {\n                imgs.push(el);\n                // Shapes may also have empty source while content is paste in some browsers (Safari).\n            }\n            else if (!el.getAttribute('src')) {\n                imgs.push(el);\n            }\n        }\n    }\n    for (const img of imgs) {\n        writer.remove(img);\n    }\n}\n/**\n * Removes all shape elements (`<v:*>...</v:*>`) so they do not pollute the output structure.\n *\n * @param documentFragment Document fragment from which to remove shape elements.\n */\nfunction removeAllShapeElements(documentFragment, writer) {\n    const range = writer.createRangeIn(documentFragment);\n    const shapeElementsMatcher = new Matcher({\n        name: /v:(.+)/\n    });\n    const shapes = [];\n    for (const value of range) {\n        if (value.type == 'elementStart' && shapeElementsMatcher.match(value.item)) {\n            shapes.push(value.item);\n        }\n    }\n    for (const shape of shapes) {\n        writer.remove(shape);\n    }\n}\n/**\n * Inserts `img` tags if there is none after a shape.\n */\nfunction insertMissingImgs(shapeIds, documentFragment, writer) {\n    const range = writer.createRangeIn(documentFragment);\n    const shapes = [];\n    for (const value of range) {\n        if (value.type == 'elementStart' && value.item.is('element', 'v:shape')) {\n            const id = value.item.getAttribute('id');\n            if (shapeIds.includes(id)) {\n                continue;\n            }\n            if (!containsMatchingImg(value.item.parent.getChildren(), id)) {\n                shapes.push(value.item);\n            }\n        }\n    }\n    for (const shape of shapes) {\n        const attrs = {\n            src: findSrc(shape)\n        };\n        if (shape.hasAttribute('alt')) {\n            attrs.alt = shape.getAttribute('alt');\n        }\n        const img = writer.createElement('img', attrs);\n        writer.insertChild(shape.index + 1, img, shape.parent);\n    }\n    function containsMatchingImg(nodes, id) {\n        for (const node of nodes) {\n            /* istanbul ignore else -- @preserve */\n            if (node.is('element')) {\n                if (node.name == 'img' && node.getAttribute('v:shapes') == id) {\n                    return true;\n                }\n                if (containsMatchingImg(node.getChildren(), id)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n    function findSrc(shape) {\n        for (const child of shape.getChildren()) {\n            /* istanbul ignore else -- @preserve */\n            if (child.is('element') && child.getAttribute('src')) {\n                return child.getAttribute('src');\n            }\n        }\n    }\n}\n/**\n * Finds all `<img>` elements in a given document fragment which have source pointing to local `file://` resource.\n *\n * @param documentFragment Document fragment in which to look for `<img>` elements.\n * @returns result All found images grouped by source type.\n */\nfunction findAllImageElementsWithLocalSource(documentFragment, writer) {\n    const range = writer.createRangeIn(documentFragment);\n    const imageElementsMatcher = new Matcher({\n        name: 'img'\n    });\n    const imgs = [];\n    for (const value of range) {\n        if (value.item.is('element') && imageElementsMatcher.match(value.item)) {\n            if (value.item.getAttribute('src').startsWith('file://')) {\n                imgs.push(value.item);\n            }\n        }\n    }\n    return imgs;\n}\n/**\n * Extracts all images HEX representations from a given RTF data.\n *\n * @param rtfData The RTF data from which to extract images HEX representation.\n * @returns Array of found HEX representations. Each array item is an object containing:\n *\n * * hex Image representation in HEX format.\n * * type Type of image, `image/png` or `image/jpeg`.\n */\nfunction extractImageDataFromRtf(rtfData) {\n    if (!rtfData) {\n        return [];\n    }\n    const regexPictureHeader = /{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/;\n    const regexPicture = new RegExp('(?:(' + regexPictureHeader.source + '))([\\\\da-fA-F\\\\s]+)\\\\}', 'g');\n    const images = rtfData.match(regexPicture);\n    const result = [];\n    if (images) {\n        for (const image of images) {\n            let imageType = false;\n            if (image.includes('\\\\pngblip')) {\n                imageType = 'image/png';\n            }\n            else if (image.includes('\\\\jpegblip')) {\n                imageType = 'image/jpeg';\n            }\n            if (imageType) {\n                result.push({\n                    hex: image.replace(regexPictureHeader, '').replace(/[^\\da-fA-F]/g, ''),\n                    type: imageType\n                });\n            }\n        }\n    }\n    return result;\n}\n/**\n * Replaces `src` attribute value of all given images with the corresponding base64 image representation.\n *\n * @param imageElements Array of image elements which will have its source replaced.\n * @param imagesHexSources Array of images hex sources (usually the result of `extractImageDataFromRtf()` function).\n * The array should be the same length as `imageElements` parameter.\n */\nfunction replaceImagesFileSourceWithInlineRepresentation(imageElements, imagesHexSources, writer) {\n    // Assume there is an equal amount of image elements and images HEX sources so they can be matched accordingly based on existing order.\n    if (imageElements.length === imagesHexSources.length) {\n        for (let i = 0; i < imageElements.length; i++) {\n            const newSrc = `data:${imagesHexSources[i].type};base64,${_convertHexToBase64(imagesHexSources[i].hex)}`;\n            writer.setAttribute('src', newSrc, imageElements[i]);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/normalizers/mswordnormalizer\n */\nimport { transformListItemLikeElementsIntoLists } from '../filters/list.js';\nimport { replaceImagesSourceWithBase64 } from '../filters/image.js';\nimport removeMSAttributes from '../filters/removemsattributes.js';\nconst msWordMatch1 = /<meta\\s*name=\"?generator\"?\\s*content=\"?microsoft\\s*word\\s*\\d+\"?\\/?>/i;\nconst msWordMatch2 = /xmlns:o=\"urn:schemas-microsoft-com/i;\n/**\n * Normalizer for the content pasted from Microsoft Word.\n */\nexport default class MSWordNormalizer {\n    /**\n     * Creates a new `MSWordNormalizer` instance.\n     *\n     * @param document View document.\n     */\n    constructor(document, hasMultiLevelListPlugin = false) {\n        this.document = document;\n        this.hasMultiLevelListPlugin = hasMultiLevelListPlugin;\n    }\n    /**\n     * @inheritDoc\n     */\n    isActive(htmlString) {\n        return msWordMatch1.test(htmlString) || msWordMatch2.test(htmlString);\n    }\n    /**\n     * @inheritDoc\n     */\n    execute(data) {\n        const { body: documentFragment, stylesString } = data._parsedData;\n        transformListItemLikeElementsIntoLists(documentFragment, stylesString, this.hasMultiLevelListPlugin);\n        replaceImagesSourceWithBase64(documentFragment, data.dataTransfer.getData('text/rtf'));\n        removeMSAttributes(documentFragment);\n        data.content = documentFragment;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/filters/removemsattributes\n */\nimport { UpcastWriter } from 'ckeditor5/src/engine.js';\n/**\n * Cleanup MS attributes like styles, attributes and elements.\n *\n * @param documentFragment element `data.content` obtained from clipboard.\n */\nexport default function removeMSAttributes(documentFragment) {\n    const elementsToUnwrap = [];\n    const writer = new UpcastWriter(documentFragment.document);\n    for (const { item } of writer.createRangeIn(documentFragment)) {\n        if (!item.is('element')) {\n            continue;\n        }\n        for (const className of item.getClassNames()) {\n            if (/\\bmso/gi.exec(className)) {\n                writer.removeClass(className, item);\n            }\n        }\n        for (const styleName of item.getStyleNames()) {\n            if (/\\bmso/gi.exec(styleName)) {\n                writer.removeStyle(styleName, item);\n            }\n        }\n        if (item.is('element', 'w:sdt') ||\n            item.is('element', 'w:sdtpr') && item.isEmpty ||\n            item.is('element', 'o:p') && item.isEmpty) {\n            elementsToUnwrap.push(item);\n        }\n    }\n    for (const item of elementsToUnwrap) {\n        const itemParent = item.parent;\n        const childIndex = itemParent.getChildIndex(item);\n        writer.insertChild(childIndex, item.getChildren(), itemParent);\n        writer.remove(item);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/filters/br\n */\nimport { DomConverter, ViewDocument } from 'ckeditor5/src/engine.js';\n/**\n * Transforms `<br>` elements that are siblings to some block element into a paragraphs.\n *\n * @param documentFragment The view structure to be transformed.\n */\nexport default function transformBlockBrsToParagraphs(documentFragment, writer) {\n    const viewDocument = new ViewDocument(writer.document.stylesProcessor);\n    const domConverter = new DomConverter(viewDocument, { renderingMode: 'data' });\n    const blockElements = domConverter.blockElements;\n    const inlineObjectElements = domConverter.inlineObjectElements;\n    const elementsToReplace = [];\n    for (const value of writer.createRangeIn(documentFragment)) {\n        const element = value.item;\n        if (element.is('element', 'br')) {\n            const nextSibling = findSibling(element, 'forward', writer, { blockElements, inlineObjectElements });\n            const previousSibling = findSibling(element, 'backward', writer, { blockElements, inlineObjectElements });\n            const nextSiblingIsBlock = isBlockViewElement(nextSibling, blockElements);\n            const previousSiblingIsBlock = isBlockViewElement(previousSibling, blockElements);\n            // If the <br> is surrounded by blocks then convert it to a paragraph:\n            // * <p>foo</p>[<br>]<p>bar</p> -> <p>foo</p>[<p></p>]<p>bar</p>\n            // * <p>foo</p>[<br>] -> <p>foo</p>[<p></p>]\n            // * [<br>]<p>foo</p> -> [<p></p>]<p>foo</p>\n            if (previousSiblingIsBlock || nextSiblingIsBlock) {\n                elementsToReplace.push(element);\n            }\n        }\n    }\n    for (const element of elementsToReplace) {\n        if (element.hasClass('Apple-interchange-newline')) {\n            writer.remove(element);\n        }\n        else {\n            writer.replace(element, writer.createElement('p'));\n        }\n    }\n}\n/**\n * Returns sibling node, threats inline elements as transparent (but should stop on an inline objects).\n */\nfunction findSibling(viewElement, direction, writer, { blockElements, inlineObjectElements }) {\n    let position = writer.createPositionAt(viewElement, direction == 'forward' ? 'after' : 'before');\n    // Find first position that is just before a first:\n    // * text node,\n    // * block element,\n    // * inline object element.\n    // It's ignoring any inline (non-object) elements like span, strong, etc.\n    position = position.getLastMatchingPosition(({ item }) => (item.is('element') &&\n        !blockElements.includes(item.name) &&\n        !inlineObjectElements.includes(item.name)), { direction });\n    return direction == 'forward' ? position.nodeAfter : position.nodeBefore;\n}\n/**\n * Returns true for view elements that are listed as block view elements.\n */\nfunction isBlockViewElement(node, blockElements) {\n    return !!node && node.is('element') && blockElements.includes(node.name);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/normalizers/googledocsnormalizer\n */\nimport { UpcastWriter } from 'ckeditor5/src/engine.js';\nimport removeBoldWrapper from '../filters/removeboldwrapper.js';\nimport transformBlockBrsToParagraphs from '../filters/br.js';\nimport { unwrapParagraphInListItem } from '../filters/list.js';\nconst googleDocsMatch = /id=(\"|')docs-internal-guid-[-0-9a-f]+(\"|')/i;\n/**\n * Normalizer for the content pasted from Google Docs.\n */\nexport default class GoogleDocsNormalizer {\n    /**\n     * Creates a new `GoogleDocsNormalizer` instance.\n     *\n     * @param document View document.\n     */\n    constructor(document) {\n        this.document = document;\n    }\n    /**\n     * @inheritDoc\n     */\n    isActive(htmlString) {\n        return googleDocsMatch.test(htmlString);\n    }\n    /**\n     * @inheritDoc\n     */\n    execute(data) {\n        const writer = new UpcastWriter(this.document);\n        const { body: documentFragment } = data._parsedData;\n        removeBoldWrapper(documentFragment, writer);\n        unwrapParagraphInListItem(documentFragment, writer);\n        transformBlockBrsToParagraphs(documentFragment, writer);\n        data.content = documentFragment;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Removes the `<b>` tag wrapper added by Google Docs to a copied content.\n *\n * @param documentFragment element `data.content` obtained from clipboard\n */\nexport default function removeBoldWrapper(documentFragment, writer) {\n    for (const child of documentFragment.getChildren()) {\n        if (child.is('element', 'b') && child.getStyle('font-weight') === 'normal') {\n            const childIndex = documentFragment.getChildIndex(child);\n            writer.remove(child);\n            writer.insertChild(childIndex, child.getChildren(), documentFragment);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/normalizers/googlesheetsnormalizer\n */\nimport { UpcastWriter } from 'ckeditor5/src/engine.js';\nimport removeXmlns from '../filters/removexmlns.js';\nimport removeGoogleSheetsTag from '../filters/removegooglesheetstag.js';\nimport removeInvalidTableWidth from '../filters/removeinvalidtablewidth.js';\nimport removeStyleBlock from '../filters/removestyleblock.js';\nconst googleSheetsMatch = /<google-sheets-html-origin/i;\n/**\n * Normalizer for the content pasted from Google Sheets.\n */\nexport default class GoogleSheetsNormalizer {\n    /**\n     * Creates a new `GoogleSheetsNormalizer` instance.\n     *\n     * @param document View document.\n     */\n    constructor(document) {\n        this.document = document;\n    }\n    /**\n     * @inheritDoc\n     */\n    isActive(htmlString) {\n        return googleSheetsMatch.test(htmlString);\n    }\n    /**\n     * @inheritDoc\n     */\n    execute(data) {\n        const writer = new UpcastWriter(this.document);\n        const { body: documentFragment } = data._parsedData;\n        removeGoogleSheetsTag(documentFragment, writer);\n        removeXmlns(documentFragment, writer);\n        removeInvalidTableWidth(documentFragment, writer);\n        removeStyleBlock(documentFragment, writer);\n        data.content = documentFragment;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Removes the `<google-sheets-html-origin>` tag wrapper added by Google Sheets to a copied content.\n *\n * @param documentFragment element `data.content` obtained from clipboard\n */\nexport default function removeGoogleSheetsTag(documentFragment, writer) {\n    for (const child of documentFragment.getChildren()) {\n        if (child.is('element', 'google-sheets-html-origin')) {\n            const childIndex = documentFragment.getChildIndex(child);\n            writer.remove(child);\n            writer.insertChild(childIndex, child.getChildren(), documentFragment);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Removes the `xmlns` attribute from table pasted from Google Sheets.\n *\n * @param documentFragment element `data.content` obtained from clipboard\n */\nexport default function removeXmlns(documentFragment, writer) {\n    for (const child of documentFragment.getChildren()) {\n        if (child.is('element', 'table') && child.hasAttribute('xmlns')) {\n            writer.removeAttribute('xmlns', child);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Removes the `width:0px` style from table pasted from Google Sheets.\n *\n * @param documentFragment element `data.content` obtained from clipboard\n */\nexport default function removeInvalidTableWidth(documentFragment, writer) {\n    for (const child of documentFragment.getChildren()) {\n        if (child.is('element', 'table') && child.getStyle('width') === '0px') {\n            writer.removeStyle('width', child);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Removes `<style>` block added by Google Sheets to a copied content.\n *\n * @param documentFragment element `data.content` obtained from clipboard\n */\nexport default function removeStyleBlock(documentFragment, writer) {\n    for (const child of Array.from(documentFragment.getChildren())) {\n        if (child.is('element', 'style')) {\n            writer.remove(child);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/filters/space\n */\n/**\n * Replaces last space preceding elements closing tag with `&nbsp;`. Such operation prevents spaces from being removed\n * during further DOM/View processing (see especially {@link module:engine/view/domconverter~DomConverter#_processDomInlineNodes}).\n * This method also takes into account Word specific `<o:p></o:p>` empty tags.\n * Additionally multiline sequences of spaces and new lines between tags are removed (see #39 and #40).\n *\n * @param htmlString HTML string in which spacing should be normalized.\n * @returns Input HTML with spaces normalized.\n */\nexport function normalizeSpacing(htmlString) {\n    // Run normalizeSafariSpaceSpans() two times to cover nested spans.\n    return normalizeSafariSpaceSpans(normalizeSafariSpaceSpans(htmlString))\n        // Remove all \\r\\n from \"spacerun spans\" so the last replace line doesn't strip all whitespaces.\n        .replace(/(<span\\s+style=['\"]mso-spacerun:yes['\"]>[^\\S\\r\\n]*?)[\\r\\n]+([^\\S\\r\\n]*<\\/span>)/g, '$1$2')\n        .replace(/<span\\s+style=['\"]mso-spacerun:yes['\"]><\\/span>/g, '')\n        .replace(/(<span\\s+style=['\"]letter-spacing:[^'\"]+?['\"]>)[\\r\\n]+(<\\/span>)/g, '$1 $2')\n        .replace(/ <\\//g, '\\u00A0</')\n        .replace(/ <o:p><\\/o:p>/g, '\\u00A0<o:p></o:p>')\n        // Remove <o:p> block filler from empty paragraph. Safari uses \\u00A0 instead of &nbsp;.\n        .replace(/<o:p>(&nbsp;|\\u00A0)<\\/o:p>/g, '')\n        // Remove all whitespaces when they contain any \\r or \\n.\n        .replace(/>([^\\S\\r\\n]*[\\r\\n]\\s*)</g, '><');\n}\n/**\n * Normalizes spacing in special Word `spacerun spans` (`<span style='mso-spacerun:yes'>\\s+</span>`) by replacing\n * all spaces with `&nbsp; ` pairs. This prevents spaces from being removed during further DOM/View processing\n * (see especially {@link module:engine/view/domconverter~DomConverter#_processDomInlineNodes}).\n *\n * @param htmlDocument Native `Document` object in which spacing should be normalized.\n */\nexport function normalizeSpacerunSpans(htmlDocument) {\n    htmlDocument.querySelectorAll('span[style*=spacerun]').forEach(el => {\n        const htmlElement = el;\n        const innerTextLength = htmlElement.innerText.length || 0;\n        htmlElement.innerText = Array(innerTextLength + 1).join('\\u00A0 ').substr(0, innerTextLength);\n    });\n}\n/**\n * Normalizes specific spacing generated by Safari when content pasted from Word (`<span class=\"Apple-converted-space\"> </span>`)\n * by replacing all spaces sequences longer than 1 space with `&nbsp; ` pairs. This prevents spaces from being removed during\n * further DOM/View processing (see especially {@link module:engine/view/domconverter~DomConverter#_processDataFromDomText}).\n *\n * This function is similar to {@link module:clipboard/utils/normalizeclipboarddata normalizeClipboardData util} but uses\n * regular spaces / &nbsp; sequence for replacement.\n *\n * @param htmlString HTML string in which spacing should be normalized\n * @returns Input HTML with spaces normalized.\n */\nfunction normalizeSafariSpaceSpans(htmlString) {\n    return htmlString.replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, (fullMatch, spaces) => {\n        return spaces.length === 1 ? ' ' : Array(spaces.length + 1).join('\\u00A0 ').substr(0, spaces.length);\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/filters/parse\n */\n/* globals DOMParser */\nimport { DomConverter, ViewDocument } from 'ckeditor5/src/engine.js';\nimport { normalizeSpacing, normalizeSpacerunSpans } from './space.js';\n/**\n * Parses the provided HTML extracting contents of `<body>` and `<style>` tags.\n *\n * @param htmlString HTML string to be parsed.\n */\nexport function parseHtml(htmlString, stylesProcessor) {\n    const domParser = new DOMParser();\n    // Remove Word specific \"if comments\" so content inside is not omitted by the parser.\n    htmlString = htmlString.replace(/<!--\\[if gte vml 1]>/g, '');\n    // Clean the <head> section of MS Windows specific tags. See https://github.com/ckeditor/ckeditor5/issues/15333.\n    // The regular expression matches the <o:SmartTagType> tag with optional attributes (with or without values).\n    htmlString = htmlString.replace(/<o:SmartTagType(?:\\s+[^\\s>=]+(?:=\"[^\"]*\")?)*\\s*\\/?>/gi, '');\n    const normalizedHtml = normalizeSpacing(cleanContentAfterBody(htmlString));\n    // Parse htmlString as native Document object.\n    const htmlDocument = domParser.parseFromString(normalizedHtml, 'text/html');\n    normalizeSpacerunSpans(htmlDocument);\n    // Get `innerHTML` first as transforming to View modifies the source document.\n    const bodyString = htmlDocument.body.innerHTML;\n    // Transform document.body to View.\n    const bodyView = documentToView(htmlDocument, stylesProcessor);\n    // Extract stylesheets.\n    const stylesObject = extractStyles(htmlDocument);\n    return {\n        body: bodyView,\n        bodyString,\n        styles: stylesObject.styles,\n        stylesString: stylesObject.stylesString\n    };\n}\n/**\n * Transforms native `Document` object into {@link module:engine/view/documentfragment~DocumentFragment}. Comments are skipped.\n *\n * @param htmlDocument Native `Document` object to be transformed.\n */\nfunction documentToView(htmlDocument, stylesProcessor) {\n    const viewDocument = new ViewDocument(stylesProcessor);\n    const domConverter = new DomConverter(viewDocument, { renderingMode: 'data' });\n    const fragment = htmlDocument.createDocumentFragment();\n    const nodes = htmlDocument.body.childNodes;\n    while (nodes.length > 0) {\n        fragment.appendChild(nodes[0]);\n    }\n    return domConverter.domToView(fragment, { skipComments: true });\n}\n/**\n * Extracts both `CSSStyleSheet` and string representation from all `style` elements available in a provided `htmlDocument`.\n *\n * @param htmlDocument Native `Document` object from which styles will be extracted.\n */\nfunction extractStyles(htmlDocument) {\n    const styles = [];\n    const stylesString = [];\n    const styleTags = Array.from(htmlDocument.getElementsByTagName('style'));\n    for (const style of styleTags) {\n        if (style.sheet && style.sheet.cssRules && style.sheet.cssRules.length) {\n            styles.push(style.sheet);\n            stylesString.push(style.innerHTML);\n        }\n    }\n    return {\n        styles,\n        stylesString: stylesString.join(' ')\n    };\n}\n/**\n * Removes leftover content from between closing </body> and closing </html> tag:\n *\n * ```html\n * <html><body><p>Foo Bar</p></body><span>Fo</span></html> -> <html><body><p>Foo Bar</p></body></html>\n * ```\n *\n * This function is used as specific browsers (Edge) add some random content after `body` tag when pasting from Word.\n * @param htmlString The HTML string to be cleaned.\n * @returns The HTML string with leftover content removed.\n */\nfunction cleanContentAfterBody(htmlString) {\n    const bodyCloseTag = '</body>';\n    const htmlCloseTag = '</html>';\n    const bodyCloseIndex = htmlString.indexOf(bodyCloseTag);\n    if (bodyCloseIndex < 0) {\n        return htmlString;\n    }\n    const htmlCloseIndex = htmlString.indexOf(htmlCloseTag, bodyCloseIndex + bodyCloseTag.length);\n    return htmlString.substring(0, bodyCloseIndex + bodyCloseTag.length) +\n        (htmlCloseIndex >= 0 ? htmlString.substring(htmlCloseIndex) : '');\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M8.69 14.915c.053.052.173.083.36.093a.366.366 0 0 1 .345.485l-.003.01a.738.738 0 0 1-.697.497h-2.67a.374.374 0 0 1-.353-.496l.013-.038a.681.681 0 0 1 .644-.458c.197-.012.325-.043.386-.093a.28.28 0 0 0 .072-.11L9.592 4.5H6.269c-.359-.017-.609.013-.75.09-.142.078-.289.265-.442.563-.192.29-.516.464-.864.464H4.17a.43.43 0 0 1-.407-.569L4.46 3h13.08l-.62 2.043a.81.81 0 0 1-.775.574h-.114a.486.486 0 0 1-.486-.486c.001-.284-.054-.464-.167-.54-.112-.076-.367-.106-.766-.091h-3.28l-2.68 10.257c-.006.074.007.127.038.158zM3 17h8a.5.5 0 1 1 0 1H3a.5.5 0 1 1 0-1zm11.299 1.17a.75.75 0 1 1-1.06-1.06l1.414-1.415-1.415-1.414a.75.75 0 0 1 1.06-1.06l1.415 1.414 1.414-1.415a.75.75 0 1 1 1.06 1.06l-1.413 1.415 1.414 1.415a.75.75 0 0 1-1.06 1.06l-1.415-1.414-1.414 1.414z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module remove-format/removeformatui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport removeFormatIcon from '../theme/icons/remove-format.svg';\nconst REMOVE_FORMAT = 'removeFormat';\n/**\n * The remove format UI plugin. It registers the `'removeFormat'` button which can be\n * used in the toolbar.\n */\nexport default class RemoveFormatUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'RemoveFormatUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        editor.ui.componentFactory.add(REMOVE_FORMAT, () => {\n            const view = this._createButton(ButtonView);\n            view.set({\n                tooltip: true\n            });\n            return view;\n        });\n        editor.ui.componentFactory.add(`menuBar:${REMOVE_FORMAT}`, () => this._createButton(MenuBarMenuListItemButtonView));\n    }\n    /**\n     * Creates a button for remove format command to use either in toolbar or in menu bar.\n     */\n    _createButton(ButtonClass) {\n        const editor = this.editor;\n        const locale = editor.locale;\n        const command = editor.commands.get(REMOVE_FORMAT);\n        const view = new ButtonClass(editor.locale);\n        const t = locale.t;\n        view.set({\n            label: t('Remove Format'),\n            icon: removeFormatIcon\n        });\n        view.bind('isEnabled').to(command, 'isEnabled');\n        // Execute the command.\n        this.listenTo(view, 'execute', () => {\n            editor.execute(REMOVE_FORMAT);\n            editor.editing.view.focus();\n        });\n        return view;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { first } from 'ckeditor5/src/utils.js';\n/**\n * The remove format command.\n *\n * It is used by the {@link module:remove-format/removeformat~RemoveFormat remove format feature}\n * to clear the formatting in the selection.\n *\n * ```ts\n * editor.execute( 'removeFormat' );\n * ```\n */\nexport default class RemoveFormatCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        this.isEnabled = !!first(this._getFormattingItems(model.document.selection, model.schema));\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const model = this.editor.model;\n        const schema = model.schema;\n        model.change(writer => {\n            for (const item of this._getFormattingItems(model.document.selection, schema)) {\n                if (item.is('selection')) {\n                    for (const attributeName of this._getFormattingAttributes(item, schema)) {\n                        writer.removeSelectionAttribute(attributeName);\n                    }\n                }\n                else {\n                    // Workaround for items with multiple removable attributes. See\n                    // https://github.com/ckeditor/ckeditor5-remove-format/pull/1#pullrequestreview-220515609\n                    const itemRange = writer.createRangeOn(item);\n                    for (const attributeName of this._getFormattingAttributes(item, schema)) {\n                        writer.removeAttribute(attributeName, itemRange);\n                    }\n                }\n            }\n        });\n    }\n    /**\n     * Returns an iterable of items in a selection (including the selection itself) that have formatting model\n     * attributes to be removed by the feature.\n     *\n     * @param schema The schema describing the item.\n     */\n    *_getFormattingItems(selection, schema) {\n        const itemHasRemovableFormatting = (item) => {\n            return !!first(this._getFormattingAttributes(item, schema));\n        };\n        // Check formatting on selected items that are not blocks.\n        for (const curRange of selection.getRanges()) {\n            for (const item of curRange.getItems()) {\n                if (!schema.isBlock(item) && itemHasRemovableFormatting(item)) {\n                    yield item;\n                }\n            }\n        }\n        // Check formatting from selected blocks.\n        for (const block of selection.getSelectedBlocks()) {\n            if (itemHasRemovableFormatting(block)) {\n                yield block;\n            }\n        }\n        // Finally the selection might be formatted as well, so make sure to check it.\n        if (itemHasRemovableFormatting(selection)) {\n            yield selection;\n        }\n    }\n    /**\n     * Returns an iterable of formatting attributes of a given model item.\n     *\n     * **Note:** Formatting items have the `isFormatting` property set to `true`.\n     *\n     * @param schema The schema describing the item.\n     * @returns The names of formatting attributes found in a given item.\n     */\n    *_getFormattingAttributes(item, schema) {\n        for (const [attributeName] of item.getAttributes()) {\n            const attributeProperties = schema.getAttributeProperties(attributeName);\n            if (attributeProperties && attributeProperties.isFormatting) {\n                yield attributeName;\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module remove-format/removeformatediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport RemoveFormatCommand from './removeformatcommand.js';\n/**\n * The remove format editing plugin.\n *\n * It registers the {@link module:remove-format/removeformatcommand~RemoveFormatCommand removeFormat} command.\n */\nexport default class RemoveFormatEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'RemoveFormatEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        editor.commands.add('removeFormat', new RemoveFormatCommand(editor));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/strikethrough/strikethroughediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport AttributeCommand from '../attributecommand.js';\nconst STRIKETHROUGH = 'strikethrough';\n/**\n * The strikethrough editing feature.\n *\n * It registers the `'strikethrough'` command, the <kbd>Ctrl+Shift+X</kbd> keystroke and introduces the\n * `strikethroughsthrough` attribute in the model which renders to the view\n * as a `<s>` element.\n */\nexport default class StrikethroughEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'StrikethroughEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = this.editor.t;\n        // Allow strikethrough attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: STRIKETHROUGH });\n        editor.model.schema.setAttributeProperties(STRIKETHROUGH, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n        editor.conversion.attributeToElement({\n            model: STRIKETHROUGH,\n            view: 's',\n            upcastAlso: [\n                'del',\n                'strike',\n                {\n                    styles: {\n                        'text-decoration': 'line-through'\n                    }\n                }\n            ]\n        });\n        // Create strikethrough command.\n        editor.commands.add(STRIKETHROUGH, new AttributeCommand(editor, STRIKETHROUGH));\n        // Set the Ctrl+Shift+X keystroke.\n        editor.keystrokes.set('CTRL+SHIFT+X', 'strikethrough');\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Strikethrough text'),\n                    keystroke: 'CTRL+SHIFT+X'\n                }\n            ]\n        });\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7 16.4c-.8-.4-1.5-.9-2.2-1.5a.6.6 0 0 1-.2-.5l.3-.6h1c1 1.2 2.1 1.7 3.7 1.7 1 0 1.8-.3 2.3-.6.6-.4.6-1.2.6-1.3.2-1.2-.9-2.1-.9-2.1h2.1c.3.7.4 1.2.4 1.7v.8l-.6 1.2c-.6.8-1.1 1-1.6 1.2a6 6 0 0 1-2.4.6c-1 0-1.8-.3-2.5-.6zM6.8 9 6 8.3c-.4-.5-.5-.8-.5-1.6 0-.7.1-1.3.5-1.8.4-.6 1-1 1.6-1.3a6.3 6.3 0 0 1 4.7 0 4 4 0 0 1 1.7 1l.3.7c0 .1.2.4-.2.7-.4.2-.9.1-1 0a3 3 0 0 0-1.2-1c-.4-.2-1-.3-2-.4-.7 0-1.4.2-2 .6-.8.6-1 .8-1 1.5 0 .8.5 1 1.2 1.5.6.4 1.1.7 1.9 1H6.8z\\\"/><path d=\\\"M3 10.5V9h14v1.5z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/strikethrough/strikethroughui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { getButtonCreator } from '../utils.js';\nimport strikethroughIcon from '../../theme/icons/strikethrough.svg';\nconst STRIKETHROUGH = 'strikethrough';\n/**\n * The strikethrough UI feature. It introduces the Strikethrough button.\n */\nexport default class StrikethroughUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'StrikethroughUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.locale.t;\n        const createButton = getButtonCreator({\n            editor,\n            commandName: STRIKETHROUGH,\n            plugin: this,\n            icon: strikethroughIcon,\n            keystroke: 'CTRL+SHIFT+X',\n            label: t('Strikethrough')\n        });\n        // Add strikethrough button to feature components.\n        editor.ui.componentFactory.add(STRIKETHROUGH, () => createButton(ButtonView));\n        editor.ui.componentFactory.add('menuBar:' + STRIKETHROUGH, () => createButton(MenuBarMenuListItemButtonView));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Conversion helper for upcasting attributes using normalized styles.\n *\n * @param options.modelAttribute The attribute to set.\n * @param options.styleName The style name to convert.\n * @param options.viewElement The view element name that should be converted.\n * @param options.defaultValue The default value for the specified `modelAttribute`.\n * @param options.shouldUpcast The function which returns `true` if style should be upcasted from this element.\n */\nexport function upcastStyleToAttribute(conversion, options) {\n    const { modelAttribute, styleName, viewElement, defaultValue, reduceBoxSides = false, shouldUpcast = () => true } = options;\n    conversion.for('upcast').attributeToAttribute({\n        view: {\n            name: viewElement,\n            styles: {\n                [styleName]: /[\\s\\S]+/\n            }\n        },\n        model: {\n            key: modelAttribute,\n            value: (viewElement) => {\n                if (!shouldUpcast(viewElement)) {\n                    return;\n                }\n                const normalized = viewElement.getNormalizedStyle(styleName);\n                const value = reduceBoxSides ? reduceBoxSidesValue(normalized) : normalized;\n                if (defaultValue !== value) {\n                    return value;\n                }\n            }\n        }\n    });\n}\n/**\n * Conversion helper for upcasting border styles for view elements.\n *\n * @param defaultBorder The default border values.\n * @param defaultBorder.color The default `borderColor` value.\n * @param defaultBorder.style The default `borderStyle` value.\n * @param defaultBorder.width The default `borderWidth` value.\n */\nexport function upcastBorderStyles(conversion, viewElementName, modelAttributes, defaultBorder) {\n    conversion.for('upcast').add(dispatcher => dispatcher.on('element:' + viewElementName, (evt, data, conversionApi) => {\n        // If the element was not converted by element-to-element converter,\n        // we should not try to convert the style. See #8393.\n        if (!data.modelRange) {\n            return;\n        }\n        // Check the most detailed properties. These will be always set directly or\n        // when using the \"group\" properties like: `border-(top|right|bottom|left)` or `border`.\n        const stylesToConsume = [\n            'border-top-width',\n            'border-top-color',\n            'border-top-style',\n            'border-bottom-width',\n            'border-bottom-color',\n            'border-bottom-style',\n            'border-right-width',\n            'border-right-color',\n            'border-right-style',\n            'border-left-width',\n            'border-left-color',\n            'border-left-style'\n        ].filter(styleName => data.viewItem.hasStyle(styleName));\n        if (!stylesToConsume.length) {\n            return;\n        }\n        const matcherPattern = {\n            styles: stylesToConsume\n        };\n        // Try to consume appropriate values from consumable values list.\n        if (!conversionApi.consumable.test(data.viewItem, matcherPattern)) {\n            return;\n        }\n        const modelElement = [...data.modelRange.getItems({ shallow: true })].pop();\n        conversionApi.consumable.consume(data.viewItem, matcherPattern);\n        const normalizedBorder = {\n            style: data.viewItem.getNormalizedStyle('border-style'),\n            color: data.viewItem.getNormalizedStyle('border-color'),\n            width: data.viewItem.getNormalizedStyle('border-width')\n        };\n        const reducedBorder = {\n            style: reduceBoxSidesValue(normalizedBorder.style),\n            color: reduceBoxSidesValue(normalizedBorder.color),\n            width: reduceBoxSidesValue(normalizedBorder.width)\n        };\n        if (reducedBorder.style !== defaultBorder.style) {\n            conversionApi.writer.setAttribute(modelAttributes.style, reducedBorder.style, modelElement);\n        }\n        if (reducedBorder.color !== defaultBorder.color) {\n            conversionApi.writer.setAttribute(modelAttributes.color, reducedBorder.color, modelElement);\n        }\n        if (reducedBorder.width !== defaultBorder.width) {\n            conversionApi.writer.setAttribute(modelAttributes.width, reducedBorder.width, modelElement);\n        }\n    }));\n}\n/**\n * Conversion helper for downcasting an attribute to a style.\n */\nexport function downcastAttributeToStyle(conversion, options) {\n    const { modelElement, modelAttribute, styleName } = options;\n    conversion.for('downcast').attributeToAttribute({\n        model: {\n            name: modelElement,\n            key: modelAttribute\n        },\n        view: modelAttributeValue => ({\n            key: 'style',\n            value: {\n                [styleName]: modelAttributeValue\n            }\n        })\n    });\n}\n/**\n * Conversion helper for downcasting attributes from the model table to a view table (not to `<figure>`).\n */\nexport function downcastTableAttribute(conversion, options) {\n    const { modelAttribute, styleName } = options;\n    conversion.for('downcast').add(dispatcher => dispatcher.on(`attribute:${modelAttribute}:table`, (evt, data, conversionApi) => {\n        const { item, attributeNewValue } = data;\n        const { mapper, writer } = conversionApi;\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n            return;\n        }\n        const table = [...mapper.toViewElement(item).getChildren()].find(child => child.is('element', 'table'));\n        if (attributeNewValue) {\n            writer.setStyle(styleName, attributeNewValue, table);\n        }\n        else {\n            writer.removeStyle(styleName, table);\n        }\n    }));\n}\n/**\n * Reduces the full top, right, bottom, left object to a single string if all sides are equal.\n * Returns original style otherwise.\n */\nfunction reduceBoxSidesValue(style) {\n    if (!style) {\n        return;\n    }\n    const sides = ['top', 'right', 'bottom', 'left'];\n    const allSidesDefined = sides.every(side => style[side]);\n    if (!allSidesDefined) {\n        return style;\n    }\n    const topSideStyle = style.top;\n    const allSidesEqual = sides.every(side => style[side] === topSideStyle);\n    if (!allSidesEqual) {\n        return style;\n    }\n    return topSideStyle;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { downcastAttributeToStyle, upcastStyleToAttribute } from './../converters/tableproperties.js';\n/**\n * A common method to update the numeric value. If a value is the default one, it will be unset.\n *\n * @param key An attribute key.\n * @param value The new attribute value.\n * @param item A model item on which the attribute will be set.\n * @param defaultValue The default attribute value. If a value is lower or equal, it will be unset.\n */\nexport function updateNumericAttribute(key, value, item, writer, defaultValue = 1) {\n    if (value !== undefined && value !== null && defaultValue !== undefined && defaultValue !== null && value > defaultValue) {\n        writer.setAttribute(key, value, item);\n    }\n    else {\n        writer.removeAttribute(key, item);\n    }\n}\n/**\n * A common method to create an empty table cell. It creates a proper model structure as a table cell must have at least one block inside.\n *\n * @param writer The model writer.\n * @param insertPosition The position at which the table cell should be inserted.\n * @param attributes The element attributes.\n * @returns Created table cell.\n */\nexport function createEmptyTableCell(writer, insertPosition, attributes = {}) {\n    const tableCell = writer.createElement('tableCell', attributes);\n    writer.insertElement('paragraph', tableCell);\n    writer.insert(tableCell, insertPosition);\n    return tableCell;\n}\n/**\n * Checks if a table cell belongs to the heading column section.\n */\nexport function isHeadingColumnCell(tableUtils, tableCell) {\n    const table = tableCell.parent.parent;\n    const headingColumns = parseInt(table.getAttribute('headingColumns') || '0');\n    const { column } = tableUtils.getCellLocation(tableCell);\n    return !!headingColumns && column < headingColumns;\n}\n/**\n * Enables conversion for an attribute for simple view-model mappings.\n *\n * @param options.defaultValue The default value for the specified `modelAttribute`.\n */\nexport function enableProperty(schema, conversion, options) {\n    const { modelAttribute } = options;\n    schema.extend('tableCell', {\n        allowAttributes: [modelAttribute]\n    });\n    upcastStyleToAttribute(conversion, { viewElement: /^(td|th)$/, ...options });\n    downcastAttributeToStyle(conversion, { modelElement: 'tableCell', ...options });\n}\n/**\n * Depending on the position of the selection we either return the table under cursor or look for the table higher in the hierarchy.\n */\nexport function getSelectionAffectedTable(selection) {\n    const selectedElement = selection.getSelectedElement();\n    // Is the command triggered from the `tableToolbar`?\n    if (selectedElement && selectedElement.is('element', 'table')) {\n        return selectedElement;\n    }\n    return selection.getFirstPosition().findAncestor('table');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { createEmptyTableCell } from '../utils/common.js';\nimport { first } from 'ckeditor5/src/utils.js';\n/**\n * Returns a function that converts the table view representation:\n *\n * ```xml\n * <figure class=\"table\"><table>...</table></figure>\n * ```\n *\n * to the model representation:\n *\n * ```xml\n * <table></table>\n * ```\n */\nexport function upcastTableFigure() {\n    return (dispatcher) => {\n        dispatcher.on('element:figure', (evt, data, conversionApi) => {\n            // Do not convert if this is not a \"table figure\".\n            if (!conversionApi.consumable.test(data.viewItem, { name: true, classes: 'table' })) {\n                return;\n            }\n            // Find a table element inside the figure element.\n            const viewTable = getViewTableFromFigure(data.viewItem);\n            // Do not convert if table element is absent or was already converted.\n            if (!viewTable || !conversionApi.consumable.test(viewTable, { name: true })) {\n                return;\n            }\n            // Consume the figure to prevent other converters from processing it again.\n            conversionApi.consumable.consume(data.viewItem, { name: true, classes: 'table' });\n            // Convert view table to model table.\n            const conversionResult = conversionApi.convertItem(viewTable, data.modelCursor);\n            // Get table element from conversion result.\n            const modelTable = first(conversionResult.modelRange.getItems());\n            // When table wasn't successfully converted then finish conversion.\n            if (!modelTable) {\n                // Revert consumed figure so other features can convert it.\n                conversionApi.consumable.revert(data.viewItem, { name: true, classes: 'table' });\n                return;\n            }\n            conversionApi.convertChildren(data.viewItem, conversionApi.writer.createPositionAt(modelTable, 'end'));\n            conversionApi.updateConversionResult(modelTable, data);\n        });\n    };\n}\n/**\n * View table element to model table element conversion helper.\n *\n * This conversion helper converts the table element as well as table rows.\n *\n * @returns Conversion helper.\n */\nexport default function upcastTable() {\n    return (dispatcher) => {\n        dispatcher.on('element:table', (evt, data, conversionApi) => {\n            const viewTable = data.viewItem;\n            // When element was already consumed then skip it.\n            if (!conversionApi.consumable.test(viewTable, { name: true })) {\n                return;\n            }\n            const { rows, headingRows, headingColumns } = scanTable(viewTable);\n            // Only set attributes if values is greater then 0.\n            const attributes = {};\n            if (headingColumns) {\n                attributes.headingColumns = headingColumns;\n            }\n            if (headingRows) {\n                attributes.headingRows = headingRows;\n            }\n            const table = conversionApi.writer.createElement('table', attributes);\n            if (!conversionApi.safeInsert(table, data.modelCursor)) {\n                return;\n            }\n            conversionApi.consumable.consume(viewTable, { name: true });\n            // Upcast table rows in proper order (heading rows first).\n            rows.forEach(row => conversionApi.convertItem(row, conversionApi.writer.createPositionAt(table, 'end')));\n            // Convert everything else.\n            conversionApi.convertChildren(viewTable, conversionApi.writer.createPositionAt(table, 'end'));\n            // Create one row and one table cell for empty table.\n            if (table.isEmpty) {\n                const row = conversionApi.writer.createElement('tableRow');\n                conversionApi.writer.insert(row, conversionApi.writer.createPositionAt(table, 'end'));\n                createEmptyTableCell(conversionApi.writer, conversionApi.writer.createPositionAt(row, 'end'));\n            }\n            conversionApi.updateConversionResult(table, data);\n        });\n    };\n}\n/**\n * A conversion helper that skips empty <tr> elements from upcasting at the beginning of the table.\n *\n * An empty row is considered a table model error but when handling clipboard data there could be rows that contain only row-spanned cells\n * and empty TR-s are used to maintain the table structure (also {@link module:table/tablewalker~TableWalker} assumes that there are only\n * rows that have related `tableRow` elements).\n *\n * *Note:* Only the first empty rows are removed because they have no meaning and it solves the issue\n * of an improper table with all empty rows.\n *\n * @returns Conversion helper.\n */\nexport function skipEmptyTableRow() {\n    return (dispatcher) => {\n        dispatcher.on('element:tr', (evt, data) => {\n            if (data.viewItem.isEmpty && data.modelCursor.index == 0) {\n                evt.stop();\n            }\n        }, { priority: 'high' });\n    };\n}\n/**\n * A converter that ensures an empty paragraph is inserted in a table cell if no other content was converted.\n *\n * @returns Conversion helper.\n */\nexport function ensureParagraphInTableCell(elementName) {\n    return (dispatcher) => {\n        dispatcher.on(`element:${elementName}`, (evt, data, { writer }) => {\n            // The default converter will create a model range on converted table cell.\n            if (!data.modelRange) {\n                return;\n            }\n            const tableCell = data.modelRange.start.nodeAfter;\n            const modelCursor = writer.createPositionAt(tableCell, 0);\n            // Ensure a paragraph in the model for empty table cells for converted table cells.\n            if (data.viewItem.isEmpty) {\n                writer.insertElement('paragraph', modelCursor);\n                return;\n            }\n            const childNodes = Array.from(tableCell.getChildren());\n            // In case there are only markers inside the table cell then move them to the paragraph.\n            if (childNodes.every(node => node.is('element', '$marker'))) {\n                const paragraph = writer.createElement('paragraph');\n                writer.insert(paragraph, writer.createPositionAt(tableCell, 0));\n                for (const node of childNodes) {\n                    writer.move(writer.createRangeOn(node), writer.createPositionAt(paragraph, 'end'));\n                }\n            }\n        }, { priority: 'low' });\n    };\n}\n/**\n * Get view `<table>` element from the view widget (`<figure>`).\n */\nfunction getViewTableFromFigure(figureView) {\n    for (const figureChild of figureView.getChildren()) {\n        if (figureChild.is('element', 'table')) {\n            return figureChild;\n        }\n    }\n}\n/**\n * Scans table rows and extracts required metadata from the table:\n *\n * headingRows    - The number of rows that go as table headers.\n * headingColumns - The maximum number of row headings.\n * rows           - Sorted `<tr>` elements as they should go into the model - ie. if `<thead>` is inserted after `<tbody>` in the view.\n */\nfunction scanTable(viewTable) {\n    let headingRows = 0;\n    let headingColumns = undefined;\n    // The `<tbody>` and `<thead>` sections in the DOM do not have to be in order `<thead>` -> `<tbody>` and there might be more than one\n    // of them.\n    // As the model does not have these sections, rows from different sections must be sorted.\n    // For example, below is a valid HTML table:\n    //\n    // <table>\n    //   <tbody><tr><td>2</td></tr></tbody>\n    //   <thead><tr><td>1</td></tr></thead>\n    //   <tbody><tr><td>3</td></tr></tbody>\n    // </table>\n    //\n    // But browsers will render rows in order as: 1 as the heading and 2 and 3 as the body.\n    const headRows = [];\n    const bodyRows = [];\n    // Currently the editor does not support more then one <thead> section.\n    // Only the first <thead> from the view will be used as a heading row and the others will be converted to body rows.\n    let firstTheadElement;\n    for (const tableChild of Array.from(viewTable.getChildren())) {\n        // Only `<thead>`, `<tbody>` & `<tfoot>` from allowed table children can have `<tr>`s.\n        // The else is for future purposes (mainly `<caption>`).\n        if (tableChild.name !== 'tbody' && tableChild.name !== 'thead' && tableChild.name !== 'tfoot') {\n            continue;\n        }\n        // Save the first `<thead>` in the table as table header - all other ones will be converted to table body rows.\n        if (tableChild.name === 'thead' && !firstTheadElement) {\n            firstTheadElement = tableChild;\n        }\n        // There might be some extra empty text nodes between the `<tr>`s.\n        // Make sure further code operates on `tr`s only. (#145)\n        const trs = Array.from(tableChild.getChildren()).filter((el) => el.is('element', 'tr'));\n        for (const tr of trs) {\n            // This <tr> is a child of a first <thead> element.\n            if ((firstTheadElement && tableChild === firstTheadElement) ||\n                (tableChild.name === 'tbody' &&\n                    Array.from(tr.getChildren()).length &&\n                    Array.from(tr.getChildren()).every(e => e.is('element', 'th')))) {\n                headingRows++;\n                headRows.push(tr);\n            }\n            else {\n                bodyRows.push(tr);\n                // For other rows check how many column headings this row has.\n                const headingCols = scanRowForHeadingColumns(tr);\n                if (!headingColumns || headingCols < headingColumns) {\n                    headingColumns = headingCols;\n                }\n            }\n        }\n    }\n    return {\n        headingRows,\n        headingColumns: headingColumns || 0,\n        rows: [...headRows, ...bodyRows]\n    };\n}\n/**\n * Scans a `<tr>` element and its children for metadata:\n * - For heading row:\n *     - Adds this row to either the heading or the body rows.\n *     - Updates the number of heading rows.\n * - For body rows:\n *     - Calculates the number of column headings.\n */\nfunction scanRowForHeadingColumns(tr) {\n    let headingColumns = 0;\n    let index = 0;\n    // Filter out empty text nodes from tr children.\n    const children = Array.from(tr.getChildren())\n        .filter(child => child.name === 'th' || child.name === 'td');\n    // Count starting adjacent <th> elements of a <tr>.\n    while (index < children.length && children[index].name === 'th') {\n        const th = children[index];\n        // Adjust columns calculation by the number of spanned columns.\n        const colspan = parseInt(th.getAttribute('colspan') || '1');\n        headingColumns = headingColumns + colspan;\n        index++;\n    }\n    return headingColumns;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * The table iterator class. It allows to iterate over table cells. For each cell the iterator yields\n * {@link module:table/tablewalker~TableSlot} with proper table cell attributes.\n */\nexport default class TableWalker {\n    /**\n     * Creates an instance of the table walker.\n     *\n     * The table walker iterates internally by traversing the table from row index = 0 and column index = 0.\n     * It walks row by row and column by column in order to output values defined in the constructor.\n     * By default it will output only the locations that are occupied by a cell. To include also spanned rows and columns,\n     * pass the `includeAllSlots` option to the constructor.\n     *\n     * The most important values of the iterator are column and row indexes of a cell.\n     *\n     * See {@link module:table/tablewalker~TableSlot} what values are returned by the table walker.\n     *\n     * To iterate over a given row:\n     *\n     * ```ts\n     * const tableWalker = new TableWalker( table, { startRow: 1, endRow: 2 } );\n     *\n     * for ( const tableSlot of tableWalker ) {\n     *   console.log( 'A cell at row', tableSlot.row, 'and column', tableSlot.column );\n     * }\n     * ```\n     *\n     * For instance the code above for the following table:\n     *\n     *  +----+----+----+----+----+----+\n     *  | 00      | 02 | 03 | 04 | 05 |\n     *  |         +----+----+----+----+\n     *  |         | 12      | 14 | 15 |\n     *  |         +----+----+----+    +\n     *  |         | 22           |    |\n     *  |----+----+----+----+----+    +\n     *  | 30 | 31 | 32 | 33 | 34 |    |\n     *  +----+----+----+----+----+----+\n     *\n     * will log in the console:\n     *\n     *  'A cell at row 1 and column 2'\n     *  'A cell at row 1 and column 4'\n     *  'A cell at row 1 and column 5'\n     *  'A cell at row 2 and column 2'\n     *\n     * To also iterate over spanned cells:\n     *\n     * ```ts\n     * const tableWalker = new TableWalker( table, { row: 1, includeAllSlots: true } );\n     *\n     * for ( const tableSlot of tableWalker ) {\n     *   console.log( 'Slot at', tableSlot.row, 'x', tableSlot.column, ':', tableSlot.isAnchor ? 'is anchored' : 'is spanned' );\n     * }\n     * ```\n     *\n     * will log in the console for the table from the previous example:\n     *\n     *  'Cell at 1 x 0 : is spanned'\n     *  'Cell at 1 x 1 : is spanned'\n     *  'Cell at 1 x 2 : is anchored'\n     *  'Cell at 1 x 3 : is spanned'\n     *  'Cell at 1 x 4 : is anchored'\n     *  'Cell at 1 x 5 : is anchored'\n     *\n     * **Note**: Option `row` is a shortcut that sets both `startRow` and `endRow` to the same row.\n     * (Use either `row` or `startRow` and `endRow` but never together). Similarly the `column` option sets both `startColumn`\n     * and `endColumn` to the same column (Use either `column` or `startColumn` and `endColumn` but never together).\n     *\n     * @param table A table over which the walker iterates.\n     * @param options An object with configuration.\n     * @param options.row A row index for which this iterator will output cells. Can't be used together with `startRow` and `endRow`.\n     * @param options.startRow A row index from which this iterator should start. Can't be used together with `row`. Default value is 0.\n     * @param options.endRow A row index at which this iterator should end. Can't be used together with `row`.\n     * @param options.column A column index for which this iterator will output cells.\n     * Can't be used together with `startColumn` and `endColumn`.\n     * @param options.startColumn A column index from which this iterator should start.\n     * Can't be used together with `column`. Default value is 0.\n     * @param options.endColumn A column index at which this iterator should end. Can't be used together with `column`.\n     * @param options.includeAllSlots Also return values for spanned cells. Default value is \"false\".\n     */\n    constructor(table, options = {}) {\n        /**\n         * Indicates whether the iterator jumped to (or close to) the start row, ignoring rows that don't need to be traversed.\n         */\n        this._jumpedToStartRow = false;\n        this._table = table;\n        this._startRow = options.row !== undefined ? options.row : options.startRow || 0;\n        this._endRow = options.row !== undefined ? options.row : options.endRow;\n        this._startColumn = options.column !== undefined ? options.column : options.startColumn || 0;\n        this._endColumn = options.column !== undefined ? options.column : options.endColumn;\n        this._includeAllSlots = !!options.includeAllSlots;\n        this._skipRows = new Set();\n        this._row = 0;\n        this._rowIndex = 0;\n        this._column = 0;\n        this._cellIndex = 0;\n        this._spannedCells = new Map();\n        this._nextCellAtColumn = -1;\n    }\n    /**\n     * Iterable interface.\n     */\n    [Symbol.iterator]() {\n        return this;\n    }\n    /**\n     * Gets the next table walker's value.\n     *\n     * @returns The next table walker's value.\n     */\n    next() {\n        if (this._canJumpToStartRow()) {\n            this._jumpToNonSpannedRowClosestToStartRow();\n        }\n        const row = this._table.getChild(this._rowIndex);\n        // Iterator is done when there's no row (table ended) or the row is after `endRow` limit.\n        if (!row || this._isOverEndRow()) {\n            return { done: true, value: undefined };\n        }\n        // We step over current element when it is not a tableRow instance.\n        if (!row.is('element', 'tableRow')) {\n            this._rowIndex++;\n            return this.next();\n        }\n        if (this._isOverEndColumn()) {\n            return this._advanceToNextRow();\n        }\n        let outValue = null;\n        const spanData = this._getSpanned();\n        if (spanData) {\n            if (this._includeAllSlots && !this._shouldSkipSlot()) {\n                outValue = this._formatOutValue(spanData.cell, spanData.row, spanData.column);\n            }\n        }\n        else {\n            const cell = row.getChild(this._cellIndex);\n            if (!cell) {\n                // If there are no more cells left in row advance to the next row.\n                return this._advanceToNextRow();\n            }\n            const colspan = parseInt(cell.getAttribute('colspan') || '1');\n            const rowspan = parseInt(cell.getAttribute('rowspan') || '1');\n            // Record this cell spans if it's not 1x1 cell.\n            if (colspan > 1 || rowspan > 1) {\n                this._recordSpans(cell, rowspan, colspan);\n            }\n            if (!this._shouldSkipSlot()) {\n                outValue = this._formatOutValue(cell);\n            }\n            this._nextCellAtColumn = this._column + colspan;\n        }\n        // Advance to the next column before returning value.\n        this._column++;\n        if (this._column == this._nextCellAtColumn) {\n            this._cellIndex++;\n        }\n        // The current value will be returned only if current row and column are not skipped.\n        return outValue || this.next();\n    }\n    /**\n     * Marks a row to skip in the next iteration. It will also skip cells from the current row if there are any cells from the current row\n     * to output.\n     *\n     * @param row The row index to skip.\n     */\n    skipRow(row) {\n        this._skipRows.add(row);\n    }\n    /**\n     * Advances internal cursor to the next row.\n     */\n    _advanceToNextRow() {\n        this._row++;\n        this._rowIndex++;\n        this._column = 0;\n        this._cellIndex = 0;\n        this._nextCellAtColumn = -1;\n        return this.next();\n    }\n    /**\n     * Checks if the current row is over {@link #_endRow}.\n     */\n    _isOverEndRow() {\n        // If #_endRow is defined skip all rows after it.\n        return this._endRow !== undefined && this._row > this._endRow;\n    }\n    /**\n     * Checks if the current cell is over {@link #_endColumn}\n     */\n    _isOverEndColumn() {\n        // If #_endColumn is defined skip all cells after it.\n        return this._endColumn !== undefined && this._column > this._endColumn;\n    }\n    /**\n     * A common method for formatting the iterator's output value.\n     *\n     * @param cell The table cell to output.\n     * @param anchorRow The row index of a cell anchor slot.\n     * @param anchorColumn The column index of a cell anchor slot.\n     */\n    _formatOutValue(cell, anchorRow = this._row, anchorColumn = this._column) {\n        return {\n            done: false,\n            value: new TableSlot(this, cell, anchorRow, anchorColumn)\n        };\n    }\n    /**\n     * Checks if the current slot should be skipped.\n     */\n    _shouldSkipSlot() {\n        const rowIsMarkedAsSkipped = this._skipRows.has(this._row);\n        const rowIsBeforeStartRow = this._row < this._startRow;\n        const columnIsBeforeStartColumn = this._column < this._startColumn;\n        const columnIsAfterEndColumn = this._endColumn !== undefined && this._column > this._endColumn;\n        return rowIsMarkedAsSkipped || rowIsBeforeStartRow || columnIsBeforeStartColumn || columnIsAfterEndColumn;\n    }\n    /**\n     * Returns the cell element that is spanned over the current cell location.\n     */\n    _getSpanned() {\n        const rowMap = this._spannedCells.get(this._row);\n        // No spans for given row.\n        if (!rowMap) {\n            return null;\n        }\n        // If spans for given rows has entry for column it means that this location if spanned by other cell.\n        return rowMap.get(this._column) || null;\n    }\n    /**\n     * Updates spanned cells map relative to the current cell location and its span dimensions.\n     *\n     * @param cell A cell that is spanned.\n     * @param rowspan Cell height.\n     * @param colspan Cell width.\n     */\n    _recordSpans(cell, rowspan, colspan) {\n        const data = {\n            cell,\n            row: this._row,\n            column: this._column\n        };\n        for (let rowToUpdate = this._row; rowToUpdate < this._row + rowspan; rowToUpdate++) {\n            for (let columnToUpdate = this._column; columnToUpdate < this._column + colspan; columnToUpdate++) {\n                if (rowToUpdate != this._row || columnToUpdate != this._column) {\n                    this._markSpannedCell(rowToUpdate, columnToUpdate, data);\n                }\n            }\n        }\n    }\n    /**\n     * Marks the cell location as spanned by another cell.\n     *\n     * @param row The row index of the cell location.\n     * @param column The column index of the cell location.\n     * @param data A spanned cell details (cell element, anchor row and column).\n     */\n    _markSpannedCell(row, column, data) {\n        if (!this._spannedCells.has(row)) {\n            this._spannedCells.set(row, new Map());\n        }\n        const rowSpans = this._spannedCells.get(row);\n        rowSpans.set(column, data);\n    }\n    /**\n     * Checks if part of the table can be skipped.\n     */\n    _canJumpToStartRow() {\n        return !!this._startRow &&\n            this._startRow > 0 &&\n            !this._jumpedToStartRow;\n    }\n    /**\n     * Sets the current row to `this._startRow` or the first row before it that has the number of cells\n     * equal to the number of columns in the table.\n     *\n     * Example:\n     * \t+----+----+----+\n     *  | 00 | 01 | 02 |\n     *  |----+----+----+\n     *  | 10      | 12 |\n     *  |         +----+\n     *  |         | 22 |\n     *  |         +----+\n     *  |         | 32 | <--- Start row\n     *  +----+----+----+\n     *  | 40 | 41 | 42 |\n     *  +----+----+----+\n     *\n     * If the 4th row is a `this._startRow`, this method will:\n     * 1.) Count the number of columns this table has based on the first row (3 columns in this case).\n     * 2.) Check if the 4th row contains 3 cells. It doesn't, so go to the row before it.\n     * 3.) Check if the 3rd row contains 3 cells. It doesn't, so go to the row before it.\n     * 4.) Check if the 2nd row contains 3 cells. It does, so set the current row to that row.\n     *\n     * Setting the current row this way is necessary to let the `next()`  method loop over the cells\n     * spanning multiple rows or columns and update the `this._spannedCells` property.\n     */\n    _jumpToNonSpannedRowClosestToStartRow() {\n        const firstRowLength = this._getRowLength(0);\n        for (let i = this._startRow; !this._jumpedToStartRow; i--) {\n            if (firstRowLength === this._getRowLength(i)) {\n                this._row = i;\n                this._rowIndex = i;\n                this._jumpedToStartRow = true;\n            }\n        }\n    }\n    /**\n     * Returns a number of columns in a row taking `colspan` into consideration.\n     */\n    _getRowLength(rowIndex) {\n        const row = this._table.getChild(rowIndex);\n        return [...row.getChildren()].reduce((cols, row) => {\n            return cols + parseInt(row.getAttribute('colspan') || '1');\n        }, 0);\n    }\n}\n/**\n * An object returned by {@link module:table/tablewalker~TableWalker} when traversing table cells.\n */\nclass TableSlot {\n    /**\n     * Creates an instance of the table walker value.\n     *\n     * @param tableWalker The table walker instance.\n     * @param cell The current table cell.\n     * @param anchorRow The row index of a cell anchor slot.\n     * @param anchorColumn The column index of a cell anchor slot.\n     */\n    constructor(tableWalker, cell, anchorRow, anchorColumn) {\n        this.cell = cell;\n        this.row = tableWalker._row;\n        this.column = tableWalker._column;\n        this.cellAnchorRow = anchorRow;\n        this.cellAnchorColumn = anchorColumn;\n        this._cellIndex = tableWalker._cellIndex;\n        this._rowIndex = tableWalker._rowIndex;\n        this._table = tableWalker._table;\n    }\n    // @if CK_DEBUG // public get isSpanned(): unknown { return throwMissingGetterError( 'isSpanned' ); }\n    // @if CK_DEBUG // public get colspan(): unknown { return throwMissingGetterError( 'colspan' ); }\n    // @if CK_DEBUG // public get rowspan(): unknown { return throwMissingGetterError( 'rowspan' ); }\n    // @if CK_DEBUG // public get cellIndex(): unknown { return throwMissingGetterError( 'cellIndex' ); }\n    /**\n     * Whether the cell is anchored in the current slot.\n     */\n    get isAnchor() {\n        return this.row === this.cellAnchorRow && this.column === this.cellAnchorColumn;\n    }\n    /**\n     * The width of a cell defined by a `colspan` attribute. If the model attribute is not present, it is set to `1`.\n     */\n    get cellWidth() {\n        return parseInt(this.cell.getAttribute('colspan') || '1');\n    }\n    /**\n     * The height of a cell defined by a `rowspan` attribute. If the model attribute is not present, it is set to `1`.\n     */\n    get cellHeight() {\n        return parseInt(this.cell.getAttribute('rowspan') || '1');\n    }\n    /**\n     * The index of the current row element in the table.\n     */\n    get rowIndex() {\n        return this._rowIndex;\n    }\n    /**\n     * Returns the {@link module:engine/model/position~Position} before the table slot.\n     */\n    getPositionBefore() {\n        const model = this._table.root.document.model;\n        return model.createPositionAt(this._table.getChild(this.row), this._cellIndex);\n    }\n}\n/**\n * This `TableSlot`'s getter (property) was removed in CKEditor 5 v20.0.0.\n *\n * Check out the new `TableWalker`'s API in the documentation.\n *\n * @error tableslot-getter-removed\n * @param getterName\n */\n// @if CK_DEBUG // function throwMissingGetterError( getterName: string ): void {\n// @if CK_DEBUG //\t\tthrow new CKEditorError( 'tableslot-getter-removed', null, {\n// @if CK_DEBUG //\t\t\tgetterName\n// @if CK_DEBUG //\t\t} );\n// @if CK_DEBUG // }\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/converters/downcast\n */\nimport { toWidget, toWidgetEditable } from 'ckeditor5/src/widget.js';\nimport TableWalker from './../tablewalker.js';\n/**\n * Model table element to view table element conversion helper.\n */\nexport function downcastTable(tableUtils, options) {\n    return (table, { writer }) => {\n        const headingRows = table.getAttribute('headingRows') || 0;\n        const tableElement = writer.createContainerElement('table', null, []);\n        const figureElement = writer.createContainerElement('figure', { class: 'table' }, tableElement);\n        // Table head slot.\n        if (headingRows > 0) {\n            writer.insert(writer.createPositionAt(tableElement, 'end'), writer.createContainerElement('thead', null, writer.createSlot(element => element.is('element', 'tableRow') && element.index < headingRows)));\n        }\n        // Table body slot.\n        if (headingRows < tableUtils.getRows(table)) {\n            writer.insert(writer.createPositionAt(tableElement, 'end'), writer.createContainerElement('tbody', null, writer.createSlot(element => element.is('element', 'tableRow') && element.index >= headingRows)));\n        }\n        // Dynamic slots.\n        for (const { positionOffset, filter } of options.additionalSlots) {\n            writer.insert(writer.createPositionAt(tableElement, positionOffset), writer.createSlot(filter));\n        }\n        // Create a slot with items that don't fit into the table.\n        writer.insert(writer.createPositionAt(tableElement, 'after'), writer.createSlot(element => {\n            if (element.is('element', 'tableRow')) {\n                return false;\n            }\n            return !options.additionalSlots.some(({ filter }) => filter(element));\n        }));\n        return options.asWidget ? toTableWidget(figureElement, writer) : figureElement;\n    };\n}\n/**\n * Model table row element to view `<tr>` element conversion helper.\n *\n * @returns Element creator.\n */\nexport function downcastRow() {\n    return (tableRow, { writer }) => {\n        return tableRow.isEmpty ?\n            writer.createEmptyElement('tr') :\n            writer.createContainerElement('tr');\n    };\n}\n/**\n * Model table cell element to view `<td>` or `<th>` element conversion helper.\n *\n * This conversion helper will create proper `<th>` elements for table cells that are in the heading section (heading row or column)\n * and `<td>` otherwise.\n *\n * @param options.asWidget If set to `true`, the downcast conversion will produce a widget.\n * @returns Element creator.\n */\nexport function downcastCell(options = {}) {\n    return (tableCell, { writer }) => {\n        const tableRow = tableCell.parent;\n        const table = tableRow.parent;\n        const rowIndex = table.getChildIndex(tableRow);\n        const tableWalker = new TableWalker(table, { row: rowIndex });\n        const headingRows = table.getAttribute('headingRows') || 0;\n        const headingColumns = table.getAttribute('headingColumns') || 0;\n        let result = null;\n        // We need to iterate over a table in order to get proper row & column values from a walker.\n        for (const tableSlot of tableWalker) {\n            if (tableSlot.cell == tableCell) {\n                const isHeading = tableSlot.row < headingRows || tableSlot.column < headingColumns;\n                const cellElementName = isHeading ? 'th' : 'td';\n                result = options.asWidget ?\n                    toWidgetEditable(writer.createEditableElement(cellElementName), writer) :\n                    writer.createContainerElement(cellElementName);\n                break;\n            }\n        }\n        return result;\n    };\n}\n/**\n * Overrides paragraph inside table cell conversion.\n *\n * This converter:\n * * should be used to override default paragraph conversion.\n * * It will only convert `<paragraph>` placed directly inside `<tableCell>`.\n * * For a single paragraph without attributes it returns `<span>` to simulate data table.\n * * For all other cases it returns `<p>` element.\n *\n * @param options.asWidget If set to `true`, the downcast conversion will produce a widget.\n * @returns Element creator.\n */\nexport function convertParagraphInTableCell(options = {}) {\n    return (modelElement, { writer }) => {\n        if (!modelElement.parent.is('element', 'tableCell')) {\n            return null;\n        }\n        if (!isSingleParagraphWithoutAttributes(modelElement)) {\n            return null;\n        }\n        if (options.asWidget) {\n            return writer.createContainerElement('span', { class: 'ck-table-bogus-paragraph' });\n        }\n        else {\n            // Using `<p>` in case there are some markers on it and transparentRendering will render it anyway.\n            const viewElement = writer.createContainerElement('p');\n            writer.setCustomProperty('dataPipeline:transparentRendering', true, viewElement);\n            return viewElement;\n        }\n    };\n}\n/**\n * Checks if given model `<paragraph>` is an only child of a parent (`<tableCell>`) and if it has any attribute set.\n *\n * The paragraph should be converted in the editing view to:\n *\n * * If returned `true` - to a `<span class=\"ck-table-bogus-paragraph\">`\n * * If returned `false` - to a `<p>`\n */\nexport function isSingleParagraphWithoutAttributes(modelElement) {\n    const tableCell = modelElement.parent;\n    const isSingleParagraph = tableCell.childCount == 1;\n    return isSingleParagraph && !hasAnyAttribute(modelElement);\n}\n/**\n * Converts a given {@link module:engine/view/element~Element} to a table widget:\n * * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the table widget element.\n * * Calls the {@link module:widget/utils~toWidget} function with the proper element's label creator.\n *\n * @param writer An instance of the view writer.\n * @param label The element's label. It will be concatenated with the table `alt` attribute if one is present.\n */\nfunction toTableWidget(viewElement, writer) {\n    writer.setCustomProperty('table', true, viewElement);\n    return toWidget(viewElement, writer, { hasSelectionHandle: true });\n}\n/**\n * Checks if an element has any attributes set.\n */\nfunction hasAnyAttribute(element) {\n    const iteratorItem = element.getAttributeKeys().next();\n    return !iteratorItem.done;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/inserttablecommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The insert table command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'insertTable'` editor command.\n *\n * To insert a table at the current selection, execute the command and specify the dimensions:\n *\n * ```ts\n * editor.execute( 'insertTable', { rows: 20, columns: 5 } );\n * ```\n */\nexport default class InsertTableCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const schema = model.schema;\n        this.isEnabled = isAllowedInParent(selection, schema);\n    }\n    /**\n     * Executes the command.\n     *\n     * Inserts a table with the given number of rows and columns into the editor.\n     *\n     * @param options.rows The number of rows to create in the inserted table. Default value is 2.\n     * @param options.columns The number of columns to create in the inserted table. Default value is 2.\n     * @param options.headingRows The number of heading rows. If not provided it will default to\n     * {@link module:table/tableconfig~TableConfig#defaultHeadings `config.table.defaultHeadings.rows`} table config.\n     * @param options.headingColumns The number of heading columns. If not provided it will default to\n     * {@link module:table/tableconfig~TableConfig#defaultHeadings `config.table.defaultHeadings.columns`} table config.\n     * @fires execute\n     */\n    execute(options = {}) {\n        const editor = this.editor;\n        const model = editor.model;\n        const tableUtils = editor.plugins.get('TableUtils');\n        const defaultRows = editor.config.get('table.defaultHeadings.rows');\n        const defaultColumns = editor.config.get('table.defaultHeadings.columns');\n        if (options.headingRows === undefined && defaultRows) {\n            options.headingRows = defaultRows;\n        }\n        if (options.headingColumns === undefined && defaultColumns) {\n            options.headingColumns = defaultColumns;\n        }\n        model.change(writer => {\n            const table = tableUtils.createTable(writer, options);\n            model.insertObject(table, null, null, { findOptimalPosition: 'auto' });\n            writer.setSelection(writer.createPositionAt(table.getNodeByPath([0, 0, 0]), 0));\n        });\n    }\n}\n/**\n * Checks if the table is allowed in the parent.\n */\nfunction isAllowedInParent(selection, schema) {\n    const positionParent = selection.getFirstPosition().parent;\n    const validParent = positionParent === positionParent.root ? positionParent : positionParent.parent;\n    return schema.checkChild(validParent, 'table');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/insertrowcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The insert row command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'insertTableRowBelow'` and\n * `'insertTableRowAbove'` editor commands.\n *\n * To insert a row below the selected cell, execute the following command:\n *\n * ```ts\n * editor.execute( 'insertTableRowBelow' );\n * ```\n *\n * To insert a row above the selected cell, execute the following command:\n *\n * ```ts\n * editor.execute( 'insertTableRowAbove' );\n * ```\n */\nexport default class InsertRowCommand extends Command {\n    /**\n     * Creates a new `InsertRowCommand` instance.\n     *\n     * @param editor The editor on which this command will be used.\n     * @param options.order The order of insertion relative to the row in which the caret is located.\n     * Possible values: `\"above\"` and `\"below\"`. Default value is \"below\"\n     */\n    constructor(editor, options = {}) {\n        super(editor);\n        this.order = options.order || 'below';\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const selection = this.editor.model.document.selection;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const isAnyCellSelected = !!tableUtils.getSelectionAffectedTableCells(selection).length;\n        this.isEnabled = isAnyCellSelected;\n    }\n    /**\n     * Executes the command.\n     *\n     * Depending on the command's {@link #order} value, it inserts a row `'below'` or `'above'` the row in which selection is set.\n     *\n     * @fires execute\n     */\n    execute() {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        const tableUtils = editor.plugins.get('TableUtils');\n        const insertAbove = this.order === 'above';\n        const affectedTableCells = tableUtils.getSelectionAffectedTableCells(selection);\n        const rowIndexes = tableUtils.getRowIndexes(affectedTableCells);\n        const row = insertAbove ? rowIndexes.first : rowIndexes.last;\n        const table = affectedTableCells[0].findAncestor('table');\n        tableUtils.insertRows(table, { at: insertAbove ? row : row + 1, copyStructureFromAbove: !insertAbove });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/insertcolumncommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The insert column command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'insertTableColumnLeft'` and\n * `'insertTableColumnRight'` editor commands.\n *\n * To insert a column to the left of the selected cell, execute the following command:\n *\n * ```ts\n * editor.execute( 'insertTableColumnLeft' );\n * ```\n *\n * To insert a column to the right of the selected cell, execute the following command:\n *\n * ```ts\n * editor.execute( 'insertTableColumnRight' );\n * ```\n */\nexport default class InsertColumnCommand extends Command {\n    /**\n     * Creates a new `InsertColumnCommand` instance.\n     *\n     * @param editor An editor on which this command will be used.\n     * @param options.order The order of insertion relative to the column in which the caret is located.\n     * Possible values: `\"left\"` and `\"right\"`. Default value is \"right\".\n     */\n    constructor(editor, options = {}) {\n        super(editor);\n        this.order = options.order || 'right';\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const selection = this.editor.model.document.selection;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const isAnyCellSelected = !!tableUtils.getSelectionAffectedTableCells(selection).length;\n        this.isEnabled = isAnyCellSelected;\n    }\n    /**\n     * Executes the command.\n     *\n     * Depending on the command's {@link #order} value, it inserts a column to the `'left'` or `'right'` of the column\n     * in which the selection is set.\n     *\n     * @fires execute\n     */\n    execute() {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        const tableUtils = editor.plugins.get('TableUtils');\n        const insertBefore = this.order === 'left';\n        const affectedTableCells = tableUtils.getSelectionAffectedTableCells(selection);\n        const columnIndexes = tableUtils.getColumnIndexes(affectedTableCells);\n        const column = insertBefore ? columnIndexes.first : columnIndexes.last;\n        const table = affectedTableCells[0].findAncestor('table');\n        tableUtils.insertColumns(table, { columns: 1, at: insertBefore ? column : column + 1 });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/splitcellcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The split cell command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'splitTableCellVertically'`\n * and `'splitTableCellHorizontally'`  editor commands.\n *\n * You can split any cell vertically or horizontally by executing this command. For example, to split the selected table cell vertically:\n *\n * ```ts\n * editor.execute( 'splitTableCellVertically' );\n * ```\n */\nexport default class SplitCellCommand extends Command {\n    /**\n     * Creates a new `SplitCellCommand` instance.\n     *\n     * @param editor The editor on which this command will be used.\n     * @param options.direction Indicates whether the command should split cells `'horizontally'` or `'vertically'`.\n     */\n    constructor(editor, options = {}) {\n        super(editor);\n        this.direction = options.direction || 'horizontally';\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(this.editor.model.document.selection);\n        this.isEnabled = selectedCells.length === 1;\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const tableCell = tableUtils.getSelectionAffectedTableCells(this.editor.model.document.selection)[0];\n        const isHorizontal = this.direction === 'horizontally';\n        if (isHorizontal) {\n            tableUtils.splitCellHorizontally(tableCell, 2);\n        }\n        else {\n            tableUtils.splitCellVertically(tableCell, 2);\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { default as TableWalker } from '../tablewalker.js';\nimport { createEmptyTableCell, updateNumericAttribute } from './common.js';\n/**\n * Returns a cropped table according to given dimensions.\n\n * To return a cropped table that starts at first row and first column and end in third row and column:\n *\n * ```ts\n * const croppedTable = cropTableToDimensions( table, {\n *   startRow: 1,\n *   endRow: 3,\n *   startColumn: 1,\n *   endColumn: 3\n * }, writer );\n * ```\n *\n * Calling the code above for the table below:\n *\n *        0   1   2   3   4                      0   1   2\n *      ┌───┬───┬───┬───┬───┐\n *   0  │ a │ b │ c │ d │ e │\n *      ├───┴───┤   ├───┴───┤                  ┌───┬───┬───┐\n *   1  │ f     │   │ g     │                  │   │   │ g │  0\n *      ├───┬───┴───┼───┬───┤   will return:   ├───┴───┼───┤\n *   2  │ h │ i     │ j │ k │                  │ i     │ j │  1\n *      ├───┤       ├───┤   │                  │       ├───┤\n *   3  │ l │       │ m │   │                  │       │ m │  2\n *      ├───┼───┬───┤   ├───┤                  └───────┴───┘\n *   4  │ n │ o │ p │   │ q │\n *      └───┴───┴───┴───┴───┘\n */\nexport function cropTableToDimensions(sourceTable, cropDimensions, writer) {\n    const { startRow, startColumn, endRow, endColumn } = cropDimensions;\n    // Create empty table with empty rows equal to crop height.\n    const croppedTable = writer.createElement('table');\n    const cropHeight = endRow - startRow + 1;\n    for (let i = 0; i < cropHeight; i++) {\n        writer.insertElement('tableRow', croppedTable, 'end');\n    }\n    const tableMap = [...new TableWalker(sourceTable, { startRow, endRow, startColumn, endColumn, includeAllSlots: true })];\n    // Iterate over source table slots (including empty - spanned - ones).\n    for (const { row: sourceRow, column: sourceColumn, cell: tableCell, isAnchor, cellAnchorRow, cellAnchorColumn } of tableMap) {\n        // Row index in cropped table.\n        const rowInCroppedTable = sourceRow - startRow;\n        const row = croppedTable.getChild(rowInCroppedTable);\n        // For empty slots: fill the gap with empty table cell.\n        if (!isAnchor) {\n            // But fill the gap only if the spanning cell is anchored outside cropped area.\n            // In the table from method jsdoc those cells are: \"c\" & \"f\".\n            if (cellAnchorRow < startRow || cellAnchorColumn < startColumn) {\n                createEmptyTableCell(writer, writer.createPositionAt(row, 'end'));\n            }\n        }\n        // Otherwise clone the cell with all children and trim if it exceeds cropped area.\n        else {\n            const tableCellCopy = writer.cloneElement(tableCell);\n            writer.append(tableCellCopy, row);\n            // Trim table if it exceeds cropped area.\n            // In the table from method jsdoc those cells are: \"g\" & \"m\".\n            trimTableCellIfNeeded(tableCellCopy, sourceRow, sourceColumn, endRow, endColumn, writer);\n        }\n    }\n    // Adjust heading rows & columns in cropped table if crop selection includes headings parts.\n    addHeadingsToCroppedTable(croppedTable, sourceTable, startRow, startColumn, writer);\n    return croppedTable;\n}\n/**\n * Returns slot info of cells that starts above and overlaps a given row.\n *\n * In a table below, passing `overlapRow = 3`\n *\n *     ┌───┬───┬───┬───┬───┐\n *  0  │ a │ b │ c │ d │ e │\n *     │   ├───┼───┼───┼───┤\n *  1  │   │ f │ g │ h │ i │\n *     ├───┤   ├───┼───┤   │\n *  2  │ j │   │ k │ l │   │\n *     │   │   │   ├───┼───┤\n *  3  │   │   │   │ m │ n │  <- overlap row to check\n *     ├───┼───┤   │   ├───│\n *  4  │ o │ p │   │   │ q │\n *     └───┴───┴───┴───┴───┘\n *\n * will return slot info for cells: \"j\", \"f\", \"k\".\n *\n * @param table The table to check.\n * @param overlapRow The index of the row to check.\n * @param startRow row to start analysis. Use it when it is known that the cells above that row will not overlap. Default value is 0.\n */\nexport function getVerticallyOverlappingCells(table, overlapRow, startRow = 0) {\n    const cells = [];\n    const tableWalker = new TableWalker(table, { startRow, endRow: overlapRow - 1 });\n    for (const slotInfo of tableWalker) {\n        const { row, cellHeight } = slotInfo;\n        const cellEndRow = row + cellHeight - 1;\n        if (row < overlapRow && overlapRow <= cellEndRow) {\n            cells.push(slotInfo);\n        }\n    }\n    return cells;\n}\n/**\n * Splits the table cell horizontally.\n *\n * @returns Created table cell, if any were created.\n */\nexport function splitHorizontally(tableCell, splitRow, writer) {\n    const tableRow = tableCell.parent;\n    const table = tableRow.parent;\n    const rowIndex = tableRow.index;\n    const rowspan = parseInt(tableCell.getAttribute('rowspan'));\n    const newRowspan = splitRow - rowIndex;\n    const newCellAttributes = {};\n    const newCellRowSpan = rowspan - newRowspan;\n    if (newCellRowSpan > 1) {\n        newCellAttributes.rowspan = newCellRowSpan;\n    }\n    const colspan = parseInt(tableCell.getAttribute('colspan') || '1');\n    if (colspan > 1) {\n        newCellAttributes.colspan = colspan;\n    }\n    const startRow = rowIndex;\n    const endRow = startRow + newRowspan;\n    const tableMap = [...new TableWalker(table, { startRow, endRow, includeAllSlots: true })];\n    let newCell = null;\n    let columnIndex;\n    for (const tableSlot of tableMap) {\n        const { row, column, cell } = tableSlot;\n        if (cell === tableCell && columnIndex === undefined) {\n            columnIndex = column;\n        }\n        if (columnIndex !== undefined && columnIndex === column && row === endRow) {\n            newCell = createEmptyTableCell(writer, tableSlot.getPositionBefore(), newCellAttributes);\n        }\n    }\n    // Update the rowspan attribute after updating table.\n    updateNumericAttribute('rowspan', newRowspan, tableCell, writer);\n    return newCell;\n}\n/**\n * Returns slot info of cells that starts before and overlaps a given column.\n *\n * In a table below, passing `overlapColumn = 3`\n *\n *    0   1   2   3   4\n *  ┌───────┬───────┬───┐\n *  │ a     │ b     │ c │\n *  │───┬───┴───────┼───┤\n *  │ d │ e         │ f │\n *  ├───┼───┬───────┴───┤\n *  │ g │ h │ i         │\n *  ├───┼───┼───┬───────┤\n *  │ j │ k │ l │ m     │\n *  ├───┼───┴───┼───┬───┤\n *  │ n │ o     │ p │ q │\n *  └───┴───────┴───┴───┘\n *                ^\n *                Overlap column to check\n *\n * will return slot info for cells: \"b\", \"e\", \"i\".\n *\n * @param table The table to check.\n * @param overlapColumn The index of the column to check.\n */\nexport function getHorizontallyOverlappingCells(table, overlapColumn) {\n    const cellsToSplit = [];\n    const tableWalker = new TableWalker(table);\n    for (const slotInfo of tableWalker) {\n        const { column, cellWidth } = slotInfo;\n        const cellEndColumn = column + cellWidth - 1;\n        if (column < overlapColumn && overlapColumn <= cellEndColumn) {\n            cellsToSplit.push(slotInfo);\n        }\n    }\n    return cellsToSplit;\n}\n/**\n * Splits the table cell vertically.\n *\n * @param columnIndex The table cell column index.\n * @param splitColumn The index of column to split cell on.\n * @returns Created table cell.\n */\nexport function splitVertically(tableCell, columnIndex, splitColumn, writer) {\n    const colspan = parseInt(tableCell.getAttribute('colspan'));\n    const newColspan = splitColumn - columnIndex;\n    const newCellAttributes = {};\n    const newCellColSpan = colspan - newColspan;\n    if (newCellColSpan > 1) {\n        newCellAttributes.colspan = newCellColSpan;\n    }\n    const rowspan = parseInt(tableCell.getAttribute('rowspan') || '1');\n    if (rowspan > 1) {\n        newCellAttributes.rowspan = rowspan;\n    }\n    const newCell = createEmptyTableCell(writer, writer.createPositionAfter(tableCell), newCellAttributes);\n    // Update the colspan attribute after updating table.\n    updateNumericAttribute('colspan', newColspan, tableCell, writer);\n    return newCell;\n}\n/**\n * Adjusts table cell dimensions to not exceed limit row and column.\n *\n * If table cell width (or height) covers a column (or row) that is after a limit column (or row)\n * this method will trim \"colspan\" (or \"rowspan\") attribute so the table cell will fit in a defined limits.\n */\nexport function trimTableCellIfNeeded(tableCell, cellRow, cellColumn, limitRow, limitColumn, writer) {\n    const colspan = parseInt(tableCell.getAttribute('colspan') || '1');\n    const rowspan = parseInt(tableCell.getAttribute('rowspan') || '1');\n    const endColumn = cellColumn + colspan - 1;\n    if (endColumn > limitColumn) {\n        const trimmedSpan = limitColumn - cellColumn + 1;\n        updateNumericAttribute('colspan', trimmedSpan, tableCell, writer, 1);\n    }\n    const endRow = cellRow + rowspan - 1;\n    if (endRow > limitRow) {\n        const trimmedSpan = limitRow - cellRow + 1;\n        updateNumericAttribute('rowspan', trimmedSpan, tableCell, writer, 1);\n    }\n}\n/**\n * Sets proper heading attributes to a cropped table.\n */\nfunction addHeadingsToCroppedTable(croppedTable, sourceTable, startRow, startColumn, writer) {\n    const headingRows = parseInt(sourceTable.getAttribute('headingRows') || '0');\n    if (headingRows > 0) {\n        const headingRowsInCrop = headingRows - startRow;\n        updateNumericAttribute('headingRows', headingRowsInCrop, croppedTable, writer, 0);\n    }\n    const headingColumns = parseInt(sourceTable.getAttribute('headingColumns') || '0');\n    if (headingColumns > 0) {\n        const headingColumnsInCrop = headingColumns - startColumn;\n        updateNumericAttribute('headingColumns', headingColumnsInCrop, croppedTable, writer, 0);\n    }\n}\n/**\n * Removes columns that have no cells anchored.\n *\n * In table below:\n *\n *     +----+----+----+----+----+----+----+\n *     | 00 | 01      | 03 | 04      | 06 |\n *     +----+----+----+----+         +----+\n *     | 10 | 11      | 13 |         | 16 |\n *     +----+----+----+----+----+----+----+\n *     | 20 | 21      | 23 | 24      | 26 |\n *     +----+----+----+----+----+----+----+\n *                  ^--- empty ---^\n *\n * Will remove columns 2 and 5.\n *\n * **Note:** This is a low-level helper method for clearing invalid model state when doing table modifications.\n * To remove a column from a table use {@link module:table/tableutils~TableUtils#removeColumns `TableUtils.removeColumns()`}.\n *\n * @internal\n * @returns True if removed some columns.\n */\nexport function removeEmptyColumns(table, tableUtils) {\n    const width = tableUtils.getColumns(table);\n    const columnsMap = new Array(width).fill(0);\n    for (const { column } of new TableWalker(table)) {\n        columnsMap[column]++;\n    }\n    const emptyColumns = columnsMap.reduce((result, cellsCount, column) => {\n        return cellsCount ? result : [...result, column];\n    }, []);\n    if (emptyColumns.length > 0) {\n        // Remove only last empty column because it will recurrently trigger removing empty rows.\n        const emptyColumn = emptyColumns[emptyColumns.length - 1];\n        // @if CK_DEBUG_TABLE // console.log( `Removing empty column: ${ emptyColumn }.` );\n        tableUtils.removeColumns(table, { at: emptyColumn });\n        return true;\n    }\n    return false;\n}\n/**\n * Removes rows that have no cells anchored.\n *\n * In table below:\n *\n *     +----+----+----+\n *     | 00 | 01 | 02 |\n *     +----+----+----+\n *     | 10 | 11 | 12 |\n *     +    +    +    +\n *     |    |    |    | <-- empty\n *     +----+----+----+\n *     | 30 | 31 | 32 |\n *     +----+----+----+\n *     | 40      | 42 |\n *     +         +    +\n *     |         |    | <-- empty\n *     +----+----+----+\n *     | 60 | 61 | 62 |\n *     +----+----+----+\n *\n * Will remove rows 2 and 5.\n *\n * **Note:** This is a low-level helper method for clearing invalid model state when doing table modifications.\n * To remove a row from a table use {@link module:table/tableutils~TableUtils#removeRows `TableUtils.removeRows()`}.\n *\n * @internal\n * @returns True if removed some rows.\n */\nexport function removeEmptyRows(table, tableUtils) {\n    const emptyRows = [];\n    const tableRowCount = tableUtils.getRows(table);\n    for (let rowIndex = 0; rowIndex < tableRowCount; rowIndex++) {\n        const tableRow = table.getChild(rowIndex);\n        if (tableRow.isEmpty) {\n            emptyRows.push(rowIndex);\n        }\n    }\n    if (emptyRows.length > 0) {\n        // Remove only last empty row because it will recurrently trigger removing empty columns.\n        const emptyRow = emptyRows[emptyRows.length - 1];\n        // @if CK_DEBUG_TABLE // console.log( `Removing empty row: ${ emptyRow }.` );\n        tableUtils.removeRows(table, { at: emptyRow });\n        return true;\n    }\n    return false;\n}\n/**\n * Removes rows and columns that have no cells anchored.\n *\n * In table below:\n *\n *     +----+----+----+----+\n *     | 00      | 02      |\n *     +----+----+         +\n *     | 10      |         |\n *     +----+----+----+----+\n *     | 20      | 22 | 23 |\n *     +         +    +    +\n *     |         |    |    | <-- empty row\n *     +----+----+----+----+\n *             ^--- empty column\n *\n * Will remove row 3 and column 1.\n *\n * **Note:** This is a low-level helper method for clearing invalid model state when doing table modifications.\n * To remove a rows from a table use {@link module:table/tableutils~TableUtils#removeRows `TableUtils.removeRows()`} and\n * {@link module:table/tableutils~TableUtils#removeColumns `TableUtils.removeColumns()`} to remove a column.\n *\n * @internal\n */\nexport function removeEmptyRowsColumns(table, tableUtils) {\n    const removedColumns = removeEmptyColumns(table, tableUtils);\n    // If there was some columns removed then cleaning empty rows was already triggered.\n    if (!removedColumns) {\n        removeEmptyRows(table, tableUtils);\n    }\n}\n/**\n * Returns adjusted last row index if selection covers part of a row with empty slots (spanned by other cells).\n * The `dimensions.lastRow` is equal to last row index but selection might be bigger.\n *\n * This happens *only* on rectangular selection so we analyze a case like this:\n *\n *        +---+---+---+---+\n *      0 | a | b | c | d |\n *        +   +   +---+---+\n *      1 |   | e | f | g |\n *        +   +---+   +---+\n *      2 |   | h |   | i | <- last row, each cell has rowspan = 2,\n *        +   +   +   +   +    so we need to return 3, not 2\n *      3 |   |   |   |   |\n *        +---+---+---+---+\n *\n * @returns Adjusted last row index.\n */\nexport function adjustLastRowIndex(table, dimensions) {\n    const lastRowMap = Array.from(new TableWalker(table, {\n        startColumn: dimensions.firstColumn,\n        endColumn: dimensions.lastColumn,\n        row: dimensions.lastRow\n    }));\n    const everyCellHasSingleRowspan = lastRowMap.every(({ cellHeight }) => cellHeight === 1);\n    // It is a \"flat\" row, so the last row index is OK.\n    if (everyCellHasSingleRowspan) {\n        return dimensions.lastRow;\n    }\n    // Otherwise get any cell's rowspan and adjust the last row index.\n    const rowspanAdjustment = lastRowMap[0].cellHeight - 1;\n    return dimensions.lastRow + rowspanAdjustment;\n}\n/**\n * Returns adjusted last column index if selection covers part of a column with empty slots (spanned by other cells).\n * The `dimensions.lastColumn` is equal to last column index but selection might be bigger.\n *\n * This happens *only* on rectangular selection so we analyze a case like this:\n *\n *       0   1   2   3\n *     +---+---+---+---+\n *     | a             |\n *     +---+---+---+---+\n *     | b | c | d     |\n *     +---+---+---+---+\n *     | e     | f     |\n *     +---+---+---+---+\n *     | g | h         |\n *     +---+---+---+---+\n *               ^\n *              last column, each cell has colspan = 2, so we need to return 3, not 2\n *\n * @returns Adjusted last column index.\n */\nexport function adjustLastColumnIndex(table, dimensions) {\n    const lastColumnMap = Array.from(new TableWalker(table, {\n        startRow: dimensions.firstRow,\n        endRow: dimensions.lastRow,\n        column: dimensions.lastColumn\n    }));\n    const everyCellHasSingleColspan = lastColumnMap.every(({ cellWidth }) => cellWidth === 1);\n    // It is a \"flat\" column, so the last column index is OK.\n    if (everyCellHasSingleColspan) {\n        return dimensions.lastColumn;\n    }\n    // Otherwise get any cell's colspan and adjust the last column index.\n    const colspanAdjustment = lastColumnMap[0].cellWidth - 1;\n    return dimensions.lastColumn + colspanAdjustment;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport TableWalker from '../tablewalker.js';\nimport { isHeadingColumnCell } from '../utils/common.js';\nimport { removeEmptyRowsColumns } from '../utils/structure.js';\n/**\n * The merge cell command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'mergeTableCellRight'`, `'mergeTableCellLeft'`,\n * `'mergeTableCellUp'` and `'mergeTableCellDown'` editor commands.\n *\n * To merge a table cell at the current selection with another cell, execute the command corresponding with the preferred direction.\n *\n * For example, to merge with a cell to the right:\n *\n * ```ts\n * editor.execute( 'mergeTableCellRight' );\n * ```\n *\n * **Note**: If a table cell has a different [`rowspan`](https://www.w3.org/TR/html50/tabular-data.html#attr-tdth-rowspan)\n * (for `'mergeTableCellRight'` and `'mergeTableCellLeft'`) or [`colspan`](https://www.w3.org/TR/html50/tabular-data.html#attr-tdth-colspan)\n * (for `'mergeTableCellUp'` and `'mergeTableCellDown'`), the command will be disabled.\n */\nexport default class MergeCellCommand extends Command {\n    /**\n     * Creates a new `MergeCellCommand` instance.\n     *\n     * @param editor The editor on which this command will be used.\n     * @param options.direction Indicates which cell to merge with the currently selected one.\n     * Possible values are: `'left'`, `'right'`, `'up'` and `'down'`.\n     */\n    constructor(editor, options) {\n        super(editor);\n        this.direction = options.direction;\n        this.isHorizontal = this.direction == 'right' || this.direction == 'left';\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const cellToMerge = this._getMergeableCell();\n        this.value = cellToMerge;\n        this.isEnabled = !!cellToMerge;\n    }\n    /**\n     * Executes the command.\n     *\n     * Depending on the command's {@link #direction} value, it will merge the cell that is to the `'left'`, `'right'`, `'up'` or `'down'`.\n     *\n     * @fires execute\n     */\n    execute() {\n        const model = this.editor.model;\n        const doc = model.document;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const tableCell = tableUtils.getTableCellsContainingSelection(doc.selection)[0];\n        const cellToMerge = this.value;\n        const direction = this.direction;\n        model.change(writer => {\n            const isMergeNext = direction == 'right' || direction == 'down';\n            // The merge mechanism is always the same so sort cells to be merged.\n            const cellToExpand = (isMergeNext ? tableCell : cellToMerge);\n            const cellToRemove = (isMergeNext ? cellToMerge : tableCell);\n            // Cache the parent of cell to remove for later check.\n            const removedTableCellRow = cellToRemove.parent;\n            mergeTableCells(cellToRemove, cellToExpand, writer);\n            const spanAttribute = this.isHorizontal ? 'colspan' : 'rowspan';\n            const cellSpan = parseInt(tableCell.getAttribute(spanAttribute) || '1');\n            const cellToMergeSpan = parseInt(cellToMerge.getAttribute(spanAttribute) || '1');\n            // Update table cell span attribute and merge set selection on merged contents.\n            writer.setAttribute(spanAttribute, cellSpan + cellToMergeSpan, cellToExpand);\n            writer.setSelection(writer.createRangeIn(cellToExpand));\n            const tableUtils = this.editor.plugins.get('TableUtils');\n            const table = removedTableCellRow.findAncestor('table');\n            // Remove empty rows and columns after merging.\n            removeEmptyRowsColumns(table, tableUtils);\n        });\n    }\n    /**\n     * Returns a cell that can be merged with the current cell depending on the command's direction.\n     */\n    _getMergeableCell() {\n        const model = this.editor.model;\n        const doc = model.document;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const tableCell = tableUtils.getTableCellsContainingSelection(doc.selection)[0];\n        if (!tableCell) {\n            return;\n        }\n        // First get the cell on proper direction.\n        const cellToMerge = this.isHorizontal ?\n            getHorizontalCell(tableCell, this.direction, tableUtils) :\n            getVerticalCell(tableCell, this.direction, tableUtils);\n        if (!cellToMerge) {\n            return;\n        }\n        // If found check if the span perpendicular to merge direction is equal on both cells.\n        const spanAttribute = this.isHorizontal ? 'rowspan' : 'colspan';\n        const span = parseInt(tableCell.getAttribute(spanAttribute) || '1');\n        const cellToMergeSpan = parseInt(cellToMerge.getAttribute(spanAttribute) || '1');\n        if (cellToMergeSpan === span) {\n            return cellToMerge;\n        }\n    }\n}\n/**\n * Returns the cell that can be merged horizontally.\n */\nfunction getHorizontalCell(tableCell, direction, tableUtils) {\n    const tableRow = tableCell.parent;\n    const table = tableRow.parent;\n    const horizontalCell = direction == 'right' ? tableCell.nextSibling : tableCell.previousSibling;\n    const hasHeadingColumns = (table.getAttribute('headingColumns') || 0) > 0;\n    if (!horizontalCell) {\n        return;\n    }\n    // Sort cells:\n    const cellOnLeft = (direction == 'right' ? tableCell : horizontalCell);\n    const cellOnRight = (direction == 'right' ? horizontalCell : tableCell);\n    // Get their column indexes:\n    const { column: leftCellColumn } = tableUtils.getCellLocation(cellOnLeft);\n    const { column: rightCellColumn } = tableUtils.getCellLocation(cellOnRight);\n    const leftCellSpan = parseInt(cellOnLeft.getAttribute('colspan') || '1');\n    const isCellOnLeftInHeadingColumn = isHeadingColumnCell(tableUtils, cellOnLeft);\n    const isCellOnRightInHeadingColumn = isHeadingColumnCell(tableUtils, cellOnRight);\n    // We cannot merge heading columns cells with regular cells.\n    if (hasHeadingColumns && isCellOnLeftInHeadingColumn != isCellOnRightInHeadingColumn) {\n        return;\n    }\n    // The cell on the right must have index that is distant to the cell on the left by the left cell's width (colspan).\n    const cellsAreTouching = leftCellColumn + leftCellSpan === rightCellColumn;\n    // If the right cell's column index is different it means that there are rowspanned cells between them.\n    return cellsAreTouching ? horizontalCell : undefined;\n}\n/**\n * Returns the cell that can be merged vertically.\n */\nfunction getVerticalCell(tableCell, direction, tableUtils) {\n    const tableRow = tableCell.parent;\n    const table = tableRow.parent;\n    const rowIndex = table.getChildIndex(tableRow);\n    // Don't search for mergeable cell if direction points out of the table.\n    if ((direction == 'down' && rowIndex === tableUtils.getRows(table) - 1) || (direction == 'up' && rowIndex === 0)) {\n        return null;\n    }\n    const rowspan = parseInt(tableCell.getAttribute('rowspan') || '1');\n    const headingRows = table.getAttribute('headingRows') || 0;\n    const isMergeWithBodyCell = direction == 'down' && (rowIndex + rowspan) === headingRows;\n    const isMergeWithHeadCell = direction == 'up' && rowIndex === headingRows;\n    // Don't search for mergeable cell if direction points out of the current table section.\n    if (headingRows && (isMergeWithBodyCell || isMergeWithHeadCell)) {\n        return null;\n    }\n    const currentCellRowSpan = parseInt(tableCell.getAttribute('rowspan') || '1');\n    const rowOfCellToMerge = direction == 'down' ? rowIndex + currentCellRowSpan : rowIndex;\n    const tableMap = [...new TableWalker(table, { endRow: rowOfCellToMerge })];\n    const currentCellData = tableMap.find(value => value.cell === tableCell);\n    const mergeColumn = currentCellData.column;\n    const cellToMergeData = tableMap.find(({ row, cellHeight, column }) => {\n        if (column !== mergeColumn) {\n            return false;\n        }\n        if (direction == 'down') {\n            // If merging a cell below the mergeRow is already calculated.\n            return row === rowOfCellToMerge;\n        }\n        else {\n            // If merging a cell above calculate if it spans to mergeRow.\n            return rowOfCellToMerge === row + cellHeight;\n        }\n    });\n    return cellToMergeData && cellToMergeData.cell ? cellToMergeData.cell : null;\n}\n/**\n * Merges two table cells. It will ensure that after merging cells with an empty paragraph, the resulting table cell will only have one\n * paragraph. If one of the merged table cells is empty, the merged table cell will have the contents of the non-empty table cell.\n * If both are empty, the merged table cell will have only one empty paragraph.\n */\nfunction mergeTableCells(cellToRemove, cellToExpand, writer) {\n    if (!isEmpty(cellToRemove)) {\n        if (isEmpty(cellToExpand)) {\n            writer.remove(writer.createRangeIn(cellToExpand));\n        }\n        writer.move(writer.createRangeIn(cellToRemove), writer.createPositionAt(cellToExpand, 'end'));\n    }\n    // Remove merged table cell.\n    writer.remove(cellToRemove);\n}\n/**\n * Checks if the passed table cell contains an empty paragraph.\n */\nfunction isEmpty(tableCell) {\n    const firstTableChild = tableCell.getChild(0);\n    return tableCell.childCount == 1 && firstTableChild.is('element', 'paragraph') && firstTableChild.isEmpty;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/removerowcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The remove row command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'removeTableRow'` editor command.\n *\n * To remove the row containing the selected cell, execute the command:\n *\n * ```ts\n * editor.execute( 'removeTableRow' );\n * ```\n */\nexport default class RemoveRowCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(this.editor.model.document.selection);\n        const firstCell = selectedCells[0];\n        if (firstCell) {\n            const table = firstCell.findAncestor('table');\n            const tableRowCount = tableUtils.getRows(table);\n            const lastRowIndex = tableRowCount - 1;\n            const selectedRowIndexes = tableUtils.getRowIndexes(selectedCells);\n            const areAllRowsSelected = selectedRowIndexes.first === 0 && selectedRowIndexes.last === lastRowIndex;\n            // Disallow selecting whole table -> delete whole table should be used instead.\n            this.isEnabled = !areAllRowsSelected;\n        }\n        else {\n            this.isEnabled = false;\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const model = this.editor.model;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const referenceCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const removedRowIndexes = tableUtils.getRowIndexes(referenceCells);\n        const firstCell = referenceCells[0];\n        const table = firstCell.findAncestor('table');\n        const columnIndexToFocus = tableUtils.getCellLocation(firstCell).column;\n        model.change(writer => {\n            const rowsToRemove = removedRowIndexes.last - removedRowIndexes.first + 1;\n            tableUtils.removeRows(table, {\n                at: removedRowIndexes.first,\n                rows: rowsToRemove\n            });\n            const cellToFocus = getCellToFocus(table, removedRowIndexes.first, columnIndexToFocus, tableUtils.getRows(table));\n            writer.setSelection(writer.createPositionAt(cellToFocus, 0));\n        });\n    }\n}\n/**\n * Returns a cell that should be focused before removing the row, belonging to the same column as the currently focused cell.\n * - If the row was not the last one, the cell to focus will be in the row that followed it (before removal).\n * - If the row was the last one, the cell to focus will be in the row that preceded it (before removal).\n */\nfunction getCellToFocus(table, removedRowIndex, columnToFocus, tableRowCount) {\n    // Don't go beyond last row's index.\n    const row = table.getChild(Math.min(removedRowIndex, tableRowCount - 1));\n    // Default to first table cell.\n    let cellToFocus = row.getChild(0);\n    let column = 0;\n    for (const tableCell of row.getChildren()) {\n        if (column > columnToFocus) {\n            return cellToFocus;\n        }\n        cellToFocus = tableCell;\n        column += parseInt(tableCell.getAttribute('colspan') || '1');\n    }\n    return cellToFocus;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/removecolumncommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport TableWalker from '../tablewalker.js';\n/**\n * The remove column command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'removeTableColumn'` editor command.\n *\n * To remove the column containing the selected cell, execute the command:\n *\n * ```ts\n * editor.execute( 'removeTableColumn' );\n * ```\n */\nexport default class RemoveColumnCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(this.editor.model.document.selection);\n        const firstCell = selectedCells[0];\n        if (firstCell) {\n            const table = firstCell.findAncestor('table');\n            const tableColumnCount = tableUtils.getColumns(table);\n            const { first, last } = tableUtils.getColumnIndexes(selectedCells);\n            this.isEnabled = last - first < (tableColumnCount - 1);\n        }\n        else {\n            this.isEnabled = false;\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const [firstCell, lastCell] = getBoundaryCells(this.editor.model.document.selection, tableUtils);\n        const table = firstCell.parent.parent;\n        // Cache the table before removing or updating colspans.\n        const tableMap = [...new TableWalker(table)];\n        // Store column indexes of removed columns.\n        const removedColumnIndexes = {\n            first: tableMap.find(value => value.cell === firstCell).column,\n            last: tableMap.find(value => value.cell === lastCell).column\n        };\n        const cellToFocus = getCellToFocus(tableMap, firstCell, lastCell, removedColumnIndexes);\n        this.editor.model.change(writer => {\n            const columnsToRemove = removedColumnIndexes.last - removedColumnIndexes.first + 1;\n            tableUtils.removeColumns(table, {\n                at: removedColumnIndexes.first,\n                columns: columnsToRemove\n            });\n            writer.setSelection(writer.createPositionAt(cellToFocus, 0));\n        });\n    }\n}\n/**\n * Returns a proper table cell to focus after removing a column.\n * - selection is on last table cell it will return previous cell.\n */\nfunction getCellToFocus(tableMap, firstCell, lastCell, removedColumnIndexes) {\n    const colspan = parseInt(lastCell.getAttribute('colspan') || '1');\n    // If the table cell is spanned over 2+ columns - it will be truncated so the selection should\n    // stay in that cell.\n    if (colspan > 1) {\n        return lastCell;\n    }\n    // Normally, look for the cell in the same row that precedes the first cell to put selection there (\"column on the left\").\n    // If the deleted column is the first column of the table, there will be no predecessor: use the cell\n    // from the column that follows then (also in the same row).\n    else if (firstCell.previousSibling || lastCell.nextSibling) {\n        return lastCell.nextSibling || firstCell.previousSibling;\n    }\n    // It can happen that table cells have no siblings in a row, for instance, when there are row spans\n    // in the table (in the previous row). Then just look for the closest cell that is in a column\n    // that will not be removed to put the selection there.\n    else {\n        // Look for any cell in a column that precedes the first removed column.\n        if (removedColumnIndexes.first) {\n            return tableMap.reverse().find(({ column }) => {\n                return column < removedColumnIndexes.first;\n            }).cell;\n        }\n        // If the first removed column is the first column of the table, then\n        // look for any cell that is in a column that follows the last removed column.\n        else {\n            return tableMap.reverse().find(({ column }) => {\n                return column > removedColumnIndexes.last;\n            }).cell;\n        }\n    }\n}\n/**\n * Returns helper object returning the first and the last cell contained in given selection, based on DOM order.\n */\nfunction getBoundaryCells(selection, tableUtils) {\n    const referenceCells = tableUtils.getSelectionAffectedTableCells(selection);\n    const firstCell = referenceCells[0];\n    const lastCell = referenceCells.pop();\n    const returnValue = [firstCell, lastCell];\n    return firstCell.isBefore(lastCell) ? returnValue : returnValue.reverse();\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/setheaderrowcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { updateNumericAttribute } from '../utils/common.js';\nimport { getVerticallyOverlappingCells, splitHorizontally } from '../utils/structure.js';\n/**\n * The header row command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'setTableColumnHeader'` editor command.\n *\n * You can make the row containing the selected cell a [header](https://www.w3.org/TR/html50/tabular-data.html#the-th-element) by executing:\n *\n * ```ts\n * editor.execute( 'setTableRowHeader' );\n * ```\n *\n * **Note:** All preceding rows will also become headers. If the current row is already a header, executing this command\n * will make it a regular row back again (including the following rows).\n */\nexport default class SetHeaderRowCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const model = this.editor.model;\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const isInTable = selectedCells.length > 0;\n        this.isEnabled = isInTable;\n        this.value = isInTable && selectedCells.every(cell => this._isInHeading(cell, cell.parent.parent));\n    }\n    /**\n     * Executes the command.\n     *\n     * When the selection is in a non-header row, the command will set the `headingRows` table attribute to cover that row.\n     *\n     * When the selection is already in a header row, it will set `headingRows` so the heading section will end before that row.\n     *\n     * @fires execute\n     * @param options.forceValue If set, the command will set (`true`) or unset (`false`) the header rows according to\n     * the `forceValue` parameter instead of the current model state.\n     */\n    execute(options = {}) {\n        if (options.forceValue === this.value) {\n            return;\n        }\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const model = this.editor.model;\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const table = selectedCells[0].findAncestor('table');\n        const { first, last } = tableUtils.getRowIndexes(selectedCells);\n        const headingRowsToSet = this.value ? first : last + 1;\n        const currentHeadingRows = table.getAttribute('headingRows') || 0;\n        model.change(writer => {\n            if (headingRowsToSet) {\n                // Changing heading rows requires to check if any of a heading cell is overlapping vertically the table head.\n                // Any table cell that has a rowspan attribute > 1 will not exceed the table head so we need to fix it in rows below.\n                const startRow = headingRowsToSet > currentHeadingRows ? currentHeadingRows : 0;\n                const overlappingCells = getVerticallyOverlappingCells(table, headingRowsToSet, startRow);\n                for (const { cell } of overlappingCells) {\n                    splitHorizontally(cell, headingRowsToSet, writer);\n                }\n            }\n            updateNumericAttribute('headingRows', headingRowsToSet, table, writer, 0);\n        });\n    }\n    /**\n     * Checks if a table cell is in the heading section.\n     */\n    _isInHeading(tableCell, table) {\n        const headingRows = parseInt(table.getAttribute('headingRows') || '0');\n        return !!headingRows && tableCell.parent.index < headingRows;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/setheadercolumncommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { isHeadingColumnCell, updateNumericAttribute } from '../utils/common.js';\nimport { getHorizontallyOverlappingCells, splitVertically } from '../utils/structure.js';\n/**\n * The header column command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'setTableColumnHeader'` editor command.\n *\n * You can make the column containing the selected cell a [header](https://www.w3.org/TR/html50/tabular-data.html#the-th-element)\n * by executing:\n *\n * ```ts\n * editor.execute( 'setTableColumnHeader' );\n * ```\n *\n * **Note:** All preceding columns will also become headers. If the current column is already a header, executing this command\n * will make it a regular column back again (including the following columns).\n */\nexport default class SetHeaderColumnCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const model = this.editor.model;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const isInTable = selectedCells.length > 0;\n        this.isEnabled = isInTable;\n        this.value = isInTable && selectedCells.every(cell => isHeadingColumnCell(tableUtils, cell));\n    }\n    /**\n     * Executes the command.\n     *\n     * When the selection is in a non-header column, the command will set the `headingColumns` table attribute to cover that column.\n     *\n     * When the selection is already in a header column, it will set `headingColumns` so the heading section will end before that column.\n     *\n     * @fires execute\n     * @param options.forceValue If set, the command will set (`true`) or unset (`false`) the header columns according to\n     * the `forceValue` parameter instead of the current model state.\n     */\n    execute(options = {}) {\n        if (options.forceValue === this.value) {\n            return;\n        }\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const model = this.editor.model;\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const table = selectedCells[0].findAncestor('table');\n        const { first, last } = tableUtils.getColumnIndexes(selectedCells);\n        const headingColumnsToSet = this.value ? first : last + 1;\n        model.change(writer => {\n            if (headingColumnsToSet) {\n                // Changing heading columns requires to check if any of a heading cell is overlapping horizontally the table head.\n                // Any table cell that has a colspan attribute > 1 will not exceed the table head so we need to fix it in columns before.\n                const overlappingCells = getHorizontallyOverlappingCells(table, headingColumnsToSet);\n                for (const { cell, column } of overlappingCells) {\n                    splitVertically(cell, column, headingColumnsToSet, writer);\n                }\n            }\n            updateNumericAttribute('headingColumns', headingColumnsToSet, table, writer, 0);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { global } from 'ckeditor5/src/utils.js';\nimport { COLUMN_WIDTH_PRECISION, COLUMN_MIN_WIDTH_AS_PERCENTAGE, COLUMN_MIN_WIDTH_IN_PIXELS } from './constants.js';\n/**\n * Returns all the inserted or changed table model elements in a given change set. Only the tables\n * with 'columnsWidth' attribute are taken into account. The returned set may be empty.\n *\n * Most notably if an entire table is removed it will not be included in returned set.\n *\n * @param model The model to collect the affected elements from.\n * @returns A set of table model elements.\n */\nexport function getChangedResizedTables(model) {\n    const affectedTables = new Set();\n    for (const change of model.document.differ.getChanges()) {\n        let referencePosition = null;\n        // Checks if the particular change from the differ is:\n        // - an insertion or removal of a table, a row or a cell,\n        // - an attribute change on a table, a row or a cell.\n        switch (change.type) {\n            case 'insert':\n                referencePosition = ['table', 'tableRow', 'tableCell'].includes(change.name) ?\n                    change.position :\n                    null;\n                break;\n            case 'remove':\n                // If the whole table is removed, there's no need to update its column widths (#12201).\n                referencePosition = ['tableRow', 'tableCell'].includes(change.name) ?\n                    change.position :\n                    null;\n                break;\n            case 'attribute':\n                if (change.range.start.nodeAfter) {\n                    referencePosition = ['table', 'tableRow', 'tableCell'].includes(change.range.start.nodeAfter.name) ?\n                        change.range.start :\n                        null;\n                }\n                break;\n        }\n        if (!referencePosition) {\n            continue;\n        }\n        const tableNode = (referencePosition.nodeAfter && referencePosition.nodeAfter.is('element', 'table')) ?\n            referencePosition.nodeAfter : referencePosition.findAncestor('table');\n        // We iterate over the whole table looking for the nested tables that are also affected.\n        for (const node of model.createRangeOn(tableNode).getItems()) {\n            if (!node.is('element', 'table')) {\n                continue;\n            }\n            if (!getColumnGroupElement(node)) {\n                continue;\n            }\n            affectedTables.add(node);\n        }\n    }\n    return affectedTables;\n}\n/**\n * Calculates the percentage of the minimum column width given in pixels for a given table.\n *\n * @param modelTable A table model element.\n * @param editor The editor instance.\n * @returns The minimal column width in percentage.\n */\nexport function getColumnMinWidthAsPercentage(modelTable, editor) {\n    return COLUMN_MIN_WIDTH_IN_PIXELS * 100 / getTableWidthInPixels(modelTable, editor);\n}\n/**\n * Calculates the table width in pixels.\n *\n * @param modelTable A table model element.\n * @param editor The editor instance.\n * @returns The width of the table in pixels.\n */\nexport function getTableWidthInPixels(modelTable, editor) {\n    // It is possible for a table to not have a <tbody> element - see #11878.\n    const referenceElement = getChildrenViewElement(modelTable, 'tbody', editor) || getChildrenViewElement(modelTable, 'thead', editor);\n    const domReferenceElement = editor.editing.view.domConverter.mapViewToDom(referenceElement);\n    return getElementWidthInPixels(domReferenceElement);\n}\n/**\n * Returns the a view element with a given name that is nested directly in a `<table>` element\n * related to a given `modelTable`.\n *\n * @param elementName Name of a view to be looked for, e.g. `'colgroup`', `'thead`'.\n * @returns Matched view or `undefined` otherwise.\n */\nfunction getChildrenViewElement(modelTable, elementName, editor) {\n    const viewFigure = editor.editing.mapper.toViewElement(modelTable);\n    const viewTable = [...viewFigure.getChildren()]\n        .find((node) => node.is('element', 'table'));\n    return [...viewTable.getChildren()]\n        .find((node) => node.is('element', elementName));\n}\n/**\n * Returns the computed width (in pixels) of the DOM element without padding and borders.\n *\n * @param domElement A DOM element.\n * @returns The width of the DOM element in pixels.\n */\nexport function getElementWidthInPixels(domElement) {\n    const styles = global.window.getComputedStyle(domElement);\n    // In the 'border-box' box sizing algorithm, the element's width\n    // already includes the padding and border width (#12335).\n    if (styles.boxSizing === 'border-box') {\n        return parseFloat(styles.width) -\n            parseFloat(styles.paddingLeft) -\n            parseFloat(styles.paddingRight) -\n            parseFloat(styles.borderLeftWidth) -\n            parseFloat(styles.borderRightWidth);\n    }\n    else {\n        return parseFloat(styles.width);\n    }\n}\n/**\n * Returns the column indexes on the left and right edges of a cell. They differ if the cell spans\n * across multiple columns.\n *\n * @param cell A table cell model element.\n * @param tableUtils The Table Utils plugin instance.\n * @returns An object containing the indexes of the left and right edges of the cell.\n */\nexport function getColumnEdgesIndexes(cell, tableUtils) {\n    const cellColumnIndex = tableUtils.getCellLocation(cell).column;\n    const cellWidth = cell.getAttribute('colspan') || 1;\n    return {\n        leftEdge: cellColumnIndex,\n        rightEdge: cellColumnIndex + cellWidth - 1\n    };\n}\n/**\n * Rounds the provided value to a fixed-point number with defined number of digits after the decimal point.\n *\n * @param value A number to be rounded.\n * @returns The rounded number.\n */\nexport function toPrecision(value) {\n    const multiplier = Math.pow(10, COLUMN_WIDTH_PRECISION);\n    const number = typeof value === 'number' ? value : parseFloat(value);\n    return Math.round(number * multiplier) / multiplier;\n}\n/**\n * Clamps the number within the inclusive lower (min) and upper (max) bounds. Returned number is rounded using the\n * {@link ~toPrecision `toPrecision()`} function.\n *\n * @param number A number to be clamped.\n * @param min A lower bound.\n * @param max An upper bound.\n * @returns The clamped number.\n */\nexport function clamp(number, min, max) {\n    if (number <= min) {\n        return toPrecision(min);\n    }\n    if (number >= max) {\n        return toPrecision(max);\n    }\n    return toPrecision(number);\n}\n/**\n * Creates an array with defined length and fills all elements with defined value.\n *\n * @param length The length of the array.\n * @param value The value to fill the array with.\n * @returns An array with defined length and filled with defined value.\n */\nexport function createFilledArray(length, value) {\n    return Array(length).fill(value);\n}\n/**\n * Sums all array values that can be parsed to a float.\n *\n * @param array An array of numbers.\n * @returns The sum of all array values.\n */\nexport function sumArray(array) {\n    return array\n        .map(value => typeof value === 'number' ? value : parseFloat(value))\n        .filter(value => !Number.isNaN(value))\n        .reduce((result, item) => result + item, 0);\n}\n/**\n * Makes sure that the sum of the widths from all columns is 100%. If the sum of all the widths is not equal 100%, all the widths are\n * changed proportionally so that they all sum back to 100%. If there are columns without specified width, the amount remaining\n * after assigning the known widths will be distributed equally between them.\n *\n * @param columnWidths An array of column widths.\n * @returns An array of column widths guaranteed to sum up to 100%.\n */\nexport function normalizeColumnWidths(columnWidths) {\n    const widths = columnWidths.map(width => {\n        if (width === 'auto') {\n            return width;\n        }\n        return parseFloat(width.replace('%', ''));\n    });\n    let normalizedWidths = calculateMissingColumnWidths(widths);\n    const totalWidth = sumArray(normalizedWidths);\n    if (totalWidth !== 100) {\n        normalizedWidths = normalizedWidths\n            // Adjust all the columns proportionally.\n            .map(width => toPrecision(width * 100 / totalWidth))\n            // Due to rounding of numbers it may happen that the sum of the widths of all columns will not be exactly 100%.\n            // Therefore, the width of the last column is explicitly adjusted (narrowed or expanded), since all the columns\n            // have been proportionally changed already.\n            .map((columnWidth, columnIndex, width) => {\n            const isLastColumn = columnIndex === width.length - 1;\n            if (!isLastColumn) {\n                return columnWidth;\n            }\n            const totalWidth = sumArray(width);\n            return toPrecision(columnWidth + 100 - totalWidth);\n        });\n    }\n    return normalizedWidths.map(width => width + '%');\n}\n/**\n * Initializes the column widths by parsing the attribute value and calculating the uninitialized column widths. The special value 'auto'\n * indicates that width for the column must be calculated. The width of such uninitialized column is calculated as follows:\n * - If there is enough free space in the table for all uninitialized columns to have at least the minimum allowed width for all of them,\n *   then set this width equally for all uninitialized columns.\n * - Otherwise, just set the minimum allowed width for all uninitialized columns. The sum of all column widths will be greater than 100%,\n *   but then it will be adjusted proportionally to 100% in {@link #normalizeColumnWidths `normalizeColumnWidths()`}.\n *\n * @param columnWidths An array of column widths.\n * @returns An array with 'auto' values replaced with calculated widths.\n */\nfunction calculateMissingColumnWidths(columnWidths) {\n    const numberOfUninitializedColumns = columnWidths.filter(columnWidth => columnWidth === 'auto').length;\n    if (numberOfUninitializedColumns === 0) {\n        return columnWidths.map(columnWidth => toPrecision(columnWidth));\n    }\n    const totalWidthOfInitializedColumns = sumArray(columnWidths);\n    const widthForUninitializedColumn = Math.max((100 - totalWidthOfInitializedColumns) / numberOfUninitializedColumns, COLUMN_MIN_WIDTH_AS_PERCENTAGE);\n    return columnWidths\n        .map(columnWidth => columnWidth === 'auto' ? widthForUninitializedColumn : columnWidth)\n        .map(columnWidth => toPrecision(columnWidth));\n}\n/**\n * Calculates the total horizontal space taken by the cell. That includes:\n *  * width,\n *  * left and red padding,\n *  * border width.\n *\n * @param domCell A DOM cell element.\n * @returns Width in pixels without `px` at the end.\n */\nexport function getDomCellOuterWidth(domCell) {\n    const styles = global.window.getComputedStyle(domCell);\n    // In the 'border-box' box sizing algorithm, the element's width\n    // already includes the padding and border width (#12335).\n    if (styles.boxSizing === 'border-box') {\n        return parseInt(styles.width);\n    }\n    else {\n        return parseFloat(styles.width) +\n            parseFloat(styles.paddingLeft) +\n            parseFloat(styles.paddingRight) +\n            parseFloat(styles.borderWidth);\n    }\n}\n/**\n * Updates column elements to match columns widths.\n *\n * @param columns\n * @param tableColumnGroup\n * @param normalizedWidths\n * @param writer\n */\nexport function updateColumnElements(columns, tableColumnGroup, normalizedWidths, writer) {\n    for (let i = 0; i < Math.max(normalizedWidths.length, columns.length); i++) {\n        const column = columns[i];\n        const columnWidth = normalizedWidths[i];\n        if (!columnWidth) {\n            // Number of `<tableColumn>` elements exceeds actual number of columns.\n            writer.remove(column);\n        }\n        else if (!column) {\n            // There is fewer `<tableColumn>` elements than actual columns.\n            writer.appendElement('tableColumn', { columnWidth }, tableColumnGroup);\n        }\n        else {\n            // Update column width.\n            writer.setAttribute('columnWidth', columnWidth, column);\n        }\n    }\n}\n/**\n * Returns a 'tableColumnGroup' element from the 'table'.\n *\n * @internal\n * @param element A 'table' or 'tableColumnGroup' element.\n * @returns A 'tableColumnGroup' element.\n */\nexport function getColumnGroupElement(element) {\n    if (element.is('element', 'tableColumnGroup')) {\n        return element;\n    }\n    const children = element.getChildren();\n    return Array\n        .from(children)\n        .find(element => element.is('element', 'tableColumnGroup'));\n}\n/**\n * Returns an array of 'tableColumn' elements. It may be empty if there's no `tableColumnGroup` element.\n *\n * @internal\n * @param element A 'table' or 'tableColumnGroup' element.\n * @returns An array of 'tableColumn' elements.\n */\nexport function getTableColumnElements(element) {\n    const columnGroupElement = getColumnGroupElement(element);\n    if (!columnGroupElement) {\n        return [];\n    }\n    return Array.from(columnGroupElement.getChildren());\n}\n/**\n * Returns an array of table column widths.\n *\n * @internal\n * @param element A 'table' or 'tableColumnGroup' element.\n * @returns An array of table column widths.\n */\nexport function getTableColumnsWidths(element) {\n    return getTableColumnElements(element).map(column => column.getAttribute('columnWidth'));\n}\n/**\n * Translates the `colSpan` model attribute into additional column widths and returns the resulting array.\n *\n * @internal\n * @param element A 'table' or 'tableColumnGroup' element.\n * @param writer A writer instance.\n * @returns An array of table column widths.\n */\nexport function translateColSpanAttribute(element, writer) {\n    const tableColumnElements = getTableColumnElements(element);\n    return tableColumnElements.reduce((acc, element) => {\n        const columnWidth = element.getAttribute('columnWidth');\n        const colSpan = element.getAttribute('colSpan');\n        if (!colSpan) {\n            acc.push(columnWidth);\n            return acc;\n        }\n        // Translate the `colSpan` model attribute on to the proper number of column widths\n        // and remove it from the element.\n        // See https://github.com/ckeditor/ckeditor5/issues/14521#issuecomment-1662102889 for more details.\n        for (let i = 0; i < colSpan; i++) {\n            acc.push(columnWidth);\n        }\n        writer.removeAttribute('colSpan', element);\n        return acc;\n    }, []);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableutils\n */\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport TableWalker from './tablewalker.js';\nimport { createEmptyTableCell, updateNumericAttribute } from './utils/common.js';\nimport { removeEmptyColumns, removeEmptyRows } from './utils/structure.js';\nimport { getTableColumnElements } from './tablecolumnresize/utils.js';\n/**\n * The table utilities plugin.\n */\nexport default class TableUtils extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableUtils';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        this.decorate('insertColumns');\n        this.decorate('insertRows');\n    }\n    /**\n     * Returns the table cell location as an object with table row and table column indexes.\n     *\n     * For instance, in the table below:\n     *\n     *      0   1   2   3\n     *    +---+---+---+---+\n     *  0 | a     | b | c |\n     *    +       +   +---+\n     *  1 |       |   | d |\n     *    +---+---+   +---+\n     *  2 | e     |   | f |\n     *    +---+---+---+---+\n     *\n     * the method will return:\n     *\n     * ```ts\n     * const cellA = table.getNodeByPath( [ 0, 0 ] );\n     * editor.plugins.get( 'TableUtils' ).getCellLocation( cellA );\n     * // will return { row: 0, column: 0 }\n     *\n     * const cellD = table.getNodeByPath( [ 1, 0 ] );\n     * editor.plugins.get( 'TableUtils' ).getCellLocation( cellD );\n     * // will return { row: 1, column: 3 }\n     * ```\n     *\n     * @returns Returns a `{row, column}` object.\n     */\n    getCellLocation(tableCell) {\n        const tableRow = tableCell.parent;\n        const table = tableRow.parent;\n        const rowIndex = table.getChildIndex(tableRow);\n        const tableWalker = new TableWalker(table, { row: rowIndex });\n        for (const { cell, row, column } of tableWalker) {\n            if (cell === tableCell) {\n                return { row, column };\n            }\n        }\n        // Should be unreachable code.\n        /* istanbul ignore next -- @preserve */\n        return undefined;\n    }\n    /**\n     * Creates an empty table with a proper structure. The table needs to be inserted into the model,\n     * for example, by using the {@link module:engine/model/model~Model#insertContent} function.\n     *\n     * ```ts\n     * model.change( ( writer ) => {\n     *   // Create a table of 2 rows and 7 columns:\n     *   const table = tableUtils.createTable( writer, { rows: 2, columns: 7 } );\n     *\n     *   // Insert a table to the model at the best position taking the current selection:\n     *   model.insertContent( table );\n     * }\n     * ```\n     *\n     * @param writer The model writer.\n     * @param options.rows The number of rows to create. Default value is 2.\n     * @param options.columns The number of columns to create. Default value is 2.\n     * @param options.headingRows The number of heading rows. Default value is 0.\n     * @param options.headingColumns The number of heading columns. Default value is 0.\n     * @returns The created table element.\n     */\n    createTable(writer, options) {\n        const table = writer.createElement('table');\n        const rows = options.rows || 2;\n        const columns = options.columns || 2;\n        createEmptyRows(writer, table, 0, rows, columns);\n        if (options.headingRows) {\n            updateNumericAttribute('headingRows', Math.min(options.headingRows, rows), table, writer, 0);\n        }\n        if (options.headingColumns) {\n            updateNumericAttribute('headingColumns', Math.min(options.headingColumns, columns), table, writer, 0);\n        }\n        return table;\n    }\n    /**\n     * Inserts rows into a table.\n     *\n     * ```ts\n     * editor.plugins.get( 'TableUtils' ).insertRows( table, { at: 1, rows: 2 } );\n     * ```\n     *\n     * Assuming the table on the left, the above code will transform it to the table on the right:\n     *\n     *  row index\n     *    0 +---+---+---+       `at` = 1,      +---+---+---+ 0\n     *      | a | b | c |       `rows` = 2,    | a | b | c |\n     *    1 +   +---+---+   <-- insert here    +   +---+---+ 1\n     *      |   | d | e |                      |   |   |   |\n     *    2 +   +---+---+       will give:     +   +---+---+ 2\n     *      |   | f | g |                      |   |   |   |\n     *    3 +---+---+---+                      +   +---+---+ 3\n     *                                         |   | d | e |\n     *                                         +   +---+---+ 4\n     *                                         +   + f | g |\n     *                                         +---+---+---+ 5\n     *\n     * @param table The table model element where the rows will be inserted.\n     * @param options.at The row index at which the rows will be inserted.  Default value is 0.\n     * @param options.rows The number of rows to insert.  Default value is 1.\n     * @param options.copyStructureFromAbove The flag for copying row structure. Note that\n     * the row structure will not be copied if this option is not provided.\n     */\n    insertRows(table, options = {}) {\n        const model = this.editor.model;\n        const insertAt = options.at || 0;\n        const rowsToInsert = options.rows || 1;\n        const isCopyStructure = options.copyStructureFromAbove !== undefined;\n        const copyStructureFrom = options.copyStructureFromAbove ? insertAt - 1 : insertAt;\n        const rows = this.getRows(table);\n        const columns = this.getColumns(table);\n        if (insertAt > rows) {\n            /**\n             * The `options.at` points at a row position that does not exist.\n             *\n             * @error tableutils-insertrows-insert-out-of-range\n             */\n            throw new CKEditorError('tableutils-insertrows-insert-out-of-range', this, { options });\n        }\n        model.change(writer => {\n            const headingRows = table.getAttribute('headingRows') || 0;\n            // Inserting rows inside heading section requires to update `headingRows` attribute as the heading section will grow.\n            if (headingRows > insertAt) {\n                updateNumericAttribute('headingRows', headingRows + rowsToInsert, table, writer, 0);\n            }\n            // Inserting at the end or at the beginning of a table doesn't require to calculate anything special.\n            if (!isCopyStructure && (insertAt === 0 || insertAt === rows)) {\n                createEmptyRows(writer, table, insertAt, rowsToInsert, columns);\n                return;\n            }\n            // Iterate over all the rows above the inserted rows in order to check for the row-spanned cells.\n            const walkerEndRow = isCopyStructure ? Math.max(insertAt, copyStructureFrom) : insertAt;\n            const tableIterator = new TableWalker(table, { endRow: walkerEndRow });\n            // Store spans of the reference row to reproduce it's structure. This array is column number indexed.\n            const rowColSpansMap = new Array(columns).fill(1);\n            for (const { row, column, cellHeight, cellWidth, cell } of tableIterator) {\n                const lastCellRow = row + cellHeight - 1;\n                const isOverlappingInsertedRow = row < insertAt && insertAt <= lastCellRow;\n                const isReferenceRow = row <= copyStructureFrom && copyStructureFrom <= lastCellRow;\n                // If the cell is row-spanned and overlaps the inserted row, then reserve space for it in the row map.\n                if (isOverlappingInsertedRow) {\n                    // This cell overlaps the inserted rows so we need to expand it further.\n                    writer.setAttribute('rowspan', cellHeight + rowsToInsert, cell);\n                    // Mark this cell with negative number to indicate how many cells should be skipped when adding the new cells.\n                    rowColSpansMap[column] = -cellWidth;\n                }\n                // Store the colspan from reference row.\n                else if (isCopyStructure && isReferenceRow) {\n                    rowColSpansMap[column] = cellWidth;\n                }\n            }\n            for (let rowIndex = 0; rowIndex < rowsToInsert; rowIndex++) {\n                const tableRow = writer.createElement('tableRow');\n                writer.insert(tableRow, table, insertAt);\n                for (let cellIndex = 0; cellIndex < rowColSpansMap.length; cellIndex++) {\n                    const colspan = rowColSpansMap[cellIndex];\n                    const insertPosition = writer.createPositionAt(tableRow, 'end');\n                    // Insert the empty cell only if this slot is not row-spanned from any other cell.\n                    if (colspan > 0) {\n                        createEmptyTableCell(writer, insertPosition, colspan > 1 ? { colspan } : undefined);\n                    }\n                    // Skip the col-spanned slots, there won't be any cells.\n                    cellIndex += Math.abs(colspan) - 1;\n                }\n            }\n        });\n    }\n    /**\n     * Inserts columns into a table.\n     *\n     * ```ts\n     * editor.plugins.get( 'TableUtils' ).insertColumns( table, { at: 1, columns: 2 } );\n     * ```\n     *\n     * Assuming the table on the left, the above code will transform it to the table on the right:\n     *\n     *  0   1   2   3                   0   1   2   3   4   5\n     *  +---+---+---+                   +---+---+---+---+---+\n     *  | a     | b |                   | a             | b |\n     *  +       +---+                   +               +---+\n     *  |       | c |                   |               | c |\n     *  +---+---+---+     will give:    +---+---+---+---+---+\n     *  | d | e | f |                   | d |   |   | e | f |\n     *  +---+   +---+                   +---+---+---+   +---+\n     *  | g |   | h |                   | g |   |   |   | h |\n     *  +---+---+---+                   +---+---+---+---+---+\n     *  | i         |                   | i                 |\n     *  +---+---+---+                   +---+---+---+---+---+\n     *      ^---- insert here, `at` = 1, `columns` = 2\n     *\n     * @param table The table model element where the columns will be inserted.\n     * @param options.at The column index at which the columns will be inserted. Default value is 0.\n     * @param options.columns The number of columns to insert. Default value is 1.\n     */\n    insertColumns(table, options = {}) {\n        const model = this.editor.model;\n        const insertAt = options.at || 0;\n        const columnsToInsert = options.columns || 1;\n        model.change(writer => {\n            const headingColumns = table.getAttribute('headingColumns');\n            // Inserting columns inside heading section requires to update `headingColumns` attribute as the heading section will grow.\n            if (insertAt < headingColumns) {\n                writer.setAttribute('headingColumns', headingColumns + columnsToInsert, table);\n            }\n            const tableColumns = this.getColumns(table);\n            // Inserting at the end and at the beginning of a table doesn't require to calculate anything special.\n            if (insertAt === 0 || tableColumns === insertAt) {\n                for (const tableRow of table.getChildren()) {\n                    // Ignore non-row elements inside the table (e.g. caption).\n                    if (!tableRow.is('element', 'tableRow')) {\n                        continue;\n                    }\n                    createCells(columnsToInsert, writer, writer.createPositionAt(tableRow, insertAt ? 'end' : 0));\n                }\n                return;\n            }\n            const tableWalker = new TableWalker(table, { column: insertAt, includeAllSlots: true });\n            for (const tableSlot of tableWalker) {\n                const { row, cell, cellAnchorColumn, cellAnchorRow, cellWidth, cellHeight } = tableSlot;\n                // When iterating over column the table walker outputs either:\n                // - cells at given column index (cell \"e\" from method docs),\n                // - spanned columns (spanned cell from row between cells \"g\" and \"h\" - spanned by \"e\", only if `includeAllSlots: true`),\n                // - or a cell from the same row which spans over this column (cell \"a\").\n                if (cellAnchorColumn < insertAt) {\n                    // If cell is anchored in previous column, it is a cell that spans over an inserted column (cell \"a\" & \"i\").\n                    // For such cells expand them by a number of columns inserted.\n                    writer.setAttribute('colspan', cellWidth + columnsToInsert, cell);\n                    // This cell will overlap cells in rows below so skip them (because of `includeAllSlots` option) - (cell \"a\")\n                    const lastCellRow = cellAnchorRow + cellHeight - 1;\n                    for (let i = row; i <= lastCellRow; i++) {\n                        tableWalker.skipRow(i);\n                    }\n                }\n                else {\n                    // It's either cell at this column index or spanned cell by a row-spanned cell from row above.\n                    // In table above it's cell \"e\" and a spanned position from row below (empty cell between cells \"g\" and \"h\")\n                    createCells(columnsToInsert, writer, tableSlot.getPositionBefore());\n                }\n            }\n        });\n    }\n    /**\n     * Removes rows from the given `table`.\n     *\n     * This method re-calculates the table geometry including `rowspan` attribute of table cells overlapping removed rows\n     * and table headings values.\n     *\n     * ```ts\n     * editor.plugins.get( 'TableUtils' ).removeRows( table, { at: 1, rows: 2 } );\n     * ```\n     *\n     * Executing the above code in the context of the table on the left will transform its structure as presented on the right:\n     *\n     *  row index\n     *      ┌───┬───┬───┐        `at` = 1        ┌───┬───┬───┐\n     *    0 │ a │ b │ c │        `rows` = 2      │ a │ b │ c │ 0\n     *      │   ├───┼───┤                        │   ├───┼───┤\n     *    1 │   │ d │ e │  <-- remove from here  │   │ d │ g │ 1\n     *      │   │   ├───┤        will give:      ├───┼───┼───┤\n     *    2 │   │   │ f │                        │ h │ i │ j │ 2\n     *      │   │   ├───┤                        └───┴───┴───┘\n     *    3 │   │   │ g │\n     *      ├───┼───┼───┤\n     *    4 │ h │ i │ j │\n     *      └───┴───┴───┘\n     *\n     * @param options.at The row index at which the removing rows will start.\n     * @param options.rows The number of rows to remove. Default value is 1.\n     */\n    removeRows(table, options) {\n        const model = this.editor.model;\n        const rowsToRemove = options.rows || 1;\n        const rowCount = this.getRows(table);\n        const first = options.at;\n        const last = first + rowsToRemove - 1;\n        if (last > rowCount - 1) {\n            /**\n             * The `options.at` param must point at existing row and `options.rows` must not exceed the rows in the table.\n             *\n             * @error tableutils-removerows-row-index-out-of-range\n             */\n            throw new CKEditorError('tableutils-removerows-row-index-out-of-range', this, { table, options });\n        }\n        model.change(writer => {\n            const indexesObject = { first, last };\n            // Removing rows from the table require that most calculations to be done prior to changing table structure.\n            // Preparations must be done in the same enqueueChange callback to use the current table structure.\n            // 1. Preparation - get row-spanned cells that have to be modified after removing rows.\n            const { cellsToMove, cellsToTrim } = getCellsToMoveAndTrimOnRemoveRow(table, indexesObject);\n            // 2. Execution\n            // 2a. Move cells from removed rows that extends over a removed section - must be done before removing rows.\n            // This will fill any gaps in a rows below that previously were empty because of row-spanned cells.\n            if (cellsToMove.size) {\n                const rowAfterRemovedSection = last + 1;\n                moveCellsToRow(table, rowAfterRemovedSection, cellsToMove, writer);\n            }\n            // 2b. Remove all required rows.\n            for (let i = last; i >= first; i--) {\n                writer.remove(table.getChild(i));\n            }\n            // 2c. Update cells from rows above that overlap removed section. Similar to step 2 but does not involve moving cells.\n            for (const { rowspan, cell } of cellsToTrim) {\n                updateNumericAttribute('rowspan', rowspan, cell, writer);\n            }\n            // 2d. Adjust heading rows if removed rows were in a heading section.\n            updateHeadingRows(table, indexesObject, writer);\n            // 2e. Remove empty columns (without anchored cells) if there are any.\n            if (!removeEmptyColumns(table, this)) {\n                // If there wasn't any empty columns then we still need to check if this wasn't called\n                // because of cleaning empty rows and we only removed one of them.\n                removeEmptyRows(table, this);\n            }\n        });\n    }\n    /**\n     * Removes columns from the given `table`.\n     *\n     * This method re-calculates the table geometry including the `colspan` attribute of table cells overlapping removed columns\n     * and table headings values.\n     *\n     * ```ts\n     * editor.plugins.get( 'TableUtils' ).removeColumns( table, { at: 1, columns: 2 } );\n     * ```\n     *\n     * Executing the above code in the context of the table on the left will transform its structure as presented on the right:\n     *\n     *    0   1   2   3   4                       0   1   2\n     *  ┌───────────────┬───┐                   ┌───────┬───┐\n     *  │ a             │ b │                   │ a     │ b │\n     *  │               ├───┤                   │       ├───┤\n     *  │               │ c │                   │       │ c │\n     *  ├───┬───┬───┬───┼───┤     will give:    ├───┬───┼───┤\n     *  │ d │ e │ f │ g │ h │                   │ d │ g │ h │\n     *  ├───┼───┼───┤   ├───┤                   ├───┤   ├───┤\n     *  │ i │ j │ k │   │ l │                   │ i │   │ l │\n     *  ├───┴───┴───┴───┴───┤                   ├───┴───┴───┤\n     *  │ m                 │                   │ m         │\n     *  └───────────────────┘                   └───────────┘\n     *        ^---- remove from here, `at` = 1, `columns` = 2\n     *\n     * @param options.at The row index at which the removing columns will start.\n     * @param options.columns The number of columns to remove.\n     */\n    removeColumns(table, options) {\n        const model = this.editor.model;\n        const first = options.at;\n        const columnsToRemove = options.columns || 1;\n        const last = options.at + columnsToRemove - 1;\n        model.change(writer => {\n            adjustHeadingColumns(table, { first, last }, writer);\n            const tableColumns = getTableColumnElements(table);\n            for (let removedColumnIndex = last; removedColumnIndex >= first; removedColumnIndex--) {\n                for (const { cell, column, cellWidth } of [...new TableWalker(table)]) {\n                    // If colspaned cell overlaps removed column decrease its span.\n                    if (column <= removedColumnIndex && cellWidth > 1 && column + cellWidth > removedColumnIndex) {\n                        updateNumericAttribute('colspan', cellWidth - 1, cell, writer);\n                    }\n                    else if (column === removedColumnIndex) {\n                        // The cell in removed column has colspan of 1.\n                        writer.remove(cell);\n                    }\n                }\n                // If table has `tableColumn` elements, we need to update it manually.\n                // See https://github.com/ckeditor/ckeditor5/issues/14521#issuecomment-1662102889 for details.\n                if (tableColumns[removedColumnIndex]) {\n                    // If the removed column is the first one then we need to add its width to the next column.\n                    // Otherwise we add it to the previous column.\n                    const adjacentColumn = removedColumnIndex === 0 ? tableColumns[1] : tableColumns[removedColumnIndex - 1];\n                    const removedColumnWidth = parseFloat(tableColumns[removedColumnIndex].getAttribute('columnWidth'));\n                    const adjacentColumnWidth = parseFloat(adjacentColumn.getAttribute('columnWidth'));\n                    writer.remove(tableColumns[removedColumnIndex]);\n                    // Add the removed column width (in %) to the adjacent column.\n                    writer.setAttribute('columnWidth', removedColumnWidth + adjacentColumnWidth + '%', adjacentColumn);\n                }\n            }\n            // Remove empty rows that could appear after removing columns.\n            if (!removeEmptyRows(table, this)) {\n                // If there wasn't any empty rows then we still need to check if this wasn't called\n                // because of cleaning empty columns and we only removed one of them.\n                removeEmptyColumns(table, this);\n            }\n        });\n    }\n    /**\n     * Divides a table cell vertically into several ones.\n     *\n     * The cell will be visually split into more cells by updating colspans of other cells in a column\n     * and inserting cells (columns) after that cell.\n     *\n     * In the table below, if cell \"a\" is split into 3 cells:\n     *\n     *  +---+---+---+\n     *  | a | b | c |\n     *  +---+---+---+\n     *  | d | e | f |\n     *  +---+---+---+\n     *\n     * it will result in the table below:\n     *\n     *  +---+---+---+---+---+\n     *  | a |   |   | b | c |\n     *  +---+---+---+---+---+\n     *  | d         | e | f |\n     *  +---+---+---+---+---+\n     *\n     * So cell \"d\" will get its `colspan` updated to `3` and 2 cells will be added (2 columns will be created).\n     *\n     * Splitting a cell that already has a `colspan` attribute set will distribute the cell `colspan` evenly and the remainder\n     * will be left to the original cell:\n     *\n     *  +---+---+---+\n     *  | a         |\n     *  +---+---+---+\n     *  | b | c | d |\n     *  +---+---+---+\n     *\n     * Splitting cell \"a\" with `colspan=3` into 2 cells will create 1 cell with a `colspan=a` and cell \"a\" that will have `colspan=2`:\n     *\n     *  +---+---+---+\n     *  | a     |   |\n     *  +---+---+---+\n     *  | b | c | d |\n     *  +---+---+---+\n     */\n    splitCellVertically(tableCell, numberOfCells = 2) {\n        const model = this.editor.model;\n        const tableRow = tableCell.parent;\n        const table = tableRow.parent;\n        const rowspan = parseInt(tableCell.getAttribute('rowspan') || '1');\n        const colspan = parseInt(tableCell.getAttribute('colspan') || '1');\n        model.change(writer => {\n            // First check - the cell spans over multiple rows so before doing anything else just split this cell.\n            if (colspan > 1) {\n                // Get spans of new (inserted) cells and span to update of split cell.\n                const { newCellsSpan, updatedSpan } = breakSpanEvenly(colspan, numberOfCells);\n                updateNumericAttribute('colspan', updatedSpan, tableCell, writer);\n                // Each inserted cell will have the same attributes:\n                const newCellsAttributes = {};\n                // Do not store default value in the model.\n                if (newCellsSpan > 1) {\n                    newCellsAttributes.colspan = newCellsSpan;\n                }\n                // Copy rowspan of split cell.\n                if (rowspan > 1) {\n                    newCellsAttributes.rowspan = rowspan;\n                }\n                const cellsToInsert = colspan > numberOfCells ? numberOfCells - 1 : colspan - 1;\n                createCells(cellsToInsert, writer, writer.createPositionAfter(tableCell), newCellsAttributes);\n            }\n            // Second check - the cell has colspan of 1 or we need to create more cells then the currently one spans over.\n            if (colspan < numberOfCells) {\n                const cellsToInsert = numberOfCells - colspan;\n                // First step: expand cells on the same column as split cell.\n                const tableMap = [...new TableWalker(table)];\n                // Get the column index of split cell.\n                const { column: splitCellColumn } = tableMap.find(({ cell }) => cell === tableCell);\n                // Find cells which needs to be expanded vertically - those on the same column or those that spans over split cell's column.\n                const cellsToUpdate = tableMap.filter(({ cell, cellWidth, column }) => {\n                    const isOnSameColumn = cell !== tableCell && column === splitCellColumn;\n                    const spansOverColumn = (column < splitCellColumn && column + cellWidth > splitCellColumn);\n                    return isOnSameColumn || spansOverColumn;\n                });\n                // Expand cells vertically.\n                for (const { cell, cellWidth } of cellsToUpdate) {\n                    writer.setAttribute('colspan', cellWidth + cellsToInsert, cell);\n                }\n                // Second step: create columns after split cell.\n                // Each inserted cell will have the same attributes:\n                const newCellsAttributes = {};\n                // Do not store default value in the model.\n                // Copy rowspan of split cell.\n                if (rowspan > 1) {\n                    newCellsAttributes.rowspan = rowspan;\n                }\n                createCells(cellsToInsert, writer, writer.createPositionAfter(tableCell), newCellsAttributes);\n                const headingColumns = table.getAttribute('headingColumns') || 0;\n                // Update heading section if split cell is in heading section.\n                if (headingColumns > splitCellColumn) {\n                    updateNumericAttribute('headingColumns', headingColumns + cellsToInsert, table, writer);\n                }\n            }\n        });\n    }\n    /**\n     * Divides a table cell horizontally into several ones.\n     *\n     * The cell will be visually split into more cells by updating rowspans of other cells in the row and inserting rows with a single cell\n     * below.\n     *\n     * If in the table below cell \"b\" is split into 3 cells:\n     *\n     *  +---+---+---+\n     *  | a | b | c |\n     *  +---+---+---+\n     *  | d | e | f |\n     *  +---+---+---+\n     *\n     * It will result in the table below:\n     *\n     *  +---+---+---+\n     *  | a | b | c |\n     *  +   +---+   +\n     *  |   |   |   |\n     *  +   +---+   +\n     *  |   |   |   |\n     *  +---+---+---+\n     *  | d | e | f |\n     *  +---+---+---+\n     *\n     * So cells \"a\" and \"b\" will get their `rowspan` updated to `3` and 2 rows with a single cell will be added.\n     *\n     * Splitting a cell that already has a `rowspan` attribute set will distribute the cell `rowspan` evenly and the remainder\n     * will be left to the original cell:\n     *\n     *  +---+---+---+\n     *  | a | b | c |\n     *  +   +---+---+\n     *  |   | d | e |\n     *  +   +---+---+\n     *  |   | f | g |\n     *  +   +---+---+\n     *  |   | h | i |\n     *  +---+---+---+\n     *\n     * Splitting cell \"a\" with `rowspan=4` into 3 cells will create 2 cells with a `rowspan=1` and cell \"a\" will have `rowspan=2`:\n     *\n     *  +---+---+---+\n     *  | a | b | c |\n     *  +   +---+---+\n     *  |   | d | e |\n     *  +---+---+---+\n     *  |   | f | g |\n     *  +---+---+---+\n     *  |   | h | i |\n     *  +---+---+---+\n     */\n    splitCellHorizontally(tableCell, numberOfCells = 2) {\n        const model = this.editor.model;\n        const tableRow = tableCell.parent;\n        const table = tableRow.parent;\n        const splitCellRow = table.getChildIndex(tableRow);\n        const rowspan = parseInt(tableCell.getAttribute('rowspan') || '1');\n        const colspan = parseInt(tableCell.getAttribute('colspan') || '1');\n        model.change(writer => {\n            // First check - the cell spans over multiple rows so before doing anything else just split this cell.\n            if (rowspan > 1) {\n                // Cache table map before updating table.\n                const tableMap = [...new TableWalker(table, {\n                        startRow: splitCellRow,\n                        endRow: splitCellRow + rowspan - 1,\n                        includeAllSlots: true\n                    })];\n                // Get spans of new (inserted) cells and span to update of split cell.\n                const { newCellsSpan, updatedSpan } = breakSpanEvenly(rowspan, numberOfCells);\n                updateNumericAttribute('rowspan', updatedSpan, tableCell, writer);\n                const { column: cellColumn } = tableMap.find(({ cell }) => cell === tableCell);\n                // Each inserted cell will have the same attributes:\n                const newCellsAttributes = {};\n                // Do not store default value in the model.\n                if (newCellsSpan > 1) {\n                    newCellsAttributes.rowspan = newCellsSpan;\n                }\n                // Copy colspan of split cell.\n                if (colspan > 1) {\n                    newCellsAttributes.colspan = colspan;\n                }\n                // Accumulator that stores distance from the last inserted cell span.\n                // It helps with evenly splitting larger cell spans (for example 10 cells collapsing into 3 cells).\n                // We split these cells into 3, 3, 4 cells and we have to call `createCells` only when distance between\n                // these cells is equal or greater than the new cells span size.\n                let distanceFromLastCellSpan = 0;\n                for (const tableSlot of tableMap) {\n                    const { column, row } = tableSlot;\n                    // As both newly created cells and the split cell might have rowspan,\n                    // the insertion of new cells must go to appropriate rows:\n                    //\n                    // 1. It's a row after split cell + it's height.\n                    const isAfterSplitCell = row >= splitCellRow + updatedSpan;\n                    // 2. Is on the same column.\n                    const isOnSameColumn = column === cellColumn;\n                    // Reset distance from the last cell span if we are on the same column and we exceeded the new cells span size.\n                    if (distanceFromLastCellSpan >= newCellsSpan && isOnSameColumn) {\n                        distanceFromLastCellSpan = 0;\n                    }\n                    if (isAfterSplitCell && isOnSameColumn) {\n                        // Create new cells only if the distance from the last cell span is equal or greater than the new cells span.\n                        if (!distanceFromLastCellSpan) {\n                            createCells(1, writer, tableSlot.getPositionBefore(), newCellsAttributes);\n                        }\n                        // Increase the distance from the last cell span.\n                        distanceFromLastCellSpan++;\n                    }\n                }\n            }\n            // Second check - the cell has rowspan of 1 or we need to create more cells than the current cell spans over.\n            if (rowspan < numberOfCells) {\n                // We already split the cell in check one so here we split to the remaining number of cells only.\n                const cellsToInsert = numberOfCells - rowspan;\n                // This check is needed since we need to check if there are any cells from previous rows than spans over this cell's row.\n                const tableMap = [...new TableWalker(table, { startRow: 0, endRow: splitCellRow })];\n                // First step: expand cells.\n                for (const { cell, cellHeight, row } of tableMap) {\n                    // Expand rowspan of cells that are either:\n                    // - on the same row as current cell,\n                    // - or are below split cell row and overlaps that row.\n                    if (cell !== tableCell && row + cellHeight > splitCellRow) {\n                        const rowspanToSet = cellHeight + cellsToInsert;\n                        writer.setAttribute('rowspan', rowspanToSet, cell);\n                    }\n                }\n                // Second step: create rows with single cell below split cell.\n                const newCellsAttributes = {};\n                // Copy colspan of split cell.\n                if (colspan > 1) {\n                    newCellsAttributes.colspan = colspan;\n                }\n                createEmptyRows(writer, table, splitCellRow + 1, cellsToInsert, 1, newCellsAttributes);\n                // Update heading section if split cell is in heading section.\n                const headingRows = table.getAttribute('headingRows') || 0;\n                if (headingRows > splitCellRow) {\n                    updateNumericAttribute('headingRows', headingRows + cellsToInsert, table, writer);\n                }\n            }\n        });\n    }\n    /**\n     * Returns the number of columns for a given table.\n     *\n     * ```ts\n     * editor.plugins.get( 'TableUtils' ).getColumns( table );\n     * ```\n     *\n     * @param table The table to analyze.\n     */\n    getColumns(table) {\n        // Analyze first row only as all the rows should have the same width.\n        // Using the first row without checking if it's a tableRow because we expect\n        // that table will have only tableRow model elements at the beginning.\n        const row = table.getChild(0);\n        return [...row.getChildren()]\n            // $marker elements can also be children of a row too (when TrackChanges is on). Don't include them in the count.\n            .filter(node => node.is('element', 'tableCell'))\n            .reduce((columns, row) => {\n            const columnWidth = parseInt(row.getAttribute('colspan') || '1');\n            return columns + columnWidth;\n        }, 0);\n    }\n    /**\n     * Returns the number of rows for a given table. Any other element present in the table model is omitted.\n     *\n     * ```ts\n     * editor.plugins.get( 'TableUtils' ).getRows( table );\n     * ```\n     *\n     * @param table The table to analyze.\n     */\n    getRows(table) {\n        // Rowspan not included due to #6427.\n        return Array.from(table.getChildren())\n            .reduce((rowCount, child) => child.is('element', 'tableRow') ? rowCount + 1 : rowCount, 0);\n    }\n    /**\n     * Creates an instance of the table walker.\n     *\n     * The table walker iterates internally by traversing the table from row index = 0 and column index = 0.\n     * It walks row by row and column by column in order to output values defined in the options.\n     * By default it will output only the locations that are occupied by a cell. To include also spanned rows and columns,\n     * pass the `includeAllSlots` option.\n     *\n     * @internal\n     * @param table A table over which the walker iterates.\n     * @param options An object with configuration.\n     */\n    createTableWalker(table, options = {}) {\n        return new TableWalker(table, options);\n    }\n    /**\n     * Returns all model table cells that are fully selected (from the outside)\n     * within the provided model selection's ranges.\n     *\n     * To obtain the cells selected from the inside, use\n     * {@link #getTableCellsContainingSelection}.\n     */\n    getSelectedTableCells(selection) {\n        const cells = [];\n        for (const range of this.sortRanges(selection.getRanges())) {\n            const element = range.getContainedElement();\n            if (element && element.is('element', 'tableCell')) {\n                cells.push(element);\n            }\n        }\n        return cells;\n    }\n    /**\n     * Returns all model table cells that the provided model selection's ranges\n     * {@link module:engine/model/range~Range#start} inside.\n     *\n     * To obtain the cells selected from the outside, use\n     * {@link #getSelectedTableCells}.\n     */\n    getTableCellsContainingSelection(selection) {\n        const cells = [];\n        for (const range of selection.getRanges()) {\n            const cellWithSelection = range.start.findAncestor('tableCell');\n            if (cellWithSelection) {\n                cells.push(cellWithSelection);\n            }\n        }\n        return cells;\n    }\n    /**\n     * Returns all model table cells that are either completely selected\n     * by selection ranges or host selection range\n     * {@link module:engine/model/range~Range#start start positions} inside them.\n     *\n     * Combines {@link #getTableCellsContainingSelection} and\n     * {@link #getSelectedTableCells}.\n     */\n    getSelectionAffectedTableCells(selection) {\n        const selectedCells = this.getSelectedTableCells(selection);\n        if (selectedCells.length) {\n            return selectedCells;\n        }\n        return this.getTableCellsContainingSelection(selection);\n    }\n    /**\n     * Returns an object with the `first` and `last` row index contained in the given `tableCells`.\n     *\n     * ```ts\n     * const selectedTableCells = getSelectedTableCells( editor.model.document.selection );\n     *\n     * const { first, last } = getRowIndexes( selectedTableCells );\n     *\n     * console.log( `Selected rows: ${ first } to ${ last }` );\n     * ```\n     *\n     * @returns Returns an object with the `first` and `last` table row indexes.\n     */\n    getRowIndexes(tableCells) {\n        const indexes = tableCells.map(cell => cell.parent.index);\n        return this._getFirstLastIndexesObject(indexes);\n    }\n    /**\n     * Returns an object with the `first` and `last` column index contained in the given `tableCells`.\n     *\n     * ```ts\n     * const selectedTableCells = getSelectedTableCells( editor.model.document.selection );\n     *\n     * const { first, last } = getColumnIndexes( selectedTableCells );\n     *\n     * console.log( `Selected columns: ${ first } to ${ last }` );\n     * ```\n     *\n     * @returns Returns an object with the `first` and `last` table column indexes.\n     */\n    getColumnIndexes(tableCells) {\n        const table = tableCells[0].findAncestor('table');\n        const tableMap = [...new TableWalker(table)];\n        const indexes = tableMap\n            .filter(entry => tableCells.includes(entry.cell))\n            .map(entry => entry.column);\n        return this._getFirstLastIndexesObject(indexes);\n    }\n    /**\n     * Checks if the selection contains cells that do not exceed rectangular selection.\n     *\n     * In a table below:\n     *\n     *  ┌───┬───┬───┬───┐\n     *  │ a │ b │ c │ d │\n     *  ├───┴───┼───┤   │\n     *  │ e     │ f │   │\n     *  │       ├───┼───┤\n     *  │       │ g │ h │\n     *  └───────┴───┴───┘\n     *\n     * Valid selections are these which create a solid rectangle (without gaps), such as:\n     *   - a, b (two horizontal cells)\n     *   - c, f (two vertical cells)\n     *   - a, b, e (cell \"e\" spans over four cells)\n     *   - c, d, f (cell d spans over a cell in the row below)\n     *\n     * While an invalid selection would be:\n     *   - a, c (the unselected cell \"b\" creates a gap)\n     *   - f, g, h (cell \"d\" spans over a cell from the row of \"f\" cell - thus creates a gap)\n     */\n    isSelectionRectangular(selectedTableCells) {\n        if (selectedTableCells.length < 2 || !this._areCellInTheSameTableSection(selectedTableCells)) {\n            return false;\n        }\n        // A valid selection is a fully occupied rectangle composed of table cells.\n        // Below we will calculate the area of a selected table cells and the area of valid selection.\n        // The area of a valid selection is defined by top-left and bottom-right cells.\n        const rows = new Set();\n        const columns = new Set();\n        let areaOfSelectedCells = 0;\n        for (const tableCell of selectedTableCells) {\n            const { row, column } = this.getCellLocation(tableCell);\n            const rowspan = parseInt(tableCell.getAttribute('rowspan')) || 1;\n            const colspan = parseInt(tableCell.getAttribute('colspan')) || 1;\n            // Record row & column indexes of current cell.\n            rows.add(row);\n            columns.add(column);\n            // For cells that spans over multiple rows add also the last row that this cell spans over.\n            if (rowspan > 1) {\n                rows.add(row + rowspan - 1);\n            }\n            // For cells that spans over multiple columns add also the last column that this cell spans over.\n            if (colspan > 1) {\n                columns.add(column + colspan - 1);\n            }\n            areaOfSelectedCells += (rowspan * colspan);\n        }\n        // We can only merge table cells that are in adjacent rows...\n        const areaOfValidSelection = getBiggestRectangleArea(rows, columns);\n        return areaOfValidSelection == areaOfSelectedCells;\n    }\n    /**\n     * Returns array of sorted ranges.\n     */\n    sortRanges(ranges) {\n        return Array.from(ranges).sort(compareRangeOrder);\n    }\n    /**\n     * Helper method to get an object with `first` and `last` indexes from an unsorted array of indexes.\n     */\n    _getFirstLastIndexesObject(indexes) {\n        const allIndexesSorted = indexes.sort((indexA, indexB) => indexA - indexB);\n        const first = allIndexesSorted[0];\n        const last = allIndexesSorted[allIndexesSorted.length - 1];\n        return { first, last };\n    }\n    /**\n     * Checks if the selection does not mix a header (column or row) with other cells.\n     *\n     * For instance, in the table below valid selections consist of cells with the same letter only.\n     * So, a-a (same heading row and column) or d-d (body cells) are valid while c-d or a-b are not.\n     *\n     * header columns\n     *    ↓   ↓\n     *  ┌───┬───┬───┬───┐\n     *  │ a │ a │ b │ b │  ← header row\n     *  ├───┼───┼───┼───┤\n     *  │ c │ c │ d │ d │\n     *  ├───┼───┼───┼───┤\n     *  │ c │ c │ d │ d │\n     *  └───┴───┴───┴───┘\n     */\n    _areCellInTheSameTableSection(tableCells) {\n        const table = tableCells[0].findAncestor('table');\n        const rowIndexes = this.getRowIndexes(tableCells);\n        const headingRows = parseInt(table.getAttribute('headingRows')) || 0;\n        // Calculating row indexes is a bit cheaper so if this check fails we can't merge.\n        if (!this._areIndexesInSameSection(rowIndexes, headingRows)) {\n            return false;\n        }\n        const columnIndexes = this.getColumnIndexes(tableCells);\n        const headingColumns = parseInt(table.getAttribute('headingColumns')) || 0;\n        // Similarly cells must be in same column section.\n        return this._areIndexesInSameSection(columnIndexes, headingColumns);\n    }\n    /**\n     * Unified check if table rows/columns indexes are in the same heading/body section.\n     */\n    _areIndexesInSameSection({ first, last }, headingSectionSize) {\n        const firstCellIsInHeading = first < headingSectionSize;\n        const lastCellIsInHeading = last < headingSectionSize;\n        return firstCellIsInHeading === lastCellIsInHeading;\n    }\n}\n/**\n * Creates empty rows at the given index in an existing table.\n *\n * @param insertAt The row index of row insertion.\n * @param rows The number of rows to create.\n * @param tableCellToInsert The number of cells to insert in each row.\n */\nfunction createEmptyRows(writer, table, insertAt, rows, tableCellToInsert, attributes = {}) {\n    for (let i = 0; i < rows; i++) {\n        const tableRow = writer.createElement('tableRow');\n        writer.insert(tableRow, table, insertAt);\n        createCells(tableCellToInsert, writer, writer.createPositionAt(tableRow, 'end'), attributes);\n    }\n}\n/**\n * Creates cells at a given position.\n *\n * @param cells The number of cells to create\n */\nfunction createCells(cells, writer, insertPosition, attributes = {}) {\n    for (let i = 0; i < cells; i++) {\n        createEmptyTableCell(writer, insertPosition, attributes);\n    }\n}\n/**\n * Evenly distributes the span of a cell to a number of provided cells.\n * The resulting spans will always be integer values.\n *\n * For instance breaking a span of 7 into 3 cells will return:\n *\n * ```ts\n * { newCellsSpan: 2, updatedSpan: 3 }\n * ```\n *\n * as two cells will have a span of 2 and the remainder will go the first cell so its span will change to 3.\n *\n * @param span The span value do break.\n * @param numberOfCells The number of resulting spans.\n */\nfunction breakSpanEvenly(span, numberOfCells) {\n    if (span < numberOfCells) {\n        return { newCellsSpan: 1, updatedSpan: 1 };\n    }\n    const newCellsSpan = Math.floor(span / numberOfCells);\n    const updatedSpan = (span - newCellsSpan * numberOfCells) + newCellsSpan;\n    return { newCellsSpan, updatedSpan };\n}\n/**\n * Updates heading columns attribute if removing a row from head section.\n */\nfunction adjustHeadingColumns(table, removedColumnIndexes, writer) {\n    const headingColumns = table.getAttribute('headingColumns') || 0;\n    if (headingColumns && removedColumnIndexes.first < headingColumns) {\n        const headingsRemoved = Math.min(headingColumns - 1 /* Other numbers are 0-based */, removedColumnIndexes.last) -\n            removedColumnIndexes.first + 1;\n        writer.setAttribute('headingColumns', headingColumns - headingsRemoved, table);\n    }\n}\n/**\n * Calculates a new heading rows value for removing rows from heading section.\n */\nfunction updateHeadingRows(table, { first, last }, writer) {\n    const headingRows = table.getAttribute('headingRows') || 0;\n    if (first < headingRows) {\n        const newRows = last < headingRows ? headingRows - (last - first + 1) : first;\n        updateNumericAttribute('headingRows', newRows, table, writer, 0);\n    }\n}\n/**\n * Finds cells that will be:\n * - trimmed - Cells that are \"above\" removed rows sections and overlap the removed section - their rowspan must be trimmed.\n * - moved - Cells from removed rows section might stick out of. These cells are moved to the next row after a removed section.\n *\n * Sample table with overlapping & sticking out cells:\n *\n *      +----+----+----+----+----+\n *      | 00 | 01 | 02 | 03 | 04 |\n *      +----+    +    +    +    +\n *      | 10 |    |    |    |    |\n *      +----+----+    +    +    +\n *      | 20 | 21 |    |    |    | <-- removed row\n *      +    +    +----+    +    +\n *      |    |    | 32 |    |    | <-- removed row\n *      +----+    +    +----+    +\n *      | 40 |    |    | 43 |    |\n *      +----+----+----+----+----+\n *\n * In a table above:\n * - cells to trim: '02', '03' & '04'.\n * - cells to move: '21' & '32'.\n */\nfunction getCellsToMoveAndTrimOnRemoveRow(table, { first, last }) {\n    const cellsToMove = new Map();\n    const cellsToTrim = [];\n    for (const { row, column, cellHeight, cell } of new TableWalker(table, { endRow: last })) {\n        const lastRowOfCell = row + cellHeight - 1;\n        const isCellStickingOutFromRemovedRows = row >= first && row <= last && lastRowOfCell > last;\n        if (isCellStickingOutFromRemovedRows) {\n            const rowspanInRemovedSection = last - row + 1;\n            const rowSpanToSet = cellHeight - rowspanInRemovedSection;\n            cellsToMove.set(column, {\n                cell,\n                rowspan: rowSpanToSet\n            });\n        }\n        const isCellOverlappingRemovedRows = row < first && lastRowOfCell >= first;\n        if (isCellOverlappingRemovedRows) {\n            let rowspanAdjustment;\n            // Cell fully covers removed section - trim it by removed rows count.\n            if (lastRowOfCell >= last) {\n                rowspanAdjustment = last - first + 1;\n            }\n            // Cell partially overlaps removed section - calculate cell's span that is in removed section.\n            else {\n                rowspanAdjustment = lastRowOfCell - first + 1;\n            }\n            cellsToTrim.push({\n                cell,\n                rowspan: cellHeight - rowspanAdjustment\n            });\n        }\n    }\n    return { cellsToMove, cellsToTrim };\n}\nfunction moveCellsToRow(table, targetRowIndex, cellsToMove, writer) {\n    const tableWalker = new TableWalker(table, {\n        includeAllSlots: true,\n        row: targetRowIndex\n    });\n    const tableRowMap = [...tableWalker];\n    const row = table.getChild(targetRowIndex);\n    let previousCell;\n    for (const { column, cell, isAnchor } of tableRowMap) {\n        if (cellsToMove.has(column)) {\n            const { cell: cellToMove, rowspan } = cellsToMove.get(column);\n            const targetPosition = previousCell ?\n                writer.createPositionAfter(previousCell) :\n                writer.createPositionAt(row, 0);\n            writer.move(writer.createRangeOn(cellToMove), targetPosition);\n            updateNumericAttribute('rowspan', rowspan, cellToMove, writer);\n            previousCell = cellToMove;\n        }\n        else if (isAnchor) {\n            // If cell is spanned then `cell` holds reference to overlapping cell. See ckeditor/ckeditor5#6502.\n            previousCell = cell;\n        }\n    }\n}\nfunction compareRangeOrder(rangeA, rangeB) {\n    // Since table cell ranges are disjoint, it's enough to check their start positions.\n    const posA = rangeA.start;\n    const posB = rangeB.start;\n    // Checking for equal position (returning 0) is not needed because this would be either:\n    // a. Intersecting range (not allowed by model)\n    // b. Collapsed range on the same position (allowed by model but should not happen).\n    return posA.isBefore(posB) ? -1 : 1;\n}\n/**\n * Calculates the area of a maximum rectangle that can span over the provided row & column indexes.\n */\nfunction getBiggestRectangleArea(rows, columns) {\n    const rowsIndexes = Array.from(rows.values());\n    const columnIndexes = Array.from(columns.values());\n    const lastRow = Math.max(...rowsIndexes);\n    const firstRow = Math.min(...rowsIndexes);\n    const lastColumn = Math.max(...columnIndexes);\n    const firstColumn = Math.min(...columnIndexes);\n    return (lastRow - firstRow + 1) * (lastColumn - firstColumn + 1);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport TableUtils from '../tableutils.js';\nimport { updateNumericAttribute } from '../utils/common.js';\nimport { removeEmptyRowsColumns } from '../utils/structure.js';\n/**\n * The merge cells command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'mergeTableCells'` editor command.\n *\n * For example, to merge selected table cells:\n *\n * ```ts\n * editor.execute( 'mergeTableCells' );\n * ```\n */\nexport default class MergeCellsCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const selectedTableCells = tableUtils.getSelectedTableCells(this.editor.model.document.selection);\n        this.isEnabled = tableUtils.isSelectionRectangular(selectedTableCells);\n    }\n    /**\n     * Executes the command.\n     *\n     * @fires execute\n     */\n    execute() {\n        const model = this.editor.model;\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        model.change(writer => {\n            const selectedTableCells = tableUtils.getSelectedTableCells(model.document.selection);\n            // All cells will be merged into the first one.\n            const firstTableCell = selectedTableCells.shift();\n            // Update target cell dimensions.\n            const { mergeWidth, mergeHeight } = getMergeDimensions(firstTableCell, selectedTableCells, tableUtils);\n            updateNumericAttribute('colspan', mergeWidth, firstTableCell, writer);\n            updateNumericAttribute('rowspan', mergeHeight, firstTableCell, writer);\n            for (const tableCell of selectedTableCells) {\n                mergeTableCells(tableCell, firstTableCell, writer);\n            }\n            const table = firstTableCell.findAncestor('table');\n            // Remove rows and columns that become empty (have no anchored cells).\n            removeEmptyRowsColumns(table, tableUtils);\n            writer.setSelection(firstTableCell, 'in');\n        });\n    }\n}\n/**\n *  Merges two table cells. It will ensure that after merging cells with empty paragraphs the resulting table cell will only have one\n * paragraph. If one of the merged table cells is empty, the merged table cell will have contents of the non-empty table cell.\n * If both are empty, the merged table cell will have only one empty paragraph.\n */\nfunction mergeTableCells(cellBeingMerged, targetCell, writer) {\n    if (!isEmpty(cellBeingMerged)) {\n        if (isEmpty(targetCell)) {\n            writer.remove(writer.createRangeIn(targetCell));\n        }\n        writer.move(writer.createRangeIn(cellBeingMerged), writer.createPositionAt(targetCell, 'end'));\n    }\n    // Remove merged table cell.\n    writer.remove(cellBeingMerged);\n}\n/**\n * Checks if the passed table cell contains an empty paragraph.\n */\nfunction isEmpty(tableCell) {\n    const firstTableChild = tableCell.getChild(0);\n    return tableCell.childCount == 1 && firstTableChild.is('element', 'paragraph') && firstTableChild.isEmpty;\n}\nfunction getMergeDimensions(firstTableCell, selectedTableCells, tableUtils) {\n    let maxWidthOffset = 0;\n    let maxHeightOffset = 0;\n    for (const tableCell of selectedTableCells) {\n        const { row, column } = tableUtils.getCellLocation(tableCell);\n        maxWidthOffset = getMaxOffset(tableCell, column, maxWidthOffset, 'colspan');\n        maxHeightOffset = getMaxOffset(tableCell, row, maxHeightOffset, 'rowspan');\n    }\n    // Update table cell span attribute and merge set selection on a merged contents.\n    const { row: firstCellRow, column: firstCellColumn } = tableUtils.getCellLocation(firstTableCell);\n    const mergeWidth = maxWidthOffset - firstCellColumn;\n    const mergeHeight = maxHeightOffset - firstCellRow;\n    return { mergeWidth, mergeHeight };\n}\nfunction getMaxOffset(tableCell, start, currentMaxOffset, which) {\n    const dimensionValue = parseInt(tableCell.getAttribute(which) || '1');\n    return Math.max(currentMaxOffset, start + dimensionValue);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/selectrowcommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The select row command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'selectTableRow'` editor command.\n *\n * To select the rows containing the selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'selectTableRow' );\n * ```\n */\nexport default class SelectRowCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        // It does not affect data so should be enabled in read-only mode.\n        this.affectsData = false;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(this.editor.model.document.selection);\n        this.isEnabled = selectedCells.length > 0;\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const model = this.editor.model;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const referenceCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const rowIndexes = tableUtils.getRowIndexes(referenceCells);\n        const table = referenceCells[0].findAncestor('table');\n        const rangesToSelect = [];\n        for (let rowIndex = rowIndexes.first; rowIndex <= rowIndexes.last; rowIndex++) {\n            for (const cell of table.getChild(rowIndex).getChildren()) {\n                rangesToSelect.push(model.createRangeOn(cell));\n            }\n        }\n        model.change(writer => {\n            writer.setSelection(rangesToSelect);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/commands/selectcolumncommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport TableWalker from '../tablewalker.js';\n/**\n * The select column command.\n *\n * The command is registered by {@link module:table/tableediting~TableEditing} as the `'selectTableColumn'` editor command.\n *\n * To select the columns containing the selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'selectTableColumn' );\n * ```\n */\nexport default class SelectColumnCommand extends Command {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        // It does not affect data so should be enabled in read-only mode.\n        this.affectsData = false;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const selectedCells = tableUtils.getSelectionAffectedTableCells(this.editor.model.document.selection);\n        this.isEnabled = selectedCells.length > 0;\n    }\n    /**\n     * @inheritDoc\n     */\n    execute() {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const model = this.editor.model;\n        const referenceCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const firstCell = referenceCells[0];\n        const lastCell = referenceCells.pop();\n        const table = firstCell.findAncestor('table');\n        const startLocation = tableUtils.getCellLocation(firstCell);\n        const endLocation = tableUtils.getCellLocation(lastCell);\n        const startColumn = Math.min(startLocation.column, endLocation.column);\n        const endColumn = Math.max(startLocation.column, endLocation.column);\n        const rangesToSelect = [];\n        for (const cellInfo of new TableWalker(table, { startColumn, endColumn })) {\n            rangesToSelect.push(model.createRangeOn(cellInfo.cell));\n        }\n        model.change(writer => {\n            writer.setSelection(rangesToSelect);\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableWalker from './../tablewalker.js';\nimport { createEmptyTableCell, updateNumericAttribute } from '../utils/common.js';\n/**\n * Injects a table layout post-fixer into the model.\n *\n * The role of the table layout post-fixer is to ensure that the table rows have the correct structure\n * after a {@link module:engine/model/model~Model#change `change()`} block was executed.\n *\n * The correct structure means that:\n *\n * * All table rows have the same size.\n * * None of the table cells extend vertically beyond their section (either header or body).\n * * A table cell has always at least one element as a child.\n *\n * If the table structure is not correct, the post-fixer will automatically correct it in two steps:\n *\n * 1. It will clip table cells that extend beyond their section.\n * 2. It will add empty table cells to the rows that are narrower than the widest table row.\n *\n * ## Clipping overlapping table cells\n *\n * Such situation may occur when pasting a table (or a part of a table) to the editor from external sources.\n *\n * For example, see the following table which has a cell (FOO) with the rowspan attribute (2):\n *\n * ```xml\n * <table headingRows=\"1\">\n *   <tableRow>\n *     <tableCell rowspan=\"2\"><paragraph>FOO</paragraph></tableCell>\n *     <tableCell colspan=\"2\"><paragraph>BAR</paragraph></tableCell>\n *   </tableRow>\n *   <tableRow>\n *     <tableCell><paragraph>BAZ</paragraph></tableCell>\n *     <tableCell><paragraph>XYZ</paragraph></tableCell>\n *   </tableRow>\n * </table>\n * ```\n *\n * It will be rendered in the view as:\n *\n * ```xml\n * <table>\n *   <thead>\n *     <tr>\n *       <td rowspan=\"2\">FOO</td>\n *       <td colspan=\"2\">BAR</td>\n *     </tr>\n *   </thead>\n *   <tbody>\n *     <tr>\n *       <td>BAZ</td>\n *       <td>XYZ</td>\n *     </tr>\n *   </tbody>\n * </table>\n * ```\n *\n * In the above example the table will be rendered as a table with two rows: one in the header and second one in the body.\n * The table cell (FOO) cannot span over multiple rows as it would extend from the header to the body section.\n * The `rowspan` attribute must be changed to (1). The value (1) is the default value of the `rowspan` attribute\n * so the `rowspan` attribute will be removed from the model.\n *\n * The table cell with BAZ in the content will be in the first column of the table.\n *\n * ## Adding missing table cells\n *\n * The table post-fixer will insert empty table cells to equalize table row sizes (the number of columns).\n * The size of a table row is calculated by counting column spans of table cells, both horizontal (from the same row) and\n * vertical (from the rows above).\n *\n * In the above example, the table row in the body section of the table is narrower then the row from the header: it has two cells\n * with the default colspan (1). The header row has one cell with colspan (1) and the second with colspan (2).\n * The table cell (FOO) does not extend beyond the head section (and as such will be fixed in the first step of this post-fixer).\n * The post-fixer will add a missing table cell to the row in the body section of the table.\n *\n * The table from the above example will be fixed and rendered to the view as below:\n *\n * ```xml\n * <table>\n *   <thead>\n *     <tr>\n *       <td rowspan=\"2\">FOO</td>\n *       <td colspan=\"2\">BAR</td>\n *     </tr>\n *   </thead>\n *   <tbody>\n *     <tr>\n *       <td>BAZ</td>\n *       <td>XYZ</td>\n *     </tr>\n *   </tbody>\n * </table>\n * ```\n *\n * ## Collaboration and undo - Expectations vs post-fixer results\n *\n * The table post-fixer only ensures proper structure without a deeper analysis of the nature of the change. As such, it might lead\n * to a structure which was not intended by the user. In particular, it will also fix undo steps (in conjunction with collaboration)\n * in which the editor content might not return to the original state.\n *\n * This will usually happen when one or more users change the size of the table.\n *\n * As an example see the table below:\n *\n * ```xml\n * <table>\n *   <tbody>\n *     <tr>\n *       <td>11</td>\n *       <td>12</td>\n *     </tr>\n *     <tr>\n *       <td>21</td>\n *       <td>22</td>\n *     </tr>\n *   </tbody>\n * </table>\n * ```\n *\n * and the user actions:\n *\n * 1. Both users have a table with two rows and two columns.\n * 2. User A adds a column at the end of the table. This will insert empty table cells to two rows.\n * 3. User B adds a row at the end of the table. This will insert a row with two empty table cells.\n * 4. Both users will have a table as below:\n *\n * ```xml\n * <table>\n *   <tbody>\n *     <tr>\n *       <td>11</td>\n *       <td>12</td>\n *       <td>(empty, inserted by A)</td>\n *     </tr>\n *     <tr>\n *       <td>21</td>\n *       <td>22</td>\n *       <td>(empty, inserted by A)</td>\n *     </tr>\n *     <tr>\n *       <td>(empty, inserted by B)</td>\n *       <td>(empty, inserted by B)</td>\n *     </tr>\n *   </tbody>\n * </table>\n * ```\n *\n * The last row is shorter then others so the table post-fixer will add an empty row to the last row:\n *\n * ```xml\n * <table>\n *   <tbody>\n *     <tr>\n *       <td>11</td>\n *       <td>12</td>\n *       <td>(empty, inserted by A)</td>\n *     </tr>\n *     <tr>\n *       <td>21</td>\n *       <td>22</td>\n *       <td>(empty, inserted by A)</td>\n *     </tr>\n *     <tr>\n *       <td>(empty, inserted by B)</td>\n *       <td>(empty, inserted by B)</td>\n *       <td>(empty, inserted by the post-fixer)</td>\n *     </tr>\n *   </tbody>\n * </table>\n * ```\n *\n * Unfortunately undo does not know the nature of the changes and depending on which user applies the post-fixer changes, undoing them\n * might lead to a broken table. If User B undoes inserting the column to the table, the undo engine will undo only the operations of\n * inserting empty cells to rows from the initial table state (row 1 and 2) but the cell in the post-fixed row will remain:\n *\n * ```xml\n * <table>\n *   <tbody>\n *     <tr>\n *       <td>11</td>\n *       <td>12</td>\n *     </tr>\n *     <tr>\n *       <td>21</td>\n *       <td>22</td>\n *     </tr>\n *     <tr>\n *       <td>(empty, inserted by B)</td>\n *       <td>(empty, inserted by B)</td>\n *       <td>(empty, inserted by a post-fixer)</td>\n *     </tr>\n *   </tbody>\n * </table>\n * ```\n *\n * After undo, the table post-fixer will detect that two rows are shorter than others and will fix the table to:\n *\n * ```xml\n * <table>\n *   <tbody>\n *     <tr>\n *       <td>11</td>\n *       <td>12</td>\n *       <td>(empty, inserted by a post-fixer after undo)</td>\n *     </tr>\n *     <tr>\n *       <td>21</td>\n *       <td>22</td>\n *       <td>(empty, inserted by a post-fixer after undo)</td>\n *     </tr>\n *     <tr>\n *       <td>(empty, inserted by B)</td>\n *       <td>(empty, inserted by B)</td>\n *       <td>(empty, inserted by a post-fixer)</td>\n *     </tr>\n *   </tbody>\n * </table>\n * ```\n */\nexport default function injectTableLayoutPostFixer(model) {\n    model.document.registerPostFixer(writer => tableLayoutPostFixer(writer, model));\n}\n/**\n * The table layout post-fixer.\n */\nfunction tableLayoutPostFixer(writer, model) {\n    const changes = model.document.differ.getChanges();\n    let wasFixed = false;\n    // Do not analyze the same table more then once - may happen for multiple changes in the same table.\n    const analyzedTables = new Set();\n    for (const entry of changes) {\n        let table = null;\n        if (entry.type == 'insert' && entry.name == 'table') {\n            table = entry.position.nodeAfter;\n        }\n        // Fix table on adding/removing table cells and rows.\n        if ((entry.type == 'insert' || entry.type == 'remove') && (entry.name == 'tableRow' || entry.name == 'tableCell')) {\n            table = entry.position.findAncestor('table');\n        }\n        // Fix table on any table's attribute change - including attributes of table cells.\n        if (isTableAttributeEntry(entry)) {\n            table = entry.range.start.findAncestor('table');\n        }\n        if (table && !analyzedTables.has(table)) {\n            // Step 1: correct rowspans of table cells if necessary.\n            // The wasFixed flag should be true if any of tables in batch was fixed - might be more then one.\n            wasFixed = fixTableCellsRowspan(table, writer) || wasFixed;\n            // Step 2: fix table rows sizes.\n            wasFixed = fixTableRowsSizes(table, writer) || wasFixed;\n            analyzedTables.add(table);\n        }\n    }\n    return wasFixed;\n}\n/**\n * Fixes the invalid value of the `rowspan` attribute because a table cell cannot vertically extend beyond the table section it belongs to.\n *\n * @returns Returns `true` if the table was fixed.\n */\nfunction fixTableCellsRowspan(table, writer) {\n    let wasFixed = false;\n    const cellsToTrim = findCellsToTrim(table);\n    if (cellsToTrim.length) {\n        // @if CK_DEBUG_TABLE // console.log( `Post-fixing table: trimming cells row-spans (${ cellsToTrim.length }).` );\n        wasFixed = true;\n        for (const data of cellsToTrim) {\n            updateNumericAttribute('rowspan', data.rowspan, data.cell, writer, 1);\n        }\n    }\n    return wasFixed;\n}\n/**\n * Makes all table rows in a table the same size.\n *\n * @returns Returns `true` if the table was fixed.\n */\nfunction fixTableRowsSizes(table, writer) {\n    let wasFixed = false;\n    const childrenLengths = getChildrenLengths(table);\n    const rowsToRemove = [];\n    // Find empty rows.\n    for (const [rowIndex, size] of childrenLengths.entries()) {\n        // Ignore all non-row models.\n        if (!size && table.getChild(rowIndex).is('element', 'tableRow')) {\n            rowsToRemove.push(rowIndex);\n        }\n    }\n    // Remove empty rows.\n    if (rowsToRemove.length) {\n        // @if CK_DEBUG_TABLE // console.log( `Post-fixing table: remove empty rows (${ rowsToRemove.length }).` );\n        wasFixed = true;\n        for (const rowIndex of rowsToRemove.reverse()) {\n            writer.remove(table.getChild(rowIndex));\n            childrenLengths.splice(rowIndex, 1);\n        }\n    }\n    // Filter out everything that's not a table row.\n    const rowsLengths = childrenLengths.filter((row, rowIndex) => table.getChild(rowIndex).is('element', 'tableRow'));\n    // Verify if all the rows have the same number of columns.\n    const tableSize = rowsLengths[0];\n    const isValid = rowsLengths.every(length => length === tableSize);\n    if (!isValid) {\n        // @if CK_DEBUG_TABLE // console.log( 'Post-fixing table: adding missing cells.' );\n        // Find the maximum number of columns.\n        const maxColumns = rowsLengths.reduce((prev, current) => current > prev ? current : prev, 0);\n        for (const [rowIndex, size] of rowsLengths.entries()) {\n            const columnsToInsert = maxColumns - size;\n            if (columnsToInsert) {\n                for (let i = 0; i < columnsToInsert; i++) {\n                    createEmptyTableCell(writer, writer.createPositionAt(table.getChild(rowIndex), 'end'));\n                }\n                wasFixed = true;\n            }\n        }\n    }\n    return wasFixed;\n}\n/**\n * Searches for table cells that extend beyond the table section to which they belong to. It will return an array of objects\n * that stores table cells to be trimmed and the correct value of the `rowspan` attribute to set.\n */\nfunction findCellsToTrim(table) {\n    const headingRows = parseInt(table.getAttribute('headingRows') || '0');\n    const maxRows = Array.from(table.getChildren())\n        .reduce((count, row) => row.is('element', 'tableRow') ? count + 1 : count, 0);\n    const cellsToTrim = [];\n    for (const { row, cell, cellHeight } of new TableWalker(table)) {\n        // Skip cells that do not expand over its row.\n        if (cellHeight < 2) {\n            continue;\n        }\n        const isInHeader = row < headingRows;\n        // Row limit is either end of header section or whole table as table body is after the header.\n        const rowLimit = isInHeader ? headingRows : maxRows;\n        // If table cell expands over its limit reduce it height to proper value.\n        if (row + cellHeight > rowLimit) {\n            const newRowspan = rowLimit - row;\n            cellsToTrim.push({ cell, rowspan: newRowspan });\n        }\n    }\n    return cellsToTrim;\n}\n/**\n * Returns an array with lengths of rows assigned to the corresponding row index.\n */\nfunction getChildrenLengths(table) {\n    // TableWalker will not provide items for the empty rows, we need to pre-fill this array.\n    const lengths = new Array(table.childCount).fill(0);\n    for (const { rowIndex } of new TableWalker(table, { includeAllSlots: true })) {\n        lengths[rowIndex]++;\n    }\n    return lengths;\n}\n/**\n * Checks if the differ entry for an attribute change is one of the table's attributes.\n */\nfunction isTableAttributeEntry(entry) {\n    if (entry.type !== 'attribute') {\n        return false;\n    }\n    const key = entry.attributeKey;\n    return key === 'headingRows' || key === 'colspan' || key === 'rowspan';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Injects a table cell post-fixer into the model which inserts a `paragraph` element into empty table cells.\n *\n * A table cell must contain at least one block element as a child. An empty table cell will have an empty `paragraph` as a child.\n *\n * ```xml\n * <table>\n *   <tableRow>\n *      <tableCell></tableCell>\n *   </tableRow>\n * </table>\n * ```\n *\n * Will be fixed to:\n *\n * ```xml\n * <table>\n *   <tableRow>\n *      <tableCell><paragraph></paragraph></tableCell>\n *   </tableRow>\n * </table>\n * ```\n */\nexport default function injectTableCellParagraphPostFixer(model) {\n    model.document.registerPostFixer(writer => tableCellContentsPostFixer(writer, model));\n}\n/**\n * The table cell contents post-fixer.\n */\nfunction tableCellContentsPostFixer(writer, model) {\n    const changes = model.document.differ.getChanges();\n    let wasFixed = false;\n    for (const entry of changes) {\n        if (entry.type == 'insert' && entry.name == 'table') {\n            wasFixed = fixTable(entry.position.nodeAfter, writer) || wasFixed;\n        }\n        if (entry.type == 'insert' && entry.name == 'tableRow') {\n            wasFixed = fixTableRow(entry.position.nodeAfter, writer) || wasFixed;\n        }\n        if (entry.type == 'insert' && entry.name == 'tableCell') {\n            wasFixed = fixTableCellContent(entry.position.nodeAfter, writer) || wasFixed;\n        }\n        if ((entry.type == 'remove' || entry.type == 'insert') && checkTableCellChange(entry)) {\n            wasFixed = fixTableCellContent(entry.position.parent, writer) || wasFixed;\n        }\n    }\n    return wasFixed;\n}\n/**\n * Fixes all table cells in a table.\n */\nfunction fixTable(table, writer) {\n    let wasFixed = false;\n    for (const row of table.getChildren()) {\n        if (row.is('element', 'tableRow')) {\n            wasFixed = fixTableRow(row, writer) || wasFixed;\n        }\n    }\n    return wasFixed;\n}\n/**\n * Fixes all table cells in a table row.\n */\nfunction fixTableRow(tableRow, writer) {\n    let wasFixed = false;\n    for (const tableCell of tableRow.getChildren()) {\n        wasFixed = fixTableCellContent(tableCell, writer) || wasFixed;\n    }\n    return wasFixed;\n}\n/**\n * Fixes all table cell content by:\n * - Adding a paragraph to a table cell without any child.\n * - Wrapping direct $text in a `<paragraph>`.\n */\nfunction fixTableCellContent(tableCell, writer) {\n    // Insert paragraph to an empty table cell.\n    if (tableCell.childCount == 0) {\n        // @if CK_DEBUG_TABLE // console.log( 'Post-fixing table: insert paragraph in empty cell.' );\n        writer.insertElement('paragraph', tableCell);\n        return true;\n    }\n    // Check table cell children for directly placed text nodes.\n    // Temporary solution. See https://github.com/ckeditor/ckeditor5/issues/1464.\n    const textNodes = Array.from(tableCell.getChildren()).filter(child => child.is('$text'));\n    // @if CK_DEBUG_TABLE // textNodes.length && console.log( 'Post-fixing table: wrap cell content with paragraph.' );\n    for (const child of textNodes) {\n        writer.wrap(writer.createRangeOn(child), 'paragraph');\n    }\n    // Return true when there were text nodes to fix.\n    return !!textNodes.length;\n}\n/**\n * Checks if a differ change should fix the table cell. This happens on:\n * - Removing content from the table cell (i.e. `tableCell` can be left empty).\n * - Adding a text node directly into a table cell.\n */\nfunction checkTableCellChange(entry) {\n    if (!entry.position.parent.is('element', 'tableCell')) {\n        return false;\n    }\n    return entry.type == 'insert' && entry.name == '$text' || entry.type == 'remove';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { isSingleParagraphWithoutAttributes } from './downcast.js';\n/**\n * A table cell refresh handler which marks the table cell in the differ to have it re-rendered.\n *\n * Model `paragraph` inside a table cell can be rendered as `<span>` or `<p>`. It is rendered as `<span>` if this is the only block\n * element in that table cell and it does not have any attributes. It is rendered as `<p>` otherwise.\n *\n * When table cell content changes, for example a second `paragraph` element is added, we need to ensure that the first `paragraph` is\n * re-rendered so it changes from `<span>` to `<p>`. The easiest way to do it is to re-render the entire table cell.\n */\nexport default function tableCellRefreshHandler(model, editing) {\n    const differ = model.document.differ;\n    // Stores cells to be refreshed, so the table cell will be refreshed once for multiple changes.\n    const cellsToCheck = new Set();\n    for (const change of differ.getChanges()) {\n        const parent = change.type == 'attribute' ? change.range.start.parent : change.position.parent;\n        if (parent.is('element', 'tableCell')) {\n            cellsToCheck.add(parent);\n        }\n    }\n    for (const tableCell of cellsToCheck.values()) {\n        const paragraphsToRefresh = Array.from(tableCell.getChildren())\n            .filter(child => shouldRefresh(child, editing.mapper));\n        for (const paragraph of paragraphsToRefresh) {\n            editing.reconvertItem(paragraph);\n        }\n    }\n}\n/**\n * Check if given model element needs refreshing.\n */\nfunction shouldRefresh(child, mapper) {\n    if (!child.is('element', 'paragraph')) {\n        return false;\n    }\n    const viewElement = mapper.toViewElement(child);\n    if (!viewElement) {\n        return false;\n    }\n    return isSingleParagraphWithoutAttributes(child) !== viewElement.is('element', 'span');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport upcastTable, { ensureParagraphInTableCell, skipEmptyTableRow, upcastTableFigure } from './converters/upcasttable.js';\nimport { convertParagraphInTableCell, downcastCell, downcastRow, downcastTable } from './converters/downcast.js';\nimport InsertTableCommand from './commands/inserttablecommand.js';\nimport InsertRowCommand from './commands/insertrowcommand.js';\nimport InsertColumnCommand from './commands/insertcolumncommand.js';\nimport SplitCellCommand from './commands/splitcellcommand.js';\nimport MergeCellCommand from './commands/mergecellcommand.js';\nimport RemoveRowCommand from './commands/removerowcommand.js';\nimport RemoveColumnCommand from './commands/removecolumncommand.js';\nimport SetHeaderRowCommand from './commands/setheaderrowcommand.js';\nimport SetHeaderColumnCommand from './commands/setheadercolumncommand.js';\nimport MergeCellsCommand from './commands/mergecellscommand.js';\nimport SelectRowCommand from './commands/selectrowcommand.js';\nimport SelectColumnCommand from './commands/selectcolumncommand.js';\nimport TableUtils from '../src/tableutils.js';\nimport injectTableLayoutPostFixer from './converters/table-layout-post-fixer.js';\nimport injectTableCellParagraphPostFixer from './converters/table-cell-paragraph-post-fixer.js';\nimport tableHeadingsRefreshHandler from './converters/table-headings-refresh-handler.js';\nimport tableCellRefreshHandler from './converters/table-cell-refresh-handler.js';\nimport '../theme/tableediting.css';\n/**\n * The table editing feature.\n */\nexport default class TableEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        this._additionalSlots = [];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        const schema = model.schema;\n        const conversion = editor.conversion;\n        const tableUtils = editor.plugins.get(TableUtils);\n        schema.register('table', {\n            inheritAllFrom: '$blockObject',\n            allowAttributes: ['headingRows', 'headingColumns']\n        });\n        schema.register('tableRow', {\n            allowIn: 'table',\n            isLimit: true\n        });\n        schema.register('tableCell', {\n            allowContentOf: '$container',\n            allowIn: 'tableRow',\n            allowAttributes: ['colspan', 'rowspan'],\n            isLimit: true,\n            isSelectable: true\n        });\n        // Figure conversion.\n        conversion.for('upcast').add(upcastTableFigure());\n        // Table conversion.\n        conversion.for('upcast').add(upcastTable());\n        conversion.for('editingDowncast').elementToStructure({\n            model: {\n                name: 'table',\n                attributes: ['headingRows']\n            },\n            view: downcastTable(tableUtils, {\n                asWidget: true,\n                additionalSlots: this._additionalSlots\n            })\n        });\n        conversion.for('dataDowncast').elementToStructure({\n            model: {\n                name: 'table',\n                attributes: ['headingRows']\n            },\n            view: downcastTable(tableUtils, {\n                additionalSlots: this._additionalSlots\n            })\n        });\n        // Table row conversion.\n        conversion.for('upcast').elementToElement({ model: 'tableRow', view: 'tr' });\n        conversion.for('upcast').add(skipEmptyTableRow());\n        conversion.for('downcast').elementToElement({\n            model: 'tableRow',\n            view: downcastRow()\n        });\n        // Table cell conversion.\n        conversion.for('upcast').elementToElement({ model: 'tableCell', view: 'td' });\n        conversion.for('upcast').elementToElement({ model: 'tableCell', view: 'th' });\n        conversion.for('upcast').add(ensureParagraphInTableCell('td'));\n        conversion.for('upcast').add(ensureParagraphInTableCell('th'));\n        conversion.for('editingDowncast').elementToElement({\n            model: 'tableCell',\n            view: downcastCell({ asWidget: true })\n        });\n        conversion.for('dataDowncast').elementToElement({\n            model: 'tableCell',\n            view: downcastCell()\n        });\n        // Duplicates code - needed to properly refresh paragraph inside a table cell.\n        conversion.for('editingDowncast').elementToElement({\n            model: 'paragraph',\n            view: convertParagraphInTableCell({ asWidget: true }),\n            converterPriority: 'high'\n        });\n        conversion.for('dataDowncast').elementToElement({\n            model: 'paragraph',\n            view: convertParagraphInTableCell(),\n            converterPriority: 'high'\n        });\n        // Table attributes conversion.\n        conversion.for('downcast').attributeToAttribute({ model: 'colspan', view: 'colspan' });\n        conversion.for('upcast').attributeToAttribute({\n            model: { key: 'colspan', value: upcastCellSpan('colspan') },\n            view: 'colspan'\n        });\n        conversion.for('downcast').attributeToAttribute({ model: 'rowspan', view: 'rowspan' });\n        conversion.for('upcast').attributeToAttribute({\n            model: { key: 'rowspan', value: upcastCellSpan('rowspan') },\n            view: 'rowspan'\n        });\n        // Define the config.\n        editor.config.define('table.defaultHeadings.rows', 0);\n        editor.config.define('table.defaultHeadings.columns', 0);\n        // Define all the commands.\n        editor.commands.add('insertTable', new InsertTableCommand(editor));\n        editor.commands.add('insertTableRowAbove', new InsertRowCommand(editor, { order: 'above' }));\n        editor.commands.add('insertTableRowBelow', new InsertRowCommand(editor, { order: 'below' }));\n        editor.commands.add('insertTableColumnLeft', new InsertColumnCommand(editor, { order: 'left' }));\n        editor.commands.add('insertTableColumnRight', new InsertColumnCommand(editor, { order: 'right' }));\n        editor.commands.add('removeTableRow', new RemoveRowCommand(editor));\n        editor.commands.add('removeTableColumn', new RemoveColumnCommand(editor));\n        editor.commands.add('splitTableCellVertically', new SplitCellCommand(editor, { direction: 'vertically' }));\n        editor.commands.add('splitTableCellHorizontally', new SplitCellCommand(editor, { direction: 'horizontally' }));\n        editor.commands.add('mergeTableCells', new MergeCellsCommand(editor));\n        editor.commands.add('mergeTableCellRight', new MergeCellCommand(editor, { direction: 'right' }));\n        editor.commands.add('mergeTableCellLeft', new MergeCellCommand(editor, { direction: 'left' }));\n        editor.commands.add('mergeTableCellDown', new MergeCellCommand(editor, { direction: 'down' }));\n        editor.commands.add('mergeTableCellUp', new MergeCellCommand(editor, { direction: 'up' }));\n        editor.commands.add('setTableColumnHeader', new SetHeaderColumnCommand(editor));\n        editor.commands.add('setTableRowHeader', new SetHeaderRowCommand(editor));\n        editor.commands.add('selectTableRow', new SelectRowCommand(editor));\n        editor.commands.add('selectTableColumn', new SelectColumnCommand(editor));\n        injectTableLayoutPostFixer(model);\n        injectTableCellParagraphPostFixer(model);\n        this.listenTo(model.document, 'change:data', () => {\n            tableHeadingsRefreshHandler(model, editor.editing);\n            tableCellRefreshHandler(model, editor.editing);\n        });\n    }\n    /**\n     * Registers downcast handler for the additional table slot.\n     */\n    registerAdditionalSlot(slotHandler) {\n        this._additionalSlots.push(slotHandler);\n    }\n}\n/**\n * Returns fixed colspan and rowspan attrbutes values.\n *\n * @param type colspan or rowspan.\n * @returns conversion value function.\n */\nfunction upcastCellSpan(type) {\n    return (cell) => {\n        const span = parseInt(cell.getAttribute(type));\n        if (Number.isNaN(span) || span <= 0) {\n            return null;\n        }\n        return span;\n    };\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableWalker from '../tablewalker.js';\n/**\n * A table headings refresh handler which marks the table cells or rows in the differ to have it re-rendered\n * if the headings attribute changed.\n *\n * Table heading rows and heading columns are represented in the model by a `headingRows` and `headingColumns` attributes.\n *\n * When table headings attribute changes, all the cells/rows are marked to re-render to change between `<td>` and `<th>`.\n */\nexport default function tableHeadingsRefreshHandler(model, editing) {\n    const differ = model.document.differ;\n    for (const change of differ.getChanges()) {\n        let table;\n        let isRowChange = false;\n        if (change.type == 'attribute') {\n            const element = change.range.start.nodeAfter;\n            if (!element || !element.is('element', 'table')) {\n                continue;\n            }\n            if (change.attributeKey != 'headingRows' && change.attributeKey != 'headingColumns') {\n                continue;\n            }\n            table = element;\n            isRowChange = change.attributeKey == 'headingRows';\n        }\n        else if (change.name == 'tableRow' || change.name == 'tableCell') {\n            table = change.position.findAncestor('table');\n            isRowChange = change.name == 'tableRow';\n        }\n        if (!table) {\n            continue;\n        }\n        const headingRows = table.getAttribute('headingRows') || 0;\n        const headingColumns = table.getAttribute('headingColumns') || 0;\n        const tableWalker = new TableWalker(table);\n        for (const tableSlot of tableWalker) {\n            const isHeading = tableSlot.row < headingRows || tableSlot.column < headingColumns;\n            const expectedElementName = isHeading ? 'th' : 'td';\n            const viewElement = editing.mapper.toViewElement(tableSlot.cell);\n            if (viewElement && viewElement.is('element') && viewElement.name != expectedElementName) {\n                editing.reconvertItem((isRowChange ? tableSlot.cell.parent : tableSlot.cell));\n            }\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/ui/inserttableview\n */\nimport { View, ButtonView, addKeyboardHandlingForGrid } from 'ckeditor5/src/ui.js';\nimport { KeystrokeHandler, FocusTracker } from 'ckeditor5/src/utils.js';\nimport './../../theme/inserttable.css';\n/**\n * The table size view.\n *\n * It renders a 10x10 grid to choose the inserted table size.\n */\nexport default class InsertTableView extends View {\n    /**\n     * @inheritDoc\n     */\n    constructor(locale) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.items = this._createGridCollection();\n        this.keystrokes = new KeystrokeHandler();\n        this.focusTracker = new FocusTracker();\n        this.set('rows', 0);\n        this.set('columns', 0);\n        this.bind('label').to(this, 'columns', this, 'rows', (columns, rows) => `${rows} × ${columns}`);\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: ['ck']\n            },\n            children: [\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: ['ck-insert-table-dropdown__grid']\n                    },\n                    on: {\n                        'mouseover@.ck-insert-table-dropdown-grid-box': bind.to('boxover')\n                    },\n                    children: this.items\n                },\n                {\n                    tag: 'div',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-insert-table-dropdown__label'\n                        ],\n                        'aria-hidden': true\n                    },\n                    children: [\n                        {\n                            text: bind.to('label')\n                        }\n                    ]\n                }\n            ],\n            on: {\n                mousedown: bind.to(evt => {\n                    evt.preventDefault();\n                }),\n                click: bind.to(() => {\n                    this.fire('execute');\n                })\n            }\n        });\n        // #rows and #columns are set via changes to #focusTracker on mouse over.\n        this.on('boxover', (evt, domEvt) => {\n            const { row, column } = domEvt.target.dataset;\n            this.items.get((parseInt(row, 10) - 1) * 10 + (parseInt(column, 10) - 1)).focus();\n        });\n        // This allows the #rows and #columns to be updated when:\n        // * the user navigates the grid using the keyboard,\n        // * the user moves the mouse over grid items.\n        this.focusTracker.on('change:focusedElement', (evt, name, focusedElement) => {\n            if (!focusedElement) {\n                return;\n            }\n            const { row, column } = focusedElement.dataset;\n            // As row & column indexes are zero-based transform it to number of selected rows & columns.\n            this.set({\n                rows: parseInt(row),\n                columns: parseInt(column)\n            });\n        });\n        this.on('change:columns', () => this._highlightGridBoxes());\n        this.on('change:rows', () => this._highlightGridBoxes());\n    }\n    render() {\n        super.render();\n        addKeyboardHandlingForGrid({\n            keystrokeHandler: this.keystrokes,\n            focusTracker: this.focusTracker,\n            gridItems: this.items,\n            numberOfColumns: 10,\n            uiLanguageDirection: this.locale && this.locale.uiLanguageDirection\n        });\n        for (const item of this.items) {\n            this.focusTracker.add(item.element);\n        }\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * Resets the rows and columns selection.\n     */\n    reset() {\n        this.set({\n            rows: 1,\n            columns: 1\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    focus() {\n        this.items.get(0).focus();\n    }\n    /**\n     * @inheritDoc\n     */\n    focusLast() {\n        this.items.get(0).focus();\n    }\n    /**\n     * Highlights grid boxes depending on rows and columns selected.\n     */\n    _highlightGridBoxes() {\n        const rows = this.rows;\n        const columns = this.columns;\n        this.items.map((boxView, index) => {\n            // Translate box index to the row & column index.\n            const itemRow = Math.floor(index / 10);\n            const itemColumn = index % 10;\n            // Grid box is highlighted when its row & column index belongs to selected number of rows & columns.\n            const isOn = itemRow < rows && itemColumn < columns;\n            boxView.set('isOn', isOn);\n        });\n    }\n    /**\n     * Creates a new Button for the grid.\n     *\n     * @param locale The locale instance.\n     * @param row Row number.\n     * @param column Column number.\n     * @param label The grid button label.\n     */\n    _createGridButton(locale, row, column, label) {\n        const button = new ButtonView(locale);\n        button.set({\n            label,\n            class: 'ck-insert-table-dropdown-grid-box'\n        });\n        button.extendTemplate({\n            attributes: {\n                'data-row': row,\n                'data-column': column\n            }\n        });\n        return button;\n    }\n    /**\n     * @returns A view collection containing boxes to be placed in a table grid.\n     */\n    _createGridCollection() {\n        const boxes = [];\n        // Add grid boxes to table selection view.\n        for (let index = 0; index < 100; index++) {\n            const row = Math.floor(index / 10);\n            const column = index % 10;\n            const label = `${row + 1} × ${column + 1}`;\n            boxes.push(this._createGridButton(this.locale, row + 1, column + 1, label));\n        }\n        return this.createCollection(boxes);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableui\n */\nimport { icons, Plugin } from 'ckeditor5/src/core.js';\nimport { addListToDropdown, createDropdown, ViewModel, SplitButtonView, SwitchButtonView, MenuBarMenuView } from 'ckeditor5/src/ui.js';\nimport { Collection } from 'ckeditor5/src/utils.js';\nimport InsertTableView from './ui/inserttableview.js';\nimport tableColumnIcon from './../theme/icons/table-column.svg';\nimport tableRowIcon from './../theme/icons/table-row.svg';\nimport tableMergeCellIcon from './../theme/icons/table-merge-cell.svg';\n/**\n * The table UI plugin. It introduces:\n *\n * * The `'insertTable'` dropdown,\n * * The `'menuBar:insertTable'` menu bar menu,\n * * The `'tableColumn'` dropdown,\n * * The `'tableRow'` dropdown,\n * * The `'mergeTableCells'` split button.\n *\n * The `'tableColumn'`, `'tableRow'` and `'mergeTableCells'` dropdowns work best with {@link module:table/tabletoolbar~TableToolbar}.\n */\nexport default class TableUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = this.editor.t;\n        const contentLanguageDirection = editor.locale.contentLanguageDirection;\n        const isContentLtr = contentLanguageDirection === 'ltr';\n        editor.ui.componentFactory.add('insertTable', locale => {\n            const command = editor.commands.get('insertTable');\n            const dropdownView = createDropdown(locale);\n            dropdownView.bind('isEnabled').to(command);\n            // Decorate dropdown's button.\n            dropdownView.buttonView.set({\n                icon: icons.table,\n                label: t('Insert table'),\n                tooltip: true\n            });\n            let insertTableView;\n            dropdownView.on('change:isOpen', () => {\n                if (insertTableView) {\n                    return;\n                }\n                // Prepare custom view for dropdown's panel.\n                insertTableView = new InsertTableView(locale);\n                dropdownView.panelView.children.add(insertTableView);\n                insertTableView.delegate('execute').to(dropdownView);\n                dropdownView.on('execute', () => {\n                    editor.execute('insertTable', { rows: insertTableView.rows, columns: insertTableView.columns });\n                    editor.editing.view.focus();\n                });\n            });\n            return dropdownView;\n        });\n        editor.ui.componentFactory.add('menuBar:insertTable', locale => {\n            const command = editor.commands.get('insertTable');\n            const menuView = new MenuBarMenuView(locale);\n            const insertTableView = new InsertTableView(locale);\n            insertTableView.delegate('execute').to(menuView);\n            menuView.on('change:isOpen', (event, name, isOpen) => {\n                if (!isOpen) {\n                    insertTableView.reset();\n                }\n            });\n            insertTableView.on('execute', () => {\n                editor.execute('insertTable', { rows: insertTableView.rows, columns: insertTableView.columns });\n                editor.editing.view.focus();\n            });\n            menuView.buttonView.set({\n                label: t('Table'),\n                icon: icons.table\n            });\n            menuView.panelView.children.add(insertTableView);\n            menuView.bind('isEnabled').to(command);\n            return menuView;\n        });\n        editor.ui.componentFactory.add('tableColumn', locale => {\n            const options = [\n                {\n                    type: 'switchbutton',\n                    model: {\n                        commandName: 'setTableColumnHeader',\n                        label: t('Header column'),\n                        bindIsOn: true\n                    }\n                },\n                { type: 'separator' },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: isContentLtr ? 'insertTableColumnLeft' : 'insertTableColumnRight',\n                        label: t('Insert column left')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: isContentLtr ? 'insertTableColumnRight' : 'insertTableColumnLeft',\n                        label: t('Insert column right')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'removeTableColumn',\n                        label: t('Delete column')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'selectTableColumn',\n                        label: t('Select column')\n                    }\n                }\n            ];\n            return this._prepareDropdown(t('Column'), tableColumnIcon, options, locale);\n        });\n        editor.ui.componentFactory.add('tableRow', locale => {\n            const options = [\n                {\n                    type: 'switchbutton',\n                    model: {\n                        commandName: 'setTableRowHeader',\n                        label: t('Header row'),\n                        bindIsOn: true\n                    }\n                },\n                { type: 'separator' },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'insertTableRowAbove',\n                        label: t('Insert row above')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'insertTableRowBelow',\n                        label: t('Insert row below')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'removeTableRow',\n                        label: t('Delete row')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'selectTableRow',\n                        label: t('Select row')\n                    }\n                }\n            ];\n            return this._prepareDropdown(t('Row'), tableRowIcon, options, locale);\n        });\n        editor.ui.componentFactory.add('mergeTableCells', locale => {\n            const options = [\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'mergeTableCellUp',\n                        label: t('Merge cell up')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: isContentLtr ? 'mergeTableCellRight' : 'mergeTableCellLeft',\n                        label: t('Merge cell right')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'mergeTableCellDown',\n                        label: t('Merge cell down')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: isContentLtr ? 'mergeTableCellLeft' : 'mergeTableCellRight',\n                        label: t('Merge cell left')\n                    }\n                },\n                { type: 'separator' },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'splitTableCellVertically',\n                        label: t('Split cell vertically')\n                    }\n                },\n                {\n                    type: 'button',\n                    model: {\n                        commandName: 'splitTableCellHorizontally',\n                        label: t('Split cell horizontally')\n                    }\n                }\n            ];\n            return this._prepareMergeSplitButtonDropdown(t('Merge cells'), tableMergeCellIcon, options, locale);\n        });\n    }\n    /**\n     * Creates a dropdown view from a set of options.\n     *\n     * @param label The dropdown button label.\n     * @param icon An icon for the dropdown button.\n     * @param options The list of options for the dropdown.\n     */\n    _prepareDropdown(label, icon, options, locale) {\n        const editor = this.editor;\n        const dropdownView = createDropdown(locale);\n        const commands = this._fillDropdownWithListOptions(dropdownView, options);\n        // Decorate dropdown's button.\n        dropdownView.buttonView.set({\n            label,\n            icon,\n            tooltip: true\n        });\n        // Make dropdown button disabled when all options are disabled.\n        dropdownView.bind('isEnabled').toMany(commands, 'isEnabled', (...areEnabled) => {\n            return areEnabled.some(isEnabled => isEnabled);\n        });\n        this.listenTo(dropdownView, 'execute', evt => {\n            editor.execute(evt.source.commandName);\n            // Toggling a switch button view should not move the focus to the editable.\n            if (!(evt.source instanceof SwitchButtonView)) {\n                editor.editing.view.focus();\n            }\n        });\n        return dropdownView;\n    }\n    /**\n     * Creates a dropdown view with a {@link module:ui/dropdown/button/splitbuttonview~SplitButtonView} for\n     * merge (and split)–related commands.\n     *\n     * @param label The dropdown button label.\n     * @param icon An icon for the dropdown button.\n     * @param options The list of options for the dropdown.\n     */\n    _prepareMergeSplitButtonDropdown(label, icon, options, locale) {\n        const editor = this.editor;\n        const dropdownView = createDropdown(locale, SplitButtonView);\n        const mergeCommandName = 'mergeTableCells';\n        // Main command.\n        const mergeCommand = editor.commands.get(mergeCommandName);\n        // Subcommands in the dropdown.\n        const commands = this._fillDropdownWithListOptions(dropdownView, options);\n        dropdownView.buttonView.set({\n            label,\n            icon,\n            tooltip: true,\n            isEnabled: true\n        });\n        // Make dropdown button disabled when all options are disabled together with the main command.\n        dropdownView.bind('isEnabled').toMany([mergeCommand, ...commands], 'isEnabled', (...areEnabled) => {\n            return areEnabled.some(isEnabled => isEnabled);\n        });\n        // Merge selected table cells when the main part of the split button is clicked.\n        this.listenTo(dropdownView.buttonView, 'execute', () => {\n            editor.execute(mergeCommandName);\n            editor.editing.view.focus();\n        });\n        // Execute commands for events coming from the list in the dropdown panel.\n        this.listenTo(dropdownView, 'execute', evt => {\n            editor.execute(evt.source.commandName);\n            editor.editing.view.focus();\n        });\n        return dropdownView;\n    }\n    /**\n     * Injects a {@link module:ui/list/listview~ListView} into the passed dropdown with buttons\n     * which execute editor commands as configured in passed options.\n     *\n     * @param options The list of options for the dropdown.\n     * @returns Commands the list options are interacting with.\n     */\n    _fillDropdownWithListOptions(dropdownView, options) {\n        const editor = this.editor;\n        const commands = [];\n        const itemDefinitions = new Collection();\n        for (const option of options) {\n            addListOption(option, editor, commands, itemDefinitions);\n        }\n        addListToDropdown(dropdownView, itemDefinitions);\n        return commands;\n    }\n}\n/**\n * Adds an option to a list view.\n *\n * @param option A configuration option.\n * @param commands The list of commands to update.\n * @param itemDefinitions A collection of dropdown items to update with the given option.\n */\nfunction addListOption(option, editor, commands, itemDefinitions) {\n    if (option.type === 'button' || option.type === 'switchbutton') {\n        const model = option.model = new ViewModel(option.model);\n        const { commandName, bindIsOn } = option.model;\n        const command = editor.commands.get(commandName);\n        commands.push(command);\n        model.set({ commandName });\n        model.bind('isEnabled').to(command);\n        if (bindIsOn) {\n            model.bind('isOn').to(command, 'value');\n        }\n        model.set({\n            withText: true\n        });\n    }\n    itemDefinitions.add(option);\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z\\\" opacity=\\\".6\\\"/><path d=\\\"M18 7v1H2V7h16zm0 5v1H2v-1h16z\\\" opacity=\\\".6\\\"/><path d=\\\"M14 1v18a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1zm-2 1H8v4h4V2zm0 6H8v4h4V8zm0 6H8v4h4v-4z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z\\\" opacity=\\\".6\\\"/><path d=\\\"M7 2h1v16H7V2zm5 0h1v16h-1V2z\\\" opacity=\\\".6\\\"/><path d=\\\"M1 6h18a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1zm1 2v4h4V8H2zm6 0v4h4V8H8zm6 0v4h4V8h-4z\\\"/></svg>\";", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z\\\" opacity=\\\".6\\\"/><path d=\\\"M7 2h1v16H7V2zm5 0h1v7h-1V2zm6 5v1H2V7h16zM8 12v1H2v-1h6z\\\" opacity=\\\".6\\\"/><path d=\\\"M7 7h12a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1zm1 2v9h10V9H8z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableselection\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { first } from 'ckeditor5/src/utils.js';\nimport TableWalker from './tablewalker.js';\nimport TableUtils from './tableutils.js';\nimport { cropTableToDimensions, adjustLastRowIndex, adjustLastColumnIndex } from './utils/structure.js';\nimport '../theme/tableselection.css';\n/**\n * This plugin enables the advanced table cells, rows and columns selection.\n * It is loaded automatically by the {@link module:table/table~Table} plugin.\n */\nexport default class TableSelection extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableSelection';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableUtils, TableUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const model = editor.model;\n        const view = editor.editing.view;\n        this.listenTo(model, 'deleteContent', (evt, args) => this._handleDeleteContent(evt, args), { priority: 'high' });\n        this.listenTo(view.document, 'insertText', (evt, data) => this._handleInsertTextEvent(evt, data), { priority: 'high' });\n        this._defineSelectionConverter();\n        this._enablePluginDisabling(); // sic!\n    }\n    /**\n     * Returns the currently selected table cells or `null` if it is not a table cells selection.\n     */\n    getSelectedTableCells() {\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const selection = this.editor.model.document.selection;\n        const selectedCells = tableUtils.getSelectedTableCells(selection);\n        if (selectedCells.length == 0) {\n            return null;\n        }\n        // This should never happen, but let's know if it ever happens.\n        // @if CK_DEBUG //\tif ( selectedCells.length != selection.rangeCount ) {\n        // @if CK_DEBUG //\t\tconsole.warn( 'Mixed selection warning. The selection contains table cells and some other ranges.' );\n        // @if CK_DEBUG //\t}\n        return selectedCells;\n    }\n    /**\n     * Returns the selected table fragment as a document fragment.\n     */\n    getSelectionAsFragment() {\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const selectedCells = this.getSelectedTableCells();\n        if (!selectedCells) {\n            return null;\n        }\n        return this.editor.model.change(writer => {\n            const documentFragment = writer.createDocumentFragment();\n            const { first: firstColumn, last: lastColumn } = tableUtils.getColumnIndexes(selectedCells);\n            const { first: firstRow, last: lastRow } = tableUtils.getRowIndexes(selectedCells);\n            const sourceTable = selectedCells[0].findAncestor('table');\n            let adjustedLastRow = lastRow;\n            let adjustedLastColumn = lastColumn;\n            // If the selection is rectangular there could be a case of all cells in the last row/column spanned over\n            // next row/column so the real lastRow/lastColumn should be updated.\n            if (tableUtils.isSelectionRectangular(selectedCells)) {\n                const dimensions = {\n                    firstColumn,\n                    lastColumn,\n                    firstRow,\n                    lastRow\n                };\n                adjustedLastRow = adjustLastRowIndex(sourceTable, dimensions);\n                adjustedLastColumn = adjustLastColumnIndex(sourceTable, dimensions);\n            }\n            const cropDimensions = {\n                startRow: firstRow,\n                startColumn: firstColumn,\n                endRow: adjustedLastRow,\n                endColumn: adjustedLastColumn\n            };\n            const table = cropTableToDimensions(sourceTable, cropDimensions, writer);\n            writer.insert(table, documentFragment, 0);\n            return documentFragment;\n        });\n    }\n    /**\n     * Sets the model selection based on given anchor and target cells (can be the same cell).\n     * Takes care of setting the backward flag.\n     *\n     * ```ts\n     * const modelRoot = editor.model.document.getRoot();\n     * const firstCell = modelRoot.getNodeByPath( [ 0, 0, 0 ] );\n     * const lastCell = modelRoot.getNodeByPath( [ 0, 0, 1 ] );\n     *\n     * const tableSelection = editor.plugins.get( 'TableSelection' );\n     * tableSelection.setCellSelection( firstCell, lastCell );\n     * ```\n     */\n    setCellSelection(anchorCell, targetCell) {\n        const cellsToSelect = this._getCellsToSelect(anchorCell, targetCell);\n        this.editor.model.change(writer => {\n            writer.setSelection(cellsToSelect.cells.map(cell => writer.createRangeOn(cell)), { backward: cellsToSelect.backward });\n        });\n    }\n    /**\n     * Returns the focus cell from the current selection.\n     */\n    getFocusCell() {\n        const selection = this.editor.model.document.selection;\n        const focusCellRange = [...selection.getRanges()].pop();\n        const element = focusCellRange.getContainedElement();\n        if (element && element.is('element', 'tableCell')) {\n            return element;\n        }\n        return null;\n    }\n    /**\n     * Returns the anchor cell from the current selection.\n     */\n    getAnchorCell() {\n        const selection = this.editor.model.document.selection;\n        const anchorCellRange = first(selection.getRanges());\n        const element = anchorCellRange.getContainedElement();\n        if (element && element.is('element', 'tableCell')) {\n            return element;\n        }\n        return null;\n    }\n    /**\n     * Defines a selection converter which marks the selected cells with a specific class.\n     *\n     * The real DOM selection is put in the last cell. Since the order of ranges is dependent on whether the\n     * selection is backward or not, the last cell will usually be close to the \"focus\" end of the selection\n     * (a selection has anchor and focus).\n     *\n     * The real DOM selection is then hidden with CSS.\n     */\n    _defineSelectionConverter() {\n        const editor = this.editor;\n        const highlighted = new Set();\n        editor.conversion.for('editingDowncast').add(dispatcher => dispatcher.on('selection', (evt, data, conversionApi) => {\n            const viewWriter = conversionApi.writer;\n            clearHighlightedTableCells(viewWriter);\n            const selectedCells = this.getSelectedTableCells();\n            if (!selectedCells) {\n                return;\n            }\n            for (const tableCell of selectedCells) {\n                const viewElement = conversionApi.mapper.toViewElement(tableCell);\n                viewWriter.addClass('ck-editor__editable_selected', viewElement);\n                highlighted.add(viewElement);\n            }\n            const lastViewCell = conversionApi.mapper.toViewElement(selectedCells[selectedCells.length - 1]);\n            viewWriter.setSelection(lastViewCell, 0);\n        }, { priority: 'lowest' }));\n        function clearHighlightedTableCells(viewWriter) {\n            for (const previouslyHighlighted of highlighted) {\n                viewWriter.removeClass('ck-editor__editable_selected', previouslyHighlighted);\n            }\n            highlighted.clear();\n        }\n    }\n    /**\n     * Creates a listener that reacts to changes in {@link #isEnabled} and, if the plugin was disabled,\n     * it collapses the multi-cell selection to a regular selection placed inside a table cell.\n     *\n     * This listener helps features that disable the table selection plugin bring the selection\n     * to a clear state they can work with (for instance, because they don't support multiple cell selection).\n     */\n    _enablePluginDisabling() {\n        const editor = this.editor;\n        this.on('change:isEnabled', () => {\n            if (!this.isEnabled) {\n                const selectedCells = this.getSelectedTableCells();\n                if (!selectedCells) {\n                    return;\n                }\n                editor.model.change(writer => {\n                    const position = writer.createPositionAt(selectedCells[0], 0);\n                    const range = editor.model.schema.getNearestSelectionRange(position);\n                    writer.setSelection(range);\n                });\n            }\n        });\n    }\n    /**\n     * Overrides the default `model.deleteContent()` behavior over a selected table fragment.\n     *\n     * @param args Delete content method arguments.\n     */\n    _handleDeleteContent(event, args) {\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const selection = args[0];\n        const options = args[1];\n        const model = this.editor.model;\n        const isBackward = !options || options.direction == 'backward';\n        const selectedTableCells = tableUtils.getSelectedTableCells(selection);\n        if (!selectedTableCells.length) {\n            return;\n        }\n        event.stop();\n        model.change(writer => {\n            const tableCellToSelect = selectedTableCells[isBackward ? selectedTableCells.length - 1 : 0];\n            model.change(writer => {\n                for (const tableCell of selectedTableCells) {\n                    model.deleteContent(writer.createSelection(tableCell, 'in'));\n                }\n            });\n            const rangeToSelect = model.schema.getNearestSelectionRange(writer.createPositionAt(tableCellToSelect, 0));\n            // Note: we ignore the case where rangeToSelect may be null because deleteContent() will always (unless someone broke it)\n            // create an empty paragraph to accommodate the selection.\n            if (selection.is('documentSelection')) {\n                writer.setSelection(rangeToSelect);\n            }\n            else {\n                selection.setTo(rangeToSelect);\n            }\n        });\n    }\n    /**\n     * This handler makes it possible to remove the content of all selected cells by starting to type.\n     * If you take a look at {@link #_defineSelectionConverter} you will find out that despite the multi-cell selection being set\n     * in the model, the view selection is collapsed in the last cell (because most browsers are unable to render multi-cell selections;\n     * yes, it's a hack).\n     *\n     * When multiple cells are selected in the model and the user starts to type, the\n     * {@link module:engine/view/document~Document#event:insertText} event carries information provided by the\n     * beforeinput DOM  event, that in turn only knows about this collapsed DOM selection in the last cell.\n     *\n     * As a result, the selected cells have no chance to be cleaned up. To fix this, this listener intercepts\n     * the event and injects the custom view selection in the data that translates correctly to the actual state\n     * of the multi-cell selection in the model.\n     *\n     * @param data Insert text event data.\n     */\n    _handleInsertTextEvent(evt, data) {\n        const editor = this.editor;\n        const selectedCells = this.getSelectedTableCells();\n        if (!selectedCells) {\n            return;\n        }\n        const view = editor.editing.view;\n        const mapper = editor.editing.mapper;\n        const viewRanges = selectedCells.map(tableCell => view.createRangeOn(mapper.toViewElement(tableCell)));\n        data.selection = view.createSelection(viewRanges);\n    }\n    /**\n     * Returns an array of table cells that should be selected based on the\n     * given anchor cell and target (focus) cell.\n     *\n     * The cells are returned in a reverse direction if the selection is backward.\n     */\n    _getCellsToSelect(anchorCell, targetCell) {\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const startLocation = tableUtils.getCellLocation(anchorCell);\n        const endLocation = tableUtils.getCellLocation(targetCell);\n        const startRow = Math.min(startLocation.row, endLocation.row);\n        const endRow = Math.max(startLocation.row, endLocation.row);\n        const startColumn = Math.min(startLocation.column, endLocation.column);\n        const endColumn = Math.max(startLocation.column, endLocation.column);\n        // 2-dimensional array of the selected cells to ease flipping the order of cells for backward selections.\n        const selectionMap = new Array(endRow - startRow + 1).fill(null).map(() => []);\n        const walkerOptions = {\n            startRow,\n            endRow,\n            startColumn,\n            endColumn\n        };\n        for (const { row, cell } of new TableWalker(anchorCell.findAncestor('table'), walkerOptions)) {\n            selectionMap[row - startRow].push(cell);\n        }\n        const flipVertically = endLocation.row < startLocation.row;\n        const flipHorizontally = endLocation.column < startLocation.column;\n        if (flipVertically) {\n            selectionMap.reverse();\n        }\n        if (flipHorizontally) {\n            selectionMap.forEach(row => row.reverse());\n        }\n        return {\n            cells: selectionMap.flat(),\n            backward: flipVertically || flipHorizontally\n        };\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { ClipboardPipeline, ClipboardMarkersUtils } from 'ckeditor5/src/clipboard.js';\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport TableSelection from './tableselection.js';\nimport TableWalker from './tablewalker.js';\nimport TableUtils from './tableutils.js';\nimport { cropTableToDimensions, getHorizontallyOverlappingCells, getVerticallyOverlappingCells, removeEmptyRowsColumns, splitHorizontally, splitVertically, trimTableCellIfNeeded, adjustLastRowIndex, adjustLastColumnIndex } from './utils/structure.js';\n/**\n * This plugin adds support for copying/cutting/pasting fragments of tables.\n * It is loaded automatically by the {@link module:table/table~Table} plugin.\n */\nexport default class TableClipboard extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableClipboard';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ClipboardMarkersUtils, ClipboardPipeline, TableSelection, TableUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const viewDocument = editor.editing.view.document;\n        this.listenTo(viewDocument, 'copy', (evt, data) => this._onCopyCut(evt, data));\n        this.listenTo(viewDocument, 'cut', (evt, data) => this._onCopyCut(evt, data));\n        this.listenTo(editor.model, 'insertContent', (evt, [content, selectable]) => this._onInsertContent(evt, content, selectable), { priority: 'high' });\n        this.decorate('_replaceTableSlotCell');\n    }\n    /**\n     * Copies table content to a clipboard on \"copy\" & \"cut\" events.\n     *\n     * @param evt An object containing information about the handled event.\n     * @param data Clipboard event data.\n     */\n    _onCopyCut(evt, data) {\n        const view = this.editor.editing.view;\n        const tableSelection = this.editor.plugins.get(TableSelection);\n        const clipboardMarkersUtils = this.editor.plugins.get(ClipboardMarkersUtils);\n        if (!tableSelection.getSelectedTableCells()) {\n            return;\n        }\n        if (evt.name == 'cut' && !this.editor.model.canEditAt(this.editor.model.document.selection)) {\n            return;\n        }\n        data.preventDefault();\n        evt.stop();\n        this.editor.model.enqueueChange({ isUndoable: evt.name === 'cut' }, () => {\n            const documentFragment = clipboardMarkersUtils._copySelectedFragmentWithMarkers(evt.name, this.editor.model.document.selection, () => tableSelection.getSelectionAsFragment());\n            view.document.fire('clipboardOutput', {\n                dataTransfer: data.dataTransfer,\n                content: this.editor.data.toView(documentFragment),\n                method: evt.name\n            });\n        });\n    }\n    /**\n     * Overrides default {@link module:engine/model/model~Model#insertContent `model.insertContent()`} method to handle pasting table inside\n     * selected table fragment.\n     *\n     * Depending on selected table fragment:\n     * - If a selected table fragment is smaller than paste table it will crop pasted table to match dimensions.\n     * - If dimensions are equal it will replace selected table fragment with a pasted table contents.\n     *\n     * @param content The content to insert.\n     * @param selectable The selection into which the content should be inserted.\n     * If not provided the current model document selection will be used.\n     */\n    _onInsertContent(evt, content, selectable) {\n        if (selectable && !selectable.is('documentSelection')) {\n            return;\n        }\n        const model = this.editor.model;\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const clipboardMarkersUtils = this.editor.plugins.get(ClipboardMarkersUtils);\n        // We might need to crop table before inserting so reference might change.\n        const pastedTable = this.getTableIfOnlyTableInContent(content, model);\n        if (!pastedTable) {\n            return;\n        }\n        const selectedTableCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        if (!selectedTableCells.length) {\n            removeEmptyRowsColumns(pastedTable, tableUtils);\n            return;\n        }\n        // Override default model.insertContent() handling at this point.\n        evt.stop();\n        if (content.is('documentFragment')) {\n            clipboardMarkersUtils._pasteMarkersIntoTransformedElement(content.markers, writer => this._replaceSelectedCells(pastedTable, selectedTableCells, writer));\n        }\n        else {\n            this.editor.model.change(writer => {\n                this._replaceSelectedCells(pastedTable, selectedTableCells, writer);\n            });\n        }\n    }\n    /**\n     * Inserts provided `selectedTableCells` into `pastedTable`.\n     */\n    _replaceSelectedCells(pastedTable, selectedTableCells, writer) {\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const pastedDimensions = {\n            width: tableUtils.getColumns(pastedTable),\n            height: tableUtils.getRows(pastedTable)\n        };\n        // Prepare the table for pasting.\n        const selection = prepareTableForPasting(selectedTableCells, pastedDimensions, writer, tableUtils);\n        // Beyond this point we operate on a fixed content table with rectangular selection and proper last row/column values.\n        const selectionHeight = selection.lastRow - selection.firstRow + 1;\n        const selectionWidth = selection.lastColumn - selection.firstColumn + 1;\n        // Crop pasted table if:\n        // - Pasted table dimensions exceeds selection area.\n        // - Pasted table has broken layout (ie some cells sticks out by the table dimensions established by the first and last row).\n        //\n        // Note: The table dimensions are established by the width of the first row and the total number of rows.\n        // It is possible to programmatically create a table that has rows which would have cells anchored beyond first row width but\n        // such table will not be created by other editing solutions.\n        const cropDimensions = {\n            startRow: 0,\n            startColumn: 0,\n            endRow: Math.min(selectionHeight, pastedDimensions.height) - 1,\n            endColumn: Math.min(selectionWidth, pastedDimensions.width) - 1\n        };\n        pastedTable = cropTableToDimensions(pastedTable, cropDimensions, writer);\n        // Content table to which we insert a pasted table.\n        const selectedTable = selectedTableCells[0].findAncestor('table');\n        const cellsToSelect = this._replaceSelectedCellsWithPasted(pastedTable, pastedDimensions, selectedTable, selection, writer);\n        if (this.editor.plugins.get('TableSelection').isEnabled) {\n            // Selection ranges must be sorted because the first and last selection ranges are considered\n            // as anchor/focus cell ranges for multi-cell selection.\n            const selectionRanges = tableUtils.sortRanges(cellsToSelect.map(cell => writer.createRangeOn(cell)));\n            writer.setSelection(selectionRanges);\n        }\n        else {\n            // Set selection inside first cell if multi-cell selection is disabled.\n            writer.setSelection(cellsToSelect[0], 0);\n        }\n        return selectedTable;\n    }\n    /**\n     * Replaces the part of selectedTable with pastedTable.\n     */\n    _replaceSelectedCellsWithPasted(pastedTable, pastedDimensions, selectedTable, selection, writer) {\n        const { width: pastedWidth, height: pastedHeight } = pastedDimensions;\n        // Holds two-dimensional array that is addressed by [ row ][ column ] that stores cells anchored at given location.\n        const pastedTableLocationMap = createLocationMap(pastedTable, pastedWidth, pastedHeight);\n        const selectedTableMap = [...new TableWalker(selectedTable, {\n                startRow: selection.firstRow,\n                endRow: selection.lastRow,\n                startColumn: selection.firstColumn,\n                endColumn: selection.lastColumn,\n                includeAllSlots: true\n            })];\n        // Selection must be set to pasted cells (some might be removed or new created).\n        const cellsToSelect = [];\n        // Store next cell insert position.\n        let insertPosition;\n        // Content table replace cells algorithm iterates over a selected table fragment and:\n        //\n        // - Removes existing table cells at current slot (location).\n        // - Inserts cell from a pasted table for a matched slots.\n        //\n        // This ensures proper table geometry after the paste\n        for (const tableSlot of selectedTableMap) {\n            const { row, column } = tableSlot;\n            // Save the insert position for current row start.\n            if (column === selection.firstColumn) {\n                insertPosition = tableSlot.getPositionBefore();\n            }\n            // Map current table slot location to an pasted table slot location.\n            const pastedRow = row - selection.firstRow;\n            const pastedColumn = column - selection.firstColumn;\n            const pastedCell = pastedTableLocationMap[pastedRow % pastedHeight][pastedColumn % pastedWidth];\n            // Clone cell to insert (to duplicate its attributes and children).\n            // Cloning is required to support repeating pasted table content when inserting to a bigger selection.\n            const cellToInsert = pastedCell ? writer.cloneElement(pastedCell) : null;\n            // Replace the cell from the current slot with new table cell.\n            const newTableCell = this._replaceTableSlotCell(tableSlot, cellToInsert, insertPosition, writer);\n            // The cell was only removed.\n            if (!newTableCell) {\n                continue;\n            }\n            // Trim the cell if it's row/col-spans would exceed selection area.\n            trimTableCellIfNeeded(newTableCell, row, column, selection.lastRow, selection.lastColumn, writer);\n            cellsToSelect.push(newTableCell);\n            insertPosition = writer.createPositionAfter(newTableCell);\n        }\n        // If there are any headings, all the cells that overlap from heading must be splitted.\n        const headingRows = parseInt(selectedTable.getAttribute('headingRows') || '0');\n        const headingColumns = parseInt(selectedTable.getAttribute('headingColumns') || '0');\n        const areHeadingRowsIntersectingSelection = selection.firstRow < headingRows && headingRows <= selection.lastRow;\n        const areHeadingColumnsIntersectingSelection = selection.firstColumn < headingColumns && headingColumns <= selection.lastColumn;\n        if (areHeadingRowsIntersectingSelection) {\n            const columnsLimit = { first: selection.firstColumn, last: selection.lastColumn };\n            const newCells = doHorizontalSplit(selectedTable, headingRows, columnsLimit, writer, selection.firstRow);\n            cellsToSelect.push(...newCells);\n        }\n        if (areHeadingColumnsIntersectingSelection) {\n            const rowsLimit = { first: selection.firstRow, last: selection.lastRow };\n            const newCells = doVerticalSplit(selectedTable, headingColumns, rowsLimit, writer);\n            cellsToSelect.push(...newCells);\n        }\n        return cellsToSelect;\n    }\n    /**\n     * Replaces a single table slot.\n     *\n     * @returns Inserted table cell or null if slot should remain empty.\n     * @private\n     */\n    _replaceTableSlotCell(tableSlot, cellToInsert, insertPosition, writer) {\n        const { cell, isAnchor } = tableSlot;\n        // If the slot is occupied by a cell in a selected table - remove it.\n        // The slot of this cell will be either:\n        // - Replaced by a pasted table cell.\n        // - Spanned by a previously pasted table cell.\n        if (isAnchor) {\n            writer.remove(cell);\n        }\n        // There is no cell to insert (might be spanned by other cell in a pasted table) - advance to the next content table slot.\n        if (!cellToInsert) {\n            return null;\n        }\n        writer.insert(cellToInsert, insertPosition);\n        return cellToInsert;\n    }\n    /**\n     * Extracts the table for pasting into a table.\n     *\n     * @param content The content to insert.\n     * @param model The editor model.\n     */\n    getTableIfOnlyTableInContent(content, model) {\n        if (!content.is('documentFragment') && !content.is('element')) {\n            return null;\n        }\n        // Table passed directly.\n        if (content.is('element', 'table')) {\n            return content;\n        }\n        // We do not support mixed content when pasting table into table.\n        // See: https://github.com/ckeditor/ckeditor5/issues/6817.\n        if (content.childCount == 1 && content.getChild(0).is('element', 'table')) {\n            return content.getChild(0);\n        }\n        // If there are only whitespaces around a table then use that table for pasting.\n        const contentRange = model.createRangeIn(content);\n        for (const element of contentRange.getItems()) {\n            if (element.is('element', 'table')) {\n                // Stop checking if there is some content before table.\n                const rangeBefore = model.createRange(contentRange.start, model.createPositionBefore(element));\n                if (model.hasContent(rangeBefore, { ignoreWhitespaces: true })) {\n                    return null;\n                }\n                // Stop checking if there is some content after table.\n                const rangeAfter = model.createRange(model.createPositionAfter(element), contentRange.end);\n                if (model.hasContent(rangeAfter, { ignoreWhitespaces: true })) {\n                    return null;\n                }\n                // There wasn't any content neither before nor after.\n                return element;\n            }\n        }\n        return null;\n    }\n}\n/**\n * Prepares a table for pasting and returns adjusted selection dimensions.\n */\nfunction prepareTableForPasting(selectedTableCells, pastedDimensions, writer, tableUtils) {\n    const selectedTable = selectedTableCells[0].findAncestor('table');\n    const columnIndexes = tableUtils.getColumnIndexes(selectedTableCells);\n    const rowIndexes = tableUtils.getRowIndexes(selectedTableCells);\n    const selection = {\n        firstColumn: columnIndexes.first,\n        lastColumn: columnIndexes.last,\n        firstRow: rowIndexes.first,\n        lastRow: rowIndexes.last\n    };\n    // Single cell selected - expand selection to pasted table dimensions.\n    const shouldExpandSelection = selectedTableCells.length === 1;\n    if (shouldExpandSelection) {\n        selection.lastRow += pastedDimensions.height - 1;\n        selection.lastColumn += pastedDimensions.width - 1;\n        expandTableSize(selectedTable, selection.lastRow + 1, selection.lastColumn + 1, tableUtils);\n    }\n    // In case of expanding selection we do not reset the selection so in this case we will always try to fix selection\n    // like in the case of a non-rectangular area. This might be fixed by re-setting selected cells array but this shortcut is safe.\n    if (shouldExpandSelection || !tableUtils.isSelectionRectangular(selectedTableCells)) {\n        // For a non-rectangular selection (ie in which some cells sticks out from a virtual selection rectangle) we need to create\n        // a table layout that has a rectangular selection. This will split cells so the selection become rectangular.\n        // Beyond this point we will operate on fixed content table.\n        splitCellsToRectangularSelection(selectedTable, selection, writer);\n    }\n    // However a selected table fragment might be invalid if examined alone. Ie such table fragment:\n    //\n    //    +---+---+---+---+\n    //  0 | a | b | c | d |\n    //    +   +   +---+---+\n    //  1 |   | e | f | g |\n    //    +   +---+   +---+\n    //  2 |   | h |   | i | <- last row, each cell has rowspan = 2,\n    //    +   +   +   +   +    so we need to return 3, not 2\n    //  3 |   |   |   |   |\n    //    +---+---+---+---+\n    //\n    // is invalid as the cells \"h\" and \"i\" have rowspans.\n    // This case needs only adjusting the selection dimension as the rest of the algorithm operates on empty slots also.\n    else {\n        selection.lastRow = adjustLastRowIndex(selectedTable, selection);\n        selection.lastColumn = adjustLastColumnIndex(selectedTable, selection);\n    }\n    return selection;\n}\n/**\n * Expand table (in place) to expected size.\n */\nfunction expandTableSize(table, expectedHeight, expectedWidth, tableUtils) {\n    const tableWidth = tableUtils.getColumns(table);\n    const tableHeight = tableUtils.getRows(table);\n    if (expectedWidth > tableWidth) {\n        tableUtils.insertColumns(table, {\n            at: tableWidth,\n            columns: expectedWidth - tableWidth\n        });\n    }\n    if (expectedHeight > tableHeight) {\n        tableUtils.insertRows(table, {\n            at: tableHeight,\n            rows: expectedHeight - tableHeight\n        });\n    }\n}\n/**\n * Returns two-dimensional array that is addressed by [ row ][ column ] that stores cells anchored at given location.\n *\n * At given row & column location it might be one of:\n *\n * * cell - cell from pasted table anchored at this location.\n * * null - if no cell is anchored at this location.\n *\n * For instance, from a table below:\n *\n *   +----+----+----+----+\n *   | 00 | 01 | 02 | 03 |\n *   +    +----+----+----+\n *   |    | 11      | 13 |\n *   +----+         +----+\n *   | 20 |         | 23 |\n *   +----+----+----+----+\n *\n * The method will return an array (numbers represents cell element):\n *\n * ```ts\n * const map = [\n *   [ '00', '01', '02', '03' ],\n *   [ null, '11', null, '13' ],\n *   [ '20', null, null, '23' ]\n * ]\n * ```\n *\n * This allows for a quick access to table at give row & column. For instance to access table cell \"13\" from pasted table call:\n *\n * ```ts\n * const cell = map[ 1 ][ 3 ]\n * ```\n */\nfunction createLocationMap(table, width, height) {\n    // Create height x width (row x column) two-dimensional table to store cells.\n    const map = new Array(height).fill(null)\n        .map(() => new Array(width).fill(null));\n    for (const { column, row, cell } of new TableWalker(table)) {\n        map[row][column] = cell;\n    }\n    return map;\n}\n/**\n * Make selected cells rectangular by splitting the cells that stand out from a rectangular selection.\n *\n * In the table below a selection is shown with \"::\" and slots with anchor cells are named.\n *\n * +----+----+----+----+----+                    +----+----+----+----+----+\n * | 00 | 01 | 02 | 03      |                    | 00 | 01 | 02 | 03      |\n * +    +----+    +----+----+                    |    ::::::::::::::::----+\n * |    | 11 |    | 13 | 14 |                    |    ::11 |    | 13:: 14 |    <- first row\n * +----+----+    +    +----+                    +----::---|    |   ::----+\n * | 20 | 21 |    |    | 24 |   select cells:    | 20 ::21 |    |   :: 24 |\n * +----+----+    +----+----+     11 -> 33       +----::---|    |---::----+\n * | 30      |    | 33 | 34 |                    | 30 ::   |    | 33:: 34 |    <- last row\n * +         +    +----+    +                    |    ::::::::::::::::    +\n * |         |    | 43 |    |                    |         |    | 43 |    |\n * +----+----+----+----+----+                    +----+----+----+----+----+\n *                                                      ^          ^\n *                                                     first & last columns\n *\n * Will update table to:\n *\n *                       +----+----+----+----+----+\n *                       | 00 | 01 | 02 | 03      |\n *                       +    +----+----+----+----+\n *                       |    | 11 |    | 13 | 14 |\n *                       +----+----+    +    +----+\n *                       | 20 | 21 |    |    | 24 |\n *                       +----+----+    +----+----+\n *                       | 30 |    |    | 33 | 34 |\n *                       +    +----+----+----+    +\n *                       |    |    |    | 43 |    |\n *                       +----+----+----+----+----+\n *\n * In th example above:\n * - Cell \"02\" which have `rowspan = 4` must be trimmed at first and at after last row.\n * - Cell \"03\" which have `rowspan = 2` and `colspan = 2` must be trimmed at first column and after last row.\n * - Cells \"00\", \"03\" & \"30\" which cannot be cut by this algorithm as they are outside the trimmed area.\n * - Cell \"13\" cannot be cut as it is inside the trimmed area.\n */\nfunction splitCellsToRectangularSelection(table, dimensions, writer) {\n    const { firstRow, lastRow, firstColumn, lastColumn } = dimensions;\n    const rowIndexes = { first: firstRow, last: lastRow };\n    const columnIndexes = { first: firstColumn, last: lastColumn };\n    // 1. Split cells vertically in two steps as first step might create cells that needs to split again.\n    doVerticalSplit(table, firstColumn, rowIndexes, writer);\n    doVerticalSplit(table, lastColumn + 1, rowIndexes, writer);\n    // 2. Split cells horizontally in two steps as first step might create cells that needs to split again.\n    doHorizontalSplit(table, firstRow, columnIndexes, writer);\n    doHorizontalSplit(table, lastRow + 1, columnIndexes, writer, firstRow);\n}\nfunction doHorizontalSplit(table, splitRow, limitColumns, writer, startRow = 0) {\n    // If selection starts at first row then no split is needed.\n    if (splitRow < 1) {\n        return;\n    }\n    const overlappingCells = getVerticallyOverlappingCells(table, splitRow, startRow);\n    // Filter out cells that are not touching insides of the rectangular selection.\n    const cellsToSplit = overlappingCells.filter(({ column, cellWidth }) => isAffectedBySelection(column, cellWidth, limitColumns));\n    return cellsToSplit.map(({ cell }) => splitHorizontally(cell, splitRow, writer));\n}\nfunction doVerticalSplit(table, splitColumn, limitRows, writer) {\n    // If selection starts at first column then no split is needed.\n    if (splitColumn < 1) {\n        return;\n    }\n    const overlappingCells = getHorizontallyOverlappingCells(table, splitColumn);\n    // Filter out cells that are not touching insides of the rectangular selection.\n    const cellsToSplit = overlappingCells.filter(({ row, cellHeight }) => isAffectedBySelection(row, cellHeight, limitRows));\n    return cellsToSplit.map(({ cell, column }) => splitVertically(cell, column, splitColumn, writer));\n}\n/**\n * Checks if cell at given row (column) is affected by a rectangular selection defined by first/last column (row).\n *\n * The same check is used for row as for column.\n */\nfunction isAffectedBySelection(index, span, limit) {\n    const endIndex = index + span - 1;\n    const { first, last } = limit;\n    const isInsideSelection = index >= first && index <= last;\n    const overlapsSelectionFromOutside = index < first && endIndex >= first;\n    return isInsideSelection || overlapsSelectionFromOutside;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablekeyboard\n */\nimport TableSelection from './tableselection.js';\nimport TableWalker from './tablewalker.js';\nimport TableUtils from './tableutils.js';\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { getLocalizedArrowKeyCodeDirection } from 'ckeditor5/src/utils.js';\n/**\n * This plugin enables keyboard navigation for tables.\n * It is loaded automatically by the {@link module:table/table~Table} plugin.\n */\nexport default class TableKeyboard extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableKeyboard';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableSelection, TableUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const view = editor.editing.view;\n        const viewDocument = view.document;\n        const t = editor.t;\n        this.listenTo(viewDocument, 'arrowKey', (...args) => this._onArrowKey(...args), { context: 'table' });\n        this.listenTo(viewDocument, 'tab', (...args) => this._handleTabOnSelectedTable(...args), { context: 'figure' });\n        this.listenTo(viewDocument, 'tab', (...args) => this._handleTab(...args), { context: ['th', 'td'] });\n        // Add the information about the keystrokes to the accessibility database.\n        editor.accessibility.addKeystrokeInfoGroup({\n            id: 'table',\n            label: t('Keystrokes that can be used in a table cell'),\n            keystrokes: [\n                {\n                    label: t('Move the selection to the next cell'),\n                    keystroke: 'Tab'\n                },\n                {\n                    label: t('Move the selection to the previous cell'),\n                    keystroke: 'Shift+Tab'\n                },\n                {\n                    label: t('Insert a new table row (when in the last cell of a table)'),\n                    keystroke: 'Tab'\n                },\n                {\n                    label: t('Navigate through the table'),\n                    keystroke: [['arrowup'], ['arrowright'], ['arrowdown'], ['arrowleft']]\n                }\n            ]\n        });\n    }\n    /**\n     * Handles {@link module:engine/view/document~Document#event:tab tab} events for the <kbd>Tab</kbd> key executed\n     * when the table widget is selected.\n     */\n    _handleTabOnSelectedTable(bubblingEventInfo, domEventData) {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        const selectedElement = selection.getSelectedElement();\n        if (!selectedElement || !selectedElement.is('element', 'table')) {\n            return;\n        }\n        domEventData.preventDefault();\n        domEventData.stopPropagation();\n        bubblingEventInfo.stop();\n        editor.model.change(writer => {\n            writer.setSelection(writer.createRangeIn(selectedElement.getChild(0).getChild(0)));\n        });\n    }\n    /**\n     * Handles {@link module:engine/view/document~Document#event:tab tab} events for the <kbd>Tab</kbd> key executed\n     * inside table cells.\n     */\n    _handleTab(bubblingEventInfo, domEventData) {\n        const editor = this.editor;\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const tableSelection = this.editor.plugins.get('TableSelection');\n        const selection = editor.model.document.selection;\n        const isForward = !domEventData.shiftKey;\n        let tableCell = tableUtils.getTableCellsContainingSelection(selection)[0];\n        if (!tableCell) {\n            tableCell = tableSelection.getFocusCell();\n        }\n        if (!tableCell) {\n            return;\n        }\n        domEventData.preventDefault();\n        domEventData.stopPropagation();\n        bubblingEventInfo.stop();\n        const tableRow = tableCell.parent;\n        const table = tableRow.parent;\n        const currentRowIndex = table.getChildIndex(tableRow);\n        const currentCellIndex = tableRow.getChildIndex(tableCell);\n        const isFirstCellInRow = currentCellIndex === 0;\n        if (!isForward && isFirstCellInRow && currentRowIndex === 0) {\n            // Set the selection over the whole table if the selection was in the first table cell.\n            editor.model.change(writer => {\n                writer.setSelection(writer.createRangeOn(table));\n            });\n            return;\n        }\n        const isLastCellInRow = currentCellIndex === tableRow.childCount - 1;\n        const isLastRow = currentRowIndex === tableUtils.getRows(table) - 1;\n        if (isForward && isLastRow && isLastCellInRow) {\n            editor.execute('insertTableRowBelow');\n            // Check if the command actually added a row. If `insertTableRowBelow` execution didn't add a row (because it was disabled\n            // or it got overwritten) set the selection over the whole table to mirror the first cell case.\n            if (currentRowIndex === tableUtils.getRows(table) - 1) {\n                editor.model.change(writer => {\n                    writer.setSelection(writer.createRangeOn(table));\n                });\n                return;\n            }\n        }\n        let cellToFocus;\n        // Move to the first cell in the next row.\n        if (isForward && isLastCellInRow) {\n            const nextRow = table.getChild(currentRowIndex + 1);\n            cellToFocus = nextRow.getChild(0);\n        }\n        // Move to the last cell in the previous row.\n        else if (!isForward && isFirstCellInRow) {\n            const previousRow = table.getChild(currentRowIndex - 1);\n            cellToFocus = previousRow.getChild(previousRow.childCount - 1);\n        }\n        // Move to the next/previous cell.\n        else {\n            cellToFocus = tableRow.getChild(currentCellIndex + (isForward ? 1 : -1));\n        }\n        editor.model.change(writer => {\n            writer.setSelection(writer.createRangeIn(cellToFocus));\n        });\n    }\n    /**\n     * Handles {@link module:engine/view/document~Document#event:keydown keydown} events.\n     */\n    _onArrowKey(eventInfo, domEventData) {\n        const editor = this.editor;\n        const keyCode = domEventData.keyCode;\n        const direction = getLocalizedArrowKeyCodeDirection(keyCode, editor.locale.contentLanguageDirection);\n        const wasHandled = this._handleArrowKeys(direction, domEventData.shiftKey);\n        if (wasHandled) {\n            domEventData.preventDefault();\n            domEventData.stopPropagation();\n            eventInfo.stop();\n        }\n    }\n    /**\n     * Handles arrow keys to move the selection around the table.\n     *\n     * @param direction The direction of the arrow key.\n     * @param expandSelection If the current selection should be expanded.\n     * @returns Returns `true` if key was handled.\n     */\n    _handleArrowKeys(direction, expandSelection) {\n        const tableUtils = this.editor.plugins.get(TableUtils);\n        const tableSelection = this.editor.plugins.get('TableSelection');\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const isForward = ['right', 'down'].includes(direction);\n        // In case one or more table cells are selected (from outside),\n        // move the selection to a cell adjacent to the selected table fragment.\n        const selectedCells = tableUtils.getSelectedTableCells(selection);\n        if (selectedCells.length) {\n            let focusCell;\n            if (expandSelection) {\n                focusCell = tableSelection.getFocusCell();\n            }\n            else {\n                focusCell = isForward ? selectedCells[selectedCells.length - 1] : selectedCells[0];\n            }\n            this._navigateFromCellInDirection(focusCell, direction, expandSelection);\n            return true;\n        }\n        // Abort if we're not in a table cell.\n        const tableCell = selection.focus.findAncestor('tableCell');\n        /* istanbul ignore if: paranoid check -- @preserve */\n        if (!tableCell) {\n            return false;\n        }\n        // When the selection is not collapsed.\n        if (!selection.isCollapsed) {\n            if (expandSelection) {\n                // Navigation is in the opposite direction than the selection direction so this is shrinking of the selection.\n                // Selection for sure will not approach cell edge.\n                //\n                // With a special case when all cell content is selected - then selection should expand to the other cell.\n                // Note: When the entire cell gets selected using CTRL+A, the selection is always forward.\n                if (selection.isBackward == isForward && !selection.containsEntireContent(tableCell)) {\n                    return false;\n                }\n            }\n            else {\n                const selectedElement = selection.getSelectedElement();\n                // It will collapse for non-object selected so it's not going to move to other cell.\n                if (!selectedElement || !model.schema.isObject(selectedElement)) {\n                    return false;\n                }\n            }\n        }\n        // Let's check if the selection is at the beginning/end of the cell.\n        if (this._isSelectionAtCellEdge(selection, tableCell, isForward)) {\n            this._navigateFromCellInDirection(tableCell, direction, expandSelection);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Returns `true` if the selection is at the boundary of a table cell according to the navigation direction.\n     *\n     * @param selection The current selection.\n     * @param tableCell The current table cell element.\n     * @param isForward The expected navigation direction.\n     */\n    _isSelectionAtCellEdge(selection, tableCell, isForward) {\n        const model = this.editor.model;\n        const schema = this.editor.model.schema;\n        const focus = isForward ? selection.getLastPosition() : selection.getFirstPosition();\n        // If the current limit element is not table cell we are for sure not at the cell edge.\n        // Also `modifySelection` will not let us out of it.\n        if (!schema.getLimitElement(focus).is('element', 'tableCell')) {\n            const boundaryPosition = model.createPositionAt(tableCell, isForward ? 'end' : 0);\n            return boundaryPosition.isTouching(focus);\n        }\n        const probe = model.createSelection(focus);\n        model.modifySelection(probe, { direction: isForward ? 'forward' : 'backward' });\n        // If there was no change in the focus position, then it's not possible to move the selection there.\n        return focus.isEqual(probe.focus);\n    }\n    /**\n     * Moves the selection from the given table cell in the specified direction.\n     *\n     * @param focusCell The table cell that is current multi-cell selection focus.\n     * @param direction Direction in which selection should move.\n     * @param expandSelection If the current selection should be expanded. Default value is false.\n     */\n    _navigateFromCellInDirection(focusCell, direction, expandSelection = false) {\n        const model = this.editor.model;\n        const table = focusCell.findAncestor('table');\n        const tableMap = [...new TableWalker(table, { includeAllSlots: true })];\n        const { row: lastRow, column: lastColumn } = tableMap[tableMap.length - 1];\n        const currentCellInfo = tableMap.find(({ cell }) => cell == focusCell);\n        let { row, column } = currentCellInfo;\n        switch (direction) {\n            case 'left':\n                column--;\n                break;\n            case 'up':\n                row--;\n                break;\n            case 'right':\n                column += currentCellInfo.cellWidth;\n                break;\n            case 'down':\n                row += currentCellInfo.cellHeight;\n                break;\n        }\n        const isOutsideVertically = row < 0 || row > lastRow;\n        const isBeforeFirstCell = column < 0 && row <= 0;\n        const isAfterLastCell = column > lastColumn && row >= lastRow;\n        // Note that if the table cell at the end of a row is row-spanned then isAfterLastCell will never be true.\n        // However, we don't know if user was navigating on the last row or not, so let's stay in the table.\n        if (isOutsideVertically || isBeforeFirstCell || isAfterLastCell) {\n            model.change(writer => {\n                writer.setSelection(writer.createRangeOn(table));\n            });\n            return;\n        }\n        if (column < 0) {\n            column = expandSelection ? 0 : lastColumn;\n            row--;\n        }\n        else if (column > lastColumn) {\n            column = expandSelection ? lastColumn : 0;\n            row++;\n        }\n        const cellToSelect = tableMap.find(cellInfo => cellInfo.row == row && cellInfo.column == column).cell;\n        const isForward = ['right', 'down'].includes(direction);\n        const tableSelection = this.editor.plugins.get('TableSelection');\n        if (expandSelection && tableSelection.isEnabled) {\n            const anchorCell = tableSelection.getAnchorCell() || focusCell;\n            tableSelection.setCellSelection(anchorCell, cellToSelect);\n        }\n        else {\n            const positionToSelect = model.createPositionAt(cellToSelect, isForward ? 0 : 'end');\n            model.change(writer => {\n                writer.setSelection(positionToSelect);\n            });\n        }\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablemouse/mouseeventsobserver\n */\nimport { DomEventObserver } from 'ckeditor5/src/engine.js';\n/**\n * The mouse selection event observer.\n *\n * It registers listeners for the following DOM events:\n *\n * - `'mousemove'`\n * - `'mouseleave'`\n *\n * Note that this observer is disabled by default. To enable this observer, it needs to be added to\n * {@link module:engine/view/view~View} using the {@link module:engine/view/view~View#addObserver} method.\n *\n * The observer is registered by the {@link module:table/tableselection~TableSelection} plugin.\n */\nexport default class MouseEventsObserver extends DomEventObserver {\n    constructor() {\n        super(...arguments);\n        this.domEventType = [\n            'mousemove', 'mouseleave'\n        ];\n    }\n    /**\n     * @inheritDoc\n     */\n    onDomEvent(domEvent) {\n        this.fire(domEvent.type, domEvent);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablemouse\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport TableSelection from './tableselection.js';\nimport MouseEventsObserver from './tablemouse/mouseeventsobserver.js';\nimport TableUtils from './tableutils.js';\n/**\n * This plugin enables a table cells' selection with the mouse.\n * It is loaded automatically by the {@link module:table/table~Table} plugin.\n */\nexport default class TableMouse extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableMouse';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableSelection, TableUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        // Currently the MouseObserver only handles `mousedown` and `mouseup` events.\n        // TODO move to the engine?\n        editor.editing.view.addObserver(MouseEventsObserver);\n        this._enableShiftClickSelection();\n        this._enableMouseDragSelection();\n    }\n    /**\n     * Enables making cells selection by <kbd>Shift</kbd>+click. Creates a selection from the cell which previously held\n     * the selection to the cell which was clicked. It can be the same cell, in which case it selects a single cell.\n     */\n    _enableShiftClickSelection() {\n        const editor = this.editor;\n        const tableUtils = editor.plugins.get(TableUtils);\n        let blockSelectionChange = false;\n        const tableSelection = editor.plugins.get(TableSelection);\n        this.listenTo(editor.editing.view.document, 'mousedown', (evt, domEventData) => {\n            const selection = editor.model.document.selection;\n            if (!this.isEnabled || !tableSelection.isEnabled) {\n                return;\n            }\n            if (!domEventData.domEvent.shiftKey) {\n                return;\n            }\n            const anchorCell = tableSelection.getAnchorCell() || tableUtils.getTableCellsContainingSelection(selection)[0];\n            if (!anchorCell) {\n                return;\n            }\n            const targetCell = this._getModelTableCellFromDomEvent(domEventData);\n            if (targetCell && haveSameTableParent(anchorCell, targetCell)) {\n                blockSelectionChange = true;\n                tableSelection.setCellSelection(anchorCell, targetCell);\n                domEventData.preventDefault();\n            }\n        });\n        this.listenTo(editor.editing.view.document, 'mouseup', () => {\n            blockSelectionChange = false;\n        });\n        // We need to ignore a `selectionChange` event that is fired after we render our new table cells selection.\n        // When downcasting table cells selection to the view, we put the view selection in the last selected cell\n        // in a place that may not be natively a \"correct\" location. This is – we put it directly in the `<td>` element.\n        // All browsers fire the native `selectionchange` event.\n        // However, all browsers except Safari return the selection in the exact place where we put it\n        // (even though it's visually normalized). Safari returns `<td><p>^foo` that makes our selection observer\n        // fire our `selectionChange` event (because the view selection that we set in the first step differs from the DOM selection).\n        // Since `selectionChange` is fired, we automatically update the model selection that moves it that paragraph.\n        // This breaks our dear cells selection.\n        //\n        // Theoretically this issue concerns only Safari that is the only browser that do normalize the selection.\n        // However, to avoid code branching and to have a good coverage for this event blocker, I enabled it for all browsers.\n        //\n        // Note: I'm keeping the `blockSelectionChange` state separately for shift+click and mouse drag (exact same logic)\n        // so I don't have to try to analyze whether they don't overlap in some weird cases. Probably they don't.\n        // But I have other things to do, like writing this comment.\n        this.listenTo(editor.editing.view.document, 'selectionChange', evt => {\n            if (blockSelectionChange) {\n                // @if CK_DEBUG // console.log( 'Blocked selectionChange to avoid breaking table cells selection.' );\n                evt.stop();\n            }\n        }, { priority: 'highest' });\n    }\n    /**\n     * Enables making cells selection by dragging.\n     *\n     * The selection is made only on mousemove. Mouse tracking is started on mousedown.\n     * However, the cells selection is enabled only after the mouse cursor left the anchor cell.\n     * Thanks to that normal text selection within one cell works just fine. However, you can still select\n     * just one cell by leaving the anchor cell and moving back to it.\n     */\n    _enableMouseDragSelection() {\n        const editor = this.editor;\n        let anchorCell, targetCell;\n        let beganCellSelection = false;\n        let blockSelectionChange = false;\n        const tableSelection = editor.plugins.get(TableSelection);\n        this.listenTo(editor.editing.view.document, 'mousedown', (evt, domEventData) => {\n            if (!this.isEnabled || !tableSelection.isEnabled) {\n                return;\n            }\n            // Make sure to not conflict with the shift+click listener and any other possible handler.\n            if (domEventData.domEvent.shiftKey || domEventData.domEvent.ctrlKey || domEventData.domEvent.altKey) {\n                return;\n            }\n            anchorCell = this._getModelTableCellFromDomEvent(domEventData);\n        });\n        this.listenTo(editor.editing.view.document, 'mousemove', (evt, domEventData) => {\n            if (!domEventData.domEvent.buttons) {\n                return;\n            }\n            if (!anchorCell) {\n                return;\n            }\n            const newTargetCell = this._getModelTableCellFromDomEvent(domEventData);\n            if (newTargetCell && haveSameTableParent(anchorCell, newTargetCell)) {\n                targetCell = newTargetCell;\n                // Switch to the cell selection mode after the mouse cursor left the anchor cell.\n                // Switch off only on mouseup (makes selecting a single cell possible).\n                if (!beganCellSelection && targetCell != anchorCell) {\n                    beganCellSelection = true;\n                }\n            }\n            // Yep, not making a cell selection yet. See method docs.\n            if (!beganCellSelection) {\n                return;\n            }\n            blockSelectionChange = true;\n            tableSelection.setCellSelection(anchorCell, targetCell);\n            domEventData.preventDefault();\n        });\n        this.listenTo(editor.editing.view.document, 'mouseup', () => {\n            beganCellSelection = false;\n            blockSelectionChange = false;\n            anchorCell = null;\n            targetCell = null;\n        });\n        // See the explanation in `_enableShiftClickSelection()`.\n        this.listenTo(editor.editing.view.document, 'selectionChange', evt => {\n            if (blockSelectionChange) {\n                // @if CK_DEBUG // console.log( 'Blocked selectionChange to avoid breaking table cells selection.' );\n                evt.stop();\n            }\n        }, { priority: 'highest' });\n    }\n    /**\n     * Returns the model table cell element based on the target element of the passed DOM event.\n     *\n     * @returns Returns the table cell or `undefined`.\n     */\n    _getModelTableCellFromDomEvent(domEventData) {\n        // Note: Work with positions (not element mapping) because the target element can be an attribute or other non-mapped element.\n        const viewTargetElement = domEventData.target;\n        const viewPosition = this.editor.editing.view.createPositionAt(viewTargetElement, 0);\n        const modelPosition = this.editor.editing.mapper.toModelPosition(viewPosition);\n        const modelElement = modelPosition.parent;\n        return modelElement.findAncestor('tableCell', { includeSelf: true });\n    }\n}\nfunction haveSameTableParent(cellA, cellB) {\n    return cellA.parent.parent == cellB.parent.parent;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/ui/colorinputview\n */\nimport { View, InputTextView, createDropdown, FocusCycler, ViewCollection, ColorSelectorView } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\nimport '../../theme/colorinput.css';\n/**\n * The color input view class. It allows the user to type in a color (hex, rgb, etc.)\n * or choose it from the configurable color palette with a preview.\n *\n * @internal\n */\nexport default class ColorInputView extends View {\n    /**\n     * Creates an instance of the color input view.\n     *\n     * @param locale The locale instance.\n     * @param options The input options.\n     * @param options.colorDefinitions The colors to be displayed in the palette inside the input's dropdown.\n     * @param options.columns The number of columns in which the colors will be displayed.\n     * @param options.defaultColorValue If specified, the color input view will replace the \"Remove color\" button with\n     * the \"Restore default\" button. Instead of clearing the input field, the default color value will be set.\n     */\n    constructor(locale, options) {\n        super(locale);\n        this.set('value', '');\n        this.set('isReadOnly', false);\n        this.set('isFocused', false);\n        this.set('isEmpty', true);\n        this.options = options;\n        this.focusTracker = new FocusTracker();\n        this._focusables = new ViewCollection();\n        this.dropdownView = this._createDropdownView();\n        this.inputView = this._createInputTextView();\n        this.keystrokes = new KeystrokeHandler();\n        this._stillTyping = false;\n        this.focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate items backwards using the <kbd>Shift</kbd> + <kbd>Tab</kbd> keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate items forwards using the <kbd>Tab</kbd> key.\n                focusNext: 'tab'\n            }\n        });\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-input-color'\n                ]\n            },\n            children: [\n                this.dropdownView,\n                this.inputView\n            ]\n        });\n        this.on('change:value', (evt, name, inputValue) => this._setInputValue(inputValue));\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        [this.inputView, this.dropdownView.buttonView].forEach(view => {\n            this.focusTracker.add(view.element);\n            this._focusables.add(view);\n        });\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * Focuses the view.\n     */\n    focus(direction) {\n        if (direction === -1) {\n            this.focusCycler.focusLast();\n        }\n        else {\n            this.focusCycler.focusFirst();\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Creates and configures the {@link #dropdownView}.\n     */\n    _createDropdownView() {\n        const locale = this.locale;\n        const t = locale.t;\n        const bind = this.bindTemplate;\n        const colorSelector = this._createColorSelector(locale);\n        const dropdown = createDropdown(locale);\n        const colorPreview = new View();\n        colorPreview.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-input-color__button__preview'\n                ],\n                style: {\n                    backgroundColor: bind.to('value')\n                }\n            },\n            children: [{\n                    tag: 'span',\n                    attributes: {\n                        class: [\n                            'ck',\n                            'ck-input-color__button__preview__no-color-indicator',\n                            bind.if('value', 'ck-hidden', value => value != '')\n                        ]\n                    }\n                }]\n        });\n        dropdown.buttonView.extendTemplate({\n            attributes: {\n                class: 'ck-input-color__button'\n            }\n        });\n        dropdown.buttonView.children.add(colorPreview);\n        dropdown.buttonView.label = t('Color picker');\n        dropdown.buttonView.tooltip = true;\n        dropdown.panelPosition = locale.uiLanguageDirection === 'rtl' ? 'se' : 'sw';\n        dropdown.panelView.children.add(colorSelector);\n        dropdown.bind('isEnabled').to(this, 'isReadOnly', value => !value);\n        dropdown.on('change:isOpen', (evt, name, isVisible) => {\n            if (isVisible) {\n                colorSelector.updateSelectedColors();\n                colorSelector.showColorGridsFragment();\n            }\n        });\n        return dropdown;\n    }\n    /**\n     * Creates and configures an instance of {@link module:ui/inputtext/inputtextview~InputTextView}.\n     *\n     * @returns A configured instance to be set as {@link #inputView}.\n     */\n    _createInputTextView() {\n        const locale = this.locale;\n        const inputView = new InputTextView(locale);\n        inputView.extendTemplate({\n            on: {\n                blur: inputView.bindTemplate.to('blur')\n            }\n        });\n        inputView.value = this.value;\n        inputView.bind('isReadOnly', 'hasError').to(this);\n        this.bind('isFocused', 'isEmpty').to(inputView);\n        inputView.on('input', () => {\n            const inputValue = inputView.element.value;\n            // Check if the value matches one of our defined colors' label.\n            const mappedColor = this.options.colorDefinitions.find(def => inputValue === def.label);\n            this._stillTyping = true;\n            this.value = mappedColor && mappedColor.color || inputValue;\n        });\n        inputView.on('blur', () => {\n            this._stillTyping = false;\n            this._setInputValue(inputView.element.value);\n        });\n        inputView.delegate('input').to(this);\n        return inputView;\n    }\n    /**\n     * Creates and configures the panel with \"color grid\" and \"color picker\" inside the {@link #dropdownView}.\n     */\n    _createColorSelector(locale) {\n        const t = locale.t;\n        const defaultColor = this.options.defaultColorValue || '';\n        const removeColorButtonLabel = defaultColor ? t('Restore default') : t('Remove color');\n        const colorSelector = new ColorSelectorView(locale, {\n            colors: this.options.colorDefinitions,\n            columns: this.options.columns,\n            removeButtonLabel: removeColorButtonLabel,\n            colorPickerLabel: t('Color picker'),\n            colorPickerViewConfig: this.options.colorPickerConfig === false ? false : {\n                ...this.options.colorPickerConfig,\n                hideInput: true\n            }\n        });\n        colorSelector.appendUI();\n        colorSelector.on('execute', (evt, data) => {\n            if (data.source === 'colorPickerSaveButton') {\n                this.dropdownView.isOpen = false;\n                return;\n            }\n            this.value = data.value || defaultColor;\n            // Trigger the listener that actually applies the set value.\n            this.fire('input');\n            if (data.source !== 'colorPicker') {\n                this.dropdownView.isOpen = false;\n            }\n        });\n        /**\n         * Color is saved before changes in color picker. In case \"cancel button\" is pressed\n         * this color will be applied.\n         */\n        let backupColor = this.value;\n        colorSelector.on('colorPicker:cancel', () => {\n            /**\n             * Revert color to previous value before changes in color picker.\n             */\n            this.value = backupColor;\n            this.fire('input');\n            this.dropdownView.isOpen = false;\n        });\n        colorSelector.colorGridsFragmentView.colorPickerButtonView.on('execute', () => {\n            /**\n             * Save color value before changes in color picker.\n             */\n            backupColor = this.value;\n        });\n        colorSelector.bind('selectedColor').to(this, 'value');\n        return colorSelector;\n    }\n    /**\n     * Sets {@link #inputView}'s value property to the color value or color label,\n     * if there is one and the user is not typing.\n     *\n     * Handles cases like:\n     *\n     * * Someone picks the color in the grid.\n     * * The color is set from the plugin level.\n     *\n     * @param inputValue Color value to be set.\n     */\n    _setInputValue(inputValue) {\n        if (!this._stillTyping) {\n            const normalizedInputValue = normalizeColor(inputValue);\n            // Check if the value matches one of our defined colors.\n            const mappedColor = this.options.colorDefinitions.find(def => normalizedInputValue === normalizeColor(def.color));\n            if (mappedColor) {\n                this.inputView.value = mappedColor.label;\n            }\n            else {\n                this.inputView.value = inputValue || '';\n            }\n        }\n    }\n}\n/**\n * Normalizes color value, by stripping extensive whitespace.\n * For example., transforms:\n * * `   rgb(  25 50    0 )` to `rgb(25 50 0)`,\n * * \"\\t  rgb(  25 ,  50,0 )\t\t\" to `rgb(25 50 0)`.\n *\n * @param colorString The value to be normalized.\n */\nfunction normalizeColor(colorString) {\n    return colorString\n        // Remove any whitespace right after `(` or `,`.\n        .replace(/([(,])\\s+/g, '$1')\n        // Remove any whitespace at the beginning or right before the end, `)`, `,`, or another whitespace.\n        .replace(/^\\s+|\\s+(?=[),\\s]|$)/g, '')\n        // Then, replace `,` or whitespace with a single space.\n        .replace(/,|\\s/g, ' ');\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/utils/ui/table-properties\n */\nimport { ButtonView, ViewModel } from 'ckeditor5/src/ui.js';\nimport { Collection } from 'ckeditor5/src/utils.js';\nimport { isColor, isLength, isPercentage } from 'ckeditor5/src/engine.js';\nimport ColorInputView from '../../ui/colorinputview.js';\nconst isEmpty = (val) => val === '';\n/**\n * Returns an object containing pairs of CSS border style values and their localized UI\n * labels. Used by {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView}\n * and {@link module:table/tableproperties/ui/tablepropertiesview~TablePropertiesView}.\n *\n * @param t The \"t\" function provided by the editor that is used to localize strings.\n */\nexport function getBorderStyleLabels(t) {\n    return {\n        none: t('None'),\n        solid: t('Solid'),\n        dotted: t('Dotted'),\n        dashed: t('Dashed'),\n        double: t('Double'),\n        groove: t('Groove'),\n        ridge: t('Ridge'),\n        inset: t('Inset'),\n        outset: t('Outset')\n    };\n}\n/**\n * Returns a localized error string that can be displayed next to color (background, border)\n * fields that have an invalid value.\n *\n * @param t The \"t\" function provided by the editor that is used to localize strings.\n */\nexport function getLocalizedColorErrorText(t) {\n    return t('The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".');\n}\n/**\n * Returns a localized error string that can be displayed next to length (padding, border width)\n * fields that have an invalid value.\n *\n * @param t The \"t\" function provided by the editor that is used to localize strings.\n */\nexport function getLocalizedLengthErrorText(t) {\n    return t('The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".');\n}\n/**\n * Returns `true` when the passed value is an empty string or a valid CSS color expression.\n * Otherwise, `false` is returned.\n *\n * See {@link module:engine/view/styles/utils~isColor}.\n */\nexport function colorFieldValidator(value) {\n    value = value.trim().toLowerCase();\n    return isEmpty(value) || isColor(value);\n}\n/**\n * Returns `true` when the passed value is an empty string, a number without a unit or a valid CSS length expression.\n * Otherwise, `false` is returned.\n *\n * See {@link module:engine/view/styles/utils~isLength}.\n * See {@link module:engine/view/styles/utils~isPercentage}.\n */\nexport function lengthFieldValidator(value) {\n    value = value.trim();\n    return isEmpty(value) || isNumberString(value) || isLength(value) || isPercentage(value);\n}\n/**\n * Returns `true` when the passed value is an empty string, a number without a unit or a valid CSS length expression.\n * Otherwise, `false` is returned.\n *\n * See {@link module:engine/view/styles/utils~isLength}.\n */\nexport function lineWidthFieldValidator(value) {\n    value = value.trim();\n    return isEmpty(value) || isNumberString(value) || isLength(value);\n}\n/**\n * Generates item definitions for a UI dropdown that allows changing the border style of a table or a table cell.\n *\n * @param defaultStyle The default border.\n */\nexport function getBorderStyleDefinitions(view, defaultStyle) {\n    const itemDefinitions = new Collection();\n    const styleLabels = getBorderStyleLabels(view.t);\n    for (const style in styleLabels) {\n        const definition = {\n            type: 'button',\n            model: new ViewModel({\n                _borderStyleValue: style,\n                label: styleLabels[style],\n                role: 'menuitemradio',\n                withText: true\n            })\n        };\n        if (style === 'none') {\n            definition.model.bind('isOn').to(view, 'borderStyle', value => {\n                if (defaultStyle === 'none') {\n                    return !value;\n                }\n                return value === style;\n            });\n        }\n        else {\n            definition.model.bind('isOn').to(view, 'borderStyle', value => {\n                return value === style;\n            });\n        }\n        itemDefinitions.add(definition);\n    }\n    return itemDefinitions;\n}\n/**\n * A helper that fills a toolbar with buttons that:\n *\n * * have some labels,\n * * have some icons,\n * * set a certain UI view property value upon execution.\n *\n * @param nameToValue A function that maps a button name to a value. By default names are the same as values.\n */\nexport function fillToolbar(options) {\n    const { view, icons, toolbar, labels, propertyName, nameToValue, defaultValue } = options;\n    for (const name in labels) {\n        const button = new ButtonView(view.locale);\n        button.set({\n            label: labels[name],\n            icon: icons[name],\n            tooltip: labels[name]\n        });\n        // If specified the `nameToValue()` callback, map the value based on the option's name.\n        const buttonValue = nameToValue ? nameToValue(name) : name;\n        button.bind('isOn').to(view, propertyName, value => {\n            // `value` comes from `view[ propertyName ]`.\n            let valueToCompare = value;\n            // If it's empty, and the `defaultValue` is specified, use it instead.\n            if (value === '' && defaultValue) {\n                valueToCompare = defaultValue;\n            }\n            return buttonValue === valueToCompare;\n        });\n        button.on('execute', () => {\n            view[propertyName] = buttonValue;\n        });\n        toolbar.items.add(button);\n    }\n}\n/**\n * A default color palette used by various user interfaces related to tables, for instance,\n * by {@link module:table/tablecellproperties/tablecellpropertiesui~TableCellPropertiesUI} or\n * {@link module:table/tableproperties/tablepropertiesui~TablePropertiesUI}.\n *\n * The color palette follows the {@link module:table/tableconfig~TableColorConfig table color configuration format}\n * and contains the following color definitions:\n *\n * ```ts\n * const defaultColors = [\n *   {\n *     color: 'hsl(0, 0%, 0%)',\n *     label: 'Black'\n *   },\n *   {\n *     color: 'hsl(0, 0%, 30%)',\n *     label: 'Dim grey'\n *   },\n *   {\n *     color: 'hsl(0, 0%, 60%)',\n *     label: 'Grey'\n *   },\n *   {\n *     color: 'hsl(0, 0%, 90%)',\n *     label: 'Light grey'\n *   },\n *   {\n *     color: 'hsl(0, 0%, 100%)',\n *     label: 'White',\n *     hasBorder: true\n *   },\n *   {\n *     color: 'hsl(0, 75%, 60%)',\n *     label: 'Red'\n *   },\n *   {\n *     color: 'hsl(30, 75%, 60%)',\n *     label: 'Orange'\n *   },\n *   {\n *     color: 'hsl(60, 75%, 60%)',\n *     label: 'Yellow'\n *   },\n *   {\n *     color: 'hsl(90, 75%, 60%)',\n *     label: 'Light green'\n *   },\n *   {\n *     color: 'hsl(120, 75%, 60%)',\n *     label: 'Green'\n *   },\n *   {\n *     color: 'hsl(150, 75%, 60%)',\n *     label: 'Aquamarine'\n *   },\n *   {\n *     color: 'hsl(180, 75%, 60%)',\n *     label: 'Turquoise'\n *   },\n *   {\n *     color: 'hsl(210, 75%, 60%)',\n *     label: 'Light blue'\n *   },\n *   {\n *     color: 'hsl(240, 75%, 60%)',\n *     label: 'Blue'\n *   },\n *   {\n *     color: 'hsl(270, 75%, 60%)',\n *     label: 'Purple'\n *   }\n * ];\n * ```\n */\nexport const defaultColors = [\n    {\n        color: 'hsl(0, 0%, 0%)',\n        label: 'Black'\n    },\n    {\n        color: 'hsl(0, 0%, 30%)',\n        label: 'Dim grey'\n    },\n    {\n        color: 'hsl(0, 0%, 60%)',\n        label: 'Grey'\n    },\n    {\n        color: 'hsl(0, 0%, 90%)',\n        label: 'Light grey'\n    },\n    {\n        color: 'hsl(0, 0%, 100%)',\n        label: 'White',\n        hasBorder: true\n    },\n    {\n        color: 'hsl(0, 75%, 60%)',\n        label: 'Red'\n    },\n    {\n        color: 'hsl(30, 75%, 60%)',\n        label: 'Orange'\n    },\n    {\n        color: 'hsl(60, 75%, 60%)',\n        label: 'Yellow'\n    },\n    {\n        color: 'hsl(90, 75%, 60%)',\n        label: 'Light green'\n    },\n    {\n        color: 'hsl(120, 75%, 60%)',\n        label: 'Green'\n    },\n    {\n        color: 'hsl(150, 75%, 60%)',\n        label: 'Aquamarine'\n    },\n    {\n        color: 'hsl(180, 75%, 60%)',\n        label: 'Turquoise'\n    },\n    {\n        color: 'hsl(210, 75%, 60%)',\n        label: 'Light blue'\n    },\n    {\n        color: 'hsl(240, 75%, 60%)',\n        label: 'Blue'\n    },\n    {\n        color: 'hsl(270, 75%, 60%)',\n        label: 'Purple'\n    }\n];\n/**\n * Returns a creator for a color input with a label.\n *\n * For given options, it returns a function that creates an instance of a\n * {@link module:table/ui/colorinputview~ColorInputView color input} logically related to\n * a {@link module:ui/labeledfield/labeledfieldview~LabeledFieldView labeled view} in the DOM.\n *\n * The helper does the following:\n *\n * * It sets the color input `id` and `ariaDescribedById` attributes.\n * * It binds the color input `isReadOnly` to the labeled view.\n * * It binds the color input `hasError` to the labeled view.\n * * It enables a logic that cleans up the error when the user starts typing in the color input.\n *\n * Usage:\n *\n * ```ts\n * const colorInputCreator = getLabeledColorInputCreator( {\n *   colorConfig: [ ... ],\n *   columns: 3,\n * } );\n *\n * const labeledInputView = new LabeledFieldView( locale, colorInputCreator );\n * console.log( labeledInputView.view ); // A color input instance.\n * ```\n *\n * @internal\n * @param options Color input options.\n * @param options.colorConfig The configuration of the color palette displayed in the input's dropdown.\n * @param options.columns The configuration of the number of columns the color palette consists of in the input's dropdown.\n * @param options.defaultColorValue If specified, the color input view will replace the \"Remove color\" button with\n * the \"Restore default\" button. Instead of clearing the input field, the default color value will be set.\n * @param options.colorPickerConfig The configuration of the color picker. You could disable it or define your output format.\n */\nexport function getLabeledColorInputCreator(options) {\n    return (labeledFieldView, viewUid, statusUid) => {\n        const colorInputView = new ColorInputView(labeledFieldView.locale, {\n            colorDefinitions: colorConfigToColorGridDefinitions(options.colorConfig),\n            columns: options.columns,\n            defaultColorValue: options.defaultColorValue,\n            colorPickerConfig: options.colorPickerConfig\n        });\n        colorInputView.inputView.set({\n            id: viewUid,\n            ariaDescribedById: statusUid\n        });\n        colorInputView.bind('isReadOnly').to(labeledFieldView, 'isEnabled', value => !value);\n        colorInputView.bind('hasError').to(labeledFieldView, 'errorText', value => !!value);\n        colorInputView.on('input', () => {\n            // UX: Make the error text disappear and disable the error indicator as the user\n            // starts fixing the errors.\n            labeledFieldView.errorText = null;\n        });\n        labeledFieldView.bind('isEmpty', 'isFocused').to(colorInputView);\n        return colorInputView;\n    };\n}\n/**\n * A simple helper method to detect number strings.\n * I allows full number notation, so omitting 0 is not allowed:\n */\nfunction isNumberString(value) {\n    const parsedValue = parseFloat(value);\n    return !Number.isNaN(parsedValue) && value === String(parsedValue);\n}\nfunction colorConfigToColorGridDefinitions(colorConfig) {\n    return colorConfig.map(item => ({\n        color: item.model,\n        label: item.label,\n        options: {\n            hasBorder: item.hasBorder\n        }\n    }));\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/ui/formrowview\n */\nimport { View } from 'ckeditor5/src/ui.js';\nimport '../../theme/formrow.css';\n/**\n * The class representing a single row in a complex form,\n * used by {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView}.\n *\n * **Note**: For now this class is private. When more use cases arrive (beyond ckeditor5-table),\n * it will become a component in ckeditor5-ui.\n *\n * @internal\n */\nexport default class FormRowView extends View {\n    /**\n     * Creates an instance of the form row class.\n     *\n     * @param locale The locale instance.\n     * @param options.labelView When passed, the row gets the `group` and `aria-labelledby`\n     * DOM attributes and gets described by the label.\n     */\n    constructor(locale, options = {}) {\n        super(locale);\n        const bind = this.bindTemplate;\n        this.set('class', options.class || null);\n        this.children = this.createCollection();\n        if (options.children) {\n            options.children.forEach(child => this.children.add(child));\n        }\n        this.set('_role', null);\n        this.set('_ariaLabelledBy', null);\n        if (options.labelView) {\n            this.set({\n                _role: 'group',\n                _ariaLabelledBy: options.labelView.id\n            });\n        }\n        this.setTemplate({\n            tag: 'div',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-form__row',\n                    bind.to('class')\n                ],\n                role: bind.to('_role'),\n                'aria-labelledby': bind.to('_ariaLabelledBy')\n            },\n            children: this.children\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablecellproperties/ui/tablecellpropertiesview\n */\nimport { addListToDropdown, ButtonView, createLabeledDropdown, createLabeledInputText, FocusCycler, FormHeaderView, LabeledFieldView, LabelView, submitHandler, ToolbarView, View, ViewCollection } from 'ckeditor5/src/ui.js';\nimport { KeystrokeHandler, FocusTracker } from 'ckeditor5/src/utils.js';\nimport { icons } from 'ckeditor5/src/core.js';\nimport { fillToolbar, getBorderStyleDefinitions, getBorderStyleLabels, getLabeledColorInputCreator } from '../../utils/ui/table-properties.js';\nimport FormRowView from '../../ui/formrowview.js';\nimport '../../../theme/form.css';\nimport '../../../theme/tableform.css';\nimport '../../../theme/tablecellproperties.css';\n/**\n * The class representing a table cell properties form, allowing users to customize\n * certain style aspects of a table cell, for instance, border, padding, text alignment, etc..\n */\nexport default class TableCellPropertiesView extends View {\n    /**\n     * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n     * @param options Additional configuration of the view.\n     * @param options.borderColors A configuration of the border color palette used by the\n     * {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView#borderColorInput}.\n     * @param options.backgroundColors A configuration of the background color palette used by the\n     * {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView#backgroundInput}.\n     * @param options.defaultTableCellProperties The default table cell properties.\n     */\n    constructor(locale, options) {\n        super(locale);\n        this.set({\n            borderStyle: '',\n            borderWidth: '',\n            borderColor: '',\n            padding: '',\n            backgroundColor: '',\n            width: '',\n            height: '',\n            horizontalAlignment: '',\n            verticalAlignment: ''\n        });\n        this.options = options;\n        const { borderStyleDropdown, borderWidthInput, borderColorInput, borderRowLabel } = this._createBorderFields();\n        const { backgroundRowLabel, backgroundInput } = this._createBackgroundFields();\n        const { widthInput, operatorLabel, heightInput, dimensionsLabel } = this._createDimensionFields();\n        const { horizontalAlignmentToolbar, verticalAlignmentToolbar, alignmentLabel } = this._createAlignmentFields();\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.children = this.createCollection();\n        this.borderStyleDropdown = borderStyleDropdown;\n        this.borderWidthInput = borderWidthInput;\n        this.borderColorInput = borderColorInput;\n        this.backgroundInput = backgroundInput;\n        this.paddingInput = this._createPaddingField();\n        this.widthInput = widthInput;\n        this.heightInput = heightInput;\n        this.horizontalAlignmentToolbar = horizontalAlignmentToolbar;\n        this.verticalAlignmentToolbar = verticalAlignmentToolbar;\n        // Defer creating to make sure other fields are present and the Save button can\n        // bind its #isEnabled to their error messages so there's no way to save unless all\n        // fields are valid.\n        const { saveButtonView, cancelButtonView } = this._createActionButtons();\n        this.saveButtonView = saveButtonView;\n        this.cancelButtonView = cancelButtonView;\n        this._focusables = new ViewCollection();\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        // Form header.\n        this.children.add(new FormHeaderView(locale, {\n            label: this.t('Cell properties')\n        }));\n        // Border row.\n        this.children.add(new FormRowView(locale, {\n            labelView: borderRowLabel,\n            children: [\n                borderRowLabel,\n                borderStyleDropdown,\n                borderColorInput,\n                borderWidthInput\n            ],\n            class: 'ck-table-form__border-row'\n        }));\n        // Background.\n        this.children.add(new FormRowView(locale, {\n            labelView: backgroundRowLabel,\n            children: [\n                backgroundRowLabel,\n                backgroundInput\n            ],\n            class: 'ck-table-form__background-row'\n        }));\n        // Dimensions row and padding.\n        this.children.add(new FormRowView(locale, {\n            children: [\n                // Dimensions row.\n                new FormRowView(locale, {\n                    labelView: dimensionsLabel,\n                    children: [\n                        dimensionsLabel,\n                        widthInput,\n                        operatorLabel,\n                        heightInput\n                    ],\n                    class: 'ck-table-form__dimensions-row'\n                }),\n                // Padding row.\n                new FormRowView(locale, {\n                    children: [\n                        this.paddingInput\n                    ],\n                    class: 'ck-table-cell-properties-form__padding-row'\n                })\n            ]\n        }));\n        // Text alignment row.\n        this.children.add(new FormRowView(locale, {\n            labelView: alignmentLabel,\n            children: [\n                alignmentLabel,\n                horizontalAlignmentToolbar,\n                verticalAlignmentToolbar\n            ],\n            class: 'ck-table-cell-properties-form__alignment-row'\n        }));\n        // Action row.\n        this.children.add(new FormRowView(locale, {\n            children: [\n                this.saveButtonView,\n                this.cancelButtonView\n            ],\n            class: 'ck-table-form__action-row'\n        }));\n        this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-form',\n                    'ck-table-form',\n                    'ck-table-cell-properties-form'\n                ],\n                // https://github.com/ckeditor/ckeditor5-link/issues/90\n                tabindex: '-1'\n            },\n            children: this.children\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        // Enable the \"submit\" event for this view. It can be triggered by the #saveButtonView\n        // which is of the \"submit\" DOM \"type\".\n        submitHandler({\n            view: this\n        });\n        // Maintain continuous focus cycling over views that have focusable children and focus cyclers themselves.\n        [this.borderColorInput, this.backgroundInput].forEach(view => {\n            this._focusCycler.chain(view.fieldView.focusCycler);\n        });\n        [\n            this.borderStyleDropdown,\n            this.borderColorInput,\n            this.borderWidthInput,\n            this.backgroundInput,\n            this.widthInput,\n            this.heightInput,\n            this.paddingInput,\n            this.horizontalAlignmentToolbar,\n            this.verticalAlignmentToolbar,\n            this.saveButtonView,\n            this.cancelButtonView\n        ].forEach(view => {\n            // Register the view as focusable.\n            this._focusables.add(view);\n            // Register the view in the focus tracker.\n            this.focusTracker.add(view.element);\n        });\n        // Mainly for closing using \"Esc\" and navigation using \"Tab\".\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the fist focusable field in the form.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #borderStyleDropdown},\n     * * {@link #borderWidthInput},\n     * * {@link #borderColorInput}.\n     */\n    _createBorderFields() {\n        const defaultTableCellProperties = this.options.defaultTableCellProperties;\n        const defaultBorder = {\n            style: defaultTableCellProperties.borderStyle,\n            width: defaultTableCellProperties.borderWidth,\n            color: defaultTableCellProperties.borderColor\n        };\n        const colorInputCreator = getLabeledColorInputCreator({\n            colorConfig: this.options.borderColors,\n            columns: 5,\n            defaultColorValue: defaultBorder.color,\n            colorPickerConfig: this.options.colorPickerConfig\n        });\n        const locale = this.locale;\n        const t = this.t;\n        const accessibleLabel = t('Style');\n        // -- Group label ---------------------------------------------\n        const borderRowLabel = new LabelView(locale);\n        borderRowLabel.text = t('Border');\n        // -- Style ---------------------------------------------------\n        const styleLabels = getBorderStyleLabels(t);\n        const borderStyleDropdown = new LabeledFieldView(locale, createLabeledDropdown);\n        borderStyleDropdown.set({\n            label: accessibleLabel,\n            class: 'ck-table-form__border-style'\n        });\n        borderStyleDropdown.fieldView.buttonView.set({\n            ariaLabel: accessibleLabel,\n            ariaLabelledBy: undefined,\n            isOn: false,\n            withText: true,\n            tooltip: accessibleLabel\n        });\n        borderStyleDropdown.fieldView.buttonView.bind('label').to(this, 'borderStyle', value => {\n            return styleLabels[value ? value : 'none'];\n        });\n        borderStyleDropdown.fieldView.on('execute', evt => {\n            this.borderStyle = evt.source._borderStyleValue;\n        });\n        borderStyleDropdown.bind('isEmpty').to(this, 'borderStyle', value => !value);\n        addListToDropdown(borderStyleDropdown.fieldView, getBorderStyleDefinitions(this, defaultBorder.style), {\n            role: 'menu',\n            ariaLabel: accessibleLabel\n        });\n        // -- Width ---------------------------------------------------\n        const borderWidthInput = new LabeledFieldView(locale, createLabeledInputText);\n        borderWidthInput.set({\n            label: t('Width'),\n            class: 'ck-table-form__border-width'\n        });\n        borderWidthInput.fieldView.bind('value').to(this, 'borderWidth');\n        borderWidthInput.bind('isEnabled').to(this, 'borderStyle', isBorderStyleSet);\n        borderWidthInput.fieldView.on('input', () => {\n            this.borderWidth = borderWidthInput.fieldView.element.value;\n        });\n        // -- Color ---------------------------------------------------\n        const borderColorInput = new LabeledFieldView(locale, colorInputCreator);\n        borderColorInput.set({\n            label: t('Color'),\n            class: 'ck-table-form__border-color'\n        });\n        borderColorInput.fieldView.bind('value').to(this, 'borderColor');\n        borderColorInput.bind('isEnabled').to(this, 'borderStyle', isBorderStyleSet);\n        borderColorInput.fieldView.on('input', () => {\n            this.borderColor = borderColorInput.fieldView.value;\n        });\n        // Reset the border color and width fields depending on the `border-style` value.\n        this.on('change:borderStyle', (evt, name, newValue, oldValue) => {\n            // When removing the border (`border-style:none`), clear the remaining `border-*` properties.\n            // See: https://github.com/ckeditor/ckeditor5/issues/6227.\n            if (!isBorderStyleSet(newValue)) {\n                this.borderColor = '';\n                this.borderWidth = '';\n            }\n            // When setting the `border-style` from `none`, set the default `border-color` and `border-width` properties.\n            if (!isBorderStyleSet(oldValue)) {\n                this.borderColor = defaultBorder.color;\n                this.borderWidth = defaultBorder.width;\n            }\n        });\n        return {\n            borderRowLabel,\n            borderStyleDropdown,\n            borderColorInput,\n            borderWidthInput\n        };\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #backgroundInput}.\n     */\n    _createBackgroundFields() {\n        const locale = this.locale;\n        const t = this.t;\n        // -- Group label ---------------------------------------------\n        const backgroundRowLabel = new LabelView(locale);\n        backgroundRowLabel.text = t('Background');\n        // -- Background color input -----------------------------------\n        const colorInputCreator = getLabeledColorInputCreator({\n            colorConfig: this.options.backgroundColors,\n            columns: 5,\n            defaultColorValue: this.options.defaultTableCellProperties.backgroundColor,\n            colorPickerConfig: this.options.colorPickerConfig\n        });\n        const backgroundInput = new LabeledFieldView(locale, colorInputCreator);\n        backgroundInput.set({\n            label: t('Color'),\n            class: 'ck-table-cell-properties-form__background'\n        });\n        backgroundInput.fieldView.bind('value').to(this, 'backgroundColor');\n        backgroundInput.fieldView.on('input', () => {\n            this.backgroundColor = backgroundInput.fieldView.value;\n        });\n        return {\n            backgroundRowLabel,\n            backgroundInput\n        };\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #widthInput}.\n     * * {@link #heightInput}.\n     */\n    _createDimensionFields() {\n        const locale = this.locale;\n        const t = this.t;\n        // -- Label ---------------------------------------------------\n        const dimensionsLabel = new LabelView(locale);\n        dimensionsLabel.text = t('Dimensions');\n        // -- Width ---------------------------------------------------\n        const widthInput = new LabeledFieldView(locale, createLabeledInputText);\n        widthInput.set({\n            label: t('Width'),\n            class: 'ck-table-form__dimensions-row__width'\n        });\n        widthInput.fieldView.bind('value').to(this, 'width');\n        widthInput.fieldView.on('input', () => {\n            this.width = widthInput.fieldView.element.value;\n        });\n        // -- Operator ---------------------------------------------------\n        const operatorLabel = new View(locale);\n        operatorLabel.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck-table-form__dimension-operator'\n                ]\n            },\n            children: [\n                { text: '×' }\n            ]\n        });\n        // -- Height ---------------------------------------------------\n        const heightInput = new LabeledFieldView(locale, createLabeledInputText);\n        heightInput.set({\n            label: t('Height'),\n            class: 'ck-table-form__dimensions-row__height'\n        });\n        heightInput.fieldView.bind('value').to(this, 'height');\n        heightInput.fieldView.on('input', () => {\n            this.height = heightInput.fieldView.element.value;\n        });\n        return {\n            dimensionsLabel,\n            widthInput,\n            operatorLabel,\n            heightInput\n        };\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #paddingInput}.\n     */\n    _createPaddingField() {\n        const locale = this.locale;\n        const t = this.t;\n        const paddingInput = new LabeledFieldView(locale, createLabeledInputText);\n        paddingInput.set({\n            label: t('Padding'),\n            class: 'ck-table-cell-properties-form__padding'\n        });\n        paddingInput.fieldView.bind('value').to(this, 'padding');\n        paddingInput.fieldView.on('input', () => {\n            this.padding = paddingInput.fieldView.element.value;\n        });\n        return paddingInput;\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #horizontalAlignmentToolbar},\n     * * {@link #verticalAlignmentToolbar}.\n     */\n    _createAlignmentFields() {\n        const locale = this.locale;\n        const t = this.t;\n        const alignmentLabel = new LabelView(locale);\n        const ALIGNMENT_ICONS = {\n            left: icons.alignLeft,\n            center: icons.alignCenter,\n            right: icons.alignRight,\n            justify: icons.alignJustify,\n            top: icons.alignTop,\n            middle: icons.alignMiddle,\n            bottom: icons.alignBottom\n        };\n        alignmentLabel.text = t('Table cell text alignment');\n        // -- Horizontal ---------------------------------------------------\n        const horizontalAlignmentToolbar = new ToolbarView(locale);\n        const isContentRTL = locale.contentLanguageDirection === 'rtl';\n        horizontalAlignmentToolbar.set({\n            isCompact: true,\n            ariaLabel: t('Horizontal text alignment toolbar')\n        });\n        fillToolbar({\n            view: this,\n            icons: ALIGNMENT_ICONS,\n            toolbar: horizontalAlignmentToolbar,\n            labels: this._horizontalAlignmentLabels,\n            propertyName: 'horizontalAlignment',\n            nameToValue: name => {\n                // For the RTL content, we want to swap the buttons \"align to the left\" and \"align to the right\".\n                if (isContentRTL) {\n                    if (name === 'left') {\n                        return 'right';\n                    }\n                    else if (name === 'right') {\n                        return 'left';\n                    }\n                }\n                return name;\n            },\n            defaultValue: this.options.defaultTableCellProperties.horizontalAlignment\n        });\n        // -- Vertical -----------------------------------------------------\n        const verticalAlignmentToolbar = new ToolbarView(locale);\n        verticalAlignmentToolbar.set({\n            isCompact: true,\n            ariaLabel: t('Vertical text alignment toolbar')\n        });\n        fillToolbar({\n            view: this,\n            icons: ALIGNMENT_ICONS,\n            toolbar: verticalAlignmentToolbar,\n            labels: this._verticalAlignmentLabels,\n            propertyName: 'verticalAlignment',\n            defaultValue: this.options.defaultTableCellProperties.verticalAlignment\n        });\n        return {\n            horizontalAlignmentToolbar,\n            verticalAlignmentToolbar,\n            alignmentLabel\n        };\n    }\n    /**\n     * Creates the following form controls:\n     *\n     * * {@link #saveButtonView},\n     * * {@link #cancelButtonView}.\n     */\n    _createActionButtons() {\n        const locale = this.locale;\n        const t = this.t;\n        const saveButtonView = new ButtonView(locale);\n        const cancelButtonView = new ButtonView(locale);\n        const fieldsThatShouldValidateToSave = [\n            this.borderWidthInput,\n            this.borderColorInput,\n            this.backgroundInput,\n            this.paddingInput\n        ];\n        saveButtonView.set({\n            label: t('Save'),\n            icon: icons.check,\n            class: 'ck-button-save',\n            type: 'submit',\n            withText: true\n        });\n        saveButtonView.bind('isEnabled').toMany(fieldsThatShouldValidateToSave, 'errorText', (...errorTexts) => {\n            return errorTexts.every(errorText => !errorText);\n        });\n        cancelButtonView.set({\n            label: t('Cancel'),\n            icon: icons.cancel,\n            class: 'ck-button-cancel',\n            withText: true\n        });\n        cancelButtonView.delegate('execute').to(this, 'cancel');\n        return {\n            saveButtonView, cancelButtonView\n        };\n    }\n    /**\n     * Provides localized labels for {@link #horizontalAlignmentToolbar} buttons.\n     */\n    get _horizontalAlignmentLabels() {\n        const locale = this.locale;\n        const t = this.t;\n        const left = t('Align cell text to the left');\n        const center = t('Align cell text to the center');\n        const right = t('Align cell text to the right');\n        const justify = t('Justify cell text');\n        // Returns object with a proper order of labels.\n        if (locale.uiLanguageDirection === 'rtl') {\n            return { right, center, left, justify };\n        }\n        else {\n            return { left, center, right, justify };\n        }\n    }\n    /**\n     * Provides localized labels for {@link #verticalAlignmentToolbar} buttons.\n     */\n    get _verticalAlignmentLabels() {\n        const t = this.t;\n        return {\n            top: t('Align cell text to the top'),\n            middle: t('Align cell text to the middle'),\n            bottom: t('Align cell text to the bottom')\n        };\n    }\n}\nfunction isBorderStyleSet(value) {\n    return value !== 'none';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { isWidget } from 'ckeditor5/src/widget.js';\n/**\n * Depending on the position of the selection either return the selected table or the table higher in the hierarchy.\n */\nexport function getSelectionAffectedTableWidget(selection) {\n    const selectedTable = getSelectedTableWidget(selection);\n    if (selectedTable) {\n        return selectedTable;\n    }\n    return getTableWidgetAncestor(selection);\n}\n/**\n * Returns a table widget editing view element if one is selected.\n */\nexport function getSelectedTableWidget(selection) {\n    const viewElement = selection.getSelectedElement();\n    if (viewElement && isTableWidget(viewElement)) {\n        return viewElement;\n    }\n    return null;\n}\n/**\n * Returns a table widget editing view element if one is among the selection's ancestors.\n */\nexport function getTableWidgetAncestor(selection) {\n    const selectionPosition = selection.getFirstPosition();\n    if (!selectionPosition) {\n        return null;\n    }\n    let parent = selectionPosition.parent;\n    while (parent) {\n        if (parent.is('element') && isTableWidget(parent)) {\n            return parent;\n        }\n        parent = parent.parent;\n    }\n    return null;\n}\n/**\n * Checks if a given view element is a table widget.\n */\nfunction isTableWidget(viewElement) {\n    return !!viewElement.getCustomProperty('table') && isWidget(viewElement);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/utils/ui/contextualballoon\n */\nimport { Rect } from 'ckeditor5/src/utils.js';\nimport { BalloonPanelView } from 'ckeditor5/src/ui.js';\nimport { getSelectionAffectedTableWidget, getTableWidgetAncestor } from './widget.js';\nimport { getSelectionAffectedTable } from '../common.js';\nconst BALLOON_POSITIONS = /* #__PURE__ */ (() => [\n    BalloonPanelView.defaultPositions.northArrowSouth,\n    BalloonPanelView.defaultPositions.northArrowSouthWest,\n    BalloonPanelView.defaultPositions.northArrowSouthEast,\n    BalloonPanelView.defaultPositions.southArrowNorth,\n    BalloonPanelView.defaultPositions.southArrowNorthWest,\n    BalloonPanelView.defaultPositions.southArrowNorthEast,\n    BalloonPanelView.defaultPositions.viewportStickyNorth\n])();\n/**\n * A helper utility that positions the\n * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance\n * with respect to the table in the editor content, if one is selected.\n *\n * @param editor The editor instance.\n * @param target Either \"cell\" or \"table\". Determines the target the balloon will be attached to.\n */\nexport function repositionContextualBalloon(editor, target) {\n    const balloon = editor.plugins.get('ContextualBalloon');\n    const selection = editor.editing.view.document.selection;\n    let position;\n    if (target === 'cell') {\n        if (getTableWidgetAncestor(selection)) {\n            position = getBalloonCellPositionData(editor);\n        }\n    }\n    else if (getSelectionAffectedTableWidget(selection)) {\n        position = getBalloonTablePositionData(editor);\n    }\n    if (position) {\n        balloon.updatePosition(position);\n    }\n}\n/**\n * Returns the positioning options that control the geometry of the\n * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect\n * to the selected table in the editor content.\n *\n * @param editor The editor instance.\n */\nexport function getBalloonTablePositionData(editor) {\n    const selection = editor.model.document.selection;\n    const modelTable = getSelectionAffectedTable(selection);\n    const viewTable = editor.editing.mapper.toViewElement(modelTable);\n    return {\n        target: editor.editing.view.domConverter.mapViewToDom(viewTable),\n        positions: BALLOON_POSITIONS\n    };\n}\n/**\n * Returns the positioning options that control the geometry of the\n * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect\n * to the selected table cell in the editor content.\n *\n * @param editor The editor instance.\n */\nexport function getBalloonCellPositionData(editor) {\n    const mapper = editor.editing.mapper;\n    const domConverter = editor.editing.view.domConverter;\n    const selection = editor.model.document.selection;\n    if (selection.rangeCount > 1) {\n        return {\n            target: () => createBoundingRect(selection.getRanges(), editor),\n            positions: BALLOON_POSITIONS\n        };\n    }\n    const modelTableCell = getTableCellAtPosition(selection.getFirstPosition());\n    const viewTableCell = mapper.toViewElement(modelTableCell);\n    return {\n        target: domConverter.mapViewToDom(viewTableCell),\n        positions: BALLOON_POSITIONS\n    };\n}\n/**\n * Returns the first selected table cell from a multi-cell or in-cell selection.\n *\n * @param position Document position.\n */\nfunction getTableCellAtPosition(position) {\n    const isTableCellSelected = position.nodeAfter && position.nodeAfter.is('element', 'tableCell');\n    return isTableCellSelected ? position.nodeAfter : position.findAncestor('tableCell');\n}\n/**\n * Returns bounding rectangle for given model ranges.\n *\n * @param ranges Model ranges that the bounding rect should be returned for.\n * @param editor The editor instance.\n */\nfunction createBoundingRect(ranges, editor) {\n    const mapper = editor.editing.mapper;\n    const domConverter = editor.editing.view.domConverter;\n    const rects = Array.from(ranges).map(range => {\n        const modelTableCell = getTableCellAtPosition(range.start);\n        const viewTableCell = mapper.toViewElement(modelTableCell);\n        return new Rect(domConverter.mapViewToDom(viewTableCell));\n    });\n    return Rect.getBoundingRect(rects);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { isObject } from 'lodash-es';\n/**\n * Returns a string if all four values of box sides are equal.\n *\n * If a string is passed, it is treated as a single value (pass-through).\n *\n * ```ts\n * // Returns 'foo':\n * getSingleValue( { top: 'foo', right: 'foo', bottom: 'foo', left: 'foo' } );\n * getSingleValue( 'foo' );\n *\n * // Returns undefined:\n * getSingleValue( { top: 'foo', right: 'foo', bottom: 'bar', left: 'foo' } );\n * getSingleValue( { top: 'foo', right: 'foo' } );\n * ```\n */\nexport function getSingleValue(objectOrString) {\n    if (!objectOrString || !isObject(objectOrString)) {\n        return objectOrString;\n    }\n    const { top, right, bottom, left } = objectOrString;\n    if (top == right && right == bottom && bottom == left) {\n        return top;\n    }\n}\n/**\n * Adds a unit to a value if the value is a number or a string representing a number.\n *\n * **Note**: It does nothing to non-numeric values.\n *\n * ```ts\n * getSingleValue( 25, 'px' ); // '25px'\n * getSingleValue( 25, 'em' ); // '25em'\n * getSingleValue( '25em', 'px' ); // '25em'\n * getSingleValue( 'foo', 'px' ); // 'foo'\n * ```\n *\n * @param defaultUnit A default unit added to a numeric value.\n */\nexport function addDefaultUnitToNumericValue(value, defaultUnit) {\n    const numericValue = parseFloat(value);\n    if (Number.isNaN(numericValue)) {\n        return value;\n    }\n    if (String(numericValue) !== String(value)) {\n        return value;\n    }\n    return `${numericValue}${defaultUnit}`;\n}\n/**\n * Returns the normalized configuration.\n *\n * @param config The configuration to normalize.\n * @param options Options used to determine which properties should be added.\n */\nexport function getNormalizedDefaultProperties(config, options = {}) {\n    const normalizedConfig = {\n        borderStyle: 'none',\n        borderWidth: '',\n        borderColor: '',\n        backgroundColor: '',\n        width: '',\n        height: '',\n        ...config\n    };\n    if (options.includeAlignmentProperty && !normalizedConfig.alignment) {\n        normalizedConfig.alignment = 'center';\n    }\n    if (options.includePaddingProperty && !normalizedConfig.padding) {\n        normalizedConfig.padding = '';\n    }\n    if (options.includeVerticalAlignmentProperty && !normalizedConfig.verticalAlignment) {\n        normalizedConfig.verticalAlignment = 'middle';\n    }\n    if (options.includeHorizontalAlignmentProperty && !normalizedConfig.horizontalAlignment) {\n        normalizedConfig.horizontalAlignment = options.isRightToLeftContent ? 'right' : 'left';\n    }\n    return normalizedConfig;\n}\n/**\n * Returns the normalized default table properties.\n *\n * @param config The configuration to normalize.\n * @param options Options used to determine which properties should be added.\n */\nexport function getNormalizedDefaultTableProperties(config, options) {\n    return getNormalizedDefaultProperties({\n        // It adds support for border none in the table element, keep it in sync with the content styles\n        // See more: https://github.com/ckeditor/ckeditor5/issues/6841#issuecomment-1959195608\n        borderStyle: 'double',\n        borderColor: 'hsl(0, 0%, 70%)',\n        borderWidth: '1px',\n        ...config\n    }, options);\n}\n/**\n * Returns the normalized default cell properties.\n *\n * @param config The configuration to normalize.\n * @param options Options used to determine which properties should be added.\n */\nexport function getNormalizedDefaultCellProperties(config, options) {\n    return getNormalizedDefaultProperties({\n        // It adds support for border none in the table element, keep it in sync with the content styles\n        // See more: https://github.com/ckeditor/ckeditor5/issues/6841#issuecomment-1959195608\n        borderStyle: 'solid',\n        borderColor: 'hsl(0, 0%, 75%)',\n        borderWidth: '1px',\n        ...config\n    }, options);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablecellproperties/tablecellpropertiesui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, clickOutsideHandler, ContextualBalloon, getLocalizedColorOptions, normalizeColorOptions } from 'ckeditor5/src/ui.js';\nimport TableCellPropertiesView from './ui/tablecellpropertiesview.js';\nimport { colorFieldValidator, getLocalizedColorErrorText, getLocalizedLengthErrorText, defaultColors, lengthFieldValidator, lineWidthFieldValidator } from '../utils/ui/table-properties.js';\nimport { debounce } from 'lodash-es';\nimport { getTableWidgetAncestor } from '../utils/ui/widget.js';\nimport { getBalloonCellPositionData, repositionContextualBalloon } from '../utils/ui/contextualballoon.js';\nimport tableCellProperties from './../../theme/icons/table-cell-properties.svg';\nimport { getNormalizedDefaultCellProperties } from '../utils/table-properties.js';\nconst ERROR_TEXT_TIMEOUT = 500;\n// Map of view properties and related commands.\nconst propertyToCommandMap = {\n    borderStyle: 'tableCellBorderStyle',\n    borderColor: 'tableCellBorderColor',\n    borderWidth: 'tableCellBorderWidth',\n    height: 'tableCellHeight',\n    width: 'tableCellWidth',\n    padding: 'tableCellPadding',\n    backgroundColor: 'tableCellBackgroundColor',\n    horizontalAlignment: 'tableCellHorizontalAlignment',\n    verticalAlignment: 'tableCellVerticalAlignment'\n};\n/**\n * The table cell properties UI plugin. It introduces the `'tableCellProperties'` button\n * that opens a form allowing to specify the visual styling of a table cell.\n *\n * It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.\n */\nexport default class TableCellPropertiesUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ContextualBalloon];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableCellPropertiesUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        editor.config.define('table.tableCellProperties', {\n            borderColors: defaultColors,\n            backgroundColors: defaultColors\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.t;\n        this._defaultTableCellProperties = getNormalizedDefaultCellProperties(editor.config.get('table.tableCellProperties.defaultProperties'), {\n            includeVerticalAlignmentProperty: true,\n            includeHorizontalAlignmentProperty: true,\n            includePaddingProperty: true,\n            isRightToLeftContent: editor.locale.contentLanguageDirection === 'rtl'\n        });\n        this._balloon = editor.plugins.get(ContextualBalloon);\n        this.view = null;\n        this._isReady = false;\n        editor.ui.componentFactory.add('tableCellProperties', locale => {\n            const view = new ButtonView(locale);\n            view.set({\n                label: t('Cell properties'),\n                icon: tableCellProperties,\n                tooltip: true\n            });\n            this.listenTo(view, 'execute', () => this._showView());\n            const commands = Object.values(propertyToCommandMap)\n                .map(commandName => editor.commands.get(commandName));\n            view.bind('isEnabled').toMany(commands, 'isEnabled', (...areEnabled) => (areEnabled.some(isCommandEnabled => isCommandEnabled)));\n            return view;\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        // Destroy created UI components as they are not automatically destroyed.\n        // See https://github.com/ckeditor/ckeditor5/issues/1341.\n        if (this.view) {\n            this.view.destroy();\n        }\n    }\n    /**\n     * Creates the {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView} instance.\n     *\n     * @returns The cell properties form view instance.\n     */\n    _createPropertiesView() {\n        const editor = this.editor;\n        const config = editor.config.get('table.tableCellProperties');\n        const borderColorsConfig = normalizeColorOptions(config.borderColors);\n        const localizedBorderColors = getLocalizedColorOptions(editor.locale, borderColorsConfig);\n        const backgroundColorsConfig = normalizeColorOptions(config.backgroundColors);\n        const localizedBackgroundColors = getLocalizedColorOptions(editor.locale, backgroundColorsConfig);\n        const hasColorPicker = config.colorPicker !== false;\n        const view = new TableCellPropertiesView(editor.locale, {\n            borderColors: localizedBorderColors,\n            backgroundColors: localizedBackgroundColors,\n            defaultTableCellProperties: this._defaultTableCellProperties,\n            colorPickerConfig: hasColorPicker ? (config.colorPicker || {}) : false\n        });\n        const t = editor.t;\n        // Render the view so its #element is available for the clickOutsideHandler.\n        view.render();\n        this.listenTo(view, 'submit', () => {\n            this._hideView();\n        });\n        this.listenTo(view, 'cancel', () => {\n            // https://github.com/ckeditor/ckeditor5/issues/6180\n            if (this._undoStepBatch.operations.length) {\n                editor.execute('undo', this._undoStepBatch);\n            }\n            this._hideView();\n        });\n        // Close the balloon on Esc key press.\n        view.keystrokes.set('Esc', (data, cancel) => {\n            this._hideView();\n            cancel();\n        });\n        // Close on click outside of balloon panel element.\n        clickOutsideHandler({\n            emitter: view,\n            activator: () => this._isViewInBalloon,\n            contextElements: [this._balloon.view.element],\n            callback: () => this._hideView()\n        });\n        const colorErrorText = getLocalizedColorErrorText(t);\n        const lengthErrorText = getLocalizedLengthErrorText(t);\n        // Create the \"UI -> editor data\" binding.\n        // These listeners update the editor data (via table commands) when any observable\n        // property of the view has changed. They also validate the value and display errors in the UI\n        // when necessary. This makes the view live, which means the changes are\n        // visible in the editing as soon as the user types or changes fields' values.\n        view.on('change:borderStyle', this._getPropertyChangeCallback('tableCellBorderStyle'));\n        view.on('change:borderColor', this._getValidatedPropertyChangeCallback({\n            viewField: view.borderColorInput,\n            commandName: 'tableCellBorderColor',\n            errorText: colorErrorText,\n            validator: colorFieldValidator\n        }));\n        view.on('change:borderWidth', this._getValidatedPropertyChangeCallback({\n            viewField: view.borderWidthInput,\n            commandName: 'tableCellBorderWidth',\n            errorText: lengthErrorText,\n            validator: lineWidthFieldValidator\n        }));\n        view.on('change:padding', this._getValidatedPropertyChangeCallback({\n            viewField: view.paddingInput,\n            commandName: 'tableCellPadding',\n            errorText: lengthErrorText,\n            validator: lengthFieldValidator\n        }));\n        view.on('change:width', this._getValidatedPropertyChangeCallback({\n            viewField: view.widthInput,\n            commandName: 'tableCellWidth',\n            errorText: lengthErrorText,\n            validator: lengthFieldValidator\n        }));\n        view.on('change:height', this._getValidatedPropertyChangeCallback({\n            viewField: view.heightInput,\n            commandName: 'tableCellHeight',\n            errorText: lengthErrorText,\n            validator: lengthFieldValidator\n        }));\n        view.on('change:backgroundColor', this._getValidatedPropertyChangeCallback({\n            viewField: view.backgroundInput,\n            commandName: 'tableCellBackgroundColor',\n            errorText: colorErrorText,\n            validator: colorFieldValidator\n        }));\n        view.on('change:horizontalAlignment', this._getPropertyChangeCallback('tableCellHorizontalAlignment'));\n        view.on('change:verticalAlignment', this._getPropertyChangeCallback('tableCellVerticalAlignment'));\n        return view;\n    }\n    /**\n     * In this method the \"editor data -> UI\" binding is happening.\n     *\n     * When executed, this method obtains selected cell property values from various table commands\n     * and passes them to the {@link #view}.\n     *\n     * This way, the UI stays up–to–date with the editor data.\n     */\n    _fillViewFormFromCommandValues() {\n        const commands = this.editor.commands;\n        const borderStyleCommand = commands.get('tableCellBorderStyle');\n        Object.entries(propertyToCommandMap)\n            .map(([property, commandName]) => {\n            const defaultValue = this._defaultTableCellProperties[property] || '';\n            return [\n                property,\n                commands.get(commandName).value || defaultValue\n            ];\n        })\n            .forEach(([property, value]) => {\n            // Do not set the `border-color` and `border-width` fields if `border-style:none`.\n            if ((property === 'borderColor' || property === 'borderWidth') && borderStyleCommand.value === 'none') {\n                return;\n            }\n            this.view.set(property, value);\n        });\n        this._isReady = true;\n    }\n    /**\n     * Shows the {@link #view} in the {@link #_balloon}.\n     *\n     * **Note**: Each time a view is shown, a new {@link #_undoStepBatch} is created. It contains\n     * all changes made to the document when the view is visible, allowing a single undo step\n     * for all of them.\n     */\n    _showView() {\n        const editor = this.editor;\n        if (!this.view) {\n            this.view = this._createPropertiesView();\n        }\n        this.listenTo(editor.ui, 'update', () => {\n            this._updateView();\n        });\n        // Update the view with the model values.\n        this._fillViewFormFromCommandValues();\n        this._balloon.add({\n            view: this.view,\n            position: getBalloonCellPositionData(editor)\n        });\n        // Create a new batch. Clicking \"Cancel\" will undo this batch.\n        this._undoStepBatch = editor.model.createBatch();\n        // Basic a11y.\n        this.view.focus();\n    }\n    /**\n     * Removes the {@link #view} from the {@link #_balloon}.\n     */\n    _hideView() {\n        const editor = this.editor;\n        this.stopListening(editor.ui, 'update');\n        this._isReady = false;\n        // Blur any input element before removing it from DOM to prevent issues in some browsers.\n        // See https://github.com/ckeditor/ckeditor5/issues/1501.\n        this.view.saveButtonView.focus();\n        this._balloon.remove(this.view);\n        // Make sure the focus is not lost in the process by putting it directly\n        // into the editing view.\n        this.editor.editing.view.focus();\n    }\n    /**\n     * Repositions the {@link #_balloon} or hides the {@link #view} if a table cell is no longer selected.\n     */\n    _updateView() {\n        const editor = this.editor;\n        const viewDocument = editor.editing.view.document;\n        if (!getTableWidgetAncestor(viewDocument.selection)) {\n            this._hideView();\n        }\n        else if (this._isViewVisible) {\n            repositionContextualBalloon(editor, 'cell');\n        }\n    }\n    /**\n     * Returns `true` when the {@link #view} is visible in the {@link #_balloon}.\n     */\n    get _isViewVisible() {\n        return !!this.view && this._balloon.visibleView === this.view;\n    }\n    /**\n     * Returns `true` when the {@link #view} is in the {@link #_balloon}.\n     */\n    get _isViewInBalloon() {\n        return !!this.view && this._balloon.hasView(this.view);\n    }\n    /**\n     * Creates a callback that when executed upon the {@link #view view's} property change\n     * executes a related editor command with the new property value.\n     *\n     * @param defaultValue The default value of the command.\n     */\n    _getPropertyChangeCallback(commandName) {\n        return (evt, propertyName, newValue) => {\n            if (!this._isReady) {\n                return;\n            }\n            this.editor.execute(commandName, {\n                value: newValue,\n                batch: this._undoStepBatch\n            });\n        };\n    }\n    /**\n     * Creates a callback that when executed upon the {@link #view view's} property change:\n     * * Executes a related editor command with the new property value if the value is valid,\n     * * Or sets the error text next to the invalid field, if the value did not pass the validation.\n     */\n    _getValidatedPropertyChangeCallback(options) {\n        const { commandName, viewField, validator, errorText } = options;\n        const setErrorTextDebounced = debounce(() => {\n            viewField.errorText = errorText;\n        }, ERROR_TEXT_TIMEOUT);\n        return (evt, propertyName, newValue) => {\n            setErrorTextDebounced.cancel();\n            // Do not execute the command on initial call (opening the table properties view).\n            if (!this._isReady) {\n                return;\n            }\n            if (validator(newValue)) {\n                this.editor.execute(commandName, {\n                    value: newValue,\n                    batch: this._undoStepBatch\n                });\n                viewField.errorText = null;\n            }\n            else {\n                setErrorTextDebounced();\n            }\n        };\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m11.105 18-.17 1H2.5A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1h15A1.5 1.5 0 0 1 19 2.5v9.975l-.85-.124-.15-.302V8h-5v4h.021l-.172.351-1.916.28-.151.027c-.287.063-.54.182-.755.341L8 13v5h3.105zM2 12h5V8H2v4zm10-4H8v4h4V8zM2 2v5h5V2H2zm0 16h5v-5H2v5zM13 7h5V2h-5v5zM8 2v5h4V2H8z\\\" opacity=\\\".6\\\"/><path d=\\\"m15.5 11.5 1.323 2.68 2.957.43-2.14 2.085.505 2.946L15.5 18.25l-2.645 1.39.505-2.945-2.14-2.086 2.957-.43L15.5 11.5zM13 6a1 1 0 0 1 1 1v3.172a2.047 2.047 0 0 0-.293.443l-.858 1.736-1.916.28-.151.027A1.976 1.976 0 0 0 9.315 14H7a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h6zm-1 2H8v4h4V8z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablecellproperties/commands/tablecellpropertycommand\n */\nimport { Command } from 'ckeditor5/src/core.js';\n/**\n * The table cell attribute command.\n *\n * The command is a base command for other table cell property commands.\n */\nexport default class TableCellPropertyCommand extends Command {\n    /**\n     * Creates a new `TableCellPropertyCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param attributeName Table cell attribute name.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, attributeName, defaultValue) {\n        super(editor);\n        this.attributeName = attributeName;\n        this._defaultValue = defaultValue;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const selectedTableCells = tableUtils.getSelectionAffectedTableCells(editor.model.document.selection);\n        this.isEnabled = !!selectedTableCells.length;\n        this.value = this._getSingleValue(selectedTableCells);\n    }\n    /**\n     * Executes the command.\n     *\n     * @fires execute\n     * @param options.value If set, the command will set the attribute on selected table cells.\n     * If it is not set, the command will remove the attribute from the selected table cells.\n     * @param options.batch Pass the model batch instance to the command to aggregate changes,\n     * for example to allow a single undo step for multiple executions.\n     */\n    execute(options = {}) {\n        const { value, batch } = options;\n        const model = this.editor.model;\n        const tableUtils = this.editor.plugins.get('TableUtils');\n        const tableCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);\n        const valueToSet = this._getValueToSet(value);\n        model.enqueueChange(batch, writer => {\n            if (valueToSet) {\n                tableCells.forEach(tableCell => writer.setAttribute(this.attributeName, valueToSet, tableCell));\n            }\n            else {\n                tableCells.forEach(tableCell => writer.removeAttribute(this.attributeName, tableCell));\n            }\n        });\n    }\n    /**\n     * Returns the attribute value for a table cell.\n     */\n    _getAttribute(tableCell) {\n        if (!tableCell) {\n            return;\n        }\n        const value = tableCell.getAttribute(this.attributeName);\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n    /**\n     * Returns the proper model value. It can be used to add a default unit to numeric values.\n     */\n    _getValueToSet(value) {\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n    /**\n     * Returns a single value for all selected table cells. If the value is the same for all cells,\n     * it will be returned (`undefined` otherwise).\n     */\n    _getSingleValue(tableCells) {\n        const firstCellValue = this._getAttribute(tableCells[0]);\n        const everyCellHasAttribute = tableCells.every(tableCells => this._getAttribute(tableCells) === firstCellValue);\n        return everyCellHasAttribute ? firstCellValue : undefined;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from '../../tablecellproperties/commands/tablecellpropertycommand.js';\nimport { addDefaultUnitToNumericValue } from '../../utils/table-properties.js';\n/**\n * The table cell width command.\n *\n * The command is registered by the {@link module:table/tablecellwidth/tablecellwidthediting~TableCellWidthEditing} as\n * the `'tableCellWidth'` editor command.\n *\n * To change the width of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellWidth', {\n *   value: '50px'\n * } );\n * ```\n *\n * **Note**: This command adds a default `'px'` unit to numeric values. Executing:\n *\n * ```ts\n * editor.execute( 'tableCellWidth', {\n *   value: '50'\n * } );\n * ```\n *\n * will set the `width` attribute to `'50px'` in the model.\n */\nexport default class TableCellWidthCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellWidthCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellWidth', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValueToSet(value) {\n        value = addDefaultUnitToNumericValue(value, 'px');\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablecellwidth/tablecellwidthediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport TableEditing from './../tableediting.js';\nimport TableCellWidthCommand from './commands/tablecellwidthcommand.js';\nimport { getNormalizedDefaultCellProperties } from '../utils/table-properties.js';\nimport { enableProperty } from '../utils/common.js';\n/**\n * The table cell width editing feature.\n *\n * Introduces `tableCellWidth` table cell model attribute alongside with its converters\n * and a command.\n */\nexport default class TableCellWidthEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableCellWidthEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableEditing];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const defaultTableCellProperties = getNormalizedDefaultCellProperties(editor.config.get('table.tableCellProperties.defaultProperties'));\n        enableProperty(editor.model.schema, editor.conversion, {\n            modelAttribute: 'tableCellWidth',\n            styleName: 'width',\n            defaultValue: defaultTableCellProperties.width\n        });\n        editor.commands.add('tableCellWidth', new TableCellWidthCommand(editor, defaultTableCellProperties.width));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\nimport { addDefaultUnitToNumericValue, getSingleValue } from '../../utils/table-properties.js';\n/**\n * The table cell padding command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellPadding'` editor command.\n *\n * To change the padding of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellPadding', {\n *   value: '5px'\n * } );\n * ```\n *\n * **Note**: This command adds the default `'px'` unit to numeric values. Executing:\n *\n * ```ts\n * editor.execute( 'tableCellPadding', {\n *   value: '5'\n * } );\n * ```\n *\n * will set the `padding` attribute to `'5px'` in the model.\n */\nexport default class TableCellPaddingCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellPaddingCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellPadding', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getAttribute(tableCell) {\n        if (!tableCell) {\n            return;\n        }\n        const value = getSingleValue(tableCell.getAttribute(this.attributeName));\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValueToSet(value) {\n        const newValue = addDefaultUnitToNumericValue(value, 'px');\n        if (newValue === this._defaultValue) {\n            return;\n        }\n        return newValue;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\nimport { addDefaultUnitToNumericValue } from '../../utils/table-properties.js';\n/**\n * The table cell height command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellHeight'` editor command.\n *\n * To change the height of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellHeight', {\n *   value: '50px'\n * } );\n * ```\n *\n * **Note**: This command adds the default `'px'` unit to numeric values. Executing:\n *\n * ```ts\n * editor.execute( 'tableCellHeight', {\n *   value: '50'\n * } );\n * ```\n *\n * will set the `height` attribute to `'50px'` in the model.\n */\nexport default class TableCellHeightCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellHeightCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellHeight', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValueToSet(value) {\n        const newValue = addDefaultUnitToNumericValue(value, 'px');\n        if (newValue === this._defaultValue) {\n            return;\n        }\n        return newValue;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\n/**\n * The table cell background color command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellBackgroundColor'` editor command.\n *\n * To change the background color of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellBackgroundColor', {\n *   value: '#f00'\n * } );\n * ```\n */\nexport default class TableCellBackgroundColorCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellBackgroundColorCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellBackgroundColor', defaultValue);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\n/**\n * The table cell vertical alignment command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellVerticalAlignment'` editor command.\n *\n * To change the vertical text alignment of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellVerticalAlignment', {\n *   value: 'top'\n * } );\n * ```\n *\n * The following values, corresponding to the\n * [`vertical-align` CSS attribute](https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align), are allowed:\n *\n * * `'top'`\n * * `'bottom'`\n *\n * The `'middle'` value is the default one so there is no need to set it.\n */\nexport default class TableCellVerticalAlignmentCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellVerticalAlignmentCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value for the \"alignment\" attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellVerticalAlignment', defaultValue);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\n/**\n * The table cell horizontal alignment command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellHorizontalAlignment'` editor command.\n *\n * To change the horizontal text alignment of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellHorizontalAlignment', {\n *  value: 'right'\n * } );\n * ```\n */\nexport default class TableCellHorizontalAlignmentCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellHorizontalAlignmentCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value for the \"alignment\" attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellHorizontalAlignment', defaultValue);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\nimport { getSingleValue } from '../../utils/table-properties.js';\n/**\n * The table cell border style command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellBorderStyle'` editor command.\n *\n * To change the border style of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellBorderStyle', {\n *   value: 'dashed'\n * } );\n * ```\n */\nexport default class TableCellBorderStyleCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellBorderStyleCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellBorderStyle', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getAttribute(tableCell) {\n        if (!tableCell) {\n            return;\n        }\n        const value = getSingleValue(tableCell.getAttribute(this.attributeName));\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\nimport { getSingleValue } from '../../utils/table-properties.js';\n/**\n * The table cell border color command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellBorderColor'` editor command.\n *\n * To change the border color of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellBorderColor', {\n *   value: '#f00'\n * } );\n * ```\n */\nexport default class TableCellBorderColorCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellBorderColorCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellBorderColor', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getAttribute(tableCell) {\n        if (!tableCell) {\n            return;\n        }\n        const value = getSingleValue(tableCell.getAttribute(this.attributeName));\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TableCellPropertyCommand from './tablecellpropertycommand.js';\nimport { addDefaultUnitToNumericValue, getSingleValue } from '../../utils/table-properties.js';\n/**\n * The table cell border width command.\n *\n * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as\n * the `'tableCellBorderWidth'` editor command.\n *\n * To change the border width of selected cells, execute the command:\n *\n * ```ts\n * editor.execute( 'tableCellBorderWidth', {\n *   value: '5px'\n * } );\n * ```\n *\n * **Note**: This command adds the default `'px'` unit to numeric values. Executing:\n *\n * ```ts\n * editor.execute( 'tableCellBorderWidth', {\n *   value: '5'\n * } );\n * ```\n *\n * will set the `borderWidth` attribute to `'5px'` in the model.\n */\nexport default class TableCellBorderWidthCommand extends TableCellPropertyCommand {\n    /**\n     * Creates a new `TableCellBorderWidthCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableCellBorderWidth', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getAttribute(tableCell) {\n        if (!tableCell) {\n            return;\n        }\n        const value = getSingleValue(tableCell.getAttribute(this.attributeName));\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValueToSet(value) {\n        const newValue = addDefaultUnitToNumericValue(value, 'px');\n        if (newValue === this._defaultValue) {\n            return;\n        }\n        return newValue;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablecellproperties/tablecellpropertiesediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { addBorderRules, addPaddingRules, addBackgroundRules } from 'ckeditor5/src/engine.js';\nimport { downcastAttributeToStyle, upcastBorderStyles } from './../converters/tableproperties.js';\nimport TableEditing from './../tableediting.js';\nimport TableCellWidthEditing from '../tablecellwidth/tablecellwidthediting.js';\nimport TableCellPaddingCommand from './commands/tablecellpaddingcommand.js';\nimport TableCellHeightCommand from './commands/tablecellheightcommand.js';\nimport TableCellBackgroundColorCommand from './commands/tablecellbackgroundcolorcommand.js';\nimport TableCellVerticalAlignmentCommand from './commands/tablecellverticalalignmentcommand.js';\nimport TableCellHorizontalAlignmentCommand from './commands/tablecellhorizontalalignmentcommand.js';\nimport TableCellBorderStyleCommand from './commands/tablecellborderstylecommand.js';\nimport TableCellBorderColorCommand from './commands/tablecellbordercolorcommand.js';\nimport TableCellBorderWidthCommand from './commands/tablecellborderwidthcommand.js';\nimport { getNormalizedDefaultCellProperties } from '../utils/table-properties.js';\nimport { enableProperty } from '../utils/common.js';\nconst VALIGN_VALUES_REG_EXP = /^(top|middle|bottom)$/;\nconst ALIGN_VALUES_REG_EXP = /^(left|center|right|justify)$/;\n/**\n * The table cell properties editing feature.\n *\n * Introduces table cell model attributes and their conversion:\n *\n * - border: `tableCellBorderStyle`, `tableCellBorderColor` and `tableCellBorderWidth`\n * - background color: `tableCellBackgroundColor`\n * - cell padding: `tableCellPadding`\n * - horizontal and vertical alignment: `tableCellHorizontalAlignment`, `tableCellVerticalAlignment`\n * - cell width and height: `tableCellWidth`, `tableCellHeight`\n *\n * It also registers commands used to manipulate the above attributes:\n *\n * - border: the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` commands\n * - background color: the `'tableCellBackgroundColor'` command\n * - cell padding: the `'tableCellPadding'` command\n * - horizontal and vertical alignment: the `'tableCellHorizontalAlignment'` and `'tableCellVerticalAlignment'` commands\n * - width and height: the `'tableCellWidth'` and `'tableCellHeight'` commands\n */\nexport default class TableCellPropertiesEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableCellPropertiesEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableEditing, TableCellWidthEditing];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        const conversion = editor.conversion;\n        editor.config.define('table.tableCellProperties.defaultProperties', {});\n        const defaultTableCellProperties = getNormalizedDefaultCellProperties(editor.config.get('table.tableCellProperties.defaultProperties'), {\n            includeVerticalAlignmentProperty: true,\n            includeHorizontalAlignmentProperty: true,\n            includePaddingProperty: true,\n            isRightToLeftContent: editor.locale.contentLanguageDirection === 'rtl'\n        });\n        editor.data.addStyleProcessorRules(addBorderRules);\n        enableBorderProperties(schema, conversion, {\n            color: defaultTableCellProperties.borderColor,\n            style: defaultTableCellProperties.borderStyle,\n            width: defaultTableCellProperties.borderWidth\n        });\n        editor.commands.add('tableCellBorderStyle', new TableCellBorderStyleCommand(editor, defaultTableCellProperties.borderStyle));\n        editor.commands.add('tableCellBorderColor', new TableCellBorderColorCommand(editor, defaultTableCellProperties.borderColor));\n        editor.commands.add('tableCellBorderWidth', new TableCellBorderWidthCommand(editor, defaultTableCellProperties.borderWidth));\n        enableProperty(schema, conversion, {\n            modelAttribute: 'tableCellHeight',\n            styleName: 'height',\n            defaultValue: defaultTableCellProperties.height\n        });\n        editor.commands.add('tableCellHeight', new TableCellHeightCommand(editor, defaultTableCellProperties.height));\n        editor.data.addStyleProcessorRules(addPaddingRules);\n        enableProperty(schema, conversion, {\n            modelAttribute: 'tableCellPadding',\n            styleName: 'padding',\n            reduceBoxSides: true,\n            defaultValue: defaultTableCellProperties.padding\n        });\n        editor.commands.add('tableCellPadding', new TableCellPaddingCommand(editor, defaultTableCellProperties.padding));\n        editor.data.addStyleProcessorRules(addBackgroundRules);\n        enableProperty(schema, conversion, {\n            modelAttribute: 'tableCellBackgroundColor',\n            styleName: 'background-color',\n            defaultValue: defaultTableCellProperties.backgroundColor\n        });\n        editor.commands.add('tableCellBackgroundColor', new TableCellBackgroundColorCommand(editor, defaultTableCellProperties.backgroundColor));\n        enableHorizontalAlignmentProperty(schema, conversion, defaultTableCellProperties.horizontalAlignment);\n        editor.commands.add('tableCellHorizontalAlignment', new TableCellHorizontalAlignmentCommand(editor, defaultTableCellProperties.horizontalAlignment));\n        enableVerticalAlignmentProperty(schema, conversion, defaultTableCellProperties.verticalAlignment);\n        editor.commands.add('tableCellVerticalAlignment', new TableCellVerticalAlignmentCommand(editor, defaultTableCellProperties.verticalAlignment));\n    }\n}\n/**\n * Enables the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` attributes for table cells.\n *\n * @param defaultBorder The default border values.\n * @param defaultBorder.color The default `tableCellBorderColor` value.\n * @param defaultBorder.style The default `tableCellBorderStyle` value.\n * @param defaultBorder.width The default `tableCellBorderWidth` value.\n */\nfunction enableBorderProperties(schema, conversion, defaultBorder) {\n    const modelAttributes = {\n        width: 'tableCellBorderWidth',\n        color: 'tableCellBorderColor',\n        style: 'tableCellBorderStyle'\n    };\n    schema.extend('tableCell', {\n        allowAttributes: Object.values(modelAttributes)\n    });\n    upcastBorderStyles(conversion, 'td', modelAttributes, defaultBorder);\n    upcastBorderStyles(conversion, 'th', modelAttributes, defaultBorder);\n    downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.style, styleName: 'border-style' });\n    downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.color, styleName: 'border-color' });\n    downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.width, styleName: 'border-width' });\n}\n/**\n * Enables the `'tableCellHorizontalAlignment'` attribute for table cells.\n *\n * @param defaultValue The default horizontal alignment value.\n */\nfunction enableHorizontalAlignmentProperty(schema, conversion, defaultValue) {\n    schema.extend('tableCell', {\n        allowAttributes: ['tableCellHorizontalAlignment']\n    });\n    conversion.for('downcast')\n        .attributeToAttribute({\n        model: {\n            name: 'tableCell',\n            key: 'tableCellHorizontalAlignment'\n        },\n        view: alignment => ({\n            key: 'style',\n            value: {\n                'text-align': alignment\n            }\n        })\n    });\n    conversion.for('upcast')\n        // Support for the `text-align:*;` CSS definition for the table cell alignment.\n        .attributeToAttribute({\n        view: {\n            name: /^(td|th)$/,\n            styles: {\n                'text-align': ALIGN_VALUES_REG_EXP\n            }\n        },\n        model: {\n            key: 'tableCellHorizontalAlignment',\n            value: (viewElement) => {\n                const align = viewElement.getStyle('text-align');\n                return align === defaultValue ? null : align;\n            }\n        }\n    })\n        // Support for the `align` attribute as the backward compatibility while pasting from other sources.\n        .attributeToAttribute({\n        view: {\n            name: /^(td|th)$/,\n            attributes: {\n                align: ALIGN_VALUES_REG_EXP\n            }\n        },\n        model: {\n            key: 'tableCellHorizontalAlignment',\n            value: (viewElement) => {\n                const align = viewElement.getAttribute('align');\n                return align === defaultValue ? null : align;\n            }\n        }\n    });\n}\n/**\n * Enables the `'verticalAlignment'` attribute for table cells.\n *\n * @param defaultValue The default vertical alignment value.\n */\nfunction enableVerticalAlignmentProperty(schema, conversion, defaultValue) {\n    schema.extend('tableCell', {\n        allowAttributes: ['tableCellVerticalAlignment']\n    });\n    conversion.for('downcast')\n        .attributeToAttribute({\n        model: {\n            name: 'tableCell',\n            key: 'tableCellVerticalAlignment'\n        },\n        view: alignment => ({\n            key: 'style',\n            value: {\n                'vertical-align': alignment\n            }\n        })\n    });\n    conversion.for('upcast')\n        // Support for the `vertical-align:*;` CSS definition for the table cell alignment.\n        .attributeToAttribute({\n        view: {\n            name: /^(td|th)$/,\n            styles: {\n                'vertical-align': VALIGN_VALUES_REG_EXP\n            }\n        },\n        model: {\n            key: 'tableCellVerticalAlignment',\n            value: (viewElement) => {\n                const align = viewElement.getStyle('vertical-align');\n                return align === defaultValue ? null : align;\n            }\n        }\n    })\n        // Support for the `align` attribute as the backward compatibility while pasting from other sources.\n        .attributeToAttribute({\n        view: {\n            name: /^(td|th)$/,\n            attributes: {\n                valign: VALIGN_VALUES_REG_EXP\n            }\n        },\n        model: {\n            key: 'tableCellVerticalAlignment',\n            value: (viewElement) => {\n                const valign = viewElement.getAttribute('valign');\n                return valign === defaultValue ? null : valign;\n            }\n        }\n    });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Command } from 'ckeditor5/src/core.js';\nimport { getSelectionAffectedTable } from '../../utils/common.js';\n/**\n * The table cell attribute command.\n *\n * This command is a base command for other table property commands.\n */\nexport default class TablePropertyCommand extends Command {\n    /**\n     * Creates a new `TablePropertyCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param attributeName Table cell attribute name.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, attributeName, defaultValue) {\n        super(editor);\n        this.attributeName = attributeName;\n        this._defaultValue = defaultValue;\n    }\n    /**\n     * @inheritDoc\n     */\n    refresh() {\n        const editor = this.editor;\n        const selection = editor.model.document.selection;\n        const table = getSelectionAffectedTable(selection);\n        this.isEnabled = !!table;\n        this.value = this._getValue(table);\n    }\n    /**\n     * Executes the command.\n     *\n     * @fires execute\n     * @param options.value If set, the command will set the attribute on the selected table.\n     * If not set, the command will remove the attribute from the selected table.\n     * @param options.batch Pass the model batch instance to the command to aggregate changes,\n     * for example, to allow a single undo step for multiple executions.\n     */\n    execute(options = {}) {\n        const model = this.editor.model;\n        const selection = model.document.selection;\n        const { value, batch } = options;\n        const table = getSelectionAffectedTable(selection);\n        const valueToSet = this._getValueToSet(value);\n        model.enqueueChange(batch, writer => {\n            if (valueToSet) {\n                writer.setAttribute(this.attributeName, valueToSet, table);\n            }\n            else {\n                writer.removeAttribute(this.attributeName, table);\n            }\n        });\n    }\n    /**\n     * Returns the attribute value for a table.\n     */\n    _getValue(table) {\n        if (!table) {\n            return;\n        }\n        const value = table.getAttribute(this.attributeName);\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n    /**\n     * Returns the proper model value. It can be used to add a default unit to numeric values.\n     */\n    _getValueToSet(value) {\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TablePropertyCommand from './tablepropertycommand.js';\n/**\n * The table background color command.\n *\n * The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as\n * the `'tableBackgroundColor'` editor command.\n *\n * To change the background color of the selected table, execute the command:\n *\n * ```ts\n * editor.execute( 'tableBackgroundColor', {\n *   value: '#f00'\n * } );\n * ```\n */\nexport default class TableBackgroundColorCommand extends TablePropertyCommand {\n    /**\n     * Creates a new `TableBackgroundColorCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableBackgroundColor', defaultValue);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TablePropertyCommand from './tablepropertycommand.js';\nimport { getSingleValue } from '../../utils/table-properties.js';\n/**\n * The table border color command.\n *\n * The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as\n * the `'tableBorderColor'` editor command.\n *\n * To change the border color of the selected table, execute the command:\n *\n * ```ts\n * editor.execute( 'tableBorderColor', {\n *   value: '#f00'\n * } );\n * ```\n */\nexport default class TableBorderColorCommand extends TablePropertyCommand {\n    /**\n     * Creates a new `TableBorderColorCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableBorderColor', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValue(table) {\n        if (!table) {\n            return;\n        }\n        const value = getSingleValue(table.getAttribute(this.attributeName));\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TablePropertyCommand from './tablepropertycommand.js';\nimport { getSingleValue } from '../../utils/table-properties.js';\n/**\n * The table style border command.\n *\n * The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as\n * the `'tableBorderStyle'` editor command.\n *\n * To change the border style of the selected table, execute the command:\n *\n * ```ts\n * editor.execute( 'tableBorderStyle', {\n *   value: 'dashed'\n * } );\n * ```\n */\nexport default class TableBorderStyleCommand extends TablePropertyCommand {\n    /**\n     * Creates a new `TableBorderStyleCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableBorderStyle', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValue(table) {\n        if (!table) {\n            return;\n        }\n        const value = getSingleValue(table.getAttribute(this.attributeName));\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TablePropertyCommand from './tablepropertycommand.js';\nimport { addDefaultUnitToNumericValue, getSingleValue } from '../../utils/table-properties.js';\n/**\n * The table width border command.\n *\n * The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as\n * the `'tableBorderWidth'` editor command.\n *\n * To change the border width of the selected table, execute the command:\n *\n * ```ts\n * editor.execute( 'tableBorderWidth', {\n *   value: '5px'\n * } );\n * ```\n *\n * **Note**: This command adds the default `'px'` unit to numeric values. Executing:\n *\n * ```ts\n * editor.execute( 'tableBorderWidth', {\n *   value: '5'\n * } );\n * ```\n *\n * will set the `borderWidth` attribute to `'5px'` in the model.\n */\nexport default class TableBorderWidthCommand extends TablePropertyCommand {\n    /**\n     * Creates a new `TableBorderWidthCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableBorderWidth', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValue(table) {\n        if (!table) {\n            return;\n        }\n        const value = getSingleValue(table.getAttribute(this.attributeName));\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValueToSet(value) {\n        const newValue = addDefaultUnitToNumericValue(value, 'px');\n        if (newValue === this._defaultValue) {\n            return;\n        }\n        return newValue;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableproperties/commands/tablewidthcommand\n */\nimport TablePropertyCommand from './tablepropertycommand.js';\nimport { addDefaultUnitToNumericValue } from '../../utils/table-properties.js';\n/**\n * The table width command.\n *\n * The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as\n * the `'tableWidth'` editor command.\n *\n * To change the width of the selected table, execute the command:\n *\n * ```ts\n * editor.execute( 'tableWidth', {\n *   value: '400px'\n * } );\n * ```\n *\n * **Note**: This command adds the default `'px'` unit to numeric values. Executing:\n *\n * ```ts\n * editor.execute( 'tableWidth', {\n *   value: '50'\n * } );\n * ```\n *\n * will set the `width` attribute to `'50px'` in the model.\n */\nexport default class TableWidthCommand extends TablePropertyCommand {\n    /**\n     * Creates a new `TableWidthCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableWidth', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValueToSet(value) {\n        value = addDefaultUnitToNumericValue(value, 'px');\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableproperties/commands/tableheightcommand\n */\nimport TablePropertyCommand from './tablepropertycommand.js';\nimport { addDefaultUnitToNumericValue } from '../../utils/table-properties.js';\n/**\n * The table height command.\n *\n * The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as\n * the `'tableHeight'` editor command.\n *\n * To change the height of the selected table, execute the command:\n *\n * ```ts\n * editor.execute( 'tableHeight', {\n *   value: '500px'\n * } );\n * ```\n *\n * **Note**: This command adds the default `'px'` unit to numeric values. Executing:\n *\n * ```ts\n * editor.execute( 'tableHeight', {\n *   value: '50'\n * } );\n * ```\n *\n * will set the `height` attribute to `'50px'` in the model.\n */\nexport default class TableHeightCommand extends TablePropertyCommand {\n    /**\n     * Creates a new `TableHeightCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value of the attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableHeight', defaultValue);\n    }\n    /**\n     * @inheritDoc\n     */\n    _getValueToSet(value) {\n        value = addDefaultUnitToNumericValue(value, 'px');\n        if (value === this._defaultValue) {\n            return;\n        }\n        return value;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport TablePropertyCommand from './tablepropertycommand.js';\n/**\n * The table alignment command.\n *\n * The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as\n * the `'tableAlignment'` editor command.\n *\n * To change the alignment of the selected table, execute the command:\n *\n * ```ts\n * editor.execute( 'tableAlignment', {\n *   value: 'right'\n * } );\n * ```\n */\nexport default class TableAlignmentCommand extends TablePropertyCommand {\n    /**\n     * Creates a new `TableAlignmentCommand` instance.\n     *\n     * @param editor An editor in which this command will be used.\n     * @param defaultValue The default value for the \"alignment\" attribute.\n     */\n    constructor(editor, defaultValue) {\n        super(editor, 'tableAlignment', defaultValue);\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableproperties/tablepropertiesediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { addBackgroundRules, addBorderRules } from 'ckeditor5/src/engine.js';\nimport TableEditing from '../tableediting.js';\nimport { downcastAttributeToStyle, downcastTableAttribute, upcastBorderStyles, upcastStyleToAttribute } from '../converters/tableproperties.js';\nimport TableBackgroundColorCommand from './commands/tablebackgroundcolorcommand.js';\nimport TableBorderColorCommand from './commands/tablebordercolorcommand.js';\nimport TableBorderStyleCommand from './commands/tableborderstylecommand.js';\nimport TableBorderWidthCommand from './commands/tableborderwidthcommand.js';\nimport TableWidthCommand from './commands/tablewidthcommand.js';\nimport TableHeightCommand from './commands/tableheightcommand.js';\nimport TableAlignmentCommand from './commands/tablealignmentcommand.js';\nimport { getNormalizedDefaultTableProperties } from '../utils/table-properties.js';\nconst ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;\nconst FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;\n/**\n * The table properties editing feature.\n *\n * Introduces table's model attributes and their conversion:\n *\n * - border: `tableBorderStyle`, `tableBorderColor` and `tableBorderWidth`\n * - background color: `tableBackgroundColor`\n * - horizontal alignment: `tableAlignment`\n * - width & height: `tableWidth` & `tableHeight`\n *\n * It also registers commands used to manipulate the above attributes:\n *\n * - border: `'tableBorderStyle'`, `'tableBorderColor'` and `'tableBorderWidth'` commands\n * - background color: `'tableBackgroundColor'`\n * - horizontal alignment: `'tableAlignment'`\n * - width & height: `'tableWidth'` & `'tableHeight'`\n */\nexport default class TablePropertiesEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TablePropertiesEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableEditing];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const schema = editor.model.schema;\n        const conversion = editor.conversion;\n        editor.config.define('table.tableProperties.defaultProperties', {});\n        const defaultTableProperties = getNormalizedDefaultTableProperties(editor.config.get('table.tableProperties.defaultProperties'), {\n            includeAlignmentProperty: true\n        });\n        editor.data.addStyleProcessorRules(addBorderRules);\n        enableBorderProperties(schema, conversion, {\n            color: defaultTableProperties.borderColor,\n            style: defaultTableProperties.borderStyle,\n            width: defaultTableProperties.borderWidth\n        });\n        editor.commands.add('tableBorderColor', new TableBorderColorCommand(editor, defaultTableProperties.borderColor));\n        editor.commands.add('tableBorderStyle', new TableBorderStyleCommand(editor, defaultTableProperties.borderStyle));\n        editor.commands.add('tableBorderWidth', new TableBorderWidthCommand(editor, defaultTableProperties.borderWidth));\n        enableAlignmentProperty(schema, conversion, defaultTableProperties.alignment);\n        editor.commands.add('tableAlignment', new TableAlignmentCommand(editor, defaultTableProperties.alignment));\n        enableTableToFigureProperty(schema, conversion, {\n            modelAttribute: 'tableWidth',\n            styleName: 'width',\n            defaultValue: defaultTableProperties.width\n        });\n        editor.commands.add('tableWidth', new TableWidthCommand(editor, defaultTableProperties.width));\n        enableTableToFigureProperty(schema, conversion, {\n            modelAttribute: 'tableHeight',\n            styleName: 'height',\n            defaultValue: defaultTableProperties.height\n        });\n        editor.commands.add('tableHeight', new TableHeightCommand(editor, defaultTableProperties.height));\n        editor.data.addStyleProcessorRules(addBackgroundRules);\n        enableProperty(schema, conversion, {\n            modelAttribute: 'tableBackgroundColor',\n            styleName: 'background-color',\n            defaultValue: defaultTableProperties.backgroundColor\n        });\n        editor.commands.add('tableBackgroundColor', new TableBackgroundColorCommand(editor, defaultTableProperties.backgroundColor));\n    }\n}\n/**\n * Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.\n *\n * @param defaultBorder The default border values.\n * @param defaultBorder.color The default `tableBorderColor` value.\n * @param defaultBorder.style The default `tableBorderStyle` value.\n * @param defaultBorder.width The default `tableBorderWidth` value.\n */\nfunction enableBorderProperties(schema, conversion, defaultBorder) {\n    const modelAttributes = {\n        width: 'tableBorderWidth',\n        color: 'tableBorderColor',\n        style: 'tableBorderStyle'\n    };\n    schema.extend('table', {\n        allowAttributes: Object.values(modelAttributes)\n    });\n    upcastBorderStyles(conversion, 'table', modelAttributes, defaultBorder);\n    downcastTableAttribute(conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' });\n    downcastTableAttribute(conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' });\n    downcastTableAttribute(conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' });\n}\n/**\n * Enables the `'alignment'` attribute for table.\n *\n * @param defaultValue The default alignment value.\n */\nfunction enableAlignmentProperty(schema, conversion, defaultValue) {\n    schema.extend('table', {\n        allowAttributes: ['tableAlignment']\n    });\n    conversion.for('downcast')\n        .attributeToAttribute({\n        model: {\n            name: 'table',\n            key: 'tableAlignment'\n        },\n        view: alignment => ({\n            key: 'style',\n            value: {\n                // Model: `alignment:center` => CSS: `float:none`.\n                float: alignment === 'center' ? 'none' : alignment\n            }\n        }),\n        converterPriority: 'high'\n    });\n    conversion.for('upcast')\n        // Support for the `float:*;` CSS definition for the table alignment.\n        .attributeToAttribute({\n        view: {\n            name: /^(table|figure)$/,\n            styles: {\n                float: FLOAT_VALUES_REG_EXP\n            }\n        },\n        model: {\n            key: 'tableAlignment',\n            value: (viewElement) => {\n                let align = viewElement.getStyle('float');\n                // CSS: `float:none` => Model: `alignment:center`.\n                if (align === 'none') {\n                    align = 'center';\n                }\n                return align === defaultValue ? null : align;\n            }\n        }\n    })\n        // Support for the `align` attribute as the backward compatibility while pasting from other sources.\n        .attributeToAttribute({\n        view: {\n            attributes: {\n                align: ALIGN_VALUES_REG_EXP\n            }\n        },\n        model: {\n            name: 'table',\n            key: 'tableAlignment',\n            value: (viewElement) => {\n                const align = viewElement.getAttribute('align');\n                return align === defaultValue ? null : align;\n            }\n        }\n    });\n}\n/**\n * Enables conversion for an attribute for simple view-model mappings.\n *\n * @param options.defaultValue The default value for the specified `modelAttribute`.\n */\nfunction enableProperty(schema, conversion, options) {\n    const { modelAttribute } = options;\n    schema.extend('table', {\n        allowAttributes: [modelAttribute]\n    });\n    upcastStyleToAttribute(conversion, { viewElement: 'table', ...options });\n    downcastTableAttribute(conversion, options);\n}\n/**\n * Enables conversion for an attribute for simple view (figure) to model (table) mappings.\n */\nfunction enableTableToFigureProperty(schema, conversion, options) {\n    const { modelAttribute } = options;\n    schema.extend('table', {\n        allowAttributes: [modelAttribute]\n    });\n    upcastStyleToAttribute(conversion, {\n        viewElement: /^(table|figure)$/,\n        shouldUpcast: (element) => !(element.name == 'table' && element.parent.name == 'figure'),\n        ...options\n    });\n    downcastAttributeToStyle(conversion, { modelElement: 'table', ...options });\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableproperties/ui/tablepropertiesview\n */\nimport { addListToDropdown, ButtonView, createLabeledDropdown, createLabeledInputText, FocusCycler, FormHeaderView, LabeledFieldView, LabelView, submitHandler, ToolbarView, View, ViewCollection } from 'ckeditor5/src/ui.js';\nimport { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils.js';\nimport { icons } from 'ckeditor5/src/core.js';\nimport { fillToolbar, getBorderStyleDefinitions, getBorderStyleLabels, getLabeledColorInputCreator } from '../../utils/ui/table-properties.js';\nimport FormRowView from '../../ui/formrowview.js';\nimport '../../../theme/form.css';\nimport '../../../theme/tableform.css';\nimport '../../../theme/tableproperties.css';\n/**\n * The class representing a table properties form, allowing users to customize\n * certain style aspects of a table, for instance, border, background color, alignment, etc..\n */\nexport default class TablePropertiesView extends View {\n    /**\n     * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n     * @param options Additional configuration of the view.\n     */\n    constructor(locale, options) {\n        super(locale);\n        this.set({\n            borderStyle: '',\n            borderWidth: '',\n            borderColor: '',\n            backgroundColor: '',\n            width: '',\n            height: '',\n            alignment: ''\n        });\n        this.options = options;\n        const { borderStyleDropdown, borderWidthInput, borderColorInput, borderRowLabel } = this._createBorderFields();\n        const { backgroundRowLabel, backgroundInput } = this._createBackgroundFields();\n        const { widthInput, operatorLabel, heightInput, dimensionsLabel } = this._createDimensionFields();\n        const { alignmentToolbar, alignmentLabel } = this._createAlignmentFields();\n        this.focusTracker = new FocusTracker();\n        this.keystrokes = new KeystrokeHandler();\n        this.children = this.createCollection();\n        this.borderStyleDropdown = borderStyleDropdown;\n        this.borderWidthInput = borderWidthInput;\n        this.borderColorInput = borderColorInput;\n        this.backgroundInput = backgroundInput;\n        this.widthInput = widthInput;\n        this.heightInput = heightInput;\n        this.alignmentToolbar = alignmentToolbar;\n        // Defer creating to make sure other fields are present and the Save button can\n        // bind its #isEnabled to their error messages so there's no way to save unless all\n        // fields are valid.\n        const { saveButtonView, cancelButtonView } = this._createActionButtons();\n        this.saveButtonView = saveButtonView;\n        this.cancelButtonView = cancelButtonView;\n        this._focusables = new ViewCollection();\n        this._focusCycler = new FocusCycler({\n            focusables: this._focusables,\n            focusTracker: this.focusTracker,\n            keystrokeHandler: this.keystrokes,\n            actions: {\n                // Navigate form fields backwards using the Shift + Tab keystroke.\n                focusPrevious: 'shift + tab',\n                // Navigate form fields forwards using the Tab key.\n                focusNext: 'tab'\n            }\n        });\n        // Form header.\n        this.children.add(new FormHeaderView(locale, {\n            label: this.t('Table properties')\n        }));\n        // Border row.\n        this.children.add(new FormRowView(locale, {\n            labelView: borderRowLabel,\n            children: [\n                borderRowLabel,\n                borderStyleDropdown,\n                borderColorInput,\n                borderWidthInput\n            ],\n            class: 'ck-table-form__border-row'\n        }));\n        // Background row.\n        this.children.add(new FormRowView(locale, {\n            labelView: backgroundRowLabel,\n            children: [\n                backgroundRowLabel,\n                backgroundInput\n            ],\n            class: 'ck-table-form__background-row'\n        }));\n        this.children.add(new FormRowView(locale, {\n            children: [\n                // Dimensions row.\n                new FormRowView(locale, {\n                    labelView: dimensionsLabel,\n                    children: [\n                        dimensionsLabel,\n                        widthInput,\n                        operatorLabel,\n                        heightInput\n                    ],\n                    class: 'ck-table-form__dimensions-row'\n                }),\n                // Alignment row.\n                new FormRowView(locale, {\n                    labelView: alignmentLabel,\n                    children: [\n                        alignmentLabel,\n                        alignmentToolbar\n                    ],\n                    class: 'ck-table-properties-form__alignment-row'\n                })\n            ]\n        }));\n        // Action row.\n        this.children.add(new FormRowView(locale, {\n            children: [\n                this.saveButtonView,\n                this.cancelButtonView\n            ],\n            class: 'ck-table-form__action-row'\n        }));\n        this.setTemplate({\n            tag: 'form',\n            attributes: {\n                class: [\n                    'ck',\n                    'ck-form',\n                    'ck-table-form',\n                    'ck-table-properties-form'\n                ],\n                // https://github.com/ckeditor/ckeditor5-link/issues/90\n                tabindex: '-1'\n            },\n            children: this.children\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    render() {\n        super.render();\n        // Enable the \"submit\" event for this view. It can be triggered by the #saveButtonView\n        // which is of the \"submit\" DOM \"type\".\n        submitHandler({\n            view: this\n        });\n        // Maintain continuous focus cycling over views that have focusable children and focus cyclers themselves.\n        [this.borderColorInput, this.backgroundInput].forEach(view => {\n            this._focusCycler.chain(view.fieldView.focusCycler);\n        });\n        [\n            this.borderStyleDropdown,\n            this.borderColorInput,\n            this.borderWidthInput,\n            this.backgroundInput,\n            this.widthInput,\n            this.heightInput,\n            this.alignmentToolbar,\n            this.saveButtonView,\n            this.cancelButtonView\n        ].forEach(view => {\n            // Register the view as focusable.\n            this._focusables.add(view);\n            // Register the view in the focus tracker.\n            this.focusTracker.add(view.element);\n        });\n        // Mainly for closing using \"Esc\" and navigation using \"Tab\".\n        this.keystrokes.listenTo(this.element);\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        this.focusTracker.destroy();\n        this.keystrokes.destroy();\n    }\n    /**\n     * Focuses the fist focusable field in the form.\n     */\n    focus() {\n        this._focusCycler.focusFirst();\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #borderStyleDropdown},\n     * * {@link #borderWidthInput},\n     * * {@link #borderColorInput}.\n     */\n    _createBorderFields() {\n        const defaultTableProperties = this.options.defaultTableProperties;\n        const defaultBorder = {\n            style: defaultTableProperties.borderStyle,\n            width: defaultTableProperties.borderWidth,\n            color: defaultTableProperties.borderColor\n        };\n        const colorInputCreator = getLabeledColorInputCreator({\n            colorConfig: this.options.borderColors,\n            columns: 5,\n            defaultColorValue: defaultBorder.color,\n            colorPickerConfig: this.options.colorPickerConfig\n        });\n        const locale = this.locale;\n        const t = this.t;\n        const accessibleLabel = t('Style');\n        // -- Group label ---------------------------------------------\n        const borderRowLabel = new LabelView(locale);\n        borderRowLabel.text = t('Border');\n        // -- Style ---------------------------------------------------\n        const styleLabels = getBorderStyleLabels(t);\n        const borderStyleDropdown = new LabeledFieldView(locale, createLabeledDropdown);\n        borderStyleDropdown.set({\n            label: accessibleLabel,\n            class: 'ck-table-form__border-style'\n        });\n        borderStyleDropdown.fieldView.buttonView.set({\n            ariaLabel: accessibleLabel,\n            ariaLabelledBy: undefined,\n            isOn: false,\n            withText: true,\n            tooltip: accessibleLabel\n        });\n        borderStyleDropdown.fieldView.buttonView.bind('label').to(this, 'borderStyle', value => {\n            return styleLabels[value ? value : 'none'];\n        });\n        borderStyleDropdown.fieldView.on('execute', evt => {\n            this.borderStyle = evt.source._borderStyleValue;\n        });\n        borderStyleDropdown.bind('isEmpty').to(this, 'borderStyle', value => !value);\n        addListToDropdown(borderStyleDropdown.fieldView, getBorderStyleDefinitions(this, defaultBorder.style), {\n            role: 'menu',\n            ariaLabel: accessibleLabel\n        });\n        // -- Width ---------------------------------------------------\n        const borderWidthInput = new LabeledFieldView(locale, createLabeledInputText);\n        borderWidthInput.set({\n            label: t('Width'),\n            class: 'ck-table-form__border-width'\n        });\n        borderWidthInput.fieldView.bind('value').to(this, 'borderWidth');\n        borderWidthInput.bind('isEnabled').to(this, 'borderStyle', isBorderStyleSet);\n        borderWidthInput.fieldView.on('input', () => {\n            this.borderWidth = borderWidthInput.fieldView.element.value;\n        });\n        // -- Color ---------------------------------------------------\n        const borderColorInput = new LabeledFieldView(locale, colorInputCreator);\n        borderColorInput.set({\n            label: t('Color'),\n            class: 'ck-table-form__border-color'\n        });\n        borderColorInput.fieldView.bind('value').to(this, 'borderColor');\n        borderColorInput.bind('isEnabled').to(this, 'borderStyle', isBorderStyleSet);\n        borderColorInput.fieldView.on('input', () => {\n            this.borderColor = borderColorInput.fieldView.value;\n        });\n        // Reset the border color and width fields depending on the `border-style` value.\n        this.on('change:borderStyle', (evt, name, newValue, oldValue) => {\n            // When removing the border (`border-style:none`), clear the remaining `border-*` properties.\n            // See: https://github.com/ckeditor/ckeditor5/issues/6227.\n            if (!isBorderStyleSet(newValue)) {\n                this.borderColor = '';\n                this.borderWidth = '';\n            }\n            // When setting the `border-style` from `none`, set the default `border-color` and `border-width` properties.\n            if (!isBorderStyleSet(oldValue)) {\n                this.borderColor = defaultBorder.color;\n                this.borderWidth = defaultBorder.width;\n            }\n        });\n        return {\n            borderRowLabel,\n            borderStyleDropdown,\n            borderColorInput,\n            borderWidthInput\n        };\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #backgroundInput}.\n     */\n    _createBackgroundFields() {\n        const locale = this.locale;\n        const t = this.t;\n        // -- Group label ---------------------------------------------\n        const backgroundRowLabel = new LabelView(locale);\n        backgroundRowLabel.text = t('Background');\n        // -- Background color input -----------------------------------\n        const backgroundInputCreator = getLabeledColorInputCreator({\n            colorConfig: this.options.backgroundColors,\n            columns: 5,\n            defaultColorValue: this.options.defaultTableProperties.backgroundColor,\n            colorPickerConfig: this.options.colorPickerConfig\n        });\n        const backgroundInput = new LabeledFieldView(locale, backgroundInputCreator);\n        backgroundInput.set({\n            label: t('Color'),\n            class: 'ck-table-properties-form__background'\n        });\n        backgroundInput.fieldView.bind('value').to(this, 'backgroundColor');\n        backgroundInput.fieldView.on('input', () => {\n            this.backgroundColor = backgroundInput.fieldView.value;\n        });\n        return {\n            backgroundRowLabel,\n            backgroundInput\n        };\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #widthInput},\n     * * {@link #heightInput}.\n     */\n    _createDimensionFields() {\n        const locale = this.locale;\n        const t = this.t;\n        // -- Label ---------------------------------------------------\n        const dimensionsLabel = new LabelView(locale);\n        dimensionsLabel.text = t('Dimensions');\n        // -- Width ---------------------------------------------------\n        const widthInput = new LabeledFieldView(locale, createLabeledInputText);\n        widthInput.set({\n            label: t('Width'),\n            class: 'ck-table-form__dimensions-row__width'\n        });\n        widthInput.fieldView.bind('value').to(this, 'width');\n        widthInput.fieldView.on('input', () => {\n            this.width = widthInput.fieldView.element.value;\n        });\n        // -- Operator ---------------------------------------------------\n        const operatorLabel = new View(locale);\n        operatorLabel.setTemplate({\n            tag: 'span',\n            attributes: {\n                class: [\n                    'ck-table-form__dimension-operator'\n                ]\n            },\n            children: [\n                { text: '×' }\n            ]\n        });\n        // -- Height ---------------------------------------------------\n        const heightInput = new LabeledFieldView(locale, createLabeledInputText);\n        heightInput.set({\n            label: t('Height'),\n            class: 'ck-table-form__dimensions-row__height'\n        });\n        heightInput.fieldView.bind('value').to(this, 'height');\n        heightInput.fieldView.on('input', () => {\n            this.height = heightInput.fieldView.element.value;\n        });\n        return {\n            dimensionsLabel,\n            widthInput,\n            operatorLabel,\n            heightInput\n        };\n    }\n    /**\n     * Creates the following form fields:\n     *\n     * * {@link #alignmentToolbar}.\n     */\n    _createAlignmentFields() {\n        const locale = this.locale;\n        const t = this.t;\n        // -- Label ---------------------------------------------------\n        const alignmentLabel = new LabelView(locale);\n        alignmentLabel.text = t('Alignment');\n        // -- Toolbar ---------------------------------------------------\n        const alignmentToolbar = new ToolbarView(locale);\n        alignmentToolbar.set({\n            isCompact: true,\n            ariaLabel: t('Table alignment toolbar')\n        });\n        fillToolbar({\n            view: this,\n            icons: {\n                left: icons.objectLeft,\n                center: icons.objectCenter,\n                right: icons.objectRight\n            },\n            toolbar: alignmentToolbar,\n            labels: this._alignmentLabels,\n            propertyName: 'alignment',\n            defaultValue: this.options.defaultTableProperties.alignment\n        });\n        return {\n            alignmentLabel,\n            alignmentToolbar\n        };\n    }\n    /**\n     * Creates the following form controls:\n     *\n     * * {@link #saveButtonView},\n     * * {@link #cancelButtonView}.\n     */\n    _createActionButtons() {\n        const locale = this.locale;\n        const t = this.t;\n        const saveButtonView = new ButtonView(locale);\n        const cancelButtonView = new ButtonView(locale);\n        const fieldsThatShouldValidateToSave = [\n            this.borderWidthInput,\n            this.borderColorInput,\n            this.backgroundInput,\n            this.widthInput,\n            this.heightInput\n        ];\n        saveButtonView.set({\n            label: t('Save'),\n            icon: icons.check,\n            class: 'ck-button-save',\n            type: 'submit',\n            withText: true\n        });\n        saveButtonView.bind('isEnabled').toMany(fieldsThatShouldValidateToSave, 'errorText', (...errorTexts) => {\n            return errorTexts.every(errorText => !errorText);\n        });\n        cancelButtonView.set({\n            label: t('Cancel'),\n            icon: icons.cancel,\n            class: 'ck-button-cancel',\n            withText: true\n        });\n        cancelButtonView.delegate('execute').to(this, 'cancel');\n        return {\n            saveButtonView, cancelButtonView\n        };\n    }\n    /**\n     * Provides localized labels for {@link #alignmentToolbar} buttons.\n     */\n    get _alignmentLabels() {\n        const locale = this.locale;\n        const t = this.t;\n        const left = t('Align table to the left');\n        const center = t('Center table');\n        const right = t('Align table to the right');\n        // Returns object with a proper order of labels.\n        if (locale.uiLanguageDirection === 'rtl') {\n            return { right, center, left };\n        }\n        else {\n            return { left, center, right };\n        }\n    }\n}\nfunction isBorderStyleSet(value) {\n    return value !== 'none';\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M8 2v5h4V2h1v5h5v1h-5v4h.021l-.172.351-1.916.28-.151.027c-.287.063-.54.182-.755.341L8 13v5H7v-5H2v-1h5V8H2V7h5V2h1zm4 6H8v4h4V8z\\\" opacity=\\\".6\\\"/><path d=\\\"m15.5 11.5 1.323 2.68 2.957.43-2.14 2.085.505 2.946L15.5 18.25l-2.645 1.39.505-2.945-2.14-2.086 2.957-.43L15.5 11.5zM17 1a2 2 0 0 1 2 2v9.475l-.85-.124-.857-1.736a2.048 2.048 0 0 0-.292-.44L17 3H3v14h7.808l.402.392L10.935 19H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h14z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableproperties/tablepropertiesui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, ContextualBalloon, clickOutsideHandler, getLocalizedColorOptions, normalizeColorOptions } from 'ckeditor5/src/ui.js';\nimport { debounce } from 'lodash-es';\nimport TablePropertiesView from './ui/tablepropertiesview.js';\nimport tableProperties from './../../theme/icons/table-properties.svg';\nimport { colorFieldValidator, getLocalizedColorErrorText, getLocalizedLengthErrorText, lengthFieldValidator, lineWidthFieldValidator, defaultColors } from '../utils/ui/table-properties.js';\nimport { getSelectionAffectedTableWidget } from '../utils/ui/widget.js';\nimport { getBalloonTablePositionData, repositionContextualBalloon } from '../utils/ui/contextualballoon.js';\nimport { getNormalizedDefaultTableProperties } from '../utils/table-properties.js';\nconst ERROR_TEXT_TIMEOUT = 500;\n// Map of view properties and related commands.\nconst propertyToCommandMap = {\n    borderStyle: 'tableBorderStyle',\n    borderColor: 'tableBorderColor',\n    borderWidth: 'tableBorderWidth',\n    backgroundColor: 'tableBackgroundColor',\n    width: 'tableWidth',\n    height: 'tableHeight',\n    alignment: 'tableAlignment'\n};\n/**\n * The table properties UI plugin. It introduces the `'tableProperties'` button\n * that opens a form allowing to specify visual styling of an entire table.\n *\n * It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.\n */\nexport default class TablePropertiesUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ContextualBalloon];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TablePropertiesUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        /**\n         * The properties form view displayed inside the balloon.\n         */\n        this.view = null;\n        editor.config.define('table.tableProperties', {\n            borderColors: defaultColors,\n            backgroundColors: defaultColors\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.t;\n        this._defaultTableProperties = getNormalizedDefaultTableProperties(editor.config.get('table.tableProperties.defaultProperties'), {\n            includeAlignmentProperty: true\n        });\n        this._balloon = editor.plugins.get(ContextualBalloon);\n        editor.ui.componentFactory.add('tableProperties', locale => {\n            const view = new ButtonView(locale);\n            view.set({\n                label: t('Table properties'),\n                icon: tableProperties,\n                tooltip: true\n            });\n            this.listenTo(view, 'execute', () => this._showView());\n            const commands = Object.values(propertyToCommandMap)\n                .map(commandName => editor.commands.get(commandName));\n            view.bind('isEnabled').toMany(commands, 'isEnabled', (...areEnabled) => (areEnabled.some(isCommandEnabled => isCommandEnabled)));\n            return view;\n        });\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        // Destroy created UI components as they are not automatically destroyed.\n        // See https://github.com/ckeditor/ckeditor5/issues/1341.\n        if (this.view) {\n            this.view.destroy();\n        }\n    }\n    /**\n     * Creates the {@link module:table/tableproperties/ui/tablepropertiesview~TablePropertiesView} instance.\n     *\n     * @returns The table properties form view instance.\n     */\n    _createPropertiesView() {\n        const editor = this.editor;\n        const config = editor.config.get('table.tableProperties');\n        const borderColorsConfig = normalizeColorOptions(config.borderColors);\n        const localizedBorderColors = getLocalizedColorOptions(editor.locale, borderColorsConfig);\n        const backgroundColorsConfig = normalizeColorOptions(config.backgroundColors);\n        const localizedBackgroundColors = getLocalizedColorOptions(editor.locale, backgroundColorsConfig);\n        const hasColorPicker = config.colorPicker !== false;\n        const view = new TablePropertiesView(editor.locale, {\n            borderColors: localizedBorderColors,\n            backgroundColors: localizedBackgroundColors,\n            defaultTableProperties: this._defaultTableProperties,\n            colorPickerConfig: hasColorPicker ? (config.colorPicker || {}) : false\n        });\n        const t = editor.t;\n        // Render the view so its #element is available for the clickOutsideHandler.\n        view.render();\n        this.listenTo(view, 'submit', () => {\n            this._hideView();\n        });\n        this.listenTo(view, 'cancel', () => {\n            // https://github.com/ckeditor/ckeditor5/issues/6180\n            if (this._undoStepBatch.operations.length) {\n                editor.execute('undo', this._undoStepBatch);\n            }\n            this._hideView();\n        });\n        // Close the balloon on Esc key press.\n        view.keystrokes.set('Esc', (data, cancel) => {\n            this._hideView();\n            cancel();\n        });\n        // Close on click outside of balloon panel element.\n        clickOutsideHandler({\n            emitter: view,\n            activator: () => this._isViewInBalloon,\n            contextElements: [this._balloon.view.element],\n            callback: () => this._hideView()\n        });\n        const colorErrorText = getLocalizedColorErrorText(t);\n        const lengthErrorText = getLocalizedLengthErrorText(t);\n        // Create the \"UI -> editor data\" binding.\n        // These listeners update the editor data (via table commands) when any observable\n        // property of the view has changed. They also validate the value and display errors in the UI\n        // when necessary. This makes the view live, which means the changes are\n        // visible in the editing as soon as the user types or changes fields' values.\n        view.on('change:borderStyle', this._getPropertyChangeCallback('tableBorderStyle'));\n        view.on('change:borderColor', this._getValidatedPropertyChangeCallback({\n            viewField: view.borderColorInput,\n            commandName: 'tableBorderColor',\n            errorText: colorErrorText,\n            validator: colorFieldValidator\n        }));\n        view.on('change:borderWidth', this._getValidatedPropertyChangeCallback({\n            viewField: view.borderWidthInput,\n            commandName: 'tableBorderWidth',\n            errorText: lengthErrorText,\n            validator: lineWidthFieldValidator\n        }));\n        view.on('change:backgroundColor', this._getValidatedPropertyChangeCallback({\n            viewField: view.backgroundInput,\n            commandName: 'tableBackgroundColor',\n            errorText: colorErrorText,\n            validator: colorFieldValidator\n        }));\n        view.on('change:width', this._getValidatedPropertyChangeCallback({\n            viewField: view.widthInput,\n            commandName: 'tableWidth',\n            errorText: lengthErrorText,\n            validator: lengthFieldValidator\n        }));\n        view.on('change:height', this._getValidatedPropertyChangeCallback({\n            viewField: view.heightInput,\n            commandName: 'tableHeight',\n            errorText: lengthErrorText,\n            validator: lengthFieldValidator\n        }));\n        view.on('change:alignment', this._getPropertyChangeCallback('tableAlignment'));\n        return view;\n    }\n    /**\n     * In this method the \"editor data -> UI\" binding is happening.\n     *\n     * When executed, this method obtains selected table property values from various table commands\n     * and passes them to the {@link #view}.\n     *\n     * This way, the UI stays up–to–date with the editor data.\n     */\n    _fillViewFormFromCommandValues() {\n        const commands = this.editor.commands;\n        const borderStyleCommand = commands.get('tableBorderStyle');\n        Object.entries(propertyToCommandMap)\n            .map(([property, commandName]) => {\n            const propertyKey = property;\n            const defaultValue = this._defaultTableProperties[propertyKey] || '';\n            return [propertyKey, (commands.get(commandName).value || defaultValue)];\n        })\n            .forEach(([property, value]) => {\n            // Do not set the `border-color` and `border-width` fields if `border-style:none`.\n            if ((property === 'borderColor' || property === 'borderWidth') && borderStyleCommand.value === 'none') {\n                return;\n            }\n            this.view.set(property, value);\n        });\n        this._isReady = true;\n    }\n    /**\n     * Shows the {@link #view} in the {@link #_balloon}.\n     *\n     * **Note**: Each time a view is shown, the new {@link #_undoStepBatch} is created that contains\n     * all changes made to the document when the view is visible, allowing a single undo step\n     * for all of them.\n     */\n    _showView() {\n        const editor = this.editor;\n        if (!this.view) {\n            this.view = this._createPropertiesView();\n        }\n        this.listenTo(editor.ui, 'update', () => {\n            this._updateView();\n        });\n        // Update the view with the model values.\n        this._fillViewFormFromCommandValues();\n        this._balloon.add({\n            view: this.view,\n            position: getBalloonTablePositionData(editor)\n        });\n        // Create a new batch. Clicking \"Cancel\" will undo this batch.\n        this._undoStepBatch = editor.model.createBatch();\n        // Basic a11y.\n        this.view.focus();\n    }\n    /**\n     * Removes the {@link #view} from the {@link #_balloon}.\n     */\n    _hideView() {\n        const editor = this.editor;\n        this.stopListening(editor.ui, 'update');\n        this._isReady = false;\n        // Blur any input element before removing it from DOM to prevent issues in some browsers.\n        // See https://github.com/ckeditor/ckeditor5/issues/1501.\n        this.view.saveButtonView.focus();\n        this._balloon.remove(this.view);\n        // Make sure the focus is not lost in the process by putting it directly\n        // into the editing view.\n        this.editor.editing.view.focus();\n    }\n    /**\n     * Repositions the {@link #_balloon} or hides the {@link #view} if a table is no longer selected.\n     */\n    _updateView() {\n        const editor = this.editor;\n        const viewDocument = editor.editing.view.document;\n        if (!getSelectionAffectedTableWidget(viewDocument.selection)) {\n            this._hideView();\n        }\n        else if (this._isViewVisible) {\n            repositionContextualBalloon(editor, 'table');\n        }\n    }\n    /**\n     * Returns `true` when the {@link #view} is the visible in the {@link #_balloon}.\n     */\n    get _isViewVisible() {\n        return !!this.view && this._balloon.visibleView === this.view;\n    }\n    /**\n     * Returns `true` when the {@link #view} is in the {@link #_balloon}.\n     */\n    get _isViewInBalloon() {\n        return !!this.view && this._balloon.hasView(this.view);\n    }\n    /**\n     * Creates a callback that when executed upon {@link #view view's} property change\n     * executes a related editor command with the new property value.\n     *\n     * If new value will be set to the default value, the command will not be executed.\n     *\n     * @param commandName The command that will be executed.\n     */\n    _getPropertyChangeCallback(commandName) {\n        return (evt, propertyName, newValue) => {\n            // Do not execute the command on initial call (opening the table properties view).\n            if (!this._isReady) {\n                return;\n            }\n            this.editor.execute(commandName, {\n                value: newValue,\n                batch: this._undoStepBatch\n            });\n        };\n    }\n    /**\n     * Creates a callback that when executed upon {@link #view view's} property change:\n     * * executes a related editor command with the new property value if the value is valid,\n     * * or sets the error text next to the invalid field, if the value did not pass the validation.\n     */\n    _getValidatedPropertyChangeCallback(options) {\n        const { commandName, viewField, validator, errorText } = options;\n        const setErrorTextDebounced = debounce(() => {\n            viewField.errorText = errorText;\n        }, ERROR_TEXT_TIMEOUT);\n        return (evt, propertyName, newValue) => {\n            setErrorTextDebounced.cancel();\n            // Do not execute the command on initial call (opening the table properties view).\n            if (!this._isReady) {\n                return;\n            }\n            if (validator(newValue)) {\n                this.editor.execute(commandName, {\n                    value: newValue,\n                    batch: this._undoStepBatch\n                });\n                viewField.errorText = null;\n            }\n            else {\n                setErrorTextDebounced();\n            }\n        };\n    }\n}\n", "import { Plugin } from 'ckeditor5/src/core'\nimport mediaIcon from '../theme/icons/media.svg'\nimport DropdownButtonView from '@ckeditor/ckeditor5-ui/src/dropdown/button/dropdownbuttonview'\nimport DropdownPanelView from '@ckeditor/ckeditor5-ui/src/dropdown/dropdownpanelview'\nimport DropdownView from '@ckeditor/ckeditor5-ui/src/dropdown/dropdownview'\n\nexport default class TutorizeMediaUploadUI extends Plugin {\n  static get pluginName () {\n    return 'TutorizeMediaUploadUI'\n  }\n\n  init () {\n    const editor = this.editor\n\n    editor.ui.componentFactory.add('tutorizeMediaUpload', locale => {\n      const dropdown = createDropdown(locale)\n      this._setUpDropdown(dropdown)\n\n      return dropdown\n    })\n  }\n\n  _setUpDropdown (dropdown) {\n    const container = 'body'\n    const directUploads = this.editor.config['_config']['mediaFileUpload']['directUploads']\n\n    directUploads.classList.add('ckeditor--direct-uploads-popup')\n    document.querySelector(container).appendChild(directUploads)\n\n    function positionDirectUploads () {\n      const pos = dropdown.element.getBoundingClientRect()\n      const offset = getOffsetFromBoundingBox(pos)\n\n      directUploads.style.top = `${offset.top}px`\n      directUploads.style.left = `${offset.left}px`\n    }\n\n    dropdown.on('change:isOpen', () => {\n      if (dropdown.isOpen) {\n        positionDirectUploads()\n        directUploads.style.display = 'block'\n      } else {\n        directUploads.style.display = 'none'\n      }\n    })\n    directUploads.addEventListener('mediaPoolOpened', () => {\n      directUploads.style.display = 'none'\n    })\n    window.addEventListener('resize', positionDirectUploads)\n\n    function closeDropdown (e) {\n      if (!dropdown.isOpen) return\n\n      const path = e.composedPath()\n\n      if (dropdown.element.contains(e.target) || directUploads.contains(e.target) || path.includes(directUploads)) {\n        return\n      }\n\n      dropdown.isOpen = false\n    }\n\n    document.addEventListener('click', closeDropdown)\n\n    dropdown.on('render', function () {\n    })\n\n    dropdown.buttonView.set({\n      label: this.editor.t('Insert media'), icon: mediaIcon, tooltip: true\n    })\n  }\n}\n\nfunction getOffsetFromBoundingBox (box) {\n  const docElem = document.documentElement\n\n  return {\n    top: box.top + box.height + (window.scrollY || docElem.scrollTop) - (docElem.clientTop || 0),\n    left: box.left + (window.scrollX || docElem.scrollLeft) - (docElem.clientLeft || 0)\n  }\n}\n\n\nfunction createDropdown (locale) {\n  const buttonView = new DropdownButtonView(locale)\n  const panelView = new DropdownPanelView(locale)\n  const dropdownView = new DropdownView(locale, buttonView, panelView)\n\n  buttonView.bind('isEnabled').to(dropdownView)\n\n  if (buttonView instanceof DropdownButtonView) {\n    buttonView.bind('isOn').to(dropdownView, 'isOpen')\n  } else {\n    buttonView.arrowView.bind('isOn').to(dropdownView, 'isOpen')\n  }\n\n  return dropdownView\n}\n", "export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 20 20\\\">\\n    <path d=\\\"M18.68 3.03c.6 0 .59-.03.59.55v12.84c0 .59.01.56-.59.56H1.29c-.6 0-.59.03-.59-.56V3.58c0-.58-.01-.55.6-.55h17.38zM15.77 15V5H4.2v10h11.57zM2 4v1h1V4H2zm0 2v1h1V6H2zm0 2v1h1V8H2zm0 2v1h1v-1H2zm0 2v1h1v-1H2zm0 2v1h1v-1H2zM17 4v1h1V4h-1zm0 2v1h1V6h-1zm0 2v1h1V8h-1zm0 2v1h1v-1h-1zm0 2v1h1v-1h-1zm0 2v1h1v-1h-1zM7.5 7.177a.4.4 0 0 1 .593-.351l5.133 2.824a.4.4 0 0 1 0 .7l-5.133 2.824a.4.4 0 0 1-.593-.35V7.176v.001z\\\"/>\\n</svg>\\n\";", "import Plugin from '@ckeditor/ckeditor5-core/src/plugin'\nimport { toWidget } from '@ckeditor/ckeditor5-widget/src/utils'\nimport Widget from '@ckeditor/ckeditor5-widget/src/widget'\n\nconst mediaFileEmbedAttributes = ['data-media-file-json']\n\nexport default class TutorizeMediaFileEmbed extends Plugin {\n  static get requires () {\n    return [Widget]\n  }\n\n  init () {\n    this._defineSchema()\n    this._defineConverters()\n  }\n\n  _defineSchema () {\n    const schema = this.editor.model.schema\n\n    schema.register('mediaFileEmbed', {\n      isObject: true,\n      allowWhere: '$block',\n      allowAttributes: mediaFileEmbedAttributes\n    })\n  }\n\n  _defineConverters () {\n    const conversion = this.editor.conversion\n    const editingDowncastHandler = this.editor.config['_config']['mediaFileEmbed']['editingDowncast']\n\n    conversion.for('upcast').elementToElement({\n      view: {\n        name: 'oembed',\n        attributes: {\n          'data-media-file-json': true\n        }\n      },\n      model: (viewElement, { writer }) => {\n        return writer.createElement('mediaFileEmbed', getElementMediaFileAttributes(viewElement))\n      },\n    })\n\n    // runs when initializing the editor to create editable html for the editor\n    conversion.for('editingDowncast').elementToStructure({\n      model: 'mediaFileEmbed',\n      view: (modelElement, { writer }) => {\n        const element = editingDowncastHandler(modelElement, writer)\n        return toWidget(element, writer, { label: 'simple box widget' })\n      }\n    })\n\n    // runs when saving document to create viewable HTML for the user\n    conversion.for('dataDowncast').elementToElement({\n      model: 'mediaFileEmbed',\n      view: (modelElement, { writer }) => {\n        const previewElement = writer.createEmptyElement('oembed', {\n          ...getElementMediaFileAttributes(modelElement)\n        })\n\n        return writer.createContainerElement('figure', { class: 'media' }, [previewElement])\n      }\n    })\n  }\n}\n\nconst getElementMediaFileAttributes = element => {\n  const attributes = {}\n  mediaFileEmbedAttributes.forEach(attribute => {\n    attributes[attribute] = element.getAttribute(attribute)\n  })\n  return attributes\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/underline/underlineediting\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport AttributeCommand from '../attributecommand.js';\nconst UNDERLINE = 'underline';\n/**\n * The underline editing feature.\n *\n * It registers the `'underline'` command, the <kbd>Ctrl+U</kbd> keystroke\n * and introduces the `underline` attribute in the model which renders to the view as an `<u>` element.\n */\nexport default class UnderlineEditing extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'UnderlineEditing';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = this.editor.t;\n        // Allow strikethrough attribute on text nodes.\n        editor.model.schema.extend('$text', { allowAttributes: UNDERLINE });\n        editor.model.schema.setAttributeProperties(UNDERLINE, {\n            isFormatting: true,\n            copyOnEnter: true\n        });\n        editor.conversion.attributeToElement({\n            model: UNDERLINE,\n            view: 'u',\n            upcastAlso: {\n                styles: {\n                    'text-decoration': 'underline'\n                }\n            }\n        });\n        // Create underline command.\n        editor.commands.add(UNDERLINE, new AttributeCommand(editor, UNDERLINE));\n        // Set the Ctrl+U keystroke.\n        editor.keystrokes.set('CTRL+U', 'underline');\n        // Add the information about the keystroke to the accessibility database.\n        editor.accessibility.addKeystrokeInfos({\n            keystrokes: [\n                {\n                    label: t('Underline text'),\n                    keystroke: 'CTRL+U'\n                }\n            ]\n        });\n    }\n}\n", "export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M3 18v-1.5h14V18zm2.2-8V3.6c0-.4.4-.6.8-.6.3 0 .7.2.7.6v6.2c0 2 1.3 2.8 3.2 2.8 1.9 0 3.4-.9 3.4-2.9V3.6c0-.3.4-.5.8-.5.3 0 .7.2.7.5V10c0 2.7-2.2 4-4.9 4-2.6 0-4.7-1.2-4.7-4z\\\"/></svg>\";", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/underline/underlineui\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport { getButtonCreator } from '../utils.js';\nimport underlineIcon from '../../theme/icons/underline.svg';\nconst UNDERLINE = 'underline';\n/**\n * The underline UI feature. It introduces the Underline button.\n */\nexport default class UnderlineUI extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'UnderlineUI';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const t = editor.locale.t;\n        const createButton = getButtonCreator({\n            editor,\n            commandName: UNDERLINE,\n            plugin: this,\n            icon: underlineIcon,\n            label: t('Underline'),\n            keystroke: 'CTRL+U'\n        });\n        // Add bold button to feature components.\n        editor.ui.componentFactory.add(UNDERLINE, () => createButton(ButtonView));\n        editor.ui.componentFactory.add('menuBar:' + UNDERLINE, () => createButton(MenuBarMenuListItemButtonView));\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Returns a plain text representation of an element and its children.\n *\n * @returns Plain text representing the model's data.\n */\nexport function modelElementToPlainText(item) {\n    if (item.is('$text') || item.is('$textProxy')) {\n        return item.data;\n    }\n    const element = item;\n    let text = '';\n    let prev = null;\n    for (const child of element.getChildren()) {\n        const childText = modelElementToPlainText(child);\n        // If last block was finish, start from new line.\n        if (prev && prev.is('element')) {\n            text += '\\n';\n        }\n        text += childText;\n        prev = child;\n    }\n    return text;\n}\n", "import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment'\nimport Bold from '@ckeditor/ckeditor5-basic-styles/src/bold'\nimport Clipboard from '@ckeditor/ckeditor5-clipboard/src/clipboard'\nimport Essentials from '@ckeditor/ckeditor5-essentials/src/essentials'\nimport Font from '@ckeditor/ckeditor5-font/src/font'\nimport FontBackgroundColor from '@ckeditor/ckeditor5-font/src/fontbackgroundcolor'\nimport FontColor from '@ckeditor/ckeditor5-font/src/fontcolor'\nimport Heading from '@ckeditor/ckeditor5-heading/src/heading'\nimport Image from '@ckeditor/ckeditor5-image/src/image'\nimport ImageBlock from '@ckeditor/ckeditor5-image/src/imageblock'\nimport ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption'\nimport ImageInline from '@ckeditor/ckeditor5-image/src/imageinline'\nimport ImageResize from '@ckeditor/ckeditor5-image/src/imageresize'\nimport ImageStyle from '@ckeditor/ckeditor5-image/src/imagestyle'\nimport ImageToolbar from '@ckeditor/ckeditor5-image/src/imagetoolbar'\nimport ImageUpload from '@ckeditor/ckeditor5-image/src/imageupload'\nimport Indent from '@ckeditor/ckeditor5-indent/src/indent'\nimport IndentBlock from '@ckeditor/ckeditor5-indent/src/indentblock'\nimport Italic from '@ckeditor/ckeditor5-basic-styles/src/italic'\nimport Link from '@ckeditor/ckeditor5-link/src/link'\nimport List from '@ckeditor/ckeditor5-list/src/list'\nimport MediaEmbed from '@ckeditor/ckeditor5-media-embed/src/mediaembed'\nimport Mention from '@ckeditor/ckeditor5-mention/src/mention'\nimport Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'\nimport PasteFromOffice from '@ckeditor/ckeditor5-paste-from-office/src/pastefromoffice'\nimport RemoveFormat from '@ckeditor/ckeditor5-remove-format/src/removeformat'\nimport Strikethrough from '@ckeditor/ckeditor5-basic-styles/src/strikethrough'\nimport Table from '@ckeditor/ckeditor5-table/src/table'\nimport TableCellProperties from '@ckeditor/ckeditor5-table/src/tablecellproperties'\nimport TableProperties from '@ckeditor/ckeditor5-table/src/tableproperties'\nimport TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar'\nimport TextTransformation from '@ckeditor/ckeditor5-typing/src/texttransformation'\nimport TutorizeMediaUpload from './tutorize-media-upload/src/mediaupload'\nimport Underline from '@ckeditor/ckeditor5-basic-styles/src/underline'\nimport WordCount from '@ckeditor/ckeditor5-word-count/src/wordcount'\n\nexport const defaultPlugins = [\n  Alignment,\n  Bold,\n  Clipboard,\n  Essentials,\n  Font,\n  FontBackgroundColor,\n  FontColor,\n  Heading,\n  Image,\n  ImageBlock,\n  ImageCaption,\n  ImageInline,\n  ImageResize,\n  ImageStyle,\n  ImageToolbar,\n  ImageUpload,\n  Indent,\n  IndentBlock,\n  Italic,\n  Link,\n  List,\n  MediaEmbed,\n  Mention,\n  Paragraph,\n  PasteFromOffice,\n  RemoveFormat,\n  Strikethrough,\n  Table,\n  TableCellProperties,\n  TableProperties,\n  TableToolbar,\n  TextTransformation,\n  TutorizeMediaUpload,\n  Underline,\n  WordCount,\n]\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module alignment/alignment\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport AlignmentEditing from './alignmentediting.js';\nimport AlignmentUI from './alignmentui.js';\n/**\n * The text alignment plugin.\n *\n * For a detailed overview, check the {@glink features/text-alignment Text alignment} feature guide\n * and the {@glink api/alignment package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:alignment/alignmentediting~AlignmentEditing} and\n * {@link module:alignment/alignmentui~AlignmentUI} plugins.\n */\nexport default class Alignment extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [AlignmentEditing, AlignmentUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Alignment';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/bold\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport BoldEditing from './bold/boldediting.js';\nimport BoldUI from './bold/boldui.js';\n/**\n * The bold feature.\n *\n * For a detailed overview check the {@glink features/basic-styles Basic styles feature} guide\n * and the {@glink api/basic-styles package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:basic-styles/bold/boldediting~BoldEditing bold editing feature}\n * and {@link module:basic-styles/bold/boldui~BoldUI bold UI feature}.\n */\nexport default class Bold extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [BoldEditing, BoldUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Bold';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module essentials/essentials\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Clipboard } from 'ckeditor5/src/clipboard.js';\nimport { Enter, ShiftEnter } from 'ckeditor5/src/enter.js';\nimport { SelectAll } from 'ckeditor5/src/select-all.js';\nimport { Typing } from 'ckeditor5/src/typing.js';\nimport { Undo } from 'ckeditor5/src/undo.js';\nimport { AccessibilityHelp } from 'ckeditor5/src/ui.js';\n/**\n * A plugin including all essential editing features. It represents a set of features that enables similar functionalities\n * to a `<textarea>` element.\n *\n * It includes:\n *\n * * {@link module:clipboard/clipboard~Clipboard},\n * * {@link module:enter/enter~Enter},\n * * {@link module:select-all/selectall~SelectAll},\n * * {@link module:enter/shiftenter~ShiftEnter},\n * * {@link module:typing/typing~Typing},\n * * {@link module:undo/undo~Undo}.\n *\n * This plugin set does not define any block-level containers (such as {@link module:paragraph/paragraph~Paragraph}).\n * If your editor is supposed to handle block content, make sure to include it.\n */\nexport default class Essentials extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [AccessibilityHelp, Clipboard, Enter, SelectAll, ShiftEnter, Typing, Undo];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Essentials';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module font/font\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport FontFamily from './fontfamily.js';\nimport FontSize from './fontsize.js';\nimport FontColor from './fontcolor.js';\nimport FontBackgroundColor from './fontbackgroundcolor.js';\n/**\n * A plugin that enables a set of text styling features:\n *\n * * {@link module:font/fontsize~FontSize},\n * * {@link module:font/fontfamily~FontFamily}.\n * * {@link module:font/fontcolor~FontColor},\n * * {@link module:font/fontbackgroundcolor~FontBackgroundColor}.\n *\n * For a detailed overview, check the {@glink features/font Font feature} documentation\n * and the {@glink api/font package page}.\n */\nexport default class Font extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [FontFamily, FontSize, FontColor, FontBackgroundColor];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Font';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module heading/heading\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport HeadingEditing from './headingediting.js';\nimport HeadingUI from './headingui.js';\nimport '../theme/heading.css';\n/**\n * The headings feature.\n *\n * For a detailed overview, check the {@glink features/headings Headings feature} guide\n * and the {@glink api/heading package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:heading/headingediting~HeadingEditing heading editing feature}\n * and {@link module:heading/headingui~HeadingUI heading UI feature}.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class Heading extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [HeadingEditing, HeadingUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Heading';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/image\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageBlock from './imageblock.js';\nimport ImageInline from './imageinline.js';\nimport '../theme/image.css';\n/**\n * The image plugin.\n *\n * For a detailed overview, check the {@glink features/images/images-overview image feature} documentation.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * {@link module:image/imageblock~ImageBlock},\n * * {@link module:image/imageinline~ImageInline},\n *\n * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}\n * for more information.\n */\nexport default class Image extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageBlock, ImageInline];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Image';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagecaption\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageCaptionEditing from './imagecaption/imagecaptionediting.js';\nimport ImageCaptionUI from './imagecaption/imagecaptionui.js';\nimport '../theme/imagecaption.css';\n/**\n * The image caption plugin.\n *\n * For a detailed overview, check the {@glink features/images/images-captions image caption} documentation.\n */\nexport default class ImageCaption extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageCaptionEditing, ImageCaptionUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageCaption';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageresize\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageResizeButtons from './imageresize/imageresizebuttons.js';\nimport ImageResizeEditing from './imageresize/imageresizeediting.js';\nimport ImageResizeHandles from './imageresize/imageresizehandles.js';\nimport ImageCustomResizeUI from './imageresize/imagecustomresizeui.js';\nimport '../theme/imageresize.css';\n/**\n * The image resize plugin.\n *\n * It adds a possibility to resize each image using handles.\n */\nexport default class ImageResize extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageResizeEditing, ImageResizeHandles, ImageCustomResizeUI, ImageResizeButtons];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageResize';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagestyle\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageStyleEditing from './imagestyle/imagestyleediting.js';\nimport ImageStyleUI from './imagestyle/imagestyleui.js';\n/**\n * The image style plugin.\n *\n * For a detailed overview of the image styles feature, check the {@glink features/images/images-styles documentation}.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n * * {@link module:image/imagestyle/imagestyleediting~ImageStyleEditing},\n * * {@link module:image/imagestyle/imagestyleui~ImageStyleUI}\n *\n * It provides a default configuration, which can be extended or overwritten.\n * Read more about the {@link module:image/imageconfig~ImageConfig#styles image styles configuration}.\n */\nexport default class ImageStyle extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageStyleEditing, ImageStyleUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageStyle';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imagetoolbar\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { WidgetToolbarRepository } from 'ckeditor5/src/widget.js';\nimport ImageUtils from './imageutils.js';\nimport { isObject } from 'lodash-es';\n/**\n * The image toolbar plugin. It creates and manages the image toolbar (the toolbar displayed when an image is selected).\n *\n * For an overview, check the {@glink features/images/images-overview#image-contextual-toolbar image contextual toolbar} documentation.\n *\n * Instances of toolbar components (e.g. buttons) are created using the editor's\n * {@link module:ui/componentfactory~ComponentFactory component factory}\n * based on the {@link module:image/imageconfig~ImageConfig#toolbar `image.toolbar` configuration option}.\n *\n * The toolbar uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon}.\n */\nexport default class ImageToolbar extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [WidgetToolbarRepository, ImageUtils];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageToolbar';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        const editor = this.editor;\n        const t = editor.t;\n        const widgetToolbarRepository = editor.plugins.get(WidgetToolbarRepository);\n        const imageUtils = editor.plugins.get('ImageUtils');\n        widgetToolbarRepository.register('image', {\n            ariaLabel: t('Image toolbar'),\n            items: normalizeDeclarativeConfig(editor.config.get('image.toolbar') || []),\n            getRelatedElement: selection => imageUtils.getClosestSelectedImageWidget(selection)\n        });\n    }\n}\n/**\n * Convert the dropdown definitions to their keys registered in the ComponentFactory.\n * The registration precess should be handled by the plugin which handles the UI of a particular feature.\n */\nfunction normalizeDeclarativeConfig(config) {\n    return config.map(item => isObject(item) ? item.name : item);\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module image/imageupload\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ImageUploadUI from './imageupload/imageuploadui.js';\nimport ImageUploadProgress from './imageupload/imageuploadprogress.js';\nimport ImageUploadEditing from './imageupload/imageuploadediting.js';\n/**\n * The image upload plugin.\n *\n * For a detailed overview, check the {@glink features/images/image-upload/image-upload image upload feature} documentation.\n *\n * This plugin does not do anything directly, but it loads a set of specific plugins to enable image uploading:\n *\n * * {@link module:image/imageupload/imageuploadediting~ImageUploadEditing},\n * * {@link module:image/imageupload/imageuploadui~ImageUploadUI},\n * * {@link module:image/imageupload/imageuploadprogress~ImageUploadProgress}.\n */\nexport default class ImageUpload extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'ImageUpload';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ImageUploadEditing, ImageUploadUI, ImageUploadProgress];\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module indent/indent\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport IndentEditing from './indentediting.js';\nimport IndentUI from './indentui.js';\n/**\n * The indent feature.\n *\n * This plugin acts as a single entry point plugin for other features that implement indentation of elements like lists or paragraphs.\n *\n * The compatible features are:\n *\n * * The {@link module:list/list~List} or {@link module:list/list/listediting~ListEditing} feature for list indentation.\n * * The {@link module:indent/indentblock~IndentBlock} feature for block indentation.\n *\n * This is a \"glue\" plugin that loads the following plugins:\n *\n * * The {@link module:indent/indentediting~IndentEditing indent editing feature}.\n * * The {@link module:indent/indentui~IndentUI indent UI feature}.\n *\n * The dependent plugins register the `'indent'` and `'outdent'` commands and introduce the `'indent'` and `'outdent'` buttons\n * that allow to increase or decrease text indentation of supported elements.\n *\n * **Note**: In order for the commands and buttons to work, at least one of compatible features is required.\n */\nexport default class Indent extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Indent';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [IndentEditing, IndentUI];\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/italic\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ItalicEditing from './italic/italicediting.js';\nimport ItalicUI from './italic/italicui.js';\n/**\n * The italic feature.\n *\n * For a detailed overview check the {@glink features/basic-styles Basic styles feature} guide\n * and the {@glink api/basic-styles package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:basic-styles/italic/italicediting~ItalicEditing} and\n * {@link module:basic-styles/italic/italicui~ItalicUI} plugins.\n */\nexport default class Italic extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ItalicEditing, ItalicUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Italic';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module link/link\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport LinkEditing from './linkediting.js';\nimport LinkUI from './linkui.js';\nimport AutoLink from './autolink.js';\n/**\n * The link plugin.\n *\n * This is a \"glue\" plugin that loads the {@link module:link/linkediting~LinkEditing link editing feature}\n * and {@link module:link/linkui~LinkUI link UI feature}.\n */\nexport default class Link extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [LinkEditing, LinkUI, AutoLink];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Link';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module list/list\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport ListEditing from './list/listediting.js';\nimport ListUI from './list/listui.js';\n/**\n * The list feature.\n *\n * This is a \"glue\" plugin that loads the {@link module:list/list/listediting~ListEditing  list\n * editing feature} and {@link module:list/list/listui~ListUI list UI feature}.\n */\nexport default class List extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ListEditing, ListUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'List';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module media-embed/mediaembed\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Widget } from 'ckeditor5/src/widget.js';\nimport MediaEmbedEditing from './mediaembedediting.js';\nimport AutoMediaEmbed from './automediaembed.js';\nimport MediaEmbedUI from './mediaembedui.js';\nimport '../theme/mediaembed.css';\n/**\n * The media embed plugin.\n *\n * For a detailed overview, check the {@glink features/media-embed Media Embed feature documentation}.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * The {@link module:media-embed/mediaembedediting~MediaEmbedEditing media embed editing feature},\n * * The {@link module:media-embed/mediaembedui~MediaEmbedUI media embed UI feature} and\n * * The {@link module:media-embed/automediaembed~AutoMediaEmbed auto-media embed feature}.\n */\nexport default class MediaEmbed extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [MediaEmbedEditing, MediaEmbedUI, AutoMediaEmbed, Widget];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'MediaEmbed';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module mention/mention\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport MentionEditing, { _toMentionAttribute } from './mentionediting.js';\nimport MentionUI from './mentionui.js';\nimport '../theme/mention.css';\n/**\n * The mention plugin.\n *\n * For a detailed overview, check the {@glink features/mentions Mention feature} guide.\n */\nexport default class Mention extends Plugin {\n    toMentionAttribute(viewElement, data) {\n        return _toMentionAttribute(viewElement, data);\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Mention';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [MentionEditing, MentionUI];\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module paste-from-office/pastefromoffice\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';\nimport MSWordNormalizer from './normalizers/mswordnormalizer.js';\nimport GoogleDocsNormalizer from './normalizers/googledocsnormalizer.js';\nimport GoogleSheetsNormalizer from './normalizers/googlesheetsnormalizer.js';\nimport { parseHtml } from './filters/parse.js';\n/**\n * The Paste from Office plugin.\n *\n * This plugin handles content pasted from Office apps and transforms it (if necessary)\n * to a valid structure which can then be understood by the editor features.\n *\n * Transformation is made by a set of predefined {@link module:paste-from-office/normalizer~Normalizer normalizers}.\n * This plugin includes following normalizers:\n * * {@link module:paste-from-office/normalizers/mswordnormalizer~MSWordNormalizer Microsoft Word normalizer}\n * * {@link module:paste-from-office/normalizers/googledocsnormalizer~GoogleDocsNormalizer Google Docs normalizer}\n *\n * For more information about this feature check the {@glink api/paste-from-office package page}.\n */\nexport default class PasteFromOffice extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'PasteFromOffice';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [ClipboardPipeline];\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        const clipboardPipeline = editor.plugins.get('ClipboardPipeline');\n        const viewDocument = editor.editing.view.document;\n        const normalizers = [];\n        const hasMultiLevelListPlugin = this.editor.plugins.has('MultiLevelList');\n        normalizers.push(new MSWordNormalizer(viewDocument, hasMultiLevelListPlugin));\n        normalizers.push(new GoogleDocsNormalizer(viewDocument));\n        normalizers.push(new GoogleSheetsNormalizer(viewDocument));\n        clipboardPipeline.on('inputTransformation', (evt, data) => {\n            if (data._isTransformedWithPasteFromOffice) {\n                return;\n            }\n            const codeBlock = editor.model.document.selection.getFirstPosition().parent;\n            if (codeBlock.is('element', 'codeBlock')) {\n                return;\n            }\n            const htmlString = data.dataTransfer.getData('text/html');\n            const activeNormalizer = normalizers.find(normalizer => normalizer.isActive(htmlString));\n            if (activeNormalizer) {\n                if (!data._parsedData) {\n                    data._parsedData = parseHtml(htmlString, viewDocument.stylesProcessor);\n                }\n                activeNormalizer.execute(data);\n                data._isTransformedWithPasteFromOffice = true;\n            }\n        }, { priority: 'high' });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module remove-format/removeformat\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport RemoveFormatUI from './removeformatui.js';\nimport RemoveFormatEditing from './removeformatediting.js';\n/**\n * The remove format plugin.\n *\n * This is a \"glue\" plugin which loads the {@link module:remove-format/removeformatediting~RemoveFormatEditing}\n * and {@link module:remove-format/removeformatui~RemoveFormatUI} plugins.\n *\n * For a detailed overview, check out the {@glink features/remove-format remove format} feature documentation.\n */\nexport default class RemoveFormat extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [RemoveFormatEditing, RemoveFormatUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'RemoveFormat';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/strikethrough\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport StrikethroughEditing from './strikethrough/strikethroughediting.js';\nimport StrikethroughUI from './strikethrough/strikethroughui.js';\n/**\n * The strikethrough feature.\n *\n * For a detailed overview check the {@glink features/basic-styles Basic styles feature} guide\n * and the {@glink api/basic-styles package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:basic-styles/strikethrough/strikethroughediting~StrikethroughEditing} and\n * {@link module:basic-styles/strikethrough/strikethroughui~StrikethroughUI} plugins.\n */\nexport default class Strikethrough extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [StrikethroughEditing, StrikethroughUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Strikethrough';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/table\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Widget } from 'ckeditor5/src/widget.js';\nimport TableEditing from './tableediting.js';\nimport TableUI from './tableui.js';\nimport TableSelection from './tableselection.js';\nimport TableClipboard from './tableclipboard.js';\nimport TableKeyboard from './tablekeyboard.js';\nimport TableMouse from './tablemouse.js';\nimport '../theme/table.css';\n/**\n * The table plugin.\n *\n * For a detailed overview, check the {@glink features/tables/tables Table feature documentation}.\n *\n * This is a \"glue\" plugin that loads the following table features:\n *\n * * {@link module:table/tableediting~TableEditing editing feature},\n * * {@link module:table/tableselection~TableSelection selection feature},\n * * {@link module:table/tablekeyboard~TableKeyboard keyboard navigation feature},\n * * {@link module:table/tablemouse~TableMouse mouse selection feature},\n * * {@link module:table/tableclipboard~TableClipboard clipboard feature},\n * * {@link module:table/tableui~TableUI UI feature}.\n */\nexport default class Table extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableEditing, TableUI, TableSelection, TableMouse, TableKeyboard, TableClipboard, Widget];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Table';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tablecellproperties\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport TableCellPropertiesUI from './tablecellproperties/tablecellpropertiesui.js';\nimport TableCellPropertiesEditing from './tablecellproperties/tablecellpropertiesediting.js';\n/**\n * The table cell properties feature. Enables support for setting properties of table cells (size, border, background, etc.).\n *\n * Read more in the {@glink features/tables/tables-styling Table and cell styling tools} section.\n * See also the {@link module:table/tableproperties~TableProperties} plugin.\n *\n * This is a \"glue\" plugin that loads the\n * {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing table cell properties editing feature} and\n * the {@link module:table/tablecellproperties/tablecellpropertiesui~TableCellPropertiesUI table cell properties UI feature}.\n */\nexport default class TableCellProperties extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableCellProperties';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TableCellPropertiesEditing, TableCellPropertiesUI];\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tableproperties\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport TablePropertiesEditing from './tableproperties/tablepropertiesediting.js';\nimport TablePropertiesUI from './tableproperties/tablepropertiesui.js';\n/**\n * The table properties feature. Enables support for setting properties of tables (size, border, background, etc.).\n *\n * Read more in the {@glink features/tables/tables-styling Table and cell styling tools} section.\n * See also the {@link module:table/tablecellproperties~TableCellProperties} plugin.\n *\n * This is a \"glue\" plugin that loads the\n * {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing table properties editing feature} and\n * the {@link module:table/tableproperties/tablepropertiesui~TablePropertiesUI table properties UI feature}.\n */\nexport default class TableProperties extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableProperties';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [TablePropertiesEditing, TablePropertiesUI];\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module table/tabletoolbar\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { WidgetToolbarRepository } from 'ckeditor5/src/widget.js';\nimport { getSelectedTableWidget, getTableWidgetAncestor } from './utils/ui/widget.js';\n/**\n * The table toolbar class. It creates toolbars for the table feature and its content (for now only for the table cell content).\n *\n * The table toolbar shows up when a table widget is selected. Its components (e.g. buttons) are created based on the\n * {@link module:table/tableconfig~TableConfig#tableToolbar `table.tableToolbar` configuration option}.\n *\n * Table content toolbar shows up when the selection is inside the content of a table. It creates its component based on the\n * {@link module:table/tableconfig~TableConfig#contentToolbar `table.contentToolbar` configuration option}.\n */\nexport default class TableToolbar extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [WidgetToolbarRepository];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'TableToolbar';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    afterInit() {\n        const editor = this.editor;\n        const t = editor.t;\n        const widgetToolbarRepository = editor.plugins.get(WidgetToolbarRepository);\n        const tableContentToolbarItems = editor.config.get('table.contentToolbar');\n        const tableToolbarItems = editor.config.get('table.tableToolbar');\n        if (tableContentToolbarItems) {\n            widgetToolbarRepository.register('tableContent', {\n                ariaLabel: t('Table toolbar'),\n                items: tableContentToolbarItems,\n                getRelatedElement: getTableWidgetAncestor\n            });\n        }\n        if (tableToolbarItems) {\n            widgetToolbarRepository.register('table', {\n                ariaLabel: t('Table toolbar'),\n                items: tableToolbarItems,\n                getRelatedElement: getSelectedTableWidget\n            });\n        }\n    }\n}\n", "import '../theme/popup.css'\n\nimport { Plugin } from 'ckeditor5/src/core'\n\nimport TutorizeMediaUploadUI from './mediauploadui'\nimport TutorizeMediaFileEmbed from '../../tutorize-media-file-embed/src/mediafileembed'\n\nexport default class TutorizeMediaUpload extends Plugin {\n  static get requires () {\n    return [TutorizeMediaUploadUI, TutorizeMediaFileEmbed]\n  }\n\n  static get pluginName () {\n    return 'TutorizeMediaUpload'\n  }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module basic-styles/underline\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport UnderlineEditing from './underline/underlineediting.js';\nimport UnderlineUI from './underline/underlineui.js';\n/**\n * The underline feature.\n *\n * For a detailed overview check the {@glink features/basic-styles Basic styles feature} guide\n * and the {@glink api/basic-styles package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:basic-styles/underline/underlineediting~UnderlineEditing} and\n * {@link module:basic-styles/underline/underlineui~UnderlineUI} plugins.\n */\nexport default class Underline extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    static get requires() {\n        return [UnderlineEditing, UnderlineUI];\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'Underline';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Template, View } from 'ckeditor5/src/ui.js';\nimport { env } from 'ckeditor5/src/utils.js';\nimport { modelElementToPlainText } from './utils.js';\nimport { throttle, isElement } from 'lodash-es';\n/**\n * The word count plugin.\n *\n * This plugin calculates all words and characters in all {@link module:engine/model/text~Text text nodes} available in the model.\n * It also provides an HTML element that updates its state whenever the editor content is changed.\n *\n * The model's data is first converted to plain text using {@link module:word-count/utils~modelElementToPlainText}.\n * The number of words and characters in your text are determined based on the created plain text. Please keep in mind\n * that every block in the editor is separated with a newline character, which is included in the calculation.\n *\n * Here are some examples of how the word and character calculations are made:\n *\n * ```html\n * <paragraph>foo</paragraph>\n * <paragraph>bar</paragraph>\n * // Words: 2, Characters: 7\n *\n * <paragraph><$text bold=\"true\">foo</$text>bar</paragraph>\n * // Words: 1, Characters: 6\n *\n * <paragraph>*&^%)</paragraph>\n * // Words: 0, Characters: 5\n *\n * <paragraph>foo(bar)</paragraph>\n * //Words: 1, Characters: 8\n *\n * <paragraph>12345</paragraph>\n * // Words: 1, Characters: 5\n * ```\n */\nexport default class WordCount extends Plugin {\n    /**\n     * @inheritDoc\n     */\n    constructor(editor) {\n        super(editor);\n        this.set('characters', 0);\n        this.set('words', 0);\n        // Don't wait for the #update event to set the value of the properties but obtain it right away.\n        // This way, accessing the properties directly returns precise numbers, e.g. for validation, etc.\n        // If not accessed directly, the properties will be refreshed upon #update anyway.\n        Object.defineProperties(this, {\n            characters: {\n                get() {\n                    return (this.characters = this._getCharacters(this._getText()));\n                }\n            },\n            words: {\n                get() {\n                    return (this.words = this._getWords(this._getText()));\n                }\n            }\n        });\n        this.set('_wordsLabel', undefined);\n        this.set('_charactersLabel', undefined);\n        this._config = editor.config.get('wordCount') || {};\n        this._outputView = undefined;\n        this._wordsMatchRegExp = env.features.isRegExpUnicodePropertySupported ?\n            // Usage of regular expression literal cause error during build (ckeditor/ckeditor5-dev#534).\n            // Groups:\n            // {L} - Any kind of letter from any language.\n            // {N} - Any kind of numeric character in any script.\n            new RegExp('([\\\\p{L}\\\\p{N}]+\\\\S?)+', 'gu') :\n            /([a-zA-Z0-9À-ž]+\\S?)+/gu;\n    }\n    /**\n     * @inheritDoc\n     */\n    static get pluginName() {\n        return 'WordCount';\n    }\n    /**\n     * @inheritDoc\n     */\n    static get isOfficialPlugin() {\n        return true;\n    }\n    /**\n     * @inheritDoc\n     */\n    init() {\n        const editor = this.editor;\n        editor.model.document.on('change:data', throttle(this._refreshStats.bind(this), 250));\n        if (typeof this._config.onUpdate == 'function') {\n            this.on('update', (evt, data) => {\n                this._config.onUpdate(data);\n            });\n        }\n        if (isElement(this._config.container)) {\n            this._config.container.appendChild(this.wordCountContainer);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        if (this._outputView) {\n            this._outputView.element.remove();\n            this._outputView.destroy();\n        }\n        super.destroy();\n    }\n    /**\n     * Creates a self-updating HTML element. Repeated executions return the same element.\n     * The returned element has the following HTML structure:\n     *\n     * ```html\n     * <div class=\"ck ck-word-count\">\n     * \t<div class=\"ck-word-count__words\">Words: 4</div>\n     * \t<div class=\"ck-word-count__characters\">Characters: 28</div>\n     * </div>\n     * ```\n     */\n    get wordCountContainer() {\n        const editor = this.editor;\n        const t = editor.t;\n        const displayWords = editor.config.get('wordCount.displayWords');\n        const displayCharacters = editor.config.get('wordCount.displayCharacters');\n        const bind = Template.bind(this, this);\n        const children = [];\n        if (!this._outputView) {\n            this._outputView = new View();\n            if (displayWords || displayWords === undefined) {\n                this.bind('_wordsLabel').to(this, 'words', words => {\n                    return t('Words: %0', words);\n                });\n                children.push({\n                    tag: 'div',\n                    children: [\n                        {\n                            text: [bind.to('_wordsLabel')]\n                        }\n                    ],\n                    attributes: {\n                        class: 'ck-word-count__words'\n                    }\n                });\n            }\n            if (displayCharacters || displayCharacters === undefined) {\n                this.bind('_charactersLabel').to(this, 'characters', words => {\n                    return t('Characters: %0', words);\n                });\n                children.push({\n                    tag: 'div',\n                    children: [\n                        {\n                            text: [bind.to('_charactersLabel')]\n                        }\n                    ],\n                    attributes: {\n                        class: 'ck-word-count__characters'\n                    }\n                });\n            }\n            this._outputView.setTemplate({\n                tag: 'div',\n                attributes: {\n                    class: [\n                        'ck',\n                        'ck-word-count'\n                    ]\n                },\n                children\n            });\n            this._outputView.render();\n        }\n        return this._outputView.element;\n    }\n    _getText() {\n        let txt = '';\n        for (const root of this.editor.model.document.getRoots()) {\n            if (txt !== '') {\n                // Add a delimiter, so words from each root are treated independently.\n                txt += '\\n';\n            }\n            txt += modelElementToPlainText(root);\n        }\n        return txt;\n    }\n    /**\n     * Determines the number of characters in the current editor's model.\n     */\n    _getCharacters(txt) {\n        return txt.replace(/\\n/g, '').length;\n    }\n    /**\n     * Determines the number of words in the current editor's model.\n     */\n    _getWords(txt) {\n        const detectedWords = txt.match(this._wordsMatchRegExp) || [];\n        return detectedWords.length;\n    }\n    /**\n     * Determines the number of words and characters in the current editor's model and assigns it to {@link #characters} and {@link #words}.\n     * It also fires the {@link #event:update}.\n     *\n     * @fires update\n     */\n    _refreshStats() {\n        const txt = this._getText();\n        const words = this.words = this._getWords(txt);\n        const characters = this.characters = this._getCharacters(txt);\n        this.fire('update', {\n            words,\n            characters\n        });\n    }\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\nimport { EditorUI, DialogView, normalizeToolbarConfig } from 'ckeditor5/src/ui.js';\nimport { enablePlaceholder } from 'ckeditor5/src/engine.js';\nimport { ElementReplacer, Rect } from 'ckeditor5/src/utils.js';\n/**\n * The classic editor UI class.\n */\nexport default class ClassicEditorUI extends EditorUI {\n    /**\n     * Creates an instance of the classic editor UI class.\n     *\n     * @param editor The editor instance.\n     * @param view The view of the UI.\n     */\n    constructor(editor, view) {\n        super(editor);\n        this.view = view;\n        this._toolbarConfig = normalizeToolbarConfig(editor.config.get('toolbar'));\n        this._elementReplacer = new ElementReplacer();\n        this.listenTo(editor.editing.view, 'scrollToTheSelection', this._handleScrollToTheSelectionWithStickyPanel.bind(this));\n    }\n    /**\n     * @inheritDoc\n     */\n    get element() {\n        return this.view.element;\n    }\n    /**\n     * Initializes the UI.\n     *\n     * @param replacementElement The DOM element that will be the source for the created editor.\n     */\n    init(replacementElement) {\n        const editor = this.editor;\n        const view = this.view;\n        const editingView = editor.editing.view;\n        const editable = view.editable;\n        const editingRoot = editingView.document.getRoot();\n        // The editable UI and editing root should share the same name. Then name is used\n        // to recognize the particular editable, for instance in ARIA attributes.\n        editable.name = editingRoot.rootName;\n        view.render();\n        // The editable UI element in DOM is available for sure only after the editor UI view has been rendered.\n        // But it can be available earlier if a DOM element has been passed to BalloonEditor.create().\n        const editableElement = editable.element;\n        // Register the editable UI view in the editor. A single editor instance can aggregate multiple\n        // editable areas (roots) but the classic editor has only one.\n        this.setEditableElement(editable.name, editableElement);\n        // Let the editable UI element respond to the changes in the global editor focus\n        // tracker. It has been added to the same tracker a few lines above but, in reality, there are\n        // many focusable areas in the editor, like balloons, toolbars or dropdowns and as long\n        // as they have focus, the editable should act like it is focused too (although technically\n        // it isn't), e.g. by setting the proper CSS class, visually announcing focus to the user.\n        // Doing otherwise will result in editable focus styles disappearing, once e.g. the\n        // toolbar gets focused.\n        view.editable.bind('isFocused').to(this.focusTracker);\n        // Bind the editable UI element to the editing view, making it an end– and entry–point\n        // of the editor's engine. This is where the engine meets the UI.\n        editingView.attachDomRoot(editableElement);\n        // If an element containing the initial data of the editor was provided, replace it with\n        // an editor instance's UI in DOM until the editor is destroyed. For instance, a <textarea>\n        // can be such element.\n        if (replacementElement) {\n            this._elementReplacer.replace(replacementElement, this.element);\n        }\n        this._initPlaceholder();\n        this._initToolbar();\n        if (view.menuBarView) {\n            this._initMenuBar(view.menuBarView);\n        }\n        this._initDialogPluginIntegration();\n        this._initContextualBalloonIntegration();\n        this.fire('ready');\n    }\n    /**\n     * @inheritDoc\n     */\n    destroy() {\n        super.destroy();\n        const view = this.view;\n        const editingView = this.editor.editing.view;\n        this._elementReplacer.restore();\n        if (editingView.getDomRoot(view.editable.name)) {\n            editingView.detachDomRoot(view.editable.name);\n        }\n        view.destroy();\n    }\n    /**\n     * Initializes the editor toolbar.\n     */\n    _initToolbar() {\n        const view = this.view;\n        // Set–up the sticky panel with toolbar.\n        view.stickyPanel.bind('isActive').to(this.focusTracker, 'isFocused');\n        view.stickyPanel.limiterElement = view.element;\n        view.stickyPanel.bind('viewportTopOffset').to(this, 'viewportOffset', ({ top }) => top || 0);\n        view.toolbar.fillFromConfig(this._toolbarConfig, this.componentFactory);\n        // Register the toolbar so it becomes available for Alt+F10 and Esc navigation.\n        this.addToolbar(view.toolbar);\n    }\n    /**\n     * Enable the placeholder text on the editing root.\n     */\n    _initPlaceholder() {\n        const editor = this.editor;\n        const editingView = editor.editing.view;\n        const editingRoot = editingView.document.getRoot();\n        const sourceElement = editor.sourceElement;\n        let placeholderText;\n        const placeholder = editor.config.get('placeholder');\n        if (placeholder) {\n            placeholderText = typeof placeholder === 'string' ? placeholder : placeholder[this.view.editable.name];\n        }\n        if (!placeholderText && sourceElement && sourceElement.tagName.toLowerCase() === 'textarea') {\n            placeholderText = sourceElement.getAttribute('placeholder');\n        }\n        if (placeholderText) {\n            editingRoot.placeholder = placeholderText;\n        }\n        enablePlaceholder({\n            view: editingView,\n            element: editingRoot,\n            isDirectHost: false,\n            keepOnFocus: true\n        });\n    }\n    /**\n     * Provides an integration between the sticky toolbar and {@link module:ui/panel/balloon/contextualballoon contextual balloon plugin}.\n     * It allows the contextual balloon to consider the height of the\n     * {@link module:editor-classic/classiceditoruiview~ClassicEditorUIView#stickyPanel}. It prevents the balloon from overlapping\n     * the sticky toolbar by adjusting the balloon's position using viewport offset configuration.\n     */\n    _initContextualBalloonIntegration() {\n        if (!this.editor.plugins.has('ContextualBalloon')) {\n            return;\n        }\n        const { stickyPanel } = this.view;\n        const contextualBalloon = this.editor.plugins.get('ContextualBalloon');\n        contextualBalloon.on('getPositionOptions', evt => {\n            const position = evt.return;\n            if (!position || !stickyPanel.isSticky || !stickyPanel.element) {\n                return;\n            }\n            // Measure toolbar (and menu bar) height.\n            const stickyPanelHeight = new Rect(stickyPanel.element).height;\n            // Handle edge case when the target element is larger than the limiter.\n            // It's an issue because the contextual balloon can overlap top table cells when the table is larger than the viewport\n            // and it's placed at the top of the editor. It's better to overlap toolbar in that situation.\n            // Check this issue: https://github.com/ckeditor/ckeditor5/issues/15744\n            const target = typeof position.target === 'function' ? position.target() : position.target;\n            const limiter = typeof position.limiter === 'function' ? position.limiter() : position.limiter;\n            if (target && limiter && new Rect(target).height >= new Rect(limiter).height - stickyPanelHeight) {\n                return;\n            }\n            // Ensure that viewport offset is present, it can be undefined according to the typing.\n            const viewportOffsetConfig = { ...position.viewportOffsetConfig };\n            const newTopViewportOffset = (viewportOffsetConfig.top || 0) + stickyPanelHeight;\n            evt.return = {\n                ...position,\n                viewportOffsetConfig: {\n                    ...viewportOffsetConfig,\n                    top: newTopViewportOffset\n                }\n            };\n        }, { priority: 'low' });\n        // Update balloon position when the toolbar becomes sticky or when ui viewportOffset changes.\n        const updateBalloonPosition = () => {\n            if (contextualBalloon.visibleView) {\n                contextualBalloon.updatePosition();\n            }\n        };\n        this.listenTo(stickyPanel, 'change:isSticky', updateBalloonPosition);\n        this.listenTo(this.editor.ui, 'change:viewportOffset', updateBalloonPosition);\n    }\n    /**\n     * Provides an integration between the sticky toolbar and {@link module:utils/dom/scroll~scrollViewportToShowTarget}.\n     * It allows the UI-agnostic engine method to consider the geometry of the\n     * {@link module:editor-classic/classiceditoruiview~ClassicEditorUIView#stickyPanel} that pins to the\n     * edge of the viewport and can obscure the user caret after scrolling the window.\n     *\n     * @param evt The `scrollToTheSelection` event info.\n     * @param data The payload carried by the `scrollToTheSelection` event.\n     * @param originalArgs The original arguments passed to `scrollViewportToShowTarget()` method (see implementation to learn more).\n     */\n    _handleScrollToTheSelectionWithStickyPanel(evt, data, originalArgs) {\n        const stickyPanel = this.view.stickyPanel;\n        if (stickyPanel.isSticky) {\n            const stickyPanelHeight = new Rect(stickyPanel.element).height;\n            data.viewportOffset.top += stickyPanelHeight;\n        }\n        else {\n            const scrollViewportOnPanelGettingSticky = () => {\n                this.editor.editing.view.scrollToTheSelection(originalArgs);\n            };\n            this.listenTo(stickyPanel, 'change:isSticky', scrollViewportOnPanelGettingSticky);\n            // This works as a post-scroll-fixer because it's impossible predict whether the panel will be sticky after scrolling or not.\n            // Listen for a short period of time only and if the toolbar does not become sticky very soon, cancel the listener.\n            setTimeout(() => {\n                this.stopListening(stickyPanel, 'change:isSticky', scrollViewportOnPanelGettingSticky);\n            }, 20);\n        }\n    }\n    /**\n     * Provides an integration between the sticky toolbar and {@link module:ui/dialog/dialog the Dialog plugin}.\n     *\n     * It moves the dialog down to ensure that the\n     * {@link module:editor-classic/classiceditoruiview~ClassicEditorUIView#stickyPanel sticky panel}\n     * used by the editor UI will not get obscured by the dialog when the dialog uses one of its automatic positions.\n     */\n    _initDialogPluginIntegration() {\n        if (!this.editor.plugins.has('Dialog')) {\n            return;\n        }\n        const stickyPanel = this.view.stickyPanel;\n        const dialogPlugin = this.editor.plugins.get('Dialog');\n        dialogPlugin.on('show', () => {\n            const dialogView = dialogPlugin.view;\n            dialogView.on('moveTo', (evt, data) => {\n                // Engage only when the panel is sticky, and the dialog is using one of default positions.\n                if (!stickyPanel.isSticky || dialogView.wasMoved) {\n                    return;\n                }\n                const stickyPanelContentRect = new Rect(stickyPanel.contentPanelElement);\n                if (data[1] < stickyPanelContentRect.bottom + DialogView.defaultOffset) {\n                    data[1] = stickyPanelContentRect.bottom + DialogView.defaultOffset;\n                }\n            }, { priority: 'high' });\n        }, { priority: 'low' });\n    }\n}\n", "/**\n * This class is a mix of ClassicEditorUIView from '@ckeditor/ckeditor5-editor-classic/src/classiceditoruiview' and\n * BoxedEditorUIView from 'ckeditor/ckeditor5-ui/src/editorui/boxed/boxededitoruiview.js'.\n * We need it because we have to make adjustments to the ckeditor DOM. Normally we have something like this:\n *\n * div.ck.ck-editor__main\n *   > div.ck.ck-content\n *     > actual-editor-html-content\n *\n * But we need another layer to overlay the certificate background image, what we need is this:\n *\n * div.ck.ck-editor__main\n *   > div.ck.ck-editor__background_image_wrapper\n *     > div.ck.ck-content\n *       > actual-editor-html-content\n *\n * We use the div.ck.ck-editor__background_image_wrapper to set the actual background image. We then use\n * div.ck.ck-content to optionally overlay a white and partly transparent layer to mimic the background image transparency.\n *\n *\n * The only thing changed here is the insertion of the div.ck.ck-editor__background_image_wrapper.\n * Warning: this causes css issues because ckeditor has some css rules that go .ck-editor__main > .ck.ck-content.\n * We override & fix these in custom.css.\n *\n */\nimport { InlineEditableUIView, StickyPanelView, ToolbarView } from 'ckeditor5/src/ui'\nimport '@ckeditor/ckeditor5-editor-classic/theme/classiceditor.css'\nimport EditorUIView from '@ckeditor/ckeditor5-ui/src/editorui/editoruiview'\nimport LabelView from '@ckeditor/ckeditor5-ui/src/label/labelview'\n\nexport default class TutorizeClassicEditorUIView extends EditorUIView {\n  constructor (locale, editingView, options = {}) {\n    super(locale)\n\n    this.top = this.createCollection()\n    this.main = this.createCollection()\n    this._voiceLabelView = this._createVoiceLabel()\n\n    /**\n     * Original DOM:\n     *\n     *    this.setTemplate( {\n     * \t\t\ttag: 'div',\n     *\n     * \t\t\tattributes: {\n     * \t\t\t\tclass: [\n     * \t\t\t\t\t'ck',\n     * \t\t\t\t\t'ck-reset',\n     * \t\t\t\t\t'ck-editor',\n     * \t\t\t\t\t'ck-rounded-corners'\n     * \t\t\t\t],\n     * \t\t\t\trole: 'application',\n     * \t\t\t\tdir: locale.uiLanguageDirection,\n     * \t\t\t\tlang: locale.uiLanguage,\n     * \t\t\t\t'aria-labelledby': this._voiceLabelView.id\n     * \t\t\t},\n     *\n     * \t\t\tchildren: [\n     * \t\t\t\tthis._voiceLabelView,\n     * \t\t\t\t{\n     * \t\t\t\t\ttag: 'div',\n     * \t\t\t\t\tattributes: {\n     * \t\t\t\t\t\tclass: [\n     * \t\t\t\t\t\t\t'ck',\n     * \t\t\t\t\t\t\t'ck-editor__top',\n     * \t\t\t\t\t\t\t'ck-reset_all'\n     * \t\t\t\t\t\t],\n     * \t\t\t\t\t\trole: 'presentation'\n     * \t\t\t\t\t},\n     * \t\t\t\t\tchildren: this.top\n     * \t\t\t\t},\n     * \t\t\t\t{\n     * \t\t\t\t\ttag: 'div',\n     * \t\t\t\t\tattributes: {\n     * \t\t\t\t\t\tclass: [\n     * \t\t\t\t\t\t\t'ck',\n     * \t\t\t\t\t\t\t'ck-editor__main'\n     * \t\t\t\t\t\t],\n     * \t\t\t\t\t\trole: 'presentation'\n     * \t\t\t\t\t},\n     * \t\t\t\t\tchildren: this.main\n     * \t\t\t\t}\n     * \t\t\t]\n     * \t\t} )\n     */\n\n    this.setTemplate({\n      tag: 'div',\n\n      attributes: {\n        class: [\n          'ck',\n          'ck-reset',\n          'ck-editor',\n          'ck-rounded-corners'\n        ],\n        role: 'application',\n        dir: locale.uiLanguageDirection,\n        lang: locale.uiLanguage,\n        'aria-labelledby': this._voiceLabelView.id\n      },\n\n      children: [\n        this._voiceLabelView,\n        {\n          tag: 'div',\n          attributes: {\n            class: [\n              'ck',\n              'ck-editor__top',\n              'ck-reset_all'\n            ],\n            role: 'presentation'\n          },\n          children: this.top\n        },\n        {\n          tag: 'div',\n          attributes: {\n            class: [\n              'ck',\n              'ck-editor__main'\n            ],\n            role: 'presentation'\n          },\n          children: [\n            {\n              tag: 'div',\n              attributes: {\n                class: [\n                  'ck',\n                  'ck-editor__background_image_wrapper'\n                ],\n                role: 'presentation'\n              },\n              children: this.main\n            }\n          ]\n\n        }\n      ]\n    })\n\n    this.stickyPanel = new StickyPanelView(locale)\n    this.toolbar = new ToolbarView(locale, {\n      shouldGroupWhenFull: options.shouldToolbarGroupWhenFull\n    })\n\n    this.editable = new InlineEditableUIView(locale, editingView)\n  }\n\n  _createVoiceLabel () {\n    const t = this.t\n    const voiceLabel = new LabelView()\n\n    voiceLabel.text = t('Rich Text Editor')\n\n    voiceLabel.extendTemplate({\n      attributes: {\n        class: 'ck-voice-label'\n      }\n    })\n\n    return voiceLabel\n  }\n\n  render () {\n    super.render()\n\n    // Set toolbar as a child of a stickyPanel and makes toolbar sticky.\n    this.stickyPanel.content.add(this.toolbar)\n\n    this.top.add(this.stickyPanel)\n    this.main.add(this.editable)\n  }\n}\n", "/**\n * This is a copy of ClassicEditorBase from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'.\n * We cannot inherit from it because we need to adjust the constructor to use our own TutorizeClassicEditorUIView class.\n * Using this instead of ClassicEditorUIView is the only notable change compared to the original ClassicEditorBase.\n *\n * See TutorizeClassicEditorUIView for more details on why this is needed.\n **/\n\nimport { defaultConfig } from './default_config'\nimport { defaultPlugins } from './default_plugins'\nimport ClassicEditorUI from '@ckeditor/ckeditor5-editor-classic/src/classiceditorui'\nimport { CKEditorError, getDataFromElement, mix } from 'ckeditor5/src/utils'\nimport { attachToForm, DataApiMixin, Editor, ElementApiMixin } from 'ckeditor5/src/core'\nimport { isElement } from 'lodash-es'\nimport TutorizeClassicEditorUIView from './tutorize_classic_editor_ui_view'\n\nexport default class TutorizeClassicEditor extends Editor {\n  constructor (sourceElementOrData, config = {}) {\n    if (!isElement(sourceElementOrData) && config.initialData !== undefined) {\n      throw new CKEditorError('editor-create-initial-data', null)\n    }\n\n    super(config)\n\n    if (this.config.get('initialData') === undefined) {\n      this.config.set('initialData', getInitialData(sourceElementOrData))\n    }\n\n    if (isElement(sourceElementOrData)) {\n      this.sourceElement = sourceElementOrData\n    }\n\n    this.model.document.createRoot()\n\n    const shouldToolbarGroupWhenFull = !this.config.get('toolbar.shouldNotGroupWhenFull')\n    const view = new TutorizeClassicEditorUIView(this.locale, this.editing.view, {\n      shouldToolbarGroupWhenFull\n    })\n\n    this.ui = new ClassicEditorUI(this, view)\n\n    attachToForm(this)\n  }\n\n  destroy () {\n    if (this.sourceElement) {\n      this.updateSourceElement()\n    }\n\n    this.ui.destroy()\n\n    return super.destroy()\n  }\n\n  static create (sourceElementOrData, config = {}) {\n    return new Promise(resolve => {\n      const editor = new this(sourceElementOrData, config)\n\n      resolve(\n        editor.initPlugins()\n          .then(() => editor.ui.init(isElement(sourceElementOrData) ? sourceElementOrData : null))\n          .then(() => editor.data.init(editor.config.get('initialData')))\n          .then(() => editor.fire('ready'))\n          .then(() => editor)\n      )\n    })\n  }\n}\n\nmix(TutorizeClassicEditor, DataApiMixin)\nmix(TutorizeClassicEditor, ElementApiMixin)\n\nfunction getInitialData (sourceElementOrData) {\n  return isElement(sourceElementOrData) ? getDataFromElement(sourceElementOrData) : sourceElementOrData\n}\n\nTutorizeClassicEditor.builtinPlugins = defaultPlugins\nTutorizeClassicEditor.defaultConfig = defaultConfig\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/* globals HTMLTextAreaElement */\n/**\n * @module utils/dom/getdatafromelement\n */\n/**\n * Gets data from a given source element.\n *\n * @param el The element from which the data will be retrieved.\n * @returns The data string.\n */\nexport default function getDataFromElement(el) {\n    if (el instanceof HTMLTextAreaElement) {\n        return el.value;\n    }\n    return el.innerHTML;\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module core/editor/utils/attachtoform\n */\nimport { isFunction } from 'lodash-es';\nimport { CKEditorError } from '@ckeditor/ckeditor5-utils';\n/**\n * Checks if the editor is initialized on a `<textarea>` element that belongs to a form. If yes, it updates the editor's element\n * content before submitting the form.\n *\n * This helper requires the {@link module:core/editor/utils/elementapimixin~ElementApi ElementApi interface}.\n *\n * @param editor Editor instance.\n */\nexport default function attachToForm(editor) {\n    if (!isFunction(editor.updateSourceElement)) {\n        /**\n         * The editor passed to `attachToForm()` must implement the\n         * {@link module:core/editor/utils/elementapimixin~ElementApi} interface.\n         *\n         * @error attachtoform-missing-elementapi-interface\n         */\n        throw new CKEditorError('attachtoform-missing-elementapi-interface', editor);\n    }\n    const sourceElement = editor.sourceElement;\n    // Only when replacing a textarea which is inside of a form element.\n    if (isTextArea(sourceElement) && sourceElement.form) {\n        let originalSubmit;\n        const form = sourceElement.form;\n        const onSubmit = () => editor.updateSourceElement();\n        // Replace the original form#submit() to call a custom submit function first.\n        // Check if #submit is a function because the form might have an input named \"submit\".\n        if (isFunction(form.submit)) {\n            originalSubmit = form.submit;\n            form.submit = () => {\n                onSubmit();\n                originalSubmit.apply(form);\n            };\n        }\n        // Update the replaced textarea with data before each form#submit event.\n        form.addEventListener('submit', onSubmit);\n        // Remove the submit listener and revert the original submit method on\n        // editor#destroy.\n        editor.on('destroy', () => {\n            form.removeEventListener('submit', onSubmit);\n            if (originalSubmit) {\n                form.submit = originalSubmit;\n            }\n        });\n    }\n}\nfunction isTextArea(sourceElement) {\n    return !!sourceElement && sourceElement.tagName.toLowerCase() === 'textarea';\n}\n", "/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * Implementation of the {@link module:core/editor/utils/dataapimixin~DataApi}.\n *\n * @deprecated This functionality is already implemented by the `Editor` class.\n */\nexport default function DataApiMixin(base) {\n    return base;\n}\n", "import './custom.css'\n\nimport TutorizeClassicEditor from './tutorize_classic_editor'\n\nexport default { TutorizeClassicEditor }\n", "/*!\n * MediaElement.js\n * http://www.mediaelementjs.com/\n *\n * Wrapper that mimics native HTML5 MediaElement (audio and video)\n * using a variety of technologies (pure JavaScript, Flash, iframe)\n *\n * Copyright 2010-2017, John Dyer (http://j.hn/)\n * License: MIT\n *\n */(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(_dereq_,module,exports){\n\n},{}],2:[function(_dereq_,module,exports){\n(function (global){\nvar topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = _dereq_(1);\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n    doccy = document;\n} else {\n    doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n}\n\nmodule.exports = doccy;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\nvar win;\n\nif (typeof window !== \"undefined\") {\n    win = window;\n} else if (typeof global !== \"undefined\") {\n    win = global;\n} else if (typeof self !== \"undefined\"){\n    win = self;\n} else {\n    win = {};\n}\n\nmodule.exports = win;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],4:[function(_dereq_,module,exports){\n(function (root) {\n\n  // Store setTimeout reference so promise-polyfill will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var setTimeoutFunc = setTimeout;\n\n  function noop() {}\n  \n  // Polyfill for Function.prototype.bind\n  function bind(fn, thisArg) {\n    return function () {\n      fn.apply(thisArg, arguments);\n    };\n  }\n\n  function Promise(fn) {\n    if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');\n    if (typeof fn !== 'function') throw new TypeError('not a function');\n    this._state = 0;\n    this._handled = false;\n    this._value = undefined;\n    this._deferreds = [];\n\n    doResolve(fn, this);\n  }\n\n  function handle(self, deferred) {\n    while (self._state === 3) {\n      self = self._value;\n    }\n    if (self._state === 0) {\n      self._deferreds.push(deferred);\n      return;\n    }\n    self._handled = true;\n    Promise._immediateFn(function () {\n      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n      if (cb === null) {\n        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n        return;\n      }\n      var ret;\n      try {\n        ret = cb(self._value);\n      } catch (e) {\n        reject(deferred.promise, e);\n        return;\n      }\n      resolve(deferred.promise, ret);\n    });\n  }\n\n  function resolve(self, newValue) {\n    try {\n      // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n      if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');\n      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n        var then = newValue.then;\n        if (newValue instanceof Promise) {\n          self._state = 3;\n          self._value = newValue;\n          finale(self);\n          return;\n        } else if (typeof then === 'function') {\n          doResolve(bind(then, newValue), self);\n          return;\n        }\n      }\n      self._state = 1;\n      self._value = newValue;\n      finale(self);\n    } catch (e) {\n      reject(self, e);\n    }\n  }\n\n  function reject(self, newValue) {\n    self._state = 2;\n    self._value = newValue;\n    finale(self);\n  }\n\n  function finale(self) {\n    if (self._state === 2 && self._deferreds.length === 0) {\n      Promise._immediateFn(function() {\n        if (!self._handled) {\n          Promise._unhandledRejectionFn(self._value);\n        }\n      });\n    }\n\n    for (var i = 0, len = self._deferreds.length; i < len; i++) {\n      handle(self, self._deferreds[i]);\n    }\n    self._deferreds = null;\n  }\n\n  function Handler(onFulfilled, onRejected, promise) {\n    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n    this.promise = promise;\n  }\n\n  /**\n   * Take a potentially misbehaving resolver function and make sure\n   * onFulfilled and onRejected are only called once.\n   *\n   * Makes no guarantees about asynchrony.\n   */\n  function doResolve(fn, self) {\n    var done = false;\n    try {\n      fn(function (value) {\n        if (done) return;\n        done = true;\n        resolve(self, value);\n      }, function (reason) {\n        if (done) return;\n        done = true;\n        reject(self, reason);\n      });\n    } catch (ex) {\n      if (done) return;\n      done = true;\n      reject(self, ex);\n    }\n  }\n\n  Promise.prototype['catch'] = function (onRejected) {\n    return this.then(null, onRejected);\n  };\n\n  Promise.prototype.then = function (onFulfilled, onRejected) {\n    var prom = new (this.constructor)(noop);\n\n    handle(this, new Handler(onFulfilled, onRejected, prom));\n    return prom;\n  };\n\n  Promise.all = function (arr) {\n    var args = Array.prototype.slice.call(arr);\n\n    return new Promise(function (resolve, reject) {\n      if (args.length === 0) return resolve([]);\n      var remaining = args.length;\n\n      function res(i, val) {\n        try {\n          if (val && (typeof val === 'object' || typeof val === 'function')) {\n            var then = val.then;\n            if (typeof then === 'function') {\n              then.call(val, function (val) {\n                res(i, val);\n              }, reject);\n              return;\n            }\n          }\n          args[i] = val;\n          if (--remaining === 0) {\n            resolve(args);\n          }\n        } catch (ex) {\n          reject(ex);\n        }\n      }\n\n      for (var i = 0; i < args.length; i++) {\n        res(i, args[i]);\n      }\n    });\n  };\n\n  Promise.resolve = function (value) {\n    if (value && typeof value === 'object' && value.constructor === Promise) {\n      return value;\n    }\n\n    return new Promise(function (resolve) {\n      resolve(value);\n    });\n  };\n\n  Promise.reject = function (value) {\n    return new Promise(function (resolve, reject) {\n      reject(value);\n    });\n  };\n\n  Promise.race = function (values) {\n    return new Promise(function (resolve, reject) {\n      for (var i = 0, len = values.length; i < len; i++) {\n        values[i].then(resolve, reject);\n      }\n    });\n  };\n\n  // Use polyfill for setImmediate for performance gains\n  Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||\n    function (fn) {\n      setTimeoutFunc(fn, 0);\n    };\n\n  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n    if (typeof console !== 'undefined' && console) {\n      console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n    }\n  };\n\n  /**\n   * Set the immediate function to execute callbacks\n   * @param fn {function} Function to execute\n   * @deprecated\n   */\n  Promise._setImmediateFn = function _setImmediateFn(fn) {\n    Promise._immediateFn = fn;\n  };\n\n  /**\n   * Change the function to execute on unhandled rejection\n   * @param {function} fn Function to execute on unhandled rejection\n   * @deprecated\n   */\n  Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n    Promise._unhandledRejectionFn = fn;\n  };\n  \n  if (typeof module !== 'undefined' && module.exports) {\n    module.exports = Promise;\n  } else if (!root.Promise) {\n    root.Promise = Promise;\n  }\n\n})(this);\n\n},{}],5:[function(_dereq_,module,exports){\n!function(root, factory) {\n    \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n    define([], function() {\n        return root.svg4everybody = factory();\n    }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n    /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n    function embed(parent, svg, target) {\n        // if the target exists\n        if (target) {\n            // create a document fragment to hold the contents of the target\n            var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n            // conditionally set the viewBox on the svg\n            viewBox && svg.setAttribute(\"viewBox\", viewBox);\n            // copy the contents of the clone into the fragment\n            for (// clone the target\n            var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n                fragment.appendChild(clone.firstChild);\n            }\n            // append the fragment into the svg\n            parent.appendChild(fragment);\n        }\n    }\n    function loadreadystatechange(xhr) {\n        // listen to changes in the request\n        xhr.onreadystatechange = function() {\n            // if the request is ready\n            if (4 === xhr.readyState) {\n                // get the cached html document\n                var cachedDocument = xhr._cachedDocument;\n                // ensure the cached html document based on the xhr response\n                cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"), \n                cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n                xhr._embeds.splice(0).map(function(item) {\n                    // get the cached target\n                    var target = xhr._cachedTarget[item.id];\n                    // ensure the cached target\n                    target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), \n                    // embed the target into the svg\n                    embed(item.parent, item.svg, target);\n                });\n            }\n        }, // test the ready state change immediately\n        xhr.onreadystatechange();\n    }\n    function svg4everybody(rawopts) {\n        function oninterval() {\n            // while the index exists in the live <use> collection\n            for (// get the cached <use> index\n            var index = 0; index < uses.length; ) {\n                // get the current <use>\n                var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n                if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), \n                svg && src) {\n                    if (polyfill) {\n                        if (!opts.validate || opts.validate(src, svg, use)) {\n                            // remove the <use> element\n                            parent.removeChild(use);\n                            // parse the src and get the url and id\n                            var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n                            // if the link is external\n                            if (url.length) {\n                                // get the cached xhr request\n                                var xhr = requests[url];\n                                // ensure the xhr request exists\n                                xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(), \n                                xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n                                xhr._embeds.push({\n                                    parent: parent,\n                                    svg: svg,\n                                    id: id\n                                }), // prepare the xhr ready state change event\n                                loadreadystatechange(xhr);\n                            } else {\n                                // embed the local id into the svg\n                                embed(parent, svg, document.getElementById(id));\n                            }\n                        } else {\n                            // increase the index when the previous value was not \"valid\"\n                            ++index, ++numberOfSvgUseElementsToBypass;\n                        }\n                    }\n                } else {\n                    // increase the index when the previous value was not \"valid\"\n                    ++index;\n                }\n            }\n            // continue the interval\n            (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n        }\n        var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n        polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n        // create xhr requests object\n        var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n        // conditionally start the interval if the polyfill is active\n        polyfill && oninterval();\n    }\n    function getSVGAncestor(node) {\n        for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n        return svg;\n    }\n    return svg4everybody;\n});\n},{}],6:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _en = _dereq_(16);\n\nvar _general = _dereq_(28);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar i18n = { lang: 'en', en: _en.EN };\n\ni18n.language = function () {\n\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\targs[_key] = arguments[_key];\n\t}\n\n\tif (args !== null && args !== undefined && args.length) {\n\n\t\tif (typeof args[0] !== 'string') {\n\t\t\tthrow new TypeError('Language code must be a string value');\n\t\t}\n\n\t\tif (!/^[a-z]{2,3}((\\-|_)[a-z]{2})?$/i.test(args[0])) {\n\t\t\tthrow new TypeError('Language code must have format 2-3 letters and. optionally, hyphen, underscore followed by 2 more letters');\n\t\t}\n\n\t\ti18n.lang = args[0];\n\n\t\tif (i18n[args[0]] === undefined) {\n\t\t\targs[1] = args[1] !== null && args[1] !== undefined && _typeof(args[1]) === 'object' ? args[1] : {};\n\t\t\ti18n[args[0]] = !(0, _general.isObjectEmpty)(args[1]) ? args[1] : _en.EN;\n\t\t} else if (args[1] !== null && args[1] !== undefined && _typeof(args[1]) === 'object') {\n\t\t\ti18n[args[0]] = args[1];\n\t\t}\n\t}\n\n\treturn i18n.lang;\n};\n\ni18n.t = function (message) {\n\tvar pluralParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\n\tif (typeof message === 'string' && message.length) {\n\n\t\tvar str = void 0,\n\t\t    pluralForm = void 0;\n\n\t\tvar language = i18n.language();\n\n\t\tvar _plural = function _plural(input, number, form) {\n\n\t\t\tif ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) !== 'object' || typeof number !== 'number' || typeof form !== 'number') {\n\t\t\t\treturn input;\n\t\t\t}\n\n\t\t\tvar _pluralForms = function () {\n\t\t\t\treturn [function () {\n\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t}, function () {\n\t\t\t\t\treturn (arguments.length <= 0 ? undefined : arguments[0]) === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t}, function () {\n\t\t\t\t\treturn (arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) !== 0) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1 || (arguments.length <= 0 ? undefined : arguments[0]) === 11) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2 || (arguments.length <= 0 ? undefined : arguments[0]) === 12) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) > 2 && (arguments.length <= 0 ? undefined : arguments[0]) < 20) {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 4 ? undefined : arguments[4];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 > 0 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 20) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn [3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) <= 4) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 1) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 2) {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 3 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 === 4) {\n\t\t\t\t\t\treturn arguments.length <= 4 ? undefined : arguments[4];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) > 2 && (arguments.length <= 0 ? undefined : arguments[0]) < 7) {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) > 6 && (arguments.length <= 0 ? undefined : arguments[0]) < 11) {\n\t\t\t\t\t\treturn arguments.length <= 4 ? undefined : arguments[4];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 5 ? undefined : arguments[5];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 0) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 3 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 <= 10) {\n\t\t\t\t\t\treturn arguments.length <= 4 ? undefined : arguments[4];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 11) {\n\t\t\t\t\t\treturn arguments.length <= 5 ? undefined : arguments[5];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 6 ? undefined : arguments[6];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 > 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 11) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 > 10 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 20) {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 4 ? undefined : arguments[4];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 2) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\treturn (arguments.length <= 0 ? undefined : arguments[0]) !== 11 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) !== 8 && (arguments.length <= 0 ? undefined : arguments[0]) !== 11) {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 4 ? undefined : arguments[4];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\treturn (arguments.length <= 0 ? undefined : arguments[0]) === 0 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 3) {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 4 ? undefined : arguments[4];\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t\tif ((arguments.length <= 0 ? undefined : arguments[0]) === 0) {\n\t\t\t\t\t\treturn arguments.length <= 1 ? undefined : arguments[1];\n\t\t\t\t\t} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {\n\t\t\t\t\t\treturn arguments.length <= 2 ? undefined : arguments[2];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn arguments.length <= 3 ? undefined : arguments[3];\n\t\t\t\t\t}\n\t\t\t\t}];\n\t\t\t}();\n\n\t\t\treturn _pluralForms[form].apply(null, [number].concat(input));\n\t\t};\n\n\t\tif (i18n[language] !== undefined) {\n\t\t\tstr = i18n[language][message];\n\t\t\tif (pluralParam !== null && typeof pluralParam === 'number') {\n\t\t\t\tpluralForm = i18n[language]['mejs.plural-form'];\n\t\t\t\tstr = _plural.apply(null, [str, pluralParam, pluralForm]);\n\t\t\t}\n\t\t}\n\n\t\tif (!str && i18n.en) {\n\t\t\tstr = i18n.en[message];\n\t\t\tif (pluralParam !== null && typeof pluralParam === 'number') {\n\t\t\t\tpluralForm = i18n.en['mejs.plural-form'];\n\t\t\t\tstr = _plural.apply(null, [str, pluralParam, pluralForm]);\n\t\t\t}\n\t\t}\n\n\t\tstr = str || message;\n\n\t\tif (pluralParam !== null && typeof pluralParam === 'number') {\n\t\t\tstr = str.replace('%1', pluralParam);\n\t\t}\n\n\t\treturn (0, _general.escapeHTML)(str);\n\t}\n\n\treturn message;\n};\n\n_mejs2.default.i18n = i18n;\n\nif (typeof mejsL10n !== 'undefined') {\n\t_mejs2.default.i18n.language(mejsL10n.language, mejsL10n.strings);\n}\n\nexports.default = i18n;\n\n},{\"16\":16,\"28\":28,\"8\":8}],7:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _general = _dereq_(28);\n\nvar _media2 = _dereq_(30);\n\nvar _renderer = _dereq_(9);\n\nvar _constants = _dereq_(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MediaElement = function MediaElement(idOrNode, options, sources) {\n\tvar _this = this;\n\n\t_classCallCheck(this, MediaElement);\n\n\tvar t = this;\n\n\tsources = Array.isArray(sources) ? sources : null;\n\n\tt.defaults = {\n\t\trenderers: [],\n\n\t\tfakeNodeName: 'div',\n\n\t\tpluginPath: 'build/',\n\n\t\ticonSprite: 'mejs-controls.svg',\n\n\t\tshimScriptAccess: 'sameDomain'\n\t};\n\n\toptions = Object.assign(t.defaults, options);\n\n\tt.mediaElement = _document2.default.createElement(options.fakeNodeName);\n\n\tvar id = idOrNode,\n\t    error = false;\n\n\tif (typeof idOrNode === 'string') {\n\t\tt.mediaElement.originalNode = _document2.default.getElementById(idOrNode);\n\t} else {\n\t\tt.mediaElement.originalNode = idOrNode;\n\t\tid = idOrNode.id;\n\t}\n\n\tif (t.mediaElement.originalNode === undefined || t.mediaElement.originalNode === null) {\n\t\treturn null;\n\t}\n\n\tt.mediaElement.options = options;\n\tid = id || 'mejs_' + Math.random().toString().slice(2);\n\n\tt.mediaElement.originalNode.setAttribute('id', id + '_from_mejs');\n\n\tvar tagName = t.mediaElement.originalNode.tagName.toLowerCase();\n\tif (['video', 'audio'].indexOf(tagName) > -1 && !t.mediaElement.originalNode.getAttribute('preload')) {\n\t\tt.mediaElement.originalNode.setAttribute('preload', 'none');\n\t}\n\n\tt.mediaElement.originalNode.setAttribute('tabindex', -1);\n\n\tt.mediaElement.originalNode.parentNode.insertBefore(t.mediaElement, t.mediaElement.originalNode);\n\n\tt.mediaElement.appendChild(t.mediaElement.originalNode);\n\n\tvar processURL = function processURL(url, type) {\n\t\tif (_window2.default.location.protocol === 'https:' && url.indexOf('http:') === 0 && _constants.IS_IOS && _mejs2.default.html5media.mediaTypes.indexOf(type) > -1) {\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\txhr.onreadystatechange = function () {\n\t\t\t\tif (this.readyState === 4 && this.status === 200) {\n\t\t\t\t\tvar _url = _window2.default.URL || _window2.default.webkitURL,\n\t\t\t\t\t    blobUrl = _url.createObjectURL(this.response);\n\t\t\t\t\tt.mediaElement.originalNode.setAttribute('src', blobUrl);\n\t\t\t\t\treturn blobUrl;\n\t\t\t\t}\n\t\t\t\treturn url;\n\t\t\t};\n\t\t\txhr.open('GET', url);\n\t\t\txhr.responseType = 'blob';\n\t\t\txhr.send();\n\t\t}\n\n\t\treturn url;\n\t};\n\n\tvar mediaFiles = void 0;\n\tif (sources !== null) {\n\t\tmediaFiles = sources;\n\t} else if (t.mediaElement.originalNode !== null) {\n\n\t\tmediaFiles = [];\n\t\tswitch (t.mediaElement.originalNode.nodeName.toLowerCase()) {\n\t\t\tcase 'iframe':\n\t\t\t\tmediaFiles.push({\n\t\t\t\t\ttype: '',\n\t\t\t\t\tsrc: t.mediaElement.originalNode.getAttribute('src')\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'audio':\n\t\t\tcase 'video':\n\t\t\t\tvar _sources = t.mediaElement.originalNode.children.length,\n\t\t\t\t    nodeSource = t.mediaElement.originalNode.getAttribute('src');\n\n\t\t\t\tif (nodeSource) {\n\t\t\t\t\tvar node = t.mediaElement.originalNode,\n\t\t\t\t\t    type = (0, _media2.formatType)(nodeSource, node.getAttribute('type'));\n\t\t\t\t\tmediaFiles.push({\n\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\tsrc: processURL(nodeSource, type)\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0; i < _sources; i++) {\n\t\t\t\t\tvar n = t.mediaElement.originalNode.children[i];\n\t\t\t\t\tif (n.tagName.toLowerCase() === 'source') {\n\t\t\t\t\t\tvar src = n.getAttribute('src'),\n\t\t\t\t\t\t    _type = (0, _media2.formatType)(src, n.getAttribute('type'));\n\t\t\t\t\t\tmediaFiles.push({ type: _type, src: processURL(src, _type) });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tt.mediaElement.id = id;\n\tt.mediaElement.renderers = {};\n\tt.mediaElement.events = {};\n\tt.mediaElement.promises = [];\n\tt.mediaElement.renderer = null;\n\tt.mediaElement.rendererName = null;\n\n\tt.mediaElement.changeRenderer = function (rendererName, mediaFiles) {\n\t\tvar t = _this,\n\t\t    media = Object.keys(mediaFiles[0]).length > 2 ? mediaFiles[0] : mediaFiles[0].src;\n\n\t\tif (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && t.mediaElement.renderer.name === rendererName) {\n\t\t\tt.mediaElement.renderer.pause();\n\t\t\tif (t.mediaElement.renderer.stop) {\n\t\t\t\tt.mediaElement.renderer.stop();\n\t\t\t}\n\t\t\tt.mediaElement.renderer.show();\n\t\t\tt.mediaElement.renderer.setSrc(media);\n\t\t\treturn true;\n\t\t}\n\n\t\tif (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null) {\n\t\t\tt.mediaElement.renderer.pause();\n\t\t\tif (t.mediaElement.renderer.stop) {\n\t\t\t\tt.mediaElement.renderer.stop();\n\t\t\t}\n\t\t\tt.mediaElement.renderer.hide();\n\t\t}\n\n\t\tvar newRenderer = t.mediaElement.renderers[rendererName],\n\t\t    newRendererType = null;\n\n\t\tif (newRenderer !== undefined && newRenderer !== null) {\n\t\t\tnewRenderer.show();\n\t\t\tnewRenderer.setSrc(media);\n\t\t\tt.mediaElement.renderer = newRenderer;\n\t\t\tt.mediaElement.rendererName = rendererName;\n\t\t\treturn true;\n\t\t}\n\n\t\tvar rendererArray = t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : _renderer.renderer.order;\n\n\t\tfor (var _i = 0, total = rendererArray.length; _i < total; _i++) {\n\t\t\tvar index = rendererArray[_i];\n\n\t\t\tif (index === rendererName) {\n\t\t\t\tvar rendererList = _renderer.renderer.renderers;\n\t\t\t\tnewRendererType = rendererList[index];\n\n\t\t\t\tvar renderOptions = Object.assign(newRendererType.options, t.mediaElement.options);\n\t\t\t\tnewRenderer = newRendererType.create(t.mediaElement, renderOptions, mediaFiles);\n\t\t\t\tnewRenderer.name = rendererName;\n\n\t\t\t\tt.mediaElement.renderers[newRendererType.name] = newRenderer;\n\t\t\t\tt.mediaElement.renderer = newRenderer;\n\t\t\t\tt.mediaElement.rendererName = rendererName;\n\t\t\t\tnewRenderer.show();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tt.mediaElement.setSize = function (width, height) {\n\t\tif (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null) {\n\t\t\tt.mediaElement.renderer.setSize(width, height);\n\t\t}\n\t};\n\n\tt.mediaElement.generateError = function (message, urlList) {\n\t\tmessage = message || '';\n\t\turlList = Array.isArray(urlList) ? urlList : [];\n\t\tvar event = (0, _general.createEvent)('error', t.mediaElement);\n\t\tevent.message = message;\n\t\tevent.urls = urlList;\n\t\tt.mediaElement.dispatchEvent(event);\n\t\terror = true;\n\t};\n\n\tvar props = _mejs2.default.html5media.properties,\n\t    methods = _mejs2.default.html5media.methods,\n\t    addProperty = function addProperty(obj, name, onGet, onSet) {\n\t\tvar oldValue = obj[name];\n\t\tvar getFn = function getFn() {\n\t\t\treturn onGet.apply(obj, [oldValue]);\n\t\t},\n\t\t    setFn = function setFn(newValue) {\n\t\t\toldValue = onSet.apply(obj, [newValue]);\n\t\t\treturn oldValue;\n\t\t};\n\n\t\tObject.defineProperty(obj, name, {\n\t\t\tget: getFn,\n\t\t\tset: setFn\n\t\t});\n\t},\n\t    assignGettersSetters = function assignGettersSetters(propName) {\n\t\tif (propName !== 'src') {\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1),\n\t\t\t    getFn = function getFn() {\n\t\t\t\treturn t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer['get' + capName] === 'function' ? t.mediaElement.renderer['get' + capName]() : null;\n\t\t\t},\n\t\t\t    setFn = function setFn(value) {\n\t\t\t\tif (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer['set' + capName] === 'function') {\n\t\t\t\t\tt.mediaElement.renderer['set' + capName](value);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\taddProperty(t.mediaElement, propName, getFn, setFn);\n\t\t\tt.mediaElement['get' + capName] = getFn;\n\t\t\tt.mediaElement['set' + capName] = setFn;\n\t\t}\n\t},\n\t    getSrc = function getSrc() {\n\t\treturn t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null ? t.mediaElement.renderer.getSrc() : null;\n\t},\n\t    setSrc = function setSrc(value) {\n\t\tvar mediaFiles = [];\n\t\tif (typeof value === 'string') {\n\t\t\tmediaFiles.push({\n\t\t\t\tsrc: value,\n\t\t\t\ttype: value ? (0, _media2.getTypeFromFile)(value) : ''\n\t\t\t});\n\t\t} else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src !== undefined) {\n\t\t\tvar _src = (0, _media2.absolutizeUrl)(value.src),\n\t\t\t    _type2 = value.type,\n\t\t\t    media = Object.assign(value, {\n\t\t\t\tsrc: _src,\n\t\t\t\ttype: (_type2 === '' || _type2 === null || _type2 === undefined) && _src ? (0, _media2.getTypeFromFile)(_src) : _type2\n\t\t\t});\n\t\t\tmediaFiles.push(media);\n\t\t} else if (Array.isArray(value)) {\n\t\t\tfor (var _i2 = 0, total = value.length; _i2 < total; _i2++) {\n\n\t\t\t\tvar _src2 = (0, _media2.absolutizeUrl)(value[_i2].src),\n\t\t\t\t    _type3 = value[_i2].type,\n\t\t\t\t    _media = Object.assign(value[_i2], {\n\t\t\t\t\tsrc: _src2,\n\t\t\t\t\ttype: (_type3 === '' || _type3 === null || _type3 === undefined) && _src2 ? (0, _media2.getTypeFromFile)(_src2) : _type3\n\t\t\t\t});\n\t\t\t\tmediaFiles.push(_media);\n\t\t\t}\n\t\t}\n\n\t\tvar renderInfo = _renderer.renderer.select(mediaFiles, t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : []),\n\t\t    event = void 0;\n\n\t\tif (!t.mediaElement.paused && !(t.mediaElement.src == null || t.mediaElement.src === '')) {\n\t\t\tt.mediaElement.pause();\n\t\t\tevent = (0, _general.createEvent)('pause', t.mediaElement);\n\t\t\tt.mediaElement.dispatchEvent(event);\n\t\t}\n\t\tt.mediaElement.originalNode.src = mediaFiles[0].src || '';\n\n\t\tif (renderInfo === null && mediaFiles[0].src) {\n\t\t\tt.mediaElement.generateError('No renderer found', mediaFiles);\n\t\t\treturn;\n\t\t}\n\n\t\tvar shouldChangeRenderer = !(mediaFiles[0].src == null || mediaFiles[0].src === '');\n\t\treturn shouldChangeRenderer ? t.mediaElement.changeRenderer(renderInfo.rendererName, mediaFiles) : null;\n\t},\n\t    triggerAction = function triggerAction(methodName, args) {\n\t\ttry {\n\t\t\tif (methodName === 'play' && (t.mediaElement.rendererName === 'native_dash' || t.mediaElement.rendererName === 'native_hls' || t.mediaElement.rendererName === 'vimeo_iframe')) {\n\t\t\t\tvar response = t.mediaElement.renderer[methodName](args);\n\t\t\t\tif (response && typeof response.then === 'function') {\n\t\t\t\t\tresponse.catch(function () {\n\t\t\t\t\t\tif (t.mediaElement.paused) {\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tvar tmpResponse = t.mediaElement.renderer.play();\n\t\t\t\t\t\t\t\tif (tmpResponse !== undefined) {\n\t\t\t\t\t\t\t\t\ttmpResponse.catch(function () {\n\t\t\t\t\t\t\t\t\t\tif (!t.mediaElement.renderer.paused) {\n\t\t\t\t\t\t\t\t\t\t\tt.mediaElement.renderer.pause();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 150);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t} else {\n\t\t\t\treturn t.mediaElement.renderer[methodName](args);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tt.mediaElement.generateError(e, mediaFiles);\n\t\t\tthrow e;\n\t\t}\n\t},\n\t    assignMethods = function assignMethods(methodName) {\n\t\tt.mediaElement[methodName] = function () {\n\t\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\t\targs[_key] = arguments[_key];\n\t\t\t}\n\n\t\t\tif (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer[methodName] === 'function') {\n\t\t\t\tif (t.mediaElement.promises.length) {\n\t\t\t\t\treturn Promise.all(t.mediaElement.promises).then(function () {\n\t\t\t\t\t\treturn triggerAction(methodName, args);\n\t\t\t\t\t}).catch(function (e) {\n\t\t\t\t\t\tt.mediaElement.generateError(e, mediaFiles);\n\t\t\t\t\t\treturn Promise.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn triggerAction(methodName, args);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t};\n\n\taddProperty(t.mediaElement, 'src', getSrc, setSrc);\n\n\tt.mediaElement.getSrc = getSrc;\n\tt.mediaElement.setSrc = setSrc;\n\tfor (var _i3 = 0, total = props.length; _i3 < total; _i3++) {\n\t\tassignGettersSetters(props[_i3]);\n\t}\n\n\tfor (var _i4 = 0, _total = methods.length; _i4 < _total; _i4++) {\n\t\tassignMethods(methods[_i4]);\n\t}\n\n\tt.mediaElement.addEventListener = function (eventName, callback) {\n\t\tt.mediaElement.events[eventName] = t.mediaElement.events[eventName] || [];\n\n\t\tt.mediaElement.events[eventName].push(callback);\n\t};\n\tt.mediaElement.removeEventListener = function (eventName, callback) {\n\t\tif (!eventName) {\n\t\t\tt.mediaElement.events = {};\n\t\t\treturn true;\n\t\t}\n\n\t\tvar callbacks = t.mediaElement.events[eventName];\n\n\t\tif (!callbacks) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!callback) {\n\t\t\tt.mediaElement.events[eventName] = [];\n\t\t\treturn true;\n\t\t}\n\n\t\tfor (var _i5 = 0; _i5 < callbacks.length; _i5++) {\n\t\t\tif (callbacks[_i5] === callback) {\n\t\t\t\tt.mediaElement.events[eventName].splice(_i5, 1);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tt.mediaElement.dispatchEvent = function (event) {\n\t\tvar callbacks = t.mediaElement.events[event.type];\n\t\tif (callbacks) {\n\t\t\tfor (var _i6 = 0; _i6 < callbacks.length; _i6++) {\n\t\t\t\tcallbacks[_i6].apply(null, [event]);\n\t\t\t}\n\t\t}\n\t};\n\n\tt.mediaElement.destroy = function () {\n\t\tvar mediaElement = t.mediaElement.originalNode.cloneNode(true);\n\t\tvar wrapper = t.mediaElement.parentElement;\n\t\tmediaElement.removeAttribute('id');\n\t\tmediaElement.remove();\n\t\tt.mediaElement.remove();\n\t\twrapper.appendChild(mediaElement);\n\t};\n\n\tif (mediaFiles.length) {\n\t\tt.mediaElement.src = mediaFiles;\n\t}\n\n\tif (t.mediaElement.promises.length) {\n\t\tPromise.all(t.mediaElement.promises).then(function () {\n\t\t\tif (t.mediaElement.options.success) {\n\t\t\t\tt.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode);\n\t\t\t}\n\t\t}).catch(function () {\n\t\t\tif (error && t.mediaElement.options.error) {\n\t\t\t\tt.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (t.mediaElement.options.success) {\n\t\t\tt.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode);\n\t\t}\n\n\t\tif (error && t.mediaElement.options.error) {\n\t\t\tt.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);\n\t\t}\n\t}\n\n\treturn t.mediaElement;\n};\n\n_window2.default.MediaElement = MediaElement;\n_mejs2.default.MediaElement = MediaElement;\n\nexports.default = MediaElement;\n\n},{\"2\":2,\"26\":26,\"28\":28,\"3\":3,\"30\":30,\"8\":8,\"9\":9}],8:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mejs = {};\n\nmejs.version = '5.1.2';\n\nmejs.html5media = {\n\tproperties: ['volume', 'src', 'currentTime', 'muted', 'duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable', 'currentSrc', 'preload', 'bufferedBytes', 'bufferedTime', 'initialTime', 'startOffsetTime', 'defaultPlaybackRate', 'playbackRate', 'played', 'autoplay', 'loop', 'controls'],\n\treadOnlyProperties: ['duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable'],\n\n\tmethods: ['load', 'play', 'pause', 'canPlayType'],\n\n\tevents: ['loadstart', 'durationchange', 'loadedmetadata', 'loadeddata', 'progress', 'canplay', 'canplaythrough', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'playing', 'pause', 'waiting', 'seeking', 'seeked', 'timeupdate', 'ended', 'ratechange', 'volumechange'],\n\n\tmediaTypes: ['audio/mp3', 'audio/ogg', 'audio/oga', 'audio/wav', 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav', 'audio/mpeg', 'audio/mp4', 'video/mp4', 'video/webm', 'video/ogg', 'video/ogv']\n};\n\n_window2.default.mejs = mejs;\n\nexports.default = mejs;\n\n},{\"3\":3}],9:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.renderer = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Renderer = function () {\n\tfunction Renderer() {\n\t\t_classCallCheck(this, Renderer);\n\n\t\tthis.renderers = {};\n\t\tthis.order = [];\n\t}\n\n\t_createClass(Renderer, [{\n\t\tkey: 'add',\n\t\tvalue: function add(renderer) {\n\t\t\tif (renderer.name === undefined) {\n\t\t\t\tthrow new TypeError('renderer must contain at least `name` property');\n\t\t\t}\n\n\t\t\tthis.renderers[renderer.name] = renderer;\n\t\t\tthis.order.push(renderer.name);\n\t\t}\n\t}, {\n\t\tkey: 'select',\n\t\tvalue: function select(mediaFiles) {\n\t\t\tvar renderers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n\t\t\tvar renderersLength = renderers.length;\n\n\t\t\trenderers = renderers.length ? renderers : this.order;\n\n\t\t\tif (!renderersLength) {\n\t\t\t\tvar rendererIndicator = [/^(html5|native)/i, /^flash/i, /iframe$/i],\n\t\t\t\t    rendererRanking = function rendererRanking(renderer) {\n\t\t\t\t\tfor (var i = 0, total = rendererIndicator.length; i < total; i++) {\n\t\t\t\t\t\tif (rendererIndicator[i].test(renderer)) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn rendererIndicator.length;\n\t\t\t\t};\n\n\t\t\t\trenderers.sort(function (a, b) {\n\t\t\t\t\treturn rendererRanking(a) - rendererRanking(b);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (var i = 0, total = renderers.length; i < total; i++) {\n\t\t\t\tvar key = renderers[i],\n\t\t\t\t    _renderer = this.renderers[key];\n\n\t\t\t\tif (_renderer !== null && _renderer !== undefined) {\n\t\t\t\t\tfor (var j = 0, jl = mediaFiles.length; j < jl; j++) {\n\n\t\t\t\t\t\tif (typeof _renderer.canPlayType === 'function' && typeof mediaFiles[j].type === 'string' && _renderer.canPlayType(mediaFiles[j].type)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\trendererName: _renderer.name,\n\t\t\t\t\t\t\t\tsrc: mediaFiles[j].src\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t}, {\n\t\tkey: 'order',\n\t\tset: function set(order) {\n\t\t\tif (!Array.isArray(order)) {\n\t\t\t\tthrow new TypeError('order must be an array of strings.');\n\t\t\t}\n\n\t\t\tthis._order = order;\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this._order;\n\t\t}\n\t}, {\n\t\tkey: 'renderers',\n\t\tset: function set(renderers) {\n\t\t\tif (renderers !== null && (typeof renderers === 'undefined' ? 'undefined' : _typeof(renderers)) !== 'object') {\n\t\t\t\tthrow new TypeError('renderers must be an array of objects.');\n\t\t\t}\n\n\t\t\tthis._renderers = renderers;\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this._renderers;\n\t\t}\n\t}]);\n\n\treturn Renderer;\n}();\n\nvar renderer = exports.renderer = new Renderer();\n\n_mejs2.default.Renderers = renderer;\n\n},{\"8\":8}],10:[function(_dereq_,module,exports){\n'use strict';\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _player = _dereq_(17);\n\nvar _player2 = _interopRequireDefault(_player);\n\nvar _constants = _dereq_(26);\n\nvar Features = _interopRequireWildcard(_constants);\n\nvar _general = _dereq_(28);\n\nvar _dom = _dereq_(27);\n\nvar _media = _dereq_(30);\n\nvar _generate = _dereq_(29);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.assign(_player.config, {\n\tusePluginFullScreen: true,\n\n\tfullscreenText: null,\n\n\tuseFakeFullscreen: false\n});\n\nObject.assign(_player2.default.prototype, {\n\tisFullScreen: false,\n\n\tisNativeFullScreen: false,\n\n\tisInIframe: false,\n\n\tisPluginClickThroughCreated: false,\n\n\tfullscreenMode: '',\n\n\tcontainerSizeTimeout: null,\n\n\tbuildfullscreen: function buildfullscreen(player) {\n\t\tif (!player.isVideo) {\n\t\t\treturn;\n\t\t}\n\n\t\tplayer.isInIframe = _window2.default.location !== _window2.default.parent.location;\n\n\t\tplayer.detectFullscreenMode();\n\n\t\tvar t = this,\n\t\t    fullscreenTitle = (0, _general.isString)(t.options.fullscreenText) ? t.options.fullscreenText : _i18n2.default.t('mejs.fullscreen'),\n\t\t    fullscreenBtn = _document2.default.createElement('div');\n\t\tfullscreenBtn.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'fullscreen-button';\n\t\tfullscreenBtn.innerHTML = (0, _generate.generateControlButton)(t.id, fullscreenTitle, fullscreenTitle, '' + t.media.options.iconSprite, ['icon-fullscreen', 'icon-unfullscreen'], '' + t.options.classPrefix);\n\t\tt.addControlElement(fullscreenBtn, 'fullscreen');\n\n\t\tfullscreenBtn.addEventListener('click', function () {\n\t\t\tvar isFullScreen = Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || player.isFullScreen;\n\n\t\t\tif (isFullScreen) {\n\t\t\t\tplayer.exitFullScreen();\n\t\t\t} else {\n\t\t\t\tplayer.enterFullScreen();\n\t\t\t}\n\t\t});\n\n\t\tplayer.fullscreenBtn = fullscreenBtn;\n\n\t\tt.options.keyActions.push({\n\t\t\tkeys: [70],\n\t\t\taction: function action(player, media, key, event) {\n\t\t\t\tif (!event.ctrlKey) {\n\t\t\t\t\tif (typeof player.enterFullScreen !== 'undefined') {\n\t\t\t\t\t\tif (player.isFullScreen) {\n\t\t\t\t\t\t\tplayer.exitFullScreen();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplayer.enterFullScreen();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tt.exitFullscreenCallback = function (e) {\n\t\t\tvar key = e.which || e.keyCode || 0;\n\t\t\tif (t.options.enableKeyboard && key === 27 && (Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || t.isFullScreen)) {\n\t\t\t\tplayer.exitFullScreen();\n\t\t\t}\n\t\t};\n\n\t\tt.globalBind('keydown', t.exitFullscreenCallback);\n\n\t\tt.normalHeight = 0;\n\t\tt.normalWidth = 0;\n\n\t\tif (Features.HAS_TRUE_NATIVE_FULLSCREEN) {\n\t\t\tvar fullscreenChanged = function fullscreenChanged() {\n\t\t\t\tif (player.isFullScreen) {\n\t\t\t\t\tif (Features.isFullScreen()) {\n\t\t\t\t\t\tplayer.isNativeFullScreen = true;\n\n\t\t\t\t\t\tplayer.setControlsSize();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tplayer.isNativeFullScreen = false;\n\n\t\t\t\t\t\tplayer.exitFullScreen();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tplayer.globalBind(Features.FULLSCREEN_EVENT_NAME, fullscreenChanged);\n\t\t}\n\t},\n\tcleanfullscreen: function cleanfullscreen(player) {\n\t\tplayer.exitFullScreen();\n\t\tplayer.globalUnbind('keydown', player.exitFullscreenCallback);\n\t},\n\tdetectFullscreenMode: function detectFullscreenMode() {\n\t\tvar t = this,\n\t\t    isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);\n\n\t\tvar mode = '';\n\n\t\tif (Features.HAS_TRUE_NATIVE_FULLSCREEN && isNative) {\n\t\t\tmode = 'native-native';\n\t\t} else if (Features.HAS_TRUE_NATIVE_FULLSCREEN && !isNative) {\n\t\t\tmode = 'plugin-native';\n\t\t} else if (t.usePluginFullScreen && Features.SUPPORT_POINTER_EVENTS) {\n\t\t\tmode = 'plugin-click';\n\t\t}\n\n\t\tt.fullscreenMode = mode;\n\t\treturn mode;\n\t},\n\tenterFullScreen: function enterFullScreen() {\n\t\tvar t = this,\n\t\t    isNative = t.media.rendererName !== null && /(html5|native)/i.test(t.media.rendererName),\n\t\t    containerStyles = getComputedStyle(t.getElement(t.container));\n\n\t\tif (!t.isVideo) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (t.options.useFakeFullscreen === false && (Features.IS_IOS || Features.IS_SAFARI) && Features.HAS_IOS_FULLSCREEN && typeof t.media.originalNode.webkitEnterFullscreen === 'function' && t.media.originalNode.canPlayType((0, _media.getTypeFromFile)(t.media.getSrc()))) {\n\t\t\tt.media.originalNode.webkitEnterFullscreen();\n\t\t\treturn;\n\t\t}\n\n\t\t(0, _dom.addClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');\n\t\t(0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen');\n\n\t\tt.normalHeight = parseFloat(containerStyles.height);\n\t\tt.normalWidth = parseFloat(containerStyles.width);\n\n\t\tif (t.fullscreenMode === 'native-native' || t.fullscreenMode === 'plugin-native') {\n\t\t\tFeatures.requestFullScreen(t.getElement(t.container));\n\n\t\t\tif (t.isInIframe) {\n\t\t\t\tsetTimeout(function checkFullscreen() {\n\n\t\t\t\t\tif (t.isNativeFullScreen) {\n\t\t\t\t\t\tvar percentErrorMargin = 0.002,\n\t\t\t\t\t\t    windowWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth,\n\t\t\t\t\t\t    screenWidth = screen.width,\n\t\t\t\t\t\t    absDiff = Math.abs(screenWidth - windowWidth),\n\t\t\t\t\t\t    marginError = screenWidth * percentErrorMargin;\n\n\t\t\t\t\t\tif (absDiff > marginError) {\n\t\t\t\t\t\t\tt.exitFullScreen();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout(checkFullscreen, 500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t}\n\n\t\tt.getElement(t.container).style.width = '100%';\n\t\tt.getElement(t.container).style.height = '100%';\n\n\t\tt.containerSizeTimeout = setTimeout(function () {\n\t\t\tt.getElement(t.container).style.width = '100%';\n\t\t\tt.getElement(t.container).style.height = '100%';\n\t\t\tt.setControlsSize();\n\t\t}, 500);\n\n\t\tif (isNative) {\n\t\t\tt.node.style.width = '100%';\n\t\t\tt.node.style.height = '100%';\n\t\t} else {\n\t\t\tvar elements = t.getElement(t.container).querySelectorAll('embed, object, video'),\n\t\t\t    _total = elements.length;\n\t\t\tfor (var i = 0; i < _total; i++) {\n\t\t\t\telements[i].style.width = '100%';\n\t\t\t\telements[i].style.height = '100%';\n\t\t\t}\n\t\t}\n\n\t\tif (t.options.setDimensions && typeof t.media.setSize === 'function') {\n\t\t\tt.media.setSize(screen.width, screen.height);\n\t\t}\n\n\t\tvar layers = t.getElement(t.layers).children,\n\t\t    total = layers.length;\n\t\tfor (var _i = 0; _i < total; _i++) {\n\t\t\tlayers[_i].style.width = '100%';\n\t\t\tlayers[_i].style.height = '100%';\n\t\t}\n\n\t\tif (t.fullscreenBtn) {\n\t\t\t(0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');\n\t\t\t(0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');\n\t\t}\n\n\t\tt.setControlsSize();\n\t\tt.isFullScreen = true;\n\n\t\tvar zoomFactor = Math.min(screen.width / t.width, screen.height / t.height),\n\t\t    captionText = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-text');\n\t\tif (captionText) {\n\t\t\tcaptionText.style.fontSize = zoomFactor * 100 + '%';\n\t\t\tcaptionText.style.lineHeight = 'normal';\n\t\t\tt.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = (screen.height - t.normalHeight) / 2 - t.getElement(t.controls).offsetHeight / 2 + zoomFactor + 15 + 'px';\n\t\t}\n\t\tvar event = (0, _general.createEvent)('enteredfullscreen', t.getElement(t.container));\n\t\tt.getElement(t.container).dispatchEvent(event);\n\t},\n\texitFullScreen: function exitFullScreen() {\n\t\tvar t = this,\n\t\t    isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);\n\n\t\tif (!t.isVideo) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(t.containerSizeTimeout);\n\n\t\tif (Features.HAS_TRUE_NATIVE_FULLSCREEN && (Features.IS_FULLSCREEN || t.isFullScreen)) {\n\t\t\tFeatures.cancelFullScreen();\n\t\t}\n\n\t\t(0, _dom.removeClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');\n\t\t(0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen');\n\n\t\tif (t.options.setDimensions) {\n\t\t\tt.getElement(t.container).style.width = t.normalWidth + 'px';\n\t\t\tt.getElement(t.container).style.height = t.normalHeight + 'px';\n\n\t\t\tif (isNative) {\n\t\t\t\tt.node.style.width = t.normalWidth + 'px';\n\t\t\t\tt.node.style.height = t.normalHeight + 'px';\n\t\t\t} else {\n\t\t\t\tvar elements = t.getElement(t.container).querySelectorAll('embed, object, video'),\n\t\t\t\t    _total2 = elements.length;\n\t\t\t\tfor (var i = 0; i < _total2; i++) {\n\t\t\t\t\telements[i].style.width = t.normalWidth + 'px';\n\t\t\t\t\telements[i].style.height = t.normalHeight + 'px';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof t.media.setSize === 'function') {\n\t\t\t\tt.media.setSize(t.normalWidth, t.normalHeight);\n\t\t\t}\n\n\t\t\tvar layers = t.getElement(t.layers).children,\n\t\t\t    total = layers.length;\n\t\t\tfor (var _i2 = 0; _i2 < total; _i2++) {\n\t\t\t\tlayers[_i2].style.width = t.normalWidth + 'px';\n\t\t\t\tlayers[_i2].style.height = t.normalHeight + 'px';\n\t\t\t}\n\t\t}\n\n\t\tif (t.fullscreenBtn) {\n\t\t\t(0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');\n\t\t\t(0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');\n\t\t}\n\n\t\tt.setControlsSize();\n\t\tt.isFullScreen = false;\n\n\t\tvar captionText = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-text');\n\t\tif (captionText) {\n\t\t\tcaptionText.style.fontSize = '';\n\t\t\tcaptionText.style.lineHeight = '';\n\t\t\tt.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = '';\n\t\t}\n\t\tvar event = (0, _general.createEvent)('exitedfullscreen', t.getElement(t.container));\n\t\tt.getElement(t.container).dispatchEvent(event);\n\t}\n});\n\n},{\"17\":17,\"2\":2,\"26\":26,\"27\":27,\"28\":28,\"29\":29,\"3\":3,\"30\":30,\"6\":6}],11:[function(_dereq_,module,exports){\n'use strict';\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _player = _dereq_(17);\n\nvar _player2 = _interopRequireDefault(_player);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _general = _dereq_(28);\n\nvar _dom = _dereq_(27);\n\nvar _generate = _dereq_(29);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.assign(_player.config, {\n\tplayText: null,\n\n\tpauseText: null\n});\n\nObject.assign(_player2.default.prototype, {\n\tbuildplaypause: function buildplaypause(player, controls, layers, media) {\n\t\tvar t = this,\n\t\t    op = t.options,\n\t\t    playTitle = (0, _general.isString)(op.playText) ? op.playText : _i18n2.default.t('mejs.play'),\n\t\t    pauseTitle = (0, _general.isString)(op.pauseText) ? op.pauseText : _i18n2.default.t('mejs.pause'),\n\t\t    play = _document2.default.createElement('div');\n\n\t\tplay.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'playpause-button ' + t.options.classPrefix + 'play';\n\t\tplay.innerHTML = (0, _generate.generateControlButton)(t.id, pauseTitle, playTitle, '' + t.media.options.iconSprite, ['icon-play', 'icon-pause', 'icon-replay'], '' + t.options.classPrefix);\n\t\tplay.addEventListener('click', function () {\n\t\t\tif (t.paused) {\n\t\t\t\tt.play();\n\t\t\t} else {\n\t\t\t\tt.pause();\n\t\t\t}\n\t\t});\n\n\t\tvar playBtn = play.querySelector('button');\n\t\tt.addControlElement(play, 'playpause');\n\n\t\tfunction togglePlayPause(which) {\n\t\t\t(0, _dom.removeClass)(play, t.options.classPrefix + 'play');\n\t\t\t(0, _dom.removeClass)(play, t.options.classPrefix + 'replay');\n\t\t\t(0, _dom.removeClass)(play, t.options.classPrefix + 'pause');\n\n\t\t\tif ('play' === which) {\n\t\t\t\t(0, _dom.addClass)(play, t.options.classPrefix + 'pause');\n\t\t\t\tplayBtn.setAttribute('title', pauseTitle);\n\t\t\t\tplayBtn.setAttribute('aria-label', pauseTitle);\n\t\t\t} else if ('pse' === which) {\n\t\t\t\t(0, _dom.addClass)(play, t.options.classPrefix + 'play');\n\t\t\t\tplayBtn.setAttribute('title', playTitle);\n\t\t\t\tplayBtn.setAttribute('aria-label', playTitle);\n\t\t\t} else {\n\t\t\t\t(0, _dom.addClass)(play, t.options.classPrefix + 'replay');\n\t\t\t\tplayBtn.setAttribute('title', playTitle);\n\t\t\t\tplayBtn.setAttribute('aria-label', playTitle);\n\t\t\t}\n\t\t}\n\n\t\ttogglePlayPause('pse');\n\n\t\tmedia.addEventListener('loadedmetadata', function () {\n\t\t\tif (media.rendererName.indexOf('flash') === -1) {\n\t\t\t\ttogglePlayPause('pse');\n\t\t\t}\n\t\t});\n\t\tmedia.addEventListener('play', function () {\n\t\t\ttogglePlayPause('play');\n\t\t});\n\t\tmedia.addEventListener('playing', function () {\n\t\t\ttogglePlayPause('play');\n\t\t});\n\t\tmedia.addEventListener('pause', function () {\n\t\t\ttogglePlayPause('pse');\n\t\t});\n\t\tmedia.addEventListener('ended', function () {\n\t\t\tif (!player.options.loop) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\ttogglePlayPause('replay');\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t});\n\t}\n});\n\n},{\"17\":17,\"2\":2,\"27\":27,\"28\":28,\"29\":29,\"6\":6}],12:[function(_dereq_,module,exports){\n'use strict';\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _player = _dereq_(17);\n\nvar _player2 = _interopRequireDefault(_player);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _constants = _dereq_(26);\n\nvar _time = _dereq_(32);\n\nvar _dom = _dereq_(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.assign(_player.config, {\n\tenableProgressTooltip: true,\n\n\tuseSmoothHover: true,\n\n\tforceLive: false\n});\n\nObject.assign(_player2.default.prototype, {\n\tbuildprogress: function buildprogress(player, controls, layers, media) {\n\n\t\tvar lastKeyPressTime = 0,\n\t\t    mouseIsDown = false,\n\t\t    startedPaused = false;\n\n\t\tvar t = this,\n\t\t    autoRewindInitial = player.options.autoRewind,\n\t\t    tooltip = player.options.enableProgressTooltip ? '<span class=\"' + t.options.classPrefix + 'time-float\">' + ('<span class=\"' + t.options.classPrefix + 'time-float-current\">00:00</span>') + ('<span class=\"' + t.options.classPrefix + 'time-float-corner\"></span>') + '</span>' : '',\n\t\t    rail = _document2.default.createElement('div');\n\n\t\trail.className = t.options.classPrefix + 'time-rail';\n\t\trail.innerHTML = '<span class=\"' + t.options.classPrefix + 'time-total ' + t.options.classPrefix + 'time-slider\">' + ('<span class=\"' + t.options.classPrefix + 'time-buffering\"></span>') + ('<span class=\"' + t.options.classPrefix + 'time-loaded\"></span>') + ('<span class=\"' + t.options.classPrefix + 'time-current\"></span>') + ('<span class=\"' + t.options.classPrefix + 'time-hovered no-hover\"></span>') + ('<span class=\"' + t.options.classPrefix + 'time-handle\"><span class=\"' + t.options.classPrefix + 'time-handle-content\"></span></span>') + ('' + tooltip) + '</span>';\n\n\t\tt.addControlElement(rail, 'progress');\n\n\t\tt.options.keyActions.push({\n\t\t\tkeys: [37, 227],\n\t\t\taction: function action(player) {\n\t\t\t\tif (!isNaN(player.duration) && player.duration > 0) {\n\t\t\t\t\tif (player.isVideo) {\n\t\t\t\t\t\tplayer.showControls();\n\t\t\t\t\t\tplayer.startControlsTimer();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'time-total');\n\t\t\t\t\tif (timeSlider) {\n\t\t\t\t\t\ttimeSlider.focus();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar newTime = Math.max(player.currentTime - player.options.defaultSeekBackwardInterval(player), 0);\n\n\t\t\t\t\tif (!player.paused) {\n\t\t\t\t\t\tplayer.pause();\n\t\t\t\t\t}\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tplayer.setCurrentTime(newTime, true);\n\t\t\t\t\t}, 0);\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tplayer.play();\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkeys: [39, 228],\n\t\t\taction: function action(player) {\n\n\t\t\t\tif (!isNaN(player.duration) && player.duration > 0) {\n\t\t\t\t\tif (player.isVideo) {\n\t\t\t\t\t\tplayer.showControls();\n\t\t\t\t\t\tplayer.startControlsTimer();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'time-total');\n\t\t\t\t\tif (timeSlider) {\n\t\t\t\t\t\ttimeSlider.focus();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar newTime = Math.min(player.currentTime + player.options.defaultSeekForwardInterval(player), player.duration);\n\n\t\t\t\t\tif (!player.paused) {\n\t\t\t\t\t\tplayer.pause();\n\t\t\t\t\t}\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tplayer.setCurrentTime(newTime, true);\n\t\t\t\t\t}, 0);\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tplayer.play();\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tt.rail = controls.querySelector('.' + t.options.classPrefix + 'time-rail');\n\t\tt.total = controls.querySelector('.' + t.options.classPrefix + 'time-total');\n\t\tt.loaded = controls.querySelector('.' + t.options.classPrefix + 'time-loaded');\n\t\tt.current = controls.querySelector('.' + t.options.classPrefix + 'time-current');\n\t\tt.handle = controls.querySelector('.' + t.options.classPrefix + 'time-handle');\n\t\tt.timefloat = controls.querySelector('.' + t.options.classPrefix + 'time-float');\n\t\tt.timefloatcurrent = controls.querySelector('.' + t.options.classPrefix + 'time-float-current');\n\t\tt.slider = controls.querySelector('.' + t.options.classPrefix + 'time-slider');\n\t\tt.hovered = controls.querySelector('.' + t.options.classPrefix + 'time-hovered');\n\t\tt.buffer = controls.querySelector('.' + t.options.classPrefix + 'time-buffering');\n\t\tt.newTime = 0;\n\t\tt.forcedHandlePause = false;\n\t\tt.setTransformStyle = function (element, value) {\n\t\t\telement.style.transform = value;\n\t\t\telement.style.webkitTransform = value;\n\t\t\telement.style.MozTransform = value;\n\t\t\telement.style.msTransform = value;\n\t\t\telement.style.OTransform = value;\n\t\t};\n\n\t\tt.buffer.style.display = 'none';\n\n\t\tvar handleMouseMove = function handleMouseMove(e) {\n\t\t\tvar totalStyles = getComputedStyle(t.total),\n\t\t\t    offsetStyles = (0, _dom.offset)(t.total),\n\t\t\t    width = t.total.offsetWidth,\n\t\t\t    transform = function () {\n\t\t\t\tif (totalStyles.webkitTransform !== undefined) {\n\t\t\t\t\treturn 'webkitTransform';\n\t\t\t\t} else if (totalStyles.mozTransform !== undefined) {\n\t\t\t\t\treturn 'mozTransform ';\n\t\t\t\t} else if (totalStyles.oTransform !== undefined) {\n\t\t\t\t\treturn 'oTransform';\n\t\t\t\t} else if (totalStyles.msTransform !== undefined) {\n\t\t\t\t\treturn 'msTransform';\n\t\t\t\t} else {\n\t\t\t\t\treturn 'transform';\n\t\t\t\t}\n\t\t\t}(),\n\t\t\t    cssMatrix = function () {\n\t\t\t\tif ('WebKitCSSMatrix' in window) {\n\t\t\t\t\treturn 'WebKitCSSMatrix';\n\t\t\t\t} else if ('MSCSSMatrix' in window) {\n\t\t\t\t\treturn 'MSCSSMatrix';\n\t\t\t\t} else if ('CSSMatrix' in window) {\n\t\t\t\t\treturn 'CSSMatrix';\n\t\t\t\t}\n\t\t\t}();\n\n\t\t\tvar percentage = 0,\n\t\t\t    leftPos = 0,\n\t\t\t    pos = 0,\n\t\t\t    x = void 0;\n\n\t\t\tif (e.originalEvent && e.originalEvent.changedTouches) {\n\t\t\t\tx = e.originalEvent.changedTouches[0].pageX;\n\t\t\t} else if (e.changedTouches) {\n\t\t\t\tx = e.changedTouches[0].pageX;\n\t\t\t} else {\n\t\t\t\tx = e.pageX;\n\t\t\t}\n\n\t\t\tif (t.getDuration()) {\n\t\t\t\tif (x < offsetStyles.left) {\n\t\t\t\t\tx = offsetStyles.left;\n\t\t\t\t} else if (x > width + offsetStyles.left) {\n\t\t\t\t\tx = width + offsetStyles.left;\n\t\t\t\t}\n\n\t\t\t\tpos = x - offsetStyles.left;\n\t\t\t\tpercentage = pos / width;\n\t\t\t\tt.newTime = percentage * t.getDuration();\n\n\t\t\t\tif (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {\n\t\t\t\t\tt.setCurrentRailHandle(t.newTime);\n\t\t\t\t\tt.updateCurrent(t.newTime);\n\t\t\t\t}\n\n\t\t\t\tif (!_constants.IS_IOS && !_constants.IS_ANDROID) {\n\t\t\t\t\tif (pos < 0) {\n\t\t\t\t\t\tpos = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (t.options.useSmoothHover && cssMatrix !== null && typeof window[cssMatrix] !== 'undefined') {\n\t\t\t\t\t\tvar matrix = new window[cssMatrix](getComputedStyle(t.handle)[transform]),\n\t\t\t\t\t\t    handleLocation = matrix.m41,\n\t\t\t\t\t\t    hoverScaleX = pos / parseFloat(getComputedStyle(t.total).width) - handleLocation / parseFloat(getComputedStyle(t.total).width);\n\n\t\t\t\t\t\tt.hovered.style.left = handleLocation + 'px';\n\t\t\t\t\t\tt.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');\n\t\t\t\t\t\tt.hovered.setAttribute('pos', pos);\n\n\t\t\t\t\t\tif (hoverScaleX >= 0) {\n\t\t\t\t\t\t\t(0, _dom.removeClass)(t.hovered, 'negative');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t(0, _dom.addClass)(t.hovered, 'negative');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (t.timefloat) {\n\t\t\t\t\t\tvar half = t.timefloat.offsetWidth / 2,\n\t\t\t\t\t\t    offsetContainer = mejs.Utils.offset(t.getElement(t.container)),\n\t\t\t\t\t\t    tooltipStyles = getComputedStyle(t.timefloat);\n\n\t\t\t\t\t\tif (x - offsetContainer.left < t.timefloat.offsetWidth) {\n\t\t\t\t\t\t\tleftPos = half;\n\t\t\t\t\t\t} else if (x - offsetContainer.left >= t.getElement(t.container).offsetWidth - half) {\n\t\t\t\t\t\t\tleftPos = t.total.offsetWidth - half;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tleftPos = pos;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((0, _dom.hasClass)(t.getElement(t.container), t.options.classPrefix + 'long-video')) {\n\t\t\t\t\t\t\tleftPos += parseFloat(tooltipStyles.marginLeft) / 2 + t.timefloat.offsetWidth / 2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tt.timefloat.style.left = leftPos + 'px';\n\t\t\t\t\t\tt.timefloatcurrent.innerHTML = (0, _time.secondsToTimeCode)(t.newTime, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat);\n\t\t\t\t\t\tt.timefloat.style.display = 'block';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!_constants.IS_IOS && !_constants.IS_ANDROID && t.timefloat) {\n\t\t\t\tleftPos = t.timefloat.offsetWidth + width >= t.getElement(t.container).offsetWidth ? t.timefloat.offsetWidth / 2 : 0;\n\t\t\t\tt.timefloat.style.left = leftPos + 'px';\n\t\t\t\tt.timefloat.style.left = leftPos + 'px';\n\t\t\t\tt.timefloat.style.display = 'block';\n\t\t\t}\n\t\t},\n\t\t    updateSlider = function updateSlider() {\n\t\t\tvar seconds = t.getCurrentTime(),\n\t\t\t    timeSliderText = _i18n2.default.t('mejs.time-slider'),\n\t\t\t    time = (0, _time.secondsToTimeCode)(seconds, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat),\n\t\t\t    duration = t.getDuration();\n\n\t\t\tt.slider.setAttribute('role', 'slider');\n\t\t\tt.slider.tabIndex = 0;\n\n\t\t\tif (media.paused) {\n\t\t\t\tt.slider.setAttribute('aria-label', timeSliderText);\n\t\t\t\tt.slider.setAttribute('aria-valuemin', 0);\n\t\t\t\tt.slider.setAttribute('aria-valuemax', isNaN(duration) ? 0 : duration);\n\t\t\t\tt.slider.setAttribute('aria-valuenow', seconds);\n\t\t\t\tt.slider.setAttribute('aria-valuetext', time);\n\t\t\t} else {\n\t\t\t\tt.slider.removeAttribute('aria-label');\n\t\t\t\tt.slider.removeAttribute('aria-valuemin');\n\t\t\t\tt.slider.removeAttribute('aria-valuemax');\n\t\t\t\tt.slider.removeAttribute('aria-valuenow');\n\t\t\t\tt.slider.removeAttribute('aria-valuetext');\n\t\t\t}\n\t\t},\n\t\t    restartPlayer = function restartPlayer() {\n\t\t\tif (new Date() - lastKeyPressTime >= 1000) {\n\t\t\t\tt.play();\n\t\t\t}\n\t\t},\n\t\t    handleMouseup = function handleMouseup() {\n\t\t\tif (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {\n\t\t\t\tt.setCurrentTime(t.newTime, true);\n\t\t\t\tt.setCurrentRailHandle(t.newTime);\n\t\t\t\tt.updateCurrent(t.newTime);\n\t\t\t}\n\t\t\tif (t.forcedHandlePause) {\n\t\t\t\tt.slider.focus();\n\t\t\t\tt.play();\n\t\t\t}\n\t\t\tt.forcedHandlePause = false;\n\t\t};\n\n\t\tt.slider.addEventListener('focus', function () {\n\t\t\tplayer.options.autoRewind = false;\n\t\t});\n\t\tt.slider.addEventListener('blur', function () {\n\t\t\tplayer.options.autoRewind = autoRewindInitial;\n\t\t});\n\t\tt.slider.addEventListener('keydown', function (e) {\n\t\t\tif (new Date() - lastKeyPressTime >= 1000) {\n\t\t\t\tstartedPaused = t.paused;\n\t\t\t}\n\n\t\t\tif (t.options.enableKeyboard && t.options.keyActions.length) {\n\n\t\t\t\tvar keyCode = e.which || e.keyCode || 0,\n\t\t\t\t    duration = t.getDuration(),\n\t\t\t\t    seekForward = player.options.defaultSeekForwardInterval(media),\n\t\t\t\t    seekBackward = player.options.defaultSeekBackwardInterval(media);\n\n\t\t\t\tvar seekTime = t.getCurrentTime();\n\t\t\t\tvar volume = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-slider');\n\n\t\t\t\tif (keyCode === 38 || keyCode === 40) {\n\t\t\t\t\tif (volume) {\n\t\t\t\t\t\tvolume.style.display = 'block';\n\t\t\t\t\t}\n\t\t\t\t\tif (t.isVideo) {\n\t\t\t\t\t\tt.showControls();\n\t\t\t\t\t\tt.startControlsTimer();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar newVolume = keyCode === 38 ? Math.min(t.volume + 0.1, 1) : Math.max(t.volume - 0.1, 0),\n\t\t\t\t\t    mutePlayer = newVolume <= 0;\n\t\t\t\t\tt.setVolume(newVolume);\n\t\t\t\t\tt.setMuted(mutePlayer);\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tif (volume) {\n\t\t\t\t\t\tvolume.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (keyCode) {\n\t\t\t\t\tcase 37:\n\t\t\t\t\t\tif (t.getDuration() !== Infinity) {\n\t\t\t\t\t\t\tseekTime -= seekBackward;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 39:\n\t\t\t\t\t\tif (t.getDuration() !== Infinity) {\n\t\t\t\t\t\t\tseekTime += seekForward;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 36:\n\t\t\t\t\t\tseekTime = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 35:\n\t\t\t\t\t\tseekTime = duration;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 13:\n\t\t\t\t\t\tif (t.paused) {\n\t\t\t\t\t\t\tt.play();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tseekTime = seekTime < 0 || isNaN(seekTime) ? 0 : seekTime >= duration ? duration : Math.floor(seekTime);\n\t\t\t\tlastKeyPressTime = new Date();\n\t\t\t\tif (!startedPaused) {\n\t\t\t\t\tplayer.pause();\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tt.setCurrentTime(seekTime, true);\n\t\t\t\t}, 0);\n\n\t\t\t\tif (seekTime < t.getDuration() && !startedPaused) {\n\t\t\t\t\tsetTimeout(restartPlayer, 1100);\n\t\t\t\t}\n\n\t\t\t\tplayer.showControls();\n\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\n\t\tvar events = ['mousedown', 'touchstart'];\n\n\t\tt.slider.addEventListener('dragstart', function () {\n\t\t\treturn false;\n\t\t});\n\n\t\tfor (var i = 0, total = events.length; i < total; i++) {\n\t\t\tt.slider.addEventListener(events[i], function (e) {\n\t\t\t\tt.forcedHandlePause = false;\n\t\t\t\tif (t.getDuration() !== Infinity) {\n\t\t\t\t\tif (e.which === 1 || e.which === 0) {\n\t\t\t\t\t\tif (!t.paused) {\n\t\t\t\t\t\t\tt.pause();\n\t\t\t\t\t\t\tt.forcedHandlePause = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmouseIsDown = true;\n\t\t\t\t\t\thandleMouseMove(e);\n\t\t\t\t\t\tvar endEvents = ['mouseup', 'touchend'];\n\n\t\t\t\t\t\tfor (var j = 0, totalEvents = endEvents.length; j < totalEvents; j++) {\n\t\t\t\t\t\t\tt.getElement(t.container).addEventListener(endEvents[j], function (event) {\n\t\t\t\t\t\t\t\tvar target = event.target;\n\t\t\t\t\t\t\t\tif (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) {\n\t\t\t\t\t\t\t\t\thandleMouseMove(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tt.globalBind('mouseup.dur touchend.dur', function () {\n\t\t\t\t\t\t\thandleMouseup();\n\t\t\t\t\t\t\tmouseIsDown = false;\n\t\t\t\t\t\t\tif (t.timefloat) {\n\t\t\t\t\t\t\t\tt.timefloat.style.display = 'none';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, _constants.SUPPORT_PASSIVE_EVENT && events[i] === 'touchstart' ? { passive: true } : false);\n\t\t}\n\t\tt.slider.addEventListener('mouseenter', function (e) {\n\t\t\tif (e.target === t.slider && t.getDuration() !== Infinity) {\n\t\t\t\tt.getElement(t.container).addEventListener('mousemove', function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\tif (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) {\n\t\t\t\t\t\thandleMouseMove(event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (t.timefloat && !_constants.IS_IOS && !_constants.IS_ANDROID) {\n\t\t\t\t\tt.timefloat.style.display = 'block';\n\t\t\t\t}\n\t\t\t\tif (t.hovered && !_constants.IS_IOS && !_constants.IS_ANDROID && t.options.useSmoothHover) {\n\t\t\t\t\t(0, _dom.removeClass)(t.hovered, 'no-hover');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tt.slider.addEventListener('mouseleave', function () {\n\t\t\tif (t.getDuration() !== Infinity) {\n\t\t\t\tif (!mouseIsDown) {\n\t\t\t\t\tif (t.timefloat) {\n\t\t\t\t\t\tt.timefloat.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t\tif (t.hovered && t.options.useSmoothHover) {\n\t\t\t\t\t\t(0, _dom.addClass)(t.hovered, 'no-hover');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tt.broadcastCallback = function (e) {\n\t\t\tvar broadcast = controls.querySelector('.' + t.options.classPrefix + 'broadcast');\n\t\t\tif (!t.options.forceLive && t.getDuration() !== Infinity) {\n\t\t\t\tif (broadcast) {\n\t\t\t\t\tt.slider.style.display = '';\n\t\t\t\t\tbroadcast.remove();\n\t\t\t\t}\n\n\t\t\t\tplayer.setProgressRail(e);\n\t\t\t\tif (!t.forcedHandlePause) {\n\t\t\t\t\tplayer.setCurrentRail(e);\n\t\t\t\t}\n\t\t\t\tupdateSlider();\n\t\t\t} else if (!broadcast && t.options.forceLive) {\n\t\t\t\tvar label = _document2.default.createElement('span');\n\t\t\t\tlabel.className = t.options.classPrefix + 'broadcast';\n\t\t\t\tlabel.innerText = _i18n2.default.t('mejs.live-broadcast');\n\t\t\t\tt.slider.style.display = 'none';\n\t\t\t\tt.rail.appendChild(label);\n\t\t\t}\n\t\t};\n\n\t\tmedia.addEventListener('progress', t.broadcastCallback);\n\t\tmedia.addEventListener('timeupdate', t.broadcastCallback);\n\t\tmedia.addEventListener('play', function () {\n\t\t\tt.buffer.style.display = 'none';\n\t\t});\n\t\tmedia.addEventListener('playing', function () {\n\t\t\tt.buffer.style.display = 'none';\n\t\t});\n\t\tmedia.addEventListener('seeking', function () {\n\t\t\tt.buffer.style.display = '';\n\t\t});\n\t\tmedia.addEventListener('seeked', function () {\n\t\t\tt.buffer.style.display = 'none';\n\t\t});\n\t\tmedia.addEventListener('pause', function () {\n\t\t\tt.buffer.style.display = 'none';\n\t\t});\n\t\tmedia.addEventListener('waiting', function () {\n\t\t\tt.buffer.style.display = '';\n\t\t});\n\t\tmedia.addEventListener('loadeddata', function () {\n\t\t\tt.buffer.style.display = '';\n\t\t});\n\t\tmedia.addEventListener('canplay', function () {\n\t\t\tt.buffer.style.display = 'none';\n\t\t});\n\t\tmedia.addEventListener('error', function () {\n\t\t\tt.buffer.style.display = 'none';\n\t\t});\n\n\t\tt.getElement(t.container).addEventListener('controlsresize', function (e) {\n\t\t\tif (t.getDuration() !== Infinity) {\n\t\t\t\tplayer.setProgressRail(e);\n\t\t\t\tif (!t.forcedHandlePause) {\n\t\t\t\t\tplayer.setCurrentRail(e);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\tcleanprogress: function cleanprogress(player, controls, layers, media) {\n\t\tmedia.removeEventListener('progress', player.broadcastCallback);\n\t\tmedia.removeEventListener('timeupdate', player.broadcastCallback);\n\t\tif (player.rail) {\n\t\t\tplayer.rail.remove();\n\t\t}\n\t},\n\tsetProgressRail: function setProgressRail(e) {\n\t\tvar t = this,\n\t\t    target = e !== undefined ? e.detail.target || e.target : t.media;\n\n\t\tvar percent = null;\n\n\t\tif (target && target.buffered && target.buffered.length > 0 && target.buffered.end && t.getDuration()) {\n\t\t\tpercent = target.buffered.end(target.buffered.length - 1) / t.getDuration();\n\t\t} else if (target && target.bytesTotal !== undefined && target.bytesTotal > 0 && target.bufferedBytes !== undefined) {\n\t\t\t\tpercent = target.bufferedBytes / target.bytesTotal;\n\t\t\t} else if (e && e.lengthComputable && e.total !== 0) {\n\t\t\t\t\tpercent = e.loaded / e.total;\n\t\t\t\t}\n\n\t\tif (percent !== null) {\n\t\t\tpercent = Math.min(1, Math.max(0, percent));\n\n\t\t\tif (t.loaded) {\n\t\t\t\tt.setTransformStyle(t.loaded, 'scaleX(' + percent + ')');\n\t\t\t}\n\t\t}\n\t},\n\tsetCurrentRailHandle: function setCurrentRailHandle(fakeTime) {\n\t\tvar t = this;\n\t\tt.setCurrentRailMain(t, fakeTime);\n\t},\n\tsetCurrentRail: function setCurrentRail() {\n\t\tvar t = this;\n\t\tt.setCurrentRailMain(t);\n\t},\n\tsetCurrentRailMain: function setCurrentRailMain(t, fakeTime) {\n\t\tif (t.getCurrentTime() !== undefined && t.getDuration()) {\n\t\t\tvar nTime = typeof fakeTime === 'undefined' ? t.getCurrentTime() : fakeTime;\n\n\t\t\tif (t.total && t.handle) {\n\t\t\t\tvar tW = parseFloat(getComputedStyle(t.total).width);\n\n\t\t\t\tvar newWidth = Math.round(tW * nTime / t.getDuration()),\n\t\t\t\t    handlePos = newWidth - Math.round(t.handle.offsetWidth / 2);\n\n\t\t\t\thandlePos = handlePos < 0 ? 0 : handlePos;\n\t\t\t\tt.setTransformStyle(t.current, 'scaleX(' + newWidth / tW + ')');\n\t\t\t\tt.setTransformStyle(t.handle, 'translateX(' + handlePos + 'px)');\n\n\t\t\t\tif (t.options.useSmoothHover && !(0, _dom.hasClass)(t.hovered, 'no-hover')) {\n\t\t\t\t\tvar pos = parseInt(t.hovered.getAttribute('pos'), 10);\n\t\t\t\t\tpos = isNaN(pos) ? 0 : pos;\n\n\t\t\t\t\tvar hoverScaleX = pos / tW - handlePos / tW;\n\n\t\t\t\t\tt.hovered.style.left = handlePos + 'px';\n\t\t\t\t\tt.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');\n\n\t\t\t\t\tif (hoverScaleX >= 0) {\n\t\t\t\t\t\t(0, _dom.removeClass)(t.hovered, 'negative');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(0, _dom.addClass)(t.hovered, 'negative');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n},{\"17\":17,\"2\":2,\"26\":26,\"27\":27,\"32\":32,\"6\":6}],13:[function(_dereq_,module,exports){\n'use strict';\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _player = _dereq_(17);\n\nvar _player2 = _interopRequireDefault(_player);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _time = _dereq_(32);\n\nvar _dom = _dereq_(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.assign(_player.config, {\n\tduration: 0,\n\n\ttimeAndDurationSeparator: '<span> | </span>'\n});\n\nObject.assign(_player2.default.prototype, {\n\tbuildcurrent: function buildcurrent(player, controls, layers, media) {\n\t\tvar t = this,\n\t\t    time = _document2.default.createElement('div');\n\n\t\ttime.className = t.options.classPrefix + 'time';\n\t\ttime.setAttribute('role', 'timer');\n\t\ttime.setAttribute('aria-live', 'off');\n\t\ttime.innerHTML = '<span class=\"mejs__offscreen\">' + _i18n2.default.t('mejs.current') + '</span><span class=\"' + t.options.classPrefix + 'currenttime\">' + (0, _time.secondsToTimeCode)(0, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat) + '</span>';\n\n\t\tt.addControlElement(time, 'current');\n\t\tplayer.updateCurrent();\n\t\tt.updateTimeCallback = function () {\n\t\t\tif (t.controlsAreVisible) {\n\t\t\t\tplayer.updateCurrent();\n\t\t\t}\n\t\t};\n\t\tmedia.addEventListener('timeupdate', t.updateTimeCallback);\n\t},\n\tcleancurrent: function cleancurrent(player, controls, layers, media) {\n\t\tmedia.removeEventListener('timeupdate', player.updateTimeCallback);\n\t},\n\tbuildduration: function buildduration(player, controls, layers, media) {\n\t\tvar t = this,\n\t\t    currTime = controls.lastChild.querySelector('.' + t.options.classPrefix + 'currenttime');\n\n\t\tif (currTime) {\n\t\t\tcontrols.querySelector('.' + t.options.classPrefix + 'time').innerHTML += t.options.timeAndDurationSeparator + '<span class=\"mejs__offscreen\">' + _i18n2.default.t('mejs.duration') + '</span><span class=\"' + t.options.classPrefix + 'duration\">' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat) + '</span>');\n\t\t} else {\n\t\t\tif (controls.querySelector('.' + t.options.classPrefix + 'currenttime')) {\n\t\t\t\t(0, _dom.addClass)(controls.querySelector('.' + t.options.classPrefix + 'currenttime').parentNode, t.options.classPrefix + 'currenttime-container');\n\t\t\t}\n\n\t\t\tvar duration = _document2.default.createElement('div');\n\t\t\tduration.className = t.options.classPrefix + 'time ' + t.options.classPrefix + 'duration-container';\n\t\t\tduration.innerHTML = '<span class=\"mejs__offscreen\">' + _i18n2.default.t('mejs.duration') + '</span><span class=\"' + t.options.classPrefix + 'duration\">' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat) + '</span>');\n\n\t\t\tt.addControlElement(duration, 'duration');\n\t\t}\n\n\t\tt.updateDurationCallback = function () {\n\t\t\tif (t.controlsAreVisible) {\n\t\t\t\tplayer.updateDuration();\n\t\t\t}\n\t\t};\n\n\t\tmedia.addEventListener('timeupdate', t.updateDurationCallback);\n\t},\n\tcleanduration: function cleanduration(player, controls, layers, media) {\n\t\tmedia.removeEventListener('timeupdate', player.updateDurationCallback);\n\t},\n\tupdateCurrent: function updateCurrent() {\n\t\tvar t = this;\n\n\t\tvar currentTime = t.getCurrentTime();\n\n\t\tif (isNaN(currentTime)) {\n\t\t\tcurrentTime = 0;\n\t\t}\n\n\t\tvar timecode = (0, _time.secondsToTimeCode)(currentTime, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat);\n\n\t\tif (timecode.length > 5) {\n\t\t\t(0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');\n\t\t} else {\n\t\t\t(0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');\n\t\t}\n\n\t\tif (t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime')) {\n\t\t\tt.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime').innerText = timecode;\n\t\t}\n\t},\n\tupdateDuration: function updateDuration() {\n\t\tvar t = this;\n\n\t\tvar duration = t.getDuration();\n\n\t\tif (t.media !== undefined && (isNaN(duration) || duration === Infinity || duration < 0)) {\n\t\t\tt.media.duration = t.options.duration = duration = 0;\n\t\t}\n\n\t\tif (t.options.duration > 0) {\n\t\t\tduration = t.options.duration;\n\t\t}\n\n\t\tvar timecode = (0, _time.secondsToTimeCode)(duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat);\n\n\t\tif (timecode.length > 5) {\n\t\t\t(0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');\n\t\t} else {\n\t\t\t(0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');\n\t\t}\n\n\t\tif (t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'duration') && duration > 0) {\n\t\t\tt.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'duration').innerHTML = timecode;\n\t\t}\n\t}\n});\n\n},{\"17\":17,\"2\":2,\"27\":27,\"32\":32,\"6\":6}],14:[function(_dereq_,module,exports){\n'use strict';\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _player = _dereq_(17);\n\nvar _player2 = _interopRequireDefault(_player);\n\nvar _time = _dereq_(32);\n\nvar _general = _dereq_(28);\n\nvar _dom = _dereq_(27);\n\nvar _generate = _dereq_(29);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.assign(_player.config, {\n\tstartLanguage: '',\n\n\ttracksText: null,\n\n\tchaptersText: null,\n\n\ttracksAriaLive: false,\n\n\thideCaptionsButtonWhenEmpty: true,\n\n\ttoggleCaptionsButtonWhenOnlyOne: false,\n\n\tslidesSelector: ''\n});\n\nObject.assign(_player2.default.prototype, {\n\thasChapters: false,\n\n\tbuildtracks: function buildtracks(player, controls, layers, media) {\n\n\t\tthis.findTracks();\n\n\t\tif (!player.tracks.length && (!player.trackFiles || !player.trackFiles.length === 0)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar t = this,\n\t\t    attr = t.options.tracksAriaLive ? ' role=\"log\" aria-live=\"assertive\" aria-atomic=\"false\"' : '',\n\t\t    tracksTitle = (0, _general.isString)(t.options.tracksText) ? t.options.tracksText : _i18n2.default.t('mejs.captions-subtitles'),\n\t\t    chaptersTitle = (0, _general.isString)(t.options.chaptersText) ? t.options.chaptersText : _i18n2.default.t('mejs.captions-chapters'),\n\t\t    total = player.trackFiles === null ? player.tracks.length : player.trackFiles.length;\n\n\t\tif (t.domNode.textTracks) {\n\t\t\tfor (var i = t.domNode.textTracks.length - 1; i >= 0; i--) {\n\t\t\t\tt.domNode.textTracks[i].mode = 'hidden';\n\t\t\t}\n\t\t}\n\n\t\tt.cleartracks(player);\n\n\t\tplayer.captions = _document2.default.createElement('div');\n\t\tplayer.captions.className = t.options.classPrefix + 'captions-layer ' + t.options.classPrefix + 'layer';\n\t\tplayer.captions.innerHTML = '<div class=\"' + t.options.classPrefix + 'captions-position ' + t.options.classPrefix + 'captions-position-hover\"' + attr + '>' + ('<span class=\"' + t.options.classPrefix + 'captions-text\"></span>') + '</div>';\n\t\tplayer.captions.style.display = 'none';\n\t\tlayers.insertBefore(player.captions, layers.firstChild);\n\n\t\tplayer.captionsText = player.captions.querySelector('.' + t.options.classPrefix + 'captions-text');\n\n\t\tplayer.captionsButton = _document2.default.createElement('div');\n\t\tplayer.captionsButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'captions-button';\n\t\tplayer.captionsButton.innerHTML = (0, _generate.generateControlButton)(t.id, tracksTitle, tracksTitle, '' + t.media.options.iconSprite, ['icon-captions'], '' + t.options.classPrefix) + ('<div class=\"' + t.options.classPrefix + 'captions-selector ' + t.options.classPrefix + 'offscreen\">') + ('<ul class=\"' + t.options.classPrefix + 'captions-selector-list\">') + ('<li class=\"' + t.options.classPrefix + 'captions-selector-list-item\">') + ('<input type=\"radio\" class=\"' + t.options.classPrefix + 'captions-selector-input\" ') + ('name=\"' + player.id + '_captions\" id=\"' + player.id + '_captions_none\" ') + 'value=\"none\" checked disabled>' + ('<label class=\"' + t.options.classPrefix + 'captions-selector-label ') + (t.options.classPrefix + 'captions-selected\" ') + ('for=\"' + player.id + '_captions_none\">' + _i18n2.default.t('mejs.none') + '</label>') + '</li>' + '</ul>' + '</div>';\n\n\t\tt.addControlElement(player.captionsButton, 'tracks');\n\n\t\tplayer.captionsButton.querySelector('.' + t.options.classPrefix + 'captions-selector-input').disabled = false;\n\n\t\tplayer.chaptersButton = _document2.default.createElement('div');\n\t\tplayer.chaptersButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'chapters-button';\n\t\tplayer.chaptersButton.innerHTML = (0, _generate.generateControlButton)(t.id, chaptersTitle, chaptersTitle, '' + t.media.options.iconSprite, ['icon-chapters'], '' + t.options.classPrefix) + ('<div class=\"' + t.options.classPrefix + 'chapters-selector ' + t.options.classPrefix + 'offscreen\">') + ('<ul class=\"' + t.options.classPrefix + 'chapters-selector-list\"></ul>') + '</div>';\n\n\t\tvar subtitleCount = 0;\n\n\t\tfor (var _i = 0; _i < total; _i++) {\n\t\t\tvar kind = player.tracks[_i].kind,\n\t\t\t    src = player.tracks[_i].src;\n\t\t\tif (src.trim()) {\n\t\t\t\tif (kind === 'subtitles' || kind === 'captions') {\n\t\t\t\t\tsubtitleCount++;\n\t\t\t\t} else if (kind === 'chapters' && !controls.querySelector('.' + t.options.classPrefix + 'chapter-selector')) {\n\t\t\t\t\tplayer.captionsButton.parentNode.insertBefore(player.chaptersButton, player.captionsButton);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tplayer.trackToLoad = -1;\n\t\tplayer.selectedTrack = null;\n\t\tplayer.isLoadingTrack = false;\n\n\t\tfor (var _i2 = 0; _i2 < total; _i2++) {\n\t\t\tvar _kind = player.tracks[_i2].kind;\n\t\t\tif (player.tracks[_i2].src.trim() && (_kind === 'subtitles' || _kind === 'captions')) {\n\t\t\t\tplayer.addTrackButton(player.tracks[_i2].trackId, player.tracks[_i2].srclang, player.tracks[_i2].label);\n\t\t\t}\n\t\t}\n\n\t\tplayer.loadNextTrack();\n\n\t\tvar inEvents = ['mouseenter', 'focusin'],\n\t\t    outEvents = ['mouseleave', 'focusout'];\n\n\t\tif (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount === 1) {\n\t\t\tplayer.captionsButton.addEventListener('click', function (e) {\n\t\t\t\tvar trackId = 'none';\n\t\t\t\tif (player.selectedTrack === null) {\n\t\t\t\t\ttrackId = player.tracks[0].trackId;\n\t\t\t\t}\n\t\t\t\tvar keyboard = e.keyCode || e.which;\n\t\t\t\tplayer.setTrack(trackId, typeof keyboard !== 'undefined');\n\t\t\t});\n\t\t} else {\n\t\t\tvar labels = player.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selector-label'),\n\t\t\t    captions = player.captionsButton.querySelectorAll('input[type=radio]');\n\n\t\t\tfor (var _i3 = 0, _total = inEvents.length; _i3 < _total; _i3++) {\n\t\t\t\tplayer.captionsButton.addEventListener(inEvents[_i3], function () {\n\t\t\t\t\t(0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen');\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (var _i4 = 0, _total2 = outEvents.length; _i4 < _total2; _i4++) {\n\t\t\t\tplayer.captionsButton.addEventListener(outEvents[_i4], function () {\n\t\t\t\t\t(0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen');\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (var _i5 = 0, _total3 = captions.length; _i5 < _total3; _i5++) {\n\t\t\t\tcaptions[_i5].addEventListener('click', function (e) {\n\t\t\t\t\tvar keyboard = e.keyCode || e.which;\n\t\t\t\t\tplayer.setTrack(this.value, typeof keyboard !== 'undefined');\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (var _i6 = 0, _total4 = labels.length; _i6 < _total4; _i6++) {\n\t\t\t\tlabels[_i6].addEventListener('click', function (e) {\n\t\t\t\t\tvar radio = (0, _dom.siblings)(this, function (el) {\n\t\t\t\t\t\treturn el.tagName === 'INPUT';\n\t\t\t\t\t})[0],\n\t\t\t\t\t    event = (0, _general.createEvent)('click', radio);\n\t\t\t\t\tradio.dispatchEvent(event);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tplayer.captionsButton.addEventListener('keydown', function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t}\n\n\t\tfor (var _i7 = 0, _total5 = inEvents.length; _i7 < _total5; _i7++) {\n\t\t\tplayer.chaptersButton.addEventListener(inEvents[_i7], function () {\n\t\t\t\tif (this.querySelector('.' + t.options.classPrefix + 'chapters-selector-list').children.length) {\n\t\t\t\t\t(0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfor (var _i8 = 0, _total6 = outEvents.length; _i8 < _total6; _i8++) {\n\t\t\tplayer.chaptersButton.addEventListener(outEvents[_i8], function () {\n\t\t\t\t(0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen');\n\t\t\t});\n\t\t}\n\n\t\tplayer.chaptersButton.addEventListener('keydown', function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif (!player.options.alwaysShowControls) {\n\t\t\tplayer.getElement(player.container).addEventListener('controlsshown', function () {\n\t\t\t\t(0, _dom.addClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');\n\t\t\t});\n\n\t\t\tplayer.getElement(player.container).addEventListener('controlshidden', function () {\n\t\t\t\tif (!media.paused) {\n\t\t\t\t\t(0, _dom.removeClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t(0, _dom.addClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');\n\t\t}\n\n\t\tmedia.addEventListener('timeupdate', function () {\n\t\t\tplayer.displayCaptions();\n\t\t});\n\n\t\tif (player.options.slidesSelector !== '') {\n\t\t\tplayer.slidesContainer = _document2.default.querySelectorAll(player.options.slidesSelector);\n\n\t\t\tmedia.addEventListener('timeupdate', function () {\n\t\t\t\tplayer.displaySlides();\n\t\t\t});\n\t\t}\n\t},\n\tcleartracks: function cleartracks(player) {\n\t\tif (player) {\n\t\t\tif (player.captions) {\n\t\t\t\tplayer.captions.remove();\n\t\t\t}\n\t\t\tif (player.chapters) {\n\t\t\t\tplayer.chapters.remove();\n\t\t\t}\n\t\t\tif (player.captionsText) {\n\t\t\t\tplayer.captionsText.remove();\n\t\t\t}\n\t\t\tif (player.captionsButton) {\n\t\t\t\tplayer.captionsButton.remove();\n\t\t\t}\n\t\t\tif (player.chaptersButton) {\n\t\t\t\tplayer.chaptersButton.remove();\n\t\t\t}\n\t\t}\n\t},\n\trebuildtracks: function rebuildtracks() {\n\t\tvar t = this;\n\t\tt.findTracks();\n\t\tt.buildtracks(t, t.getElement(t.controls), t.getElement(t.layers), t.media);\n\t},\n\tfindTracks: function findTracks() {\n\t\tvar t = this,\n\t\t    tracktags = t.trackFiles === null ? t.node.querySelectorAll('track') : t.trackFiles,\n\t\t    total = tracktags.length;\n\n\t\tt.tracks = [];\n\t\tfor (var i = 0; i < total; i++) {\n\t\t\tvar track = tracktags[i],\n\t\t\t    srclang = track.getAttribute('srclang').toLowerCase() || '',\n\t\t\t    trackId = t.id + '_track_' + i + '_' + track.getAttribute('kind') + '_' + srclang;\n\t\t\tt.tracks.push({\n\t\t\t\ttrackId: trackId,\n\t\t\t\tsrclang: srclang,\n\t\t\t\tsrc: track.getAttribute('src'),\n\t\t\t\tkind: track.getAttribute('kind'),\n\t\t\t\tlabel: track.getAttribute('label') || '',\n\t\t\t\tentries: [],\n\t\t\t\tisLoaded: false\n\t\t\t});\n\t\t}\n\t},\n\tsetTrack: function setTrack(trackId, setByKeyboard) {\n\n\t\tvar t = this,\n\t\t    radios = t.captionsButton.querySelectorAll('input[type=\"radio\"]'),\n\t\t    captions = t.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selected'),\n\t\t    track = t.captionsButton.querySelector('input[value=\"' + trackId + '\"]');\n\n\t\tfor (var i = 0, total = radios.length; i < total; i++) {\n\t\t\tradios[i].checked = false;\n\t\t}\n\n\t\tfor (var _i9 = 0, _total7 = captions.length; _i9 < _total7; _i9++) {\n\t\t\t(0, _dom.removeClass)(captions[_i9], t.options.classPrefix + 'captions-selected');\n\t\t}\n\n\t\ttrack.checked = true;\n\t\tvar labels = (0, _dom.siblings)(track, function (el) {\n\t\t\treturn (0, _dom.hasClass)(el, t.options.classPrefix + 'captions-selector-label');\n\t\t});\n\t\tfor (var _i10 = 0, _total8 = labels.length; _i10 < _total8; _i10++) {\n\t\t\t(0, _dom.addClass)(labels[_i10], t.options.classPrefix + 'captions-selected');\n\t\t}\n\n\t\tif (trackId === 'none') {\n\t\t\tt.selectedTrack = null;\n\t\t\t(0, _dom.removeClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled');\n\t\t} else {\n\t\t\tfor (var _i11 = 0, _total9 = t.tracks.length; _i11 < _total9; _i11++) {\n\t\t\t\tvar _track = t.tracks[_i11];\n\t\t\t\tif (_track.trackId === trackId) {\n\t\t\t\t\tif (t.selectedTrack === null) {\n\t\t\t\t\t\t(0, _dom.addClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled');\n\t\t\t\t\t}\n\t\t\t\t\tt.selectedTrack = _track;\n\t\t\t\t\tt.captions.setAttribute('lang', t.selectedTrack.srclang);\n\t\t\t\t\tt.displayCaptions();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar event = (0, _general.createEvent)('captionschange', t.media);\n\t\tevent.detail.caption = t.selectedTrack;\n\t\tt.media.dispatchEvent(event);\n\n\t\tif (!setByKeyboard) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tt.getElement(t.container).focus();\n\t\t\t}, 500);\n\t\t}\n\t},\n\tloadNextTrack: function loadNextTrack() {\n\t\tvar t = this;\n\n\t\tt.trackToLoad++;\n\t\tif (t.trackToLoad < t.tracks.length) {\n\t\t\tt.isLoadingTrack = true;\n\t\t\tt.loadTrack(t.trackToLoad);\n\t\t} else {\n\t\t\tt.isLoadingTrack = false;\n\t\t\tt.checkForTracks();\n\t\t}\n\t},\n\tloadTrack: function loadTrack(index) {\n\t\tvar t = this,\n\t\t    track = t.tracks[index];\n\n\t\tif (track !== undefined && (track.src !== undefined || track.src !== \"\")) {\n\t\t\t(0, _dom.ajax)(track.src, 'text', function (d) {\n\t\t\t\ttrack.entries = typeof d === 'string' && /<tt\\s+xml/ig.exec(d) ? _mejs2.default.TrackFormatParser.dfxp.parse(d) : _mejs2.default.TrackFormatParser.webvtt.parse(d);\n\n\t\t\t\ttrack.isLoaded = true;\n\t\t\t\tt.enableTrackButton(track);\n\t\t\t\tt.loadNextTrack();\n\n\t\t\t\tif (track.kind === 'slides') {\n\t\t\t\t\tt.setupSlides(track);\n\t\t\t\t} else if (track.kind === 'chapters' && !t.hasChapters) {\n\t\t\t\t\t\tt.drawChapters(track);\n\t\t\t\t\t\tt.hasChapters = true;\n\t\t\t\t\t}\n\t\t\t}, function () {\n\t\t\t\tt.removeTrackButton(track.trackId);\n\t\t\t\tt.loadNextTrack();\n\t\t\t});\n\t\t}\n\t},\n\tenableTrackButton: function enableTrackButton(track) {\n\t\tvar t = this,\n\t\t    lang = track.srclang,\n\t\t    target = _document2.default.getElementById('' + track.trackId);\n\n\t\tif (!target) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar label = track.label;\n\n\t\tif (label === '') {\n\t\t\tlabel = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;\n\t\t}\n\t\ttarget.disabled = false;\n\t\tvar targetSiblings = (0, _dom.siblings)(target, function (el) {\n\t\t\treturn (0, _dom.hasClass)(el, t.options.classPrefix + 'captions-selector-label');\n\t\t});\n\t\tfor (var i = 0, total = targetSiblings.length; i < total; i++) {\n\t\t\ttargetSiblings[i].innerHTML = label;\n\t\t}\n\n\t\tif (t.options.startLanguage === lang) {\n\t\t\ttarget.checked = true;\n\t\t\tvar event = (0, _general.createEvent)('click', target);\n\t\t\ttarget.dispatchEvent(event);\n\t\t}\n\t},\n\tremoveTrackButton: function removeTrackButton(trackId) {\n\t\tvar element = _document2.default.getElementById('' + trackId);\n\t\tif (element) {\n\t\t\tvar button = element.closest('li');\n\t\t\tif (button) {\n\t\t\t\tbutton.remove();\n\t\t\t}\n\t\t}\n\t},\n\taddTrackButton: function addTrackButton(trackId, lang, label) {\n\t\tvar t = this;\n\t\tif (label === '') {\n\t\t\tlabel = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;\n\t\t}\n\n\t\tt.captionsButton.querySelector('ul').innerHTML += '<li class=\"' + t.options.classPrefix + 'captions-selector-list-item\">' + ('<input type=\"radio\" class=\"' + t.options.classPrefix + 'captions-selector-input\" ') + ('name=\"' + t.id + '_captions\" id=\"' + trackId + '\" value=\"' + trackId + '\" disabled>') + ('<label class=\"' + t.options.classPrefix + 'captions-selector-label\"') + ('for=\"' + trackId + '\">' + label + ' (loading)</label>') + '</li>';\n\t},\n\tcheckForTracks: function checkForTracks() {\n\t\tvar t = this;\n\n\t\tvar hasSubtitles = false;\n\n\t\tif (t.options.hideCaptionsButtonWhenEmpty) {\n\t\t\tfor (var i = 0, total = t.tracks.length; i < total; i++) {\n\t\t\t\tvar kind = t.tracks[i].kind;\n\t\t\t\tif ((kind === 'subtitles' || kind === 'captions') && t.tracks[i].isLoaded) {\n\t\t\t\t\thasSubtitles = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tt.captionsButton.style.display = hasSubtitles ? '' : 'none';\n\t\t\tt.setControlsSize();\n\t\t}\n\t},\n\tdisplayCaptions: function displayCaptions() {\n\t\tif (this.tracks === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar t = this,\n\t\t    track = t.selectedTrack,\n\t\t    sanitize = function sanitize(html) {\n\t\t\tvar div = _document2.default.createElement('div');\n\t\t\tdiv.innerHTML = html;\n\n\t\t\tvar scripts = div.getElementsByTagName('script');\n\t\t\tvar i = scripts.length;\n\t\t\twhile (i--) {\n\t\t\t\tscripts[i].remove();\n\t\t\t}\n\n\t\t\tvar allElements = div.getElementsByTagName('*');\n\t\t\tfor (var _i12 = 0, n = allElements.length; _i12 < n; _i12++) {\n\t\t\t\tvar attributesObj = allElements[_i12].attributes,\n\t\t\t\t    attributes = Array.prototype.slice.call(attributesObj);\n\n\t\t\t\tfor (var j = 0, total = attributes.length; j < total; j++) {\n\t\t\t\t\tif (attributes[j].name.startsWith('on') || attributes[j].value.startsWith('javascript')) {\n\t\t\t\t\t\tallElements[_i12].remove();\n\t\t\t\t\t} else if (attributes[j].name === 'style') {\n\t\t\t\t\t\tallElements[_i12].removeAttribute(attributes[j].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn div.innerHTML;\n\t\t};\n\n\t\tif (track !== null && track.isLoaded) {\n\t\t\tvar i = t.searchTrackPosition(track.entries, t.media.currentTime);\n\t\t\tif (i > -1) {\n\t\t\t\tvar text = track.entries[i].text;\n\t\t\t\tif (typeof t.options.captionTextPreprocessor === 'function') text = t.options.captionTextPreprocessor(text);\n\t\t\t\tt.captionsText.innerHTML = sanitize(text);\n\t\t\t\tt.captionsText.className = t.options.classPrefix + 'captions-text ' + (track.entries[i].identifier || '');\n\t\t\t\tt.captions.style.display = '';\n\t\t\t\tt.captions.style.height = '0px';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tt.captions.style.display = 'none';\n\t\t} else {\n\t\t\tt.captions.style.display = 'none';\n\t\t}\n\t},\n\tsetupSlides: function setupSlides(track) {\n\t\tvar t = this;\n\t\tt.slides = track;\n\t\tt.slides.entries.imgs = [t.slides.entries.length];\n\t\tt.showSlide(0);\n\t},\n\tshowSlide: function showSlide(index) {\n\t\tvar _this = this;\n\n\t\tvar t = this;\n\n\t\tif (t.tracks === undefined || t.slidesContainer === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar url = t.slides.entries[index].text;\n\n\t\tvar img = t.slides.entries[index].imgs;\n\n\t\tif (img === undefined || img.fadeIn === undefined) {\n\t\t\tvar image = _document2.default.createElement('img');\n\t\t\timage.src = url;\n\t\t\timage.addEventListener('load', function () {\n\t\t\t\tvar self = _this,\n\t\t\t\t    visible = (0, _dom.siblings)(self, function (el) {\n\t\t\t\t\treturn visible(el);\n\t\t\t\t});\n\t\t\t\tself.style.display = 'none';\n\t\t\t\tt.slidesContainer.innerHTML += self.innerHTML;\n\t\t\t\t(0, _dom.fadeIn)(t.slidesContainer.querySelector(image));\n\t\t\t\tfor (var i = 0, total = visible.length; i < total; i++) {\n\t\t\t\t\t(0, _dom.fadeOut)(visible[i], 400);\n\t\t\t\t}\n\t\t\t});\n\t\t\tt.slides.entries[index].imgs = img = image;\n\t\t} else if (!(0, _dom.visible)(img)) {\n\t\t\tvar _visible = (0, _dom.siblings)(self, function (el) {\n\t\t\t\treturn _visible(el);\n\t\t\t});\n\t\t\t(0, _dom.fadeIn)(t.slidesContainer.querySelector(img));\n\t\t\tfor (var i = 0, total = _visible.length; i < total; i++) {\n\t\t\t\t(0, _dom.fadeOut)(_visible[i]);\n\t\t\t}\n\t\t}\n\t},\n\tdisplaySlides: function displaySlides() {\n\t\tvar t = this;\n\n\t\tif (this.slides === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar slides = t.slides,\n\t\t    i = t.searchTrackPosition(slides.entries, t.media.currentTime);\n\n\t\tif (i > -1) {\n\t\t\tt.showSlide(i);\n\t\t}\n\t},\n\tdrawChapters: function drawChapters(chapters) {\n\t\tvar t = this,\n\t\t    total = chapters.entries.length;\n\n\t\tif (!total) {\n\t\t\treturn;\n\t\t}\n\n\t\tt.chaptersButton.querySelector('ul').innerHTML = '';\n\n\t\tfor (var i = 0; i < total; i++) {\n\t\t\tt.chaptersButton.querySelector('ul').innerHTML += '<li class=\"' + t.options.classPrefix + 'chapters-selector-list-item\" ' + 'role=\"menuitemcheckbox\" aria-live=\"polite\" aria-disabled=\"false\" aria-checked=\"false\">' + ('<input type=\"radio\" class=\"' + t.options.classPrefix + 'captions-selector-input\" ') + ('name=\"' + t.id + '_chapters\" id=\"' + t.id + '_chapters_' + i + '\" value=\"' + chapters.entries[i].start + '\" disabled>') + ('<label class=\"' + t.options.classPrefix + 'chapters-selector-label\"') + ('for=\"' + t.id + '_chapters_' + i + '\">' + chapters.entries[i].text + '</label>') + '</li>';\n\t\t}\n\n\t\tvar radios = t.chaptersButton.querySelectorAll('input[type=\"radio\"]'),\n\t\t    labels = t.chaptersButton.querySelectorAll('.' + t.options.classPrefix + 'chapters-selector-label');\n\n\t\tfor (var _i13 = 0, _total10 = radios.length; _i13 < _total10; _i13++) {\n\t\t\tradios[_i13].disabled = false;\n\t\t\tradios[_i13].checked = false;\n\t\t\tradios[_i13].addEventListener('click', function (e) {\n\t\t\t\tvar self = this,\n\t\t\t\t    listItems = t.chaptersButton.querySelectorAll('li'),\n\t\t\t\t    label = (0, _dom.siblings)(self, function (el) {\n\t\t\t\t\treturn (0, _dom.hasClass)(el, t.options.classPrefix + 'chapters-selector-label');\n\t\t\t\t})[0];\n\n\t\t\t\tself.checked = true;\n\t\t\t\tself.parentNode.setAttribute('aria-checked', true);\n\t\t\t\t(0, _dom.addClass)(label, t.options.classPrefix + 'chapters-selected');\n\t\t\t\t(0, _dom.removeClass)(t.chaptersButton.querySelector('.' + t.options.classPrefix + 'chapters-selected'), t.options.classPrefix + 'chapters-selected');\n\n\t\t\t\tfor (var _i14 = 0, _total11 = listItems.length; _i14 < _total11; _i14++) {\n\t\t\t\t\tlistItems[_i14].setAttribute('aria-checked', false);\n\t\t\t\t}\n\n\t\t\t\tvar keyboard = e.keyCode || e.which;\n\t\t\t\tif (typeof keyboard === 'undefined') {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tt.getElement(t.container).focus();\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\n\t\t\t\tt.media.setCurrentTime(parseFloat(self.value));\n\t\t\t\tif (t.media.paused) {\n\t\t\t\t\tt.media.play();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfor (var _i15 = 0, _total12 = labels.length; _i15 < _total12; _i15++) {\n\t\t\tlabels[_i15].addEventListener('click', function (e) {\n\t\t\t\tvar radio = (0, _dom.siblings)(this, function (el) {\n\t\t\t\t\treturn el.tagName === 'INPUT';\n\t\t\t\t})[0],\n\t\t\t\t    event = (0, _general.createEvent)('click', radio);\n\t\t\t\tradio.dispatchEvent(event);\n\t\t\t\te.preventDefault();\n\t\t\t});\n\t\t}\n\t},\n\tsearchTrackPosition: function searchTrackPosition(tracks, currentTime) {\n\t\tvar lo = 0,\n\t\t    hi = tracks.length - 1,\n\t\t    mid = void 0,\n\t\t    start = void 0,\n\t\t    stop = void 0;\n\n\t\twhile (lo <= hi) {\n\t\t\tmid = lo + hi >> 1;\n\t\t\tstart = tracks[mid].start;\n\t\t\tstop = tracks[mid].stop;\n\n\t\t\tif (currentTime >= start && currentTime < stop) {\n\t\t\t\treturn mid;\n\t\t\t} else if (start < currentTime) {\n\t\t\t\tlo = mid + 1;\n\t\t\t} else if (start > currentTime) {\n\t\t\t\thi = mid - 1;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n});\n\n_mejs2.default.language = {\n\tcodes: {\n\t\taf: 'mejs.afrikaans',\n\t\tsq: 'mejs.albanian',\n\t\tar: 'mejs.arabic',\n\t\tbe: 'mejs.belarusian',\n\t\tbg: 'mejs.bulgarian',\n\t\tca: 'mejs.catalan',\n\t\tzh: 'mejs.chinese',\n\t\t'zh-cn': 'mejs.chinese-simplified',\n\t\t'zh-tw': 'mejs.chines-traditional',\n\t\thr: 'mejs.croatian',\n\t\tcs: 'mejs.czech',\n\t\tda: 'mejs.danish',\n\t\tnl: 'mejs.dutch',\n\t\ten: 'mejs.english',\n\t\tet: 'mejs.estonian',\n\t\tfl: 'mejs.filipino',\n\t\tfi: 'mejs.finnish',\n\t\tfr: 'mejs.french',\n\t\tgl: 'mejs.galician',\n\t\tde: 'mejs.german',\n\t\tel: 'mejs.greek',\n\t\tht: 'mejs.haitian-creole',\n\t\tiw: 'mejs.hebrew',\n\t\thi: 'mejs.hindi',\n\t\thu: 'mejs.hungarian',\n\t\tis: 'mejs.icelandic',\n\t\tid: 'mejs.indonesian',\n\t\tga: 'mejs.irish',\n\t\tit: 'mejs.italian',\n\t\tja: 'mejs.japanese',\n\t\tko: 'mejs.korean',\n\t\tlv: 'mejs.latvian',\n\t\tlt: 'mejs.lithuanian',\n\t\tmk: 'mejs.macedonian',\n\t\tms: 'mejs.malay',\n\t\tmt: 'mejs.maltese',\n\t\tno: 'mejs.norwegian',\n\t\tfa: 'mejs.persian',\n\t\tpl: 'mejs.polish',\n\t\tpt: 'mejs.portuguese',\n\t\tro: 'mejs.romanian',\n\t\tru: 'mejs.russian',\n\t\tsr: 'mejs.serbian',\n\t\tsk: 'mejs.slovak',\n\t\tsl: 'mejs.slovenian',\n\t\tes: 'mejs.spanish',\n\t\tsw: 'mejs.swahili',\n\t\tsv: 'mejs.swedish',\n\t\ttl: 'mejs.tagalog',\n\t\tth: 'mejs.thai',\n\t\ttr: 'mejs.turkish',\n\t\tuk: 'mejs.ukrainian',\n\t\tvi: 'mejs.vietnamese',\n\t\tcy: 'mejs.welsh',\n\t\tyi: 'mejs.yiddish'\n\t}\n};\n\n_mejs2.default.TrackFormatParser = {\n\twebvtt: {\n\t\tpattern: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,\n\n\t\tparse: function parse(trackText) {\n\t\t\tvar lines = trackText.split(/\\r?\\n/),\n\t\t\t    entries = [];\n\n\t\t\tvar timecode = void 0,\n\t\t\t    text = void 0,\n\t\t\t    identifier = void 0;\n\n\t\t\tfor (var i = 0, total = lines.length; i < total; i++) {\n\t\t\t\ttimecode = this.pattern.exec(lines[i]);\n\n\t\t\t\tif (timecode && i < lines.length) {\n\t\t\t\t\tif (i - 1 >= 0 && lines[i - 1] !== '') {\n\t\t\t\t\t\tidentifier = lines[i - 1];\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\n\t\t\t\t\ttext = lines[i];\n\t\t\t\t\ti++;\n\t\t\t\t\twhile (lines[i] !== '' && i < lines.length) {\n\t\t\t\t\t\ttext = text + '\\n' + lines[i];\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\ttext = text === null ? '' : text.trim().replace(/(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/ig, \"<a href='$1' target='_blank'>$1</a>\");\n\t\t\t\t\tentries.push({\n\t\t\t\t\t\tidentifier: identifier,\n\t\t\t\t\t\tstart: (0, _time.convertSMPTEtoSeconds)(timecode[1]) === 0 ? 0.200 : (0, _time.convertSMPTEtoSeconds)(timecode[1]),\n\t\t\t\t\t\tstop: (0, _time.convertSMPTEtoSeconds)(timecode[3]),\n\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\tsettings: timecode[5]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tidentifier = '';\n\t\t\t}\n\t\t\treturn entries;\n\t\t}\n\t},\n\n\tdfxp: {\n\t\tparse: function parse(trackText) {\n\t\t\tvar trackElem = _document2.default.adoptNode(new DOMParser().parseFromString(trackText, 'application/xml').documentElement),\n\t\t\t    container = trackElem.querySelector('div'),\n\t\t\t    lines = container.querySelectorAll('p'),\n\t\t\t    styleNode = _document2.default.getElementById(container.getAttribute('style')),\n\t\t\t    entries = [];\n\n\t\t\tvar styles = void 0;\n\n\t\t\tif (styleNode) {\n\t\t\t\tstyleNode.removeAttribute('id');\n\t\t\t\tvar attributes = styleNode.attributes;\n\t\t\t\tif (attributes.length) {\n\t\t\t\t\tstyles = {};\n\t\t\t\t\tfor (var i = 0, total = attributes.length; i < total; i++) {\n\t\t\t\t\t\tstyles[attributes[i].name.split(\":\")[1]] = attributes[i].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var _i16 = 0, _total13 = lines.length; _i16 < _total13; _i16++) {\n\t\t\t\tvar style = void 0,\n\t\t\t\t    _temp = {\n\t\t\t\t\tstart: null,\n\t\t\t\t\tstop: null,\n\t\t\t\t\tstyle: null,\n\t\t\t\t\ttext: null\n\t\t\t\t};\n\n\t\t\t\tif (lines[_i16].getAttribute('begin')) {\n\t\t\t\t\t_temp.start = (0, _time.convertSMPTEtoSeconds)(lines[_i16].getAttribute('begin'));\n\t\t\t\t}\n\t\t\t\tif (!_temp.start && lines[_i16 - 1].getAttribute('end')) {\n\t\t\t\t\t_temp.start = (0, _time.convertSMPTEtoSeconds)(lines[_i16 - 1].getAttribute('end'));\n\t\t\t\t}\n\t\t\t\tif (lines[_i16].getAttribute('end')) {\n\t\t\t\t\t_temp.stop = (0, _time.convertSMPTEtoSeconds)(lines[_i16].getAttribute('end'));\n\t\t\t\t}\n\t\t\t\tif (!_temp.stop && lines[_i16 + 1].getAttribute('begin')) {\n\t\t\t\t\t_temp.stop = (0, _time.convertSMPTEtoSeconds)(lines[_i16 + 1].getAttribute('begin'));\n\t\t\t\t}\n\n\t\t\t\tif (styles) {\n\t\t\t\t\tstyle = '';\n\t\t\t\t\tfor (var _style in styles) {\n\t\t\t\t\t\tstyle += _style + ': ' + styles[_style] + ';';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (style) {\n\t\t\t\t\t_temp.style = style;\n\t\t\t\t}\n\t\t\t\tif (_temp.start === 0) {\n\t\t\t\t\t_temp.start = 0.200;\n\t\t\t\t}\n\t\t\t\t_temp.text = lines[_i16].innerHTML.trim().replace(/(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_| !:, .; ]*[-A-Z0-9+&@#\\/%=~_|])/ig, \"<a href='$1' target='_blank'>$1</a>\");\n\t\t\t\tentries.push(_temp);\n\t\t\t}\n\t\t\treturn entries;\n\t\t}\n\t}\n};\n\n},{\"17\":17,\"2\":2,\"27\":27,\"28\":28,\"29\":29,\"32\":32,\"6\":6,\"8\":8}],15:[function(_dereq_,module,exports){\n'use strict';\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _player = _dereq_(17);\n\nvar _player2 = _interopRequireDefault(_player);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _constants = _dereq_(26);\n\nvar _general = _dereq_(28);\n\nvar _dom = _dereq_(27);\n\nvar _generate = _dereq_(29);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.assign(_player.config, {\n\tmuteText: null,\n\n\tunmuteText: null,\n\n\tallyVolumeControlText: null,\n\n\thideVolumeOnTouchDevices: true,\n\n\taudioVolume: 'horizontal',\n\n\tvideoVolume: 'vertical',\n\n\tstartVolume: 0.8\n});\n\nObject.assign(_player2.default.prototype, {\n\tbuildvolume: function buildvolume(player, controls, layers, media) {\n\t\tif ((_constants.IS_ANDROID || _constants.IS_IOS) && this.options.hideVolumeOnTouchDevices) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar t = this,\n\t\t    mode = t.isVideo ? t.options.videoVolume : t.options.audioVolume,\n\t\t    muteText = (0, _general.isString)(t.options.muteText) ? t.options.muteText : _i18n2.default.t('mejs.mute'),\n\t\t    unmuteText = (0, _general.isString)(t.options.unmuteText) ? t.options.unmuteText : _i18n2.default.t('mejs.unmute'),\n\t\t    volumeControlText = (0, _general.isString)(t.options.allyVolumeControlText) ? t.options.allyVolumeControlText : _i18n2.default.t('mejs.volume-help-text'),\n\t\t    mute = _document2.default.createElement('div');\n\n\t\tmute.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'volume-button ' + t.options.classPrefix + 'mute';\n\t\tmute.innerHTML = mode === 'horizontal' ? (0, _generate.generateControlButton)(t.id, muteText, muteText, '' + t.media.options.iconSprite, ['icon-mute', 'icon-unmute'], '' + t.options.classPrefix, '', t.options.classPrefix + 'horizontal-volume-slider') : (0, _generate.generateControlButton)(t.id, muteText, muteText, '' + t.media.options.iconSprite, ['icon-mute', 'icon-unmute'], '' + t.options.classPrefix, '', t.options.classPrefix + 'volume-slider') + ('<a class=\"' + t.options.classPrefix + 'volume-slider\" ') + ('aria-label=\"' + _i18n2.default.t('mejs.volume-slider') + '\" aria-valuemin=\"0\" aria-valuemax=\"100\" role=\"slider\" ') + 'aria-orientation=\"vertical\">' + ('<span class=\"' + t.options.classPrefix + 'offscreen\" id=\"' + t.options.classPrefix + 'volume-slider\">' + volumeControlText + '</span>') + ('<div class=\"' + t.options.classPrefix + 'volume-total\">') + ('<div class=\"' + t.options.classPrefix + 'volume-current\"></div>') + ('<div class=\"' + t.options.classPrefix + 'volume-handle\"></div>') + '</div>' + '</a>';\n\n\t\tt.addControlElement(mute, 'volume');\n\n\t\tt.options.keyActions.push({\n\t\t\tkeys: [38],\n\t\t\taction: function action(player) {\n\t\t\t\tvar volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider');\n\t\t\t\tif (volumeSlider && volumeSlider.matches(':focus')) {\n\t\t\t\t\tvolumeSlider.style.display = 'block';\n\t\t\t\t}\n\t\t\t\tif (player.isVideo) {\n\t\t\t\t\tplayer.showControls();\n\t\t\t\t\tplayer.startControlsTimer();\n\t\t\t\t}\n\n\t\t\t\tvar newVolume = Math.min(player.volume + 0.1, 1);\n\t\t\t\tplayer.setVolume(newVolume);\n\t\t\t\tif (newVolume > 0) {\n\t\t\t\t\tplayer.setMuted(false);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkeys: [40],\n\t\t\taction: function action(player) {\n\t\t\t\tvar volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider');\n\t\t\t\tif (volumeSlider) {\n\t\t\t\t\tvolumeSlider.style.display = 'block';\n\t\t\t\t}\n\n\t\t\t\tif (player.isVideo) {\n\t\t\t\t\tplayer.showControls();\n\t\t\t\t\tplayer.startControlsTimer();\n\t\t\t\t}\n\n\t\t\t\tvar newVolume = Math.max(player.volume - 0.1, 0);\n\t\t\t\tplayer.setVolume(newVolume);\n\n\t\t\t\tif (newVolume <= 0.1) {\n\t\t\t\t\tplayer.setMuted(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkeys: [77],\n\t\t\taction: function action(player) {\n\t\t\t\tvar volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider');\n\t\t\t\tif (volumeSlider) {\n\t\t\t\t\tvolumeSlider.style.display = 'block';\n\t\t\t\t}\n\n\t\t\t\tif (player.isVideo) {\n\t\t\t\t\tplayer.showControls();\n\t\t\t\t\tplayer.startControlsTimer();\n\t\t\t\t}\n\t\t\t\tif (player.media.muted) {\n\t\t\t\t\tplayer.setMuted(false);\n\t\t\t\t} else {\n\t\t\t\t\tplayer.setMuted(true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (mode === 'horizontal') {\n\t\t\tvar anchor = _document2.default.createElement('a');\n\t\t\tanchor.className = t.options.classPrefix + 'horizontal-volume-slider';\n\t\t\tanchor.setAttribute('aria-label', _i18n2.default.t('mejs.volume-slider'));\n\t\t\tanchor.setAttribute('aria-valuemin', 0);\n\t\t\tanchor.setAttribute('aria-valuemax', 100);\n\t\t\tanchor.setAttribute('aria-valuenow', 100);\n\t\t\tanchor.setAttribute('role', 'slider');\n\t\t\tanchor.innerHTML += '<span class=\"' + t.options.classPrefix + 'offscreen\" id=\"' + t.options.classPrefix + 'horizontal-volume-slider\">' + volumeControlText + '</span>' + ('<div class=\"' + t.options.classPrefix + 'horizontal-volume-total\">') + ('<div class=\"' + t.options.classPrefix + 'horizontal-volume-current\"></div>') + ('<div class=\"' + t.options.classPrefix + 'horizontal-volume-handle\"></div>') + '</div>';\n\t\t\tmute.parentNode.insertBefore(anchor, mute.nextSibling);\n\t\t}\n\n\t\tvar mouseIsDown = false,\n\t\t    mouseIsOver = false,\n\t\t    modified = false,\n\t\t    updateVolumeSlider = function updateVolumeSlider() {\n\t\t\tvar volume = Math.floor(media.volume * 100);\n\t\t\tvolumeSlider.setAttribute('aria-valuenow', volume);\n\t\t\tvolumeSlider.setAttribute('aria-valuetext', volume + '%');\n\t\t};\n\n\t\tvar volumeSlider = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-slider') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-slider'),\n\t\t    volumeTotal = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-total') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-total'),\n\t\t    volumeCurrent = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-current') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-current'),\n\t\t    volumeHandle = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-handle') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-handle'),\n\t\t    positionVolumeHandle = function positionVolumeHandle(volume) {\n\n\t\t\tif (volume === null || isNaN(volume) || volume === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvolume = Math.max(0, volume);\n\t\t\tvolume = Math.min(volume, 1);\n\n\t\t\tif (volume === 0) {\n\t\t\t\t(0, _dom.removeClass)(mute, t.options.classPrefix + 'mute');\n\t\t\t\t(0, _dom.addClass)(mute, t.options.classPrefix + 'unmute');\n\t\t\t\tvar button = mute.firstElementChild;\n\t\t\t\tbutton.setAttribute('title', unmuteText);\n\t\t\t\tbutton.setAttribute('aria-label', unmuteText);\n\t\t\t} else {\n\t\t\t\t(0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute');\n\t\t\t\t(0, _dom.addClass)(mute, t.options.classPrefix + 'mute');\n\t\t\t\tvar _button = mute.firstElementChild;\n\t\t\t\t_button.setAttribute('title', muteText);\n\t\t\t\t_button.setAttribute('aria-label', muteText);\n\t\t\t}\n\n\t\t\tvar volumePercentage = volume * 100 + '%',\n\t\t\t    volumeStyles = getComputedStyle(volumeHandle);\n\n\t\t\tif (mode === 'vertical') {\n\t\t\t\tvolumeCurrent.style.bottom = 0;\n\t\t\t\tvolumeCurrent.style.height = volumePercentage;\n\t\t\t\tvolumeHandle.style.bottom = volumePercentage;\n\t\t\t\tvolumeHandle.style.marginBottom = -parseFloat(volumeStyles.height) / 2 + 'px';\n\t\t\t} else {\n\t\t\t\tvolumeCurrent.style.left = 0;\n\t\t\t\tvolumeCurrent.style.width = volumePercentage;\n\t\t\t\tvolumeHandle.style.left = volumePercentage;\n\t\t\t\tvolumeHandle.style.marginLeft = -parseFloat(volumeStyles.width) / 2 + 'px';\n\t\t\t}\n\t\t},\n\t\t    handleVolumeMove = function handleVolumeMove(e) {\n\t\t\tvar totalOffset = (0, _dom.offset)(volumeTotal),\n\t\t\t    volumeStyles = getComputedStyle(volumeTotal);\n\n\t\t\tmodified = true;\n\n\t\t\tvar volume = null;\n\n\t\t\tif (mode === 'vertical') {\n\t\t\t\tvar railHeight = parseFloat(volumeStyles.height),\n\t\t\t\t    newY = e.pageY - totalOffset.top;\n\n\t\t\t\tvolume = (railHeight - newY) / railHeight;\n\n\t\t\t\tif (totalOffset.top === 0 || totalOffset.left === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar railWidth = parseFloat(volumeStyles.width),\n\t\t\t\t    newX = e.pageX - totalOffset.left;\n\n\t\t\t\tvolume = newX / railWidth;\n\t\t\t}\n\n\t\t\tvolume = Math.max(0, volume);\n\t\t\tvolume = Math.min(volume, 1);\n\n\t\t\tpositionVolumeHandle(volume);\n\n\t\t\tt.setMuted(volume === 0);\n\t\t\tt.setVolume(volume);\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t},\n\t\t    toggleMute = function toggleMute() {\n\t\t\tif (t.muted) {\n\t\t\t\tpositionVolumeHandle(0);\n\t\t\t\t(0, _dom.removeClass)(mute, t.options.classPrefix + 'mute');\n\t\t\t\t(0, _dom.addClass)(mute, t.options.classPrefix + 'unmute');\n\t\t\t} else {\n\n\t\t\t\tpositionVolumeHandle(media.volume);\n\t\t\t\t(0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute');\n\t\t\t\t(0, _dom.addClass)(mute, t.options.classPrefix + 'mute');\n\t\t\t}\n\t\t};\n\n\t\tplayer.getElement(player.container).addEventListener('keydown', function (e) {\n\t\t\tvar hasFocus = !!e.target.closest('.' + t.options.classPrefix + 'container');\n\t\t\tif (!hasFocus && mode === 'vertical') {\n\t\t\t\tvolumeSlider.style.display = 'none';\n\t\t\t}\n\t\t});\n\n\t\tmute.addEventListener('mouseenter', function (e) {\n\t\t\tif (e.target === mute) {\n\t\t\t\tvolumeSlider.style.display = 'block';\n\t\t\t\tmouseIsOver = true;\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t\tmute.addEventListener('focusin', function () {\n\t\t\tvolumeSlider.style.display = 'block';\n\t\t\tmouseIsOver = true;\n\t\t});\n\n\t\tmute.addEventListener('focusout', function (e) {\n\t\t\tif ((!e.relatedTarget || e.relatedTarget && !e.relatedTarget.matches('.' + t.options.classPrefix + 'volume-slider')) && mode === 'vertical') {\n\t\t\t\tvolumeSlider.style.display = 'none';\n\t\t\t}\n\t\t});\n\t\tmute.addEventListener('mouseleave', function () {\n\t\t\tmouseIsOver = false;\n\t\t\tif (!mouseIsDown && mode === 'vertical') {\n\t\t\t\tvolumeSlider.style.display = 'none';\n\t\t\t}\n\t\t});\n\t\tmute.addEventListener('focusout', function () {\n\t\t\tmouseIsOver = false;\n\t\t});\n\t\tmute.addEventListener('keydown', function (e) {\n\t\t\tif (t.options.enableKeyboard && t.options.keyActions.length) {\n\t\t\t\tvar keyCode = e.which || e.keyCode || 0,\n\t\t\t\t    volume = media.volume;\n\n\t\t\t\tswitch (keyCode) {\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tvolume = Math.min(volume + 0.1, 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 40:\n\t\t\t\t\t\tvolume = Math.max(0, volume - 0.1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmouseIsDown = false;\n\t\t\t\tpositionVolumeHandle(volume);\n\t\t\t\tmedia.setVolume(volume);\n\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t\tmute.querySelector('button').addEventListener('click', function () {\n\t\t\tmedia.setMuted(!media.muted);\n\t\t\tvar event = (0, _general.createEvent)('volumechange', media);\n\t\t\tmedia.dispatchEvent(event);\n\t\t});\n\n\t\tvolumeSlider.addEventListener('dragstart', function () {\n\t\t\treturn false;\n\t\t});\n\n\t\tvolumeSlider.addEventListener('mouseover', function () {\n\t\t\tmouseIsOver = true;\n\t\t});\n\t\tvolumeSlider.addEventListener('focusin', function () {\n\t\t\tvolumeSlider.style.display = 'block';\n\t\t\tmouseIsOver = true;\n\t\t});\n\t\tvolumeSlider.addEventListener('focusout', function () {\n\t\t\tmouseIsOver = false;\n\t\t\tif (!mouseIsDown && mode === 'vertical') {\n\t\t\t\tvolumeSlider.style.display = 'none';\n\t\t\t}\n\t\t});\n\t\tvolumeSlider.addEventListener('mousedown', function (e) {\n\t\t\thandleVolumeMove(e);\n\t\t\tt.globalBind('mousemove.vol', function (event) {\n\t\t\t\tvar target = event.target;\n\t\t\t\tif (mouseIsDown && (target === volumeSlider || target.closest(mode === 'vertical' ? '.' + t.options.classPrefix + 'volume-slider' : '.' + t.options.classPrefix + 'horizontal-volume-slider'))) {\n\t\t\t\t\thandleVolumeMove(event);\n\t\t\t\t}\n\t\t\t});\n\t\t\tt.globalBind('mouseup.vol', function () {\n\t\t\t\tmouseIsDown = false;\n\t\t\t\tif (!mouseIsOver && mode === 'vertical') {\n\t\t\t\t\tvolumeSlider.style.display = 'none';\n\t\t\t\t}\n\t\t\t});\n\t\t\tmouseIsDown = true;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tmedia.addEventListener('volumechange', function (e) {\n\t\t\tif (!mouseIsDown) {\n\t\t\t\ttoggleMute();\n\t\t\t}\n\t\t\tupdateVolumeSlider(e);\n\t\t});\n\n\t\tvar rendered = false;\n\t\tmedia.addEventListener('rendererready', function () {\n\t\t\tif (!modified) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\trendered = true;\n\t\t\t\t\tif (player.options.startVolume === 0 || media.originalNode.muted) {\n\t\t\t\t\t\tmedia.setMuted(true);\n\t\t\t\t\t}\n\t\t\t\t\tmedia.setVolume(player.options.startVolume);\n\t\t\t\t\tt.setControlsSize();\n\t\t\t\t}, 250);\n\t\t\t}\n\t\t});\n\n\t\tmedia.addEventListener('loadedmetadata', function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (!modified && !rendered) {\n\t\t\t\t\tif (player.options.startVolume === 0 || media.originalNode.muted) {\n\t\t\t\t\t\tmedia.setMuted(true);\n\t\t\t\t\t}\n\t\t\t\t\tif (player.options.startVolume === 0) {\n\t\t\t\t\t\tplayer.options.startVolume = 0;\n\t\t\t\t\t}\n\t\t\t\t\tmedia.setVolume(player.options.startVolume);\n\t\t\t\t\tt.setControlsSize();\n\t\t\t\t}\n\t\t\t\trendered = false;\n\t\t\t}, 250);\n\t\t});\n\n\t\tif (player.options.startVolume === 0 || media.originalNode.muted) {\n\t\t\tmedia.setMuted(true);\n\t\t\tif (player.options.startVolume === 0) {\n\t\t\t\tplayer.options.startVolume = 0;\n\t\t\t}\n\t\t\ttoggleMute();\n\t\t}\n\n\t\tt.getElement(t.container).addEventListener('controlsresize', function () {\n\t\t\ttoggleMute();\n\t\t});\n\t}\n});\n\n},{\"17\":17,\"2\":2,\"26\":26,\"27\":27,\"28\":28,\"29\":29,\"6\":6}],16:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar EN = exports.EN = {\n\t'mejs.plural-form': 1,\n\n\t'mejs.download-file': 'Download File',\n\n\t'mejs.install-flash': 'You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/',\n\n\t'mejs.fullscreen': 'Fullscreen',\n\n\t'mejs.play': 'Play',\n\t'mejs.pause': 'Pause',\n\n\t'mejs.time-slider': 'Time Slider',\n\t'mejs.time-help-text': 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.',\n\t'mejs.live-broadcast': 'Live Broadcast',\n\n\t'mejs.current': 'Current time',\n\t'mejs.duration': 'Total duration',\n\n\t'mejs.volume-help-text': 'Use Up/Down Arrow keys to increase or decrease volume.',\n\t'mejs.unmute': 'Unmute',\n\t'mejs.mute': 'Mute',\n\t'mejs.volume-slider': 'Volume Slider',\n\n\t'mejs.video-player': 'Video Player',\n\t'mejs.audio-player': 'Audio Player',\n\n\t'mejs.captions-subtitles': 'Captions/Subtitles',\n\t'mejs.captions-chapters': 'Chapters',\n\t'mejs.none': 'None',\n\t'mejs.afrikaans': 'Afrikaans',\n\t'mejs.albanian': 'Albanian',\n\t'mejs.arabic': 'Arabic',\n\t'mejs.belarusian': 'Belarusian',\n\t'mejs.bulgarian': 'Bulgarian',\n\t'mejs.catalan': 'Catalan',\n\t'mejs.chinese': 'Chinese',\n\t'mejs.chinese-simplified': 'Chinese (Simplified)',\n\t'mejs.chinese-traditional': 'Chinese (Traditional)',\n\t'mejs.croatian': 'Croatian',\n\t'mejs.czech': 'Czech',\n\t'mejs.danish': 'Danish',\n\t'mejs.dutch': 'Dutch',\n\t'mejs.english': 'English',\n\t'mejs.estonian': 'Estonian',\n\t'mejs.filipino': 'Filipino',\n\t'mejs.finnish': 'Finnish',\n\t'mejs.french': 'French',\n\t'mejs.galician': 'Galician',\n\t'mejs.german': 'German',\n\t'mejs.greek': 'Greek',\n\t'mejs.haitian-creole': 'Haitian Creole',\n\t'mejs.hebrew': 'Hebrew',\n\t'mejs.hindi': 'Hindi',\n\t'mejs.hungarian': 'Hungarian',\n\t'mejs.icelandic': 'Icelandic',\n\t'mejs.indonesian': 'Indonesian',\n\t'mejs.irish': 'Irish',\n\t'mejs.italian': 'Italian',\n\t'mejs.japanese': 'Japanese',\n\t'mejs.korean': 'Korean',\n\t'mejs.latvian': 'Latvian',\n\t'mejs.lithuanian': 'Lithuanian',\n\t'mejs.macedonian': 'Macedonian',\n\t'mejs.malay': 'Malay',\n\t'mejs.maltese': 'Maltese',\n\t'mejs.norwegian': 'Norwegian',\n\t'mejs.persian': 'Persian',\n\t'mejs.polish': 'Polish',\n\t'mejs.portuguese': 'Portuguese',\n\t'mejs.romanian': 'Romanian',\n\t'mejs.russian': 'Russian',\n\t'mejs.serbian': 'Serbian',\n\t'mejs.slovak': 'Slovak',\n\t'mejs.slovenian': 'Slovenian',\n\t'mejs.spanish': 'Spanish',\n\t'mejs.swahili': 'Swahili',\n\t'mejs.swedish': 'Swedish',\n\t'mejs.tagalog': 'Tagalog',\n\t'mejs.thai': 'Thai',\n\t'mejs.turkish': 'Turkish',\n\t'mejs.ukrainian': 'Ukrainian',\n\t'mejs.vietnamese': 'Vietnamese',\n\t'mejs.welsh': 'Welsh',\n\t'mejs.yiddish': 'Yiddish'\n};\n\n},{}],17:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.config = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _mediaelement = _dereq_(7);\n\nvar _mediaelement2 = _interopRequireDefault(_mediaelement);\n\nvar _default = _dereq_(18);\n\nvar _default2 = _interopRequireDefault(_default);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _constants = _dereq_(26);\n\nvar _general = _dereq_(28);\n\nvar _time = _dereq_(32);\n\nvar _media = _dereq_(30);\n\nvar _dom = _dereq_(27);\n\nvar dom = _interopRequireWildcard(_dom);\n\nvar _generate = _dereq_(29);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n_mejs2.default.mepIndex = 0;\n\n_mejs2.default.players = {};\n\nvar config = exports.config = {\n\tposter: '',\n\n\tshowPosterWhenEnded: false,\n\n\tshowPosterWhenPaused: false,\n\n\tdefaultVideoWidth: 480,\n\n\tdefaultVideoHeight: 270,\n\n\tvideoWidth: -1,\n\n\tvideoHeight: -1,\n\n\tdefaultAudioWidth: 400,\n\n\tdefaultAudioHeight: 40,\n\n\tdefaultSeekBackwardInterval: function defaultSeekBackwardInterval(media) {\n\t\treturn media.getDuration() * 0.05;\n\t},\n\n\tdefaultSeekForwardInterval: function defaultSeekForwardInterval(media) {\n\t\treturn media.getDuration() * 0.05;\n\t},\n\n\tsetDimensions: true,\n\n\taudioWidth: -1,\n\n\taudioHeight: -1,\n\n\tloop: false,\n\n\tautoRewind: true,\n\n\tenableAutosize: true,\n\n\ttimeFormat: '',\n\n\talwaysShowHours: false,\n\n\tshowTimecodeFrameCount: false,\n\n\tframesPerSecond: 25,\n\n\talwaysShowControls: false,\n\n\thideVideoControlsOnLoad: false,\n\n\thideVideoControlsOnPause: false,\n\n\tclickToPlayPause: true,\n\n\tcontrolsTimeoutDefault: 1500,\n\n\tcontrolsTimeoutMouseEnter: 2500,\n\n\tcontrolsTimeoutMouseLeave: 1000,\n\n\tiPadUseNativeControls: false,\n\n\tiPhoneUseNativeControls: false,\n\n\tAndroidUseNativeControls: false,\n\n\tfeatures: ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'],\n\n\tuseDefaultControls: false,\n\n\tisVideo: true,\n\n\tstretching: 'auto',\n\n\tclassPrefix: 'mejs__',\n\n\tenableKeyboard: true,\n\n\tpauseOtherPlayers: true,\n\n\tsecondsDecimalLength: 0,\n\n\tcustomError: null,\n\n\tkeyActions: [],\n\n\thideScreenReaderTitle: false\n};\n\n_mejs2.default.MepDefaults = config;\n\nvar MediaElementPlayer = function () {\n\tfunction MediaElementPlayer(node, o) {\n\t\t_classCallCheck(this, MediaElementPlayer);\n\n\t\tvar t = this,\n\t\t    element = typeof node === 'string' ? _document2.default.getElementById(node) : node;\n\n\t\tif (!(t instanceof MediaElementPlayer)) {\n\t\t\treturn new MediaElementPlayer(element, o);\n\t\t}\n\n\t\tt.node = t.media = element;\n\n\t\tif (!t.node) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (t.media.player) {\n\t\t\treturn t.media.player;\n\t\t}\n\n\t\tt.hasFocus = false;\n\n\t\tt.controlsAreVisible = true;\n\n\t\tt.controlsEnabled = true;\n\n\t\tt.controlsTimer = null;\n\n\t\tt.currentMediaTime = 0;\n\n\t\tt.proxy = null;\n\n\t\tif (o === undefined) {\n\t\t\tvar options = t.node.getAttribute('data-mejsoptions');\n\t\t\to = options ? JSON.parse(options) : {};\n\t\t}\n\n\t\tt.options = Object.assign({}, config, o);\n\n\t\tif (t.options.loop && !t.media.getAttribute('loop')) {\n\t\t\tt.media.loop = true;\n\t\t\tt.node.loop = true;\n\t\t} else if (t.media.loop) {\n\t\t\tt.options.loop = true;\n\t\t}\n\n\t\tif (!t.options.timeFormat) {\n\t\t\tt.options.timeFormat = 'mm:ss';\n\t\t\tif (t.options.alwaysShowHours) {\n\t\t\t\tt.options.timeFormat = 'hh:mm:ss';\n\t\t\t}\n\t\t\tif (t.options.showTimecodeFrameCount) {\n\t\t\t\tt.options.timeFormat += ':ff';\n\t\t\t}\n\t\t}\n\n\t\t(0, _time.calculateTimeFormat)(0, t.options, t.options.framesPerSecond || 25);\n\n\t\tt.id = 'mep_' + _mejs2.default.mepIndex++;\n\n\t\t_mejs2.default.players[t.id] = t;\n\n\t\tt.init();\n\n\t\treturn t;\n\t}\n\n\t_createClass(MediaElementPlayer, [{\n\t\tkey: 'getElement',\n\t\tvalue: function getElement(element) {\n\t\t\treturn element;\n\t\t}\n\t}, {\n\t\tkey: 'init',\n\t\tvalue: function init() {\n\t\t\tvar t = this,\n\t\t\t    playerOptions = Object.assign({}, t.options, {\n\t\t\t\tsuccess: function success(media, domNode) {\n\t\t\t\t\tt._meReady(media, domNode);\n\t\t\t\t},\n\t\t\t\terror: function error(e) {\n\t\t\t\t\tt._handleError(e);\n\t\t\t\t}\n\t\t\t}),\n\t\t\t    tagName = t.node.tagName.toLowerCase();\n\n\t\t\tt.isDynamic = tagName !== 'audio' && tagName !== 'video' && tagName !== 'iframe';\n\t\t\tt.isVideo = t.isDynamic ? t.options.isVideo : tagName !== 'audio' && t.options.isVideo;\n\t\t\tt.mediaFiles = null;\n\t\t\tt.trackFiles = null;\n\n\t\t\tif (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls) {\n\t\t\t\tt.node.setAttribute('controls', true);\n\n\t\t\t\tif (_constants.IS_IPAD && t.node.getAttribute('autoplay')) {\n\t\t\t\t\tt.play();\n\t\t\t\t}\n\t\t\t} else if ((t.isVideo || !t.isVideo && (t.options.features.length || t.options.useDefaultControls)) && !(_constants.IS_ANDROID && t.options.AndroidUseNativeControls)) {\n\t\t\t\tt.node.removeAttribute('controls');\n\t\t\t\tvar videoPlayerTitle = t.isVideo ? _i18n2.default.t('mejs.video-player') : _i18n2.default.t('mejs.audio-player');\n\n\t\t\t\tif (!t.options.hideScreenReaderTitle) {\n\t\t\t\t\tvar offscreen = _document2.default.createElement('span');\n\t\t\t\t\toffscreen.className = t.options.classPrefix + 'offscreen';\n\t\t\t\t\toffscreen.innerText = videoPlayerTitle;\n\t\t\t\t\tt.media.parentNode.insertBefore(offscreen, t.media);\n\t\t\t\t}\n\n\t\t\t\tt.container = _document2.default.createElement('div');\n\t\t\t\tt.getElement(t.container).id = t.id;\n\t\t\t\tt.getElement(t.container).className = t.options.classPrefix + 'container ' + t.options.classPrefix + 'container-keyboard-inactive ' + t.media.className;\n\t\t\t\tt.getElement(t.container).tabIndex = 0;\n\t\t\t\tt.getElement(t.container).setAttribute('role', 'application');\n\t\t\t\tt.getElement(t.container).setAttribute('aria-label', videoPlayerTitle);\n\t\t\t\tt.getElement(t.container).innerHTML = '<div class=\"' + t.options.classPrefix + 'inner\">' + ('<div class=\"' + t.options.classPrefix + 'mediaelement\"></div>') + ('<div class=\"' + t.options.classPrefix + 'layers\"></div>') + ('<div class=\"' + t.options.classPrefix + 'controls\"></div>') + '</div>';\n\n\t\t\t\tt.getElement(t.container).addEventListener('focus', function (e) {\n\t\t\t\t\tif (!t.controlsAreVisible && !t.hasFocus && t.controlsEnabled) {\n\t\t\t\t\t\tt.showControls(true);\n\n\t\t\t\t\t\tvar btnSelector = (0, _general.isNodeAfter)(e.relatedTarget, t.getElement(t.container)) ? '.' + t.options.classPrefix + 'controls .' + t.options.classPrefix + 'button:last-child > button' : '.' + t.options.classPrefix + 'playpause-button > button',\n\t\t\t\t\t\t    button = t.getElement(t.container).querySelector(btnSelector);\n\n\t\t\t\t\t\tbutton.focus();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tt.node.parentNode.insertBefore(t.getElement(t.container), t.node);\n\n\t\t\t\tif (!t.options.features.length && !t.options.useDefaultControls) {\n\t\t\t\t\tt.getElement(t.container).style.background = 'transparent';\n\t\t\t\t\tt.getElement(t.container).querySelector('.' + t.options.classPrefix + 'controls').style.display = 'none';\n\t\t\t\t}\n\n\t\t\t\tif (t.isVideo && t.options.stretching === 'fill' && !dom.hasClass(t.getElement(t.container).parentNode, t.options.classPrefix + 'fill-container')) {\n\t\t\t\t\tt.outerContainer = t.media.parentNode;\n\n\t\t\t\t\tvar wrapper = _document2.default.createElement('div');\n\t\t\t\t\twrapper.className = t.options.classPrefix + 'fill-container';\n\t\t\t\t\tt.getElement(t.container).parentNode.insertBefore(wrapper, t.getElement(t.container));\n\t\t\t\t\twrapper.appendChild(t.getElement(t.container));\n\t\t\t\t}\n\n\t\t\t\tif (_constants.IS_ANDROID) {\n\t\t\t\t\tdom.addClass(t.getElement(t.container), t.options.classPrefix + 'android');\n\t\t\t\t}\n\t\t\t\tif (_constants.IS_IOS) {\n\t\t\t\t\tdom.addClass(t.getElement(t.container), t.options.classPrefix + 'ios');\n\t\t\t\t}\n\t\t\t\tif (_constants.IS_IPAD) {\n\t\t\t\t\tdom.addClass(t.getElement(t.container), t.options.classPrefix + 'ipad');\n\t\t\t\t}\n\t\t\t\tif (_constants.IS_IPHONE) {\n\t\t\t\t\tdom.addClass(t.getElement(t.container), t.options.classPrefix + 'iphone');\n\t\t\t\t}\n\t\t\t\tdom.addClass(t.getElement(t.container), t.isVideo ? t.options.classPrefix + 'video' : t.options.classPrefix + 'audio');\n\n\t\t\t\tt.getElement(t.container).querySelector('.' + t.options.classPrefix + 'mediaelement').appendChild(t.node);\n\n\t\t\t\tt.media.player = t;\n\n\t\t\t\tt.controls = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'controls');\n\t\t\t\tt.layers = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'layers');\n\n\t\t\t\tvar tagType = t.isVideo ? 'video' : 'audio',\n\t\t\t\t    capsTagName = tagType.substring(0, 1).toUpperCase() + tagType.substring(1);\n\n\t\t\t\tif (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) {\n\t\t\t\t\tt.width = t.options[tagType + 'Width'];\n\t\t\t\t} else if (t.node.style.width !== '' && t.node.style.width !== null) {\n\t\t\t\t\tt.width = t.node.style.width;\n\t\t\t\t} else if (t.node.getAttribute('width')) {\n\t\t\t\t\tt.width = t.node.getAttribute('width');\n\t\t\t\t} else {\n\t\t\t\t\tt.width = t.options['default' + capsTagName + 'Width'];\n\t\t\t\t}\n\n\t\t\t\tif (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) {\n\t\t\t\t\tt.height = t.options[tagType + 'Height'];\n\t\t\t\t} else if (t.node.style.height !== '' && t.node.style.height !== null) {\n\t\t\t\t\tt.height = t.node.style.height;\n\t\t\t\t} else if (t.node.getAttribute('height')) {\n\t\t\t\t\tt.height = t.node.getAttribute('height');\n\t\t\t\t} else {\n\t\t\t\t\tt.height = t.options['default' + capsTagName + 'Height'];\n\t\t\t\t}\n\t\t\t\tt.initialAspectRatio = t.height >= t.width ? t.width / t.height : t.height / t.width;\n\n\t\t\t\tt.setPlayerSize(t.width, t.height);\n\t\t\t} else if (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) {\n\t\t\t\t\tt.node.style.display = 'none';\n\t\t\t\t}\n\n\t\t\tplayerOptions.pluginWidth = t.width;\n\t\t\tplayerOptions.pluginHeight = t.height;\n\n\t\t\t_mejs2.default.MepDefaults = playerOptions;\n\n\t\t\tnew _mediaelement2.default(t.media, playerOptions, t.mediaFiles);\n\n\t\t\tif (t.getElement(t.container) !== undefined && t.options.features.length && t.controlsAreVisible && !t.options.hideVideoControlsOnLoad) {\n\t\t\t\tvar event = (0, _general.createEvent)('controlsshown', t.getElement(t.container));\n\t\t\t\tt.getElement(t.container).dispatchEvent(event);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'showControls',\n\t\tvalue: function showControls(doAnimation) {\n\t\t\tvar t = this;\n\n\t\t\tdoAnimation = doAnimation === undefined || doAnimation;\n\n\t\t\tif (t.controlsAreVisible || !t.isVideo) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (doAnimation) {\n\t\t\t\t(function () {\n\t\t\t\t\tdom.fadeIn(t.getElement(t.controls), 200, function () {\n\t\t\t\t\t\tdom.removeClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');\n\t\t\t\t\t\tvar event = (0, _general.createEvent)('controlsshown', t.getElement(t.container));\n\t\t\t\t\t\tt.getElement(t.container).dispatchEvent(event);\n\t\t\t\t\t});\n\n\t\t\t\t\tvar controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');\n\n\t\t\t\t\tvar _loop = function _loop(i, total) {\n\t\t\t\t\t\tdom.fadeIn(controls[i], 200, function () {\n\t\t\t\t\t\t\tdom.removeClass(controls[i], t.options.classPrefix + 'offscreen');\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\tfor (var i = 0, total = controls.length; i < total; i++) {\n\t\t\t\t\t\t_loop(i, total);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t} else {\n\t\t\t\tdom.removeClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');\n\t\t\t\tt.getElement(t.controls).style.display = '';\n\t\t\t\tt.getElement(t.controls).style.opacity = 1;\n\n\t\t\t\tvar controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');\n\t\t\t\tfor (var i = 0, total = controls.length; i < total; i++) {\n\t\t\t\t\tdom.removeClass(controls[i], t.options.classPrefix + 'offscreen');\n\t\t\t\t\tcontrols[i].style.display = '';\n\t\t\t\t}\n\n\t\t\t\tvar event = (0, _general.createEvent)('controlsshown', t.getElement(t.container));\n\t\t\t\tt.getElement(t.container).dispatchEvent(event);\n\t\t\t}\n\n\t\t\tt.controlsAreVisible = true;\n\t\t\tt.setControlsSize();\n\t\t}\n\t}, {\n\t\tkey: 'hideControls',\n\t\tvalue: function hideControls(doAnimation, forceHide) {\n\t\t\tvar t = this;\n\n\t\t\tdoAnimation = doAnimation === undefined || doAnimation;\n\n\t\t\tif (forceHide !== true && (!t.controlsAreVisible || t.options.alwaysShowControls || t.paused && t.readyState === 4 && (!t.options.hideVideoControlsOnLoad && t.currentTime <= 0 || !t.options.hideVideoControlsOnPause && t.currentTime > 0) || t.isVideo && !t.options.hideVideoControlsOnLoad && !t.readyState || t.ended)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (doAnimation) {\n\t\t\t\t(function () {\n\t\t\t\t\tdom.fadeOut(t.getElement(t.controls), 200, function () {\n\t\t\t\t\t\tdom.addClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');\n\t\t\t\t\t\tt.getElement(t.controls).style.display = '';\n\t\t\t\t\t\tvar event = (0, _general.createEvent)('controlshidden', t.getElement(t.container));\n\t\t\t\t\t\tt.getElement(t.container).dispatchEvent(event);\n\t\t\t\t\t});\n\n\t\t\t\t\tvar controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');\n\n\t\t\t\t\tvar _loop2 = function _loop2(i, total) {\n\t\t\t\t\t\tdom.fadeOut(controls[i], 200, function () {\n\t\t\t\t\t\t\tdom.addClass(controls[i], t.options.classPrefix + 'offscreen');\n\t\t\t\t\t\t\tcontrols[i].style.display = '';\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\tfor (var i = 0, total = controls.length; i < total; i++) {\n\t\t\t\t\t\t_loop2(i, total);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t} else {\n\t\t\t\tdom.addClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');\n\t\t\t\tt.getElement(t.controls).style.display = '';\n\t\t\t\tt.getElement(t.controls).style.opacity = 0;\n\n\t\t\t\tvar controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');\n\t\t\t\tfor (var i = 0, total = controls.length; i < total; i++) {\n\t\t\t\t\tdom.addClass(controls[i], t.options.classPrefix + 'offscreen');\n\t\t\t\t\tcontrols[i].style.display = '';\n\t\t\t\t}\n\n\t\t\t\tvar event = (0, _general.createEvent)('controlshidden', t.getElement(t.container));\n\t\t\t\tt.getElement(t.container).dispatchEvent(event);\n\t\t\t}\n\n\t\t\tt.controlsAreVisible = false;\n\t\t}\n\t}, {\n\t\tkey: 'startControlsTimer',\n\t\tvalue: function startControlsTimer(timeout) {\n\t\t\tvar t = this;\n\n\t\t\ttimeout = typeof timeout !== 'undefined' ? timeout : t.options.controlsTimeoutDefault;\n\n\t\t\tt.killControlsTimer('start');\n\n\t\t\tt.controlsTimer = setTimeout(function () {\n\t\t\t\tt.hideControls();\n\t\t\t\tt.killControlsTimer('hide');\n\t\t\t}, timeout);\n\t\t}\n\t}, {\n\t\tkey: 'killControlsTimer',\n\t\tvalue: function killControlsTimer() {\n\t\t\tvar t = this;\n\n\t\t\tif (t.controlsTimer !== null) {\n\t\t\t\tclearTimeout(t.controlsTimer);\n\t\t\t\tdelete t.controlsTimer;\n\t\t\t\tt.controlsTimer = null;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'disableControls',\n\t\tvalue: function disableControls() {\n\t\t\tvar t = this;\n\n\t\t\tt.killControlsTimer();\n\t\t\tt.controlsEnabled = false;\n\t\t\tt.hideControls(false, true);\n\t\t}\n\t}, {\n\t\tkey: 'enableControls',\n\t\tvalue: function enableControls() {\n\t\t\tvar t = this;\n\n\t\t\tt.controlsEnabled = true;\n\t\t\tt.showControls(false);\n\t\t}\n\t}, {\n\t\tkey: '_setDefaultPlayer',\n\t\tvalue: function _setDefaultPlayer() {\n\t\t\tvar t = this;\n\t\t\tif (t.proxy) {\n\t\t\t\tt.proxy.pause();\n\t\t\t}\n\t\t\tt.proxy = new _default2.default(t);\n\t\t\tt.media.addEventListener('loadedmetadata', function () {\n\t\t\t\tif (t.getCurrentTime() > 0 && t.currentMediaTime > 0) {\n\t\t\t\t\tt.setCurrentTime(t.currentMediaTime);\n\t\t\t\t\tif (!_constants.IS_IOS && !_constants.IS_ANDROID) {\n\t\t\t\t\t\tt.play();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: '_meReady',\n\t\tvalue: function _meReady(media, domNode) {\n\t\t\tvar t = this,\n\t\t\t    autoplayAttr = domNode.getAttribute('autoplay'),\n\t\t\t    autoplay = !(autoplayAttr === undefined || autoplayAttr === null || autoplayAttr === 'false'),\n\t\t\t    isNative = media.rendererName !== null && /(native|html5)/i.test(media.rendererName);\n\n\t\t\tif (t.getElement(t.controls)) {\n\t\t\t\tt.enableControls();\n\t\t\t}\n\n\t\t\tif (t.getElement(t.container) && t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-play')) {\n\t\t\t\tt.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-play').style.display = '';\n\t\t\t}\n\n\t\t\tif (t.created) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tt.created = true;\n\t\t\tt.media = media;\n\t\t\tt.domNode = domNode;\n\n\t\t\tif (!(_constants.IS_ANDROID && t.options.AndroidUseNativeControls) && !(_constants.IS_IPAD && t.options.iPadUseNativeControls) && !(_constants.IS_IPHONE && t.options.iPhoneUseNativeControls)) {\n\t\t\t\tif (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) {\n\t\t\t\t\tif (autoplay && isNative) {\n\t\t\t\t\t\tt.play();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (t.options.success) {\n\n\t\t\t\t\t\tif (typeof t.options.success === 'string') {\n\t\t\t\t\t\t\t_window2.default[t.options.success](t.media, t.domNode, t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.options.success(t.media, t.domNode, t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tt.featurePosition = {};\n\n\t\t\t\tt._setDefaultPlayer();\n\n\t\t\t\tt.buildposter(t, t.getElement(t.controls), t.getElement(t.layers), t.media);\n\t\t\t\tt.buildkeyboard(t, t.getElement(t.controls), t.getElement(t.layers), t.media);\n\t\t\t\tt.buildoverlays(t, t.getElement(t.controls), t.getElement(t.layers), t.media);\n\n\t\t\t\tif (t.options.useDefaultControls) {\n\t\t\t\t\tvar defaultControls = ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'];\n\t\t\t\t\tt.options.features = defaultControls.concat(t.options.features.filter(function (item) {\n\t\t\t\t\t\treturn defaultControls.indexOf(item) === -1;\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tt.buildfeatures(t, t.getElement(t.controls), t.getElement(t.layers), t.media);\n\n\t\t\t\tvar event = (0, _general.createEvent)('controlsready', t.getElement(t.container));\n\t\t\t\tt.getElement(t.container).dispatchEvent(event);\n\n\t\t\t\tt.setPlayerSize(t.width, t.height);\n\t\t\t\tt.setControlsSize();\n\n\t\t\t\tif (t.isVideo) {\n\t\t\t\t\tt.clickToPlayPauseCallback = function () {\n\t\t\t\t\t\tif (t.options.clickToPlayPause) {\n\t\t\t\t\t\t\tvar button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'),\n\t\t\t\t\t\t\t    pressed = button.getAttribute('aria-pressed');\n\n\t\t\t\t\t\t\tif (t.paused && pressed) {\n\t\t\t\t\t\t\t\tt.pause();\n\t\t\t\t\t\t\t} else if (t.paused) {\n\t\t\t\t\t\t\t\tt.play();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt.pause();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbutton.setAttribute('aria-pressed', !pressed);\n\t\t\t\t\t\t\tt.getElement(t.container).focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tt.createIframeLayer();\n\n\t\t\t\t\tt.media.addEventListener('click', t.clickToPlayPauseCallback);\n\n\t\t\t\t\tif ((_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls) {\n\t\t\t\t\t\tt.node.addEventListener('touchstart', function () {\n\t\t\t\t\t\t\tif (t.controlsAreVisible) {\n\t\t\t\t\t\t\t\tt.hideControls(false);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (t.controlsEnabled) {\n\t\t\t\t\t\t\t\t\tt.showControls(false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, _constants.SUPPORT_PASSIVE_EVENT ? { passive: true } : false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.getElement(t.container).addEventListener('mouseenter', function () {\n\t\t\t\t\t\t\tif (t.controlsEnabled) {\n\t\t\t\t\t\t\t\tif (!t.options.alwaysShowControls) {\n\t\t\t\t\t\t\t\t\tt.killControlsTimer('enter');\n\t\t\t\t\t\t\t\t\tt.showControls();\n\t\t\t\t\t\t\t\t\tt.startControlsTimer(t.options.controlsTimeoutMouseEnter);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tt.getElement(t.container).addEventListener('mousemove', function () {\n\t\t\t\t\t\t\tif (t.controlsEnabled) {\n\t\t\t\t\t\t\t\tif (!t.controlsAreVisible) {\n\t\t\t\t\t\t\t\t\tt.showControls();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!t.options.alwaysShowControls) {\n\t\t\t\t\t\t\t\t\tt.startControlsTimer(t.options.controlsTimeoutMouseEnter);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tt.getElement(t.container).addEventListener('mouseleave', function () {\n\t\t\t\t\t\t\tif (t.controlsEnabled) {\n\t\t\t\t\t\t\t\tif (!t.paused && !t.options.alwaysShowControls) {\n\t\t\t\t\t\t\t\t\tt.startControlsTimer(t.options.controlsTimeoutMouseLeave);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (t.options.hideVideoControlsOnLoad) {\n\t\t\t\t\t\tt.hideControls(false);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (t.options.enableAutosize) {\n\t\t\t\t\t\tt.media.addEventListener('loadedmetadata', function (e) {\n\t\t\t\t\t\t\tvar target = e !== undefined ? e.detail.target || e.target : t.media;\n\t\t\t\t\t\t\tif (t.options.videoHeight <= 0 && !t.domNode.getAttribute('height') && !t.domNode.style.height && target !== null && !isNaN(target.videoHeight)) {\n\t\t\t\t\t\t\t\tt.setPlayerSize(target.videoWidth, target.videoHeight);\n\t\t\t\t\t\t\t\tt.setControlsSize();\n\t\t\t\t\t\t\t\tt.media.setSize(target.videoWidth, target.videoHeight);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tt.media.addEventListener('play', function () {\n\t\t\t\t\tt.hasFocus = true;\n\n\t\t\t\t\tfor (var playerIndex in _mejs2.default.players) {\n\t\t\t\t\t\tif (_mejs2.default.players.hasOwnProperty(playerIndex)) {\n\t\t\t\t\t\t\tvar p = _mejs2.default.players[playerIndex];\n\n\t\t\t\t\t\t\tif (p.id !== t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended && p.options.ignorePauseOtherPlayersOption !== true) {\n\t\t\t\t\t\t\t\tp.pause();\n\t\t\t\t\t\t\t\tp.hasFocus = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!(_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls && t.isVideo) {\n\t\t\t\t\t\tt.hideControls();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tt.media.addEventListener('ended', function () {\n\t\t\t\t\tif (t.options.autoRewind) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tt.setCurrentTime(0);\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tvar loadingElement = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-loading');\n\t\t\t\t\t\t\t\tif (loadingElement && loadingElement.parentNode) {\n\t\t\t\t\t\t\t\t\tloadingElement.parentNode.style.display = 'none';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 20);\n\t\t\t\t\t\t} catch (exp) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof t.media.renderer.stop === 'function') {\n\t\t\t\t\t\tt.media.renderer.stop();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.pause();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (t.setProgressRail) {\n\t\t\t\t\t\tt.setProgressRail();\n\t\t\t\t\t}\n\t\t\t\t\tif (t.setCurrentRail) {\n\t\t\t\t\t\tt.setCurrentRail();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (t.options.loop) {\n\t\t\t\t\t\tt.play();\n\t\t\t\t\t} else if (!t.options.alwaysShowControls && t.controlsEnabled) {\n\t\t\t\t\t\tt.showControls();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tt.media.addEventListener('loadedmetadata', function () {\n\n\t\t\t\t\t(0, _time.calculateTimeFormat)(t.getDuration(), t.options, t.options.framesPerSecond || 25);\n\n\t\t\t\t\tif (t.updateDuration) {\n\t\t\t\t\t\tt.updateDuration();\n\t\t\t\t\t}\n\t\t\t\t\tif (t.updateCurrent) {\n\t\t\t\t\t\tt.updateCurrent();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!t.isFullScreen) {\n\t\t\t\t\t\tt.setPlayerSize(t.width, t.height);\n\t\t\t\t\t\tt.setControlsSize();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvar duration = null;\n\t\t\t\tt.media.addEventListener('timeupdate', function () {\n\t\t\t\t\tif (!isNaN(t.getDuration()) && duration !== t.getDuration()) {\n\t\t\t\t\t\tduration = t.getDuration();\n\t\t\t\t\t\t(0, _time.calculateTimeFormat)(duration, t.options, t.options.framesPerSecond || 25);\n\n\t\t\t\t\t\tif (t.updateDuration) {\n\t\t\t\t\t\t\tt.updateDuration();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (t.updateCurrent) {\n\t\t\t\t\t\t\tt.updateCurrent();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tt.setControlsSize();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (t.options.enableKeyboard) {\n\t\t\t\t\tt.getElement(t.container).addEventListener('keydown', function (e) {\n\t\t\t\t\t\tvar keyCode = e.keyCode || e.which || 0;\n\n\t\t\t\t\t\tif (e.target === t.container && keyCode === 13) {\n\t\t\t\t\t\t\tif (t.paused) {\n\t\t\t\t\t\t\t\tt.play();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tt.getElement(t.container).addEventListener('click', function (e) {\n\t\t\t\t\tdom.addClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive');\n\t\t\t\t});\n\n\t\t\t\tt.getElement(t.container).addEventListener('focusin', function (e) {\n\t\t\t\t\tdom.removeClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive');\n\t\t\t\t\tif (t.isVideo && !_constants.IS_ANDROID && !_constants.IS_IOS && t.controlsEnabled && !t.options.alwaysShowControls) {\n\t\t\t\t\t\tt.killControlsTimer('enter');\n\t\t\t\t\t\tt.showControls();\n\t\t\t\t\t\tt.startControlsTimer(t.options.controlsTimeoutMouseEnter);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tt.getElement(t.container).addEventListener('focusout', function (e) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tif (e.relatedTarget) {\n\t\t\t\t\t\t\tif (t.keyboardAction && !e.relatedTarget.closest('.' + t.options.classPrefix + 'container')) {\n\t\t\t\t\t\t\t\tt.keyboardAction = false;\n\t\t\t\t\t\t\t\tif (t.isVideo && !t.options.alwaysShowControls && !t.paused) {\n\t\t\t\t\t\t\t\t\tt.startControlsTimer(t.options.controlsTimeoutMouseLeave);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 0);\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tt.setPlayerSize(t.width, t.height);\n\t\t\t\t\tt.setControlsSize();\n\t\t\t\t}, 0);\n\n\t\t\t\tt.globalResizeCallback = function () {\n\t\t\t\t\tif (!(t.isFullScreen || _constants.HAS_TRUE_NATIVE_FULLSCREEN && _document2.default.webkitIsFullScreen)) {\n\t\t\t\t\t\tt.setPlayerSize(t.width, t.height);\n\t\t\t\t\t}\n\n\t\t\t\t\tt.setControlsSize();\n\t\t\t\t};\n\n\t\t\t\tt.globalBind('resize', t.globalResizeCallback);\n\t\t\t}\n\n\t\t\tif (autoplay && isNative) {\n\t\t\t\tt.play();\n\t\t\t}\n\n\t\t\tif (t.options.success) {\n\t\t\t\tif (typeof t.options.success === 'string') {\n\t\t\t\t\t_window2.default[t.options.success](t.media, t.domNode, t);\n\t\t\t\t} else {\n\t\t\t\t\tt.options.success(t.media, t.domNode, t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: '_handleError',\n\t\tvalue: function _handleError(e, media, node) {\n\t\t\tvar t = this,\n\t\t\t    play = t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-play');\n\n\t\t\tif (play) {\n\t\t\t\tplay.style.display = 'none';\n\t\t\t}\n\n\t\t\tif (t.options.error) {\n\t\t\t\tt.options.error(e, media, node);\n\t\t\t}\n\n\t\t\tif (t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay')) {\n\t\t\t\tt.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay').remove();\n\t\t\t}\n\n\t\t\tvar errorContainer = _document2.default.createElement('div');\n\t\t\terrorContainer.className = t.options.classPrefix + 'cannotplay';\n\t\t\terrorContainer.style.width = '100%';\n\t\t\terrorContainer.style.height = '100%';\n\n\t\t\tvar errorContent = typeof t.options.customError === 'function' ? t.options.customError(t.media, t.media.originalNode) : t.options.customError,\n\t\t\t    imgError = '';\n\n\t\t\tif (!errorContent) {\n\t\t\t\tvar poster = t.media.originalNode.getAttribute('poster');\n\t\t\t\tif (poster) {\n\t\t\t\t\timgError = '<img src=\"' + poster + '\" alt=\"' + _mejs2.default.i18n.t('mejs.download-file') + '\">';\n\t\t\t\t}\n\n\t\t\t\tif (e.message) {\n\t\t\t\t\terrorContent = '<p>' + e.message + '</p>';\n\t\t\t\t}\n\n\t\t\t\tif (e.urls) {\n\t\t\t\t\tfor (var i = 0, total = e.urls.length; i < total; i++) {\n\t\t\t\t\t\tvar url = e.urls[i];\n\t\t\t\t\t\terrorContent += '<a href=\"' + url.src + '\" data-type=\"' + url.type + '\"><span>' + _mejs2.default.i18n.t('mejs.download-file') + ': ' + url.src + '</span></a>';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (errorContent && t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error')) {\n\t\t\t\terrorContainer.innerHTML = errorContent;\n\t\t\t\tt.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error').innerHTML = '' + imgError + errorContainer.outerHTML;\n\t\t\t\tt.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error').parentNode.style.display = 'block';\n\t\t\t}\n\n\t\t\tif (t.controlsEnabled) {\n\t\t\t\tt.disableControls();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'setPlayerSize',\n\t\tvalue: function setPlayerSize(width, height) {\n\t\t\tvar t = this;\n\n\t\t\tif (!t.options.setDimensions) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (typeof width !== 'undefined') {\n\t\t\t\tt.width = width;\n\t\t\t}\n\n\t\t\tif (typeof height !== 'undefined') {\n\t\t\t\tt.height = height;\n\t\t\t}\n\n\t\t\tswitch (t.options.stretching) {\n\t\t\t\tcase 'fill':\n\t\t\t\t\tif (t.isVideo) {\n\t\t\t\t\t\tt.setFillMode();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.setDimensions(t.width, t.height);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'responsive':\n\t\t\t\t\tt.setResponsiveMode();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'none':\n\t\t\t\t\tt.setDimensions(t.width, t.height);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (t.hasFluidMode() === true) {\n\t\t\t\t\t\tt.setResponsiveMode();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.setDimensions(t.width, t.height);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'hasFluidMode',\n\t\tvalue: function hasFluidMode() {\n\t\t\tvar t = this;\n\n\t\t\treturn t.height.toString().indexOf('%') !== -1 || t.node && t.node.style.maxWidth && t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width || t.node && t.node.currentStyle && t.node.currentStyle.maxWidth === '100%';\n\t\t}\n\t}, {\n\t\tkey: 'setResponsiveMode',\n\t\tvalue: function setResponsiveMode() {\n\t\t\tvar t = this,\n\t\t\t    parent = function () {\n\t\t\t\tvar parentEl = void 0,\n\t\t\t\t    el = t.getElement(t.container);\n\n\t\t\t\twhile (el) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) {\n\t\t\t\t\t\t\treturn _window2.default.frameElement;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparentEl = el.parentElement;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tparentEl = el.parentElement;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (parentEl && dom.visible(parentEl)) {\n\t\t\t\t\t\treturn parentEl;\n\t\t\t\t\t}\n\t\t\t\t\tel = parentEl;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}(),\n\t\t\t    parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null),\n\t\t\t    nativeWidth = function () {\n\t\t\t\tif (t.isVideo) {\n\t\t\t\t\tif (t.node.videoWidth && t.node.videoWidth > 0) {\n\t\t\t\t\t\treturn t.node.videoWidth;\n\t\t\t\t\t} else if (t.node.getAttribute('width')) {\n\t\t\t\t\t\treturn t.node.getAttribute('width');\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn t.options.defaultVideoWidth;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn t.options.defaultAudioWidth;\n\t\t\t\t}\n\t\t\t}(),\n\t\t\t    nativeHeight = function () {\n\t\t\t\tif (t.isVideo) {\n\t\t\t\t\tif (t.node.videoHeight && t.node.videoHeight > 0) {\n\t\t\t\t\t\treturn t.node.videoHeight;\n\t\t\t\t\t} else if (t.node.getAttribute('height')) {\n\t\t\t\t\t\treturn t.node.getAttribute('height');\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn t.options.defaultVideoHeight;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn t.options.defaultAudioHeight;\n\t\t\t\t}\n\t\t\t}(),\n\t\t\t    aspectRatio = function () {\n\t\t\t\tif (!t.options.enableAutosize) {\n\t\t\t\t\treturn t.initialAspectRatio;\n\t\t\t\t}\n\t\t\t\tvar ratio = 1;\n\t\t\t\tif (!t.isVideo) {\n\t\t\t\t\treturn ratio;\n\t\t\t\t}\n\n\t\t\t\tif (t.node.videoWidth && t.node.videoWidth > 0 && t.node.videoHeight && t.node.videoHeight > 0) {\n\t\t\t\t\tratio = t.height >= t.width ? t.node.videoWidth / t.node.videoHeight : t.node.videoHeight / t.node.videoWidth;\n\t\t\t\t} else {\n\t\t\t\t\tratio = t.initialAspectRatio;\n\t\t\t\t}\n\n\t\t\t\tif (isNaN(ratio) || ratio < 0.01 || ratio > 100) {\n\t\t\t\t\tratio = 1;\n\t\t\t\t}\n\t\t\t\treturn ratio;\n\t\t\t}(),\n\t\t\t    parentHeight = parseFloat(parentStyles.height);\n\n\t\t\tvar newHeight = void 0,\n\t\t\t    parentWidth = parseFloat(parentStyles.width);\n\n\t\t\tif (t.isVideo) {\n\t\t\t\tif (t.height === '100%') {\n\t\t\t\t\tnewHeight = parseFloat(parentWidth * nativeHeight / nativeWidth, 10);\n\t\t\t\t} else {\n\t\t\t\t\tnewHeight = t.height >= t.width ? parseFloat(parentWidth / aspectRatio, 10) : parseFloat(parentWidth * aspectRatio, 10);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewHeight = nativeHeight;\n\t\t\t}\n\n\t\t\tif (newHeight <= t.container.querySelector('.' + t.options.classPrefix + 'inner').offsetHeight) {\n\t\t\t\tnewHeight = t.container.querySelector('.' + t.options.classPrefix + 'inner').offsetHeight;\n\t\t\t}\n\n\t\t\tif (isNaN(newHeight)) {\n\t\t\t\tnewHeight = parentHeight;\n\t\t\t}\n\n\t\t\tif (t.getElement(t.container).parentNode.length > 0 && t.getElement(t.container).parentNode.tagName.toLowerCase() === 'body') {\n\t\t\t\tparentWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth;\n\t\t\t\tnewHeight = _window2.default.innerHeight || _document2.default.documentElement.clientHeight || _document2.default.body.clientHeight;\n\t\t\t}\n\n\t\t\tif (newHeight && parentWidth) {\n\t\t\t\tt.getElement(t.container).style.width = parentWidth + 'px';\n\t\t\t\tt.getElement(t.container).style.height = newHeight + 'px';\n\n\t\t\t\tt.node.style.width = '100%';\n\t\t\t\tt.node.style.height = '100%';\n\n\t\t\t\tif (t.isVideo && t.media.setSize) {\n\t\t\t\t\tt.media.setSize(parentWidth, newHeight);\n\t\t\t\t}\n\n\t\t\t\tif (newHeight <= t.container.querySelector('.' + t.options.classPrefix + 'inner').offsetHeight) {\n\t\t\t\t\tt.node.style.width = 'auto';\n\t\t\t\t\tt.node.style.height = 'auto';\n\t\t\t\t}\n\n\t\t\t\tvar layerChildren = t.getElement(t.layers).children;\n\t\t\t\tfor (var i = 0, total = layerChildren.length; i < total; i++) {\n\t\t\t\t\tlayerChildren[i].style.width = '100%';\n\t\t\t\t\tlayerChildren[i].style.height = '100%';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'setFillMode',\n\t\tvalue: function setFillMode() {\n\t\t\tvar t = this;\n\t\t\tvar isIframe = _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null;\n\t\t\tvar parent = function () {\n\t\t\t\tvar parentEl = void 0,\n\t\t\t\t    el = t.getElement(t.container);\n\n\t\t\t\twhile (el) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) {\n\t\t\t\t\t\t\treturn _window2.default.frameElement;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparentEl = el.parentElement;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tparentEl = el.parentElement;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (parentEl && dom.visible(parentEl)) {\n\t\t\t\t\t\treturn parentEl;\n\t\t\t\t\t}\n\t\t\t\t\tel = parentEl;\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}();\n\t\t\tvar parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null);\n\n\t\t\tif (t.node.style.height !== 'none' && t.node.style.height !== t.height) {\n\t\t\t\tt.node.style.height = 'auto';\n\t\t\t}\n\t\t\tif (t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width) {\n\t\t\t\tt.node.style.maxWidth = 'none';\n\t\t\t}\n\n\t\t\tif (t.node.style.maxHeight !== 'none' && t.node.style.maxHeight !== t.height) {\n\t\t\t\tt.node.style.maxHeight = 'none';\n\t\t\t}\n\n\t\t\tif (t.node.currentStyle) {\n\t\t\t\tif (t.node.currentStyle.height === '100%') {\n\t\t\t\t\tt.node.currentStyle.height = 'auto';\n\t\t\t\t}\n\t\t\t\tif (t.node.currentStyle.maxWidth === '100%') {\n\t\t\t\t\tt.node.currentStyle.maxWidth = 'none';\n\t\t\t\t}\n\t\t\t\tif (t.node.currentStyle.maxHeight === '100%') {\n\t\t\t\t\tt.node.currentStyle.maxHeight = 'none';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isIframe && !parseFloat(parentStyles.width)) {\n\t\t\t\tparent.style.width = t.media.offsetWidth + 'px';\n\t\t\t}\n\n\t\t\tif (!isIframe && !parseFloat(parentStyles.height)) {\n\t\t\t\tparent.style.height = t.media.offsetHeight + 'px';\n\t\t\t}\n\n\t\t\tparentStyles = getComputedStyle(parent);\n\n\t\t\tvar parentWidth = parseFloat(parentStyles.width),\n\t\t\t    parentHeight = parseFloat(parentStyles.height);\n\t\t\tt.setDimensions('100%', '100%');\n\n\t\t\tvar poster = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster>img');\n\t\t\tif (poster) {\n\t\t\t\tposter.style.display = '';\n\t\t\t}\n\n\t\t\tvar targetElement = t.getElement(t.container).querySelectorAll('object, embed, iframe, video'),\n\t\t\t    initHeight = t.height,\n\t\t\t    initWidth = t.width,\n\t\t\t    scaleX1 = parentWidth,\n\t\t\t    scaleY1 = initHeight * parentWidth / initWidth,\n\t\t\t    scaleX2 = initWidth * parentHeight / initHeight,\n\t\t\t    scaleY2 = parentHeight,\n\t\t\t    bScaleOnWidth = scaleX2 > parentWidth === false,\n\t\t\t    finalWidth = bScaleOnWidth ? Math.floor(scaleX1) : Math.floor(scaleX2),\n\t\t\t    finalHeight = bScaleOnWidth ? Math.floor(scaleY1) : Math.floor(scaleY2),\n\t\t\t    width = bScaleOnWidth ? parentWidth + 'px' : finalWidth + 'px',\n\t\t\t    height = bScaleOnWidth ? finalHeight + 'px' : parentHeight + 'px';\n\n\t\t\tfor (var i = 0, total = targetElement.length; i < total; i++) {\n\t\t\t\ttargetElement[i].style.height = height;\n\t\t\t\ttargetElement[i].style.width = width;\n\t\t\t\tif (t.media.setSize) {\n\t\t\t\t\tt.media.setSize(width, height);\n\t\t\t\t}\n\n\t\t\t\ttargetElement[i].style.marginLeft = Math.floor((parentWidth - finalWidth) / 2) + 'px';\n\t\t\t\ttargetElement[i].style.marginTop = 0;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'setDimensions',\n\t\tvalue: function setDimensions(width, height) {\n\t\t\tvar t = this;\n\n\t\t\twidth = (0, _general.isString)(width) && width.indexOf('%') > -1 ? width : parseFloat(width) + 'px';\n\t\t\theight = (0, _general.isString)(height) && height.indexOf('%') > -1 ? height : parseFloat(height) + 'px';\n\n\t\t\tt.getElement(t.container).style.width = width;\n\t\t\tt.getElement(t.container).style.height = height;\n\n\t\t\tvar layers = t.getElement(t.layers).children;\n\t\t\tfor (var i = 0, total = layers.length; i < total; i++) {\n\t\t\t\tlayers[i].style.width = width;\n\t\t\t\tlayers[i].style.height = height;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'setControlsSize',\n\t\tvalue: function setControlsSize() {\n\t\t\tvar t = this;\n\n\t\t\tif (!dom.visible(t.getElement(t.container))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!(t.rail && dom.visible(t.rail))) {\n\t\t\t\tvar children = t.getElement(t.controls).children;\n\t\t\t\tvar minWidth = 0;\n\n\t\t\t\tfor (var i = 0, total = children.length; i < total; i++) {\n\t\t\t\t\tminWidth += children[i].offsetWidth;\n\t\t\t\t}\n\n\t\t\t\tt.getElement(t.container).style.minWidth = minWidth + 'px';\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'addControlElement',\n\t\tvalue: function addControlElement(element, key) {\n\t\t\tvar t = this;\n\n\t\t\tif (t.featurePosition[key] !== undefined) {\n\t\t\t\tvar child = t.getElement(t.controls).children[t.featurePosition[key] - 1];\n\t\t\t\tchild.parentNode.insertBefore(element, child.nextSibling);\n\t\t\t} else {\n\t\t\t\tt.getElement(t.controls).appendChild(element);\n\t\t\t\tvar children = t.getElement(t.controls).children;\n\t\t\t\tfor (var i = 0, total = children.length; i < total; i++) {\n\t\t\t\t\tif (element === children[i]) {\n\t\t\t\t\t\tt.featurePosition[key] = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'createIframeLayer',\n\t\tvalue: function createIframeLayer() {\n\t\t\tvar t = this;\n\n\t\t\tif (t.isVideo && t.media.rendererName !== null && t.media.rendererName.indexOf('iframe') > -1 && !_document2.default.getElementById(t.media.id + '-iframe-overlay')) {\n\n\t\t\t\tvar layer = _document2.default.createElement('div'),\n\t\t\t\t    target = _document2.default.getElementById(t.media.id + '_' + t.media.rendererName);\n\n\t\t\t\tlayer.id = t.media.id + '-iframe-overlay';\n\t\t\t\tlayer.className = t.options.classPrefix + 'iframe-overlay';\n\t\t\t\tlayer.addEventListener('click', function (e) {\n\t\t\t\t\tif (t.options.clickToPlayPause) {\n\t\t\t\t\t\tif (t.paused) {\n\t\t\t\t\t\t\tt.play();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.pause();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\ttarget.parentNode.insertBefore(layer, target);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'resetSize',\n\t\tvalue: function resetSize() {\n\t\t\tvar t = this;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tt.setPlayerSize(t.width, t.height);\n\t\t\t\tt.setControlsSize();\n\t\t\t}, 50);\n\t\t}\n\t}, {\n\t\tkey: 'setPoster',\n\t\tvalue: function setPoster(url) {\n\t\t\tvar t = this;\n\n\t\t\tif (t.getElement(t.container)) {\n\t\t\t\tvar posterDiv = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster');\n\n\t\t\t\tif (!posterDiv) {\n\t\t\t\t\tposterDiv = _document2.default.createElement('div');\n\t\t\t\t\tposterDiv.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';\n\t\t\t\t\tt.getElement(t.layers).appendChild(posterDiv);\n\t\t\t\t}\n\n\t\t\t\tvar posterImg = posterDiv.querySelector('img');\n\n\t\t\t\tif (!posterImg && url) {\n\t\t\t\t\tposterImg = _document2.default.createElement('img');\n\t\t\t\t\tposterImg.alt = '';\n\t\t\t\t\tposterImg.className = t.options.classPrefix + 'poster-img';\n\t\t\t\t\tposterImg.width = '100%';\n\t\t\t\t\tposterImg.height = '100%';\n\t\t\t\t\tposterDiv.style.display = '';\n\t\t\t\t\tposterDiv.appendChild(posterImg);\n\t\t\t\t}\n\n\t\t\t\tif (url) {\n\t\t\t\t\tposterImg.setAttribute('src', url);\n\t\t\t\t\tposterDiv.style.backgroundImage = 'url(\"' + url + '\")';\n\t\t\t\t\tposterDiv.style.display = '';\n\t\t\t\t} else if (posterImg) {\n\t\t\t\t\tposterDiv.style.backgroundImage = 'none';\n\t\t\t\t\tposterDiv.style.display = 'none';\n\t\t\t\t\tposterImg.remove();\n\t\t\t\t} else {\n\t\t\t\t\tposterDiv.style.display = 'none';\n\t\t\t\t}\n\t\t\t} else if (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls || _constants.IS_ANDROID && t.options.AndroidUseNativeControls) {\n\t\t\t\tt.media.originalNode.poster = url;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'changeSkin',\n\t\tvalue: function changeSkin(className) {\n\t\t\tvar t = this;\n\n\t\t\tt.getElement(t.container).className = t.options.classPrefix + 'container ' + className;\n\t\t\tt.setPlayerSize(t.width, t.height);\n\t\t\tt.setControlsSize();\n\t\t}\n\t}, {\n\t\tkey: 'globalBind',\n\t\tvalue: function globalBind(events, callback) {\n\t\t\tvar t = this,\n\t\t\t    doc = t.node ? t.node.ownerDocument : _document2.default;\n\n\t\t\tevents = (0, _general.splitEvents)(events, t.id);\n\t\t\tif (events.d) {\n\t\t\t\tvar eventList = events.d.split(' ');\n\t\t\t\tfor (var i = 0, total = eventList.length; i < total; i++) {\n\t\t\t\t\teventList[i].split('.').reduce(function (part, e) {\n\t\t\t\t\t\tdoc.addEventListener(e, callback, false);\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t}, '');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (events.w) {\n\t\t\t\tvar _eventList = events.w.split(' ');\n\t\t\t\tfor (var _i = 0, _total = _eventList.length; _i < _total; _i++) {\n\t\t\t\t\t_eventList[_i].split('.').reduce(function (part, e) {\n\t\t\t\t\t\t_window2.default.addEventListener(e, callback, false);\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t}, '');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'globalUnbind',\n\t\tvalue: function globalUnbind(events, callback) {\n\t\t\tvar t = this,\n\t\t\t    doc = t.node ? t.node.ownerDocument : _document2.default;\n\n\t\t\tevents = (0, _general.splitEvents)(events, t.id);\n\t\t\tif (events.d) {\n\t\t\t\tvar eventList = events.d.split(' ');\n\t\t\t\tfor (var i = 0, total = eventList.length; i < total; i++) {\n\t\t\t\t\teventList[i].split('.').reduce(function (part, e) {\n\t\t\t\t\t\tdoc.removeEventListener(e, callback, false);\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t}, '');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (events.w) {\n\t\t\t\tvar _eventList2 = events.w.split(' ');\n\t\t\t\tfor (var _i2 = 0, _total2 = _eventList2.length; _i2 < _total2; _i2++) {\n\t\t\t\t\t_eventList2[_i2].split('.').reduce(function (part, e) {\n\t\t\t\t\t\t_window2.default.removeEventListener(e, callback, false);\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t}, '');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'buildfeatures',\n\t\tvalue: function buildfeatures(player, controls, layers, media) {\n\t\t\tvar t = this;\n\n\t\t\tfor (var i = 0, total = t.options.features.length; i < total; i++) {\n\t\t\t\tvar feature = t.options.features[i];\n\t\t\t\tif (t['build' + feature]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tt['build' + feature](player, controls, layers, media);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error('error building ' + feature, e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'buildposter',\n\t\tvalue: function buildposter(player, controls, layers, media) {\n\t\t\tvar t = this,\n\t\t\t    poster = _document2.default.createElement('div');\n\n\t\t\tposter.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';\n\t\t\tlayers.appendChild(poster);\n\n\t\t\tvar posterUrl = media.originalNode.getAttribute('poster');\n\n\t\t\tif (player.options.poster !== '') {\n\t\t\t\tif (posterUrl && _constants.IS_IOS) {\n\t\t\t\t\tmedia.originalNode.removeAttribute('poster');\n\t\t\t\t}\n\t\t\t\tposterUrl = player.options.poster;\n\t\t\t}\n\n\t\t\tif (posterUrl) {\n\t\t\t\tt.setPoster(posterUrl);\n\t\t\t} else if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') {\n\t\t\t\tt.setPoster(t.media.renderer.getPosterUrl());\n\t\t\t} else {\n\t\t\t\tposter.style.display = 'none';\n\t\t\t}\n\n\t\t\tmedia.addEventListener('play', function () {\n\t\t\t\tposter.style.display = 'none';\n\t\t\t});\n\n\t\t\tmedia.addEventListener('playing', function () {\n\t\t\t\tposter.style.display = 'none';\n\t\t\t});\n\n\t\t\tif (player.options.showPosterWhenEnded && player.options.autoRewind) {\n\t\t\t\tmedia.addEventListener('ended', function () {\n\t\t\t\t\tposter.style.display = '';\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tmedia.addEventListener('error', function () {\n\t\t\t\tposter.style.display = 'none';\n\t\t\t});\n\n\t\t\tif (player.options.showPosterWhenPaused) {\n\t\t\t\tmedia.addEventListener('pause', function () {\n\t\t\t\t\tif (!player.ended) {\n\t\t\t\t\t\tposter.style.display = '';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'buildoverlays',\n\t\tvalue: function buildoverlays(player, controls, layers, media) {\n\t\t\tif (!player.isVideo) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar t = this,\n\t\t\t    loading = _document2.default.createElement('div'),\n\t\t\t    error = _document2.default.createElement('div'),\n\t\t\t    bigPlay = _document2.default.createElement('div');\n\n\t\t\tloading.style.display = 'none';\n\t\t\tloading.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer';\n\t\t\tloading.innerHTML = '<div class=\"' + t.options.classPrefix + 'overlay-loading\">' + ('<div class=\"' + t.options.classPrefix + 'overlay-loading-bg-img\">\\n\\t\\t\\t\\t\\t<svg xmlns=\"http://www.w3.org/2000/svg\">\\n\\t\\t\\t\\t\\t\\t<use xlink:href=\"' + t.media.options.iconSprite + '#icon-loading-spinner\"></use>\\n\\t\\t\\t\\t\\t</svg>\\n\\t\\t\\t\\t</div>') + '</div>';\n\t\t\tlayers.appendChild(loading);\n\n\t\t\terror.style.display = 'none';\n\t\t\terror.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer';\n\t\t\terror.innerHTML = '<div class=\"' + t.options.classPrefix + 'overlay-error\"></div>';\n\t\t\tlayers.appendChild(error);\n\n\t\t\tbigPlay.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer ' + t.options.classPrefix + 'overlay-play';\n\t\t\tbigPlay.innerHTML = (0, _generate.generateControlButton)(t.id, _i18n2.default.t('mejs.play'), _i18n2.default.t('mejs.play'), '' + t.media.options.iconSprite, ['icon-overlay-play'], '' + t.options.classPrefix, t.options.classPrefix + 'overlay-button', '', false);\n\n\t\t\tbigPlay.addEventListener('click', function () {\n\t\t\t\tif (t.options.clickToPlayPause) {\n\n\t\t\t\t\tvar button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'),\n\t\t\t\t\t    pressed = button.getAttribute('aria-pressed');\n\n\t\t\t\t\tif (t.paused) {\n\t\t\t\t\t\tt.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.pause();\n\t\t\t\t\t}\n\n\t\t\t\t\tbutton.setAttribute('aria-pressed', !!pressed);\n\t\t\t\t\tt.getElement(t.container).focus();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlayers.appendChild(bigPlay);\n\n\t\t\tif (t.media.rendererName !== null && (/(youtube|facebook)/i.test(t.media.rendererName) && !(t.media.originalNode.getAttribute('poster') || player.options.poster || typeof t.media.renderer.getPosterUrl === 'function' && t.media.renderer.getPosterUrl()) || _constants.IS_STOCK_ANDROID || t.media.originalNode.getAttribute('autoplay'))) {\n\t\t\t\tbigPlay.style.display = 'none';\n\t\t\t}\n\n\t\t\tvar hasError = false;\n\n\t\t\tmedia.addEventListener('play', function () {\n\t\t\t\tbigPlay.style.display = 'none';\n\t\t\t\tloading.style.display = 'none';\n\t\t\t\terror.style.display = 'none';\n\t\t\t\thasError = false;\n\t\t\t});\n\t\t\tmedia.addEventListener('playing', function () {\n\t\t\t\tbigPlay.style.display = 'none';\n\t\t\t\tloading.style.display = 'none';\n\t\t\t\terror.style.display = 'none';\n\t\t\t\thasError = false;\n\t\t\t});\n\t\t\tmedia.addEventListener('seeking', function () {\n\t\t\t\tbigPlay.style.display = 'none';\n\t\t\t\tloading.style.display = '';\n\t\t\t\thasError = false;\n\t\t\t});\n\t\t\tmedia.addEventListener('seeked', function () {\n\t\t\t\tbigPlay.style.display = t.paused && !_constants.IS_STOCK_ANDROID ? '' : 'none';\n\t\t\t\tloading.style.display = 'none';\n\t\t\t\thasError = false;\n\t\t\t});\n\t\t\tmedia.addEventListener('pause', function () {\n\t\t\t\tloading.style.display = 'none';\n\t\t\t\tif (!_constants.IS_STOCK_ANDROID && !hasError) {\n\t\t\t\t\tbigPlay.style.display = '';\n\t\t\t\t}\n\t\t\t\thasError = false;\n\t\t\t});\n\t\t\tmedia.addEventListener('waiting', function () {\n\t\t\t\tloading.style.display = '';\n\t\t\t\thasError = false;\n\t\t\t});\n\n\t\t\tmedia.addEventListener('loadeddata', function () {\n\t\t\t\tloading.style.display = '';\n\n\t\t\t\tif (_constants.IS_ANDROID) {\n\t\t\t\t\tmedia.canplayTimeout = setTimeout(function () {\n\t\t\t\t\t\tif (_document2.default.createEvent) {\n\t\t\t\t\t\t\tvar evt = _document2.default.createEvent('HTMLEvents');\n\t\t\t\t\t\t\tevt.initEvent('canplay', true, true);\n\t\t\t\t\t\t\treturn media.dispatchEvent(evt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\t\t\t\thasError = false;\n\t\t\t});\n\t\t\tmedia.addEventListener('canplay', function () {\n\t\t\t\tloading.style.display = 'none';\n\n\t\t\t\tclearTimeout(media.canplayTimeout);\n\t\t\t\thasError = false;\n\t\t\t});\n\n\t\t\tmedia.addEventListener('error', function (e) {\n\t\t\t\tt._handleError(e, t.media, t.node);\n\t\t\t\tloading.style.display = 'none';\n\t\t\t\tbigPlay.style.display = 'none';\n\t\t\t\thasError = true;\n\t\t\t});\n\n\t\t\tmedia.addEventListener('loadedmetadata', function () {\n\t\t\t\tif (!t.controlsEnabled) {\n\t\t\t\t\tt.enableControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmedia.addEventListener('keydown', function (e) {\n\t\t\t\tt.onkeydown(player, media, e);\n\t\t\t\thasError = false;\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'buildkeyboard',\n\t\tvalue: function buildkeyboard(player, controls, layers, media) {\n\t\t\tvar t = this;\n\n\t\t\tt.getElement(t.container).addEventListener('keydown', function () {\n\t\t\t\tt.keyboardAction = true;\n\t\t\t});\n\n\t\t\tt.globalKeydownCallback = function (event) {\n\t\t\t\tif (!_document2.default.activeElement) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar container = _document2.default.activeElement.closest('.' + t.options.classPrefix + 'container'),\n\t\t\t\t    target = t.media.closest('.' + t.options.classPrefix + 'container');\n\t\t\t\tt.hasFocus = !!(container && target && container.id === target.id);\n\t\t\t\treturn t.onkeydown(player, media, event);\n\t\t\t};\n\n\t\t\tt.globalClickCallback = function (event) {\n\t\t\t\tt.hasFocus = !!event.target.closest('.' + t.options.classPrefix + 'container');\n\t\t\t};\n\n\t\t\tt.globalBind('keydown', t.globalKeydownCallback);\n\n\t\t\tt.globalBind('click', t.globalClickCallback);\n\t\t}\n\t}, {\n\t\tkey: 'onkeydown',\n\t\tvalue: function onkeydown(player, media, e) {\n\t\t\tif (player.hasFocus && player.options.enableKeyboard) {\n\t\t\t\tfor (var i = 0, total = player.options.keyActions.length; i < total; i++) {\n\t\t\t\t\tvar keyAction = player.options.keyActions[i];\n\n\t\t\t\t\tfor (var j = 0, jl = keyAction.keys.length; j < jl; j++) {\n\t\t\t\t\t\tif (e.keyCode === keyAction.keys[j]) {\n\t\t\t\t\t\t\tkeyAction.action(player, media, e.keyCode, e);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'play',\n\t\tvalue: function play() {\n\t\t\treturn this.proxy.play();\n\t\t}\n\t}, {\n\t\tkey: 'pause',\n\t\tvalue: function pause() {\n\t\t\treturn this.proxy.pause();\n\t\t}\n\t}, {\n\t\tkey: 'load',\n\t\tvalue: function load() {\n\t\t\treturn this.proxy.load();\n\t\t}\n\t}, {\n\t\tkey: 'setCurrentTime',\n\t\tvalue: function setCurrentTime(time) {\n\t\t\tvar userInteraction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\tthis.seekUserInteraction = userInteraction;\n\t\t\tthis.proxy.setCurrentTime(time);\n\t\t}\n\t}, {\n\t\tkey: 'getCurrentTime',\n\t\tvalue: function getCurrentTime() {\n\t\t\treturn this.proxy.currentTime;\n\t\t}\n\t}, {\n\t\tkey: 'getDuration',\n\t\tvalue: function getDuration() {\n\t\t\treturn this.proxy.duration;\n\t\t}\n\t}, {\n\t\tkey: 'setVolume',\n\t\tvalue: function setVolume(volume) {\n\t\t\tthis.proxy.volume = volume;\n\t\t}\n\t}, {\n\t\tkey: 'getVolume',\n\t\tvalue: function getVolume() {\n\t\t\treturn this.proxy.getVolume();\n\t\t}\n\t}, {\n\t\tkey: 'setMuted',\n\t\tvalue: function setMuted(value) {\n\t\t\tthis.proxy.setMuted(value);\n\t\t}\n\t}, {\n\t\tkey: 'setSrc',\n\t\tvalue: function setSrc(src) {\n\t\t\tif (!this.controlsEnabled) {\n\t\t\t\tthis.enableControls();\n\t\t\t}\n\t\t\tthis.proxy.setSrc(src);\n\t\t}\n\t}, {\n\t\tkey: 'getSrc',\n\t\tvalue: function getSrc() {\n\t\t\treturn this.proxy.getSrc();\n\t\t}\n\t}, {\n\t\tkey: 'canPlayType',\n\t\tvalue: function canPlayType(type) {\n\t\t\treturn this.proxy.canPlayType(type);\n\t\t}\n\t}, {\n\t\tkey: 'remove',\n\t\tvalue: function remove() {\n\t\t\tvar t = this,\n\t\t\t    rendererName = t.media.rendererName,\n\t\t\t    src = t.media.originalNode.src;\n\n\t\t\tfor (var featureIndex in t.options.features) {\n\t\t\t\tvar feature = t.options.features[featureIndex];\n\t\t\t\tif (t['clean' + feature]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tt['clean' + feature](t, t.getElement(t.layers), t.getElement(t.controls), t.media);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error('error cleaning ' + feature, e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar nativeWidth = t.node.getAttribute('width'),\n\t\t\t    nativeHeight = t.node.getAttribute('height');\n\n\t\t\tif (nativeWidth) {\n\t\t\t\tif (nativeWidth.indexOf('%') === -1) {\n\t\t\t\t\tnativeWidth = nativeWidth + 'px';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnativeWidth = 'auto';\n\t\t\t}\n\n\t\t\tif (nativeHeight) {\n\t\t\t\tif (nativeHeight.indexOf('%') === -1) {\n\t\t\t\t\tnativeHeight = nativeHeight + 'px';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnativeHeight = 'auto';\n\t\t\t}\n\n\t\t\tt.node.style.width = nativeWidth;\n\t\t\tt.node.style.height = nativeHeight;\n\n\t\t\tt.setPlayerSize(0, 0);\n\n\t\t\tif (!t.isDynamic) {\n\t\t\t\t(function () {\n\t\t\t\t\tt.node.setAttribute('controls', true);\n\t\t\t\t\tt.node.setAttribute('id', t.node.getAttribute('id').replace('_' + rendererName, '').replace('_from_mejs', ''));\n\t\t\t\t\tvar poster = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster>img');\n\t\t\t\t\tif (poster) {\n\t\t\t\t\t\tt.node.setAttribute('poster', poster.src);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete t.node.autoplay;\n\n\t\t\t\t\tt.node.setAttribute('src', '');\n\t\t\t\t\tif (t.media.canPlayType((0, _media.getTypeFromFile)(src)) !== '') {\n\t\t\t\t\t\tt.node.setAttribute('src', src);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (rendererName && rendererName.indexOf('iframe') > -1) {\n\t\t\t\t\t\tvar layer = _document2.default.getElementById(t.media.id + '-iframe-overlay');\n\t\t\t\t\t\tlayer.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar node = t.node.cloneNode();\n\t\t\t\t\tnode.style.display = '';\n\t\t\t\t\tt.getElement(t.container).parentNode.insertBefore(node, t.getElement(t.container));\n\t\t\t\t\tt.node.remove();\n\n\t\t\t\t\tif (t.mediaFiles) {\n\t\t\t\t\t\tfor (var i = 0, total = t.mediaFiles.length; i < total; i++) {\n\t\t\t\t\t\t\tvar source = _document2.default.createElement('source');\n\t\t\t\t\t\t\tsource.setAttribute('src', t.mediaFiles[i].src);\n\t\t\t\t\t\t\tsource.setAttribute('type', t.mediaFiles[i].type);\n\t\t\t\t\t\t\tnode.appendChild(source);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (t.trackFiles) {\n\t\t\t\t\t\tvar _loop3 = function _loop3(_i3, _total3) {\n\t\t\t\t\t\t\tvar track = t.trackFiles[_i3];\n\t\t\t\t\t\t\tvar newTrack = _document2.default.createElement('track');\n\t\t\t\t\t\t\tnewTrack.kind = track.kind;\n\t\t\t\t\t\t\tnewTrack.label = track.label;\n\t\t\t\t\t\t\tnewTrack.srclang = track.srclang;\n\t\t\t\t\t\t\tnewTrack.src = track.src;\n\n\t\t\t\t\t\t\tnode.appendChild(newTrack);\n\t\t\t\t\t\t\tnewTrack.addEventListener('load', function () {\n\t\t\t\t\t\t\t\tthis.mode = 'showing';\n\t\t\t\t\t\t\t\tnode.textTracks[_i3].mode = 'showing';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tfor (var _i3 = 0, _total3 = t.trackFiles.length; _i3 < _total3; _i3++) {\n\t\t\t\t\t\t\t_loop3(_i3, _total3);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete t.node;\n\t\t\t\t\tdelete t.mediaFiles;\n\t\t\t\t\tdelete t.trackFiles;\n\t\t\t\t})();\n\t\t\t} else {\n\t\t\t\tt.getElement(t.container).parentNode.insertBefore(t.node, t.getElement(t.container));\n\t\t\t}\n\n\t\t\tif (t.media.renderer && typeof t.media.renderer.destroy === 'function') {\n\t\t\t\tt.media.renderer.destroy();\n\t\t\t}\n\n\t\t\tdelete _mejs2.default.players[t.id];\n\n\t\t\tif (_typeof(t.getElement(t.container)) === 'object') {\n\t\t\t\tvar offscreen = t.getElement(t.container).parentNode.querySelector('.' + t.options.classPrefix + 'offscreen');\n\t\t\t\tif (offscreen) {\n\t\t\t\t\toffscreen.remove();\n\t\t\t\t}\n\t\t\t\tt.getElement(t.container).remove();\n\t\t\t}\n\t\t\tt.globalUnbind('resize', t.globalResizeCallback);\n\t\t\tt.globalUnbind('keydown', t.globalKeydownCallback);\n\t\t\tt.globalUnbind('click', t.globalClickCallback);\n\n\t\t\tdelete t.media.player;\n\t\t}\n\t}, {\n\t\tkey: 'paused',\n\t\tget: function get() {\n\t\t\treturn this.proxy.paused;\n\t\t}\n\t}, {\n\t\tkey: 'muted',\n\t\tget: function get() {\n\t\t\treturn this.proxy.muted;\n\t\t},\n\t\tset: function set(muted) {\n\t\t\tthis.setMuted(muted);\n\t\t}\n\t}, {\n\t\tkey: 'ended',\n\t\tget: function get() {\n\t\t\treturn this.proxy.ended;\n\t\t}\n\t}, {\n\t\tkey: 'readyState',\n\t\tget: function get() {\n\t\t\treturn this.proxy.readyState;\n\t\t}\n\t}, {\n\t\tkey: 'currentTime',\n\t\tset: function set(time) {\n\t\t\tthis.setCurrentTime(time);\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this.getCurrentTime();\n\t\t}\n\t}, {\n\t\tkey: 'duration',\n\t\tget: function get() {\n\t\t\treturn this.getDuration();\n\t\t}\n\t}, {\n\t\tkey: 'volume',\n\t\tset: function set(volume) {\n\t\t\tthis.setVolume(volume);\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this.getVolume();\n\t\t}\n\t}, {\n\t\tkey: 'src',\n\t\tset: function set(src) {\n\t\t\tthis.setSrc(src);\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this.getSrc();\n\t\t}\n\t}]);\n\n\treturn MediaElementPlayer;\n}();\n\n_window2.default.MediaElementPlayer = MediaElementPlayer;\n_mejs2.default.MediaElementPlayer = MediaElementPlayer;\n\nexports.default = MediaElementPlayer;\n\n},{\"18\":18,\"2\":2,\"26\":26,\"27\":27,\"28\":28,\"29\":29,\"3\":3,\"30\":30,\"32\":32,\"6\":6,\"7\":7,\"8\":8}],18:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DefaultPlayer = function () {\n\tfunction DefaultPlayer(player) {\n\t\t_classCallCheck(this, DefaultPlayer);\n\n\t\tthis.media = player.media;\n\t\tthis.isVideo = player.isVideo;\n\t\tthis.classPrefix = player.options.classPrefix;\n\t\tthis.createIframeLayer = function () {\n\t\t\treturn player.createIframeLayer();\n\t\t};\n\t\tthis.setPoster = function (url) {\n\t\t\treturn player.setPoster(url);\n\t\t};\n\t\treturn this;\n\t}\n\n\t_createClass(DefaultPlayer, [{\n\t\tkey: 'play',\n\t\tvalue: function play() {\n\t\t\treturn this.media.play();\n\t\t}\n\t}, {\n\t\tkey: 'pause',\n\t\tvalue: function pause() {\n\t\t\treturn this.media.pause();\n\t\t}\n\t}, {\n\t\tkey: 'load',\n\t\tvalue: function load() {\n\t\t\tvar t = this;\n\n\t\t\tif (!t.isLoaded) {\n\t\t\t\tt.media.load();\n\t\t\t}\n\n\t\t\tt.isLoaded = true;\n\t\t}\n\t}, {\n\t\tkey: 'setCurrentTime',\n\t\tvalue: function setCurrentTime(time) {\n\t\t\tthis.media.setCurrentTime(time);\n\t\t}\n\t}, {\n\t\tkey: 'getCurrentTime',\n\t\tvalue: function getCurrentTime() {\n\t\t\treturn this.media.currentTime;\n\t\t}\n\t}, {\n\t\tkey: 'getDuration',\n\t\tvalue: function getDuration() {\n\t\t\tvar duration = this.media.getDuration();\n\t\t\tif (duration === Infinity && this.media.seekable && this.media.seekable.length) {\n\t\t\t\tduration = this.media.seekable.end(0);\n\t\t\t}\n\t\t\treturn duration;\n\t\t}\n\t}, {\n\t\tkey: 'setVolume',\n\t\tvalue: function setVolume(volume) {\n\t\t\tthis.media.setVolume(volume);\n\t\t}\n\t}, {\n\t\tkey: 'getVolume',\n\t\tvalue: function getVolume() {\n\t\t\treturn this.media.getVolume();\n\t\t}\n\t}, {\n\t\tkey: 'setMuted',\n\t\tvalue: function setMuted(value) {\n\t\t\tthis.media.setMuted(value);\n\t\t}\n\t}, {\n\t\tkey: 'setSrc',\n\t\tvalue: function setSrc(src) {\n\t\t\tvar t = this,\n\t\t\t    layer = document.getElementById(t.media.id + '-iframe-overlay');\n\n\t\t\tif (layer) {\n\t\t\t\tlayer.remove();\n\t\t\t}\n\n\t\t\tt.media.setSrc(src);\n\t\t\tt.createIframeLayer();\n\t\t\tif (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') {\n\t\t\t\tt.setPoster(t.media.renderer.getPosterUrl());\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'getSrc',\n\t\tvalue: function getSrc() {\n\t\t\treturn this.media.getSrc();\n\t\t}\n\t}, {\n\t\tkey: 'canPlayType',\n\t\tvalue: function canPlayType(type) {\n\t\t\treturn this.media.canPlayType(type);\n\t\t}\n\t}, {\n\t\tkey: 'paused',\n\t\tget: function get() {\n\t\t\treturn this.media.paused;\n\t\t}\n\t}, {\n\t\tkey: 'muted',\n\t\tset: function set(muted) {\n\t\t\tthis.setMuted(muted);\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this.media.muted;\n\t\t}\n\t}, {\n\t\tkey: 'ended',\n\t\tget: function get() {\n\t\t\treturn this.media.ended;\n\t\t}\n\t}, {\n\t\tkey: 'readyState',\n\t\tget: function get() {\n\t\t\treturn this.media.readyState;\n\t\t}\n\t}, {\n\t\tkey: 'currentTime',\n\t\tset: function set(time) {\n\t\t\tthis.setCurrentTime(time);\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this.getCurrentTime();\n\t\t}\n\t}, {\n\t\tkey: 'duration',\n\t\tget: function get() {\n\t\t\treturn this.getDuration();\n\t\t}\n\t}, {\n\t\tkey: 'remainingTime',\n\t\tget: function get() {\n\t\t\treturn this.getDuration() - this.currentTime();\n\t\t}\n\t}, {\n\t\tkey: 'volume',\n\t\tset: function set(volume) {\n\t\t\tthis.setVolume(volume);\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this.getVolume();\n\t\t}\n\t}, {\n\t\tkey: 'src',\n\t\tset: function set(src) {\n\t\t\tthis.setSrc(src);\n\t\t},\n\t\tget: function get() {\n\t\t\treturn this.getSrc();\n\t\t}\n\t}]);\n\n\treturn DefaultPlayer;\n}();\n\nexports.default = DefaultPlayer;\n\n\n_window2.default.DefaultPlayer = DefaultPlayer;\n\n},{\"3\":3}],19:[function(_dereq_,module,exports){\n'use strict';\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _player = _dereq_(17);\n\nvar _player2 = _interopRequireDefault(_player);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nif (typeof jQuery !== 'undefined') {\n\t_mejs2.default.$ = jQuery;\n} else if (typeof Zepto !== 'undefined') {\n\t_mejs2.default.$ = Zepto;\n} else if (typeof ender !== 'undefined') {\n\t_mejs2.default.$ = ender;\n}\n\n(function ($) {\n\tif (typeof $ !== 'undefined') {\n\t\t$.fn.mediaelementplayer = function (options) {\n\t\t\tif (options === false) {\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar player = $(this).data('mediaelementplayer');\n\t\t\t\t\tif (player) {\n\t\t\t\t\t\tplayer.remove();\n\t\t\t\t\t}\n\t\t\t\t\t$(this).removeData('mediaelementplayer');\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.each(function () {\n\t\t\t\t\t$(this).data('mediaelementplayer', new _player2.default(this, options));\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\t$(document).ready(function () {\n\t\t\t$('.' + _mejs2.default.MepDefaults.classPrefix + 'player').mediaelementplayer();\n\t\t});\n\t}\n})(_mejs2.default.$);\n\n},{\"17\":17,\"3\":3,\"8\":8}],20:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _renderer = _dereq_(9);\n\nvar _general = _dereq_(28);\n\nvar _media = _dereq_(30);\n\nvar _constants = _dereq_(26);\n\nvar _dom = _dereq_(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NativeDash = {\n\n\tpromise: null,\n\n\tload: function load(settings) {\n\t\tif (typeof dashjs !== 'undefined') {\n\t\t\tNativeDash.promise = new Promise(function (resolve) {\n\t\t\t\tresolve();\n\t\t\t}).then(function () {\n\t\t\t\tNativeDash._createPlayer(settings);\n\t\t\t});\n\t\t} else {\n\t\t\tsettings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.dashjs.org/latest/dash.all.min.js';\n\n\t\t\tNativeDash.promise = NativeDash.promise || (0, _dom.loadScript)(settings.options.path);\n\t\t\tNativeDash.promise.then(function () {\n\t\t\t\tNativeDash._createPlayer(settings);\n\t\t\t});\n\t\t}\n\n\t\treturn NativeDash.promise;\n\t},\n\n\t_createPlayer: function _createPlayer(settings) {\n\t\tvar player = dashjs.MediaPlayer().create();\n\t\t_window2.default['__ready__' + settings.id](player);\n\t\treturn player;\n\t}\n};\n\nvar DashNativeRenderer = {\n\tname: 'native_dash',\n\toptions: {\n\t\tprefix: 'native_dash',\n\t\tdash: {\n\t\t\tpath: 'https://cdn.dashjs.org/latest/dash.all.min.js',\n\t\t\tdebug: false,\n\t\t\tdrm: {},\n\n\t\t\trobustnessLevel: ''\n\t\t}\n\t},\n\n\tcanPlayType: function canPlayType(type) {\n\t\treturn _constants.HAS_MSE && ['application/dash+xml'].indexOf(type.toLowerCase()) > -1;\n\t},\n\n\tcreate: function create(mediaElement, options, mediaFiles) {\n\n\t\tvar originalNode = mediaElement.originalNode,\n\t\t    id = mediaElement.id + '_' + options.prefix,\n\t\t    autoplay = originalNode.autoplay,\n\t\t    children = originalNode.children;\n\n\t\tvar node = null,\n\t\t    dashPlayer = null;\n\n\t\toriginalNode.removeAttribute('type');\n\t\tfor (var i = 0, total = children.length; i < total; i++) {\n\t\t\tchildren[i].removeAttribute('type');\n\t\t}\n\n\t\tnode = originalNode.cloneNode(true);\n\t\toptions = Object.assign(options, mediaElement.options);\n\n\t\tvar props = _mejs2.default.html5media.properties,\n\t\t    events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {\n\t\t\treturn e !== 'error';\n\t\t}),\n\t\t    attachNativeEvents = function attachNativeEvents(e) {\n\t\t\tvar event = (0, _general.createEvent)(e.type, mediaElement);\n\t\t\tmediaElement.dispatchEvent(event);\n\t\t},\n\t\t    assignGettersSetters = function assignGettersSetters(propName) {\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\tnode['get' + capName] = function () {\n\t\t\t\treturn dashPlayer !== null ? node[propName] : null;\n\t\t\t};\n\n\t\t\tnode['set' + capName] = function (value) {\n\t\t\t\tif (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {\n\t\t\t\t\tif (propName === 'src') {\n\t\t\t\t\t\tvar source = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;\n\t\t\t\t\t\tnode[propName] = source;\n\t\t\t\t\t\tif (dashPlayer !== null) {\n\t\t\t\t\t\t\tdashPlayer.reset();\n\t\t\t\t\t\t\tfor (var _i = 0, _total = events.length; _i < _total; _i++) {\n\t\t\t\t\t\t\t\tnode.removeEventListener(events[_i], attachNativeEvents);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdashPlayer = NativeDash._createPlayer({\n\t\t\t\t\t\t\t\toptions: options.dash,\n\t\t\t\t\t\t\t\tid: id\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && _typeof(value.drm) === 'object') {\n\t\t\t\t\t\t\t\tdashPlayer.setProtectionData(value.drm);\n\t\t\t\t\t\t\t\tif ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) {\n\t\t\t\t\t\t\t\t\tdashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdashPlayer.attachSource(source);\n\t\t\t\t\t\t\tif (autoplay) {\n\t\t\t\t\t\t\t\tdashPlayer.play();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode[propName] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var _i2 = 0, _total2 = props.length; _i2 < _total2; _i2++) {\n\t\t\tassignGettersSetters(props[_i2]);\n\t\t}\n\n\t\t_window2.default['__ready__' + id] = function (_dashPlayer) {\n\t\t\tmediaElement.dashPlayer = dashPlayer = _dashPlayer;\n\n\t\t\tvar dashEvents = dashjs.MediaPlayer.events,\n\t\t\t    assignEvents = function assignEvents(eventName) {\n\t\t\t\tif (eventName === 'loadedmetadata') {\n\t\t\t\t\tdashPlayer.initialize();\n\t\t\t\t\tdashPlayer.attachView(node);\n\t\t\t\t\tdashPlayer.setAutoPlay(false);\n\n\t\t\t\t\tif (_typeof(options.dash.drm) === 'object' && !_mejs2.default.Utils.isObjectEmpty(options.dash.drm)) {\n\t\t\t\t\t\tdashPlayer.setProtectionData(options.dash.drm);\n\t\t\t\t\t\tif ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) {\n\t\t\t\t\t\t\tdashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdashPlayer.attachSource(node.getSrc());\n\t\t\t\t}\n\n\t\t\t\tnode.addEventListener(eventName, attachNativeEvents);\n\t\t\t};\n\n\t\t\tfor (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {\n\t\t\t\tassignEvents(events[_i3]);\n\t\t\t}\n\n\t\t\tvar assignMdashEvents = function assignMdashEvents(e) {\n\t\t\t\tif (e.type.toLowerCase() === 'error') {\n\t\t\t\t\tmediaElement.generateError(e.message, node.src);\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t} else {\n\t\t\t\t\tvar _event = (0, _general.createEvent)(e.type, mediaElement);\n\t\t\t\t\t_event.data = e;\n\t\t\t\t\tmediaElement.dispatchEvent(_event);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var eventType in dashEvents) {\n\t\t\t\tif (dashEvents.hasOwnProperty(eventType)) {\n\t\t\t\t\tdashPlayer.on(dashEvents[eventType], function (e) {\n\t\t\t\t\t\treturn assignMdashEvents(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (mediaFiles && mediaFiles.length > 0) {\n\t\t\tfor (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) {\n\t\t\t\tif (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) {\n\t\t\t\t\tnode.setAttribute('src', mediaFiles[_i4].src);\n\t\t\t\t\tif (typeof mediaFiles[_i4].drm !== 'undefined') {\n\t\t\t\t\t\toptions.dash.drm = mediaFiles[_i4].drm;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tnode.setAttribute('id', id);\n\n\t\toriginalNode.parentNode.insertBefore(node, originalNode);\n\t\toriginalNode.autoplay = false;\n\t\toriginalNode.style.display = 'none';\n\n\t\tnode.setSize = function (width, height) {\n\t\t\tnode.style.width = width + 'px';\n\t\t\tnode.style.height = height + 'px';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.hide = function () {\n\t\t\tnode.pause();\n\t\t\tnode.style.display = 'none';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.show = function () {\n\t\t\tnode.style.display = '';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.destroy = function () {\n\t\t\tif (dashPlayer !== null) {\n\t\t\t\tdashPlayer.reset();\n\t\t\t}\n\t\t};\n\n\t\tvar event = (0, _general.createEvent)('rendererready', node);\n\t\tmediaElement.dispatchEvent(event);\n\n\t\tmediaElement.promises.push(NativeDash.load({\n\t\t\toptions: options.dash,\n\t\t\tid: id\n\t\t}));\n\n\t\treturn node;\n\t}\n};\n\n_media.typeChecks.push(function (url) {\n\treturn ~url.toLowerCase().indexOf('.mpd') ? 'application/dash+xml' : null;\n});\n\n_renderer.renderer.add(DashNativeRenderer);\n\n},{\"26\":26,\"27\":27,\"28\":28,\"3\":3,\"30\":30,\"8\":8,\"9\":9}],21:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.PluginDetector = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _i18n = _dereq_(6);\n\nvar _i18n2 = _interopRequireDefault(_i18n);\n\nvar _renderer = _dereq_(9);\n\nvar _general = _dereq_(28);\n\nvar _constants = _dereq_(26);\n\nvar _media = _dereq_(30);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PluginDetector = exports.PluginDetector = {\n\tplugins: [],\n\n\thasPluginVersion: function hasPluginVersion(plugin, v) {\n\t\tvar pv = PluginDetector.plugins[plugin];\n\t\tv[1] = v[1] || 0;\n\t\tv[2] = v[2] || 0;\n\t\treturn pv[0] > v[0] || pv[0] === v[0] && pv[1] > v[1] || pv[0] === v[0] && pv[1] === v[1] && pv[2] >= v[2];\n\t},\n\n\taddPlugin: function addPlugin(p, pluginName, mimeType, activeX, axDetect) {\n\t\tPluginDetector.plugins[p] = PluginDetector.detectPlugin(pluginName, mimeType, activeX, axDetect);\n\t},\n\n\tdetectPlugin: function detectPlugin(pluginName, mimeType, activeX, axDetect) {\n\n\t\tvar version = [0, 0, 0],\n\t\t    description = void 0,\n\t\t    ax = void 0;\n\n\t\tif (_constants.NAV.plugins !== null && _constants.NAV.plugins !== undefined && _typeof(_constants.NAV.plugins[pluginName]) === 'object') {\n\t\t\tdescription = _constants.NAV.plugins[pluginName].description;\n\t\t\tif (description && !(typeof _constants.NAV.mimeTypes !== 'undefined' && _constants.NAV.mimeTypes[mimeType] && !_constants.NAV.mimeTypes[mimeType].enabledPlugin)) {\n\t\t\t\tversion = description.replace(pluginName, '').replace(/^\\s+/, '').replace(/\\sr/gi, '.').split('.');\n\t\t\t\tfor (var i = 0, total = version.length; i < total; i++) {\n\t\t\t\t\tversion[i] = parseInt(version[i].match(/\\d+/), 10);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (_window2.default.ActiveXObject !== undefined) {\n\t\t\ttry {\n\t\t\t\tax = new ActiveXObject(activeX);\n\t\t\t\tif (ax) {\n\t\t\t\t\tversion = axDetect(ax);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\treturn version;\n\t}\n};\n\nPluginDetector.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', function (ax) {\n\tvar version = [],\n\t    d = ax.GetVariable(\"$version\");\n\n\tif (d) {\n\t\td = d.split(\" \")[1].split(\",\");\n\t\tversion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];\n\t}\n\treturn version;\n});\n\nvar FlashMediaElementRenderer = {\n\tcreate: function create(mediaElement, options, mediaFiles) {\n\n\t\tvar flash = {};\n\t\tvar isActive = false;\n\n\t\tflash.options = options;\n\t\tflash.id = mediaElement.id + '_' + flash.options.prefix;\n\t\tflash.mediaElement = mediaElement;\n\t\tflash.flashState = {};\n\t\tflash.flashApi = null;\n\t\tflash.flashApiStack = [];\n\n\t\tvar props = _mejs2.default.html5media.properties,\n\t\t    assignGettersSetters = function assignGettersSetters(propName) {\n\t\t\tflash.flashState[propName] = null;\n\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\tflash['get' + capName] = function () {\n\t\t\t\tif (flash.flashApi !== null) {\n\t\t\t\t\tif (typeof flash.flashApi['get_' + propName] === 'function') {\n\t\t\t\t\t\tvar value = flash.flashApi['get_' + propName]();\n\n\t\t\t\t\t\tif (propName === 'buffered') {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstart: function start() {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tend: function end() {\n\t\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tlength: 1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tflash['set' + capName] = function (value) {\n\t\t\t\tif (propName === 'src') {\n\t\t\t\t\tvalue = (0, _media.absolutizeUrl)(value);\n\t\t\t\t}\n\n\t\t\t\tif (flash.flashApi !== null && flash.flashApi['set_' + propName] !== undefined) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tflash.flashApi['set_' + propName](value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tflash.flashApiStack.push({\n\t\t\t\t\t\ttype: 'set',\n\t\t\t\t\t\tpropName: propName,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 0, total = props.length; i < total; i++) {\n\t\t\tassignGettersSetters(props[i]);\n\t\t}\n\n\t\tvar methods = _mejs2.default.html5media.methods,\n\t\t    assignMethods = function assignMethods(methodName) {\n\t\t\tflash[methodName] = function () {\n\t\t\t\tif (isActive) {\n\t\t\t\t\tif (flash.flashApi !== null) {\n\t\t\t\t\t\tif (flash.flashApi['fire_' + methodName]) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tflash.flashApi['fire_' + methodName]();\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tflash.flashApiStack.push({\n\t\t\t\t\t\t\ttype: 'call',\n\t\t\t\t\t\t\tmethodName: methodName\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\tmethods.push('stop');\n\t\tfor (var _i = 0, _total = methods.length; _i < _total; _i++) {\n\t\t\tassignMethods(methods[_i]);\n\t\t}\n\n\t\tvar initEvents = ['rendererready'];\n\n\t\tfor (var _i2 = 0, _total2 = initEvents.length; _i2 < _total2; _i2++) {\n\t\t\tvar event = (0, _general.createEvent)(initEvents[_i2], flash);\n\t\t\tmediaElement.dispatchEvent(event);\n\t\t}\n\n\t\t_window2.default['__ready__' + flash.id] = function () {\n\n\t\t\tflash.flashReady = true;\n\t\t\tflash.flashApi = _document2.default.getElementById('__' + flash.id);\n\n\t\t\tif (flash.flashApiStack.length) {\n\t\t\t\tfor (var _i3 = 0, _total3 = flash.flashApiStack.length; _i3 < _total3; _i3++) {\n\t\t\t\t\tvar stackItem = flash.flashApiStack[_i3];\n\n\t\t\t\t\tif (stackItem.type === 'set') {\n\t\t\t\t\t\tvar propName = stackItem.propName,\n\t\t\t\t\t\t    capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\t\t\t\tflash['set' + capName](stackItem.value);\n\t\t\t\t\t} else if (stackItem.type === 'call') {\n\t\t\t\t\t\tflash[stackItem.methodName]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t_window2.default['__event__' + flash.id] = function (eventName, message) {\n\t\t\tvar event = (0, _general.createEvent)(eventName, flash);\n\t\t\tif (message) {\n\t\t\t\ttry {\n\t\t\t\t\tevent.data = JSON.parse(message);\n\t\t\t\t\tevent.details.data = JSON.parse(message);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tevent.message = message;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tflash.mediaElement.dispatchEvent(event);\n\t\t};\n\n\t\tflash.flashWrapper = _document2.default.createElement('div');\n\n\t\tif (['always', 'sameDomain'].indexOf(flash.options.shimScriptAccess) === -1) {\n\t\t\tflash.options.shimScriptAccess = 'sameDomain';\n\t\t}\n\n\t\tvar autoplay = mediaElement.originalNode.autoplay,\n\t\t    flashVars = ['uid=' + flash.id, 'autoplay=' + autoplay, 'allowScriptAccess=' + flash.options.shimScriptAccess, 'preload=' + (mediaElement.originalNode.getAttribute('preload') || '')],\n\t\t    isVideo = mediaElement.originalNode !== null && mediaElement.originalNode.tagName.toLowerCase() === 'video',\n\t\t    flashHeight = isVideo ? mediaElement.originalNode.height : 1,\n\t\t    flashWidth = isVideo ? mediaElement.originalNode.width : 1;\n\n\t\tif (mediaElement.originalNode.getAttribute('src')) {\n\t\t\tflashVars.push('src=' + mediaElement.originalNode.getAttribute('src'));\n\t\t}\n\n\t\tif (flash.options.enablePseudoStreaming === true) {\n\t\t\tflashVars.push('pseudostreamstart=' + flash.options.pseudoStreamingStartQueryParam);\n\t\t\tflashVars.push('pseudostreamtype=' + flash.options.pseudoStreamingType);\n\t\t}\n\n\t\tif (flash.options.streamDelimiter) {\n\t\t\tflashVars.push('streamdelimiter=' + encodeURIComponent(flash.options.streamDelimiter));\n\t\t}\n\n\t\tif (flash.options.proxyType) {\n\t\t\tflashVars.push('proxytype=' + flash.options.proxyType);\n\t\t}\n\n\t\tmediaElement.appendChild(flash.flashWrapper);\n\t\tmediaElement.originalNode.style.display = 'none';\n\n\t\tvar settings = [];\n\n\t\tif (_constants.IS_IE || _constants.IS_EDGE) {\n\t\t\tvar specialIEContainer = _document2.default.createElement('div');\n\t\t\tflash.flashWrapper.appendChild(specialIEContainer);\n\n\t\t\tif (_constants.IS_EDGE) {\n\t\t\t\tsettings = ['type=\"application/x-shockwave-flash\"', 'data=\"' + flash.options.pluginPath + flash.options.filename + '\"', 'id=\"__' + flash.id + '\"', 'width=\"' + flashWidth + '\"', 'height=\"' + flashHeight + '\\'\"'];\n\t\t\t} else {\n\t\t\t\tsettings = ['classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"', 'codebase=\"//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab\"', 'id=\"__' + flash.id + '\"', 'width=\"' + flashWidth + '\"', 'height=\"' + flashHeight + '\"'];\n\t\t\t}\n\n\t\t\tif (!isVideo) {\n\t\t\t\tsettings.push('style=\"clip: rect(0 0 0 0); position: absolute;\"');\n\t\t\t}\n\n\t\t\tspecialIEContainer.outerHTML = '<object ' + settings.join(' ') + '>' + ('<param name=\"movie\" value=\"' + flash.options.pluginPath + flash.options.filename + '?x=' + new Date() + '\" />') + ('<param name=\"flashvars\" value=\"' + flashVars.join('&amp;') + '\" />') + '<param name=\"quality\" value=\"high\" />' + '<param name=\"bgcolor\" value=\"#000000\" />' + '<param name=\"wmode\" value=\"transparent\" />' + ('<param name=\"allowScriptAccess\" value=\"' + flash.options.shimScriptAccess + '\" />') + '<param name=\"allowFullScreen\" value=\"true\" />' + ('<div>' + _i18n2.default.t('mejs.install-flash') + '</div>') + '</object>';\n\t\t} else {\n\n\t\t\tsettings = ['id=\"__' + flash.id + '\"', 'name=\"__' + flash.id + '\"', 'play=\"true\"', 'loop=\"false\"', 'quality=\"high\"', 'bgcolor=\"#000000\"', 'wmode=\"transparent\"', 'allowScriptAccess=\"' + flash.options.shimScriptAccess + '\"', 'allowFullScreen=\"true\"', 'type=\"application/x-shockwave-flash\"', 'pluginspage=\"//www.macromedia.com/go/getflashplayer\"', 'src=\"' + flash.options.pluginPath + flash.options.filename + '\"', 'flashvars=\"' + flashVars.join('&') + '\"'];\n\n\t\t\tif (isVideo) {\n\t\t\t\tsettings.push('width=\"' + flashWidth + '\"');\n\t\t\t\tsettings.push('height=\"' + flashHeight + '\"');\n\t\t\t} else {\n\t\t\t\tsettings.push('style=\"position: fixed; left: -9999em; top: -9999em;\"');\n\t\t\t}\n\n\t\t\tflash.flashWrapper.innerHTML = '<embed ' + settings.join(' ') + '>';\n\t\t}\n\n\t\tflash.flashNode = flash.flashWrapper.lastChild;\n\n\t\tflash.hide = function () {\n\t\t\tisActive = false;\n\t\t\tif (isVideo) {\n\t\t\t\tflash.flashNode.style.display = 'none';\n\t\t\t}\n\t\t};\n\t\tflash.show = function () {\n\t\t\tisActive = true;\n\t\t\tif (isVideo) {\n\t\t\t\tflash.flashNode.style.display = '';\n\t\t\t}\n\t\t};\n\t\tflash.setSize = function (width, height) {\n\t\t\tflash.flashNode.style.width = width + 'px';\n\t\t\tflash.flashNode.style.height = height + 'px';\n\n\t\t\tif (flash.flashApi !== null && typeof flash.flashApi.fire_setSize === 'function') {\n\t\t\t\tflash.flashApi.fire_setSize(width, height);\n\t\t\t}\n\t\t};\n\n\t\tflash.destroy = function () {\n\t\t\tflash.flashNode.remove();\n\t\t};\n\n\t\tif (mediaFiles && mediaFiles.length > 0) {\n\t\t\tfor (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) {\n\t\t\t\tif (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) {\n\t\t\t\t\tflash.setSrc(mediaFiles[_i4].src);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn flash;\n\t}\n};\n\nvar hasFlash = PluginDetector.hasPluginVersion('flash', [10, 0, 0]);\n\nif (hasFlash) {\n\t_media.typeChecks.push(function (url) {\n\t\turl = url.toLowerCase();\n\n\t\tif (url.startsWith('rtmp')) {\n\t\t\tif (~url.indexOf('.mp3')) {\n\t\t\t\treturn 'audio/rtmp';\n\t\t\t} else {\n\t\t\t\treturn 'video/rtmp';\n\t\t\t}\n\t\t} else if (/\\.og(a|g)/i.test(url)) {\n\t\t\treturn 'audio/ogg';\n\t\t} else if (~url.indexOf('.m3u8')) {\n\t\t\treturn 'application/x-mpegURL';\n\t\t} else if (~url.indexOf('.mpd')) {\n\t\t\treturn 'application/dash+xml';\n\t\t} else if (~url.indexOf('.flv')) {\n\t\t\treturn 'video/flv';\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t});\n\n\tvar FlashMediaElementVideoRenderer = {\n\t\tname: 'flash_video',\n\t\toptions: {\n\t\t\tprefix: 'flash_video',\n\t\t\tfilename: 'mediaelement-flash-video.swf',\n\t\t\tenablePseudoStreaming: false,\n\n\t\t\tpseudoStreamingStartQueryParam: 'start',\n\n\t\t\tpseudoStreamingType: 'byte',\n\n\t\t\tproxyType: '',\n\n\t\t\tstreamDelimiter: ''\n\t\t},\n\n\t\tcanPlayType: function canPlayType(type) {\n\t\t\treturn ~['video/mp4', 'video/rtmp', 'audio/rtmp', 'rtmp/mp4', 'audio/mp4', 'video/flv', 'video/x-flv'].indexOf(type.toLowerCase());\n\t\t},\n\n\t\tcreate: FlashMediaElementRenderer.create\n\n\t};\n\t_renderer.renderer.add(FlashMediaElementVideoRenderer);\n\n\tvar FlashMediaElementHlsVideoRenderer = {\n\t\tname: 'flash_hls',\n\t\toptions: {\n\t\t\tprefix: 'flash_hls',\n\t\t\tfilename: 'mediaelement-flash-video-hls.swf'\n\t\t},\n\n\t\tcanPlayType: function canPlayType(type) {\n\t\t\treturn ~['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase());\n\t\t},\n\n\t\tcreate: FlashMediaElementRenderer.create\n\t};\n\t_renderer.renderer.add(FlashMediaElementHlsVideoRenderer);\n\n\tvar FlashMediaElementMdashVideoRenderer = {\n\t\tname: 'flash_dash',\n\t\toptions: {\n\t\t\tprefix: 'flash_dash',\n\t\t\tfilename: 'mediaelement-flash-video-mdash.swf'\n\t\t},\n\n\t\tcanPlayType: function canPlayType(type) {\n\t\t\treturn ~['application/dash+xml'].indexOf(type.toLowerCase());\n\t\t},\n\n\t\tcreate: FlashMediaElementRenderer.create\n\t};\n\t_renderer.renderer.add(FlashMediaElementMdashVideoRenderer);\n\n\tvar FlashMediaElementAudioRenderer = {\n\t\tname: 'flash_audio',\n\t\toptions: {\n\t\t\tprefix: 'flash_audio',\n\t\t\tfilename: 'mediaelement-flash-audio.swf'\n\t\t},\n\n\t\tcanPlayType: function canPlayType(type) {\n\t\t\treturn ~['audio/mp3'].indexOf(type.toLowerCase());\n\t\t},\n\n\t\tcreate: FlashMediaElementRenderer.create\n\t};\n\t_renderer.renderer.add(FlashMediaElementAudioRenderer);\n\n\tvar FlashMediaElementAudioOggRenderer = {\n\t\tname: 'flash_audio_ogg',\n\t\toptions: {\n\t\t\tprefix: 'flash_audio_ogg',\n\t\t\tfilename: 'mediaelement-flash-audio-ogg.swf'\n\t\t},\n\n\t\tcanPlayType: function canPlayType(type) {\n\t\t\treturn ~['audio/ogg', 'audio/oga', 'audio/ogv'].indexOf(type.toLowerCase());\n\t\t},\n\n\t\tcreate: FlashMediaElementRenderer.create\n\t};\n\t_renderer.renderer.add(FlashMediaElementAudioOggRenderer);\n}\n\n},{\"2\":2,\"26\":26,\"28\":28,\"3\":3,\"30\":30,\"6\":6,\"8\":8,\"9\":9}],22:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _renderer = _dereq_(9);\n\nvar _general = _dereq_(28);\n\nvar _constants = _dereq_(26);\n\nvar _media = _dereq_(30);\n\nvar _dom = _dereq_(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NativeFlv = {\n\n\tpromise: null,\n\n\tload: function load(settings) {\n\t\tif (typeof flvjs !== 'undefined') {\n\t\t\tNativeFlv.promise = new Promise(function (resolve) {\n\t\t\t\tresolve();\n\t\t\t}).then(function () {\n\t\t\t\tNativeFlv._createPlayer(settings);\n\t\t\t});\n\t\t} else {\n\t\t\tsettings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/flv.js@latest';\n\n\t\t\tNativeFlv.promise = NativeFlv.promise || (0, _dom.loadScript)(settings.options.path);\n\t\t\tNativeFlv.promise.then(function () {\n\t\t\t\tNativeFlv._createPlayer(settings);\n\t\t\t});\n\t\t}\n\n\t\treturn NativeFlv.promise;\n\t},\n\n\t_createPlayer: function _createPlayer(settings) {\n\t\tflvjs.LoggingControl.enableDebug = settings.options.debug;\n\t\tflvjs.LoggingControl.enableVerbose = settings.options.debug;\n\t\tvar player = flvjs.createPlayer(settings.options, settings.configs);\n\t\t_window2.default['__ready__' + settings.id](player);\n\t\treturn player;\n\t}\n};\n\nvar FlvNativeRenderer = {\n\tname: 'native_flv',\n\toptions: {\n\t\tprefix: 'native_flv',\n\t\tflv: {\n\t\t\tpath: 'https://cdn.jsdelivr.net/npm/flv.js@latest',\n\n\t\t\tcors: true,\n\t\t\tdebug: false\n\t\t}\n\t},\n\n\tcanPlayType: function canPlayType(type) {\n\t\treturn _constants.HAS_MSE && ['video/x-flv', 'video/flv'].indexOf(type.toLowerCase()) > -1;\n\t},\n\n\tcreate: function create(mediaElement, options, mediaFiles) {\n\n\t\tvar originalNode = mediaElement.originalNode,\n\t\t    id = mediaElement.id + '_' + options.prefix;\n\n\t\tvar node = null,\n\t\t    flvPlayer = null;\n\n\t\tnode = originalNode.cloneNode(true);\n\t\toptions = Object.assign(options, mediaElement.options);\n\n\t\tvar props = _mejs2.default.html5media.properties,\n\t\t    events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {\n\t\t\treturn e !== 'error';\n\t\t}),\n\t\t    attachNativeEvents = function attachNativeEvents(e) {\n\t\t\tvar event = (0, _general.createEvent)(e.type, mediaElement);\n\t\t\tmediaElement.dispatchEvent(event);\n\t\t},\n\t\t    assignGettersSetters = function assignGettersSetters(propName) {\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\tnode['get' + capName] = function () {\n\t\t\t\treturn flvPlayer !== null ? node[propName] : null;\n\t\t\t};\n\n\t\t\tnode['set' + capName] = function (value) {\n\t\t\t\tif (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {\n\t\t\t\t\tif (propName === 'src') {\n\t\t\t\t\t\tnode[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;\n\t\t\t\t\t\tif (flvPlayer !== null) {\n\t\t\t\t\t\t\tvar _flvOptions = {};\n\t\t\t\t\t\t\t_flvOptions.type = 'flv';\n\t\t\t\t\t\t\t_flvOptions.url = value;\n\t\t\t\t\t\t\t_flvOptions.cors = options.flv.cors;\n\t\t\t\t\t\t\t_flvOptions.debug = options.flv.debug;\n\t\t\t\t\t\t\t_flvOptions.path = options.flv.path;\n\t\t\t\t\t\t\tvar _flvConfigs = options.flv.configs;\n\n\t\t\t\t\t\t\tflvPlayer.destroy();\n\t\t\t\t\t\t\tfor (var i = 0, total = events.length; i < total; i++) {\n\t\t\t\t\t\t\t\tnode.removeEventListener(events[i], attachNativeEvents);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tflvPlayer = NativeFlv._createPlayer({\n\t\t\t\t\t\t\t\toptions: _flvOptions,\n\t\t\t\t\t\t\t\tconfigs: _flvConfigs,\n\t\t\t\t\t\t\t\tid: id\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tflvPlayer.attachMediaElement(node);\n\t\t\t\t\t\t\tflvPlayer.load();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode[propName] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 0, total = props.length; i < total; i++) {\n\t\t\tassignGettersSetters(props[i]);\n\t\t}\n\n\t\t_window2.default['__ready__' + id] = function (_flvPlayer) {\n\t\t\tmediaElement.flvPlayer = flvPlayer = _flvPlayer;\n\n\t\t\tvar flvEvents = flvjs.Events,\n\t\t\t    assignEvents = function assignEvents(eventName) {\n\t\t\t\tif (eventName === 'loadedmetadata') {\n\t\t\t\t\tflvPlayer.unload();\n\t\t\t\t\tflvPlayer.detachMediaElement();\n\t\t\t\t\tflvPlayer.attachMediaElement(node);\n\t\t\t\t\tflvPlayer.load();\n\t\t\t\t}\n\n\t\t\t\tnode.addEventListener(eventName, attachNativeEvents);\n\t\t\t};\n\n\t\t\tfor (var _i = 0, _total = events.length; _i < _total; _i++) {\n\t\t\t\tassignEvents(events[_i]);\n\t\t\t}\n\n\t\t\tvar assignFlvEvents = function assignFlvEvents(name, data) {\n\t\t\t\tif (name === 'error') {\n\t\t\t\t\tvar message = data[0] + ': ' + data[1] + ' ' + data[2].msg;\n\t\t\t\t\tmediaElement.generateError(message, node.src);\n\t\t\t\t} else {\n\t\t\t\t\tvar _event = (0, _general.createEvent)(name, mediaElement);\n\t\t\t\t\t_event.data = data;\n\t\t\t\t\tmediaElement.dispatchEvent(_event);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar _loop = function _loop(eventType) {\n\t\t\t\tif (flvEvents.hasOwnProperty(eventType)) {\n\t\t\t\t\tflvPlayer.on(flvEvents[eventType], function () {\n\t\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\t\t\t\t\targs[_key] = arguments[_key];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn assignFlvEvents(flvEvents[eventType], args);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var eventType in flvEvents) {\n\t\t\t\t_loop(eventType);\n\t\t\t}\n\t\t};\n\n\t\tif (mediaFiles && mediaFiles.length > 0) {\n\t\t\tfor (var _i2 = 0, _total2 = mediaFiles.length; _i2 < _total2; _i2++) {\n\t\t\t\tif (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i2].type)) {\n\t\t\t\t\tnode.setAttribute('src', mediaFiles[_i2].src);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tnode.setAttribute('id', id);\n\n\t\toriginalNode.parentNode.insertBefore(node, originalNode);\n\t\toriginalNode.autoplay = false;\n\t\toriginalNode.style.display = 'none';\n\n\t\tvar flvOptions = {};\n\t\tflvOptions.type = 'flv';\n\t\tflvOptions.url = node.src;\n\t\tflvOptions.cors = options.flv.cors;\n\t\tflvOptions.debug = options.flv.debug;\n\t\tflvOptions.path = options.flv.path;\n\t\tvar flvConfigs = options.flv.configs;\n\n\t\tnode.setSize = function (width, height) {\n\t\t\tnode.style.width = width + 'px';\n\t\t\tnode.style.height = height + 'px';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.hide = function () {\n\t\t\tif (flvPlayer !== null) {\n\t\t\t\tflvPlayer.pause();\n\t\t\t}\n\t\t\tnode.style.display = 'none';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.show = function () {\n\t\t\tnode.style.display = '';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.destroy = function () {\n\t\t\tif (flvPlayer !== null) {\n\t\t\t\tflvPlayer.destroy();\n\t\t\t}\n\t\t};\n\n\t\tvar event = (0, _general.createEvent)('rendererready', node);\n\t\tmediaElement.dispatchEvent(event);\n\n\t\tmediaElement.promises.push(NativeFlv.load({\n\t\t\toptions: flvOptions,\n\t\t\tconfigs: flvConfigs,\n\t\t\tid: id\n\t\t}));\n\n\t\treturn node;\n\t}\n};\n\n_media.typeChecks.push(function (url) {\n\treturn ~url.toLowerCase().indexOf('.flv') ? 'video/flv' : null;\n});\n\n_renderer.renderer.add(FlvNativeRenderer);\n\n},{\"26\":26,\"27\":27,\"28\":28,\"3\":3,\"30\":30,\"8\":8,\"9\":9}],23:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _renderer = _dereq_(9);\n\nvar _general = _dereq_(28);\n\nvar _constants = _dereq_(26);\n\nvar _media = _dereq_(30);\n\nvar _dom = _dereq_(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NativeHls = {\n\n\tpromise: null,\n\n\tload: function load(settings) {\n\t\tif (typeof Hls !== 'undefined') {\n\t\t\tNativeHls.promise = new Promise(function (resolve) {\n\t\t\t\tresolve();\n\t\t\t}).then(function () {\n\t\t\t\tNativeHls._createPlayer(settings);\n\t\t\t});\n\t\t} else {\n\t\t\tsettings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/hls.js@latest';\n\n\t\t\tNativeHls.promise = NativeHls.promise || (0, _dom.loadScript)(settings.options.path);\n\t\t\tNativeHls.promise.then(function () {\n\t\t\t\tNativeHls._createPlayer(settings);\n\t\t\t});\n\t\t}\n\n\t\treturn NativeHls.promise;\n\t},\n\n\t_createPlayer: function _createPlayer(settings) {\n\t\tvar player = new Hls(settings.options);\n\t\t_window2.default['__ready__' + settings.id](player);\n\t\treturn player;\n\t}\n};\n\nvar HlsNativeRenderer = {\n\tname: 'native_hls',\n\toptions: {\n\t\tprefix: 'native_hls',\n\t\thls: {\n\t\t\tpath: 'https://cdn.jsdelivr.net/npm/hls.js@latest',\n\n\t\t\tautoStartLoad: false,\n\t\t\tdebug: false\n\t\t}\n\t},\n\n\tcanPlayType: function canPlayType(type) {\n\t\treturn _constants.HAS_MSE && ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) > -1;\n\t},\n\n\tcreate: function create(mediaElement, options, mediaFiles) {\n\n\t\tvar originalNode = mediaElement.originalNode,\n\t\t    id = mediaElement.id + '_' + options.prefix,\n\t\t    preload = originalNode.getAttribute('preload'),\n\t\t    autoplay = originalNode.autoplay;\n\n\t\tvar hlsPlayer = null,\n\t\t    node = null,\n\t\t    index = 0,\n\t\t    total = mediaFiles.length;\n\n\t\tnode = originalNode.cloneNode(true);\n\t\toptions = Object.assign(options, mediaElement.options);\n\t\toptions.hls.autoStartLoad = preload && preload !== 'none' || autoplay;\n\n\t\tvar props = _mejs2.default.html5media.properties,\n\t\t    events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {\n\t\t\treturn e !== 'error';\n\t\t}),\n\t\t    attachNativeEvents = function attachNativeEvents(e) {\n\t\t\tvar event = (0, _general.createEvent)(e.type, mediaElement);\n\t\t\tmediaElement.dispatchEvent(event);\n\t\t},\n\t\t    assignGettersSetters = function assignGettersSetters(propName) {\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\tnode['get' + capName] = function () {\n\t\t\t\treturn hlsPlayer !== null ? node[propName] : null;\n\t\t\t};\n\n\t\t\tnode['set' + capName] = function (value) {\n\t\t\t\tif (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {\n\t\t\t\t\tif (propName === 'src') {\n\t\t\t\t\t\tnode[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;\n\t\t\t\t\t\tif (hlsPlayer !== null) {\n\t\t\t\t\t\t\thlsPlayer.destroy();\n\t\t\t\t\t\t\tfor (var i = 0, _total = events.length; i < _total; i++) {\n\t\t\t\t\t\t\t\tnode.removeEventListener(events[i], attachNativeEvents);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thlsPlayer = NativeHls._createPlayer({\n\t\t\t\t\t\t\t\toptions: options.hls,\n\t\t\t\t\t\t\t\tid: id\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\thlsPlayer.loadSource(value);\n\t\t\t\t\t\t\thlsPlayer.attachMedia(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode[propName] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 0, _total2 = props.length; i < _total2; i++) {\n\t\t\tassignGettersSetters(props[i]);\n\t\t}\n\n\t\t_window2.default['__ready__' + id] = function (_hlsPlayer) {\n\t\t\tmediaElement.hlsPlayer = hlsPlayer = _hlsPlayer;\n\t\t\tvar hlsEvents = Hls.Events,\n\t\t\t    assignEvents = function assignEvents(eventName) {\n\t\t\t\tif (eventName === 'loadedmetadata') {\n\t\t\t\t\tvar url = mediaElement.originalNode.src;\n\t\t\t\t\thlsPlayer.detachMedia();\n\t\t\t\t\thlsPlayer.loadSource(url);\n\t\t\t\t\thlsPlayer.attachMedia(node);\n\t\t\t\t}\n\n\t\t\t\tnode.addEventListener(eventName, attachNativeEvents);\n\t\t\t};\n\n\t\t\tfor (var _i = 0, _total3 = events.length; _i < _total3; _i++) {\n\t\t\t\tassignEvents(events[_i]);\n\t\t\t}\n\n\t\t\tvar recoverDecodingErrorDate = void 0,\n\t\t\t    recoverSwapAudioCodecDate = void 0;\n\t\t\tvar assignHlsEvents = function assignHlsEvents(name, data) {\n\t\t\t\tif (name === 'hlsError') {\n\t\t\t\t\tconsole.warn(data);\n\t\t\t\t\tdata = data[1];\n\n\t\t\t\t\tif (data.fatal) {\n\t\t\t\t\t\tswitch (data.type) {\n\t\t\t\t\t\t\tcase 'mediaError':\n\t\t\t\t\t\t\t\tvar now = new Date().getTime();\n\t\t\t\t\t\t\t\tif (!recoverDecodingErrorDate || now - recoverDecodingErrorDate > 3000) {\n\t\t\t\t\t\t\t\t\trecoverDecodingErrorDate = new Date().getTime();\n\t\t\t\t\t\t\t\t\thlsPlayer.recoverMediaError();\n\t\t\t\t\t\t\t\t} else if (!recoverSwapAudioCodecDate || now - recoverSwapAudioCodecDate > 3000) {\n\t\t\t\t\t\t\t\t\trecoverSwapAudioCodecDate = new Date().getTime();\n\t\t\t\t\t\t\t\t\tconsole.warn('Attempting to swap Audio Codec and recover from media error');\n\t\t\t\t\t\t\t\t\thlsPlayer.swapAudioCodec();\n\t\t\t\t\t\t\t\t\thlsPlayer.recoverMediaError();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar message = 'Cannot recover, last media error recovery failed';\n\t\t\t\t\t\t\t\t\tmediaElement.generateError(message, node.src);\n\t\t\t\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'networkError':\n\t\t\t\t\t\t\t\tif (data.details === 'manifestLoadError') {\n\t\t\t\t\t\t\t\t\tif (index < total && mediaFiles[index + 1] !== undefined) {\n\t\t\t\t\t\t\t\t\t\tnode.setSrc(mediaFiles[index++].src);\n\t\t\t\t\t\t\t\t\t\tnode.load();\n\t\t\t\t\t\t\t\t\t\tnode.play();\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tvar _message = 'Network error';\n\t\t\t\t\t\t\t\t\t\tmediaElement.generateError(_message, mediaFiles);\n\t\t\t\t\t\t\t\t\t\tconsole.error(_message);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar _message2 = 'Network error';\n\t\t\t\t\t\t\t\t\tmediaElement.generateError(_message2, mediaFiles);\n\t\t\t\t\t\t\t\t\tconsole.error(_message2);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\thlsPlayer.destroy();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar event = (0, _general.createEvent)(name, mediaElement);\n\t\t\t\tevent.data = data;\n\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t};\n\n\t\t\tvar _loop = function _loop(eventType) {\n\t\t\t\tif (hlsEvents.hasOwnProperty(eventType)) {\n\t\t\t\t\thlsPlayer.on(hlsEvents[eventType], function () {\n\t\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\t\t\t\t\targs[_key] = arguments[_key];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn assignHlsEvents(hlsEvents[eventType], args);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var eventType in hlsEvents) {\n\t\t\t\t_loop(eventType);\n\t\t\t}\n\t\t};\n\n\t\tif (total > 0) {\n\t\t\tfor (; index < total; index++) {\n\t\t\t\tif (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) {\n\t\t\t\t\tnode.setAttribute('src', mediaFiles[index].src);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (preload !== 'auto' && !autoplay) {\n\t\t\tnode.addEventListener('play', function () {\n\t\t\t\tif (hlsPlayer !== null) {\n\t\t\t\t\thlsPlayer.startLoad();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnode.addEventListener('pause', function () {\n\t\t\t\tif (hlsPlayer !== null) {\n\t\t\t\t\thlsPlayer.stopLoad();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tnode.setAttribute('id', id);\n\n\t\toriginalNode.parentNode.insertBefore(node, originalNode);\n\t\toriginalNode.autoplay = false;\n\t\toriginalNode.style.display = 'none';\n\n\t\tnode.setSize = function (width, height) {\n\t\t\tnode.style.width = width + 'px';\n\t\t\tnode.style.height = height + 'px';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.hide = function () {\n\t\t\tnode.pause();\n\t\t\tnode.style.display = 'none';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.show = function () {\n\t\t\tnode.style.display = '';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.destroy = function () {\n\t\t\tif (hlsPlayer !== null) {\n\t\t\t\thlsPlayer.stopLoad();\n\t\t\t\thlsPlayer.destroy();\n\t\t\t}\n\t\t};\n\n\t\tvar event = (0, _general.createEvent)('rendererready', node);\n\t\tmediaElement.dispatchEvent(event);\n\n\t\tmediaElement.promises.push(NativeHls.load({\n\t\t\toptions: options.hls,\n\t\t\tid: id\n\t\t}));\n\n\t\treturn node;\n\t}\n};\n\n_media.typeChecks.push(function (url) {\n\treturn ~url.toLowerCase().indexOf('.m3u8') ? 'application/x-mpegURL' : null;\n});\n\n_renderer.renderer.add(HlsNativeRenderer);\n\n},{\"26\":26,\"27\":27,\"28\":28,\"3\":3,\"30\":30,\"8\":8,\"9\":9}],24:[function(_dereq_,module,exports){\n'use strict';\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _renderer = _dereq_(9);\n\nvar _general = _dereq_(28);\n\nvar _constants = _dereq_(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HtmlMediaElement = {\n\tname: 'html5',\n\toptions: {\n\t\tprefix: 'html5'\n\t},\n\n\tcanPlayType: function canPlayType(type) {\n\n\t\tvar mediaElement = _document2.default.createElement('video');\n\n\t\tif (_constants.IS_ANDROID && /\\/mp(3|4)$/i.test(type) || ~['application/x-mpegurl', 'vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) && _constants.SUPPORTS_NATIVE_HLS) {\n\t\t\treturn 'yes';\n\t\t} else if (mediaElement.canPlayType) {\n\t\t\treturn mediaElement.canPlayType(type.toLowerCase()).replace(/no/, '');\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t},\n\n\tcreate: function create(mediaElement, options, mediaFiles) {\n\n\t\tvar id = mediaElement.id + '_' + options.prefix;\n\t\tvar isActive = false;\n\n\t\tvar node = null;\n\n\t\tif (mediaElement.originalNode === undefined || mediaElement.originalNode === null) {\n\t\t\tnode = _document2.default.createElement('audio');\n\t\t\tmediaElement.appendChild(node);\n\t\t} else {\n\t\t\tnode = mediaElement.originalNode;\n\t\t}\n\n\t\tnode.setAttribute('id', id);\n\n\t\tvar props = _mejs2.default.html5media.properties,\n\t\t    assignGettersSetters = function assignGettersSetters(propName) {\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\tnode['get' + capName] = function () {\n\t\t\t\treturn node[propName];\n\t\t\t};\n\n\t\t\tnode['set' + capName] = function (value) {\n\t\t\t\tif (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {\n\t\t\t\t\tnode[propName] = value;\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 0, _total = props.length; i < _total; i++) {\n\t\t\tassignGettersSetters(props[i]);\n\t\t}\n\n\t\tvar events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {\n\t\t\treturn e !== 'error';\n\t\t}),\n\t\t    assignEvents = function assignEvents(eventName) {\n\t\t\tnode.addEventListener(eventName, function (e) {\n\t\t\t\tif (isActive) {\n\t\t\t\t\tvar _event = (0, _general.createEvent)(e.type, e.target);\n\t\t\t\t\tmediaElement.dispatchEvent(_event);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tfor (var _i = 0, _total2 = events.length; _i < _total2; _i++) {\n\t\t\tassignEvents(events[_i]);\n\t\t}\n\n\t\tnode.setSize = function (width, height) {\n\t\t\tnode.style.width = width + 'px';\n\t\t\tnode.style.height = height + 'px';\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.hide = function () {\n\t\t\tisActive = false;\n\t\t\tnode.style.display = 'none';\n\n\t\t\treturn node;\n\t\t};\n\n\t\tnode.show = function () {\n\t\t\tisActive = true;\n\t\t\tnode.style.display = '';\n\n\t\t\treturn node;\n\t\t};\n\n\t\tvar index = 0,\n\t\t    total = mediaFiles.length;\n\t\tif (total > 0) {\n\t\t\tfor (; index < total; index++) {\n\t\t\t\tif (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) {\n\t\t\t\t\tnode.setAttribute('src', mediaFiles[index].src);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener('error', function (e) {\n\t\t\tif (e && e.target && e.target.error && e.target.error.code === 4 && isActive) {\n\t\t\t\tif (index < total && mediaFiles[index + 1] !== undefined) {\n\t\t\t\t\tnode.src = mediaFiles[index++].src;\n\t\t\t\t\tnode.load();\n\t\t\t\t\tnode.play();\n\t\t\t\t} else {\n\t\t\t\t\tmediaElement.generateError('Media error: Format(s) not supported or source(s) not found', mediaFiles);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tvar event = (0, _general.createEvent)('rendererready', node);\n\t\tmediaElement.dispatchEvent(event);\n\n\t\treturn node;\n\t}\n};\n\n_window2.default.HtmlMediaElement = _mejs2.default.HtmlMediaElement = HtmlMediaElement;\n\n_renderer.renderer.add(HtmlMediaElement);\n\n},{\"2\":2,\"26\":26,\"28\":28,\"3\":3,\"8\":8,\"9\":9}],25:[function(_dereq_,module,exports){\n'use strict';\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _renderer = _dereq_(9);\n\nvar _general = _dereq_(28);\n\nvar _media = _dereq_(30);\n\nvar _dom = _dereq_(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar YouTubeApi = {\n\tisIframeStarted: false,\n\n\tisIframeLoaded: false,\n\n\tiframeQueue: [],\n\n\tenqueueIframe: function enqueueIframe(settings) {\n\t\tYouTubeApi.isLoaded = typeof YT !== 'undefined' && YT.loaded;\n\n\t\tif (YouTubeApi.isLoaded) {\n\t\t\tYouTubeApi.createIframe(settings);\n\t\t} else {\n\t\t\tYouTubeApi.loadIframeApi();\n\t\t\tYouTubeApi.iframeQueue.push(settings);\n\t\t}\n\t},\n\n\tloadIframeApi: function loadIframeApi() {\n\t\tif (!YouTubeApi.isIframeStarted) {\n\t\t\t(0, _dom.loadScript)('https://www.youtube.com/player_api');\n\t\t\tYouTubeApi.isIframeStarted = true;\n\t\t}\n\t},\n\n\tiFrameReady: function iFrameReady() {\n\n\t\tYouTubeApi.isLoaded = true;\n\t\tYouTubeApi.isIframeLoaded = true;\n\n\t\twhile (YouTubeApi.iframeQueue.length > 0) {\n\t\t\tvar settings = YouTubeApi.iframeQueue.pop();\n\t\t\tYouTubeApi.createIframe(settings);\n\t\t}\n\t},\n\n\tcreateIframe: function createIframe(settings) {\n\t\treturn new YT.Player(settings.containerId, settings);\n\t},\n\n\tgetYouTubeId: function getYouTubeId(url) {\n\n\t\tvar youTubeId = '';\n\n\t\tif (url.indexOf('?') > 0) {\n\t\t\tyouTubeId = YouTubeApi.getYouTubeIdFromParam(url);\n\n\t\t\tif (youTubeId === '') {\n\t\t\t\tyouTubeId = YouTubeApi.getYouTubeIdFromUrl(url);\n\t\t\t}\n\t\t} else {\n\t\t\tyouTubeId = YouTubeApi.getYouTubeIdFromUrl(url);\n\t\t}\n\n\t\tvar id = youTubeId.substring(youTubeId.lastIndexOf('/') + 1);\n\t\tyouTubeId = id.split('?');\n\t\treturn youTubeId[0];\n\t},\n\n\tgetYouTubeIdFromParam: function getYouTubeIdFromParam(url) {\n\n\t\tif (url === undefined || url === null || !url.trim().length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar parts = url.split('?'),\n\t\t    parameters = parts[1].split('&');\n\n\t\tvar youTubeId = '';\n\n\t\tfor (var i = 0, total = parameters.length; i < total; i++) {\n\t\t\tvar paramParts = parameters[i].split('=');\n\t\t\tif (paramParts[0] === 'v') {\n\t\t\t\tyouTubeId = paramParts[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn youTubeId;\n\t},\n\n\tgetYouTubeIdFromUrl: function getYouTubeIdFromUrl(url) {\n\n\t\tif (url === undefined || url === null || !url.trim().length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar parts = url.split('?');\n\t\turl = parts[0];\n\t\treturn url.substring(url.lastIndexOf('/') + 1);\n\t},\n\n\tgetYouTubeNoCookieUrl: function getYouTubeNoCookieUrl(url) {\n\t\tif (url === undefined || url === null || !url.trim().length || url.indexOf('//www.youtube') === -1) {\n\t\t\treturn url;\n\t\t}\n\n\t\tvar parts = url.split('/');\n\t\tparts[2] = parts[2].replace('.com', '-nocookie.com');\n\t\treturn parts.join('/');\n\t}\n};\n\nvar YouTubeIframeRenderer = {\n\tname: 'youtube_iframe',\n\n\toptions: {\n\t\tprefix: 'youtube_iframe',\n\n\t\tyoutube: {\n\t\t\tautoplay: 0,\n\t\t\tcontrols: 0,\n\t\t\tdisablekb: 1,\n\t\t\tend: 0,\n\t\t\tloop: 0,\n\t\t\tmodestbranding: 0,\n\t\t\tplaysinline: 0,\n\t\t\trel: 0,\n\t\t\tshowinfo: 0,\n\t\t\tstart: 0,\n\t\t\tiv_load_policy: 3,\n\n\t\t\tnocookie: false,\n\n\t\t\timageQuality: null\n\t\t}\n\t},\n\n\tcanPlayType: function canPlayType(type) {\n\t\treturn ~['video/youtube', 'video/x-youtube'].indexOf(type.toLowerCase());\n\t},\n\n\tcreate: function create(mediaElement, options, mediaFiles) {\n\n\t\tvar youtube = {},\n\t\t    apiStack = [],\n\t\t    readyState = 4;\n\n\t\tvar youTubeApi = null,\n\t\t    paused = true,\n\t\t    ended = false,\n\t\t    youTubeIframe = null,\n\t\t    volume = 1;\n\n\t\tyoutube.options = options;\n\t\tyoutube.id = mediaElement.id + '_' + options.prefix;\n\t\tyoutube.mediaElement = mediaElement;\n\n\t\tvar props = _mejs2.default.html5media.properties,\n\t\t    assignGettersSetters = function assignGettersSetters(propName) {\n\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\tyoutube['get' + capName] = function () {\n\t\t\t\tif (youTubeApi !== null) {\n\t\t\t\t\tvar value = null;\n\n\t\t\t\t\tswitch (propName) {\n\t\t\t\t\t\tcase 'currentTime':\n\t\t\t\t\t\t\treturn youTubeApi.getCurrentTime();\n\t\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\t\treturn youTubeApi.getDuration();\n\t\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t\tvolume = youTubeApi.getVolume() / 100;\n\t\t\t\t\t\t\treturn volume;\n\t\t\t\t\t\tcase 'playbackRate':\n\t\t\t\t\t\t\treturn youTubeApi.getPlaybackRate();\n\t\t\t\t\t\tcase 'paused':\n\t\t\t\t\t\t\treturn paused;\n\t\t\t\t\t\tcase 'ended':\n\t\t\t\t\t\t\treturn ended;\n\t\t\t\t\t\tcase 'muted':\n\t\t\t\t\t\t\treturn youTubeApi.isMuted();\n\t\t\t\t\t\tcase 'buffered':\n\t\t\t\t\t\t\tvar percentLoaded = youTubeApi.getVideoLoadedFraction(),\n\t\t\t\t\t\t\t    duration = youTubeApi.getDuration();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstart: function start() {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tend: function end() {\n\t\t\t\t\t\t\t\t\treturn percentLoaded * duration;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tlength: 1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'src':\n\t\t\t\t\t\t\treturn youTubeApi.getVideoUrl();\n\t\t\t\t\t\tcase 'readyState':\n\t\t\t\t\t\t\treturn readyState;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tyoutube['set' + capName] = function (value) {\n\t\t\t\tif (youTubeApi !== null) {\n\t\t\t\t\tswitch (propName) {\n\t\t\t\t\t\tcase 'src':\n\t\t\t\t\t\t\tvar url = typeof value === 'string' ? value : value[0].src,\n\t\t\t\t\t\t\t    _videoId = YouTubeApi.getYouTubeId(url);\n\n\t\t\t\t\t\t\tif (mediaElement.originalNode.autoplay) {\n\t\t\t\t\t\t\t\tyouTubeApi.loadVideoById(_videoId);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tyouTubeApi.cueVideoById(_videoId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'currentTime':\n\t\t\t\t\t\t\tyouTubeApi.seekTo(value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'muted':\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tyouTubeApi.mute();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tyouTubeApi.unMute();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tvar event = (0, _general.createEvent)('volumechange', youtube);\n\t\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t\tvolume = value;\n\t\t\t\t\t\t\tyouTubeApi.setVolume(value * 100);\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tvar event = (0, _general.createEvent)('volumechange', youtube);\n\t\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'playbackRate':\n\t\t\t\t\t\t\tyouTubeApi.setPlaybackRate(value);\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tvar event = (0, _general.createEvent)('ratechange', youtube);\n\t\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'readyState':\n\t\t\t\t\t\t\tvar event = (0, _general.createEvent)('canplay', youtube);\n\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tapiStack.push({ type: 'set', propName: propName, value: value });\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 0, total = props.length; i < total; i++) {\n\t\t\tassignGettersSetters(props[i]);\n\t\t}\n\n\t\tvar methods = _mejs2.default.html5media.methods,\n\t\t    assignMethods = function assignMethods(methodName) {\n\t\t\tyoutube[methodName] = function () {\n\t\t\t\tif (youTubeApi !== null) {\n\t\t\t\t\tswitch (methodName) {\n\t\t\t\t\t\tcase 'play':\n\t\t\t\t\t\t\tpaused = false;\n\t\t\t\t\t\t\treturn youTubeApi.playVideo();\n\t\t\t\t\t\tcase 'pause':\n\t\t\t\t\t\t\tpaused = true;\n\t\t\t\t\t\t\treturn youTubeApi.pauseVideo();\n\t\t\t\t\t\tcase 'load':\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tapiStack.push({ type: 'call', methodName: methodName });\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var _i = 0, _total = methods.length; _i < _total; _i++) {\n\t\t\tassignMethods(methods[_i]);\n\t\t}\n\n\t\tvar errorHandler = function errorHandler(error) {\n\t\t\tvar message = '';\n\t\t\tswitch (error.data) {\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage = 'The request contains an invalid parameter value. Verify that video ID has 11 characters and that contains no invalid characters, such as exclamation points or asterisks.';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tmessage = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 100:\n\t\t\t\t\tmessage = 'The video requested was not found. Either video has been removed or has been marked as private.';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 101:\n\t\t\t\tcase 105:\n\t\t\t\t\tmessage = 'The owner of the requested video does not allow it to be played in embedded players.';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tmessage = 'Unknown error.';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmediaElement.generateError('Code ' + error.data + ': ' + message, mediaFiles);\n\t\t};\n\n\t\tvar youtubeContainer = _document2.default.createElement('div');\n\t\tyoutubeContainer.id = youtube.id;\n\n\t\tif (youtube.options.youtube.nocookie) {\n\t\t\tmediaElement.originalNode.src = YouTubeApi.getYouTubeNoCookieUrl(mediaFiles[0].src);\n\t\t}\n\n\t\tmediaElement.originalNode.parentNode.insertBefore(youtubeContainer, mediaElement.originalNode);\n\t\tmediaElement.originalNode.style.display = 'none';\n\n\t\tvar isAudio = mediaElement.originalNode.tagName.toLowerCase() === 'audio',\n\t\t    height = isAudio ? '1' : mediaElement.originalNode.height,\n\t\t    width = isAudio ? '1' : mediaElement.originalNode.width,\n\t\t    videoId = YouTubeApi.getYouTubeId(mediaFiles[0].src),\n\t\t    youtubeSettings = {\n\t\t\tid: youtube.id,\n\t\t\tcontainerId: youtubeContainer.id,\n\t\t\tvideoId: videoId,\n\t\t\theight: height,\n\t\t\twidth: width,\n\t\t\thost: youtube.options.youtube && youtube.options.youtube.nocookie ? 'https://www.youtube-nocookie.com' : undefined,\n\t\t\tplayerVars: Object.assign({\n\t\t\t\tcontrols: 0,\n\t\t\t\trel: 0,\n\t\t\t\tdisablekb: 1,\n\t\t\t\tshowinfo: 0,\n\t\t\t\tmodestbranding: 0,\n\t\t\t\thtml5: 1,\n\t\t\t\tiv_load_policy: 3\n\t\t\t}, youtube.options.youtube),\n\t\t\torigin: _window2.default.location.host,\n\t\t\tevents: {\n\t\t\t\tonReady: function onReady(e) {\n\t\t\t\t\tmediaElement.youTubeApi = youTubeApi = e.target;\n\t\t\t\t\tmediaElement.youTubeState = {\n\t\t\t\t\t\tpaused: true,\n\t\t\t\t\t\tended: false\n\t\t\t\t\t};\n\n\t\t\t\t\tif (apiStack.length) {\n\t\t\t\t\t\tfor (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) {\n\n\t\t\t\t\t\t\tvar stackItem = apiStack[_i2];\n\n\t\t\t\t\t\t\tif (stackItem.type === 'set') {\n\t\t\t\t\t\t\t\tvar propName = stackItem.propName,\n\t\t\t\t\t\t\t\t    capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\t\t\t\t\t\tyoutube['set' + capName](stackItem.value);\n\t\t\t\t\t\t\t} else if (stackItem.type === 'call') {\n\t\t\t\t\t\t\t\tyoutube[stackItem.methodName]();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tyouTubeIframe = youTubeApi.getIframe();\n\n\t\t\t\t\tif (mediaElement.originalNode.muted) {\n\t\t\t\t\t\tyouTubeApi.mute();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar events = ['mouseover', 'mouseout'],\n\t\t\t\t\t    assignEvents = function assignEvents(e) {\n\t\t\t\t\t\tvar newEvent = (0, _general.createEvent)(e.type, youtube);\n\t\t\t\t\t\tmediaElement.dispatchEvent(newEvent);\n\t\t\t\t\t};\n\n\t\t\t\t\tfor (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {\n\t\t\t\t\t\tyouTubeIframe.addEventListener(events[_i3], assignEvents, false);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar initEvents = ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];\n\n\t\t\t\t\tfor (var _i4 = 0, _total4 = initEvents.length; _i4 < _total4; _i4++) {\n\t\t\t\t\t\tvar event = (0, _general.createEvent)(initEvents[_i4], youtube);\n\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonStateChange: function onStateChange(e) {\n\t\t\t\t\tvar events = [];\n\n\t\t\t\t\tswitch (e.data) {\n\t\t\t\t\t\tcase -1:\n\t\t\t\t\t\t\tevents = ['loadedmetadata'];\n\t\t\t\t\t\t\tpaused = true;\n\t\t\t\t\t\t\tended = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\tevents = ['ended'];\n\t\t\t\t\t\t\tpaused = false;\n\t\t\t\t\t\t\tended = !youtube.options.youtube.loop;\n\t\t\t\t\t\t\tif (!youtube.options.youtube.loop) {\n\t\t\t\t\t\t\t\tyoutube.stopInterval();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tevents = ['play', 'playing'];\n\t\t\t\t\t\t\tpaused = false;\n\t\t\t\t\t\t\tended = false;\n\t\t\t\t\t\t\tyoutube.startInterval();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\tevents = ['pause'];\n\t\t\t\t\t\t\tpaused = true;\n\t\t\t\t\t\t\tended = false;\n\t\t\t\t\t\t\tyoutube.stopInterval();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\tevents = ['progress'];\n\t\t\t\t\t\t\tended = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 5:\n\t\t\t\t\t\t\tevents = ['loadeddata', 'loadedmetadata', 'canplay'];\n\t\t\t\t\t\t\tpaused = true;\n\t\t\t\t\t\t\tended = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var _i5 = 0, _total5 = events.length; _i5 < _total5; _i5++) {\n\t\t\t\t\t\tvar event = (0, _general.createEvent)(events[_i5], youtube);\n\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonError: function onError(e) {\n\t\t\t\t\treturn errorHandler(e);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (isAudio || mediaElement.originalNode.hasAttribute('playsinline')) {\n\t\t\tyoutubeSettings.playerVars.playsinline = 1;\n\t\t}\n\n\t\tif (mediaElement.originalNode.controls) {\n\t\t\tyoutubeSettings.playerVars.controls = 1;\n\t\t}\n\t\tif (mediaElement.originalNode.autoplay) {\n\t\t\tyoutubeSettings.playerVars.autoplay = 1;\n\t\t}\n\t\tif (mediaElement.originalNode.loop) {\n\t\t\tyoutubeSettings.playerVars.loop = 1;\n\t\t}\n\n\t\tif ((youtubeSettings.playerVars.loop && parseInt(youtubeSettings.playerVars.loop, 10) === 1 || mediaElement.originalNode.src.indexOf('loop=') > -1) && !youtubeSettings.playerVars.playlist && mediaElement.originalNode.src.indexOf('playlist=') === -1) {\n\t\t\tyoutubeSettings.playerVars.playlist = YouTubeApi.getYouTubeId(mediaElement.originalNode.src);\n\t\t}\n\n\t\tYouTubeApi.enqueueIframe(youtubeSettings);\n\n\t\tyoutube.onEvent = function (eventName, player, _youTubeState) {\n\t\t\tif (_youTubeState !== null && _youTubeState !== undefined) {\n\t\t\t\tmediaElement.youTubeState = _youTubeState;\n\t\t\t}\n\t\t};\n\n\t\tyoutube.setSize = function (width, height) {\n\t\t\tif (youTubeApi !== null) {\n\t\t\t\tyouTubeApi.setSize(width, height);\n\t\t\t}\n\t\t};\n\t\tyoutube.hide = function () {\n\t\t\tyoutube.stopInterval();\n\t\t\tyoutube.pause();\n\t\t\tif (youTubeIframe) {\n\t\t\t\tyouTubeIframe.style.display = 'none';\n\t\t\t}\n\t\t};\n\t\tyoutube.show = function () {\n\t\t\tif (youTubeIframe) {\n\t\t\t\tyouTubeIframe.style.display = '';\n\t\t\t}\n\t\t};\n\t\tyoutube.destroy = function () {\n\t\t\tyouTubeApi.destroy();\n\t\t};\n\t\tyoutube.interval = null;\n\n\t\tyoutube.startInterval = function () {\n\t\t\tyoutube.interval = setInterval(function () {\n\t\t\t\tvar event = (0, _general.createEvent)('timeupdate', youtube);\n\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t}, 250);\n\t\t};\n\t\tyoutube.stopInterval = function () {\n\t\t\tif (youtube.interval) {\n\t\t\t\tclearInterval(youtube.interval);\n\t\t\t}\n\t\t};\n\t\tyoutube.getPosterUrl = function () {\n\t\t\tvar quality = options.youtube.imageQuality,\n\t\t\t    resolutions = ['default', 'hqdefault', 'mqdefault', 'sddefault', 'maxresdefault'],\n\t\t\t    id = YouTubeApi.getYouTubeId(mediaElement.originalNode.src);\n\t\t\treturn quality && resolutions.indexOf(quality) > -1 && id ? 'https://img.youtube.com/vi/' + id + '/' + quality + '.jpg' : '';\n\t\t};\n\n\t\treturn youtube;\n\t}\n};\n\n_window2.default.onYouTubePlayerAPIReady = function () {\n\tYouTubeApi.iFrameReady();\n};\n\n_media.typeChecks.push(function (url) {\n\treturn (/\\/\\/(www\\.youtube|youtu\\.?be)/i.test(url) ? 'video/x-youtube' : null\n\t);\n});\n\n_renderer.renderer.add(YouTubeIframeRenderer);\n\n},{\"2\":2,\"27\":27,\"28\":28,\"3\":3,\"30\":30,\"8\":8,\"9\":9}],26:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.cancelFullScreen = exports.requestFullScreen = exports.isFullScreen = exports.FULLSCREEN_EVENT_NAME = exports.HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = exports.SUPPORTS_NATIVE_HLS = exports.SUPPORT_PASSIVE_EVENT = exports.SUPPORT_POINTER_EVENTS = exports.HAS_MSE = exports.IS_STOCK_ANDROID = exports.IS_SAFARI = exports.IS_FIREFOX = exports.IS_CHROME = exports.IS_EDGE = exports.IS_IE = exports.IS_ANDROID = exports.IS_IOS = exports.IS_IPOD = exports.IS_IPHONE = exports.IS_IPAD = exports.UA = exports.NAV = undefined;\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NAV = exports.NAV = _window2.default.navigator;\nvar UA = exports.UA = NAV.userAgent.toLowerCase();\nvar IS_IPAD = exports.IS_IPAD = /ipad/i.test(UA) && !_window2.default.MSStream;\nvar IS_IPHONE = exports.IS_IPHONE = /iphone/i.test(UA) && !_window2.default.MSStream;\nvar IS_IPOD = exports.IS_IPOD = /ipod/i.test(UA) && !_window2.default.MSStream;\nvar IS_IOS = exports.IS_IOS = /ipad|iphone|ipod/i.test(UA) && !_window2.default.MSStream;\nvar IS_ANDROID = exports.IS_ANDROID = /android/i.test(UA);\nvar IS_IE = exports.IS_IE = /(trident|microsoft)/i.test(NAV.appName);\nvar IS_EDGE = exports.IS_EDGE = 'msLaunchUri' in NAV && !('documentMode' in _document2.default);\nvar IS_CHROME = exports.IS_CHROME = /chrome/i.test(UA);\nvar IS_FIREFOX = exports.IS_FIREFOX = /firefox/i.test(UA);\nvar IS_SAFARI = exports.IS_SAFARI = /safari/i.test(UA) && !IS_CHROME;\nvar IS_STOCK_ANDROID = exports.IS_STOCK_ANDROID = /^mozilla\\/\\d+\\.\\d+\\s\\(linux;\\su;/i.test(UA);\nvar HAS_MSE = exports.HAS_MSE = 'MediaSource' in _window2.default;\nvar SUPPORT_POINTER_EVENTS = exports.SUPPORT_POINTER_EVENTS = function () {\n\tvar element = _document2.default.createElement('x'),\n\t    documentElement = _document2.default.documentElement,\n\t    getComputedStyle = _window2.default.getComputedStyle;\n\n\tif (!('pointerEvents' in element.style)) {\n\t\treturn false;\n\t}\n\n\telement.style.pointerEvents = 'auto';\n\telement.style.pointerEvents = 'x';\n\tdocumentElement.appendChild(element);\n\tvar supports = getComputedStyle && (getComputedStyle(element, '') || {}).pointerEvents === 'auto';\n\telement.remove();\n\treturn !!supports;\n}();\n\nvar SUPPORT_PASSIVE_EVENT = exports.SUPPORT_PASSIVE_EVENT = function () {\n\tvar supportsPassive = false;\n\ttry {\n\t\tvar opts = Object.defineProperty({}, 'passive', {\n\t\t\tget: function get() {\n\t\t\t\tsupportsPassive = true;\n\t\t\t}\n\t\t});\n\t\t_window2.default.addEventListener('test', null, opts);\n\t} catch (e) {}\n\n\treturn supportsPassive;\n}();\n\nvar html5Elements = ['source', 'track', 'audio', 'video'];\nvar video = void 0;\n\nfor (var i = 0, total = html5Elements.length; i < total; i++) {\n\tvideo = _document2.default.createElement(html5Elements[i]);\n}\n\nvar SUPPORTS_NATIVE_HLS = exports.SUPPORTS_NATIVE_HLS = IS_SAFARI || IS_IE && /edge/i.test(UA);\n\nvar hasiOSFullScreen = video.webkitEnterFullscreen !== undefined;\n\nvar hasNativeFullscreen = video.requestFullscreen !== undefined;\n\nif (hasiOSFullScreen && /mac os x 10_5/i.test(UA)) {\n\thasNativeFullscreen = false;\n\thasiOSFullScreen = false;\n}\n\nvar hasWebkitNativeFullScreen = video.webkitRequestFullScreen !== undefined;\nvar hasMozNativeFullScreen = video.mozRequestFullScreen !== undefined;\nvar hasMsNativeFullScreen = video.msRequestFullscreen !== undefined;\nvar hasTrueNativeFullScreen = hasWebkitNativeFullScreen || hasMozNativeFullScreen || hasMsNativeFullScreen;\nvar nativeFullScreenEnabled = hasTrueNativeFullScreen;\nvar fullScreenEventName = '';\nvar isFullScreen = void 0,\n    requestFullScreen = void 0,\n    cancelFullScreen = void 0;\n\nif (hasMozNativeFullScreen) {\n\tnativeFullScreenEnabled = _document2.default.mozFullScreenEnabled;\n} else if (hasMsNativeFullScreen) {\n\tnativeFullScreenEnabled = _document2.default.msFullscreenEnabled;\n}\n\nif (IS_CHROME) {\n\thasiOSFullScreen = false;\n}\n\nif (hasTrueNativeFullScreen) {\n\tif (hasWebkitNativeFullScreen) {\n\t\tfullScreenEventName = 'webkitfullscreenchange';\n\t} else if (hasMozNativeFullScreen) {\n\t\tfullScreenEventName = 'fullscreenchange';\n\t} else if (hasMsNativeFullScreen) {\n\t\tfullScreenEventName = 'MSFullscreenChange';\n\t}\n\n\texports.isFullScreen = isFullScreen = function isFullScreen() {\n\t\tif (hasMozNativeFullScreen) {\n\t\t\treturn _document2.default.mozFullScreen;\n\t\t} else if (hasWebkitNativeFullScreen) {\n\t\t\treturn _document2.default.webkitIsFullScreen;\n\t\t} else if (hasMsNativeFullScreen) {\n\t\t\treturn _document2.default.msFullscreenElement !== null;\n\t\t}\n\t};\n\n\texports.requestFullScreen = requestFullScreen = function requestFullScreen(el) {\n\t\tif (hasWebkitNativeFullScreen) {\n\t\t\tel.webkitRequestFullScreen();\n\t\t} else if (hasMozNativeFullScreen) {\n\t\t\tel.mozRequestFullScreen();\n\t\t} else if (hasMsNativeFullScreen) {\n\t\t\tel.msRequestFullscreen();\n\t\t}\n\t};\n\n\texports.cancelFullScreen = cancelFullScreen = function cancelFullScreen() {\n\t\tif (hasWebkitNativeFullScreen) {\n\t\t\t_document2.default.webkitCancelFullScreen();\n\t\t} else if (hasMozNativeFullScreen) {\n\t\t\t_document2.default.mozCancelFullScreen();\n\t\t} else if (hasMsNativeFullScreen) {\n\t\t\t_document2.default.msExitFullscreen();\n\t\t}\n\t};\n}\n\nvar HAS_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = hasNativeFullscreen;\nvar HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = hasWebkitNativeFullScreen;\nvar HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = hasMozNativeFullScreen;\nvar HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = hasMsNativeFullScreen;\nvar HAS_IOS_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = hasiOSFullScreen;\nvar HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_TRUE_NATIVE_FULLSCREEN = hasTrueNativeFullScreen;\nvar HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_NATIVE_FULLSCREEN_ENABLED = nativeFullScreenEnabled;\nvar FULLSCREEN_EVENT_NAME = exports.FULLSCREEN_EVENT_NAME = fullScreenEventName;\nexports.isFullScreen = isFullScreen;\nexports.requestFullScreen = requestFullScreen;\nexports.cancelFullScreen = cancelFullScreen;\n\n\n_mejs2.default.Features = _mejs2.default.Features || {};\n_mejs2.default.Features.isiPad = IS_IPAD;\n_mejs2.default.Features.isiPod = IS_IPOD;\n_mejs2.default.Features.isiPhone = IS_IPHONE;\n_mejs2.default.Features.isiOS = _mejs2.default.Features.isiPhone || _mejs2.default.Features.isiPad;\n_mejs2.default.Features.isAndroid = IS_ANDROID;\n_mejs2.default.Features.isIE = IS_IE;\n_mejs2.default.Features.isEdge = IS_EDGE;\n_mejs2.default.Features.isChrome = IS_CHROME;\n_mejs2.default.Features.isFirefox = IS_FIREFOX;\n_mejs2.default.Features.isSafari = IS_SAFARI;\n_mejs2.default.Features.isStockAndroid = IS_STOCK_ANDROID;\n_mejs2.default.Features.hasMSE = HAS_MSE;\n_mejs2.default.Features.supportsNativeHLS = SUPPORTS_NATIVE_HLS;\n_mejs2.default.Features.supportsPointerEvents = SUPPORT_POINTER_EVENTS;\n_mejs2.default.Features.supportsPassiveEvent = SUPPORT_PASSIVE_EVENT;\n_mejs2.default.Features.hasiOSFullScreen = HAS_IOS_FULLSCREEN;\n_mejs2.default.Features.hasNativeFullscreen = HAS_NATIVE_FULLSCREEN;\n_mejs2.default.Features.hasWebkitNativeFullScreen = HAS_WEBKIT_NATIVE_FULLSCREEN;\n_mejs2.default.Features.hasMozNativeFullScreen = HAS_MOZ_NATIVE_FULLSCREEN;\n_mejs2.default.Features.hasMsNativeFullScreen = HAS_MS_NATIVE_FULLSCREEN;\n_mejs2.default.Features.hasTrueNativeFullScreen = HAS_TRUE_NATIVE_FULLSCREEN;\n_mejs2.default.Features.nativeFullScreenEnabled = HAS_NATIVE_FULLSCREEN_ENABLED;\n_mejs2.default.Features.fullScreenEventName = FULLSCREEN_EVENT_NAME;\n_mejs2.default.Features.isFullScreen = isFullScreen;\n_mejs2.default.Features.requestFullScreen = requestFullScreen;\n_mejs2.default.Features.cancelFullScreen = cancelFullScreen;\n\n},{\"2\":2,\"3\":3,\"8\":8}],27:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.removeClass = exports.addClass = exports.hasClass = undefined;\nexports.loadScript = loadScript;\nexports.offset = offset;\nexports.toggleClass = toggleClass;\nexports.fadeOut = fadeOut;\nexports.fadeIn = fadeIn;\nexports.siblings = siblings;\nexports.visible = visible;\nexports.ajax = ajax;\n\nvar _window = _dereq_(3);\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction loadScript(url) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar script = _document2.default.createElement('script');\n\t\tscript.src = url;\n\t\tscript.async = true;\n\t\tscript.onload = function () {\n\t\t\tscript.remove();\n\t\t\tresolve();\n\t\t};\n\t\tscript.onerror = function () {\n\t\t\tscript.remove();\n\t\t\treject();\n\t\t};\n\t\t_document2.default.head.appendChild(script);\n\t});\n}\n\nfunction offset(el) {\n\tvar rect = el.getBoundingClientRect(),\n\t    scrollLeft = _window2.default.pageXOffset || _document2.default.documentElement.scrollLeft,\n\t    scrollTop = _window2.default.pageYOffset || _document2.default.documentElement.scrollTop;\n\treturn { top: rect.top + scrollTop, left: rect.left + scrollLeft };\n}\n\nvar hasClassMethod = void 0,\n    addClassMethod = void 0,\n    removeClassMethod = void 0;\n\nif ('classList' in _document2.default.documentElement) {\n\thasClassMethod = function hasClassMethod(el, className) {\n\t\treturn el.classList !== undefined && el.classList.contains(className);\n\t};\n\taddClassMethod = function addClassMethod(el, className) {\n\t\treturn el.classList.add(className);\n\t};\n\tremoveClassMethod = function removeClassMethod(el, className) {\n\t\treturn el.classList.remove(className);\n\t};\n} else {\n\thasClassMethod = function hasClassMethod(el, className) {\n\t\treturn new RegExp('\\\\b' + className + '\\\\b').test(el.className);\n\t};\n\taddClassMethod = function addClassMethod(el, className) {\n\t\tif (!hasClass(el, className)) {\n\t\t\tel.className += ' ' + className;\n\t\t}\n\t};\n\tremoveClassMethod = function removeClassMethod(el, className) {\n\t\tel.className = el.className.replace(new RegExp('\\\\b' + className + '\\\\b', 'g'), '');\n\t};\n}\n\nvar hasClass = exports.hasClass = hasClassMethod;\nvar addClass = exports.addClass = addClassMethod;\nvar removeClass = exports.removeClass = removeClassMethod;\n\nfunction toggleClass(el, className) {\n\thasClass(el, className) ? removeClass(el, className) : addClass(el, className);\n}\n\nfunction fadeOut(el) {\n\tvar duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;\n\tvar callback = arguments[2];\n\n\tif (!el.style.opacity) {\n\t\tel.style.opacity = 1;\n\t}\n\n\tvar start = null;\n\t_window2.default.requestAnimationFrame(function animate(timestamp) {\n\t\tstart = start || timestamp;\n\t\tvar progress = timestamp - start;\n\t\tvar opacity = parseFloat(1 - progress / duration, 2);\n\t\tel.style.opacity = opacity < 0 ? 0 : opacity;\n\t\tif (progress > duration) {\n\t\t\tif (callback && typeof callback === 'function') {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t} else {\n\t\t\t_window2.default.requestAnimationFrame(animate);\n\t\t}\n\t});\n}\n\nfunction fadeIn(el) {\n\tvar duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;\n\tvar callback = arguments[2];\n\n\tif (!el.style.opacity) {\n\t\tel.style.opacity = 0;\n\t}\n\n\tvar start = null;\n\t_window2.default.requestAnimationFrame(function animate(timestamp) {\n\t\tstart = start || timestamp;\n\t\tvar progress = timestamp - start;\n\t\tvar opacity = parseFloat(progress / duration, 2);\n\t\tel.style.opacity = opacity > 1 ? 1 : opacity;\n\t\tif (progress > duration) {\n\t\t\tif (callback && typeof callback === 'function') {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t} else {\n\t\t\t_window2.default.requestAnimationFrame(animate);\n\t\t}\n\t});\n}\n\nfunction siblings(el, filter) {\n\tvar siblings = [];\n\tel = el.parentNode.firstChild;\n\tdo {\n\t\tif (!filter || filter(el)) {\n\t\t\tsiblings.push(el);\n\t\t}\n\t} while (el = el.nextSibling);\n\treturn siblings;\n}\n\nfunction visible(elem) {\n\tif (elem.getClientRects !== undefined && elem.getClientRects === 'function') {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t}\n\treturn !!(elem.offsetWidth || elem.offsetHeight);\n}\n\nfunction ajax(url, dataType, success, error) {\n\tvar xhr = _window2.default.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');\n\n\tvar type = 'application/x-www-form-urlencoded; charset=UTF-8',\n\t    completed = false,\n\t    accept = '*/'.concat('*');\n\n\tswitch (dataType) {\n\t\tcase 'text':\n\t\t\ttype = 'text/plain';\n\t\t\tbreak;\n\t\tcase 'json':\n\t\t\ttype = 'application/json, text/javascript';\n\t\t\tbreak;\n\t\tcase 'html':\n\t\t\ttype = 'text/html';\n\t\t\tbreak;\n\t\tcase 'xml':\n\t\t\ttype = 'application/xml, text/xml';\n\t\t\tbreak;\n\t}\n\n\tif (type !== 'application/x-www-form-urlencoded') {\n\t\taccept = type + ', */*; q=0.01';\n\t}\n\n\tif (xhr) {\n\t\txhr.open('GET', url, true);\n\t\txhr.setRequestHeader('Accept', accept);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (completed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tif (xhr.status === 200) {\n\t\t\t\t\tcompleted = true;\n\t\t\t\t\tvar data = void 0;\n\t\t\t\t\tswitch (dataType) {\n\t\t\t\t\t\tcase 'json':\n\t\t\t\t\t\t\tdata = JSON.parse(xhr.responseText);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'xml':\n\t\t\t\t\t\t\tdata = xhr.responseXML;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tdata = xhr.responseText;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tsuccess(data);\n\t\t\t\t} else if (typeof error === 'function') {\n\t\t\t\t\terror(xhr.status);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\txhr.send();\n\t}\n}\n\n_mejs2.default.Utils = _mejs2.default.Utils || {};\n_mejs2.default.Utils.offset = offset;\n_mejs2.default.Utils.hasClass = hasClass;\n_mejs2.default.Utils.addClass = addClass;\n_mejs2.default.Utils.removeClass = removeClass;\n_mejs2.default.Utils.toggleClass = toggleClass;\n_mejs2.default.Utils.fadeIn = fadeIn;\n_mejs2.default.Utils.fadeOut = fadeOut;\n_mejs2.default.Utils.siblings = siblings;\n_mejs2.default.Utils.visible = visible;\n_mejs2.default.Utils.ajax = ajax;\n_mejs2.default.Utils.loadScript = loadScript;\n\n},{\"2\":2,\"3\":3,\"8\":8}],28:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.escapeHTML = escapeHTML;\nexports.debounce = debounce;\nexports.isObjectEmpty = isObjectEmpty;\nexports.splitEvents = splitEvents;\nexports.createEvent = createEvent;\nexports.isNodeAfter = isNodeAfter;\nexports.isString = isString;\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction escapeHTML(input) {\n\n\tif (typeof input !== 'string') {\n\t\tthrow new Error('Argument passed must be a string');\n\t}\n\n\tvar map = {\n\t\t'&': '&amp;',\n\t\t'<': '&lt;',\n\t\t'>': '&gt;',\n\t\t'\"': '&quot;'\n\t};\n\n\treturn input.replace(/[&<>\"]/g, function (c) {\n\t\treturn map[c];\n\t});\n}\n\nfunction debounce(func, wait) {\n\tvar _this = this,\n\t    _arguments = arguments;\n\n\tvar immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\n\tif (typeof func !== 'function') {\n\t\tthrow new Error('First argument must be a function');\n\t}\n\n\tif (typeof wait !== 'number') {\n\t\tthrow new Error('Second argument must be a numeric value');\n\t}\n\n\tvar timeout = void 0;\n\treturn function () {\n\t\tvar context = _this,\n\t\t    args = _arguments;\n\t\tvar later = function later() {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) {\n\t\t\t\tfunc.apply(context, args);\n\t\t\t}\n\t\t};\n\t\tvar callNow = immediate && !timeout;\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\n\t\tif (callNow) {\n\t\t\tfunc.apply(context, args);\n\t\t}\n\t};\n}\n\nfunction isObjectEmpty(instance) {\n\treturn Object.getOwnPropertyNames(instance).length <= 0;\n}\n\nfunction splitEvents(events, id) {\n\tvar rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\\b/;\n\n\tvar ret = { d: [], w: [] };\n\t(events || '').split(' ').forEach(function (v) {\n\t\tvar eventName = '' + v + (id ? '.' + id : '');\n\n\t\tif (eventName.startsWith('.')) {\n\t\t\tret.d.push(eventName);\n\t\t\tret.w.push(eventName);\n\t\t} else {\n\t\t\tret[rwindow.test(v) ? 'w' : 'd'].push(eventName);\n\t\t}\n\t});\n\n\tret.d = ret.d.join(' ');\n\tret.w = ret.w.join(' ');\n\treturn ret;\n}\n\nfunction createEvent(eventName, target) {\n\n\tif (typeof eventName !== 'string') {\n\t\tthrow new Error('Event name must be a string');\n\t}\n\n\tvar eventFrags = eventName.match(/([a-z]+\\.([a-z]+))/i),\n\t    detail = {\n\t\ttarget: target\n\t};\n\n\tif (eventFrags !== null) {\n\t\teventName = eventFrags[1];\n\t\tdetail.namespace = eventFrags[2];\n\t}\n\n\treturn new window.CustomEvent(eventName, {\n\t\tdetail: detail\n\t});\n}\n\nfunction isNodeAfter(sourceNode, targetNode) {\n\n\treturn !!(sourceNode && targetNode && sourceNode.compareDocumentPosition(targetNode) & 2);\n}\n\nfunction isString(value) {\n\treturn typeof value === 'string';\n}\n\n_mejs2.default.Utils = _mejs2.default.Utils || {};\n_mejs2.default.Utils.escapeHTML = escapeHTML;\n_mejs2.default.Utils.debounce = debounce;\n_mejs2.default.Utils.isObjectEmpty = isObjectEmpty;\n_mejs2.default.Utils.splitEvents = splitEvents;\n_mejs2.default.Utils.createEvent = createEvent;\n_mejs2.default.Utils.isNodeAfter = isNodeAfter;\n_mejs2.default.Utils.isString = isString;\n\n},{\"8\":8}],29:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.generateControlButton = generateControlButton;\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction generateControlButton(playerId, ariaLabel, title, iconSprite, icons, classPrefix) {\n\tvar buttonClass = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n\tvar ariaDescribedby = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : '';\n\tvar ariaPressed = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null;\n\n\n\tif (typeof playerId !== 'string') {\n\t\tthrow new Error('`ariaControls` argument must be a string');\n\t}\n\tif (typeof ariaLabel !== 'string') {\n\t\tthrow new Error('`ariaLabel` argument must be a string');\n\t}\n\tif (typeof title !== 'string') {\n\t\tthrow new Error('`title` argument must be a string');\n\t}\n\tif (typeof iconSprite !== 'string') {\n\t\tthrow new Error('`iconSprite` argument must be a string');\n\t}\n\tif (typeof ariaDescribedby !== 'string') {\n\t\tthrow new Error('`ariaDescribedby` argument must be a string');\n\t}\n\tif (!Array.isArray(icons)) {\n\t\tthrow new Error('`icons` argument must be an array');\n\t}\n\tif (typeof classPrefix !== 'string') {\n\t\tthrow new Error('`classPrefix` argument must be a string');\n\t}\n\n\tvar className = buttonClass ? 'class=\"' + buttonClass + '\" ' : '';\n\n\tvar ariaDescribedbyAttr = ariaDescribedby !== '' ? 'aria-describedby=\"' + ariaDescribedby + '\" ' : '';\n\n\tvar ariaPressedAttr = ariaPressed !== null ? 'aria-pressed=\"' + ariaPressed + '\"' : '';\n\n\tvar iconHtml = icons.map(function (icon) {\n\t\treturn '<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"' + playerId + '-' + icon + '\" class=\"' + classPrefix + icon + '\" aria-hidden=\"true\" focusable=\"false\">\\n\\t\\t\\t\\t<use xlink:href=\"' + iconSprite + '#' + icon + '\"></use>\\n\\t\\t\\t</svg>\\n';\n\t});\n\n\treturn '<button ' + className + ' type=\"button\" aria-controls=\"' + playerId + '\" title=\"' + title + '\" aria-label=\"' + ariaLabel + '\" ' + ariaDescribedbyAttr + ' ' + ariaPressedAttr + '>\\n\\t\\t\\t' + iconHtml.join('') + '\\n\\t\\t</button>';\n}\n\n_mejs2.default.Utils = _mejs2.default.Utils || {};\n_mejs2.default.Utils.generateControlButton = generateControlButton;\n\n},{\"8\":8}],30:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.typeChecks = undefined;\nexports.absolutizeUrl = absolutizeUrl;\nexports.formatType = formatType;\nexports.getMimeFromType = getMimeFromType;\nexports.getTypeFromFile = getTypeFromFile;\nexports.getExtension = getExtension;\nexports.normalizeExtension = normalizeExtension;\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nvar _general = _dereq_(28);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar typeChecks = exports.typeChecks = [];\n\nfunction absolutizeUrl(url) {\n\n\tif (typeof url !== 'string') {\n\t\tthrow new Error('`url` argument must be a string');\n\t}\n\n\tvar el = document.createElement('div');\n\tel.innerHTML = '<a href=\"' + (0, _general.escapeHTML)(url) + '\">x</a>';\n\treturn el.firstChild.href;\n}\n\nfunction formatType(url) {\n\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n\treturn url && !type ? getTypeFromFile(url) : type;\n}\n\nfunction getMimeFromType(type) {\n\n\tif (typeof type !== 'string') {\n\t\tthrow new Error('`type` argument must be a string');\n\t}\n\n\treturn type && type.indexOf(';') > -1 ? type.substr(0, type.indexOf(';')) : type;\n}\n\nfunction getTypeFromFile(url) {\n\n\tif (typeof url !== 'string') {\n\t\tthrow new Error('`url` argument must be a string');\n\t}\n\n\tfor (var i = 0, total = typeChecks.length; i < total; i++) {\n\t\tvar type = typeChecks[i](url);\n\n\t\tif (type) {\n\t\t\treturn type;\n\t\t}\n\t}\n\n\tvar ext = getExtension(url),\n\t    normalizedExt = normalizeExtension(ext);\n\n\tvar mime = 'video/mp4';\n\n\tif (normalizedExt) {\n\t\tif (~['mp4', 'm4v', 'ogg', 'ogv', 'webm', 'flv', 'mpeg'].indexOf(normalizedExt)) {\n\t\t\tmime = 'video/' + normalizedExt;\n\t\t} else if ('mov' === normalizedExt) {\n\t\t\tmime = 'video/quicktime';\n\t\t} else if (~['mp3', 'oga', 'wav', 'mid', 'midi'].indexOf(normalizedExt)) {\n\t\t\tmime = 'audio/' + normalizedExt;\n\t\t}\n\t}\n\n\treturn mime;\n}\n\nfunction getExtension(url) {\n\n\tif (typeof url !== 'string') {\n\t\tthrow new Error('`url` argument must be a string');\n\t}\n\n\tvar baseUrl = url.split('?')[0],\n\t    baseName = baseUrl.split('\\\\').pop().split('/').pop();\n\treturn ~baseName.indexOf('.') ? baseName.substring(baseName.lastIndexOf('.') + 1) : '';\n}\n\nfunction normalizeExtension(extension) {\n\n\tif (typeof extension !== 'string') {\n\t\tthrow new Error('`extension` argument must be a string');\n\t}\n\n\tswitch (extension) {\n\t\tcase 'mp4':\n\t\tcase 'm4v':\n\t\t\treturn 'mp4';\n\t\tcase 'webm':\n\t\tcase 'webma':\n\t\tcase 'webmv':\n\t\t\treturn 'webm';\n\t\tcase 'ogg':\n\t\tcase 'oga':\n\t\tcase 'ogv':\n\t\t\treturn 'ogg';\n\t\tdefault:\n\t\t\treturn extension;\n\t}\n}\n\n_mejs2.default.Utils = _mejs2.default.Utils || {};\n_mejs2.default.Utils.typeChecks = typeChecks;\n_mejs2.default.Utils.absolutizeUrl = absolutizeUrl;\n_mejs2.default.Utils.formatType = formatType;\n_mejs2.default.Utils.getMimeFromType = getMimeFromType;\n_mejs2.default.Utils.getTypeFromFile = getTypeFromFile;\n_mejs2.default.Utils.getExtension = getExtension;\n_mejs2.default.Utils.normalizeExtension = normalizeExtension;\n\n},{\"28\":28,\"8\":8}],31:[function(_dereq_,module,exports){\n'use strict';\n\nvar _document = _dereq_(2);\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _promisePolyfill = _dereq_(4);\n\nvar _promisePolyfill2 = _interopRequireDefault(_promisePolyfill);\n\nvar _svg4everybody = _dereq_(5);\n\nvar _svg4everybody2 = _interopRequireDefault(_svg4everybody);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function (arr) {\n\tarr.forEach(function (item) {\n\t\tif (item.hasOwnProperty('remove')) {\n\t\t\treturn;\n\t\t}\n\t\tObject.defineProperty(item, 'remove', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\twritable: true,\n\t\t\tvalue: function remove() {\n\t\t\t\tthis.parentNode.removeChild(this);\n\t\t\t}\n\t\t});\n\t});\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\n\n(function () {\n\n\tif (typeof window.CustomEvent === 'function') {\n\t\treturn false;\n\t}\n\n\tfunction CustomEvent(event, params) {\n\t\tparams = params || { bubbles: false, cancelable: false, detail: undefined };\n\t\tvar evt = _document2.default.createEvent('CustomEvent');\n\t\tevt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n\t\treturn evt;\n\t}\n\n\tCustomEvent.prototype = window.Event.prototype;\n\twindow.CustomEvent = CustomEvent;\n})();\n\nif (typeof Object.assign !== 'function') {\n\tObject.assign = function (target) {\n\n\t\tif (target === null || target === undefined) {\n\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\t\t}\n\n\t\tvar to = Object(target);\n\n\t\tfor (var index = 1, total = arguments.length; index < total; index++) {\n\t\t\tvar nextSource = arguments[index];\n\n\t\t\tif (nextSource !== null) {\n\t\t\t\tfor (var nextKey in nextSource) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n\t\t\t\t\t\tto[nextKey] = nextSource[nextKey];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn to;\n\t};\n}\n\nif (!String.prototype.startsWith) {\n\tString.prototype.startsWith = function (searchString, position) {\n\t\tposition = position || 0;\n\t\treturn this.substr(position, searchString.length) === searchString;\n\t};\n}\n\nif (!Element.prototype.matches) {\n\tElement.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {\n\t\tvar matches = (this.document || this.ownerDocument).querySelectorAll(s),\n\t\t    i = matches.length - 1;\n\t\twhile (--i >= 0 && matches.item(i) !== this) {}\n\t\treturn i > -1;\n\t};\n}\n\nif (window.Element && !Element.prototype.closest) {\n\tElement.prototype.closest = function (s) {\n\t\tvar matches = (this.document || this.ownerDocument).querySelectorAll(s),\n\t\t    i = void 0,\n\t\t    el = this;\n\t\tdo {\n\t\t\ti = matches.length;\n\t\t\twhile (--i >= 0 && matches.item(i) !== el) {}\n\t\t} while (i < 0 && (el = el.parentElement));\n\t\treturn el;\n\t};\n}\n\n(function () {\n\tvar lastTime = 0;\n\tvar vendors = ['ms', 'moz', 'webkit', 'o'];\n\tfor (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n\t\twindow.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n\t\twindow.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n\t}\n\n\tif (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback) {\n\t\tvar currTime = new Date().getTime();\n\t\tvar timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t\tvar id = window.setTimeout(function () {\n\t\t\tcallback(currTime + timeToCall);\n\t\t}, timeToCall);\n\t\tlastTime = currTime + timeToCall;\n\t\treturn id;\n\t};\n\n\tif (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n\t\tclearTimeout(id);\n\t};\n})();\n\nif (/firefox/i.test(navigator.userAgent)) {\n\tvar getComputedStyle = window.getComputedStyle;\n\twindow.getComputedStyle = function (el, pseudoEl) {\n\t\tvar t = getComputedStyle(el, pseudoEl);\n\t\treturn t === null ? { getPropertyValue: function getPropertyValue() {} } : t;\n\t};\n}\n\nif (!window.Promise) {\n\twindow.Promise = _promisePolyfill2.default;\n}\n\n(0, _svg4everybody2.default)();\n\n(function (constructor) {\n\tif (constructor && constructor.prototype && constructor.prototype.children === null) {\n\t\tObject.defineProperty(constructor.prototype, 'children', {\n\t\t\tget: function get() {\n\t\t\t\tvar i = 0,\n\t\t\t\t    node = void 0,\n\t\t\t\t    nodes = this.childNodes,\n\t\t\t\t    children = [];\n\t\t\t\twhile (node = nodes[i++]) {\n\t\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\t\tchildren.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn children;\n\t\t\t}\n\t\t});\n\t}\n})(window.Node || window.Element);\n\n},{\"2\":2,\"4\":4,\"5\":5}],32:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.isDropFrame = isDropFrame;\nexports.secondsToTimeCode = secondsToTimeCode;\nexports.timeCodeToSeconds = timeCodeToSeconds;\nexports.calculateTimeFormat = calculateTimeFormat;\nexports.convertSMPTEtoSeconds = convertSMPTEtoSeconds;\n\nvar _mejs = _dereq_(8);\n\nvar _mejs2 = _interopRequireDefault(_mejs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isDropFrame() {\n\tvar fps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25;\n\n\treturn !(fps % 1 === 0);\n}\nfunction secondsToTimeCode(time) {\n\tvar forceHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\tvar showFrameCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\tvar fps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n\tvar secondsDecimalLength = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\tvar timeFormat = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'hh:mm:ss';\n\n\n\ttime = !time || typeof time !== 'number' || time < 0 ? 0 : time;\n\n\tvar dropFrames = Math.round(fps * 0.066666),\n\t    timeBase = Math.round(fps),\n\t    framesPer24Hours = Math.round(fps * 3600) * 24,\n\t    framesPer10Minutes = Math.round(fps * 600),\n\t    frameSep = isDropFrame(fps) ? ';' : ':',\n\t    hours = void 0,\n\t    minutes = void 0,\n\t    seconds = void 0,\n\t    frames = void 0,\n\t    f = Math.round(time * fps);\n\n\tif (isDropFrame(fps)) {\n\n\t\tif (f < 0) {\n\t\t\tf = framesPer24Hours + f;\n\t\t}\n\n\t\tf = f % framesPer24Hours;\n\n\t\tvar d = Math.floor(f / framesPer10Minutes);\n\t\tvar m = f % framesPer10Minutes;\n\t\tf = f + dropFrames * 9 * d;\n\t\tif (m > dropFrames) {\n\t\t\tf = f + dropFrames * Math.floor((m - dropFrames) / Math.round(timeBase * 60 - dropFrames));\n\t\t}\n\n\t\tvar timeBaseDivision = Math.floor(f / timeBase);\n\n\t\thours = Math.floor(Math.floor(timeBaseDivision / 60) / 60);\n\t\tminutes = Math.floor(timeBaseDivision / 60) % 60;\n\n\t\tif (showFrameCount) {\n\t\t\tseconds = timeBaseDivision % 60;\n\t\t} else {\n\t\t\tseconds = Math.floor(f / timeBase % 60).toFixed(secondsDecimalLength);\n\t\t}\n\t} else {\n\t\thours = Math.floor(time / 3600) % 24;\n\t\tminutes = Math.floor(time / 60) % 60;\n\t\tif (showFrameCount) {\n\t\t\tseconds = Math.floor(time % 60);\n\t\t} else {\n\t\t\tseconds = Math.floor(time % 60).toFixed(secondsDecimalLength);\n\t\t}\n\t}\n\thours = hours <= 0 ? 0 : hours;\n\tminutes = minutes <= 0 ? 0 : minutes;\n\tseconds = seconds <= 0 ? 0 : seconds;\n\n\tseconds = seconds === 60 ? 0 : seconds;\n\tminutes = minutes === 60 ? 0 : minutes;\n\n\tvar timeFormatFrags = timeFormat.split(':');\n\tvar timeFormatSettings = {};\n\tfor (var i = 0, total = timeFormatFrags.length; i < total; ++i) {\n\t\tvar unique = '';\n\t\tfor (var j = 0, t = timeFormatFrags[i].length; j < t; j++) {\n\t\t\tif (unique.indexOf(timeFormatFrags[i][j]) < 0) {\n\t\t\t\tunique += timeFormatFrags[i][j];\n\t\t\t}\n\t\t}\n\t\tif (~['f', 's', 'm', 'h'].indexOf(unique)) {\n\t\t\ttimeFormatSettings[unique] = timeFormatFrags[i].length;\n\t\t}\n\t}\n\n\tvar result = forceHours || hours > 0 ? (hours < 10 && timeFormatSettings.h > 1 ? '0' + hours : hours) + ':' : '';\n\tresult += (minutes < 10 && timeFormatSettings.m > 1 ? '0' + minutes : minutes) + ':';\n\tresult += '' + (seconds < 10 && timeFormatSettings.s > 1 ? '0' + seconds : seconds);\n\n\tif (showFrameCount) {\n\t\tframes = (f % timeBase).toFixed(0);\n\t\tframes = frames <= 0 ? 0 : frames;\n\t\tresult += frames < 10 && timeFormatSettings.f ? frameSep + '0' + frames : '' + frameSep + frames;\n\t}\n\n\treturn result;\n}\n\nfunction timeCodeToSeconds(time) {\n\tvar fps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 25;\n\n\n\tif (typeof time !== 'string') {\n\t\tthrow new TypeError('Time must be a string');\n\t}\n\n\tif (time.indexOf(';') > 0) {\n\t\ttime = time.replace(';', ':');\n\t}\n\n\tif (!/\\d{2}(\\:\\d{2}){0,3}/i.test(time)) {\n\t\tthrow new TypeError('Time code must have the format `00:00:00`');\n\t}\n\n\tvar parts = time.split(':');\n\n\tvar output = void 0,\n\t    hours = 0,\n\t    minutes = 0,\n\t    seconds = 0,\n\t    frames = 0,\n\t    totalMinutes = 0,\n\t    dropFrames = Math.round(fps * 0.066666),\n\t    timeBase = Math.round(fps),\n\t    hFrames = timeBase * 3600,\n\t    mFrames = timeBase * 60;\n\n\tswitch (parts.length) {\n\t\tdefault:\n\t\tcase 1:\n\t\t\tseconds = parseInt(parts[0], 10);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tminutes = parseInt(parts[0], 10);\n\t\t\tseconds = parseInt(parts[1], 10);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\thours = parseInt(parts[0], 10);\n\t\t\tminutes = parseInt(parts[1], 10);\n\t\t\tseconds = parseInt(parts[2], 10);\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\thours = parseInt(parts[0], 10);\n\t\t\tminutes = parseInt(parts[1], 10);\n\t\t\tseconds = parseInt(parts[2], 10);\n\t\t\tframes = parseInt(parts[3], 10);\n\t\t\tbreak;\n\t}\n\n\tif (isDropFrame(fps)) {\n\t\ttotalMinutes = 60 * hours + minutes;\n\t\toutput = hFrames * hours + mFrames * minutes + timeBase * seconds + frames - dropFrames * (totalMinutes - Math.floor(totalMinutes / 10));\n\t} else {\n\t\toutput = (hFrames * hours + mFrames * minutes + fps * seconds + frames) / fps;\n\t}\n\n\treturn parseFloat(output.toFixed(3));\n}\n\nfunction calculateTimeFormat(time, options) {\n\tvar fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 25;\n\n\n\ttime = !time || typeof time !== 'number' || time < 0 ? 0 : time;\n\n\tvar hours = Math.floor(time / 3600) % 24,\n\t    minutes = Math.floor(time / 60) % 60,\n\t    seconds = Math.floor(time % 60),\n\t    frames = Math.floor((time % 1 * fps).toFixed(3)),\n\t    lis = [[frames, 'f'], [seconds, 's'], [minutes, 'm'], [hours, 'h']];\n\n\tvar format = options.timeFormat,\n\t    firstTwoPlaces = format[1] === format[0],\n\t    separatorIndex = firstTwoPlaces ? 2 : 1,\n\t    separator = format.length < separatorIndex ? format[separatorIndex] : ':',\n\t    firstChar = format[0],\n\t    required = false;\n\n\tfor (var i = 0, len = lis.length; i < len; i++) {\n\t\tif (~format.indexOf(lis[i][1])) {\n\t\t\trequired = true;\n\t\t} else if (required) {\n\t\t\tvar hasNextValue = false;\n\t\t\tfor (var j = i; j < len; j++) {\n\t\t\t\tif (lis[j][0] > 0) {\n\t\t\t\t\thasNextValue = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!hasNextValue) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!firstTwoPlaces) {\n\t\t\t\tformat = firstChar + format;\n\t\t\t}\n\t\t\tformat = lis[i][1] + separator + format;\n\t\t\tif (firstTwoPlaces) {\n\t\t\t\tformat = lis[i][1] + format;\n\t\t\t}\n\t\t\tfirstChar = lis[i][1];\n\t\t}\n\t}\n\n\toptions.timeFormat = format;\n}\n\nfunction convertSMPTEtoSeconds(SMPTE) {\n\n\tif (typeof SMPTE !== 'string') {\n\t\tthrow new TypeError('Argument must be a string value');\n\t}\n\n\tSMPTE = SMPTE.replace(',', '.');\n\n\tvar decimalLen = ~SMPTE.indexOf('.') ? SMPTE.split('.')[1].length : 0;\n\n\tvar secs = 0,\n\t    multiplier = 1;\n\n\tSMPTE = SMPTE.split(':').reverse();\n\n\tfor (var i = 0, total = SMPTE.length; i < total; i++) {\n\t\tmultiplier = 1;\n\t\tif (i > 0) {\n\t\t\tmultiplier = Math.pow(60, i);\n\t\t}\n\t\tsecs += Number(SMPTE[i]) * multiplier;\n\t}\n\treturn Number(secs.toFixed(decimalLen));\n}\n\n_mejs2.default.Utils = _mejs2.default.Utils || {};\n_mejs2.default.Utils.secondsToTimeCode = secondsToTimeCode;\n_mejs2.default.Utils.timeCodeToSeconds = timeCodeToSeconds;\n_mejs2.default.Utils.calculateTimeFormat = calculateTimeFormat;\n_mejs2.default.Utils.convertSMPTEtoSeconds = convertSMPTEtoSeconds;\n\n},{\"8\":8}]},{},[31,7,6,16,24,21,20,22,23,25,17,19,18,10,11,12,13,14,15]);\n", "module.exports = require('./build/mediaelement-and-player.js');\n", "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\nconst linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n\nconst buttonClickSelector = {\n  selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n  exclude: \"form button\"\n};\n\nconst inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n\nconst formSubmitSelector = \"form:not([data-turbo=true])\";\n\nconst formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n\nconst formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n\nconst formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n\nconst fileInputSelector = \"input[name][type=file]:not([disabled])\";\n\nconst linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n\nconst buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n\nlet nonce = null;\n\nconst loadCSPNonce = () => {\n  const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n  return nonce = metaTag && metaTag.content;\n};\n\nconst cspNonce = () => nonce || loadCSPNonce();\n\nconst m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nconst matches = function(element, selector) {\n  if (selector.exclude) {\n    return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n  } else {\n    return m.call(element, selector);\n  }\n};\n\nconst EXPANDO = \"_ujsData\";\n\nconst getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n\nconst setData = function(element, key, value) {\n  if (!element[EXPANDO]) {\n    element[EXPANDO] = {};\n  }\n  return element[EXPANDO][key] = value;\n};\n\nconst $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n\nconst isContentEditable = function(element) {\n  var isEditable = false;\n  do {\n    if (element.isContentEditable) {\n      isEditable = true;\n      break;\n    }\n    element = element.parentElement;\n  } while (element);\n  return isEditable;\n};\n\nconst csrfToken = () => {\n  const meta = document.querySelector(\"meta[name=csrf-token]\");\n  return meta && meta.content;\n};\n\nconst csrfParam = () => {\n  const meta = document.querySelector(\"meta[name=csrf-param]\");\n  return meta && meta.content;\n};\n\nconst CSRFProtection = xhr => {\n  const token = csrfToken();\n  if (token) {\n    return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n  }\n};\n\nconst refreshCSRFTokens = () => {\n  const token = csrfToken();\n  const param = csrfParam();\n  if (token && param) {\n    return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n  }\n};\n\nconst AcceptHeaders = {\n  \"*\": \"*/*\",\n  text: \"text/plain\",\n  html: \"text/html\",\n  xml: \"application/xml, text/xml\",\n  json: \"application/json, text/javascript\",\n  script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\n\nconst ajax = options => {\n  options = prepareOptions(options);\n  var xhr = createXHR(options, (function() {\n    const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n    if (Math.floor(xhr.status / 100) === 2) {\n      if (typeof options.success === \"function\") {\n        options.success(response, xhr.statusText, xhr);\n      }\n    } else {\n      if (typeof options.error === \"function\") {\n        options.error(response, xhr.statusText, xhr);\n      }\n    }\n    return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n  }));\n  if (options.beforeSend && !options.beforeSend(xhr, options)) {\n    return false;\n  }\n  if (xhr.readyState === XMLHttpRequest.OPENED) {\n    return xhr.send(options.data);\n  }\n};\n\nvar prepareOptions = function(options) {\n  options.url = options.url || location.href;\n  options.type = options.type.toUpperCase();\n  if (options.type === \"GET\" && options.data) {\n    if (options.url.indexOf(\"?\") < 0) {\n      options.url += \"?\" + options.data;\n    } else {\n      options.url += \"&\" + options.data;\n    }\n  }\n  if (!(options.dataType in AcceptHeaders)) {\n    options.dataType = \"*\";\n  }\n  options.accept = AcceptHeaders[options.dataType];\n  if (options.dataType !== \"*\") {\n    options.accept += \", */*; q=0.01\";\n  }\n  return options;\n};\n\nvar createXHR = function(options, done) {\n  const xhr = new XMLHttpRequest;\n  xhr.open(options.type, options.url, true);\n  xhr.setRequestHeader(\"Accept\", options.accept);\n  if (typeof options.data === \"string\") {\n    xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n  }\n  if (!options.crossDomain) {\n    xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    CSRFProtection(xhr);\n  }\n  xhr.withCredentials = !!options.withCredentials;\n  xhr.onreadystatechange = function() {\n    if (xhr.readyState === XMLHttpRequest.DONE) {\n      return done(xhr);\n    }\n  };\n  return xhr;\n};\n\nvar processResponse = function(response, type) {\n  if (typeof response === \"string\" && typeof type === \"string\") {\n    if (type.match(/\\bjson\\b/)) {\n      try {\n        response = JSON.parse(response);\n      } catch (error) {}\n    } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n      const script = document.createElement(\"script\");\n      script.setAttribute(\"nonce\", cspNonce());\n      script.text = response;\n      document.head.appendChild(script).parentNode.removeChild(script);\n    } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n      const parser = new DOMParser;\n      type = type.replace(/;.+/, \"\");\n      try {\n        response = parser.parseFromString(response, type);\n      } catch (error1) {}\n    }\n  }\n  return response;\n};\n\nconst href = element => element.href;\n\nconst isCrossDomain = function(url) {\n  const originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href;\n  const urlAnchor = document.createElement(\"a\");\n  try {\n    urlAnchor.href = url;\n    return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n  } catch (e) {\n    return true;\n  }\n};\n\nlet preventDefault;\n\nlet {CustomEvent: CustomEvent} = window;\n\nif (typeof CustomEvent !== \"function\") {\n  CustomEvent = function(event, params) {\n    const evt = document.createEvent(\"CustomEvent\");\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    return evt;\n  };\n  CustomEvent.prototype = window.Event.prototype;\n  ({preventDefault: preventDefault} = CustomEvent.prototype);\n  CustomEvent.prototype.preventDefault = function() {\n    const result = preventDefault.call(this);\n    if (this.cancelable && !this.defaultPrevented) {\n      Object.defineProperty(this, \"defaultPrevented\", {\n        get() {\n          return true;\n        }\n      });\n    }\n    return result;\n  };\n}\n\nconst fire = (obj, name, data) => {\n  const event = new CustomEvent(name, {\n    bubbles: true,\n    cancelable: true,\n    detail: data\n  });\n  obj.dispatchEvent(event);\n  return !event.defaultPrevented;\n};\n\nconst stopEverything = e => {\n  fire(e.target, \"ujs:everythingStopped\");\n  e.preventDefault();\n  e.stopPropagation();\n  e.stopImmediatePropagation();\n};\n\nconst delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n  let {target: target} = e;\n  while (!!(target instanceof Element) && !matches(target, selector)) {\n    target = target.parentNode;\n  }\n  if (target instanceof Element && handler.call(target, e) === false) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n}));\n\nconst toArray = e => Array.prototype.slice.call(e);\n\nconst serializeElement = (element, additionalParam) => {\n  let inputs = [ element ];\n  if (matches(element, \"form\")) {\n    inputs = toArray(element.elements);\n  }\n  const params = [];\n  inputs.forEach((function(input) {\n    if (!input.name || input.disabled) {\n      return;\n    }\n    if (matches(input, \"fieldset[disabled] *\")) {\n      return;\n    }\n    if (matches(input, \"select\")) {\n      toArray(input.options).forEach((function(option) {\n        if (option.selected) {\n          params.push({\n            name: input.name,\n            value: option.value\n          });\n        }\n      }));\n    } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n      params.push({\n        name: input.name,\n        value: input.value\n      });\n    }\n  }));\n  if (additionalParam) {\n    params.push(additionalParam);\n  }\n  return params.map((function(param) {\n    if (param.name) {\n      return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n    } else {\n      return param;\n    }\n  })).join(\"&\");\n};\n\nconst formElements = (form, selector) => {\n  if (matches(form, \"form\")) {\n    return toArray(form.elements).filter((el => matches(el, selector)));\n  } else {\n    return toArray(form.querySelectorAll(selector));\n  }\n};\n\nconst handleConfirmWithRails = rails => function(e) {\n  if (!allowAction(this, rails)) {\n    stopEverything(e);\n  }\n};\n\nconst confirm = (message, element) => window.confirm(message);\n\nvar allowAction = function(element, rails) {\n  let callback;\n  const message = element.getAttribute(\"data-confirm\");\n  if (!message) {\n    return true;\n  }\n  let answer = false;\n  if (fire(element, \"confirm\")) {\n    try {\n      answer = rails.confirm(message, element);\n    } catch (error) {}\n    callback = fire(element, \"confirm:complete\", [ answer ]);\n  }\n  return answer && callback;\n};\n\nconst handleDisabledElement = function(e) {\n  const element = this;\n  if (element.disabled) {\n    stopEverything(e);\n  }\n};\n\nconst enableElement = e => {\n  let element;\n  if (e instanceof Event) {\n    if (isXhrRedirect(e)) {\n      return;\n    }\n    element = e.target;\n  } else {\n    element = e;\n  }\n  if (isContentEditable(element)) {\n    return;\n  }\n  if (matches(element, linkDisableSelector)) {\n    return enableLinkElement(element);\n  } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n    return enableFormElement(element);\n  } else if (matches(element, formSubmitSelector)) {\n    return enableFormElements(element);\n  }\n};\n\nconst disableElement = e => {\n  const element = e instanceof Event ? e.target : e;\n  if (isContentEditable(element)) {\n    return;\n  }\n  if (matches(element, linkDisableSelector)) {\n    return disableLinkElement(element);\n  } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n    return disableFormElement(element);\n  } else if (matches(element, formSubmitSelector)) {\n    return disableFormElements(element);\n  }\n};\n\nvar disableLinkElement = function(element) {\n  if (getData(element, \"ujs:disabled\")) {\n    return;\n  }\n  const replacement = element.getAttribute(\"data-disable-with\");\n  if (replacement != null) {\n    setData(element, \"ujs:enable-with\", element.innerHTML);\n    element.innerHTML = replacement;\n  }\n  element.addEventListener(\"click\", stopEverything);\n  return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableLinkElement = function(element) {\n  const originalText = getData(element, \"ujs:enable-with\");\n  if (originalText != null) {\n    element.innerHTML = originalText;\n    setData(element, \"ujs:enable-with\", null);\n  }\n  element.removeEventListener(\"click\", stopEverything);\n  return setData(element, \"ujs:disabled\", null);\n};\n\nvar disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n\nvar disableFormElement = function(element) {\n  if (getData(element, \"ujs:disabled\")) {\n    return;\n  }\n  const replacement = element.getAttribute(\"data-disable-with\");\n  if (replacement != null) {\n    if (matches(element, \"button\")) {\n      setData(element, \"ujs:enable-with\", element.innerHTML);\n      element.innerHTML = replacement;\n    } else {\n      setData(element, \"ujs:enable-with\", element.value);\n      element.value = replacement;\n    }\n  }\n  element.disabled = true;\n  return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n\nvar enableFormElement = function(element) {\n  const originalText = getData(element, \"ujs:enable-with\");\n  if (originalText != null) {\n    if (matches(element, \"button\")) {\n      element.innerHTML = originalText;\n    } else {\n      element.value = originalText;\n    }\n    setData(element, \"ujs:enable-with\", null);\n  }\n  element.disabled = false;\n  return setData(element, \"ujs:disabled\", null);\n};\n\nvar isXhrRedirect = function(event) {\n  const xhr = event.detail ? event.detail[0] : undefined;\n  return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\n\nconst handleMethodWithRails = rails => function(e) {\n  const link = this;\n  const method = link.getAttribute(\"data-method\");\n  if (!method) {\n    return;\n  }\n  if (isContentEditable(this)) {\n    return;\n  }\n  const href = rails.href(link);\n  const csrfToken$1 = csrfToken();\n  const csrfParam$1 = csrfParam();\n  const form = document.createElement(\"form\");\n  let formContent = `<input name='_method' value='${method}' type='hidden' />`;\n  if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n    formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;\n  }\n  formContent += '<input type=\"submit\" />';\n  form.method = \"post\";\n  form.action = href;\n  form.target = link.target;\n  form.innerHTML = formContent;\n  form.style.display = \"none\";\n  document.body.appendChild(form);\n  form.querySelector('[type=\"submit\"]').click();\n  stopEverything(e);\n};\n\nconst isRemote = function(element) {\n  const value = element.getAttribute(\"data-remote\");\n  return value != null && value !== \"false\";\n};\n\nconst handleRemoteWithRails = rails => function(e) {\n  let data, method, url;\n  const element = this;\n  if (!isRemote(element)) {\n    return true;\n  }\n  if (!fire(element, \"ajax:before\")) {\n    fire(element, \"ajax:stopped\");\n    return false;\n  }\n  if (isContentEditable(element)) {\n    fire(element, \"ajax:stopped\");\n    return false;\n  }\n  const withCredentials = element.getAttribute(\"data-with-credentials\");\n  const dataType = element.getAttribute(\"data-type\") || \"script\";\n  if (matches(element, formSubmitSelector)) {\n    const button = getData(element, \"ujs:submit-button\");\n    method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n    url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n    if (method.toUpperCase() === \"GET\") {\n      url = url.replace(/\\?.*$/, \"\");\n    }\n    if (element.enctype === \"multipart/form-data\") {\n      data = new FormData(element);\n      if (button != null) {\n        data.append(button.name, button.value);\n      }\n    } else {\n      data = serializeElement(element, button);\n    }\n    setData(element, \"ujs:submit-button\", null);\n    setData(element, \"ujs:submit-button-formmethod\", null);\n    setData(element, \"ujs:submit-button-formaction\", null);\n  } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n    method = element.getAttribute(\"data-method\");\n    url = element.getAttribute(\"data-url\");\n    data = serializeElement(element, element.getAttribute(\"data-params\"));\n  } else {\n    method = element.getAttribute(\"data-method\");\n    url = rails.href(element);\n    data = element.getAttribute(\"data-params\");\n  }\n  ajax({\n    type: method || \"GET\",\n    url: url,\n    data: data,\n    dataType: dataType,\n    beforeSend(xhr, options) {\n      if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n        return fire(element, \"ajax:send\", [ xhr ]);\n      } else {\n        fire(element, \"ajax:stopped\");\n        return false;\n      }\n    },\n    success(...args) {\n      return fire(element, \"ajax:success\", args);\n    },\n    error(...args) {\n      return fire(element, \"ajax:error\", args);\n    },\n    complete(...args) {\n      return fire(element, \"ajax:complete\", args);\n    },\n    crossDomain: isCrossDomain(url),\n    withCredentials: withCredentials != null && withCredentials !== \"false\"\n  });\n  stopEverything(e);\n};\n\nconst formSubmitButtonClick = function(e) {\n  const button = this;\n  const {form: form} = button;\n  if (!form) {\n    return;\n  }\n  if (button.name) {\n    setData(form, \"ujs:submit-button\", {\n      name: button.name,\n      value: button.value\n    });\n  }\n  setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n  setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n  return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\n\nconst preventInsignificantClick = function(e) {\n  const link = this;\n  const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n  const data = link.getAttribute(\"data-params\");\n  const metaClick = e.metaKey || e.ctrlKey;\n  const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n  const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n  if (nonPrimaryMouseClick || insignificantMetaClick) {\n    e.stopImmediatePropagation();\n  }\n};\n\nconst Rails = {\n  $: $,\n  ajax: ajax,\n  buttonClickSelector: buttonClickSelector,\n  buttonDisableSelector: buttonDisableSelector,\n  confirm: confirm,\n  cspNonce: cspNonce,\n  csrfToken: csrfToken,\n  csrfParam: csrfParam,\n  CSRFProtection: CSRFProtection,\n  delegate: delegate,\n  disableElement: disableElement,\n  enableElement: enableElement,\n  fileInputSelector: fileInputSelector,\n  fire: fire,\n  formElements: formElements,\n  formEnableSelector: formEnableSelector,\n  formDisableSelector: formDisableSelector,\n  formInputClickSelector: formInputClickSelector,\n  formSubmitButtonClick: formSubmitButtonClick,\n  formSubmitSelector: formSubmitSelector,\n  getData: getData,\n  handleDisabledElement: handleDisabledElement,\n  href: href,\n  inputChangeSelector: inputChangeSelector,\n  isCrossDomain: isCrossDomain,\n  linkClickSelector: linkClickSelector,\n  linkDisableSelector: linkDisableSelector,\n  loadCSPNonce: loadCSPNonce,\n  matches: matches,\n  preventInsignificantClick: preventInsignificantClick,\n  refreshCSRFTokens: refreshCSRFTokens,\n  serializeElement: serializeElement,\n  setData: setData,\n  stopEverything: stopEverything\n};\n\nconst handleConfirm = handleConfirmWithRails(Rails);\n\nRails.handleConfirm = handleConfirm;\n\nconst handleMethod = handleMethodWithRails(Rails);\n\nRails.handleMethod = handleMethod;\n\nconst handleRemote = handleRemoteWithRails(Rails);\n\nRails.handleRemote = handleRemote;\n\nconst start = function() {\n  if (window._rails_loaded) {\n    throw new Error(\"rails-ujs has already been loaded!\");\n  }\n  window.addEventListener(\"pageshow\", (function() {\n    $(formEnableSelector).forEach((function(el) {\n      if (getData(el, \"ujs:disabled\")) {\n        enableElement(el);\n      }\n    }));\n    $(linkDisableSelector).forEach((function(el) {\n      if (getData(el, \"ujs:disabled\")) {\n        enableElement(el);\n      }\n    }));\n  }));\n  delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n  delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n  delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n  delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n  delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n  delegate(document, linkClickSelector, \"click\", handleConfirm);\n  delegate(document, linkClickSelector, \"click\", disableElement);\n  delegate(document, linkClickSelector, \"click\", handleRemote);\n  delegate(document, linkClickSelector, \"click\", handleMethod);\n  delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n  delegate(document, buttonClickSelector, \"click\", handleConfirm);\n  delegate(document, buttonClickSelector, \"click\", disableElement);\n  delegate(document, buttonClickSelector, \"click\", handleRemote);\n  delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n  delegate(document, inputChangeSelector, \"change\", handleConfirm);\n  delegate(document, inputChangeSelector, \"change\", handleRemote);\n  delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n  delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n  delegate(document, formSubmitSelector, \"submit\", handleRemote);\n  delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n  delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n  delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n  delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n  delegate(document, formInputClickSelector, \"click\", handleConfirm);\n  delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n  document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n  document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n  return window._rails_loaded = true;\n};\n\nRails.start = start;\n\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n  if (jQuery.rails) {\n    throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n  }\n  jQuery.rails = Rails;\n  jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n    if (!options.crossDomain) {\n      return CSRFProtection(xhr);\n    }\n  }));\n}\n\nexport { Rails as default };\n", "var adapters = {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\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  recordMessage() {\n    this.pingedAt = now();\n  }\n  recordConnect() {\n    this.reconnectAttempts = 0;\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    remote: \"remote\"\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      const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n      if (this.webSocket) {\n        this.uninstallEventHandlers();\n      }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\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  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0;\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    this.monitor.recordMessage();\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\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 null;\n\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\", {\n          reconnected: true\n        });\n      } else {\n        return this.subscriptions.notify(identifier, \"connected\", {\n          reconnected: false\n        });\n      }\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    this.subprotocols = [];\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  addSubProtocol(subprotocol) {\n    this.subprotocols = [ ...this.subprotocols, subprotocol ];\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", "import * as ActionCable from '@rails/actioncable'\n\nActionCable.logger.enabled = true\n\nwindow.App || (window.App = {});\nwindow.App.cable = ActionCable.createConsumer();\n", "/*!\nTurbo 8.0.23\nCopyright \u00A9 2026 37signals LLC\n */\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\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\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\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}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\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\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\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}\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}\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      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 16).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\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}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\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\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\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}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  const link = findClosestRecursively(target, \"a[href], a[xlink\\\\:href]\");\n\n  if (!link) return null\n  if (link.href.startsWith(\"#\")) return null\n  if (link.hasAttribute(\"download\")) return null\n\n  const linkTarget = link.getAttribute(\"target\");\n  if (linkTarget && linkTarget !== \"_self\") return null\n\n  return link\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = addTrailingSlash(url.origin + url.pathname);\n  return addTrailingSlash(baseURL.href) === prefix || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return window.fetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\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}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\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    } finally {\n      this.delegate.requestFinished(this);\n    }\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    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\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    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\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\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst identity = key => key;\n\nclass LRUCache {\n  keys = []\n  entries = {}\n  #toCacheKey\n\n  constructor(size, toCacheKey = identity) {\n    this.size = size;\n    this.#toCacheKey = toCacheKey;\n  }\n\n  has(key) {\n    return this.#toCacheKey(key) in this.entries\n  }\n\n  get(key) {\n    if (this.has(key)) {\n      const entry = this.read(key);\n      this.touch(key);\n      return entry\n    }\n  }\n\n  put(key, entry) {\n    this.write(key, entry);\n    this.touch(key);\n    return entry\n  }\n\n  clear() {\n    for (const key of Object.keys(this.entries)) {\n      this.evict(key);\n    }\n  }\n\n  // Private\n\n  read(key) {\n    return this.entries[this.#toCacheKey(key)]\n  }\n\n  write(key, entry) {\n    this.entries[this.#toCacheKey(key)] = entry;\n  }\n\n  touch(key) {\n    key = this.#toCacheKey(key);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      this.evict(key);\n    }\n  }\n\n  evict(key) {\n    delete this.entries[key];\n  }\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache extends LRUCache {\n  #prefetchTimeout = null\n  #maxAges = {}\n\n  constructor(size = 1, prefetchDelay = PREFETCH_DELAY) {\n    super(size, toCacheKey);\n    this.prefetchDelay = prefetchDelay;\n  }\n\n  putLater(url, request, ttl) {\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.put(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, this.prefetchDelay);\n  }\n\n  put(url, request, ttl = cacheTtl) {\n    super.put(url, request);\n    this.#maxAges[toCacheKey(url)] = new Date(new Date().getTime() + ttl);\n  }\n\n  clear() {\n    super.clear();\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n  }\n\n  evict(key) {\n    super.evict(key);\n    delete this.#maxAges[key];\n  }\n\n  has(key) {\n    if (super.has(key)) {\n      const maxAge = this.#maxAges[toCacheKey(key)];\n\n      return maxAge && maxAge > Date.now()\n    } else {\n      return false\n    }\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\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\n  // Fetch request delegate\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\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    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    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\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\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\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}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\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\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.focusElement(element);\n      this.scrollToElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\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\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\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\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\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\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\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (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  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\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\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\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\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\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\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\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\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  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\n  constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\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\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n  /**\n   * @typedef {object} MorphContext\n   *\n   * @property {Element} target\n   * @property {Element} newContent\n   * @property {ConfigInternal} config\n   * @property {ConfigInternal['morphStyle']} morphStyle\n   * @property {ConfigInternal['ignoreActive']} ignoreActive\n   * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n   * @property {ConfigInternal['restoreFocus']} restoreFocus\n   * @property {Map<Node, Set<string>>} idMap\n   * @property {Set<string>} persistentIds\n   * @property {ConfigInternal['callbacks']} callbacks\n   * @property {ConfigInternal['head']} head\n   * @property {HTMLDivElement} pantry\n   * @property {Element[]} activeElementAndParents\n   */\n\n  //=============================================================================\n  // AND NOW IT BEGINS...\n  //=============================================================================\n\n  const noOp = () => {};\n  /**\n   * Default configuration values, updatable by users now\n   * @type {ConfigInternal}\n   */\n  const defaults = {\n    morphStyle: \"outerHTML\",\n    callbacks: {\n      beforeNodeAdded: noOp,\n      afterNodeAdded: noOp,\n      beforeNodeMorphed: noOp,\n      afterNodeMorphed: noOp,\n      beforeNodeRemoved: noOp,\n      afterNodeRemoved: noOp,\n      beforeAttributeUpdated: noOp,\n    },\n    head: {\n      style: \"merge\",\n      shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n      shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n      shouldRemove: noOp,\n      afterHeadMorphed: noOp,\n    },\n    restoreFocus: true,\n  };\n\n  /**\n   * Core idiomorph function for morphing one DOM tree to another\n   *\n   * @param {Element | Document} oldNode\n   * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n   * @param {Config} [config]\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function morph(oldNode, newContent, config = {}) {\n    oldNode = normalizeElement(oldNode);\n    const newNode = normalizeParent(newContent);\n    const ctx = createMorphContext(oldNode, newNode, config);\n\n    const morphedNodes = saveAndRestoreFocus(ctx, () => {\n      return withHeadBlocking(\n        ctx,\n        oldNode,\n        newNode,\n        /** @param {MorphContext} ctx */ (ctx) => {\n          if (ctx.morphStyle === \"innerHTML\") {\n            morphChildren(ctx, oldNode, newNode);\n            return Array.from(oldNode.childNodes);\n          } else {\n            return morphOuterHTML(ctx, oldNode, newNode);\n          }\n        },\n      );\n    });\n\n    ctx.pantry.remove();\n    return morphedNodes;\n  }\n\n  /**\n   * Morph just the outerHTML of the oldNode to the newContent\n   * We have to be careful because the oldNode could have siblings which need to be untouched\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @returns {Node[]}\n   */\n  function morphOuterHTML(ctx, oldNode, newNode) {\n    const oldParent = normalizeParent(oldNode);\n    morphChildren(\n      ctx,\n      oldParent,\n      newNode,\n      // these two optional params are the secret sauce\n      oldNode, // start point for iteration\n      oldNode.nextSibling, // end point for iteration\n    );\n    // this is safe even with siblings, because normalizeParent returns a SlicedParentNode if needed.\n    return Array.from(oldParent.childNodes);\n  }\n\n  /**\n   * @param {MorphContext} ctx\n   * @param {Function} fn\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function saveAndRestoreFocus(ctx, fn) {\n    if (!ctx.config.restoreFocus) return fn();\n    let activeElement =\n      /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n        document.activeElement\n      );\n\n    // don't bother if the active element is not an input or textarea\n    if (\n      !(\n        activeElement instanceof HTMLInputElement ||\n        activeElement instanceof HTMLTextAreaElement\n      )\n    ) {\n      return fn();\n    }\n\n    const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n    const results = fn();\n\n    if (\n      activeElementId &&\n      activeElementId !== document.activeElement?.getAttribute(\"id\")\n    ) {\n      activeElement = ctx.target.querySelector(`[id=\"${activeElementId}\"]`);\n      activeElement?.focus();\n    }\n    if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n      activeElement.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n    return results;\n  }\n\n  const morphChildren = (function () {\n    /**\n     * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n     * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n     * by using id sets, we are able to better match up with content deeper in the DOM.\n     *\n     * Basic algorithm:\n     * - for each node in the new content:\n     *   - search self and siblings for an id set match, falling back to a soft match\n     *   - if match found\n     *     - remove any nodes up to the match:\n     *       - pantry persistent nodes\n     *       - delete the rest\n     *     - morph the match\n     *   - elsif no match found, and node is persistent\n     *     - find its match by querying the old root (future) and pantry (past)\n     *     - move it and its children here\n     *     - morph it\n     *   - else\n     *     - create a new node from scratch as a last result\n     *\n     * @param {MorphContext} ctx the merge context\n     * @param {Element} oldParent the old content that we are merging the new content into\n     * @param {Element} newParent the parent element of the new content\n     * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n     * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n     */\n    function morphChildren(\n      ctx,\n      oldParent,\n      newParent,\n      insertionPoint = null,\n      endPoint = null,\n    ) {\n      // normalize\n      if (\n        oldParent instanceof HTMLTemplateElement &&\n        newParent instanceof HTMLTemplateElement\n      ) {\n        // @ts-ignore we can pretend the DocumentFragment is an Element\n        oldParent = oldParent.content;\n        // @ts-ignore ditto\n        newParent = newParent.content;\n      }\n      insertionPoint ||= oldParent.firstChild;\n\n      // run through all the new content\n      for (const newChild of newParent.childNodes) {\n        // once we reach the end of the old parent content skip to the end and insert the rest\n        if (insertionPoint && insertionPoint != endPoint) {\n          const bestMatch = findBestMatch(\n            ctx,\n            newChild,\n            insertionPoint,\n            endPoint,\n          );\n          if (bestMatch) {\n            // if the node to morph is not at the insertion point then remove/move up to it\n            if (bestMatch !== insertionPoint) {\n              removeNodesBetween(ctx, insertionPoint, bestMatch);\n            }\n            morphNode(bestMatch, newChild, ctx);\n            insertionPoint = bestMatch.nextSibling;\n            continue;\n          }\n        }\n\n        // if the matching node is elsewhere in the original content\n        if (newChild instanceof Element) {\n          // we can pretend the id is non-null because the next `.has` line will reject it if not\n          const newChildId = /** @type {String} */ (\n            newChild.getAttribute(\"id\")\n          );\n          if (ctx.persistentIds.has(newChildId)) {\n            // move it and all its children here and morph\n            const movedChild = moveBeforeById(\n              oldParent,\n              newChildId,\n              insertionPoint,\n              ctx,\n            );\n            morphNode(movedChild, newChild, ctx);\n            insertionPoint = movedChild.nextSibling;\n            continue;\n          }\n        }\n\n        // last resort: insert the new node from scratch\n        const insertedNode = createNode(\n          oldParent,\n          newChild,\n          insertionPoint,\n          ctx,\n        );\n        // could be null if beforeNodeAdded prevented insertion\n        if (insertedNode) {\n          insertionPoint = insertedNode.nextSibling;\n        }\n      }\n\n      // remove any remaining old nodes that didn't match up with new content\n      while (insertionPoint && insertionPoint != endPoint) {\n        const tempNode = insertionPoint;\n        insertionPoint = insertionPoint.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n    }\n\n    /**\n     * This performs the action of inserting a new node while handling situations where the node contains\n     * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n     *\n     * @param {Element} oldParent\n     * @param {Node} newChild\n     * @param {Node|null} insertionPoint\n     * @param {MorphContext} ctx\n     * @returns {Node|null}\n     */\n    function createNode(oldParent, newChild, insertionPoint, ctx) {\n      if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n      if (ctx.idMap.has(newChild)) {\n        // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n        const newEmptyChild = document.createElement(\n          /** @type {Element} */ (newChild).tagName,\n        );\n        oldParent.insertBefore(newEmptyChild, insertionPoint);\n        morphNode(newEmptyChild, newChild, ctx);\n        ctx.callbacks.afterNodeAdded(newEmptyChild);\n        return newEmptyChild;\n      } else {\n        // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n        const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n        oldParent.insertBefore(newClonedChild, insertionPoint);\n        ctx.callbacks.afterNodeAdded(newClonedChild);\n        return newClonedChild;\n      }\n    }\n\n    //=============================================================================\n    // Matching Functions\n    //=============================================================================\n    const findBestMatch = (function () {\n      /**\n       * Scans forward from the startPoint to the endPoint looking for a match\n       * for the node. It looks for an id set match first, then a soft match.\n       * We abort softmatching if we find two future soft matches, to reduce churn.\n       * @param {Node} node\n       * @param {MorphContext} ctx\n       * @param {Node | null} startPoint\n       * @param {Node | null} endPoint\n       * @returns {Node | null}\n       */\n      function findBestMatch(ctx, node, startPoint, endPoint) {\n        let softMatch = null;\n        let nextSibling = node.nextSibling;\n        let siblingSoftMatchCount = 0;\n\n        let cursor = startPoint;\n        while (cursor && cursor != endPoint) {\n          // soft matching is a prerequisite for id set matching\n          if (isSoftMatch(cursor, node)) {\n            if (isIdSetMatch(ctx, cursor, node)) {\n              return cursor; // found an id set match, we're done!\n            }\n\n            // we haven't yet saved a soft match fallback\n            if (softMatch === null) {\n              // the current soft match will hard match something else in the future, leave it\n              if (!ctx.idMap.has(cursor)) {\n                // save this as the fallback if we get through the loop without finding a hard match\n                softMatch = cursor;\n              }\n            }\n          }\n          if (\n            softMatch === null &&\n            nextSibling &&\n            isSoftMatch(cursor, nextSibling)\n          ) {\n            // The next new node has a soft match with this node, so\n            // increment the count of future soft matches\n            siblingSoftMatchCount++;\n            nextSibling = nextSibling.nextSibling;\n\n            // If there are two future soft matches, block soft matching for this node to allow\n            // future siblings to soft match. This is to reduce churn in the DOM when an element\n            // is prepended.\n            if (siblingSoftMatchCount >= 2) {\n              softMatch = undefined;\n            }\n          }\n\n          // if the current node contains active element, stop looking for better future matches,\n          // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n          // @ts-ignore pretend cursor is Element rather than Node, we're just testing for array inclusion\n          if (ctx.activeElementAndParents.includes(cursor)) break;\n\n          cursor = cursor.nextSibling;\n        }\n\n        return softMatch || null;\n      }\n\n      /**\n       *\n       * @param {MorphContext} ctx\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isIdSetMatch(ctx, oldNode, newNode) {\n        let oldSet = ctx.idMap.get(oldNode);\n        let newSet = ctx.idMap.get(newNode);\n\n        if (!newSet || !oldSet) return false;\n\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      /**\n       *\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isSoftMatch(oldNode, newNode) {\n        // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        return (\n          oldElt.nodeType === newElt.nodeType &&\n          oldElt.tagName === newElt.tagName &&\n          // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n          // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n          // its not persistent, and new nodes can't have any hidden state.\n          // We can't use .id because of form input shadowing, and we can't count on .getAttribute's presence because it could be a document-fragment\n          (!oldElt.getAttribute?.(\"id\") ||\n            oldElt.getAttribute?.(\"id\") === newElt.getAttribute?.(\"id\"))\n        );\n      }\n\n      return findBestMatch;\n    })();\n\n    //=============================================================================\n    // DOM Manipulation Functions\n    //=============================================================================\n\n    /**\n     * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n     * - Persistent nodes will be moved to the pantry for later reuse\n     * - Other nodes will have their hooks called, and then are removed\n     * @param {MorphContext} ctx\n     * @param {Node} node\n     */\n    function removeNode(ctx, node) {\n      // are we going to id set match this later?\n      if (ctx.idMap.has(node)) {\n        // skip callbacks and move to pantry\n        moveBefore(ctx.pantry, node, null);\n      } else {\n        // remove for realsies\n        if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n        node.parentNode?.removeChild(node);\n        ctx.callbacks.afterNodeRemoved(node);\n      }\n    }\n\n    /**\n     * Remove nodes between the start and end nodes\n     * @param {MorphContext} ctx\n     * @param {Node} startInclusive\n     * @param {Node} endExclusive\n     * @returns {Node|null}\n     */\n    function removeNodesBetween(ctx, startInclusive, endExclusive) {\n      /** @type {Node | null} */\n      let cursor = startInclusive;\n      // remove nodes until the endExclusive node\n      while (cursor && cursor !== endExclusive) {\n        let tempNode = /** @type {Node} */ (cursor);\n        cursor = cursor.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n      return cursor;\n    }\n\n    /**\n     * Search for an element by id within the document and pantry, and move it using moveBefore.\n     *\n     * @param {Element} parentNode - The parent node to which the element will be moved.\n     * @param {string} id - The ID of the element to be moved.\n     * @param {Node | null} after - The reference node to insert the element before.\n     *                              If `null`, the element is appended as the last child.\n     * @param {MorphContext} ctx\n     * @returns {Element} The found element\n     */\n    function moveBeforeById(parentNode, id, after, ctx) {\n      const target =\n        /** @type {Element} - will always be found */\n        (\n          // ctx.target.id unsafe because of form input shadowing\n          // ctx.target could be a document fragment which doesn't have `getAttribute`\n          (ctx.target.getAttribute?.(\"id\") === id && ctx.target) ||\n            ctx.target.querySelector(`[id=\"${id}\"]`) ||\n            ctx.pantry.querySelector(`[id=\"${id}\"]`)\n        );\n      removeElementFromAncestorsIdMaps(target, ctx);\n      moveBefore(parentNode, target, after);\n      return target;\n    }\n\n    /**\n     * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n     * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n     * pantry rather than being deleted, preventing their removal hooks from being called.\n     *\n     * @param {Element} element - element to remove from its ancestors' id maps\n     * @param {MorphContext} ctx\n     */\n    function removeElementFromAncestorsIdMaps(element, ctx) {\n      // we know id is non-null String, because this function is only called on elements with ids\n      const id = /** @type {String} */ (element.getAttribute(\"id\"));\n      /** @ts-ignore - safe to loop in this way **/\n      while ((element = element.parentNode)) {\n        let idSet = ctx.idMap.get(element);\n        if (idSet) {\n          idSet.delete(id);\n          if (!idSet.size) {\n            ctx.idMap.delete(element);\n          }\n        }\n      }\n    }\n\n    /**\n     * Moves an element before another element within the same parent.\n     * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n     * This is essentialy a forward-compat wrapper.\n     *\n     * @param {Element} parentNode - The parent node containing the after element.\n     * @param {Node} element - The element to be moved.\n     * @param {Node | null} after - The reference node to insert `element` before.\n     *                              If `null`, `element` is appended as the last child.\n     */\n    function moveBefore(parentNode, element, after) {\n      // @ts-ignore - use proposed moveBefore feature\n      if (parentNode.moveBefore) {\n        try {\n          // @ts-ignore - use proposed moveBefore feature\n          parentNode.moveBefore(element, after);\n        } catch (e) {\n          // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n          parentNode.insertBefore(element, after);\n        }\n      } else {\n        parentNode.insertBefore(element, after);\n      }\n    }\n\n    return morphChildren;\n  })();\n\n  //=============================================================================\n  // Single Node Morphing Code\n  //=============================================================================\n  const morphNode = (function () {\n    /**\n     * @param {Node} oldNode root node to merge content into\n     * @param {Node} newContent new content to merge\n     * @param {MorphContext} ctx the merge context\n     * @returns {Node | null} the element that ended up in the DOM\n     */\n    function morphNode(oldNode, newContent, ctx) {\n      if (ctx.ignoreActive && oldNode === document.activeElement) {\n        // don't morph focused element\n        return null;\n      }\n\n      if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n        return oldNode;\n      }\n\n      if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n        oldNode instanceof HTMLHeadElement &&\n        ctx.head.style !== \"morph\"\n      ) {\n        // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n        handleHeadElement(\n          oldNode,\n          /** @type {HTMLHeadElement} */ (newContent),\n          ctx,\n        );\n      } else {\n        morphAttributes(oldNode, newContent, ctx);\n        if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n          // @ts-ignore newContent can be a node here because .firstChild will be null\n          morphChildren(ctx, oldNode, newContent);\n        }\n      }\n      ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n      return oldNode;\n    }\n\n    /**\n     * syncs the oldNode to the newNode, copying over all attributes and\n     * inner element state from the newNode to the oldNode\n     *\n     * @param {Node} oldNode the node to copy attributes & state to\n     * @param {Node} newNode the node to copy attributes & state from\n     * @param {MorphContext} ctx the merge context\n     */\n    function morphAttributes(oldNode, newNode, ctx) {\n      let type = newNode.nodeType;\n\n      // if is an element type, sync the attributes from the\n      // new node into the new node\n      if (type === 1 /* element type */) {\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        const oldAttributes = oldElt.attributes;\n        const newAttributes = newElt.attributes;\n        for (const newAttribute of newAttributes) {\n          if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n            continue;\n          }\n          if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n            oldElt.setAttribute(newAttribute.name, newAttribute.value);\n          }\n        }\n        // iterate backwards to avoid skipping over items when a delete occurs\n        for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n          const oldAttribute = oldAttributes[i];\n\n          // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n          // e.g. custom element attribute callbacks can remove other attributes\n          if (!oldAttribute) continue;\n\n          if (!newElt.hasAttribute(oldAttribute.name)) {\n            if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n              continue;\n            }\n            oldElt.removeAttribute(oldAttribute.name);\n          }\n        }\n\n        if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n          syncInputValue(oldElt, newElt, ctx);\n        }\n      }\n\n      // sync text nodes\n      if (type === 8 /* comment */ || type === 3 /* text */) {\n        if (oldNode.nodeValue !== newNode.nodeValue) {\n          oldNode.nodeValue = newNode.nodeValue;\n        }\n      }\n    }\n\n    /**\n     * NB: many bothans died to bring us information:\n     *\n     *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n     *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n     *\n     * @param {Element} oldElement the element to sync the input value to\n     * @param {Element} newElement the element to sync the input value from\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncInputValue(oldElement, newElement, ctx) {\n      if (\n        oldElement instanceof HTMLInputElement &&\n        newElement instanceof HTMLInputElement &&\n        newElement.type !== \"file\"\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n\n        // sync boolean attributes\n        syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n        syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n        if (!newElement.hasAttribute(\"value\")) {\n          if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n            oldElement.value = \"\";\n            oldElement.removeAttribute(\"value\");\n          }\n        } else if (oldValue !== newValue) {\n          if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n            oldElement.setAttribute(\"value\", newValue);\n            oldElement.value = newValue;\n          }\n        }\n        // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n        // did I break something?\n      } else if (\n        oldElement instanceof HTMLOptionElement &&\n        newElement instanceof HTMLOptionElement\n      ) {\n        syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n      } else if (\n        oldElement instanceof HTMLTextAreaElement &&\n        newElement instanceof HTMLTextAreaElement\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n        if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n          return;\n        }\n        if (newValue !== oldValue) {\n          oldElement.value = newValue;\n        }\n        if (\n          oldElement.firstChild &&\n          oldElement.firstChild.nodeValue !== newValue\n        ) {\n          oldElement.firstChild.nodeValue = newValue;\n        }\n      }\n    }\n\n    /**\n     * @param {Element} oldElement element to write the value to\n     * @param {Element} newElement element to read the value from\n     * @param {string} attributeName the attribute name\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n      // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n      const newLiveValue = newElement[attributeName],\n        // @ts-ignore ditto\n        oldLiveValue = oldElement[attributeName];\n      if (newLiveValue !== oldLiveValue) {\n        const ignoreUpdate = ignoreAttribute(\n          attributeName,\n          oldElement,\n          \"update\",\n          ctx,\n        );\n        if (!ignoreUpdate) {\n          // update attribute's associated DOM property\n          // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n          oldElement[attributeName] = newElement[attributeName];\n        }\n        if (newLiveValue) {\n          if (!ignoreUpdate) {\n            // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n            // this is the correct way to set a boolean attribute to \"true\"\n            oldElement.setAttribute(attributeName, \"\");\n          }\n        } else {\n          if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n            oldElement.removeAttribute(attributeName);\n          }\n        }\n      }\n    }\n\n    /**\n     * @param {string} attr the attribute to be mutated\n     * @param {Element} element the element that is going to be updated\n     * @param {\"update\" | \"remove\"} updateType\n     * @param {MorphContext} ctx the merge context\n     * @returns {boolean} true if the attribute should be ignored, false otherwise\n     */\n    function ignoreAttribute(attr, element, updateType, ctx) {\n      if (\n        attr === \"value\" &&\n        ctx.ignoreActiveValue &&\n        element === document.activeElement\n      ) {\n        return true;\n      }\n      return (\n        ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n        false\n      );\n    }\n\n    /**\n     * @param {Node} possibleActiveElement\n     * @param {MorphContext} ctx\n     * @returns {boolean}\n     */\n    function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n      return (\n        !!ctx.ignoreActiveValue &&\n        possibleActiveElement === document.activeElement &&\n        possibleActiveElement !== document.body\n      );\n    }\n\n    return morphNode;\n  })();\n\n  //=============================================================================\n  // Head Management Functions\n  //=============================================================================\n  /**\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @param {function} callback\n   * @returns {Node[] | Promise<Node[]>}\n   */\n  function withHeadBlocking(ctx, oldNode, newNode, callback) {\n    if (ctx.head.block) {\n      const oldHead = oldNode.querySelector(\"head\");\n      const newHead = newNode.querySelector(\"head\");\n      if (oldHead && newHead) {\n        const promises = handleHeadElement(oldHead, newHead, ctx);\n        // when head promises resolve, proceed ignoring the head tag\n        return Promise.all(promises).then(() => {\n          const newCtx = Object.assign(ctx, {\n            head: {\n              block: false,\n              ignore: true,\n            },\n          });\n          return callback(newCtx);\n        });\n      }\n    }\n    // just proceed if we not head blocking\n    return callback(ctx);\n  }\n\n  /**\n   *  The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n   *\n   * @param {Element} oldHead\n   * @param {Element} newHead\n   * @param {MorphContext} ctx\n   * @returns {Promise<void>[]}\n   */\n  function handleHeadElement(oldHead, newHead, ctx) {\n    let added = [];\n    let removed = [];\n    let preserved = [];\n    let nodesToAppend = [];\n\n    // put all new head elements into a Map, by their outerHTML\n    let srcToNewHeadNodes = new Map();\n    for (const newHeadChild of newHead.children) {\n      srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n    }\n\n    // for each elt in the current head\n    for (const currentHeadElt of oldHead.children) {\n      // If the current head element is in the map\n      let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n      let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n      let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n      if (inNewContent || isPreserved) {\n        if (isReAppended) {\n          // remove the current version and let the new version replace it and re-execute\n          removed.push(currentHeadElt);\n        } else {\n          // this element already exists and should not be re-appended, so remove it from\n          // the new content map, preserving it in the DOM\n          srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n          preserved.push(currentHeadElt);\n        }\n      } else {\n        if (ctx.head.style === \"append\") {\n          // we are appending and this existing element is not new content\n          // so if and only if it is marked for re-append do we do anything\n          if (isReAppended) {\n            removed.push(currentHeadElt);\n            nodesToAppend.push(currentHeadElt);\n          }\n        } else {\n          // if this is a merge, we remove this content since it is not in the new head\n          if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n            removed.push(currentHeadElt);\n          }\n        }\n      }\n    }\n\n    // Push the remaining new head elements in the Map into the\n    // nodes to append to the head tag\n    nodesToAppend.push(...srcToNewHeadNodes.values());\n\n    let promises = [];\n    for (const newNode of nodesToAppend) {\n      // TODO: This could theoretically be null, based on type\n      let newElt = /** @type {ChildNode} */ (\n        document.createRange().createContextualFragment(newNode.outerHTML)\n          .firstChild\n      );\n      if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n        if (\n          (\"href\" in newElt && newElt.href) ||\n          (\"src\" in newElt && newElt.src)\n        ) {\n          /** @type {(result?: any) => void} */ let resolve;\n          let promise = new Promise(function (_resolve) {\n            resolve = _resolve;\n          });\n          newElt.addEventListener(\"load\", function () {\n            resolve();\n          });\n          promises.push(promise);\n        }\n        oldHead.appendChild(newElt);\n        ctx.callbacks.afterNodeAdded(newElt);\n        added.push(newElt);\n      }\n    }\n\n    // remove all removed elements, after we have appended the new elements to avoid\n    // additional network requests for things like style sheets\n    for (const removedElement of removed) {\n      if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n        oldHead.removeChild(removedElement);\n        ctx.callbacks.afterNodeRemoved(removedElement);\n      }\n    }\n\n    ctx.head.afterHeadMorphed(oldHead, {\n      added: added,\n      kept: preserved,\n      removed: removed,\n    });\n    return promises;\n  }\n\n  //=============================================================================\n  // Create Morph Context Functions\n  //=============================================================================\n  const createMorphContext = (function () {\n    /**\n     *\n     * @param {Element} oldNode\n     * @param {Element} newContent\n     * @param {Config} config\n     * @returns {MorphContext}\n     */\n    function createMorphContext(oldNode, newContent, config) {\n      const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n      const mergedConfig = mergeDefaults(config);\n      const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n      if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n        throw `Do not understand how to morph style ${morphStyle}`;\n      }\n\n      return {\n        target: oldNode,\n        newContent: newContent,\n        config: mergedConfig,\n        morphStyle: morphStyle,\n        ignoreActive: mergedConfig.ignoreActive,\n        ignoreActiveValue: mergedConfig.ignoreActiveValue,\n        restoreFocus: mergedConfig.restoreFocus,\n        idMap: idMap,\n        persistentIds: persistentIds,\n        pantry: createPantry(),\n        activeElementAndParents: createActiveElementAndParents(oldNode),\n        callbacks: mergedConfig.callbacks,\n        head: mergedConfig.head,\n      };\n    }\n\n    /**\n     * Deep merges the config object and the Idiomorph.defaults object to\n     * produce a final configuration object\n     * @param {Config} config\n     * @returns {ConfigInternal}\n     */\n    function mergeDefaults(config) {\n      let finalConfig = Object.assign({}, defaults);\n\n      // copy top level stuff into final config\n      Object.assign(finalConfig, config);\n\n      // copy callbacks into final config (do this to deep merge the callbacks)\n      finalConfig.callbacks = Object.assign(\n        {},\n        defaults.callbacks,\n        config.callbacks,\n      );\n\n      // copy head config into final config  (do this to deep merge the head)\n      finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n      return finalConfig;\n    }\n\n    /**\n     * @returns {HTMLDivElement}\n     */\n    function createPantry() {\n      const pantry = document.createElement(\"div\");\n      pantry.hidden = true;\n      document.body.insertAdjacentElement(\"afterend\", pantry);\n      return pantry;\n    }\n\n    /**\n     * @param {Element} oldNode\n     * @returns {Element[]}\n     */\n    function createActiveElementAndParents(oldNode) {\n      /** @type {Element[]} */\n      let activeElementAndParents = [];\n      let elt = document.activeElement;\n      if (elt?.tagName !== \"BODY\" && oldNode.contains(elt)) {\n        while (elt) {\n          activeElementAndParents.push(elt);\n          if (elt === oldNode) break;\n          elt = elt.parentElement;\n        }\n      }\n      return activeElementAndParents;\n    }\n\n    /**\n     * Returns all elements with an ID contained within the root element and its descendants\n     *\n     * @param {Element} root\n     * @returns {Element[]}\n     */\n    function findIdElements(root) {\n      let elements = Array.from(root.querySelectorAll(\"[id]\"));\n      // root could be a document fragment which doesn't have `getAttribute`\n      if (root.getAttribute?.(\"id\")) {\n        elements.push(root);\n      }\n      return elements;\n    }\n\n    /**\n     * A bottom-up algorithm that populates a map of Element -> IdSet.\n     * The idSet for a given element is the set of all IDs contained within its subtree.\n     * As an optimzation, we filter these IDs through the given list of persistent IDs,\n     * because we don't need to bother considering IDed elements that won't be in the new content.\n     *\n     * @param {Map<Node, Set<string>>} idMap\n     * @param {Set<string>} persistentIds\n     * @param {Element} root\n     * @param {Element[]} elements\n     */\n    function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n      for (const elt of elements) {\n        // we can pretend id is non-null String, because the .has line will reject it immediately if not\n        const id = /** @type {String} */ (elt.getAttribute(\"id\"));\n        if (persistentIds.has(id)) {\n          /** @type {Element|null} */\n          let current = elt;\n          // walk up the parent hierarchy of that element, adding the id\n          // of element to the parent's id set\n          while (current) {\n            let idSet = idMap.get(current);\n            // if the id set doesn't exist, create it and insert it in the map\n            if (idSet == null) {\n              idSet = new Set();\n              idMap.set(current, idSet);\n            }\n            idSet.add(id);\n\n            if (current === root) break;\n            current = current.parentElement;\n          }\n        }\n      }\n    }\n\n    /**\n     * This function computes a map of nodes to all ids contained within that node (inclusive of the\n     * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n     * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n     * to contribute to a parent nodes matching.\n     *\n     * @param {Element} oldContent  the old content that will be morphed\n     * @param {Element} newContent  the new content to morph to\n     * @returns {IdSets}\n     */\n    function createIdMaps(oldContent, newContent) {\n      const oldIdElements = findIdElements(oldContent);\n      const newIdElements = findIdElements(newContent);\n\n      const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n      /** @type {Map<Node, Set<string>>} */\n      let idMap = new Map();\n      populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n      /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n      const newRoot = newContent.__idiomorphRoot || newContent;\n      populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n      return { persistentIds, idMap };\n    }\n\n    /**\n     * This function computes the set of ids that persist between the two contents excluding duplicates\n     *\n     * @param {Element[]} oldIdElements\n     * @param {Element[]} newIdElements\n     * @returns {Set<string>}\n     */\n    function createPersistentIds(oldIdElements, newIdElements) {\n      let duplicateIds = new Set();\n\n      /** @type {Map<string, string>} */\n      let oldIdTagNameMap = new Map();\n      for (const { id, tagName } of oldIdElements) {\n        if (oldIdTagNameMap.has(id)) {\n          duplicateIds.add(id);\n        } else {\n          oldIdTagNameMap.set(id, tagName);\n        }\n      }\n\n      let persistentIds = new Set();\n      for (const { id, tagName } of newIdElements) {\n        if (persistentIds.has(id)) {\n          duplicateIds.add(id);\n        } else if (oldIdTagNameMap.get(id) === tagName) {\n          persistentIds.add(id);\n        }\n        // skip if tag types mismatch because its not possible to morph one tag into another\n      }\n\n      for (const id of duplicateIds) {\n        persistentIds.delete(id);\n      }\n      return persistentIds;\n    }\n\n    return createMorphContext;\n  })();\n\n  //=============================================================================\n  // HTML Normalization Functions\n  //=============================================================================\n  const { normalizeElement, normalizeParent } = (function () {\n    /** @type {WeakSet<Node>} */\n    const generatedByIdiomorph = new WeakSet();\n\n    /**\n     *\n     * @param {Element | Document} content\n     * @returns {Element}\n     */\n    function normalizeElement(content) {\n      if (content instanceof Document) {\n        return content.documentElement;\n      } else {\n        return content;\n      }\n    }\n\n    /**\n     *\n     * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n     * @returns {Element}\n     */\n    function normalizeParent(newContent) {\n      if (newContent == null) {\n        return document.createElement(\"div\"); // dummy parent element\n      } else if (typeof newContent === \"string\") {\n        return normalizeParent(parseContent(newContent));\n      } else if (\n        generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n      ) {\n        // the template tag created by idiomorph parsing can serve as a dummy parent\n        return /** @type {Element} */ (newContent);\n      } else if (newContent instanceof Node) {\n        if (newContent.parentNode) {\n          // we can't use the parent directly because newContent may have siblings\n          // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n          // so instead we create a fake parent node that only sees a slice of its children.\n          /** @type {Element} */\n          return /** @type {any} */ (new SlicedParentNode(newContent));\n        } else {\n          // a single node is added as a child to a dummy parent\n          const dummyParent = document.createElement(\"div\");\n          dummyParent.append(newContent);\n          return dummyParent;\n        }\n      } else {\n        // all nodes in the array or HTMLElement collection are consolidated under\n        // a single dummy parent element\n        const dummyParent = document.createElement(\"div\");\n        for (const elt of [...newContent]) {\n          dummyParent.append(elt);\n        }\n        return dummyParent;\n      }\n    }\n\n    /**\n     * A fake duck-typed parent element to wrap a single node, without actually reparenting it.\n     * This is useful because the node may have siblings that we don't want in the morph, and it may also be moved\n     * or replaced with one or more elements during the morph. This class effectively allows us a window into\n     * a slice of a node's children.\n     * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849\u20131916)\n     */\n    class SlicedParentNode {\n      /** @param {Node} node */\n      constructor(node) {\n        this.originalNode = node;\n        this.realParentNode = /** @type {Element} */ (node.parentNode);\n        this.previousSibling = node.previousSibling;\n        this.nextSibling = node.nextSibling;\n      }\n\n      /** @returns {Node[]} */\n      get childNodes() {\n        // return slice of realParent's current childNodes, based on previousSibling and nextSibling\n        const nodes = [];\n        let cursor = this.previousSibling\n          ? this.previousSibling.nextSibling\n          : this.realParentNode.firstChild;\n        while (cursor && cursor != this.nextSibling) {\n          nodes.push(cursor);\n          cursor = cursor.nextSibling;\n        }\n        return nodes;\n      }\n\n      /**\n       * @param {string} selector\n       * @returns {Element[]}\n       */\n      querySelectorAll(selector) {\n        return this.childNodes.reduce((results, node) => {\n          if (node instanceof Element) {\n            if (node.matches(selector)) results.push(node);\n            const nodeList = node.querySelectorAll(selector);\n            for (let i = 0; i < nodeList.length; i++) {\n              results.push(nodeList[i]);\n            }\n          }\n          return results;\n        }, /** @type {Element[]} */ ([]));\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      insertBefore(node, referenceNode) {\n        return this.realParentNode.insertBefore(node, referenceNode);\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      moveBefore(node, referenceNode) {\n        // @ts-ignore - use new moveBefore feature\n        return this.realParentNode.moveBefore(node, referenceNode);\n      }\n\n      /**\n       * for later use with populateIdMapWithTree to halt upwards iteration\n       * @returns {Node}\n       */\n      get __idiomorphRoot() {\n        return this.originalNode;\n      }\n    }\n\n    /**\n     *\n     * @param {string} newContent\n     * @returns {Node | null | DocumentFragment}\n     */\n    function parseContent(newContent) {\n      let parser = new DOMParser();\n\n      // remove svgs to avoid false-positive matches on head, etc.\n      let contentWithSvgsRemoved = newContent.replace(\n        /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n        \"\",\n      );\n\n      // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n      if (\n        contentWithSvgsRemoved.match(/<\\/html>/) ||\n        contentWithSvgsRemoved.match(/<\\/head>/) ||\n        contentWithSvgsRemoved.match(/<\\/body>/)\n      ) {\n        let content = parser.parseFromString(newContent, \"text/html\");\n        // if it is a full HTML document, return the document itself as the parent container\n        if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n          generatedByIdiomorph.add(content);\n          return content;\n        } else {\n          // otherwise return the html element as the parent container\n          let htmlElement = content.firstChild;\n          if (htmlElement) {\n            generatedByIdiomorph.add(htmlElement);\n          }\n          return htmlElement;\n        }\n      } else {\n        // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n        // deal with touchy tags like tr, tbody, etc.\n        let responseDoc = parser.parseFromString(\n          \"<body><template>\" + newContent + \"</template></body>\",\n          \"text/html\",\n        );\n        let content = /** @type {HTMLTemplateElement} */ (\n          responseDoc.body.querySelector(\"template\")\n        ).content;\n        generatedByIdiomorph.add(content);\n        return content;\n      }\n    }\n\n    return { normalizeElement, normalizeParent };\n  })();\n\n  //=============================================================================\n  // This is what ends up becoming the Idiomorph global object\n  //=============================================================================\n  return {\n    morph,\n    defaults,\n  };\n})();\n\n/**\n * Morph the state of the currentElement based on the attributes and contents of\n * the newElement. Morphing may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing changes\n * @param newElement Element source of morphing changes\n */\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\n/**\n * Morph the child elements of the currentElement based on the child elements of\n * the newElement. Morphing children may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing children changes\n * @param newElement Element source of morphing children changes\n */\nfunction morphChildren(currentElement, newElement, options = {}) {\n  morphElements(currentElement, newElement.childNodes, {\n    ...options,\n    morphStyle: \"innerHTML\"\n  });\n}\n\nfunction shouldRefreshFrameWithMorphing(currentFrame, newFrame) {\n  return currentFrame instanceof FrameElement &&\n    currentFrame.shouldReloadWithMorph && (!newFrame || areFramesCompatibleForRefreshing(currentFrame, newFrame)) &&\n    !currentFrame.closest(\"[data-turbo-permanent]\")\n}\n\nfunction areFramesCompatibleForRefreshing(currentFrame, newFrame) {\n  // newFrame cannot yet be an instance of FrameElement because custom\n  // elements don't get initialized until they're attached to the DOM, so\n  // test its Element#nodeName instead\n  return newFrame instanceof Element && newFrame.nodeName === \"TURBO-FRAME\" && currentFrame.id === newFrame.id &&\n  (!newFrame.getAttribute(\"src\") || urlsAreEqual(currentFrame.src, newFrame.getAttribute(\"src\")))\n}\n\nfunction closestFrameReloadableWithMorphing(node) {\n  return node.parentElement.closest(\"turbo-frame[src][refresh=morph]\")\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              closestFrameReloadableWithMorphing(node) === currentElement\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\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\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\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\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\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\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\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\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      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    for (const clonedNoscriptElement of clonedElement.querySelectorAll(\"noscript\")) {\n      clonedNoscriptElement.remove();\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get dir() {\n    return this.documentElement.getAttribute(\"dir\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    const viewTransitionEnabled = this.getSetting(\"view-transition\") === \"true\" || this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\";\n    return viewTransitionEnabled && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n  }\n\n  get refreshMethod() {\n    return this.getSetting(\"refresh-method\")\n  }\n\n  get refreshScroll() {\n    return this.getSetting(\"refresh-scroll\")\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false,\n  refresh: {}\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction,\n      refresh\n    } = {\n      ...defaultOptions,\n      ...options\n    };\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.isPageRefresh = this.view.isPageRefresh(this);\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    this.direction = direction || Direction[action];\n    this.refresh = refresh;\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\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\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\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.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\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\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      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\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\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\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.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.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\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\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    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\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    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\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\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\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\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    this.redirectedToLocation = null;\n\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n\n    if (visit.response.redirected) {\n      this.redirectedToLocation = visit.redirectedToLocation;\n    }\n  }\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\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    return true\n  }\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\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\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = (this.redirectedToLocation || this.location)?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector)]\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\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\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\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = 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  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    const { turbo } = event.state || {};\n    this.location = new URL(window.location.href);\n\n    if (turbo) {\n      const { restorationIdentifier, restorationIndex } = turbo;\n      this.restorationIdentifier = restorationIdentifier;\n      const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n      this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n      this.currentIndex = restorationIndex;\n    } else {\n      this.currentIndex++;\n      this.delegate.historyPoppedWithEmptyState(this.location);\n    }\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        fetchRequest.fetchOptions.priority = \"low\";\n\n        prefetchCache.putLater(location, fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url);\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\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\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if (snapshot.refreshScroll !== \"preserve\") {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    // Not all adapters implement linkPrefetchingIsEnabledForLocation\n    if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n      return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n    }\n\n    return true\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  // Same-page links are no longer handled with a Visit.\n  // This method is still needed for Turbo Native adapters.\n  locationWithActionIsSamePage(location, action) {\n    return false\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\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\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\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\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\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\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\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\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\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\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    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { dir, lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n    if (dir) {\n      documentElement.setAttribute(\"dir\", dir);\n    } else {\n      documentElement.removeAttribute(\"dir\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\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\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.removeNoscriptElements();\n    this.activateNewBodyScriptElements();\n  }\n\n  removeNoscriptElements() {\n    for (const noscriptElement of this.newElement.querySelectorAll(\"noscript\")) {\n      noscriptElement.remove();\n    }\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              !closestFrameReloadableWithMorphing(node)\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nclass SnapshotCache extends LRUCache {\n  constructor(size) {\n    super(size, toCacheKey);\n  }\n\n  get snapshots() {\n    return this.entries\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && (visit?.refresh?.method || this.snapshot.refreshMethod) === \"morph\";\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\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\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && (visit?.refresh?.scroll || this.snapshot.refreshScroll) === \"preserve\"\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.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\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.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.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, options = {}) {\n    options = typeof options === \"string\" ? { requestId: options } : options;\n\n    const { method, requestId, scroll } = options;\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    const isCurrentUrl = url === document.baseURI;\n    if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false, refresh: { method, scroll } });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  historyPoppedWithEmptyState(location) {\n    this.history.replace(location);\n    this.view.lastRenderedLocation = location;\n    this.view.cacheSnapshot();\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.navigator.linkPrefetchingIsEnabledForLocation(location)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    this.notifyApplicationBeforeCachingSnapshot();\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\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\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\n\n// Rename `navigator` to avoid shadowing `window.navigator`\nconst { cache, navigator: sessionNavigator } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\n/**\n * Morph the state of the currentBody based on the attributes and contents of\n * the newBody. Morphing body elements may dispatch turbo:morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentBody HTMLBodyElement destination of morphing changes\n * @param newBody HTMLBodyElement source of morphing changes\n */\nfunction morphBodyElements(currentBody, newBody) {\n  MorphingPageRenderer.renderElement(currentBody, newBody);\n}\n\n/**\n * Morph the child elements of the currentFrame based on the child elements of\n * the newFrame. Morphing turbo-frame elements may dispatch turbo:before-frame-morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentFrame FrameElement destination of morphing children changes\n * @param newFrame FrameElement source of morphing children changes\n */\nfunction morphTurboFrameElements(currentFrame, newFrame) {\n  MorphingFrameRenderer.renderElement(currentFrame, newFrame);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  session: session,\n  cache: cache,\n  navigator: sessionNavigator,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode,\n  morphBodyElements: morphBodyElements,\n  morphTurboFrameElements: morphTurboFrameElements,\n  morphChildren: morphChildren,\n  morphElements: morphElements\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\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\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\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      if (!this.element.hasAttribute(\"recurse\")) {\n        this.#currentFetchRequest?.cancel();\n      }\n    }\n  }\n\n  disabledChanged() {\n    if (this.disabled) {\n      this.#currentFetchRequest?.cancel();\n    } else if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (!this.sourceURL) {\n      this.#currentFetchRequest?.cancel();\n    }\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\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\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n\n    const { fetchRequest } = this.formSubmission;\n    const frame = this.#findFrameElement(element, submitter);\n\n    this.prepareRequest(fetchRequest, frame);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request, frame = this) {\n    request.headers[\"Turbo-Frame\"] = frame.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\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\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\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\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\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\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    const target = this.#getFrameElementById(id);\n\n    return target instanceof FrameElement ? target : this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\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    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = this.#getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      } else if (id == \"_parent\") {\n        return false\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get disabled() {\n    return this.element.disabled\n  }\n\n  get enabled() {\n    return !this.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n\n  #getFrameElementById(id) {\n    if (id != null) {\n      const element = id === \"_parent\" ?\n        this.element.parentElement.closest(\"turbo-frame\") :\n        document.getElementById(id);\n      if (element instanceof FrameElement) {\n        return element\n      }\n    }\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\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    const method = this.getAttribute(\"method\");\n    const requestId = this.requestId;\n    const scroll = this.getAttribute(\"scroll\");\n\n    session.refresh(this.baseURI, { method, requestId, scroll });\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.getAttribute(\"id\"));\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n  }\n\n  /**\n  * Removes duplicate siblings (by ID)\n  */\n  removeDuplicateTargetSiblings() {\n    this.duplicateSiblings.forEach((c) => c.remove());\n  }\n\n  /**\n  * Gets the list of duplicate siblings (i.e. those with the same ID)\n  */\n  get duplicateSiblings() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.parentElement.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\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\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\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\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\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\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  const scriptElement = document.currentScript;\n  if (!scriptElement) return\n  if (scriptElement.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  let element = scriptElement.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        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      `,\n        scriptElement.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, morphBodyElements, morphChildren, morphElements, morphTurboFrameElements, sessionNavigator as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\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  static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\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    this.subscriptionDisconnected()\n  }\n\n  attributeChangedCallback() {\n    if (this.subscription) {\n      this.disconnectedCallback()\n      this.connectedCallback()\n    }\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    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else 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\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\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\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport {application}\n", "/*\n  Assignment Stimulus Controller v1.0.0\n\n  Documentation for options 'delta: true':\n  This demonstrates how the js lib handels delta data on adding, removing and changing status of the data arrays.\n    + -> added object\n    - -> removed object\n    ~ -> changes status of object\n\n        +---------+                                       - Added objects will be removed from the removedData holder\n        |    +    |                                         when persistent.\n        +---------+                                       - Added object wil be added to the addedData holder when\n             |                                              not persistent.\n             |\n       -------------             +-----------------+\n     /               \\    yes    |                 |\n    |    persistent   | -------> | removedData -   |\n     \\               /           |                 |\n       -------------             +-----------------+\n             |\n             | no\n             v\n    +-----------------+\n    |                 |\n    | addedData +     |\n    |                 |\n    +-----------------+\n\n\n        +---------+                                       - Removed objects will be removed from the addedData holder\n        |    -    |                                         when persistent. This objects will also be added to the\n        +---------+                                         removedData holder if not already available.\n             |                                            - Removed objects wil be removed from the addedData holder\n             |                                              when not persistent.\n       -------------             +--------------------+\n     /               \\    yes    | addedData -        |\n    |    persistent   | -------> | removedData +      |\n     \\               /           | (if not available) |\n       -------------             +--------------------+\n             |\n             | no\n             v\n    +----------------+\n    |                |\n    | addedData -    |\n    |                |\n    +----------------+\n\n\n        +---------+                                        - Changed objects will be added to the removedData holder\n        |    ~    |                                          when persistent. This objects are set with the old status.\n        +---------+                                          This objects will also be changed in the addedData holder.\n             |                                             - Changed objects will be updated in the addedData holder\n             |                                               when not persistent.\n       -------------             +--------------------+\n     /               \\    yes    | addedData ~        |\n    |    persistent   | -------> | removedData +      |\n     \\               /           | (with old data)    |\n       -------------             +--------------------+\n             |\n             | no\n             v\n    +----------------+\n    |                |\n    | addedData ~    |\n    |                |\n    +----------------+\n */\nimport {Controller} from '@hotwired/stimulus'\nimport doT from 'dot'\nimport {debounce} from 'debounce'\n\nexport default class extends Controller {\n    static values = {\n        debug: {type: Boolean, default: false},\n        delta: {type: Boolean, default: false},\n        data: {type: Array, default: []},\n        paginationPerPage: {type: Number, default: 10},\n        paginationPageGapAt: {type: Number, default: 2},\n        paginationPreviousLabel: {type: String, default: '&#8592 Previous'},\n        paginationNextLabel: {type: String, default: 'Next &#8594'},\n        paginationPageGap: {type: String, default: '&hellip'},\n        emptyTableRowText: {type: String, default: 'No entries available'},\n        tableFilterText: {type: String, default: 'Filtered'},\n        tableSumText: {type: String, default: 'Total'},\n        elementExistsText: {type: String, default: 'Element already exists.'},\n        elementAddedText: {type: String, default: 'Element has been successfully added.'}\n    }\n\n    static targets = ['tableRowTemplate', 'elementsListTable', 'typeahead', 'feedback', 'tableFilter', 'tableFilterType', 'assignationForm']\n\n    initialize() {\n        this._handleAutocompleteChange = this._handleAutocompleteChange.bind(this)\n        this._handleAssignationFormAjaxComplete = this._handleAssignationFormAjaxComplete.bind(this)\n        this._handleAssignationFormSubmit = this._handleAssignationFormSubmit.bind(this)\n        this.handleAssignationFilterInput = debounce(this.handleAssignationFilterInput, 500)\n    }\n\n    connect() {\n        this._log(`Plugin Assignment for DOM element ${this.element}.`)\n        this._data = this.dataValue\n        this._originalData = this._data.slice()\n        if (this.deltaValue) {\n            this._dataDeltaAdded = []\n            this._dataDeltaRemoved = []\n        }\n        this._renderTable(1)\n        this._installTypeaheadHandler()\n        this._installAssignationFormSubmitHandlers()\n        this.element['assignment'] = {triggerTableRenderEvent: this._dispatchTableRenderCompleteEvent.bind(this)}\n    }\n\n    disconnect() {\n        this._uninstallTypeAheadHandler()\n        this._uninstallAssignationFormSubmitHandler()\n    }\n\n    _installAssignationFormSubmitHandlers() {\n        this._log('Form submit handler installed.')\n        this.assignationFormTarget.addEventListener('ajax:complete', this._handleAssignationFormAjaxComplete)\n        this.assignationFormTarget.addEventListener('submit', this._handleAssignationFormSubmit)\n    }\n\n    _uninstallAssignationFormSubmitHandler() {\n        this._log('Form submit handler uninstalled.')\n        this.assignationFormTarget.removeEventListener('ajax:complete', this._handleAssignationFormAjaxComplete)\n        this.assignationFormTarget.removeEventListener('submit', this._handleAssignationFormSubmit)\n    }\n\n    _installTypeaheadHandler() {\n        this._log('Typeahead handler installed.')\n        this.typeaheadTarget.addEventListener('autocomplete.change', this._handleAutocompleteChange)\n    }\n\n    _uninstallTypeAheadHandler() {\n        this._log('Typeahead handler uninstalled.')\n        this.typeaheadTarget.removeEventListener('autocomplete.change', this._handleAutocompleteChange)\n    }\n\n    handleAssignationFilterInput(event) {\n        if (event.keyCode === 13) {\n            event.preventDefault()\n            return false\n        }\n        let value = event.target.value\n        let filterTypeSelectedValue = false\n        if (this.hasTableFilterTypeTarget) {\n            filterTypeSelectedValue = this.tableFilterTypeTarget.querySelector('option:checked')?.value\n        }\n        if (value) {\n            this._data = this._originalData.filter(function (data_object) {\n                if (filterTypeSelectedValue) {\n                    return data_object.type === filterTypeSelectedValue && data_object['name'].toLowerCase().indexOf(value.toLowerCase()) >= 0\n                } else {\n                    return data_object['name'].toLowerCase().indexOf(value.toLowerCase()) >= 0\n                }\n            })\n        } else {\n            if (filterTypeSelectedValue) {\n                this._data = this._originalData.filter(function (data_object) {\n                    return data_object.type === filterTypeSelectedValue\n                })\n            } else {\n                this._data = this._originalData.slice(0)\n            }\n        }\n        this._renderTable(1)\n    }\n\n    handleAssignationFilterTypeSelect(event) {\n        this._log('AssignationFilterTypeSelect called.')\n        let selectedValue = event.target.querySelector('option:checked').value\n        let filterInputValue = this.tableFilterTarget.value\n        if (selectedValue) {\n            this._data = this._originalData.filter(function (data_object) {\n                if (filterInputValue) {\n                    return data_object.type === selectedValue && data_object['name'].toLowerCase().indexOf(filterInputValue.toLowerCase()) >= 0\n                } else {\n                    return data_object.type === selectedValue\n                }\n            })\n        } else {\n            if (filterInputValue) {\n                this._data = this._originalData.filter(function (data_object) {\n                    return data_object['name'].toLowerCase().indexOf(filterInputValue.toLowerCase()) >= 0\n                })\n            } else {\n                this._data = this._originalData.slice(0)\n            }\n        }\n        this._renderTable(1)\n    }\n\n    _handleAssignationFormAjaxComplete(_event) {\n        this._log('AssignationFormAjaxComplete called.')\n        if (this.deltaValue) {\n            this.element.dispatchEvent(\n                new CustomEvent('assignment.assignationFormAjaxComplete', {\n                    bubbles: true,\n                    detail: {\n                        dataDeltaAdded: this._dataDeltaAdded,\n                        dataDeltaRemoved: this._dataDeltaRemoved\n                    }\n                })\n            )\n        } else {\n            this.element.dispatchEvent(\n                new CustomEvent('assignment.assignationFormAjaxComplete', {\n                    bubbles: true,\n                    detail: {\n                        originalData: this._originalData\n                    }\n                })\n            )\n        }\n    }\n\n    _handleAssignationFormSubmit(_event) {\n        this._log('AssignationFormSubmit called.')\n        if (this.deltaValue) {\n            this.element.dispatchEvent(\n                new CustomEvent('assignment.assignationFormSubmit', {\n                    bubbles: true,\n                    detail: {\n                        dataDeltaAdded: this._dataDeltaAdded,\n                        dataDeltaRemoved: this._dataDeltaRemoved\n                    }\n                })\n            )\n        } else {\n            this.element.dispatchEvent(\n                new CustomEvent('assignment.assignationFormSubmit', {\n                    bubbles: true,\n                    detail: {\n                        originalData: this._originalData\n                    }\n                })\n            )\n        }\n    }\n\n    handleRemoveElement(event) {\n        if (!event.target.classList.contains('remove_element_btn')) return\n\n        this._log('RemoveElement called.')\n        event.preventDefault()\n\n        let tableRow = event.target.closest('tr')\n        let objectId = parseInt(tableRow.dataset.id)\n        let objectType = tableRow.dataset.type\n        let dataLength = this._data.length\n        let numberOfPages = Math.ceil(dataLength / this.paginationPerPageValue)\n\n        if (this.deltaValue) {\n            let isInAddedDeltaData = this._searchData(this._dataDeltaAdded, objectId, objectType).length > 0\n            let isInRemoveDeltaData = this._searchData(this._dataDeltaRemoved, objectId, objectType).length > 0\n            if (isInAddedDeltaData && isInRemoveDeltaData) {\n                this._dataDeltaAdded = this._grepData(this._dataDeltaAdded, objectId, objectType)\n            } else if (isInAddedDeltaData) {\n                this._dataDeltaAdded = this._grepData(this._dataDeltaAdded, objectId, objectType)\n            } else {\n                let removedObjects = this._searchData(this._originalData, objectId, objectType)\n                let oldDataObject = {...{}, ...removedObjects[0]}\n                this._dataDeltaRemoved.unshift(oldDataObject)\n            }\n        }\n        this._originalData = this._grepData(this._originalData, objectId, objectType)\n        this._data = this._grepData(this._data, objectId, objectType)\n        tableRow.remove()\n        let paginationId = `assignation_pagination_${this.elementsListTableTarget.id}`\n        let pagination = document.getElementById(paginationId).firstChild\n        let atPage = 1\n        if (pagination.querySelectorAll('li').length !== 0) {\n            let currentPage = pagination.querySelector('.page-item.active > a').rel\n            currentPage = parseInt(currentPage)\n            if (typeof currentPage !== 'undefined') {\n                atPage = Math.max(currentPage, 1)\n            }\n            if (dataLength - (numberOfPages - 1) * this.paginationPerPageValue === 1) {\n                atPage = Math.max(currentPage - 1, 1)\n            }\n        } else {\n            atPage = 1\n        }\n        this._renderTable(atPage)\n    }\n\n    _handleAutocompleteChange(event) {\n        this._log('AutocompleteChange called.')\n        let selectedElement = event.detail.selected\n        let selectedObject = {\n            type: selectedElement.dataset.type,\n            id: parseInt(selectedElement.dataset.id),\n            name: selectedElement.dataset.name,\n            assigned_at: '',\n            members_size: selectedElement.dataset.membersSize,\n            image_url: selectedElement.dataset.imageUrl\n        }\n        let typeAheadSearchInput = this.typeaheadTarget.querySelector('input[type=\"search\"]')\n        let searchResult = this._searchData(this._originalData, selectedObject.id, selectedObject.type)\n        if (searchResult.length > 0) {\n            typeAheadSearchInput.classList.remove('is-valid')\n            typeAheadSearchInput.classList.add('is-invalid')\n            this.feedbackTarget.classList.remove('valid-feedback')\n            this.feedbackTarget.classList.add('invalid-feedback')\n            if (searchResult[0].assigned_at === '' || searchResult[0].assigned_at === undefined) {\n                this.feedbackTarget.innerText = `${this.elementExistsTextValue}: ${selectedObject.name}.`\n            } else {\n                this.feedbackTarget.innerText = `${this.elementExistsTextValue}: ${selectedObject.name} (${searchResult[0].assigned_at}).`\n            }\n        } else {\n            typeAheadSearchInput.classList.remove('is-invalid')\n            typeAheadSearchInput.classList.add('is-valid')\n            this.feedbackTarget.classList.remove('invalid-feedback')\n            this.feedbackTarget.classList.add('valid-feedback')\n            this.feedbackTarget.innerText = `${this.elementAddedTextValue}: ${selectedObject.name}.`\n            if (this.deltaValue) {\n                let addedObjects = this._searchData(this._dataDeltaRemoved, selectedObject.id, selectedObject.type)\n                if (addedObjects.length > 0) {\n                    this._dataDeltaRemoved = this._grepData(this._dataDeltaRemoved, selectedObject.id, selectedObject.type)\n                } else {\n                    this._dataDeltaAdded.unshift(selectedObject)\n                }\n                if (addedObjects.length > 0) selectedObject = addedObjects[0]\n            }\n            if (this.tableFilterTarget.value) {\n                this._originalData.unshift(selectedObject)\n                if (selectedObject.name.toLowerCase().indexOf(this.tableFilterTarget.value.toLowerCase()) >= 0) {\n                    this._data = this._prepend(selectedObject, this._data)\n                    this._renderTable(1, true)\n                }\n            } else {\n                this._originalData.unshift(selectedObject)\n                this._data = this._prepend(selectedObject, this._data)\n                this._renderTable(1, true)\n            }\n        }\n        typeAheadSearchInput.value = ''\n        new Promise(resolve => setTimeout(resolve, 50)).then(() => typeAheadSearchInput.focus())\n    }\n\n    _renderTable(atPage, flashFirstRow) {\n        this._log(`Render table called at page: ${atPage}.`)\n        if (flashFirstRow == null) flashFirstRow = false\n        let tableRowTemplate = doT.template(this.tableRowTemplateTarget.innerHTML)\n        let startItem = Math.max(atPage - 1, 0) * this.paginationPerPageValue\n        let endItem = startItem + this.paginationPerPageValue\n        this.elementsListTableTarget.querySelector('tbody').innerHTML =\n            this._data.slice(startItem, endItem).map(object => {\n                return tableRowTemplate(object)\n            }).join('')\n        this._checkTableEntries()\n        if (flashFirstRow) {\n            this.elementsListTableTarget.querySelector('tbody > tr:first-child').classList.add('table_row_flash_green')\n        }\n        this._renderPagination(atPage)\n        this._renderTableFooter()\n        this._dispatchTableRenderCompleteEvent()\n    }\n\n    _renderTableFooter() {\n        this._log('Render table footer called.')\n        this.elementsListTableTarget.querySelector('tfoot tr td').innerHTML = `<span class=\"float-end\">${this.tableFilterTextValue}: ${this._data.length}, ${this.tableSumTextValue}: ${this._originalData.length}</span>`\n    }\n\n    _checkTableEntries() {\n        this._log('Checking table entries.')\n        let emptyTableRow = `<tr id=\"empty_table_row\"><td colspan=\"10\" class=\"align-middle text-center\">${this.emptyTableRowTextValue}</td></tr>`\n        let elementsListTableBody = this.elementsListTableTarget.querySelector('tbody')\n        if (elementsListTableBody.childNodes.length === 0) {\n            elementsListTableBody.innerHTML = emptyTableRow\n        } else {\n            this.element.querySelector('#empty_table_row')?.remove()\n        }\n    }\n\n    _renderPagination(atPage) {\n        this._log(`Render pagination called at page: ${atPage}.`)\n        let paginationId = `assignation_pagination_${this.elementsListTableTarget.id}`\n        if (document.getElementById(paginationId) === null) {\n            this.elementsListTableTarget.insertAdjacentHTML('afterend', `<nav id=\"${paginationId}\" aria-label=\"pager\" class=\"pagy-bootstrap-nav\" role=\"navigation\"><ul class=\"pagination justify-content-center\"></ul></nav>`)\n        }\n        let pagination = document.getElementById(paginationId).firstChild\n        pagination.innerHTML = ''\n        let numberOfPages = Math.ceil(this._data.length / this.paginationPerPageValue)\n        if (numberOfPages <= 1) return\n\n        let rangeStart = atPage - this.paginationPageGapAtValue\n        let rangeEnd = atPage + this.paginationPageGapAtValue\n        if (rangeEnd > numberOfPages) {\n            rangeEnd = numberOfPages\n            rangeStart = numberOfPages - (this.paginationPageGapAtValue * 2)\n            rangeStart = rangeStart < 1 ? 1 : rangeStart\n        }\n        if (rangeStart <= 1) {\n            rangeStart = 1\n            rangeEnd = Math.min(this.paginationPageGapAtValue * 2 + 1, numberOfPages)\n        }\n        this._log(`Render Pagination rangeStart: ${rangeStart}.`)\n        this._log(`Render Pagination rangeEnd: ${rangeEnd}.`)\n        let html = ''\n        let i\n        if (atPage === 1) {\n            html += `<li class=\"page-item prev disabled\"><a href=\"#\" class=\"page-link\">${this.paginationPreviousLabelValue}</a></li>`\n        } else {\n            html += `<li class=\"page-item prev\"><a href=\"#\" rel=\"prev\" class=\"page-link\" data-action=\"assignment#handlePaginationClick\">${this.paginationPreviousLabelValue}</a></li>`\n        }\n        if (rangeStart <= 3) {\n            i = 1\n            while (i < rangeStart) {\n                html += `<li class=\"page-item\"><a href=\"#\" rel=\"${i}\" class=\"page-link\" data-action=\"assignment#handlePaginationClick\">${i}</a></li>`\n                i++\n            }\n        } else {\n            html += '<li class=\"page-item\"><a href=\"#\" rel=\"1\" class=\"page-link\" data-action=\"assignment#handlePaginationClick\">1</a></li>'\n            html += `<li class=\"page-item disabled gap\"><a href=\"#\" class=\"page-link\">${this.paginationPageGapValue}</a></li>`\n        }\n        i = rangeStart\n        while (i <= rangeEnd) {\n            html += `<li class=\"page-item\"><a href=\"#\" rel=\"${i}\" class=\"page-link\" data-action=\"assignment#handlePaginationClick\">${i}</a></li>`\n            i++\n        }\n        if (rangeEnd >= numberOfPages - 2) {\n            i = rangeEnd + 1\n            while (i <= numberOfPages) {\n                html += `<li class=\"page-item\"><a href=\"#\" rel=\"${i}\" class=\"page-link\" data-action=\"assignment#handlePaginationClick\">${i}</a></li>`\n                i++\n            }\n        } else {\n            html += `<li class=\"page-item disabled gap\"><a href=\"#\" class=\"page-link\">${this.paginationPageGapValue}</a></li>`\n            html += `<li class=\"page-item\"><a href=\"#\" rel=\"${numberOfPages}\" class=\"page-link\" data-action=\"assignment#handlePaginationClick\">${numberOfPages}</a></li>`\n        }\n        if (atPage === numberOfPages) {\n            html += `<li class=\"page-item next disabled\"><a href=\"#\" class=\"page-link\">${this.paginationNextLabelValue}</a></li>`\n        } else {\n            html += `<li class=\"page-item next\"><a href=\"#\" rel=\"next\" class=\"page-link\" data-action=\"assignment#handlePaginationClick\">${this.paginationNextLabelValue}</a></li>`\n        }\n        pagination.innerHTML = html\n        pagination.querySelector(`a[rel=\"${atPage}\"]`).parentElement.classList.add('active')\n    }\n\n    _dispatchTableRenderCompleteEvent() {\n        if (this.deltaValue) {\n            this.element.dispatchEvent(\n                new CustomEvent('assignment.tableRenderComplete', {\n                    bubbles: true,\n                    detail: {\n                        elementList: this.elementsListTableTarget,\n                        originalData: this._originalData,\n                        dataDeltaAdded: this._dataDeltaAdded,\n                        dataDeltaRemoved: this._dataDeltaRemoved\n                    }\n                })\n            )\n        } else {\n            this.element.dispatchEvent(\n                new CustomEvent('assignment.tableRenderComplete', {\n                    bubbles: true,\n                    detail: {\n                        elementList: this.elementsListTableTarget,\n                        originalData: this._originalData,\n                    }\n                })\n            )\n        }\n    }\n\n    handlePaginationClick(event) {\n        this._log('PaginationClick called.')\n        let paginationId = `assignation_pagination_${this.elementsListTableTarget.id}`\n        let pagination = document.getElementById(paginationId).firstChild\n        let numberOfPages = Math.ceil(this._data.length / this.paginationPerPageValue)\n        let atPage = 1\n        let currentPage = event.target.rel\n        if (currentPage === 'prev') {\n            this._log('Pagination pre event called.')\n            currentPage = pagination.querySelector('.page-item.active > a').rel\n            currentPage = parseInt(currentPage)\n            if (typeof currentPage !== 'undefined') {\n                atPage = Math.max(currentPage - 1, 1)\n            }\n        } else if (currentPage === 'next') {\n            this._log('Pagination next event called.')\n            currentPage = pagination.querySelector('.page-item.active > a').rel\n            currentPage = parseInt(currentPage)\n            this._log(`current page: ${currentPage}`)\n            if (typeof currentPage === 'undefined') {\n                atPage = numberOfPages\n            } else {\n                atPage = Math.min(currentPage + 1, numberOfPages)\n            }\n        } else {\n            this._log(`Pagination number event called: ${currentPage}`)\n            atPage = parseInt(currentPage)\n        }\n        this._renderTable(atPage)\n    }\n\n    _grepData(data, objectIdToRemove, objectTypeToRemove) {\n        return data.filter(function (data_object) {\n            return !(data_object.id === objectIdToRemove && data_object.type === objectTypeToRemove)\n        })\n    }\n\n    _searchData(data, objectIdToSearch, objectTypeToSearch) {\n        return data.filter(function (data_object) {\n            return data_object.id === objectIdToSearch && data_object.type === objectTypeToSearch\n        })\n    }\n\n    _prepend(value, array) {\n        let newArray = array.slice()\n        newArray.unshift(value)\n        return newArray\n    }\n\n    _log(message) {\n        if (this.debugValue === true) console.log(`DEBUG assignment: ${message}`)\n    }\n}\n", "export default function AsyncPickMarkup (options) {\n    this.element = options.element\n    this.multiple = options.multiple || false\n    this.disabled = options.disabled || false\n    this.searchPlaceholder = options.searchPlaceholder\n    this.searchInputClasses = options.searchInputClasses\n    this.withSearch = options.withSearch\n    this.buttonClasses = options.buttonClasses\n    this.buttonDisabledClasses = options.buttonDisabledClasses\n    this.emptySelectButtonText = options.emptySelectButtonText\n    this.buttonIconClasses = options.buttonIconClasses\n    this.checkedIconClasses = options.checkedIconClasses\n    this.listClasses = options.listClasses\n    this.selectedTextFormat = options.selectedTextFormat\n    this.selectedTextVariable = options.selectedTextVariable\n    this.selectedText = options.selectedText\n    this.noResultsText = options.noResultsText\n    this.dividerText = options.dividerText\n    this.container = options.container\n    this.dropdownAlignRight = options.dropdownAlignRight\n    this.popupWidth = options.popupWidth\n    this.open = false\n\n    this.wrapper = this.buildWrapper()\n    this.button = this.buildButton()\n    if (!this.disabled) this.popup = this.buildPopup()\n\n    this.hideOriginalSelect()\n    this.assemble()\n}\n\nAsyncPickMarkup.prototype.hideOriginalSelect = function () {\n    this.element.classList.add('visually-hidden')\n    this.element.setAttribute('tabindex', '-1')\n}\n\nAsyncPickMarkup.prototype.showOriginalSelect = function () {\n    this.element.style.display = 'initial'\n}\n\nAsyncPickMarkup.prototype.assemble = function () {\n    this.wrapper.appendChild(this.button)\n    if (!this.disabled) {\n        if (!!this.container) {\n            const container = document.querySelector(this.container)\n            if (container) {\n                container.appendChild(this.popup)\n                this.popup.style.position = 'absolute'\n                this.popup.style.top = '0'\n            }\n        } else {\n            this.wrapper.appendChild(this.popup)\n        }\n    }\n    this.element.parentNode.insertBefore(this.wrapper, this.element)\n}\n\nAsyncPickMarkup.prototype.positionPopup = function () {\n    if (!this.open) return\n    if (!!this.container) {\n        const pos = this.wrapper.getBoundingClientRect()\n        const offset = getOffsetFromBoundingBox(pos)\n        const top = offset.top + this.wrapper.offsetHeight\n\n        if (this.shouldDropUp()) {\n            this.popup.style.top = (top - this.popup.offsetHeight - this.button.offsetHeight - parseInt(window.getComputedStyle(this.popup).marginTop)).toString() + 'px'\n        } else {\n            this.popup.style.top = top.toString() + 'px'\n        }\n        if (this.dropdownAlignRight) {\n            const right = window.innerWidth - pos.left - this.wrapper.offsetWidth\n            this.popup.style.right = right + 'px'\n        } else {\n            this.popup.style.left = offset.left.toString() + 'px'\n        }\n        this.popup.style.minWidth = this.wrapper.offsetWidth + 'px'\n        this.popup.style.width = this.popupWidth\n        this.popup.style.position = 'absolute'\n    } else {\n        if (this.shouldDropUp()) {\n            this.popup.style.top = 'auto'\n            this.popup.style.bottom = (this.button.offsetHeight + parseInt(window.getComputedStyle(this.popup).marginTop)).toString() + 'px'\n        } else {\n            this.popup.style.top = '100%'\n            this.popup.style.bottom = 'auto'\n        }\n    }\n}\n\nAsyncPickMarkup.prototype.shouldDropUp = function () {\n    const pos = this.button.getBoundingClientRect()\n    const offset = getOffsetFromBoundingBox(pos)\n    const selectOffsetTop = offset.top - document.documentElement.scrollTop\n    const selectOffsetBot = window.innerHeight - selectOffsetTop - this.button.offsetHeight\n    return selectOffsetTop > selectOffsetBot && selectOffsetBot < this.popup.offsetHeight\n}\n\nAsyncPickMarkup.prototype.buildWrapper = function () {\n    const wrapper = document.createElement('div')\n    wrapper.classList.add('async-pick')\n    if (this.multiple) wrapper.classList.add('async-pick--multiple')\n    return wrapper\n}\n\nAsyncPickMarkup.prototype.buildButton = function () {\n    const button = document.createElement('button')\n    button.setAttribute('type', 'button')\n    this.buttonClasses.forEach(function (buttonClass) {\n        button.classList.add(buttonClass)\n    })\n    button.disabled = true\n    if (this.disabled) {\n        this.buttonDisabledClasses.forEach(function (buttonDisabledClass) {\n            button.classList.add(buttonDisabledClass)\n        })\n    }\n\n    this.buttonText = document.createElement('span')\n    this.buttonText.classList.add('ap__button-text')\n\n    if (this.buttonIconClasses && this.buttonIconClasses.length > 0) {\n        let buttonIcon = document.createElement('i')\n        this.buttonIconClasses.forEach(function (buttonIconClass) {\n            buttonIcon.classList.add(buttonIconClass)\n        })\n        button.appendChild(this.buttonText)\n        button.appendChild(buttonIcon)\n    } else {\n        button.appendChild(this.buttonText)\n    }\n\n    return button\n}\n\nAsyncPickMarkup.prototype.enableButton = function () {\n    this.button.disabled = false\n}\n\nAsyncPickMarkup.prototype.buildPopup = function () {\n    const popup = document.createElement('div')\n    popup.classList.add('ap__popup')\n    if (this.dropdownAlignRight) popup.classList.add('ap__popup--right')\n\n    if (this.withSearch) popup.appendChild(this.buildSearchInput())\n    popup.appendChild(this.buildResultsScrollWrapper())\n\n    return popup\n}\n\nAsyncPickMarkup.prototype.buildSearchInput = function () {\n    const wrapper = document.createElement('div')\n    wrapper.classList.add('ap__search-input__wrapper')\n    this.searchInput = document.createElement('input')\n    this.searchInput.type = 'search'\n    this.searchInput.setAttribute('placeholder', this.searchPlaceholder)\n    this.searchInput.classList.add('ap__search-input')\n\n    let self = this\n    this.searchInputClasses.forEach(function (searchInputClass) {\n        self.searchInput.classList.add(searchInputClass)\n    })\n\n    wrapper.appendChild(this.searchInput)\n    return wrapper\n}\n\nAsyncPickMarkup.prototype.buildResultsScrollWrapper = function () {\n    this.resultsScrollWrapper = document.createElement('div')\n    this.resultsScrollWrapper.classList.add('ap__results-scroll-wrapper')\n    this.resultsWrapper = document.createElement('div')\n    this.resultsWrapper.classList.add('ap__results')\n    this.resultsWrapper.setAttribute('aria-role', 'list')\n    this.resultsScrollWrapper.appendChild(this.buildTopLoader())\n    this.resultsScrollWrapper.appendChild(this.resultsWrapper)\n    this.resultsScrollWrapper.appendChild(this.buildBottomLoader())\n    return this.resultsScrollWrapper\n}\n\nAsyncPickMarkup.prototype.buildTopLoader = function () {\n    this.topLoader = document.createElement('div')\n    this.topLoader.classList.add('ap-top-loader')\n    this.topLoader.innerHTML = '...'\n    this.topLoader.style.display = 'none'\n    return this.topLoader\n}\n\nAsyncPickMarkup.prototype.buildBottomLoader = function () {\n    this.bottomLoader = document.createElement('div')\n    this.bottomLoader.classList.add('ap-bottom-loader')\n    this.bottomLoader.innerHTML = '...'\n    this.bottomLoader.style.display = 'none'\n    return this.bottomLoader\n}\n\nAsyncPickMarkup.prototype.appendSelectedList = function () {\n    this.popup.appendChild(this.buildDivider())\n    this.popup.appendChild(this.buildSelectedList())\n}\n\nAsyncPickMarkup.prototype.buildDivider = function () {\n    const divider = document.createElement('div')\n    divider.classList.add('ap__divider')\n    divider.innerHTML = this.dividerText\n    return divider\n}\n\nAsyncPickMarkup.prototype.buildSelectedList = function () {\n    const selected = document.createElement('div')\n    selected.classList.add('ap__selected-scroll-wrapper')\n    this.selectedList = buildUl(this.listClasses)\n    selected.appendChild(this.selectedList)\n    return selected\n}\n\nAsyncPickMarkup.prototype.renderSelectedList = function (selectedValues) {\n    let self = this\n\n    this.selectedList.innerHTML = ''\n    Object.keys(selectedValues).forEach(function (value) {\n        const li = buildLi({ value, ...selectedValues[value] })\n        self.selectedList.appendChild(li)\n    })\n}\n\nAsyncPickMarkup.prototype.appendEntries = function (newEntries, lowerPage, selectedValues, scrollTopOffset) {\n    const pageUl = buildUl(this.listClasses, lowerPage)\n    this.renderNewEntries(newEntries, pageUl, selectedValues)\n\n    const scrollableOffset = scrollTopOffset > 0 ? scrollTopOffset : this.resultsScrollWrapper.scrollTop\n\n    this.resultsWrapper.appendChild(pageUl)\n    this.resultsScrollWrapper.scrollTop = scrollableOffset\n    return pageUl\n}\n\nAsyncPickMarkup.prototype.prependEntries = function (newEntries, upperPage, selectedValues, scrollTopOffset) {\n    const pageUl = buildUl(this.listClasses, upperPage)\n    this.renderNewEntries(newEntries, pageUl, selectedValues)\n\n    const scrollableOffset = scrollTopOffset > 0 ? scrollTopOffset : this.resultsScrollWrapper.scrollTop\n\n    this.resultsWrapper.insertBefore(pageUl, this.resultsWrapper.firstChild)\n    this.resultsScrollWrapper.scrollTop = scrollableOffset + pageUl.offsetHeight\n    return pageUl\n}\n\nAsyncPickMarkup.prototype.renderNewEntries = function (newEntries, ul, selectedValues) {\n    let self = this\n    if (newEntries.length > 0) {\n        newEntries.forEach(function (element) {\n            const selected = !!selectedValues[element.value]\n            const li = buildLi({\n                ...element,\n                selected,\n                addCheck: self.multiple,\n                checkedIconClasses: self.checkedIconClasses\n            })\n            ul.appendChild(li)\n        })\n    } else {\n        const li = buildLi({ text: this.noResultsText })\n        li.classList.add('ap__results-list__item--muted')\n        ul.appendChild(li)\n    }\n}\n\nAsyncPickMarkup.prototype.renderSelectedOption = function (value, text) {\n    const option = document.createElement('option')\n    option.value = value\n    option.innerHTML = text\n    option.selected = true\n    option.setAttribute('data-selected', '')\n    return option\n}\n\nAsyncPickMarkup.prototype.removeSelectedOption = function (value) {\n    const self = this\n    Array.apply(null, this.element.options).filter(function (option) {\n        return option.value === value || option.value.toString() === value.toString()\n    }).forEach(function (option) {\n        self.element.removeChild(option)\n    })\n}\n\nAsyncPickMarkup.prototype.selectItem = function (value, optionData) {\n    const option = this.renderSelectedOption(value, optionData.text)\n    this.element.appendChild(option)\n    this.addSelectedClassByValue(value)\n    if (this.multiple) return this.addToSelectedList(value, optionData)\n}\n\nAsyncPickMarkup.prototype.deselectItem = function (value) {\n    this.removeSelectedOption(value)\n    this.removeSelectedClassByValue(value)\n    if (this.multiple) return this.removeFromSelectedList(value)\n}\n\nAsyncPickMarkup.prototype.addToSelectedList = function (value, optionData) {\n    const li = buildLi({ value, text: optionData.text, subtext: optionData.subtext, img: optionData.img })\n    this.selectedList.appendChild(li)\n    return li\n}\n\nAsyncPickMarkup.prototype.removeFromSelectedList = function (value) {\n    const li = this.selectedList.querySelector('li.ap__results-list__item[data-value=\"' + value + '\"]')\n    if (li) this.selectedList.removeChild(li)\n    return li\n}\n\nAsyncPickMarkup.prototype.prependToPage = function (page, blankOptions, selectedValues) {\n    const ul = this.resultsWrapper.querySelector('ul[data-page=\"' + page + '\"]')\n    if (!ul) return\n\n    const self = this\n    Object.keys(blankOptions).forEach(function (value) {\n        const selected = !!selectedValues[value]\n        const li = buildLi({\n            value,\n            text: blankOptions[value],\n            selected,\n            addCheck: self.multiple,\n            checkedIconClasses: self.checkedIconClasses\n        })\n        ul.insertBefore(li, ul.firstChild)\n    })\n}\n\nAsyncPickMarkup.prototype.removePage = function (page) {\n    const ul = this.resultsWrapper.querySelector('ul[data-page=\"' + page.toString() + '\"]')\n    if (ul) this.resultsWrapper.removeChild(ul)\n}\n\nAsyncPickMarkup.prototype.addSelectedClassByValue = function (value) {\n    const li = this.resultsWrapper.querySelector('li[data-value=\"' + value + '\"]')\n    if (li) setLiSelected(li, true, this.multiple, this.checkedIconClasses)\n}\n\nAsyncPickMarkup.prototype.removeSelectedClassByValue = function (value) {\n    const li = this.resultsWrapper.querySelector('li[data-value=\"' + value + '\"]')\n    if (li) setLiSelected(li, false, this.multiple, this.checkedIconClasses)\n}\n\nAsyncPickMarkup.prototype.destroy = function () {\n    this.showOriginalSelect()\n    if (!!this.container) {\n        const container = document.querySelector(this.container)\n        if (container) container.removeChild(this.popup)\n    }\n    if (this.element && this.element.parentNode) this.element.parentNode.removeChild(this.wrapper)\n}\n\nAsyncPickMarkup.prototype.clean = function () {\n    let self = this\n    Array.apply(null, this.resultsWrapper.querySelectorAll('ul')).forEach(function (ul) {\n        self.resultsWrapper.removeChild(ul)\n    })\n}\n\nAsyncPickMarkup.prototype.scrollToTop = function () {\n    this.resultsScrollWrapper.scrollTop = 0\n}\n\nAsyncPickMarkup.prototype.getScrollTopWithoutPage = function (page) {\n    const ul = this.resultsWrapper.querySelector('ul[data-page=\"' + page.toString() + '\"]')\n    if (ul) {\n        return this.resultsScrollWrapper.scrollTop - ul.scrollHeight\n    } else {\n        return this.resultsScrollWrapper.scrollTop\n    }\n}\n\nAsyncPickMarkup.prototype.getSelected = function () {\n    return this.resultsWrapper.querySelectorAll('li.ap__results-list__item--selected')[0]\n}\n\nAsyncPickMarkup.prototype.focusPreviousEntry = function () {\n    const selected = this.getSelected()\n    if (selected) {\n        const prev = selected.previousSibling || (selected.parentNode && selected.parentNode.previousSibling && selected.parentNode.previousSibling.lastChild)\n        if (prev) {\n            selected.classList.remove('ap__results-list__item--selected')\n            prev.classList.add('ap__results-list__item--selected')\n            this.scrollEntryIntoView(prev)\n        }\n    } else {\n        const first = this.resultsWrapper.querySelectorAll('li.ap__results-list__item[data-value]')[0]\n        if (!first) return\n        first.classList.add('ap__results-list__item--selected')\n        this.scrollEntryIntoView(first)\n    }\n}\n\nAsyncPickMarkup.prototype.focusNextEntry = function () {\n    const selected = this.getSelected()\n    if (selected) {\n        const next = selected.nextSibling || (selected.parentNode && selected.parentNode.nextSibling && selected.parentNode.nextSibling.firstChild)\n        if (next) {\n            selected.classList.remove('ap__results-list__item--selected')\n            next.classList.add('ap__results-list__item--selected')\n            this.scrollEntryIntoView(next)\n        }\n    } else {\n        const first = this.resultsWrapper.querySelectorAll('li.ap__results-list__item[data-value]')[0]\n        if (!first) return\n        first.classList.add('ap__results-list__item--selected')\n        this.scrollEntryIntoView(first)\n    }\n}\n\nAsyncPickMarkup.prototype.scrollEntryIntoView = function (entry) {\n    const entryOffsetTop = entry.offsetTop - this.resultsScrollWrapper.offsetTop\n    const shouldScrollDown = this.resultsScrollWrapper.offsetHeight + this.resultsScrollWrapper.scrollTop < entryOffsetTop + entry.offsetHeight\n    const shouldScrollUp = entryOffsetTop < this.resultsScrollWrapper.scrollTop\n\n    if (shouldScrollDown) {\n        this.resultsScrollWrapper.scrollTop = entryOffsetTop - this.resultsScrollWrapper.offsetHeight + entry.offsetHeight\n    } else if (shouldScrollUp) {\n        this.resultsScrollWrapper.scrollTop = entryOffsetTop\n    }\n}\n\nAsyncPickMarkup.prototype.setButtonText = function (selectedValues) {\n    if (selectedValues && Object.keys(selectedValues).length > 0) {\n        this.buttonText.innerHTML = this.renderButtonText(selectedValues)\n    } else {\n        this.buttonText.innerHTML = this.emptySelectButtonText\n    }\n}\n\nAsyncPickMarkup.prototype.renderButtonText = function (selectedValues) {\n    if (this.multiple && this.selectedTextFormat) {\n        const match = this.selectedTextFormat.match(/count\\s?>\\s?([0-9]*)/)\n        const count = match && match[1] && parseInt(match[1])\n\n        if (count && count < Object.keys(selectedValues).length) {\n            return this.selectedText.replace(this.selectedTextVariable, Object.keys(selectedValues).length)\n        } else {\n            return joinSelectedTexts(selectedValues)\n        }\n    } else {\n        return joinSelectedTexts(selectedValues)\n    }\n}\n\nfunction joinSelectedTexts (selectedValues) {\n    let selected = []\n    Object.keys(selectedValues).forEach(function (value) {\n        selected.push(selectedValues[value].text)\n    })\n    return selected.join(', ')\n}\n\nfunction buildUl (additionalClasses, page) {\n    const pageUl = document.createElement('ul')\n    pageUl.classList.add('ap__results-list')\n    pageUl.setAttribute('aria-role', 'listbox')\n    additionalClasses.forEach(function (listClass) {\n        pageUl.classList.add(listClass)\n    })\n    if (page) pageUl.setAttribute('data-page', page.toString())\n    return pageUl\n}\n\nfunction buildLi (options) {\n    const text = options.text\n    const value = options.value\n    const disabled = options.disabled\n    const subtext = options.subtext\n    const imgAttributes = options.img\n    const li = document.createElement('li')\n\n    const textSpan = document.createElement('span')\n    textSpan.classList.add('ap__results-list__item__text')\n    textSpan.innerHTML = text\n\n    if (typeof value !== 'undefined' && value !== null) li.setAttribute('data-value', value)\n    if (typeof text !== 'undefined' && text !== null) {\n        li.setAttribute('aria-label', text)\n        li.setAttribute('title', textSpan.innerText)\n        li.setAttribute('data-text', text)\n    }\n    if (typeof disabled !== 'undefined' && disabled !== null) {\n        li.setAttribute('data-disabled', disabled)\n        if (disabled) li.classList.add('ap__results-list__item--disabled')\n    }\n    if (typeof subtext !== 'undefined' && subtext !== null) {\n        li.setAttribute('data-subtext', subtext)\n        const subtextDom = document.createElement('small')\n        subtextDom.innerHTML = subtext\n        subtextDom.classList.add('ap__results-list__item__subtext')\n        textSpan.appendChild(subtextDom)\n    }\n\n    li.setAttribute('aria-role', 'listitem')\n    li.classList.add('ap__results-list__item')\n\n    if (typeof imgAttributes !== 'undefined' && imgAttributes !== null) {\n        const imageTag = document.createElement('img')\n        Object.keys(imgAttributes).forEach(function (attr) {\n            imageTag.setAttribute(attr, imgAttributes[attr])\n        })\n\n        imageTag.classList.add('ap__results-list__item__image')\n        li.setAttribute('data-img', JSON.stringify(imgAttributes))\n        li.appendChild(imageTag)\n    }\n\n    li.appendChild(textSpan)\n    if (options.selected) {\n        setLiSelected(li, true, options.addCheck, options.checkedIconClasses)\n    }\n    return li\n}\n\nfunction setLiSelected (li, selected, addCheck, checkedIconClasses) {\n    if (selected) {\n        if (addCheck) {\n            const check = document.createElement('i')\n            checkedIconClasses.forEach(function (checkedIconClass) {\n                check.classList.add(checkedIconClass)\n            })\n            check.classList.add('ap__results-list__item__check-mark')\n            li.appendChild(check)\n        } else {\n            li.classList.add('ap__results-list__item--selected')\n        }\n    } else {\n        if (addCheck) {\n            const check = li.querySelector('.ap__results-list__item__check-mark')\n            if (check) li.removeChild(check)\n        } else {\n            li.classList.remove('ap__results-list__item--selected')\n        }\n    }\n}\n\nfunction getOffsetFromBoundingBox (box) {\n    const docElem = document.documentElement\n\n    return {\n        top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n        left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n    }\n}\n", "export default {\n    searchPlaceholder: 'Suchen',\n    emptySelectButtonText: 'Alle anzeigen',\n    noResultsText: 'Keine Ergebnisse gefunden',\n    selectedText: '%num% Eintr\u00E4ge ausgew\u00E4hlt',\n    dividerText: 'Ausgew\u00E4hlte Eintr\u00E4ge:'\n}\n", "export default {\n    searchPlaceholder: 'Search',\n    emptySelectButtonText: 'Show all',\n    noResultsText: 'No results found',\n    selectedText: '%num% selected',\n    dividerText: 'Selected entries:'\n}\n", "export default {\n    searchPlaceholder: 'Buscar',\n    emptySelectButtonText: 'Mostrar todos',\n    noResultsText: 'No se encontraron resultados',\n    selectedText: '%num% seleccionados',\n    dividerText: 'Entradas seleccionadas:'\n}\n", "export default {\n    searchPlaceholder: 'Rechercher',\n    emptySelectButtonText: 'afficher Tout',\n    noResultsText: 'Aucun r\u00E9sultat trouv\u00E9',\n    selectedText: '%num% s\u00E9lectionn\u00E9s',\n    dividerText: '\u00C9l\u00E9ments s\u00E9lectionn\u00E9s:'\n}\n", "import AsyncPickMarkup from './async-pick/async-pick-markup'\nimport de from './async-pick/i18n/de'\nimport en from './async-pick/i18n/en'\nimport es from './async-pick/i18n/es'\nimport fr from './async-pick/i18n/fr'\n\n/**\n * AsyncPick\n * @param {Object}   options\n * @param {String}   options.id - id of the select to use\n * @param {String}   options.url - url to fetch data from\n * @param {String}  [options.language='en'] - set language. defaults to document language or 'en'\n * @param {String}  [options.searchParam='q'] - name of the query parameter for searching\n * @param {String}  [options.pageParam='_page'] - parameter to use for querying pages in the url\n * @param {String}  [options.perPageParam='_limit'] - parameter to use for setting page size in the url\n * @param {String}  [options.jsonKey=null] - name of the key where your nested json data lies under\n * @param {String}  [options.httpMethod='GET'] - http method to use for querying\n * @param {Number}  [options.maxPages=2] - number of pages to show simultaneously\n * @param {Number}  [options.perPage=50] - number of entries to show per page\n * @param {Number}  [options.paginateUpThreshold=20] - scroll percentage where to start loading the upper page\n * @param {Number}  [options.paginateDownThreshold=80] - scroll percentage where to start loading the lower page\n * @param {Number}  [options.searchTimeout=400] - timeout after the last keydown when to start searching\n * @param {String}  [options.searchPlaceholder='Search'] - placeholder for the search input\n * @param {Array}   [options.searchInputClasses=[]] - additional classes to add to the search input\n * @param {Boolean} [options.withSearch=true] - enable search functionality\n * @param {String}  [options.emptySelectButtonText=[]] - set the text of the select button before something is selected\n * @param {Array}   [options.buttonClasses=[]] - additional classes to add to the \"open\" button\n * @param {Array}   [options.buttonDisabledClasses=[]] - additional classes to add to the disabled button\n * @param {Array}   [options.buttonIconClasses=[]] - additional classes to add to \"open\" buttons icon\n * @param {Array}   [options.checkedIconClasses=[]] - additional classes to add to \"checked\" icon\n * @param {Array}   [options.listClasses=[]] - additional classes to add to each list built from loaded data\n * @param {String}  [options.selectedTextFormat=null] - set to 'count > X' where X is a number to show all texts if the\n *                                                      selected count is below X, otherwise show `selectedText`\n * @param {String}  [options.selectedTextVariable='%num%'] - set to some placeholder that is included in `selectedText`\n *                                                        that gets replaced by the actual count when displaying text\n * @param {String}  [options.selectedText=options.selectedTextVariable + 'selected'] - the actual text\n * @param {String}  [options.noResultsText='No results'] - text to display when api returns no results\n * @param {String}  [options.dividerText='Selected entries:'] - text to display inside of the divider in multiple\n * @param {Boolean} [options.resetOnClose=true] - choose to reset the content and reload when closing the popup\n * @param {String}  [options.container=null] - container to append the html to\n * @param {Boolean} [options.dropdownAlignRight=false] - set to true to align the dropdown on the right\n * @param {Boolean} [options.popupWidth='300px'] - set width for popup when container option is set\n * @param {Boolean} [options.multiple=false] - to enable multiple. alternatively set your select to multiple\n * @param {Boolean} [options.disabled=false] - to disabled the select. alternatively set your select to disabled\n * @param {Object}  [options.values] - hash with preselected values, overrides possible <option selected> elements.\n *                                    This is an alternative to adding actual <option selected> elements to the dom.\n *                                    Structure has to be {<value>: {text: <text>, disabled: <disabled>}}.\n *                                    Note that both <value> and <text> should be equal to the actual option values.\n * @param {Boolean} [options.debug=false] - enable to log debug messages\n * @param {Function} [options.customDebugHandler=null] - additional function to call when debug messages are logged.\n *                                                       Receives the instance of async-pick as first arg.\n * @constructor\n */\nexport default function AsyncPick (options) {\n    this.id = options.id\n    this.label = document.querySelector('label[for=\"' + this.id + '\"]')\n    if (this.isInitialized()) AsyncPick.elements[this.id].destroy()\n\n    this.element = document.getElementById(this.id)\n    this.url = options.url.replace(/&amp;/g, '&')\n    this.language = options.language || document.documentElement.lang || 'en'\n    this.i18n = AsyncPick.i18n ? AsyncPick.i18n[this.language] : {}\n\n    this.searchParam = options.searchParam || 'q'\n    this.pageParam = options.pageParam || '_page'\n    this.perPageParam = options.perPageParam || '_limit'\n    this.jsonKey = options.jsonKey || null\n    this.httpMethod = options.httpMethod || 'GET'\n    this.maxPages = options.maxPages || 2\n    this.perPage = options.perPage || 50\n    this.paginateUpThreshold = options.paginateUpThreshold || 20\n    this.paginateDownThreshold = options.paginateDownThreshold || 80\n    this.searchTimeout = options.searchTimeout || 400\n    this.searchPlaceholder = options.searchPlaceholder || this.i18n.searchPlaceholder || 'Search'\n    this.searchInputClasses = options.searchInputClasses || []\n    this.withSearch = options.hasOwnProperty('withSearch') ? options.withSearch : true\n    this.buttonClasses = options.buttonClasses || []\n    this.emptySelectButtonText = options.emptySelectButtonText || this.i18n.emptySelectButtonText || 'Select'\n    this.buttonDisabledClasses = options.buttonDisabledClasses || []\n    this.buttonIconClasses = options.buttonIconClasses || ['fas', 'fa-fw', 'fa-caret-down']\n    this.checkedIconClasses = options.checkedIconClasses || ['fas', 'fa-fw', 'fa-check']\n    this.listClasses = options.listClasses || []\n    this.selectedTextFormat = options.selectedTextFormat || null\n    this.selectedTextVariable = options.selectedTextVariable || '%num%'\n    this.selectedText = options.selectedText || this.i18n.selectedText || this.selectedTextVariable + ' selected'\n    this.noResultsText = options.noResultsText || this.i18n.noResultsText || 'No results'\n    this.dividerText = options.dividerText || this.i18n.dividerText || 'Selected entries:'\n    this.resetOnClose = !!options.resetOnClose\n    this.container = options.container || null\n    this.dropdownAlignRight = !!options.dropdownAlignRight\n    this.popupWidth = options.popupWidth || '300px'\n    this.selectedValues = options.values || null\n    this.debug = options.debug || false\n    this.customDebugHandler = options.customDebugHandler || null\n\n    this.multiple = !!this.element.multiple || !!options.multiple\n    this.disabled = !!this.element.disabled || !!options.disabled\n    this.resetPageProps()\n    this.blankOption = {}\n    this.previousSearchValue = ''\n    this.open = false\n    this.originalInnerHTML = this.element.innerHTML\n\n    this.initialize()\n    this.logDebugMessage('initialized with options:', this)\n    return this\n}\nAsyncPick.i18n = { de, en, es, fr }\nAsyncPick.elements = {}\n\nAsyncPick.prototype.initialize = function () {\n    this.markup = this.buildMarkup()\n    if (!this.disabled) {\n        this.addHandlers()\n        this.addEvents()\n    }\n    this.setupSelectedValues()\n    this.setupBlankOption()\n    this.register()\n    if (!this.disabled) this.loadFirstPage()\n    this.markup.setButtonText(this.selectedValues)\n}\n\nAsyncPick.prototype.buildMarkup = function () {\n    return new AsyncPickMarkup({\n        element: this.element,\n        multiple: this.multiple,\n        disabled: this.disabled,\n        searchPlaceholder: this.searchPlaceholder,\n        searchInputClasses: this.searchInputClasses,\n        withSearch: this.withSearch,\n        buttonClasses: this.buttonClasses,\n        buttonDisabledClasses: this.buttonDisabledClasses,\n        emptySelectButtonText: this.emptySelectButtonText,\n        buttonIconClasses: this.buttonIconClasses,\n        checkedIconClasses: this.checkedIconClasses,\n        listClasses: this.listClasses,\n        selectedTextFormat: this.selectedTextFormat,\n        selectedTextVariable: this.selectedTextVariable,\n        selectedText: this.selectedText,\n        noResultsText: this.noResultsText,\n        dividerText: this.dividerText,\n        container: this.container,\n        dropdownAlignRight: this.dropdownAlignRight,\n        popupWidth: this.popupWidth\n    })\n}\n\nAsyncPick.prototype.addHandlers = function () {\n    this.togglePopupHandler = this.togglePopup.bind(this)\n    if (this.withSearch) this.searchHandler = this.search.bind(this)\n    this.onEntriesListScrollHandler = this.onEntriesListScroll.bind(this)\n    this.closePopupHandler = this.closePopup.bind(this)\n    this.selectHandler = this.select.bind(this)\n    this.stopPropagationHandler = function (e) {\n        e.stopPropagation()\n    }\n    this.buttonKeyHandler = this.onButtonKeyDown.bind(this)\n    this.markupKeyHandler = this.onMarkupKeyDown.bind(this)\n    this.labelClickHandler = function (e) {\n        e.preventDefault()\n        this.markup.button.focus()\n    }.bind(this)\n    this.containerPositionHandler = this.markup.positionPopup.bind(this.markup)\n    this.resetFormHandler = this.resetAndReload.bind(this)\n}\n\nAsyncPick.prototype.resetAndReload = function () {\n    this.logDebugMessage('form reset! reloading async-pick')\n    this.resetting = true\n    this.element.innerHTML = this.originalInnerHTML\n    this.reload()\n}\n\nAsyncPick.prototype.onButtonKeyDown = function (e) {\n    if (e.keyCode === 13) { // enter\n        e.preventDefault()\n        this.togglePopup(e)\n    }\n}\n\nAsyncPick.prototype.onMarkupKeyDown = function (e) {\n    if (e.keyCode === 9 || e.keyCode === 27) { // tab || esc\n        this.closePopupAndFocus()\n    } else if (e.keyCode === 40) { // arrow down\n        this.markup.focusNextEntry()\n    } else if (e.keyCode === 38) { // arrow up\n        this.markup.focusPreviousEntry()\n    } else if (e.keyCode === 13) { // enter\n        e.preventDefault()\n        const li = this.markup.getSelected()\n        if (li) this.select({ currentTarget: li })\n    }\n}\n\nAsyncPick.prototype.addEvents = function () {\n    this.markup.button.addEventListener('click', this.togglePopupHandler)\n    if (this.withSearch) this.markup.searchInput.addEventListener('input', this.searchHandler)\n    this.markup.resultsScrollWrapper.addEventListener('scroll', this.onEntriesListScrollHandler)\n    this.markup.popup.addEventListener('click', this.stopPropagationHandler)\n    this.markup.button.addEventListener('keydown', this.buttonKeyHandler)\n    if (this.withSearch) {\n        this.markup.popup.addEventListener('keydown', this.markupKeyHandler)\n    } else {\n        this.markup.button.addEventListener('keydown', this.markupKeyHandler)\n    }\n    document.addEventListener('click', this.closePopupHandler)\n    window.addEventListener('resize', this.containerPositionHandler)\n    window.addEventListener('scroll', this.containerPositionHandler)\n    if (this.label) this.label.addEventListener('click', this.labelClickHandler)\n    if (this.element.form) this.element.form.addEventListener('reset', this.resetFormHandler)\n    let self = this\n    onDomRemove(this.markup.element, function () {\n        self.destroy()\n    })\n}\n\nAsyncPick.prototype.removeEvents = function () {\n    let self = this\n    this.markup.button.removeEventListener('click', this.togglePopupHandler)\n    if (this.withSearch) this.markup.searchInput.removeEventListener('input', this.searchHandler)\n    this.markup.resultsScrollWrapper.removeEventListener('scroll', this.onEntriesListScrollHandler)\n    Array.apply(null, this.markup.resultsWrapper.querySelectorAll('li')).forEach(function (li) {\n        li.removeEventListener('click', self.selectHandler)\n    })\n    if (this.multiple) Array.apply(null, this.markup.selectedList.querySelectorAll('li')).forEach(function (li) {\n        li.removeEventListener('click', self.selectHandler)\n    })\n    this.markup.popup.removeEventListener('click', this.stopPropagationHandler)\n    this.markup.button.removeEventListener('keydown', this.buttonKeyHandler)\n    this.markup.popup.removeEventListener('keydown', this.markupKeyHandler)\n    document.removeEventListener('click', this.closePopupHandler)\n    window.removeEventListener('resize', this.containerPositionHandler)\n    window.removeEventListener('scroll', this.containerPositionHandler)\n    if (this.label) this.label.removeEventListener('click', this.labelClickHandler)\n    if (this.element.form) this.element.form.removeEventListener('reset', this.resetFormHandler)\n}\n\nAsyncPick.prototype.setupSelectedValues = function () {\n    if (!this.selectedValues) {\n        this.selectedValues = {}\n        let self = this\n        Array.apply(null, this.element.options).filter(function (option) {\n            return option.selected\n        }).forEach(function (option) {\n            self.selectedValues[option.value] = {\n                text: option.innerHTML,\n                subtext: option.getAttribute('data-subtext'),\n                disabled: option.disabled,\n                img: JSON.parse(option.getAttribute('data-img'))\n            }\n        })\n    }\n}\n\nAsyncPick.prototype.setupBlankOption = function () {\n    let blank = Array.apply(null, this.element.options).filter(function (option) {\n        return option.value === ''\n    })[0]\n    if (!!blank) this.blankOption[''] = blank.innerHTML\n}\n\nAsyncPick.prototype.loadFirstPage = function () {\n    if (!this.loaded) this.paginateDown(this.afterFirstPageLoad)\n}\n\nAsyncPick.prototype.togglePopup = function () {\n    this.open ? this.closePopupAndFocus() : this.openPopup()\n}\n\nAsyncPick.prototype.search = function () {\n    if (!this.withSearch) return\n    if (this.searchInputTimer) clearTimeout(this.searchInputTimer)\n\n    let inputValue = this.markup.searchInput.value\n    if (this.shouldSearch(inputValue)) {\n        let self = this\n        self.previousSearchValue = inputValue\n        this.searchInputTimer = setTimeout(function () {\n            self.resetPages()\n            self.searchQuery = self.markup.searchInput.value\n            self.paginateDown()\n        }, self.searchTimeout)\n    }\n}\n\nAsyncPick.prototype.openPopup = function () {\n    this.markup.popup.classList.add('ap__popup--visible')\n    this.open = true\n    this.markup.open = true\n    this.markup.positionPopup()\n    if (this.withSearch) this.markup.searchInput.focus()\n    if (this.resetOnClose) this.markup.scrollToTop()\n}\n\nAsyncPick.prototype.closePopupAndFocus = function (e) {\n    this.closePopup(e)\n    this.markup.button.focus()\n}\n\nAsyncPick.prototype.closePopup = function (e) {\n    let clickedButton = e && (e.target === this.markup.button || e.target.parentElement === this.markup.button)\n    if (this.open && !clickedButton) {\n        this.markup.popup.classList.remove('ap__popup--visible')\n        this.open = false\n        this.markup.open = false\n        if (!this.resetting && this.resetOnClose) this.resetPagesAndSearch()\n    }\n}\n\nAsyncPick.prototype.onEntriesListScroll = function () {\n    const percentage = getScrollPercent(this.markup.resultsScrollWrapper)\n    if (this.shouldPaginateUp(percentage)) {\n        this.paginateUp()\n    } else if (this.shouldPaginateDown(percentage)) {\n        this.paginateDown()\n    }\n}\n\nAsyncPick.prototype.buildUrl = function (page) {\n    if (this.url.indexOf('?') > -1) {\n        return this.url + '&' + this.getDefaultUrlParams(page)\n    } else {\n        return this.url + '?' + this.getDefaultUrlParams(page)\n    }\n}\n\nAsyncPick.prototype.paginateUp = function () {\n    this.beforePaginateUp()\n    const url = this.buildUrl(this.upperPage)\n    request(this.httpMethod, url, this.afterPaginateUp, this)\n}\n\nAsyncPick.prototype.beforePaginateUp = function () {\n    this.paginating = true\n    this.paginatingUp = true\n    if (this.upperPage > 1) this.upperPage--\n    this.markup.topLoader.style.display = 'block'\n}\n\nAsyncPick.prototype.handleXhrResponse = function (xhr) {\n    if (responseSuccess(xhr)) {\n        try {\n            const parsedJson = JSON.parse(xhr.responseText)\n            return getObjectKey(parsedJson, this.jsonKey)\n        } catch (e) {\n            console.error('AsyncPick could not parse json! Please make sure that your server returns the correct response. Got the following:')\n            console.error(xhr.responseText)\n            return []\n        }\n    } else {\n        console.error('AsyncPick did not get a valid server response. xhr:')\n        console.error(xhr)\n        return []\n    }\n}\n\nAsyncPick.prototype.afterPaginateUp = function (xhr, self) {\n    let json = self.handleXhrResponse(xhr)\n\n    let scrollTop = 0\n    if (self.pageCount < self.maxPages) {\n        self.pageCount++\n    } else {\n        self.endReached = false\n        scrollTop = self.markup.getScrollTopWithoutPage(self.lowerPage)\n        self.markup.removePage(self.lowerPage)\n        self.lowerPage--\n    }\n\n    if (self.upperPage === 1) self.topReached = true\n    const pageUl = self.markup.prependEntries(json, self.upperPage, self.selectedValues, scrollTop)\n    if (!self.searchQueryPresent() && self.upperPage === 1 && Object.keys(self.blankOption).length > 0) {\n        self.markup.prependToPage(self.upperPage, self.blankOption, self.selectedValues)\n    }\n    self.addEventListenersForPage(pageUl)\n    self.paginatingUp = false\n    self.paginating = false\n    self.markup.topLoader.style.display = 'none'\n    self.logDebugMessage('Paginating up finished')\n}\n\nAsyncPick.prototype.paginateDown = function (callback) {\n    this.beforePaginateDown()\n    const url = this.buildUrl(this.lowerPage)\n    request(this.httpMethod, url, callback || this.afterPaginateDown, this)\n}\n\nAsyncPick.prototype.beforePaginateDown = function () {\n    this.paginating = true\n    this.paginatingDown = true\n    this.lowerPage++\n    this.markup.bottomLoader.style.display = 'block'\n}\n\nAsyncPick.prototype.afterFirstPageLoad = function (xhr, self) {\n    self.afterPaginateDown(xhr, self)\n    self.loaded = true\n    self.markup.enableButton()\n    if (self.multiple) {\n        self.markup.appendSelectedList()\n        self.markup.renderSelectedList(self.selectedValues)\n        Array.apply(null, self.markup.selectedList.querySelectorAll('li')).forEach(function (li) {\n            li.addEventListener('click', self.selectHandler)\n        })\n    }\n}\n\nAsyncPick.prototype.afterPaginateDown = function (xhr, self) {\n    let json = self.handleXhrResponse(xhr)\n\n    let scrollTop = 0\n    if (self.pageCount < self.maxPages) {\n        self.pageCount++\n    } else {\n        self.topReached = false\n        scrollTop = self.markup.getScrollTopWithoutPage(self.upperPage)\n        self.markup.removePage(self.upperPage)\n        self.upperPage++\n    }\n    if (json.length < self.perPage) self.endReached = true\n    const pageUl = self.markup.appendEntries(json, self.lowerPage, self.selectedValues, scrollTop)\n    if (!self.searchQueryPresent() && self.lowerPage === 1 && Object.keys(self.blankOption).length > 0) {\n        self.markup.prependToPage(self.lowerPage, self.blankOption, self.selectedValues)\n    }\n    self.addEventListenersForPage(pageUl)\n    self.paginatingDown = false\n    self.paginating = false\n    self.markup.bottomLoader.style.display = 'none'\n    self.logDebugMessage('Paginating down finished')\n}\n\nAsyncPick.prototype.addEventListenersForPage = function (pageUl) {\n    let self = this\n    Array.apply(null, pageUl.querySelectorAll('li.ap__results-list__item[data-value]:not(.ap__results-list__item--disabled)')).forEach(function (li) {\n        li.addEventListener('click', self.selectHandler)\n    })\n}\n\nAsyncPick.prototype.resetPageProps = function () {\n    this.pageCount = 0\n    this.upperPage = 1\n    this.lowerPage = 0\n    this.topReached = true\n    this.endReached = false\n    this.paginatingUp = false\n    this.paginatingDown = false\n    this.paginating = false\n    this.loaded = false\n    this.searchInputTimer = null\n}\n\nAsyncPick.prototype.shouldPaginateUp = function (percentage) {\n    return !this.paginating && !this.paginatingUp && !this.topReached && percentage <= this.paginateUpThreshold\n}\n\nAsyncPick.prototype.shouldPaginateDown = function (percentage) {\n    return !this.paginating && !this.paginatingDown && !this.endReached && percentage >= this.paginateDownThreshold\n}\n\nAsyncPick.prototype.shouldSearch = function (newValue) {\n    return this.withSearch && this.previousSearchValue !== newValue\n}\n\nAsyncPick.prototype.select = function (e) {\n    const li = e.currentTarget\n    const value = li.getAttribute('data-value')\n    const optionData = {\n        text: li.getAttribute('data-text'),\n        subtext: li.getAttribute('data-subtext'),\n        disabled: li.getAttribute('data-disabled'),\n        img: JSON.parse(li.getAttribute('data-img'))\n    }\n\n    if (this.multiple) {\n        this.toggleSelectedValue(value, optionData)\n    } else {\n        this.setSelectedValue(value, optionData)\n    }\n    this.markup.setButtonText(this.selectedValues)\n    if (!this.multiple) this.closePopupAndFocus()\n    this.triggerChange()\n}\n\nAsyncPick.prototype.triggerChange = function () {\n    let event = new CustomEvent('Event', { detail: this.selectedValues })\n    event.initEvent('change', true, true)\n    this.element.dispatchEvent(event)\n}\n\nAsyncPick.prototype.toggleSelectedValue = function (value, optionData) {\n    if (this.selectedValues[value]) {\n        this.removeSelectedValue(value)\n    } else {\n        this.addSelectedValue(value, optionData)\n    }\n}\n\nAsyncPick.prototype.addSelectedValue = function (value, optionData) {\n    this.selectedValues[value] = optionData\n    const newLi = this.markup.selectItem(value, optionData)\n    if (newLi) newLi.addEventListener('click', this.selectHandler)\n    if (this.withSearch) this.markup.searchInput.focus()\n    this.logDebugMessage('Value added:', optionData)\n}\n\nAsyncPick.prototype.removeSelectedValue = function (value) {\n    delete this.selectedValues[value]\n    const removedLi = this.markup.deselectItem(value)\n    if (removedLi) removedLi.removeEventListener('click', this.selectHandler)\n    this.logDebugMessage('Value removed:', value)\n}\n\nAsyncPick.prototype.setSelectedValue = function (value, optionData) {\n    this.removeSelectedValue(Object.keys(this.selectedValues)[0])\n    this.element.innerHTML = '' // remove all remaining options that might have been added initially\n    this.addSelectedValue(value, optionData)\n    this.logDebugMessage('Value set:', optionData)\n}\n\nAsyncPick.prototype.logDebugMessage = function (msg, someObject) {\n    if (this.debug) {\n        if (msg) console.log('AsyncPick#' + this.id, msg)\n        if (someObject) console.log(someObject)\n        if (typeof this.customDebugHandler === 'function') this.customDebugHandler(this)\n    }\n}\n\nAsyncPick.prototype.getDefaultUrlParams = function (page) {\n    let params = {}\n    params[this.perPageParam] = this.perPage\n    params[this.pageParam] = page\n    if (this.searchQueryPresent()) params[this.searchParam] = this.searchQuery\n    return objectToUrlParam(params)\n}\n\nAsyncPick.prototype.searchQueryPresent = function () {\n    if (!this.withSearch) return false\n    const query = this.markup.searchInput.value\n    return typeof query !== 'undefined' && query.trim().length > 0\n}\n\nAsyncPick.prototype.register = function () {\n    AsyncPick.elements[this.id] = this\n}\n\nAsyncPick.prototype.isInitialized = function () {\n    if (typeof window.AsyncPick === 'undefined') {\n        return false\n    } else {\n        return !!AsyncPick.elements[this.id]\n    }\n}\n\nAsyncPick.prototype.resetPages = function () {\n    this.markup.clean()\n    this.resetPageProps()\n}\n\nAsyncPick.prototype.resetPagesAndSearch = function () {\n    if (this.withSearch) this.markup.searchInput.value = ''\n    this.resetPages()\n    this.paginateDown()\n}\n\nAsyncPick.prototype.destroy = function () {\n    if (!this.disabled) this.removeEvents()\n    if (this.markup) this.markup.destroy()\n    this.selectedValues = {}\n    delete this.markup\n    delete AsyncPick.elements[this.id]\n    this.element.classList.remove('visually-hidden')\n}\n\nAsyncPick.prototype.reload = function () {\n    this.destroy()\n    this.resetPageProps()\n    this.multiple = !!this.element.multiple\n    this.disabled = !!this.element.disabled\n    this.selectedValues = null\n    this.initialize()\n}\n\n/**\n * Helpers\n */\n\nfunction getScrollPercent (element) {\n    return (element.scrollTop / (element.scrollHeight - element.clientHeight) * 100)\n}\n\nfunction objectToUrlParam (object) {\n    let params = []\n    Object.keys(object).forEach(function (key) {\n        params.push(key + '=' + encodeURIComponent(object[key]))\n    })\n    return params.join('&')\n}\n\nfunction request (method, url, handler, context) {\n    let xhr = new XMLHttpRequest()\n    xhr.addEventListener('load', function () {\n        handler(this, context)\n    })\n    xhr.open(method, url)\n    xhr.setRequestHeader('Accept', 'application/json')\n    xhr.send()\n}\n\nfunction getObjectKey (object, key) {\n    if (!key) return object\n    return object[key]\n}\n\nfunction responseSuccess (xhr) {\n    return xhr.readyState === 4 && xhr.status.toString().match(/2\\d\\d/)\n}\n\nfunction onDomRemove (element, onDetachCallback) {\n    const observer = new MutationObserver(function () {\n        function isDetached (el) {\n            if (el.parentNode === document) {\n                return false\n            } else if (el.parentNode === null) {\n                return true\n            } else {\n                return isDetached(el.parentNode)\n            }\n        }\n\n        if (isDetached(element)) {\n            observer.disconnect()\n            onDetachCallback()\n        }\n    })\n\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    })\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nimport AsyncPick from 'async-pick'\n\nexport default class extends Controller {\n    static values = {\n        urlOption: String,\n        emptySelectButtonTextOption: String,\n        containerOption: String,\n        searchParamOption: String,\n        jsonKeyOption: String,\n        dropdownAlignRightOption: Boolean,\n        selectedTextFormatOption: String,\n        resetOnCloseOption: Boolean,\n        withSearchOption: Boolean\n    }\n\n    reconnect() {\n        this._async_pick.destroy()\n        this.load()\n    }\n\n    connect() {\n        this.load()\n        this.element['asyncPick'] = {\n            reconnect: this.reconnect.bind(this),\n            values: this._async_pick.selectedValues\n        }\n    }\n\n    load() {\n        let options = this.options\n        Object.keys(options).forEach(function (key) {\n            if (options[key] === \"\") delete options[key]\n        })\n\n        const elementId = this.element.getAttribute('id')\n        this._async_pick = new AsyncPick(Object.assign({}, this.defaultOptions, {id: elementId}, options))\n    }\n\n    get options() {\n        return {\n            emptySelectButtonText: this.emptySelectButtonTextOptionValue,\n            url: this.urlOptionValue,\n            container: this.containerOptionValue,\n            searchParam: this.searchParamOptionValue,\n            jsonKey: this.jsonKeyOptionValue,\n            dropdownAlignRight: this.hasDropdownAlignRightOptionValue ? this.dropdownAlignRightOptionValue : \"\",\n            selectedTextFormat: this.selectedTextFormatOptionValue,\n            resetOnClose: this.hasResetOnCloseOptionValue ? this.resetOnCloseOptionValue : \"\",\n            withSearch: this.hasWithSearchOptionValue ? this.withSearchOptionValue : true\n        }\n    }\n\n    get defaultOptions() {\n        return {\n            language: document.documentElement.lang,\n            pageParam: 'page',\n            perPageParam: 'per_page',\n            jsonKey: 'data',\n            searchParam: 'q[username_or_email_or_full_name_or_full_name_reverse_cont_any]',\n            httpMethod: 'GET',\n            maxPages: 2,\n            perPage: 50,\n            paginateUpThreshold: 10,\n            paginateDownThreshold: 90,\n            searchTimeout: 400,\n            searchInputClasses: ['form-control'],\n            withSearch: true,\n            buttonClasses: ['form-select'],\n            buttonDisabledClasses: ['btn-disabled'],\n            buttonIconClasses: [],\n            checkedIconClasses: ['fas', 'fa-fw', 'fa-check'],\n            listClasses: [],\n            selectedTextFormat: 'count>3',\n            selectedTextVariable: '%num%',\n            resetOnClose: true,\n            container: false,\n            dropdownAlignRight: false,\n            popupWidth: '300px',\n            values: null\n        }\n    }\n}\n", "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 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 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\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, 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\";", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n  }\n\n  return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`\n  }\n\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0]\n  }\n\n  return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object))\n  }\n\n  return null\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])')\n\n  if (!closedDetails) {\n    return elementIsVisible\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary')\n    if (summary && summary.parentNode !== closedDetails) {\n      return false\n    }\n\n    if (summary === null) {\n      return false\n    }\n  }\n\n  return elementIsVisible\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback()\n        }\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n  }\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element })\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue\n        }\n\n        hydrateObj(event, { delegateTarget: target })\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn)\n        }\n\n        return fn.apply(target, [event])\n      }\n    }\n  }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events)\n    .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string'\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n  let typeEvent = getTypeEvent(originalTypeEvent)\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    callable = wrapFunction(callable)\n  }\n\n  const events = getElementEvents(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n    return\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = isDelegated ?\n    bootstrapDelegationHandler(element, handler, callable) :\n    bootstrapHandler(element, callable)\n\n  fn.delegationSelector = isDelegated ? handler : null\n  fn.callable = callable\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false)\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getElementEvents(element)\n    const storeElementEvent = events[typeEvent] || {}\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n\n    let jQueryEvent = null\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value\n        }\n      })\n    }\n  }\n\n  return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true\n  }\n\n  if (value === 'false') {\n    return false\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value)\n  }\n\n  if (value === '' || value === 'null') {\n    return null\n  }\n\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value))\n  } catch {\n    return value\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '')\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)\n      attributes[pureKey] = normalizeData(element.dataset[key])\n    }\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {}\n  }\n\n  static get DefaultType() {\n    return {}\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    return config\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    }\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property]\n      const valueType = isElement(value) ? 'element' : toType(value)\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        )\n      }\n    }\n  }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.8'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super()\n\n    element = getElement(element)\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    this._config = this._getConfig(config)\n\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null\n    }\n  }\n\n  // Private\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`\n  }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n  }\n\n  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n    let ancestor = element.parentNode.closest(selector)\n\n    while (ancestor) {\n      parents.push(ancestor)\n      ancestor = ancestor.parentNode.closest(selector)\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element)\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null\n    }\n\n    return null\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.findOne(selector) : null\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.find(selector) : []\n  }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n}\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super()\n    this._element = element\n\n    if (!element || !Swipe.isSupported()) {\n      return\n    }\n\n    this._config = this._getConfig(config)\n    this._deltaX = 0\n    this._supportPointerEvents = Boolean(window.PointerEvent)\n    this._initEvents()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY)\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX\n\n      return\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX\n    }\n\n    this._handleSwipe()\n    execute(this._config.endCallback)\n  }\n\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ?\n      0 :\n      event.touches[0].clientX - this._deltaX\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX)\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltaX / this._deltaX\n\n    this._deltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n  }\n}\n\nexport default Swipe\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._interval = null\n    this._activeElement = null\n    this._isSliding = false\n    this.touchTimeout = null\n    this._swipeHelper = null\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._addEventListeners()\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element)\n    }\n\n    this._clearInterval()\n  }\n\n  cycle() {\n    this._clearInterval()\n    this._updateInterval()\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n      return\n    }\n\n    this.cycle()\n  }\n\n  to(index) {\n    const items = this._getItems()\n    if (index > items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive())\n    if (activeIndex === index) {\n      return\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n    this._slide(order, items[index])\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose()\n    }\n\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval\n    return config\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause()\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout)\n      }\n\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n    }\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    }\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig)\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(this._directionToOrder(direction))\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element)\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n    activeIndicator.removeAttribute('aria-current')\n\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n      newActiveIndicator.setAttribute('aria-current', 'true')\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive()\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    this._config.interval = elementInterval || this._config.defaultInterval\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return\n    }\n\n    const activeElement = this._getActive()\n    const isNext = order === ORDER_NEXT\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n    if (nextElement === activeElement) {\n      return\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      })\n    }\n\n    const slideEvent = triggerEvent(EVENT_SLIDE)\n\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return\n    }\n\n    const isCycling = Boolean(this._interval)\n    this.pause()\n\n    this._isSliding = true\n\n    this._setActiveIndicatorElement(nextElementIndex)\n    this._activeElement = nextElement\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n    nextElement.classList.add(orderClassName)\n\n    reflow(nextElement)\n\n    activeElement.classList.add(directionalClassName)\n    nextElement.classList.add(directionalClassName)\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n      this._isSliding = false\n\n      triggerEvent(EVENT_SLID)\n    }\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE)\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element)\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config)\n\n      if (typeof config === 'number') {\n        data.to(config)\n        return\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return\n  }\n\n  event.preventDefault()\n\n  const carousel = Carousel.getOrCreateInstance(target)\n  const slideIndex = this.getAttribute('data-bs-slide-to')\n\n  if (slideIndex) {\n    carousel.to(slideIndex)\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next()\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  carousel.prev()\n  carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getElement,\n  reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n  parent: null,\n  toggle: true\n}\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isTransitioning = false\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElement => foundElement === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let activeChildren = []\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter(element => element !== this._element)\n        .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide()\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger)\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  // Private\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element)\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected))\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n      element.setAttribute('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {}\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n}\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._popper = null\n    this._parent = this._element.parentNode // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._createPopper()\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle)\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      const composedPath = event.composedPath()\n      const isMenuTarget = composedPath.includes(context._menu)\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue\n      }\n\n      const relatedTarget = { relatedTarget: context._element }\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName)\n    const isEscapeEvent = event.key === ESCAPE_KEY\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return\n    }\n\n    event.preventDefault()\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n      this :\n      (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation()\n      instance.show()\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (instance._isShown()) { // else is escape and we check if it is shown\n      event.stopPropagation()\n      instance.hide()\n      getToggleButton.focus()\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n  execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    const element = this._getElement()\n    if (this._config.isAnimated) {\n      reflow(element)\n    }\n\n    element.classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    const element = this._getElement()\n    this._config.rootElement.append(element)\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config\n\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProperty)\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty)\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty)\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty)\n        return\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty)\n      element.style.setProperty(styleProperty, value)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n      return\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel)\n    }\n  }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._isTransitioning = true\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._backdrop.show(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    this._isTransitioning = true\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY)\n    EventHandler.off(this._dialog, EVENT_KEY)\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      this._triggerBackdropTransition()\n    })\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog()\n      }\n    })\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n          return\n        }\n\n        if (this._config.backdrop) {\n          this.hide()\n        }\n      })\n    })\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const initialOverflowY = this._element.style.overflowY\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY\n      }, this._dialog)\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin,\n  isDisabled,\n  isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate()\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW)\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.add(CLASS_NAME_HIDING)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n        return\n      }\n\n      this.hide()\n    }\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop)\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    })\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show()\n  }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide()\n    }\n  }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n    .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n}\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map(config => this._resolvePossibleFunction(config))\n      .filter(Boolean)\n  }\n\n  hasContent() {\n    return this.getContent().length > 0\n  }\n\n  changeContent(content) {\n    this._checkContent(content)\n    this._config.content = { ...this._config.content, ...content }\n    return this\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div')\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector)\n    }\n\n    const template = templateWrapper.children[0]\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '))\n    }\n\n    return template\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config)\n    this._checkContent(config.content)\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!templateElement) {\n      return\n    }\n\n    content = this._resolvePossibleFunction(content)\n\n    if (!content) {\n      templateElement.remove()\n      return\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement)\n      return\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content)\n      return\n    }\n\n    templateElement.textContent = content\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [undefined, this])\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = ''\n      templateElement.append(element)\n      return\n    }\n\n    templateElement.textContent = element.textContent\n  }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n  defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n            '<div class=\"tooltip-arrow\"></div>' +\n            '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  title: '',\n  trigger: 'hover focus'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    super(element, config)\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._isHovered = null\n    this._activeTrigger = {}\n    this._popper = null\n    this._templateFactory = null\n    this._newContent = null\n\n    // Protected\n    this.tip = null\n\n    this._setListeners()\n\n    if (!this._config.selector) {\n      this._fixTitle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (this._isShown()) {\n      this._leave()\n      return\n    }\n\n    this._enter()\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper()\n\n    const tip = this._getTipElement()\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n    const { container } = this._config\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n    }\n\n    this._popper = this._createPopper(tip)\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n      if (this._isHovered === false) {\n        this._leave()\n      }\n\n      this._isHovered = false\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const tip = this._getTipElement()\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n    this._isHovered = null // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper()\n      }\n\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle())\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n    }\n\n    return this.tip\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml()\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n    const tipId = getUID(this.constructor.NAME).toString()\n\n    tip.setAttribute('id', tipId)\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    return tip\n  }\n\n  setContent(content) {\n    this._newContent = content\n    if (this._isShown()) {\n      this._disposePopper()\n      this.show()\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content)\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      })\n    }\n\n    return this._templateFactory\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    }\n  }\n\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element])\n    const attachment = AttachmentMap[placement.toUpperCase()]\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element, this._element])\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n          }\n        }\n      ]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])\n          context.toggle()\n        })\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSEENTER) :\n          this.constructor.eventName(EVENT_FOCUSIN)\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSELEAVE) :\n          this.constructor.eventName(EVENT_FOCUSOUT)\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n          context._enter()\n        })\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget)\n\n          context._leave()\n        })\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n\n    if (!title) {\n      return\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title)\n    }\n\n    this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title')\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true\n      return\n    }\n\n    this._isHovered = true\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show()\n      }\n    }, this._config.delay.show)\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return\n    }\n\n    this._isHovered = false\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide()\n      }\n    }, this._config.delay.hide)\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout)\n    this._timeout = setTimeout(handler, timeout)\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true)\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute]\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value\n      }\n    }\n\n    config.selector = false\n    config.trigger = 'manual'\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n\n    if (this.tip) {\n      this.tip.remove()\n      this.tip = null\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent()\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    }\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n    this._activeTarget = null\n    this._observer = null\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    }\n    this.refresh() // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables()\n    this._maybeEnableSmoothScroll()\n\n    if (this._observer) {\n      this._observer.disconnect()\n    } else {\n      this._observer = this._getNewObserver()\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section)\n    }\n  }\n\n  dispose() {\n    this._observer.disconnect()\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n    }\n\n    return config\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK)\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.target.hash)\n      if (observableSection) {\n        event.preventDefault()\n        const root = this._rootElement || window\n        const height = observableSection.offsetTop - this._element.offsetTop\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' })\n          return\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height\n      }\n    })\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    }\n\n    return new IntersectionObserver(entries => this._observerCallback(entries), options)\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n      this._process(targetElement(entry))\n    }\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n    this._previousScrollData.parentScrollTop = parentScrollTop\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null\n        this._clearActiveClass(targetElement(entry))\n\n        continue\n      }\n\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry)\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return\n        }\n\n        continue\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry)\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor)\n        this._observableSections.set(anchor.hash, observableSection)\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return\n    }\n\n    this._clearActiveClass(this._config.target)\n    this._activeTarget = target\n    target.classList.add(CLASS_NAME_ACTIVE)\n    this._activateParents(target)\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n      return\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE)\n\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element)\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n    if (!this._parent) {\n      return\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren())\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() { // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element\n    if (this._elemIsActive(innerElem)) {\n      return\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem()\n\n    const hideEvent = active ?\n      EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n      null\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._deactivate(active, innerElem)\n    this._activate(innerElem, active)\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n\n    this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.removeAttribute('tabindex')\n      element.setAttribute('aria-selected', true)\n      this._toggleDropDown(element, true)\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem\n      })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE)\n    element.blur()\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.setAttribute('aria-selected', false)\n      element.setAttribute('tabindex', '-1')\n      this._toggleDropDown(element, false)\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _keydown(event) {\n    if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n      return\n    }\n\n    event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault()\n\n    const children = this._getChildren().filter(element => !isDisabled(element))\n    let nextActiveElement\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true })\n      Tab.getOrCreateInstance(nextActiveElement).show()\n    }\n  }\n\n  _getChildren() { // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child)\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child)\n    const isActive = this._elemIsActive(child)\n    const outerElem = this._getOuterElement(child)\n    child.setAttribute('aria-selected', isActive)\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1')\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab')\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child)\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child)\n\n    if (!target) {\n      return\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element)\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem)\n      if (element) {\n        element.classList.toggle(className, open)\n      }\n    }\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n    outerElem.setAttribute('aria-expanded', open)\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value)\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE)\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element)\n  }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting\n        break\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting\n        break\n      }\n\n      default: {\n        break\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "import {Controller} from \"@hotwired/stimulus\"\nimport {Modal} from \"bootstrap\"\n\nexport default class extends Controller {\n    static values = {\n        delay: Number,\n        redirectPath: String\n    }\n\n    connect() {\n        this.modal = new Modal(this.element);\n        this.modal.show();\n        this.timeoutId = setTimeout(() => {\n            this.autoSaveAndRedirect();\n        }, this.delayValue);\n    }\n\n    disconnect() {\n        clearTimeout(this.timeoutId);\n    }\n\n    autoSaveAndRedirect() {\n        this.disableFormLeave();\n\n        const autoSaveFlags = document.querySelectorAll('.auto_save_flag');\n        if (autoSaveFlags.length > 0) {\n            autoSaveFlags.forEach((flag) => {\n                flag.value = 'true';\n            });\n            this.saveChanges();\n        } else {\n            window.location.href = this.redirectPathValue;\n        }\n\n        setTimeout(() => {\n            console.log(\"Force redirect.\")\n            this.forceRedirect();\n        }, 3500);\n    }\n\n    saveChanges() {\n        const submitButtons = this.querySubmitButtons();\n        console.log(`Triggering submit on ${submitButtons.length} forms.`);\n        if (submitButtons.length > 0) {\n            submitButtons.forEach((button) => button.click());\n        }\n    }\n\n    querySubmitButtons() {\n        const timeSettingsForm = document.querySelector('#timeSettingsForm');\n        if (timeSettingsForm) {\n            const selectedRadio = document.querySelector('input[name=\"tutorial[time_type]\"]:checked');\n            const radioBsTargetId = selectedRadio.value;\n            const form = this.getTimeSettingsForm(radioBsTargetId);\n            return form ? form.querySelectorAll('button[name=\"button\"][type=\"submit\"]') : [];\n        } else {\n            const selector = 'button[name=\"button\"][type=\"submit\"]:not([data-triggers-external-api])';\n            return document.querySelectorAll(selector);\n        }\n    }\n\n    getTimeSettingsForm(bsTargetId) {\n        if (parseInt(bsTargetId) === 0) {\n            return null;\n        } else if (parseInt(bsTargetId) === 1) {\n            return document.querySelector('#repetitionsAreaForm');\n        } else if (parseInt(bsTargetId) === 2) {\n            return document.querySelector('#exceedsAreaForm');\n        } else if (parseInt(bsTargetId) === 3) {\n            return document.querySelector('#dripFeedSettingsAreaForm');\n        }\n    }\n\n    disableFormLeave() {\n        document.querySelectorAll('[data-controller~=\"form-leave\"]').forEach(el => {\n            el.dataset.preventLeave = \"false\";\n        });\n    }\n\n    forceRedirect() {\n        this.disableFormLeave();\n\n        document.querySelectorAll('form').forEach(form => form.remove());\n        window.location.href = this.redirectPathValue;\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {debounce} from 'debounce'\n\nexport default class extends Controller {\n    initialize() {\n        this.save = this.save.bind(this)\n    }\n\n    connect() {\n        this.save = debounce(this.save, 50)\n    }\n\n    save() {\n        if (!window._rails_loaded) return\n        if (!this.element.reportValidity()) return\n\n        let defaultPrevented = Rails.fire(this.element, 'submit')\n        // Submit the form when Rails prevented the default behavior. ++Rails.fire++ return false if the form is remote.\n        if (defaultPrevented) this.element.submit()\n    }\n}\n", "/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst keyResolvers = {\n  '': v => v,\n  x: o => o.x,\n  y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\nfunction _splitKey(key) {\n  const parts = key.split('.');\n  const keys = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value, last) =>\n  _lookup(table, value, last\n    ? index => table[index][key] <= value\n    : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n  let type, xOffset, yOffset, size, cornerRadius, width;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    if (w) {\n      ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n    } else {\n      ctx.arc(x, y, radius, 0, TAU);\n    }\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n    ctx.closePath();\n    break;\n  case 'rect':\n    if (!rotation) {\n      size = Math.SQRT1_2 * radius;\n      width = w ? w / 2 : size;\n      ctx.rect(x - width, y - size, 2 * width, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = w ? w / 2 : Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    break;\n  case 'dash':\n    ctx.moveTo(x, y);\n    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n      : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\n  }\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n    : mode === 'after' ? t < 1 ? p1.y : p2.y\n    : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  let {start, end, loop} = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };\n", "/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      },\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true,\n    }\n  }\n};\n\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    },\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    },\n  },\n  indexAxis: 'r',\n  startAngle: 0,\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndex.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\n\nclass ScatterController extends DatasetController {\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    if (this.options.showLine) {\n      const {dataset: line, _dataset} = meta;\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    }\n    this.updateElements(points, start, count, mode);\n  }\n  addElements() {\n    const {showLine} = this.options;\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = registry.getElement('line');\n    }\n    super.addElements();\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  init(chartOptions) {}\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n  return {plugins, localIds};\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvar version = \"3.9.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nclass Chart {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  if (circular) {\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n  circular: true,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0,\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n\nfunction _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n\nfunction _getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0,\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation,\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\n\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    adapter.init(opts);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n", "import {Chart, registerables} from '../dist/chart.mjs';\n\nChart.register(...registerables);\n\nexport default Chart;\n", "var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nimport { Controller } from \"@hotwired/stimulus\";\nimport Chart from \"chart.js/auto\";\nclass src_default extends Controller {\n  connect() {\n    const element = this.hasCanvasTarget ? this.canvasTarget : this.element;\n    this.chart = new Chart(element.getContext(\"2d\"), {\n      type: this.typeValue,\n      data: this.chartData,\n      options: this.chartOptions\n    });\n  }\n  disconnect() {\n    this.chart.destroy();\n    this.chart = void 0;\n  }\n  get chartData() {\n    if (!this.hasDataValue) {\n      console.warn(\"[stimulus-chartjs] You need to pass data as JSON to see the chart.\");\n    }\n    return this.dataValue;\n  }\n  get chartOptions() {\n    return __spreadValues(__spreadValues({}, this.defaultOptions), this.optionsValue);\n  }\n  get defaultOptions() {\n    return {};\n  }\n}\nsrc_default.targets = [\"canvas\"];\nsrc_default.values = {\n  type: {\n    type: String,\n    default: \"line\"\n  },\n  data: Object,\n  options: Object\n};\nexport { src_default as default };\n", "import ChartJs from \"stimulus-chartjs\"\nexport default ChartJs", "import { Controller as s } from \"@hotwired/stimulus\";\nconst c = class c extends s {\n  initialize() {\n    this.toggle = this.toggle.bind(this), this.refresh = this.refresh.bind(this);\n  }\n  checkboxAllTargetConnected(e) {\n    e.addEventListener(\"change\", this.toggle), this.refresh();\n  }\n  checkboxTargetConnected(e) {\n    e.addEventListener(\"change\", this.refresh), this.refresh();\n  }\n  checkboxAllTargetDisconnected(e) {\n    e.removeEventListener(\"change\", this.toggle), this.refresh();\n  }\n  checkboxTargetDisconnected(e) {\n    e.removeEventListener(\"change\", this.refresh), this.refresh();\n  }\n  toggle(e) {\n    e.preventDefault(), this.checkboxTargets.forEach((t) => {\n      t.checked = e.target.checked, this.triggerInputEvent(t);\n    });\n  }\n  refresh() {\n    const e = this.checkboxTargets.length, t = this.checked.length;\n    this.checkboxAllTarget.checked = t > 0, this.checkboxAllTarget.indeterminate = t > 0 && t < e;\n  }\n  triggerInputEvent(e) {\n    const t = new Event(\"input\", { bubbles: !1, cancelable: !0 });\n    e.dispatchEvent(t);\n  }\n  get checked() {\n    return this.checkboxTargets.filter((e) => e.checked);\n  }\n  get unchecked() {\n    return this.checkboxTargets.filter((e) => !e.checked);\n  }\n};\nc.targets = [\"checkboxAll\", \"checkbox\"];\nlet h = c;\nexport {\n  h as default\n};\n", "import CheckboxSelectAll from \"stimulus-checkbox-select-all\"\nexport default CheckboxSelectAll", "/*\n  Checkbox to Form Stimulus Controller v1.0.0\n\n  This controller is able to listen on click events from a checkbox input and put this information to hidden fields\n  that are put on a given outputForm Target.\n\n*/\n\nimport {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['checkbox', 'outputForm']\n    static values = {outputFieldName: String}\n\n    checkboxTargetConnected(checkbox) {\n        Array.prototype.forEach.call(this.outputFormTarget.querySelectorAll('input[type=\"hidden\"]'), function (element) {\n            if (element.value === checkbox.value) {\n                checkbox.checked = true\n            }\n        })\n    }\n\n    perform(event) {\n        let currentCheckboxValue = event.target.value\n        let existingCheckbox = document.getElementById(`${this.outputFieldNameValue}_${currentCheckboxValue}`)\n\n        if (existingCheckbox === null && event.target.checked === true) {\n            let newHiddenField = document.createElement('input')\n            newHiddenField.type = 'hidden'\n            newHiddenField.id = `${this.outputFieldNameValue}_${currentCheckboxValue}`\n            newHiddenField.name = this.outputFieldNameValue\n            newHiddenField.value = currentCheckboxValue\n            this.outputFormTarget.appendChild(newHiddenField)\n        } else {\n            existingCheckbox.remove()\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['source', 'copyButton']\n\n    connect() {\n        if (this._clipboardSupport()) {\n            this.element.classList.add('clipboard--supported')\n        } else {\n            this.copyButtonTarget.style.display = 'none'\n        }\n    }\n\n    copy() {\n        if (this.sourceTarget instanceof HTMLInputElement) {\n            navigator.clipboard.writeText(this.sourceTarget.value)\n        } else {\n            navigator.clipboard.writeText(this.sourceTarget.innerText.trim())\n        }\n    }\n\n    _clipboardSupport() {\n        if (!navigator.clipboard) return false\n        try {\n            navigator.clipboard.writeText('42')\n        } catch (_error) {\n            return false\n        }\n        return true\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['trigger', 'collapsible']\n    static values = {state: {type: String, default: 'open'}, open: String, close: String}\n\n    toggle(_event) {\n        if (this.stateValue === 'open') {\n            Array.prototype.forEach.call(this.collapsibleTargets, function (element) {\n                if (element.getAttribute('aria-expanded') === 'true') element.click()\n            })\n            this.stateValue = 'closed'\n            this.triggerTarget.innerText = this.closeValue\n        } else if (this.stateValue === 'closed') {\n            Array.prototype.forEach.call(this.collapsibleTargets, function (element) {\n                if (element.getAttribute('aria-expanded') === 'false') element.click()\n            })\n            this.stateValue = 'open'\n            this.triggerTarget.innerText = this.openValue\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {Collapse} from 'bootstrap'\n\nexport default class extends Controller {\n    connect() {\n        // TODO: Actually make this work. For some reasons this wont work and cannot trigger the element itself,\n        //  only the collapse can be triggered. @see popover_controller.js\n        new Collapse(this.element)\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['hour', 'minute', 'second']\n    static values = {minutes: Number}\n\n    initialize() {\n        this.countdownTimer = this.countdownTimer.bind(this)\n\n        const date = new Date()\n        this.initialTime = date.setMinutes(date.getMinutes() + this.minutesValue)\n    }\n\n    connect() {\n        this.countdownTimer()\n        this._timeout = setInterval(this.countdownTimer, 1000)\n    }\n\n    disconnect() {\n        if (this._timeout) clearInterval(this._timeout)\n    }\n\n    countdownTimer() {\n        const date = new Date()\n        date.setMinutes(date.getMinutes() + this.minutesValue)\n\n        const difference = +this.initialTime - +new Date()\n\n        if (difference > 0) {\n            const parts = {\n                hours: Math.floor((difference / (1000 * 60 * 60)) % 24),\n                minutes: Math.floor((difference / 1000 / 60) % 60),\n                seconds: Math.floor((difference / 1000) % 60),\n            }\n\n            this.hourTarget.innerText = parts['hours']\n            this.minuteTarget.innerText = parts['minutes']\n            this.secondTarget.innerText = parts['seconds']\n        } else {\n            if (this._timeout) clearInterval(this._timeout)\n            this._submitClosestForm()\n        }\n    }\n\n    _submitClosestForm() {\n        const form = this.element.closest('form')\n        Rails.fire(form, 'submit')\n\n        if (form.dataset.remote !== 'true') form.submit()\n    }\n}\n", "/*\n  Datatable Stimulus Controller v1.0.0\n\n  Values:\n    debug (false):\n    debounceWait (500): Wait time after clicking a filter or typing in a search input field.\n    spinner (<html>): HTML for displaying any kind of spinner Element showing when Datatables is doing something.\n    spinnerLabel (Loading...): Visually hidden label for displaying information for the spinner element.\n    filterFormSelector (form): Default filter form selector for main form.\n    perPageName (per_page): Custom name attribute for per page parameter.\n    perPageDefault (10): Default per page size.\n    sortName (q[s]): Custom name attribute for sort parameter.\n    sessionStorageKey (this.filterFormSelectorValue):\n    autoFillUrlEnabled (true): Enables autofill of filter form through URL search params.\n    autoFillStorageEnabled (true): Enables autofill of filter form through session storage.\n\n  Special debug UrlSearchParam: add debug_per_page Parameter to the url to override the per_page attribute vor all\n  Datatables in the site. After setting this parameter only you must override this with the datatable_per_page_dropdown\n  element or deleting the session storage element.\n  Example for only showing 2 Iterm per page: http://u01.dev.localhost:3000/management/users?debug_per_page=2\n */\nimport {Controller} from '@hotwired/stimulus'\nimport {debounce} from 'debounce'\n\nexport default class extends Controller {\n    static values = {\n        debug: {type: Boolean, default: false},\n        debounceWait: {type: Number, default: 500},\n        spinner: String,\n        spinnerLabel: String,\n        filterFormSelector: String,\n        perPageName: {type: String, default: 'per_page'},\n        perPageDefault: {type: Number, default: 10},\n        sortName: {type: String, default: 'q[s]'},\n        sessionStorageKey: String,\n        autoFillUrlEnabled: {type: Boolean, default: true},\n        autoFillStorageEnabled: {type: Boolean, default: true}\n    }\n    static targets = ['tableWrapper', 'filterIndicator', 'filterReset']\n\n    initialize() {\n        // Debounce action method, triggered by form elements.\n        this.debouncedSubmitFilterForm = debounce(this.submitFilterForm, this.debounceWaitValue)\n        this._handlePostError = this._handlePostError.bind(this)\n    }\n\n    connect() {\n        this._showLoader()\n        this._filterForm = this.element.querySelector(this.filterFormSelector)\n        this._installAjaxErrorListener()\n        this._addPerPageField()\n        this._addPageField()\n        this._addSortField()\n        this._originalFilterFormData = this._getFormData()\n        this._setFormData()\n        this._saveToSessionStorage()\n        this._toggleFilterReset()\n        Rails.fire(this._filterForm, 'submit')\n\n        // Stimulus Power Move - For Reference.\n        this.element[this.identifier] = {\n            submitFilterForm: this.submitFilterForm.bind(this),\n            debouncedSubmitFilterForm: this.debouncedSubmitFilterForm.bind(this),\n            resetFilterForm: this.resetFilterForm.bind(this),\n            reloadFilterForm: this.reloadFilterForm.bind(this)\n        }\n    }\n\n    disconnect() {\n        this._uninstallAjaxErrorListener()\n    }\n\n    submitFilterForm(_event) {\n        this._log('fire rails form submit')\n        this._showLoader()\n        this._pageField.value = '' // Reset page field whenever the users uses the form filters.\n        this._saveToSessionStorage()\n        this._setUrlSearchParams()\n        this._toggleFilterReset()\n        Rails.fire(this._filterForm, 'submit')\n    }\n\n    reloadFilterForm(_event) {\n        this._log('reload form')\n        this._showLoader()\n        Rails.fire(this._filterForm, 'submit')\n    }\n\n    resetFilterForm(_event) {\n        this._log('reset form')\n        this._showLoader()\n        this._filterForm.reset()\n        // Hidden fields are not reset by form.reset().\n        this._pageField.value = ''\n        this._sortField.value = ''\n        this._saveToSessionStorage()\n        this._setUrlSearchParams()\n        this._toggleFilterReset()\n        Rails.fire(this._filterForm, 'submit')\n    }\n\n    selectPerPage(event) {\n        this._log('select per page')\n        this._showLoader()\n        this._perPageField.value = event.currentTarget.dataset.perPage\n        this._saveToSessionStorage()\n        this._setUrlSearchParams()\n    }\n\n    filterTable(event) {\n        this._log('filter table')\n        this._showLoader()\n        let sortParam = ''\n        if (this.autoFillUrlEnabledValue && event.currentTarget instanceof HTMLAnchorElement) {\n            sortParam = new URL(event.currentTarget.href).searchParams.get(this.sortNameValue)\n        }\n        this._sortField.value = sortParam\n        this._saveToSessionStorage()\n        this._setUrlSearchParams()\n        this._toggleFilterReset()\n    }\n\n    paginate(event) {\n        this._log('paginate')\n        this._showLoader()\n        let perPageParam = ''\n        if (this.autoFillUrlEnabledValue) perPageParam = new URL(event.currentTarget.href).searchParams.get('page')\n        this._pageField.value = perPageParam === '1' ? '' : perPageParam\n        this._saveToSessionStorage()\n        this._setUrlSearchParams()\n    }\n\n    get spinner() {\n        return this.spinnerValue || `<tr><td colspan=\"42\"><div class=\"text-center py-4\"><div class=\"spinner-border\" role=\"status\"><span class=\"visually-hidden\">${this.spinnerLabel}</span></div></div></td></tr>`\n    }\n\n    get spinnerLabel() {\n        return this.spinnerLabelValue || 'Loading...'\n    }\n\n    get filterFormSelector() {\n        return this.filterFormSelectorValue || 'form'\n    }\n\n    get sessionStorageKey() {\n        return this.sessionStorageKeyValue || this.filterFormSelector\n    }\n\n    _toggleFilterReset() {\n        this._log('toggle filter reset')\n        if (!this.hasFilterIndicatorTarget) return\n\n        const original_form_data = Object.assign({}, this._originalFilterFormData)\n        const current_form_data = Object.assign({}, this._getFormData())\n\n        // We do not want to compare the per_page value because it should not reset.\n        delete original_form_data[this.perPageNameValue]\n        delete current_form_data[this.perPageNameValue]\n\n        if (JSON.stringify(original_form_data) === JSON.stringify(current_form_data)) {\n            this.filterIndicatorTarget.querySelector('.fa-layers-counter').classList.add('d-none')\n            this.filterResetTarget.classList.add('d-none')\n        } else {\n            this.filterIndicatorTarget.querySelector('.fa-layers-counter').classList.remove('d-none')\n            this.filterResetTarget.classList.remove('d-none')\n        }\n    }\n\n    _setUrlSearchParams() {\n        if (!this.autoFillUrlEnabledValue) return false\n\n        const original_form_data = Object.assign({}, this._originalFilterFormData)\n        const current_form_data = Object.assign({}, this._getFormData())\n\n        if (JSON.stringify(original_form_data) === JSON.stringify(current_form_data)) {\n            window.history.replaceState({}, '', location.pathname)\n        } else {\n            const searchParamsString = new URLSearchParams(this._getFormData(false)).toString()\n            window.history.replaceState({}, '', `${location.pathname}?${searchParamsString}`)\n        }\n    }\n\n    _showLoader() {\n        this._log('show loader spinner')\n        let tbody = this.tableWrapperTarget.querySelector('tbody')\n        if (tbody !== null) {\n            tbody.innerHTML = this.spinner\n        } else {\n            this.tableWrapperTarget.innerHTML = this.spinner\n        }\n    }\n\n    _getFormData(asObject = true) {\n        const formData = new FormData(this._filterForm)\n        let data = []\n\n        if (asObject) {\n            for (let key of formData.keys()) {\n                if (key !== 'authenticity_token') data.push([key, formData.getAll(key)])\n            }\n            return Object.fromEntries(data)\n        } else {\n            for (let pair of formData.entries()) {\n                if (pair[0] !== 'authenticity_token') data.push([pair[0], pair[1]])\n            }\n            return data\n        }\n    }\n\n    _addPerPageField() {\n        this._perPageField = this._filterForm.querySelector(`input[name='${this.perPageNameValue}']`)\n        if (!this._perPageField) {\n            this._perPageField = document.createElement('input')\n            this._perPageField.type = 'hidden'\n            this._perPageField.name = this.perPageNameValue\n            // Enable special debug for overriding per_page attribute.\n            let urlSearchParams = new URLSearchParams(window.location.search)\n            if (urlSearchParams.has('debug_per_page')) {\n                this._perPageField.value = urlSearchParams.get('debug_per_page')\n            } else {\n                this._perPageField.value = this.perPageDefaultValue\n            }\n            this._filterForm.appendChild(this._perPageField)\n        }\n    }\n\n    _addPageField() {\n        this._pageField = this._filterForm.querySelector('input[name=\"page\"]')\n        if (!this._pageField) {\n            this._pageField = document.createElement('input')\n            this._pageField.type = 'hidden'\n            this._pageField.name = 'page'\n            this._filterForm.appendChild(this._pageField)\n        }\n    }\n\n    _addSortField() {\n        this._sortField = this._filterForm.querySelector(`input[name='${this.sortNameValue}']`)\n        if (!this._sortField) {\n            this._sortField = document.createElement('input')\n            this._sortField.type = 'hidden'\n            this._sortField.name = this.sortNameValue\n            this._sortField.value = new URLSearchParams(window.location.search).get(this.sortNameValue)\n            this._filterForm.appendChild(this._sortField)\n        }\n    }\n\n    _setFormData() {\n        let data = {}\n        if (this.autoFillUrlEnabledValue && window.location.search !== '') {\n            let urlSearchParams = new URLSearchParams(window.location.search)\n            // Run through the parameter because Object.fromEntries(urlSearchParams)\n            for (let key of urlSearchParams.keys()) {\n                data[key] = urlSearchParams.getAll(key)\n            }\n        } else if (this.autoFillStorageEnabledValue && this._sessionStorageSupported() && sessionStorage.getItem(this.sessionStorageKey) !== null) {\n            data = JSON.parse(sessionStorage.getItem(this.sessionStorageKey))\n        } else {\n            return false\n        }\n\n        Object.entries(data).forEach((entry) => {\n            let name = entry[0]\n            let value = entry[1]\n            let input = null\n            if ([this.perPageNameValue, 'page', this.sortNameValue].indexOf(name) >= 0) {\n                input = this._filterForm.querySelector(`[name='${name}']`)\n            } else {\n                input = this._filterForm.querySelector(`[name='${name}']:not([type=hidden])`)\n            }\n            if (input === null) return false\n\n            if (input.type === 'select-multiple') {\n                if (!value) return false\n                // TODO: Check if removing empty options is needed. Because of the empty filter option on management\n                //       news, removing empty options from array is disabled for now.\n                // value = [...value].filter(String) // remove all empty options from multi select filter.\n                Array.prototype.forEach.call(input.options, (option, _index) => {\n                    if (value.includes(option.value)) option.selected = true\n                })\n            } else if (input.type === 'checkbox') {\n                if (Array.isArray(value)) {\n                    value.forEach(inputValue => {\n                        const checkbox = this._filterForm.querySelector(`[name='${name}'][value='${inputValue}']:not([type=hidden])`)\n                        if (checkbox) checkbox.checked = true\n                    })\n                } else {\n                    input.checked = true\n                }\n            } else if (input.type === 'radio') {\n                const activeRadio = this._filterForm.querySelector(`[name='${name}'][value='${value}']:not([type=hidden])`)\n                if (activeRadio) activeRadio.checked = true\n            } else {\n                input.value = value\n            }\n        })\n    }\n\n    _saveToSessionStorage() {\n        if (!this.autoFillStorageEnabledValue) return false\n\n        this._log('save data to session storage')\n        if (!this._sessionStorageSupported()) return false\n\n        const data = this._getFormData()\n        sessionStorage.setItem(this.sessionStorageKey, JSON.stringify(data))\n    }\n\n    _clearSessionStorage() {\n        this._log('clear data from session storage')\n        // This is not used. The code only stays here in case we decide to reset the forms completely in the future.\n        if (!this._sessionStorageSupported() || sessionStorage.getItem(this.sessionStorageKey) === null) return false\n\n        sessionStorage.removeItem(this.sessionStorageKey)\n    }\n\n    _log(message) {\n        if (this.debugValue) console.log(`DEBUG datatable: ${message}`)\n    }\n\n    _sessionStorageSupported() {\n        return typeof (Storage) !== 'undefined'\n    }\n\n    _installAjaxErrorListener() {\n        this._filterForm.addEventListener('ajax:error', this._handlePostError)\n    }\n\n    _uninstallAjaxErrorListener() {\n        this._filterForm.removeEventListener('ajax:error', this._handlePostError)\n    }\n\n    _handlePostError(event) {\n        let [data, status, _xhr] = event.detail\n        this._log(`post error status ${status}`)\n        this._log(data)\n        if (data.responseText) this._log(data.responseText)\n        this._toggleFilterReset()\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nimport Uppy from '@uppy/core'\nimport XHRUpload from '@uppy/xhr-upload'\nimport StatusBar from '@uppy/status-bar'\nimport TutDragDrop from '../components/uppy/tut-drag-drop'\n\nimport German from '../components/uppy/locales/de_DE'\nimport English from '../components/uppy/locales/en_US'\nimport Spanish from '../components/uppy/locales/es_ES'\nimport French from '../components/uppy/locales/fr_FR'\nimport {toast} from '../components/utility/toast'\n\n// Neat trick for generating \"unique\" ids for stimulus controller instances, @see initialize().\nlet id = 0\n\n/*\n    Targets:\n        statusBarTarget\n            Shows a upload progress bar at this location. Optional.\n        dragDropTarget\n            Define the drag&drop area. Optional.\n        fieldFileIDTarget\n            Set this element for storing media files ids. Optional.\n        fileNameTarget\n            Define a target for displaying media file names after a successful upload.\n        fileInputTarget\n            Define a target area to render the hidden file input. Required.\n        searchFormTarget\n            Can be set on a different form target within the DOM controlled by this controller. If set, the form submit\n            will be triggered. This is used for submitting the search form of the media pool modal dialog to \"reset\" the\n            search results after a successful upload.\n\n    Dataset:\n        data-direct-upload-max-file-size\n            Define the maximum file size of uploadable files in bytes. Default: 2 Gigabytes\n        data-direct-upload-max-number-of-files\n            Define the maximum number files. Default: 1\n        data-direct-upload-min-number-of-files\n            Define the minimum number files. Default: 1\n        data-direct-upload-allowed-file-types\n            Define the allowed filetypes. Default: '*'\n        data-direct-upload-endpoint\n            Set upload URL. Default: ''\n        data-direct-upload-field-name\n            Define the field name for uploading files. Default: 'media_file[media]'\n        data-direct-upload-submit-closest-form\n            (default false) Submit closest surrounding form after a successful upload.\n        data-direct-upload-tooltip-text\n            This shows a hoverable tooltip information icon after the file input information and links. Default: ''\n        data-direct-upload-media-pool-url\n            Define a url for the media pool. If set, show an additional Link for opening a modal dialog with a list if\n            files. Default: ''\n*/\nexport default class extends Controller {\n    static targets = ['statusBar', 'dragDrop', 'fieldFileID', 'fileName', 'fileInput', 'searchForm']\n\n    TWO_GIGABYTES = 2147483648\n\n    initialize() {\n        this.data.set('id', id++)\n        this.uppy()\n        this._handleMediaPoolClick = this._handleMediaPoolClick.bind(this)\n        this._handleMediaFileClick = this._handleMediaFileClick.bind(this)\n    }\n\n    connect() {\n        this._installMediaPoolClickListener()\n        this._installMediaFileClickListener()\n    }\n\n    disconnect() {\n        this._uninstallMediaPoolClickHandler()\n        this._uninstallMediaFileClickListener()\n    }\n\n    uppy() {\n        if (this._uppy === undefined) {\n            let locale = German\n            switch (document.documentElement.lang) {\n                case 'en':\n                    locale = English;\n                    break;\n                case 'es':\n                    locale = Spanish;\n                    break;\n                case 'fr':\n                    locale = French;\n                    break;\n            }\n\n            const options = this._options(locale)\n\n            this._uppy = new Uppy(options.Core)\n                .use(TutDragDrop, options.TutDragDrop)\n                .use(XHRUpload, options.XHRUpload)\n                .use(StatusBar, options.StatusBar)\n                .on('error', this._onError)\n                .on('upload-error', this._onUploadError)\n                .on('upload-success', this._onUploadSuccess)\n                .on('restriction-failed', this._onRestrictionFailed)\n                .on('complete', this._onComplete)\n        }\n\n        return this._uppy\n    }\n\n    removeFileAction(event) {\n        this.uppy().log('[DirectUploads] remove file action called')\n        if (!this._canAcceptMultipleFiles()) return\n\n        let element = event.currentTarget\n        let mediaFileId = element.dataset.mediaFileId\n\n        if (element && mediaFileId) {\n            let existingMediaFileIds = JSON.parse(this.fieldFileIDTarget.value)\n            existingMediaFileIds.splice(existingMediaFileIds.indexOf(parseInt(mediaFileId)), 1)\n            this.fieldFileIDTarget.value = JSON.stringify(existingMediaFileIds)\n            let listElement = element.parentNode\n            listElement.parentNode.removeChild(listElement)\n        }\n    }\n\n    _onUploadSuccess = (file, response) => {\n        this.uppy().log('[DirectUploads] onUploadSuccess')\n        if (response.body.growl_message) toast(response.body.growl_message, 'success')\n\n        if (this.hasFieldFileIDTarget) {\n            let mediaFileId = response.body.id\n            if (this._canAcceptMultipleFiles()) {\n                let existingMediaFileIds = JSON.parse(this.fieldFileIDTarget.value)\n                if (existingMediaFileIds.length <= 0) this.fileNameTarget.innerHTML = ''\n                if (existingMediaFileIds.indexOf(mediaFileId) === -1) {\n                    // existingMediaFileIds list does not include newly uploaded file.\n                    existingMediaFileIds.push(mediaFileId)\n                    let uniqMediaFileIDs = [...new Set(existingMediaFileIds)]\n                    this.fieldFileIDTarget.value = JSON.stringify(uniqMediaFileIDs)\n                    this.fileNameTarget.insertAdjacentHTML('beforeend', `\n                        <li>\n                            ${file.name}\n                            <button name=\"button\" type=\"button\" class=\"btn btn-link\" \n                            data-action=\"click->direct-upload#removeFileAction\" data-media-file-id=\"${mediaFileId}\">\n                                <i class=\"fas fa-times-circle fa-fw\"></i>\n                            </button>\n                        </li>\n                    `)\n                }\n            } else {\n                if (this.hasFileNameTarget) this.fileNameTarget.innerText = file.name\n                if (this.hasFieldFileIDTarget) this.fieldFileIDTarget.value = mediaFileId\n                this._triggerFileUploaded(response.body)\n            }\n        }\n\n        this._submitClosestForm()\n    }\n\n    _onUploadError = (file, error, response) => {\n        this.uppy().log('[DirectUploads] onUploadError')\n        this.uppy().log(`[DirectUploads] Upload error: ${error.stack}`, 'warning')\n        if (response.responseText) {\n            toast(JSON.parse(response.responseText).error, 'alert')\n        }\n        if (response.body.error) {\n            this.uppy().log(`[DirectUploads] Upload error response: ${response.body.error}`)\n            toast(response.body.error, 'alert')\n        }\n    }\n\n    _onError = (error) => {\n        this.uppy().log('[DirectUploads] onError')\n        this.uppy().log(`[DirectUploads] Uppy error: ${error.stack}`, 'warning')\n    }\n\n    _onComplete = (result) => {\n        this.uppy().log('[DirectUploads] onComplete')\n\n        this.uppy().cancelAll()\n        let firstSuccessfulFileName = typeof result.successful[0] != 'undefined' ? result.successful[0].name : null\n        if (firstSuccessfulFileName) {\n            this._submitSearchFormTarget(firstSuccessfulFileName)\n        } else {\n            this._submitSearchFormTarget('')\n        }\n        this._clearHeartbeatInterval()\n    }\n\n    _onRestrictionFailed = (file, error) => {\n        this.uppy().log('[DirectUploads] onRestrictionFailed')\n        this.uppy().log(`[DirectUploads] Restriction errors: ${error}`)\n    }\n\n    _onBeforeUpload = (_files) => {\n        this.uppy().log('[DirectUploads] onBeforeUpload')\n        this._setHeartbeatInterval()\n    }\n\n    _onBeforeFileAdded = (currentFile, files) => {\n        this.uppy().log('[DirectUploads] onBeforeFileAdded')\n        const {maxFileSize, maxNumberOfFiles, allowedFileTypes} = this.uppy().opts.restrictions\n\n        if (maxNumberOfFiles) {\n            if (Object.keys(files).length + 1 > maxNumberOfFiles) {\n                toast(this.uppy().i18n('youCanOnlyUploadX', {smart_count: maxNumberOfFiles}), 'alert')\n            }\n        }\n\n        if (allowedFileTypes) {\n            const isCorrectFileType = allowedFileTypes.some((type) => {\n                // if this is a mime-type\n                if (type.indexOf('/') > -1) {\n                    if (!currentFile.type) return false\n                    return currentFile.type.replace(/;.*?$/, '').match(type)\n                }\n\n                // otherwise this is likely an extension\n                if (type[0] === '.') {\n                    const extension = currentFile.name.slice(currentFile.name.lastIndexOf('.') + 1)\n                    return extension.toLowerCase() === type.substr(1).toLowerCase()\n                }\n                return false\n            })\n\n            if (!isCorrectFileType) {\n                toast(this.uppy().i18n('fileTypeNotAllowed'), 'alert')\n            }\n        }\n\n        // We can't check maxFileSize if the size is unknown.\n        if (maxFileSize && currentFile.data.size != null) {\n            if (currentFile.data.size > maxFileSize) {\n                toast(this.uppy().i18n('exceedsSize'), 'alert')\n            }\n        }\n    }\n\n    _options(locale) {\n        return {\n            Core: {\n                debug: true,\n                autoProceed: true,\n                allowMultipleUploads: false,\n                locale: locale,\n                restrictions: {\n                    maxFileSize: parseInt(this.data.get('maxFileSize')) || this.TWO_GIGABYTES,\n                    maxNumberOfFiles: this.data.get('maxNumberOfFiles') || 1,\n                    minNumberOfFiles: this.data.get('minNumberOfFiles') || 1,\n                    allowedFileTypes: this.data.has('allowedFileTypes') ? this.data.get('allowedFileTypes').split(',') : ''\n                },\n                onBeforeFileAdded: this._onBeforeFileAdded,\n                onBeforeUpload: this._onBeforeUpload\n            },\n            TutDragDrop: {\n                target: this.dragDropTarget,\n                inputFieldTarget: this.fileInputTarget,\n                tooltipText: this.data.get('tooltipText'),\n                mediaPoolUrl: this.data.get('mediaPoolUrl')\n            },\n            XHRUpload: {\n                endpoint: this.data.get('endpoint'),\n                formData: true,\n                fieldName: this.data.get('fieldName') || 'media_file[media]',\n                headers: {\n                    'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`,\n                    'Accept': 'application/json'\n                },\n                limit: 10, // default 5\n                timeout: 60000 // default 30000\n            },\n            StatusBar: {\n                target: this.statusBarTarget,\n                showProgressDetails: true,\n                hidePauseResumeButton: true,\n                hideUploadButton: true\n            }\n        }\n    }\n\n    _canAcceptMultipleFiles() {\n        return (this.data.has('maxNumberOfFiles') && this.data.get('maxNumberOfFiles') !== '1')\n    }\n\n    _submitClosestForm() {\n        this.uppy().log('[DirectUploads] fire rails form submit on closest form')\n        if (this.data.has('submitClosestForm') && this.data.get('submitClosestForm').toLowerCase() === 'true') {\n            const form = this.element.closest('form')\n            Rails.fire(form, 'submit')\n\n            if (form.dataset.remote !== 'true') form.submit()\n        }\n    }\n\n    _submitSearchFormTarget(searchFormText) {\n        this.uppy().log('[DirectUploads] fire rails form submit on search form target')\n        if (!this.hasSearchFormTarget) return\n\n        let searchFormSearchInput = this.searchFormTarget.querySelector('input[type=search]')\n        if (searchFormSearchInput) searchFormSearchInput.value = searchFormText\n        Rails.fire(this.searchFormTarget, 'submit_datatable')\n    }\n\n    _installMediaPoolClickListener() {\n        this.uppy().log('[DirectUploads] install media pool listener')\n        if (!this.data.has('mediaPoolUrl')) return\n\n        this.fileInputTarget.querySelector('[data-controller=\"modal-link\"]')\n            .addEventListener('click', this._handleMediaPoolClick)\n    }\n\n    _uninstallMediaPoolClickHandler() {\n        this.uppy().log('[DirectUploads] uninstall media pool listener')\n        if (!this.data.has('mediaPoolUrl')) return\n\n        this.fileInputTarget.querySelector('[data-controller=\"modal-link\"]')\n            .removeEventListener('click', this._handleMediaPoolClick)\n    }\n\n    _handleMediaPoolClick() {\n        document.getElementById('modalHolder').dataset.id = this.data.get('id')\n        this._triggerMediaPoolOpened()\n    }\n\n    _installMediaFileClickListener() {\n        this.uppy().log('[DirectUploads] install media file listener')\n        if (!this.data.has('mediaPoolUrl')) return\n\n        document.addEventListener('click', this._handleMediaFileClick)\n    }\n\n    _uninstallMediaFileClickListener() {\n        this.uppy().log('[DirectUploads] uninstall media file listener')\n        if (!this.data.has('mediaPoolUrl')) return\n\n        document.removeEventListener('click', this._handleMediaFileClick)\n    }\n\n    _handleMediaFileClick(event) {\n        const element = event.target\n        const modalHolder = document.getElementById('modalHolder')\n\n        if (modalHolder.dataset.id !== this.data.get('id')) return\n        if (!element.classList.contains('choose_media_file')) return\n\n        const mediaFileData = JSON.parse(element.dataset.mediaFileJson)\n\n        if (this.hasFileNameTarget) this.fileNameTarget.innerText = mediaFileData.name\n        if (this.hasFieldFileIDTarget) this.fieldFileIDTarget.value = mediaFileData.id\n        this._triggerFileUploaded(mediaFileData)\n\n        this._submitClosestForm()\n    }\n\n    _triggerFileUploaded(file) {\n        let event = new CustomEvent('fileUploaded', {detail: file})\n        this.element.dispatchEvent(event)\n    }\n\n    _triggerMediaPoolOpened() {\n        const event = new CustomEvent('mediaPoolOpened')\n        this.element.dispatchEvent(event)\n    }\n\n    _setHeartbeatInterval() {\n        this._heartbeatTimeout = setInterval(function () {\n            fetch('/heartbeats', {\n                method: 'PATCH',\n                credentials: 'same-origin',\n                headers: {\n                    'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`,\n                    'Accept': 'application/json'\n                }\n            }).catch(error => console.log(error))\n        }, 300000)\n    }\n\n    _clearHeartbeatInterval() {\n        if (this._heartbeatTimeout) clearInterval(this._heartbeatTimeout)\n    }\n}\n", "import { BasePlugin } from '@uppy/core';\nimport EventManager from '@uppy/core/lib/EventManager.js';\nimport { fetcher } from '@uppy/utils/lib/fetcher';\nimport { filterFilesToEmitUploadStarted, filterNonFailedFiles, } from '@uppy/utils/lib/fileFilters';\nimport getAllowedMetaFields from '@uppy/utils/lib/getAllowedMetaFields';\nimport isNetworkError from '@uppy/utils/lib/isNetworkError';\nimport NetworkError from '@uppy/utils/lib/NetworkError';\nimport { internalRateLimitedQueue, RateLimitedQueue,\n// @ts-ignore untyped\n } from '@uppy/utils/lib/RateLimitedQueue';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nfunction buildResponseError(xhr, err) {\n    let error = err;\n    // No error message\n    if (!error)\n        error = new Error('Upload error');\n    // Got an error message string\n    if (typeof error === 'string')\n        error = new Error(error);\n    // Got something else\n    if (!(error instanceof Error)) {\n        error = Object.assign(new Error('Upload error'), { data: error });\n    }\n    if (isNetworkError(xhr)) {\n        error = new NetworkError(error, xhr);\n        return error;\n    }\n    // @ts-expect-error request can only be set on NetworkError\n    // but we use NetworkError to distinguish between errors.\n    error.request = xhr;\n    return error;\n}\n/**\n * Set `data.type` in the blob to `file.meta.type`,\n * because we might have detected a more accurate file type in Uppy\n * https://stackoverflow.com/a/50875615\n */\nfunction setTypeInBlob(file) {\n    const dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n    return dataWithUpdatedType;\n}\nconst defaultOptions = {\n    formData: true,\n    fieldName: 'file',\n    method: 'post',\n    allowedMetaFields: true,\n    bundle: false,\n    headers: {},\n    timeout: 30 * 1000,\n    limit: 5,\n    withCredentials: false,\n    responseType: '',\n};\nexport default class XHRUpload extends BasePlugin {\n    static VERSION = packageJson.version;\n    #getFetcher;\n    requests;\n    uploaderEvents;\n    constructor(uppy, opts) {\n        super(uppy, {\n            ...defaultOptions,\n            fieldName: opts.bundle ? 'files[]' : 'file',\n            ...opts,\n        });\n        this.type = 'uploader';\n        this.id = this.opts.id || 'XHRUpload';\n        this.defaultLocale = locale;\n        this.i18nInit();\n        // Simultaneous upload limiting is shared across all uploads with this plugin.\n        if (internalRateLimitedQueue in this.opts) {\n            // @ts-ignore untyped internal\n            this.requests = this.opts[internalRateLimitedQueue];\n        }\n        else {\n            this.requests = new RateLimitedQueue(this.opts.limit);\n        }\n        if (this.opts.bundle && !this.opts.formData) {\n            throw new Error('`opts.formData` must be true when `opts.bundle` is enabled.');\n        }\n        if (this.opts.bundle && typeof this.opts.headers === 'function') {\n            throw new Error('`opts.headers` can not be a function when the `bundle: true` option is set.');\n        }\n        if (opts?.allowedMetaFields === undefined && 'metaFields' in this.opts) {\n            throw new Error('The `metaFields` option has been renamed to `allowedMetaFields`.');\n        }\n        this.uploaderEvents = Object.create(null);\n        /**\n         * xhr-upload wrapper for `fetcher` to handle user options\n         * `validateStatus`, `getResponseError`, `getResponseData`\n         * and to emit `upload-progress`, `upload-error`, and `upload-success` events.\n         */\n        this.#getFetcher = (files) => {\n            return async (url, options) => {\n                try {\n                    const res = await fetcher(url, {\n                        ...options,\n                        onBeforeRequest: (xhr, retryCount) => this.opts.onBeforeRequest?.(xhr, retryCount, files),\n                        shouldRetry: this.opts.shouldRetry,\n                        onAfterResponse: this.opts.onAfterResponse,\n                        onTimeout: (timeout) => {\n                            const seconds = Math.ceil(timeout / 1000);\n                            const error = new Error(this.i18n('uploadStalled', { seconds }));\n                            this.uppy.emit('upload-stalled', error, files);\n                        },\n                        onUploadProgress: (event) => {\n                            if (event.lengthComputable) {\n                                for (const { id } of files) {\n                                    const file = this.uppy.getFile(id);\n                                    this.uppy.emit('upload-progress', file, {\n                                        uploadStarted: file.progress.uploadStarted ?? 0,\n                                        bytesUploaded: (event.loaded / event.total) * file.size,\n                                        bytesTotal: file.size,\n                                    });\n                                }\n                            }\n                        },\n                    });\n                    let body = await this.opts.getResponseData?.(res);\n                    if (res.responseType === 'json') {\n                        body ??= res.response;\n                    }\n                    else {\n                        try {\n                            body ??= JSON.parse(res.responseText);\n                        }\n                        catch (cause) {\n                            throw new Error('@uppy/xhr-upload expects a JSON response (with a `url` property). To parse non-JSON responses, use `getResponseData` to turn your response into JSON.', { cause });\n                        }\n                    }\n                    const uploadURL = typeof body?.url === 'string' ? body.url : undefined;\n                    for (const { id } of files) {\n                        this.uppy.emit('upload-success', this.uppy.getFile(id), {\n                            status: res.status,\n                            body,\n                            uploadURL,\n                        });\n                    }\n                    return res;\n                }\n                catch (error) {\n                    if (error.name === 'AbortError') {\n                        return undefined;\n                    }\n                    const request = error.request;\n                    for (const file of files) {\n                        this.uppy.emit('upload-error', this.uppy.getFile(file.id), buildResponseError(request, error), request);\n                    }\n                    throw error;\n                }\n            };\n        };\n    }\n    getOptions(file) {\n        const overrides = this.uppy.getState().xhrUpload;\n        const { headers } = this.opts;\n        const opts = {\n            ...this.opts,\n            ...(overrides || {}),\n            ...(file.xhrUpload || {}),\n            headers: {},\n        };\n        // Support for `headers` as a function, only in the XHRUpload settings.\n        // Options set by other plugins in Uppy state or on the files themselves are still merged in afterward.\n        //\n        // ```js\n        // headers: (file) => ({ expires: file.meta.expires })\n        // ```\n        if (typeof headers === 'function') {\n            opts.headers = headers(file);\n        }\n        else {\n            Object.assign(opts.headers, this.opts.headers);\n        }\n        if (overrides) {\n            Object.assign(opts.headers, overrides.headers);\n        }\n        if (file.xhrUpload) {\n            Object.assign(opts.headers, file.xhrUpload.headers);\n        }\n        return opts;\n    }\n    addMetadata(formData, meta, opts) {\n        const allowedMetaFields = getAllowedMetaFields(opts.allowedMetaFields, meta);\n        allowedMetaFields.forEach((item) => {\n            const value = meta[item];\n            if (Array.isArray(value)) {\n                // In this case we don't transform `item` to add brackets, it's up to\n                // the user to add the brackets so it won't be overridden.\n                value.forEach((subItem) => formData.append(item, subItem));\n            }\n            else {\n                formData.append(item, value);\n            }\n        });\n    }\n    createFormDataUpload(file, opts) {\n        const formPost = new FormData();\n        this.addMetadata(formPost, file.meta, opts);\n        const dataWithUpdatedType = setTypeInBlob(file);\n        if (file.name) {\n            formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n        }\n        else {\n            formPost.append(opts.fieldName, dataWithUpdatedType);\n        }\n        return formPost;\n    }\n    createBundledUpload(files, opts) {\n        const formPost = new FormData();\n        const { meta } = this.uppy.getState();\n        this.addMetadata(formPost, meta, opts);\n        files.forEach((file) => {\n            const options = this.getOptions(file);\n            const dataWithUpdatedType = setTypeInBlob(file);\n            if (file.name) {\n                formPost.append(options.fieldName, dataWithUpdatedType, file.name);\n            }\n            else {\n                formPost.append(options.fieldName, dataWithUpdatedType);\n            }\n        });\n        return formPost;\n    }\n    async #uploadLocalFile(file) {\n        const events = new EventManager(this.uppy);\n        const controller = new AbortController();\n        const uppyFetch = this.requests.wrapPromiseFunction(async () => {\n            const opts = this.getOptions(file);\n            const fetch = this.#getFetcher([file]);\n            const body = opts.formData\n                ? this.createFormDataUpload(file, opts)\n                : file.data;\n            const endpoint = typeof opts.endpoint === 'string'\n                ? opts.endpoint\n                : await opts.endpoint(file);\n            return fetch(endpoint, {\n                ...opts,\n                body,\n                signal: controller.signal,\n            });\n        });\n        events.onFileRemove(file.id, () => controller.abort());\n        events.onCancelAll(file.id, () => {\n            controller.abort();\n        });\n        try {\n            await uppyFetch().abortOn(controller.signal);\n        }\n        catch (error) {\n            // TODO: create formal error with name 'AbortError' (this comes from RateLimitedQueue)\n            if (error.message !== 'Cancelled') {\n                throw error;\n            }\n        }\n        finally {\n            events.remove();\n        }\n    }\n    async #uploadBundle(files) {\n        const controller = new AbortController();\n        const uppyFetch = this.requests.wrapPromiseFunction(async () => {\n            const optsFromState = this.uppy.getState().xhrUpload ?? {};\n            const fetch = this.#getFetcher(files);\n            const body = this.createBundledUpload(files, {\n                ...this.opts,\n                ...optsFromState,\n            });\n            const endpoint = typeof this.opts.endpoint === 'string'\n                ? this.opts.endpoint\n                : await this.opts.endpoint(files);\n            return fetch(endpoint, {\n                // headers can't be a function with bundle: true\n                ...this.opts,\n                body,\n                signal: controller.signal,\n            });\n        });\n        function abort() {\n            controller.abort();\n        }\n        // We only need to abort on cancel all because\n        // individual cancellations are not possible with bundle: true\n        this.uppy.once('cancel-all', abort);\n        try {\n            await uppyFetch().abortOn(controller.signal);\n        }\n        catch (error) {\n            // TODO: create formal error with name 'AbortError' (this comes from RateLimitedQueue)\n            if (error.message !== 'Cancelled') {\n                throw error;\n            }\n        }\n        finally {\n            this.uppy.off('cancel-all', abort);\n        }\n    }\n    #getCompanionClientArgs(file) {\n        const opts = this.getOptions(file);\n        const allowedMetaFields = getAllowedMetaFields(opts.allowedMetaFields, file.meta);\n        return {\n            ...file.remote?.body,\n            protocol: 'multipart',\n            endpoint: opts.endpoint,\n            size: file.data.size,\n            fieldname: opts.fieldName,\n            metadata: Object.fromEntries(allowedMetaFields.map((name) => [name, file.meta[name]])),\n            httpMethod: opts.method,\n            useFormData: opts.formData,\n            headers: opts.headers,\n        };\n    }\n    async #uploadFiles(files) {\n        await Promise.allSettled(files.map((file) => {\n            if (file.isRemote) {\n                const getQueue = () => this.requests;\n                const controller = new AbortController();\n                const removedHandler = (removedFile) => {\n                    if (removedFile.id === file.id)\n                        controller.abort();\n                };\n                this.uppy.on('file-removed', removedHandler);\n                const uploadPromise = this.uppy\n                    .getRequestClientForFile(file)\n                    .uploadRemoteFile(file, this.#getCompanionClientArgs(file), {\n                    signal: controller.signal,\n                    getQueue,\n                });\n                this.requests.wrapSyncFunction(() => {\n                    this.uppy.off('file-removed', removedHandler);\n                }, { priority: -1 })();\n                return uploadPromise;\n            }\n            return this.#uploadLocalFile(file);\n        }));\n    }\n    #handleUpload = async (fileIDs) => {\n        if (fileIDs.length === 0) {\n            this.uppy.log('[XHRUpload] No files to upload!');\n            return;\n        }\n        // No limit configured by the user, and no RateLimitedQueue passed in by a \"parent\" plugin\n        // (basically just AwsS3) using the internal symbol\n        // @ts-ignore untyped internal\n        if (this.opts.limit === 0 && !this.opts[internalRateLimitedQueue]) {\n            this.uppy.log('[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0', 'warning');\n        }\n        this.uppy.log('[XHRUpload] Uploading...');\n        const files = this.uppy.getFilesByIds(fileIDs);\n        const filesFiltered = filterNonFailedFiles(files);\n        const filesToEmit = filterFilesToEmitUploadStarted(filesFiltered);\n        this.uppy.emit('upload-start', filesToEmit);\n        if (this.opts.bundle) {\n            // if bundle: true, we don\u2019t support remote uploads\n            const isSomeFileRemote = filesFiltered.some((file) => file.isRemote);\n            if (isSomeFileRemote) {\n                throw new Error('Can\u2019t upload remote files when the `bundle: true` option is set');\n            }\n            if (typeof this.opts.headers === 'function') {\n                throw new TypeError('`headers` may not be a function when the `bundle: true` option is set');\n            }\n            await this.#uploadBundle(filesFiltered);\n        }\n        else {\n            await this.#uploadFiles(filesFiltered);\n        }\n    };\n    install() {\n        if (this.opts.bundle) {\n            const { capabilities } = this.uppy.getState();\n            this.uppy.setState({\n                capabilities: {\n                    ...capabilities,\n                    individualCancellation: false,\n                },\n            });\n        }\n        this.uppy.addUploader(this.#handleUpload);\n    }\n    uninstall() {\n        if (this.opts.bundle) {\n            const { capabilities } = this.uppy.getState();\n            this.uppy.setState({\n                capabilities: {\n                    ...capabilities,\n                    individualCancellation: true,\n                },\n            });\n        }\n        this.uppy.removeUploader(this.#handleUpload);\n    }\n}\n", "/**\n * Create a wrapper around an event emitter with a `remove` method to remove\n * all events that were added using the wrapped emitter.\n */\nexport default class EventManager {\n    #uppy;\n    #events = [];\n    constructor(uppy) {\n        this.#uppy = uppy;\n    }\n    on(event, fn) {\n        this.#events.push([event, fn]);\n        return this.#uppy.on(event, fn);\n    }\n    remove() {\n        for (const [event, fn] of this.#events.splice(0)) {\n            this.#uppy.off(event, fn);\n        }\n    }\n    onFilePause(fileID, cb) {\n        this.on('upload-pause', (file, isPaused) => {\n            if (fileID === file?.id) {\n                cb(isPaused);\n            }\n        });\n    }\n    onFileRemove(fileID, cb) {\n        this.on('file-removed', (file) => {\n            if (fileID === file.id)\n                cb(file.id);\n        });\n    }\n    onPause(fileID, cb) {\n        this.on('upload-pause', (file, isPaused) => {\n            if (fileID === file?.id) {\n                // const isPaused = this.#uppy.pauseResume(fileID)\n                cb(isPaused);\n            }\n        });\n    }\n    onRetry(fileID, cb) {\n        this.on('upload-retry', (file) => {\n            if (fileID === file?.id) {\n                cb();\n            }\n        });\n    }\n    onRetryAll(fileID, cb) {\n        this.on('retry-all', () => {\n            if (!this.#uppy.getFile(fileID))\n                return;\n            cb();\n        });\n    }\n    onPauseAll(fileID, cb) {\n        this.on('pause-all', () => {\n            if (!this.#uppy.getFile(fileID))\n                return;\n            cb();\n        });\n    }\n    onCancelAll(fileID, eventHandler) {\n        this.on('cancel-all', (...args) => {\n            if (!this.#uppy.getFile(fileID))\n                return;\n            eventHandler(...args);\n        });\n    }\n    onResumeAll(fileID, cb) {\n        this.on('resume-all', () => {\n            if (!this.#uppy.getFile(fileID))\n                return;\n            cb();\n        });\n    }\n}\n", "class NetworkError extends Error {\n    cause;\n    isNetworkError;\n    request;\n    constructor(error, xhr = null) {\n        super(`This looks like a network error, the endpoint might be blocked by an internet provider or a firewall.`);\n        this.cause = error;\n        this.isNetworkError = true;\n        this.request = xhr;\n    }\n}\nexport default NetworkError;\n", "/**\n * Helper to abort upload requests if there has not been any progress for `timeout` ms.\n * Create an instance using `timer = new ProgressTimeout(10000, onTimeout)`\n * Call `timer.progress()` to signal that there has been progress of any kind.\n * Call `timer.done()` when the upload has completed.\n */\nclass ProgressTimeout {\n    #aliveTimer;\n    #isDone = false;\n    #onTimedOut;\n    #timeout;\n    constructor(timeout, timeoutHandler) {\n        this.#timeout = timeout;\n        this.#onTimedOut = () => timeoutHandler(timeout);\n    }\n    progress() {\n        // Some browsers fire another progress event when the upload is\n        // cancelled, so we have to ignore progress after the timer was\n        // told to stop.\n        if (this.#isDone)\n            return;\n        if (this.#timeout > 0) {\n            clearTimeout(this.#aliveTimer);\n            this.#aliveTimer = setTimeout(this.#onTimedOut, this.#timeout);\n        }\n    }\n    done() {\n        if (!this.#isDone) {\n            clearTimeout(this.#aliveTimer);\n            this.#aliveTimer = undefined;\n            this.#isDone = true;\n        }\n    }\n}\nexport default ProgressTimeout;\n", "import NetworkError from './NetworkError.js';\nimport ProgressTimeout from './ProgressTimeout.js';\nconst noop = () => { };\n/**\n * Fetches data from a specified URL using XMLHttpRequest, with optional retry functionality and progress tracking.\n *\n * @param url The URL to send the request to.\n * @param options Optional settings for the fetch operation.\n */\nexport function fetcher(url, options = {}) {\n    const { body = null, headers = {}, method = 'GET', onBeforeRequest = noop, onUploadProgress = noop, shouldRetry = () => true, onAfterResponse = noop, onTimeout = noop, responseType, retries = 3, signal = null, timeout = 30_000, withCredentials = false, } = options;\n    // 300 ms, 600 ms, 1200 ms, 2400 ms, 4800 ms\n    const delay = (attempt) => 0.3 * 2 ** (attempt - 1) * 1000;\n    const timer = new ProgressTimeout(timeout, onTimeout);\n    function requestWithRetry(retryCount = 0) {\n        // biome-ignore lint/suspicious/noAsyncPromiseExecutor: it's fine\n        return new Promise(async (resolve, reject) => {\n            const xhr = new XMLHttpRequest();\n            const onError = (error) => {\n                if (shouldRetry(xhr) && retryCount < retries) {\n                    setTimeout(() => {\n                        requestWithRetry(retryCount + 1).then(resolve, reject);\n                    }, delay(retryCount));\n                }\n                else {\n                    timer.done();\n                    reject(error);\n                }\n            };\n            xhr.open(method, url, true);\n            xhr.withCredentials = withCredentials;\n            if (responseType) {\n                xhr.responseType = responseType;\n            }\n            signal?.addEventListener('abort', () => {\n                xhr.abort();\n                // Using DOMException for abort errors aligns with\n                // the convention established by the Fetch API.\n                reject(new DOMException('Aborted', 'AbortError'));\n            });\n            xhr.onload = async () => {\n                try {\n                    await onAfterResponse(xhr, retryCount);\n                }\n                catch (err) {\n                    // This is important as we need to emit the xhr\n                    // over the upload-error event.\n                    err.request = xhr;\n                    onError(err);\n                    return;\n                }\n                if (xhr.status >= 200 && xhr.status < 300) {\n                    timer.done();\n                    resolve(xhr);\n                }\n                else if (shouldRetry(xhr) && retryCount < retries) {\n                    setTimeout(() => {\n                        requestWithRetry(retryCount + 1).then(resolve, reject);\n                    }, delay(retryCount));\n                }\n                else {\n                    timer.done();\n                    reject(new NetworkError(xhr.statusText, xhr));\n                }\n            };\n            xhr.onerror = () => onError(new NetworkError(xhr.statusText, xhr));\n            xhr.upload.onprogress = (event) => {\n                timer.progress();\n                onUploadProgress(event);\n            };\n            if (headers) {\n                Object.keys(headers).forEach((key) => {\n                    xhr.setRequestHeader(key, headers[key]);\n                });\n            }\n            await onBeforeRequest(xhr, retryCount);\n            xhr.send(body);\n        });\n    }\n    return requestWithRetry();\n}\n", "export function filterNonFailedFiles(files) {\n    const hasError = (file) => 'error' in file && !!file.error;\n    return files.filter((file) => !hasError(file));\n}\n// Don't double-emit upload-started for Golden Retriever-restored files that were already started\nexport function filterFilesToEmitUploadStarted(files) {\n    return files.filter((file) => !file.progress?.uploadStarted || !file.isRestored);\n}\n", "export default function getAllowedMetaFields(fields, meta) {\n    if (fields === true) {\n        return Object.keys(meta);\n    }\n    if (Array.isArray(fields)) {\n        return fields;\n    }\n    return [];\n}\n", "function isNetworkError(xhr) {\n    if (!xhr) {\n        return false;\n    }\n    return (xhr.readyState !== 0 && xhr.readyState !== 4) || xhr.status === 0;\n}\nexport default isNetworkError;\n", "function createCancelError(cause) {\n    return new Error('Cancelled', { cause });\n}\nfunction abortOn(signal) {\n    if (signal != null) {\n        const abortPromise = () => this.abort(signal.reason);\n        signal.addEventListener('abort', abortPromise, { once: true });\n        const removeAbortListener = () => {\n            signal.removeEventListener('abort', abortPromise);\n        };\n        this.then?.(removeAbortListener, removeAbortListener);\n    }\n    return this;\n}\nexport class RateLimitedQueue {\n    #activeRequests = 0;\n    #queuedHandlers = [];\n    #paused = false;\n    #pauseTimer;\n    #downLimit = 1;\n    #upperLimit;\n    #rateLimitingTimer;\n    limit;\n    constructor(limit) {\n        if (typeof limit !== 'number' || limit === 0) {\n            this.limit = Infinity;\n        }\n        else {\n            this.limit = limit;\n        }\n    }\n    #call(fn) {\n        this.#activeRequests += 1;\n        let done = false;\n        let cancelActive;\n        try {\n            cancelActive = fn();\n        }\n        catch (err) {\n            this.#activeRequests -= 1;\n            throw err;\n        }\n        return {\n            abort: (cause) => {\n                if (done)\n                    return;\n                done = true;\n                this.#activeRequests -= 1;\n                cancelActive?.(cause);\n                this.#queueNext();\n            },\n            done: () => {\n                if (done)\n                    return;\n                done = true;\n                this.#activeRequests -= 1;\n                this.#queueNext();\n            },\n        };\n    }\n    #queueNext() {\n        // Do it soon but not immediately, this allows clearing out the entire queue synchronously\n        // one by one without continuously _advancing_ it (and starting new tasks before immediately\n        // aborting them)\n        queueMicrotask(() => this.#next());\n    }\n    #next() {\n        if (this.#paused || this.#activeRequests >= this.limit) {\n            return;\n        }\n        if (this.#queuedHandlers.length === 0) {\n            return;\n        }\n        // Dispatch the next request, and update the abort/done handlers\n        // so that cancelling it does the Right Thing (and doesn't just try\n        // to dequeue an already-running request).\n        const next = this.#queuedHandlers.shift();\n        if (next == null) {\n            throw new Error('Invariant violation: next is null');\n        }\n        const handler = this.#call(next.fn);\n        next.abort = handler.abort;\n        next.done = handler.done;\n    }\n    #queue(fn, options) {\n        const handler = {\n            fn,\n            priority: options?.priority || 0,\n            abort: () => {\n                this.#dequeue(handler);\n            },\n            done: () => {\n                throw new Error('Cannot mark a queued request as done: this indicates a bug');\n            },\n        };\n        const index = this.#queuedHandlers.findIndex((other) => {\n            return handler.priority > other.priority;\n        });\n        if (index === -1) {\n            this.#queuedHandlers.push(handler);\n        }\n        else {\n            this.#queuedHandlers.splice(index, 0, handler);\n        }\n        return handler;\n    }\n    #dequeue(handler) {\n        const index = this.#queuedHandlers.indexOf(handler);\n        if (index !== -1) {\n            this.#queuedHandlers.splice(index, 1);\n        }\n    }\n    run(fn, queueOptions) {\n        if (!this.#paused && this.#activeRequests < this.limit) {\n            return this.#call(fn);\n        }\n        return this.#queue(fn, queueOptions);\n    }\n    wrapSyncFunction(fn, queueOptions) {\n        return (...args) => {\n            const queuedRequest = this.run(() => {\n                fn(...args);\n                queueMicrotask(() => queuedRequest.done());\n                return () => { };\n            }, queueOptions);\n            return {\n                abortOn,\n                abort() {\n                    queuedRequest.abort();\n                },\n            };\n        };\n    }\n    wrapPromiseFunction(fn, queueOptions) {\n        return (...args) => {\n            let queuedRequest;\n            const outerPromise = new Promise((resolve, reject) => {\n                queuedRequest = this.run(() => {\n                    let cancelError;\n                    let innerPromise;\n                    try {\n                        innerPromise = Promise.resolve(fn(...args));\n                    }\n                    catch (err) {\n                        innerPromise = Promise.reject(err);\n                    }\n                    innerPromise.then((result) => {\n                        if (cancelError) {\n                            reject(cancelError);\n                        }\n                        else {\n                            queuedRequest.done();\n                            resolve(result);\n                        }\n                    }, (err) => {\n                        if (cancelError) {\n                            reject(cancelError);\n                        }\n                        else {\n                            queuedRequest.done();\n                            reject(err);\n                        }\n                    });\n                    return (cause) => {\n                        cancelError = createCancelError(cause);\n                    };\n                }, queueOptions);\n            });\n            outerPromise.abort = (cause) => {\n                queuedRequest.abort(cause);\n            };\n            outerPromise.abortOn = abortOn;\n            return outerPromise;\n        };\n    }\n    resume() {\n        this.#paused = false;\n        clearTimeout(this.#pauseTimer);\n        for (let i = 0; i < this.limit; i++) {\n            this.#queueNext();\n        }\n    }\n    #resume = () => this.resume();\n    /**\n     * Freezes the queue for a while or indefinitely.\n     *\n     * @param {number | null } [duration] Duration for the pause to happen, in milliseconds.\n     *                                    If omitted, the queue won't resume automatically.\n     */\n    pause(duration = null) {\n        this.#paused = true;\n        clearTimeout(this.#pauseTimer);\n        if (duration != null) {\n            this.#pauseTimer = setTimeout(this.#resume, duration);\n        }\n    }\n    /**\n     * Pauses the queue for a duration, and lower the limit of concurrent requests\n     * when the queue resumes. When the queue resumes, it tries to progressively\n     * increase the limit in `this.#increaseLimit` until another call is made to\n     * `this.rateLimit`.\n     * Call this function when using the RateLimitedQueue for network requests and\n     * the remote server responds with 429 HTTP code.\n     *\n     * @param {number} duration in milliseconds.\n     */\n    rateLimit(duration) {\n        clearTimeout(this.#rateLimitingTimer);\n        this.pause(duration);\n        if (this.limit > 1 && Number.isFinite(this.limit)) {\n            this.#upperLimit = this.limit - 1;\n            this.limit = this.#downLimit;\n            this.#rateLimitingTimer = setTimeout(this.#increaseLimit, duration);\n        }\n    }\n    #increaseLimit = () => {\n        if (this.#paused) {\n            this.#rateLimitingTimer = setTimeout(this.#increaseLimit, 0);\n            return;\n        }\n        this.#downLimit = this.limit;\n        this.limit = Math.ceil((this.#upperLimit + this.#downLimit) / 2);\n        for (let i = this.#downLimit; i <= this.limit; i++) {\n            this.#queueNext();\n        }\n        if (this.#upperLimit - this.#downLimit > 3) {\n            this.#rateLimitingTimer = setTimeout(this.#increaseLimit, 2000);\n        }\n        else {\n            this.#downLimit = Math.floor(this.#downLimit / 2);\n        }\n    };\n    get isPaused() {\n        return this.#paused;\n    }\n}\nexport const internalRateLimitedQueue = Symbol('__queue');\n", "{\n  \"name\": \"@uppy/xhr-upload\",\n  \"description\": \"Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.\",\n  \"version\": \"4.4.2\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index.js\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\",\n    \"test\": \"vitest run --environment=jsdom --silent='passed-only'\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"xhr\",\n    \"xhr upload\",\n    \"XMLHttpRequest\",\n    \"ajax\",\n    \"fetch\",\n    \"uppy\",\n    \"uppy-plugin\"\n  ],\n  \"homepage\": \"https://uppy.io\",\n  \"bugs\": {\n    \"url\": \"https://github.com/transloadit/uppy/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/transloadit/uppy.git\"\n  },\n  \"files\": [\n    \"src\",\n    \"lib\",\n    \"dist\",\n    \"CHANGELOG.md\"\n  ],\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"^4.5.2\",\n    \"@uppy/utils\": \"^6.2.2\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"^4.5.2\",\n    \"jsdom\": \"^26.1.0\",\n    \"nock\": \"^13.1.0\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"^4.5.2\"\n  }\n}", "export default {\n    strings: {\n        // Shown in the Informer if an upload is being canceled because it stalled for too long.\n        uploadStalled: 'Upload has not made any progress for %{seconds} seconds. You may want to retry it.',\n    },\n};\n", "import { UIPlugin } from '@uppy/core';\nimport emaFilter from '@uppy/utils/lib/emaFilter';\nimport getTextDirection from '@uppy/utils/lib/getTextDirection';\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nimport statusBarStates from './StatusBarStates.js';\nimport StatusBarUI, {} from './StatusBarUI.js';\nconst speedFilterHalfLife = 2000;\nconst ETAFilterHalfLife = 2000;\nfunction getUploadingState(error, isAllComplete, recoveredState, files) {\n    if (error) {\n        return statusBarStates.STATE_ERROR;\n    }\n    if (isAllComplete) {\n        return statusBarStates.STATE_COMPLETE;\n    }\n    if (recoveredState) {\n        return statusBarStates.STATE_WAITING;\n    }\n    let state = statusBarStates.STATE_WAITING;\n    const fileIDs = Object.keys(files);\n    for (let i = 0; i < fileIDs.length; i++) {\n        const { progress } = files[fileIDs[i]];\n        // If ANY files are being uploaded right now, show the uploading state.\n        if (progress.uploadStarted && !progress.uploadComplete) {\n            return statusBarStates.STATE_UPLOADING;\n        }\n        // If files are being preprocessed AND postprocessed at this time, we show the\n        // preprocess state. If any files are being uploaded we show uploading.\n        if (progress.preprocess) {\n            state = statusBarStates.STATE_PREPROCESSING;\n        }\n        // If NO files are being preprocessed or uploaded right now, but some files are\n        // being postprocessed, show the postprocess state.\n        if (progress.postprocess && state !== statusBarStates.STATE_PREPROCESSING) {\n            state = statusBarStates.STATE_POSTPROCESSING;\n        }\n    }\n    return state;\n}\nconst defaultOptions = {\n    hideUploadButton: false,\n    hideRetryButton: false,\n    hidePauseResumeButton: false,\n    hideCancelButton: false,\n    showProgressDetails: false,\n    hideAfterFinish: true,\n    doneButtonHandler: null,\n};\n/**\n * StatusBar: renders a status bar with upload/pause/resume/cancel/retry buttons,\n * progress percentage and time remaining.\n */\nexport default class StatusBar extends UIPlugin {\n    static VERSION = packageJson.version;\n    #lastUpdateTime;\n    #previousUploadedBytes;\n    #previousSpeed;\n    #previousETA;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.id = this.opts.id || 'StatusBar';\n        this.title = 'StatusBar';\n        this.type = 'progressindicator';\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.render = this.render.bind(this);\n        this.install = this.install.bind(this);\n    }\n    #computeSmoothETA(totalBytes) {\n        if (totalBytes.total == null || totalBytes.total === 0) {\n            return null;\n        }\n        const remaining = totalBytes.total - totalBytes.uploaded;\n        if (remaining <= 0) {\n            return null;\n        }\n        // When state is restored, lastUpdateTime is still nullish at this point.\n        this.#lastUpdateTime ??= performance.now();\n        const dt = performance.now() - this.#lastUpdateTime;\n        if (dt === 0) {\n            return Math.round((this.#previousETA ?? 0) / 100) / 10;\n        }\n        const uploadedBytesSinceLastTick = totalBytes.uploaded - this.#previousUploadedBytes;\n        this.#previousUploadedBytes = totalBytes.uploaded;\n        // uploadedBytesSinceLastTick can be negative in some cases (packet loss?)\n        // in which case, we wait for next tick to update ETA.\n        if (uploadedBytesSinceLastTick <= 0) {\n            return Math.round((this.#previousETA ?? 0) / 100) / 10;\n        }\n        const currentSpeed = uploadedBytesSinceLastTick / dt;\n        const filteredSpeed = this.#previousSpeed == null\n            ? currentSpeed\n            : emaFilter(currentSpeed, this.#previousSpeed, speedFilterHalfLife, dt);\n        this.#previousSpeed = filteredSpeed;\n        const instantETA = remaining / filteredSpeed;\n        const updatedPreviousETA = Math.max(this.#previousETA - dt, 0);\n        const filteredETA = this.#previousETA == null\n            ? instantETA\n            : emaFilter(instantETA, updatedPreviousETA, ETAFilterHalfLife, dt);\n        this.#previousETA = filteredETA;\n        this.#lastUpdateTime = performance.now();\n        return Math.round(filteredETA / 100) / 10;\n    }\n    startUpload = () => {\n        return this.uppy.upload().catch((() => {\n            // Error logged in Core\n        }));\n    };\n    render(state) {\n        const { capabilities, files, allowNewUpload, totalProgress, error, recoveredState, } = state;\n        const { newFiles, startedFiles, completeFiles, isUploadStarted, isAllComplete, isAllPaused, isUploadInProgress, isSomeGhost, } = this.uppy.getObjectOfFilesPerState();\n        // If some state was recovered, we want to show Upload button/counter\n        // for all the files, because in this case it\u2019s not an Upload button,\n        // but \u201CConfirm Restore Button\u201D\n        const newFilesOrRecovered = recoveredState ? Object.values(files) : newFiles;\n        const resumableUploads = !!capabilities.resumableUploads;\n        const supportsUploadProgress = capabilities.uploadProgress !== false;\n        let totalSize = null;\n        let totalUploadedSize = 0;\n        // Only if all files have a known size, does it make sense to display a total size\n        if (startedFiles.every((f) => f.progress.bytesTotal != null && f.progress.bytesTotal !== 0)) {\n            totalSize = 0;\n            startedFiles.forEach((file) => {\n                totalSize += file.progress.bytesTotal || 0;\n                totalUploadedSize += file.progress.bytesUploaded || 0;\n            });\n        }\n        else {\n            // however uploaded size we will always have\n            startedFiles.forEach((file) => {\n                totalUploadedSize += file.progress.bytesUploaded || 0;\n            });\n        }\n        const totalETA = this.#computeSmoothETA({\n            uploaded: totalUploadedSize,\n            total: totalSize,\n        });\n        return StatusBarUI({\n            error,\n            uploadState: getUploadingState(error, isAllComplete, recoveredState, state.files || {}),\n            allowNewUpload,\n            totalProgress,\n            totalSize,\n            totalUploadedSize,\n            isAllComplete: false,\n            isAllPaused,\n            isUploadStarted,\n            isUploadInProgress,\n            isSomeGhost,\n            recoveredState,\n            complete: completeFiles.length,\n            newFiles: newFilesOrRecovered.length,\n            numUploads: startedFiles.length,\n            totalETA,\n            files,\n            i18n: this.i18n,\n            uppy: this.uppy,\n            startUpload: this.startUpload,\n            doneButtonHandler: this.opts.doneButtonHandler,\n            resumableUploads,\n            supportsUploadProgress,\n            showProgressDetails: this.opts.showProgressDetails,\n            hideUploadButton: this.opts.hideUploadButton,\n            hideRetryButton: this.opts.hideRetryButton,\n            hidePauseResumeButton: this.opts.hidePauseResumeButton,\n            hideCancelButton: this.opts.hideCancelButton,\n            hideAfterFinish: this.opts.hideAfterFinish,\n        });\n    }\n    onMount() {\n        // Set the text direction if the page has not defined one.\n        const element = this.el;\n        const direction = getTextDirection(element);\n        if (!direction) {\n            element.dir = 'ltr';\n        }\n    }\n    #onUploadStart = () => {\n        const { recoveredState } = this.uppy.getState();\n        this.#previousSpeed = null;\n        this.#previousETA = null;\n        if (recoveredState) {\n            this.#previousUploadedBytes = Object.values(recoveredState.files).reduce((pv, { progress }) => pv + progress.bytesUploaded, 0);\n            // We don't set `#lastUpdateTime` at this point because the upload won't\n            // actually resume until the user asks for it.\n            this.uppy.emit('restore-confirmed');\n            return;\n        }\n        this.#lastUpdateTime = performance.now();\n        this.#previousUploadedBytes = 0;\n    };\n    install() {\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n        this.uppy.on('upload', this.#onUploadStart);\n        // To cover the use case where the status bar is installed while the upload\n        // has started, we set `lastUpdateTime` right away.\n        this.#lastUpdateTime = performance.now();\n        this.#previousUploadedBytes = this.uppy\n            .getFiles()\n            .reduce((pv, file) => pv + file.progress.bytesUploaded, 0);\n    }\n    uninstall() {\n        this.unmount();\n        this.uppy.off('upload', this.#onUploadStart);\n    }\n}\n", "/**\n * Low-pass filter using Exponential Moving Averages (aka exponential smoothing)\n * Filters a sequence of values by updating the mixing the previous output value\n * with the new input using the exponential window function\n *\n * @param newValue the n-th value of the sequence\n * @param previousSmoothedValue the exponential average of the first n-1 values\n * @param halfLife value of `dt` to move the smoothed value halfway between `previousFilteredValue` and `newValue`\n * @param dt time elapsed between adding the (n-1)th and the n-th values\n * @returns the exponential average of the first n values\n */\nexport default function emaFilter(newValue, previousSmoothedValue, halfLife, dt) {\n    if (halfLife === 0 || newValue === previousSmoothedValue)\n        return newValue;\n    if (dt === 0)\n        return previousSmoothedValue;\n    return newValue + (previousSmoothedValue - newValue) * 2 ** (-dt / halfLife);\n}\n", "{\n  \"name\": \"@uppy/status-bar\",\n  \"description\": \"A progress bar for Uppy, with many bells and whistles.\",\n  \"version\": \"4.2.3\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index.js\",\n  \"style\": \"dist/style.min.css\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"build:css\": \"sass --load-path=../../ src/style.scss dist/style.css && postcss dist/style.css -u cssnano -o dist/style.min.css\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"progress bar\",\n    \"status bar\",\n    \"progress\",\n    \"upload\",\n    \"eta\",\n    \"speed\"\n  ],\n  \"homepage\": \"https://uppy.io\",\n  \"bugs\": {\n    \"url\": \"https://github.com/transloadit/uppy/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/transloadit/uppy.git\"\n  },\n  \"files\": [\n    \"src\",\n    \"lib\",\n    \"dist\",\n    \"CHANGELOG.md\"\n  ],\n  \"dependencies\": {\n    \"@transloadit/prettier-bytes\": \"^0.3.4\",\n    \"@uppy/utils\": \"^6.2.2\",\n    \"classnames\": \"^2.2.6\",\n    \"preact\": \"^10.5.13\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"^4.5.2\"\n  },\n  \"devDependencies\": {\n    \"cssnano\": \"^7.0.7\",\n    \"postcss\": \"^8.5.6\",\n    \"postcss-cli\": \"^11.0.1\",\n    \"sass\": \"^1.89.2\",\n    \"typescript\": \"^5.8.3\"\n  }\n}", "export default {\n    strings: {\n        // Shown in the status bar while files are being uploaded.\n        uploading: 'Uploading',\n        // Shown in the status bar once all files have been uploaded.\n        complete: 'Complete',\n        // Shown in the status bar if an upload failed.\n        uploadFailed: 'Upload failed',\n        // Shown in the status bar while the upload is paused.\n        paused: 'Paused',\n        // Used as the label for the button that retries an upload.\n        retry: 'Retry',\n        // Used as the label for the button that cancels an upload.\n        cancel: 'Cancel',\n        // Used as the label for the button that pauses an upload.\n        pause: 'Pause',\n        // Used as the label for the button that resumes an upload.\n        resume: 'Resume',\n        // Used as the label for the button that resets the upload state after an upload\n        done: 'Done',\n        // When `showProgressDetails` is set, shows the number of files that have been fully uploaded so far.\n        filesUploadedOfTotal: {\n            0: '%{complete} of %{smart_count} file uploaded',\n            1: '%{complete} of %{smart_count} files uploaded',\n        },\n        // When `showProgressDetails` is set, shows the amount of bytes that have been uploaded so far.\n        dataUploadedOfTotal: '%{complete} of %{total}',\n        dataUploadedOfUnknown: '%{complete} of unknown',\n        // When `showProgressDetails` is set, shows an estimation of how long the upload will take to complete.\n        xTimeLeft: '%{time} left',\n        // Used as the label for the button that starts an upload.\n        uploadXFiles: {\n            0: 'Upload %{smart_count} file',\n            1: 'Upload %{smart_count} files',\n        },\n        // Used as the label for the button that starts an upload, if another upload has been started in the past\n        // and new files were added later.\n        uploadXNewFiles: {\n            0: 'Upload +%{smart_count} file',\n            1: 'Upload +%{smart_count} files',\n        },\n        upload: 'Upload',\n        retryUpload: 'Retry upload',\n        xMoreFilesAdded: {\n            0: '%{smart_count} more file added',\n            1: '%{smart_count} more files added',\n        },\n        showErrorDetails: 'Show error details',\n    },\n};\n", "export default {\n    STATE_ERROR: 'error',\n    STATE_WAITING: 'waiting',\n    STATE_PREPROCESSING: 'preprocessing',\n    STATE_UPLOADING: 'uploading',\n    STATE_POSTPROCESSING: 'postprocessing',\n    STATE_COMPLETE: 'complete',\n};\n", "const ENCODED_ENTITIES = /[\"&<]/;\n\n/** @param {string} str */\nexport function encodeEntities(str) {\n\t// Skip all work for strings with no entities needing encoding:\n\tif (str.length === 0 || ENCODED_ENTITIES.test(str) === false) return str;\n\n\tlet last = 0,\n\t\ti = 0,\n\t\tout = '',\n\t\tch = '';\n\n\t// Seek forward in str until the next entity char:\n\tfor (; i < str.length; i++) {\n\t\tswitch (str.charCodeAt(i)) {\n\t\t\tcase 34:\n\t\t\t\tch = '&quot;';\n\t\t\t\tbreak;\n\t\t\tcase 38:\n\t\t\t\tch = '&amp;';\n\t\t\t\tbreak;\n\t\t\tcase 60:\n\t\t\t\tch = '&lt;';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcontinue;\n\t\t}\n\t\t// Append skipped/buffered characters and the encoded entity:\n\t\tif (i !== last) out += str.slice(last, i);\n\t\tout += ch;\n\t\t// Start the next seek/buffer after the entity's offset:\n\t\tlast = i + 1;\n\t}\n\tif (i !== last) out += str.slice(last, i);\n\treturn out;\n}\n", "/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 2;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 1;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nexport const XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nexport const MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n\nexport const NULL = null;\nexport const UNDEFINED = undefined;\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { options, Fragment } from 'preact';\nimport { encodeEntities } from './utils';\nimport { IS_NON_DIMENSIONAL } from '../../src/constants';\n\nlet vnodeId = 0;\n\nconst isArray = Array.isArray;\n\n/**\n * @fileoverview\n * This file exports various methods that implement Babel's \"automatic\" JSX runtime API:\n * - jsx(type, props, key)\n * - jsxs(type, props, key)\n * - jsxDEV(type, props, key, __source, __self)\n *\n * The implementation of createVNode here is optimized for performance.\n * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3\n */\n\n/**\n * JSX.Element factory used by Babel's {runtime:\"automatic\"} JSX transform\n * @param {VNode['type']} type\n * @param {VNode['props']} props\n * @param {VNode['key']} [key]\n * @param {unknown} [isStaticChildren]\n * @param {unknown} [__source]\n * @param {unknown} [__self]\n */\nfunction createVNode(type, props, key, isStaticChildren, __source, __self) {\n\tif (!props) props = {};\n\t// We'll want to preserve `ref` in props to get rid of the need for\n\t// forwardRef components in the future, but that should happen via\n\t// a separate PR.\n\tlet normalizedProps = props,\n\t\tref,\n\t\ti;\n\n\tif ('ref' in normalizedProps) {\n\t\tnormalizedProps = {};\n\t\tfor (i in props) {\n\t\t\tif (i == 'ref') {\n\t\t\t\tref = props[i];\n\t\t\t} else {\n\t\t\t\tnormalizedProps[i] = props[i];\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @type {VNode & { __source: any; __self: any }} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops: normalizedProps,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t_component: null,\n\t\tconstructor: undefined,\n\t\t_original: --vnodeId,\n\t\t_index: -1,\n\t\t_flags: 0,\n\t\t__source,\n\t\t__self\n\t};\n\n\t// If a Component VNode, check for and apply defaultProps.\n\t// Note: `type` is often a String, and can be `undefined` in development.\n\tif (typeof type === 'function' && (ref = type.defaultProps)) {\n\t\tfor (i in ref)\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = ref[i];\n\t\t\t}\n\t}\n\n\tif (options.vnode) options.vnode(vnode);\n\treturn vnode;\n}\n\n/**\n * Create a template vnode. This function is not expected to be\n * used directly, but rather through a precompile JSX transform\n * @param {string[]} templates\n * @param  {Array<string | null | VNode>} exprs\n * @returns {VNode}\n */\nfunction jsxTemplate(templates, ...exprs) {\n\tconst vnode = createVNode(Fragment, { tpl: templates, exprs });\n\t// Bypass render to string top level Fragment optimization\n\tvnode.key = vnode._vnode;\n\treturn vnode;\n}\n\nconst JS_TO_CSS = {};\nconst CSS_REGEX = /[A-Z]/g;\n\n/**\n * Unwrap potential signals.\n * @param {*} value\n * @returns {*}\n */\nfunction normalizeAttrValue(value) {\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.valueOf === 'function'\n\t\t? value.valueOf()\n\t\t: value;\n}\n\n/**\n * Serialize an HTML attribute to a string. This function is not\n * expected to be used directly, but rather through a precompile\n * JSX transform\n * @param {string} name The attribute name\n * @param {*} value The attribute value\n * @returns {string}\n */\nfunction jsxAttr(name, value) {\n\tif (options.attr) {\n\t\tconst result = options.attr(name, value);\n\t\tif (typeof result === 'string') return result;\n\t}\n\n\tvalue = normalizeAttrValue(value);\n\n\tif (name === 'ref' || name === 'key') return '';\n\tif (name === 'style' && typeof value === 'object') {\n\t\tlet str = '';\n\t\tfor (let prop in value) {\n\t\t\tlet val = value[prop];\n\t\t\tif (val != null && val !== '') {\n\t\t\t\tconst name =\n\t\t\t\t\tprop[0] == '-'\n\t\t\t\t\t\t? prop\n\t\t\t\t\t\t: JS_TO_CSS[prop] ||\n\t\t\t\t\t\t\t(JS_TO_CSS[prop] = prop.replace(CSS_REGEX, '-$&').toLowerCase());\n\n\t\t\t\tlet suffix = ';';\n\t\t\t\tif (\n\t\t\t\t\ttypeof val === 'number' &&\n\t\t\t\t\t// Exclude custom-attributes\n\t\t\t\t\t!name.startsWith('--') &&\n\t\t\t\t\t!IS_NON_DIMENSIONAL.test(name)\n\t\t\t\t) {\n\t\t\t\t\tsuffix = 'px;';\n\t\t\t\t}\n\t\t\t\tstr = str + name + ':' + val + suffix;\n\t\t\t}\n\t\t}\n\t\treturn name + '=\"' + encodeEntities(str) + '\"';\n\t}\n\n\tif (\n\t\tvalue == null ||\n\t\tvalue === false ||\n\t\ttypeof value === 'function' ||\n\t\ttypeof value === 'object'\n\t) {\n\t\treturn '';\n\t} else if (value === true) return name;\n\n\treturn name + '=\"' + encodeEntities('' + value) + '\"';\n}\n\n/**\n * Escape a dynamic child passed to `jsxTemplate`. This function\n * is not expected to be used directly, but rather through a\n * precompile JSX transform\n * @param {*} value\n * @returns {string | null | VNode | Array<string | null | VNode>}\n */\nfunction jsxEscape(value) {\n\tif (\n\t\tvalue == null ||\n\t\ttypeof value === 'boolean' ||\n\t\ttypeof value === 'function'\n\t) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'object') {\n\t\t// Check for VNode\n\t\tif (value.constructor === undefined) return value;\n\n\t\tif (isArray(value)) {\n\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\tvalue[i] = jsxEscape(value[i]);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\treturn encodeEntities('' + value);\n}\n\nexport {\n\tcreateVNode as jsx,\n\tcreateVNode as jsxs,\n\tcreateVNode as jsxDEV,\n\tFragment,\n\t// precompiled JSX transform\n\tjsxTemplate,\n\tjsxAttr,\n\tjsxEscape\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport { h } from 'preact';\nimport { CancelBtn, DoneBtn, PauseResumeButton, ProgressBarComplete, ProgressBarError, ProgressBarProcessing, ProgressBarUploading, RetryBtn, UploadBtn, } from './Components.js';\nimport calculateProcessingProgress from './calculateProcessingProgress.js';\nimport statusBarStates from './StatusBarStates.js';\nconst { STATE_ERROR, STATE_WAITING, STATE_PREPROCESSING, STATE_UPLOADING, STATE_POSTPROCESSING, STATE_COMPLETE, } = statusBarStates;\nexport default function StatusBarUI({ newFiles, allowNewUpload, isUploadInProgress, isAllPaused, resumableUploads, error, hideUploadButton = undefined, hidePauseResumeButton = false, hideCancelButton = false, hideRetryButton = false, recoveredState, uploadState, totalProgress, files, supportsUploadProgress, hideAfterFinish = false, isSomeGhost, doneButtonHandler = undefined, isUploadStarted, i18n, startUpload, uppy, isAllComplete, showProgressDetails = undefined, numUploads, complete, totalSize, totalETA, totalUploadedSize, }) {\n    function getProgressValue() {\n        switch (uploadState) {\n            case STATE_POSTPROCESSING:\n            case STATE_PREPROCESSING: {\n                const progress = calculateProcessingProgress(files);\n                if (progress.mode === 'determinate') {\n                    return progress.value * 100;\n                }\n                return totalProgress;\n            }\n            case STATE_ERROR: {\n                return null;\n            }\n            case STATE_UPLOADING: {\n                if (!supportsUploadProgress) {\n                    return null;\n                }\n                return totalProgress;\n            }\n            default:\n                return totalProgress;\n        }\n    }\n    function getIsIndeterminate() {\n        switch (uploadState) {\n            case STATE_POSTPROCESSING:\n            case STATE_PREPROCESSING: {\n                const { mode } = calculateProcessingProgress(files);\n                return mode === 'indeterminate';\n            }\n            case STATE_UPLOADING: {\n                if (!supportsUploadProgress) {\n                    return true;\n                }\n                return false;\n            }\n            default:\n                return false;\n        }\n    }\n    const progressValue = getProgressValue();\n    const width = progressValue ?? 100;\n    const showUploadBtn = !error &&\n        newFiles &&\n        ((!isUploadInProgress && !isAllPaused) || recoveredState) &&\n        allowNewUpload &&\n        !hideUploadButton;\n    const showCancelBtn = !hideCancelButton &&\n        uploadState !== STATE_WAITING &&\n        uploadState !== STATE_COMPLETE;\n    const showPauseResumeBtn = resumableUploads &&\n        !hidePauseResumeButton &&\n        uploadState === STATE_UPLOADING;\n    const showRetryBtn = error && !isAllComplete && !hideRetryButton;\n    const showDoneBtn = doneButtonHandler && uploadState === STATE_COMPLETE;\n    const progressClassNames = classNames('uppy-StatusBar-progress', {\n        'is-indeterminate': getIsIndeterminate(),\n    });\n    const statusBarClassNames = classNames('uppy-StatusBar', `is-${uploadState}`, { 'has-ghosts': isSomeGhost });\n    const progressBarStateEl = (() => {\n        switch (uploadState) {\n            case STATE_PREPROCESSING:\n            case STATE_POSTPROCESSING:\n                return (_jsx(ProgressBarProcessing, { progress: calculateProcessingProgress(files) }));\n            case STATE_COMPLETE:\n                return _jsx(ProgressBarComplete, { i18n: i18n });\n            case STATE_ERROR:\n                return (_jsx(ProgressBarError, { error: error, i18n: i18n, numUploads: numUploads, complete: complete }));\n            case STATE_UPLOADING:\n                return (_jsx(ProgressBarUploading, { i18n: i18n, supportsUploadProgress: supportsUploadProgress, totalProgress: totalProgress, showProgressDetails: showProgressDetails, isUploadStarted: isUploadStarted, isAllComplete: isAllComplete, isAllPaused: isAllPaused, newFiles: newFiles, numUploads: numUploads, complete: complete, totalUploadedSize: totalUploadedSize, totalSize: totalSize, totalETA: totalETA, startUpload: startUpload }));\n            default:\n                return null;\n        }\n    })();\n    const atLeastOneAction = showUploadBtn ||\n        showRetryBtn ||\n        showPauseResumeBtn ||\n        showCancelBtn ||\n        showDoneBtn;\n    const thereIsNothingInside = !atLeastOneAction && !progressBarStateEl;\n    const isHidden = thereIsNothingInside || (uploadState === STATE_COMPLETE && hideAfterFinish);\n    if (isHidden) {\n        return null;\n    }\n    return (_jsxs(\"div\", { className: statusBarClassNames, children: [_jsx(\"div\", { className: progressClassNames, style: { width: `${width}%` }, role: \"progressbar\", \"aria-label\": `${width}%`, \"aria-valuetext\": `${width}%`, \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": progressValue }), progressBarStateEl, _jsxs(\"div\", { className: \"uppy-StatusBar-actions\", children: [showUploadBtn ? (_jsx(UploadBtn, { newFiles: newFiles, isUploadStarted: isUploadStarted, recoveredState: recoveredState, i18n: i18n, isSomeGhost: isSomeGhost, startUpload: startUpload, uploadState: uploadState })) : null, showRetryBtn ? _jsx(RetryBtn, { i18n: i18n, uppy: uppy }) : null, showPauseResumeBtn ? (_jsx(PauseResumeButton, { isAllPaused: isAllPaused, i18n: i18n, isAllComplete: isAllComplete, resumableUploads: resumableUploads, uppy: uppy })) : null, showCancelBtn ? _jsx(CancelBtn, { i18n: i18n, uppy: uppy }) : null, showDoneBtn ? (_jsx(DoneBtn, { i18n: i18n, doneButtonHandler: doneButtonHandler })) : null] })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport prettierBytes from '@transloadit/prettier-bytes';\nimport prettyETA from '@uppy/utils/lib/prettyETA';\nimport classNames from 'classnames';\nimport { h } from 'preact';\nimport statusBarStates from './StatusBarStates.js';\nconst DOT = `\\u00B7`;\nconst renderDot = () => ` ${DOT} `;\nfunction UploadBtn(props) {\n    const { newFiles, isUploadStarted, recoveredState, i18n, uploadState, isSomeGhost, startUpload, } = props;\n    const uploadBtnClassNames = classNames('uppy-u-reset', 'uppy-c-btn', 'uppy-StatusBar-actionBtn', 'uppy-StatusBar-actionBtn--upload', {\n        'uppy-c-btn-primary': uploadState === statusBarStates.STATE_WAITING,\n    }, { 'uppy-StatusBar-actionBtn--disabled': isSomeGhost });\n    const uploadBtnText = newFiles && isUploadStarted && !recoveredState\n        ? i18n('uploadXNewFiles', { smart_count: newFiles })\n        : i18n('uploadXFiles', { smart_count: newFiles });\n    return (_jsx(\"button\", { type: \"button\", className: uploadBtnClassNames, \"aria-label\": i18n('uploadXFiles', { smart_count: newFiles }), onClick: startUpload, disabled: isSomeGhost, \"data-uppy-super-focusable\": true, children: uploadBtnText }));\n}\nfunction RetryBtn(props) {\n    const { i18n, uppy } = props;\n    return (_jsxs(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-StatusBar-actionBtn uppy-StatusBar-actionBtn--retry\", \"aria-label\": i18n('retryUpload'), onClick: () => uppy.retryAll().catch(() => {\n            /* Error reported and handled via an event */\n        }), \"data-uppy-super-focusable\": true, \"data-cy\": \"retry\", children: [_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"8\", height: \"10\", viewBox: \"0 0 8 10\", children: _jsx(\"path\", { d: \"M4 2.408a2.75 2.75 0 1 0 2.75 2.75.626.626 0 0 1 1.25.018v.023a4 4 0 1 1-4-4.041V.25a.25.25 0 0 1 .389-.208l2.299 1.533a.25.25 0 0 1 0 .416l-2.3 1.533A.25.25 0 0 1 4 3.316v-.908z\" }) }), i18n('retry')] }));\n}\nfunction CancelBtn(props) {\n    const { i18n, uppy } = props;\n    return (_jsx(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-StatusBar-actionCircleBtn\", title: i18n('cancel'), \"aria-label\": i18n('cancel'), onClick: () => uppy.cancelAll(), \"data-cy\": \"cancel\", \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", children: _jsxs(\"g\", { fill: \"none\", fillRule: \"evenodd\", children: [_jsx(\"circle\", { fill: \"#888\", cx: \"8\", cy: \"8\", r: \"8\" }), _jsx(\"path\", { fill: \"#FFF\", d: \"M9.283 8l2.567 2.567-1.283 1.283L8 9.283 5.433 11.85 4.15 10.567 6.717 8 4.15 5.433 5.433 4.15 8 6.717l2.567-2.567 1.283 1.283z\" })] }) }) }));\n}\nfunction PauseResumeButton(props) {\n    const { isAllPaused, i18n, isAllComplete, resumableUploads, uppy } = props;\n    const title = isAllPaused ? i18n('resume') : i18n('pause');\n    function togglePauseResume() {\n        if (isAllComplete)\n            return;\n        if (!resumableUploads) {\n            uppy.cancelAll();\n            return;\n        }\n        if (isAllPaused) {\n            uppy.resumeAll();\n            return;\n        }\n        uppy.pauseAll();\n    }\n    return (_jsx(\"button\", { title: title, \"aria-label\": title, className: \"uppy-u-reset uppy-StatusBar-actionCircleBtn\", type: \"button\", onClick: togglePauseResume, \"data-cy\": \"togglePauseResume\", \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", children: _jsxs(\"g\", { fill: \"none\", fillRule: \"evenodd\", children: [_jsx(\"circle\", { fill: \"#888\", cx: \"8\", cy: \"8\", r: \"8\" }), _jsx(\"path\", { fill: \"#FFF\", d: isAllPaused\n                            ? 'M6 4.25L11.5 8 6 11.75z'\n                            : 'M5 4.5h2v7H5v-7zm4 0h2v7H9v-7z' })] }) }) }));\n}\nfunction DoneBtn(props) {\n    const { i18n, doneButtonHandler } = props;\n    return (_jsx(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-StatusBar-actionBtn uppy-StatusBar-actionBtn--done\", onClick: doneButtonHandler, \"data-uppy-super-focusable\": true, children: i18n('done') }));\n}\nfunction LoadingSpinner() {\n    return (_jsx(\"svg\", { className: \"uppy-StatusBar-spinner\", \"aria-hidden\": \"true\", focusable: \"false\", width: \"14\", height: \"14\", children: _jsx(\"path\", { d: \"M13.983 6.547c-.12-2.509-1.64-4.893-3.939-5.936-2.48-1.127-5.488-.656-7.556 1.094C.524 3.367-.398 6.048.162 8.562c.556 2.495 2.46 4.52 4.94 5.183 2.932.784 5.61-.602 7.256-3.015-1.493 1.993-3.745 3.309-6.298 2.868-2.514-.434-4.578-2.349-5.153-4.84a6.226 6.226 0 0 1 2.98-6.778C6.34.586 9.74 1.1 11.373 3.493c.407.596.693 1.282.842 1.988.127.598.073 1.197.161 1.794.078.525.543 1.257 1.15.864.525-.341.49-1.05.456-1.592-.007-.15.02.3 0 0\", fillRule: \"evenodd\" }) }));\n}\nfunction ProgressBarProcessing(props) {\n    const { progress } = props;\n    const { value, mode, message } = progress;\n    const dot = `\\u00B7`;\n    return (_jsxs(\"div\", { className: \"uppy-StatusBar-content\", children: [_jsx(LoadingSpinner, {}), mode === 'determinate' ? `${Math.round(value * 100)}% ${dot} ` : '', message] }));\n}\nfunction ProgressDetails(props) {\n    const { numUploads, complete, totalUploadedSize, totalSize, totalETA, i18n } = props;\n    const ifShowFilesUploadedOfTotal = numUploads > 1;\n    const totalUploadedSizeStr = prettierBytes(totalUploadedSize);\n    return (_jsxs(\"div\", { className: \"uppy-StatusBar-statusSecondary\", children: [ifShowFilesUploadedOfTotal &&\n                i18n('filesUploadedOfTotal', {\n                    complete,\n                    smart_count: numUploads,\n                }), _jsxs(\"span\", { className: \"uppy-StatusBar-additionalInfo\", children: [ifShowFilesUploadedOfTotal && renderDot(), totalSize != null\n                        ? i18n('dataUploadedOfTotal', {\n                            complete: totalUploadedSizeStr,\n                            total: prettierBytes(totalSize),\n                        })\n                        : i18n('dataUploadedOfUnknown', { complete: totalUploadedSizeStr }), renderDot(), totalETA != null &&\n                        i18n('xTimeLeft', {\n                            time: prettyETA(totalETA),\n                        })] })] }));\n}\nfunction FileUploadCount(props) {\n    const { i18n, complete, numUploads } = props;\n    return (_jsx(\"div\", { className: \"uppy-StatusBar-statusSecondary\", children: i18n('filesUploadedOfTotal', { complete, smart_count: numUploads }) }));\n}\nfunction UploadNewlyAddedFiles(props) {\n    const { i18n, newFiles, startUpload } = props;\n    const uploadBtnClassNames = classNames('uppy-u-reset', 'uppy-c-btn', 'uppy-StatusBar-actionBtn', 'uppy-StatusBar-actionBtn--uploadNewlyAdded');\n    return (_jsxs(\"div\", { className: \"uppy-StatusBar-statusSecondary\", children: [_jsx(\"div\", { className: \"uppy-StatusBar-statusSecondaryHint\", children: i18n('xMoreFilesAdded', { smart_count: newFiles }) }), _jsx(\"button\", { type: \"button\", className: uploadBtnClassNames, \"aria-label\": i18n('uploadXFiles', { smart_count: newFiles }), onClick: startUpload, children: i18n('upload') })] }));\n}\nfunction ProgressBarUploading(props) {\n    const { i18n, supportsUploadProgress, totalProgress, showProgressDetails, isUploadStarted, isAllComplete, isAllPaused, newFiles, numUploads, complete, totalUploadedSize, totalSize, totalETA, startUpload, } = props;\n    const showUploadNewlyAddedFiles = newFiles && isUploadStarted;\n    if (!isUploadStarted || isAllComplete) {\n        return null;\n    }\n    const title = isAllPaused ? i18n('paused') : i18n('uploading');\n    function renderProgressDetails() {\n        if (!isAllPaused && !showUploadNewlyAddedFiles && showProgressDetails) {\n            if (supportsUploadProgress) {\n                return (_jsx(ProgressDetails, { numUploads: numUploads, complete: complete, totalUploadedSize: totalUploadedSize, totalSize: totalSize, totalETA: totalETA, i18n: i18n }));\n            }\n            return (_jsx(FileUploadCount, { i18n: i18n, complete: complete, numUploads: numUploads }));\n        }\n        return null;\n    }\n    return (_jsxs(\"div\", { className: \"uppy-StatusBar-content\", title: title, children: [!isAllPaused ? _jsx(LoadingSpinner, {}) : null, _jsxs(\"div\", { className: \"uppy-StatusBar-status\", children: [_jsx(\"div\", { className: \"uppy-StatusBar-statusPrimary\", children: supportsUploadProgress && totalProgress !== 0\n                            ? `${title}: ${totalProgress}%`\n                            : title }), renderProgressDetails(), showUploadNewlyAddedFiles ? (_jsx(UploadNewlyAddedFiles, { i18n: i18n, newFiles: newFiles, startUpload: startUpload })) : null] })] }));\n}\nfunction ProgressBarComplete(props) {\n    const { i18n } = props;\n    return (_jsx(\"div\", { className: \"uppy-StatusBar-content\", \n        // biome-ignore lint/a11y/useSemanticElements: ...\n        role: \"status\", title: i18n('complete'), children: _jsx(\"div\", { className: \"uppy-StatusBar-status\", children: _jsxs(\"div\", { className: \"uppy-StatusBar-statusPrimary\", children: [_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-StatusBar-statusIndicator uppy-c-icon\", width: \"15\", height: \"11\", viewBox: \"0 0 15 11\", children: _jsx(\"path\", { d: \"M.414 5.843L1.627 4.63l3.472 3.472L13.202 0l1.212 1.213L5.1 10.528z\" }) }), i18n('complete')] }) }) }));\n}\nfunction ProgressBarError(props) {\n    const { error, i18n, complete, numUploads } = props;\n    function displayErrorAlert() {\n        const errorMessage = `${i18n('uploadFailed')} \\n\\n ${error}`;\n        alert(errorMessage); // TODO: move to custom alert implementation\n    }\n    return (_jsxs(\"div\", { className: \"uppy-StatusBar-content\", title: i18n('uploadFailed'), children: [_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-StatusBar-statusIndicator uppy-c-icon\", width: \"11\", height: \"11\", viewBox: \"0 0 11 11\", children: _jsx(\"path\", { d: \"M4.278 5.5L0 1.222 1.222 0 5.5 4.278 9.778 0 11 1.222 6.722 5.5 11 9.778 9.778 11 5.5 6.722 1.222 11 0 9.778z\" }) }), _jsxs(\"div\", { className: \"uppy-StatusBar-status\", children: [_jsxs(\"div\", { className: \"uppy-StatusBar-statusPrimary\", children: [i18n('uploadFailed'), _jsx(\"button\", { className: \"uppy-u-reset uppy-StatusBar-details\", \"aria-label\": i18n('showErrorDetails'), \"data-microtip-position\": \"top-right\", \"data-microtip-size\": \"medium\", onClick: displayErrorAlert, type: \"button\", children: \"?\" })] }), _jsx(FileUploadCount, { i18n: i18n, complete: complete, numUploads: numUploads })] })] }));\n}\nexport { UploadBtn, RetryBtn, CancelBtn, PauseResumeButton, DoneBtn, LoadingSpinner, ProgressDetails, ProgressBarProcessing, ProgressBarError, ProgressBarUploading, ProgressBarComplete, };\n", "export default function secondsToTime(rawSeconds) {\n    const hours = Math.floor(rawSeconds / 3600) % 24;\n    const minutes = Math.floor(rawSeconds / 60) % 60;\n    const seconds = Math.floor(rawSeconds % 60);\n    return { hours, minutes, seconds };\n}\n", "import secondsToTime from './secondsToTime.js';\nexport default function prettyETA(seconds) {\n    const time = secondsToTime(seconds);\n    // Only display hours and minutes if they are greater than 0 but always\n    // display minutes if hours is being displayed\n    // Display a leading zero if the there is a preceding unit: 1m 05s, but 5s\n    const hoursStr = time.hours === 0 ? '' : `${time.hours}h`;\n    const minutesStr = time.minutes === 0\n        ? ''\n        : `${time.hours === 0\n            ? time.minutes\n            : ` ${time.minutes.toString(10).padStart(2, '0')}`}m`;\n    const secondsStr = time.hours !== 0\n        ? ''\n        : `${time.minutes === 0\n            ? time.seconds\n            : ` ${time.seconds.toString(10).padStart(2, '0')}`}s`;\n    return `${hoursStr}${minutesStr}${secondsStr}`;\n}\n", "export default function calculateProcessingProgress(files) {\n    const values = [];\n    let mode = 'indeterminate';\n    let message;\n    for (const { progress } of Object.values(files)) {\n        const { preprocess, postprocess } = progress;\n        // In the future we should probably do this differently. For now we'll take the\n        // mode and message from the first file\u2026\n        if (message == null && (preprocess || postprocess)) {\n            ;\n            ({ mode, message } = preprocess || postprocess);\n        }\n        if (preprocess?.mode === 'determinate')\n            values.push(preprocess.value);\n        if (postprocess?.mode === 'determinate')\n            values.push(postprocess.value);\n    }\n    const value = values.reduce((total, progressValue) => {\n        return total + progressValue / values.length;\n    }, 0);\n    return {\n        mode,\n        message,\n        value,\n    };\n}\n", "const de_DE = {\n    pluralize(count) {\n        if (count === 1) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n};\nde_DE.strings = {\n    addBulkFilesFailed: {\n        '0': 'Das Hinzuf\u00FCgen einer Datei ist aufgrund eines internen Fehlers fehlgeschlagen',\n        '1': 'Das Hinzuf\u00FCgen von %{smart_count} Dateien ist aufgrund eines internen Fehlers fehlgeschlagen'\n    },\n    addingMoreFiles: 'Dateien hinzuf\u00FCgen',\n    addMore: 'Mehr hinzuf\u00FCgen',\n    addMoreFiles: 'Dateien hinzuf\u00FCgen',\n    allFilesFromFolderNamed: 'Alle Dateien vom Ordner %{name}',\n    allowAccessDescription: 'Um Bilder oder Videos mit Ihrer Kamera aufzunehmen, erlauben Sie dieser Website bitte den Zugriff auf Ihre Kamera.',\n    allowAccessTitle: 'Bitte erlauben Sie Zugriff auf Ihre Kamera',\n    aspectRatioLandscape: 'Zuschneiden auf Querformat (16:9)',\n    aspectRatioPortrait: 'Zuschneiden auf Hochformat (9:16)',\n    aspectRatioSquare: 'Zuschneiden auf Quadrat',\n    authenticateWith: 'Mit %{pluginName} verbinden',\n    authenticateWithTitle: 'Bitte authentifizieren Sie sich mit %{pluginName}, um Dateien auszuw\u00E4hlen',\n    back: 'Zur\u00FCck',\n    backToSearch: 'Zur\u00FCck zur Suche',\n    browse: 'Datei-Auswahl',\n    mediaPool: 'Medienpool',\n    browseFiles: 'Dateien durchsuchen',\n    browseFolders: 'Ordner durchsuchen',\n    cancel: 'Abbrechen',\n    cancelUpload: 'Hochladen abbrechen',\n    chooseFiles: 'Dateien ausw\u00E4hlen',\n    closeModal: 'Fenster schlie\u00DFen',\n    companionError: 'Verbindung zu Companion fehlgeschlagen',\n    companionUnauthorizeHint: 'Um die Autorisierung f\u00FCr Ihr %{provider} Konto aufzuheben, gehen Sie bitte zu %{url}',\n    complete: 'Fertig',\n    connectedToInternet: 'Mit dem Internet verbunden',\n    copyLink: 'Link kopieren',\n    copyLinkToClipboardFallback: 'Untenstehende URL kopieren',\n    copyLinkToClipboardSuccess: 'Link in die Zwischenablage kopiert',\n    creatingAssembly: 'Das Hochladen wird vorbereiten...',\n    creatingAssemblyFailed: 'Transloadit: Assembly konnte nicht erstellt werden',\n    dashboardTitle: 'Hochladen von Dateien',\n    dashboardWindowTitle: 'Hochladen von Dateien (ESC dr\u00FCcken zum Schlie\u00DFen)',\n    dataUploadedOfTotal: '%{complete} von %{total}',\n    discardRecordedFile: 'Aufgenommene Datei verwerfen',\n    done: 'Abgeschlossen',\n    dropHereOr: 'Dateien k\u00F6nnen \u00FCber \"Drag&Drop\" oder per %{browse} hinzugef\u00FCgt werden',\n    dropHereOrMediaPool: 'Dateien k\u00F6nnen aus Ihrem %{mediaPool}, \u00FCber Drag&Drop oder per %{browse} hinzugef\u00FCgt werden',\n    dropHint: 'Dateien hier ablegen',\n    dropPasteBoth: 'Dateien hier ablegen/einf\u00FCgen, %{browseFiles} oder %{browseFolders}',\n    dropPasteFiles: 'Dateien hier ablegen/einf\u00FCgen oder %{browseFiles}',\n    dropPasteFolders: 'Dateien hier ablegen/einf\u00FCgen oder %{browseFolders}',\n    dropPasteImportBoth: 'Dateien hier ablegen/einf\u00FCgen, %{browse} oder von folgenden Quellen importieren:',\n    dropPasteImportFiles: 'Dateien hier ablegen/einf\u00FCgen, %{browseFiles} oder von folgenden Quellen importieren:',\n    dropPasteImportFolders: 'Dateien hier ablegen/einf\u00FCgen, %{browseFolders} oder von folgenden Quellen importieren:',\n    editFile: 'Datei bearbeiten',\n    editFileWithFilename: 'Datei %{file} bearbeiten',\n    editing: '%{file} bearbeiten',\n    emptyFolderAdded: 'Keine Dateien hinzugef\u00FCgt, da der Ordner leer war',\n    encoding: 'Kodieren...',\n    enterCorrectUrl: 'Falsche URL: Bitte stellen Sie sicher, dass Sie einen direkten Link zu einer Datei eingeben',\n    enterTextToSearch: 'Text zum Suchen von Bildern eingeben',\n    enterUrlToImport: 'URL zum Importieren einer Datei eingeben',\n    exceedsSize: 'Diese Datei ist gr\u00F6\u00DFer als die maximal erlaubte Dateigr\u00F6\u00DFe',\n    failedToFetch: 'Companion konnte diese URL nicht verarbeiten - stellen Sie bitte sicher, dass sie korrekt ist',\n    failedToUpload: 'Fehler beim Hochladen der Datei %{file}',\n    filesUploadedOfTotal: {\n        '0': '%{complete} von %{smart_count} Datei hochgeladen',\n        '1': '%{complete} von %{smart_count} Dateien hochgeladen'\n    },\n    filter: 'Filter',\n    finishEditingFile: 'Bearbeitung beenden',\n    flipHorizontal: 'Horizontal spiegeln',\n    folderAdded: {\n        '0': 'Eine Datei von %{folder} hinzugef\u00FCgt',\n        '1': '%{smart_count} Dateien von %{folder} hinzugef\u00FCgt'\n    },\n    folderAlreadyAdded: 'Der Ordner \"%{folder}\" wurde bereits hinzugef\u00FCgt',\n    generatingThumbnails: 'Erstellen von Miniaturansichten...',\n    import: 'Importieren',\n    importFiles: 'Importiere Dateien von:',\n    importFrom: 'Importieren von %{name}',\n    inferiorSize: 'Diese Datei ist kleiner als die minimal erlaubte Dateigr\u00F6\u00DFe von %{size}',\n    loading: 'Laden...',\n    logOut: 'Abmelden',\n    micDisabled: 'Zugriff auf Mikrofon von Benutzer abgelehnt',\n    missingRequiredMetaField: 'Fehlende erforderliche Meta-Felder',\n    missingRequiredMetaFieldOnFile: 'Fehlende erforderliche Meta-Felder in %{fileName}',\n    myDevice: 'Mein Ger\u00E4t',\n    noCameraDescription: 'Bitte Kamera anschlie\u00DFen, um Bilder oder Videos aufzunehmen',\n    noCameraTitle: 'Kamera nicht verf\u00FCgbar',\n    noDuplicates: 'Datei \\'%{fileName}\\' existiert bereits und kann nicht erneut hinzugef\u00FCgt werden',\n    noFilesFound: 'Sie haben hier keine Dateien oder Ordner',\n    noInternetConnection: 'Keine Internetverbindung',\n    noMoreFilesAllowed: 'W\u00E4hrend der Upload l\u00E4uft, k\u00F6nnen keine weiteren Dateien hinzugef\u00FCgt werden',\n    openFolderNamed: 'Ordner %{name} \u00F6ffnen',\n    pause: 'Pausieren',\n    paused: 'Pausiert',\n    pauseUpload: 'Hochladen pausieren',\n    pluginNameBox: 'Box',\n    pluginNameCamera: 'Kamera',\n    pluginNameDropbox: 'Dropbox',\n    pluginNameFacebook: 'Facebook',\n    pluginNameGoogleDrive: 'Google Drive',\n    pluginNameInstagram: 'Instagram',\n    pluginNameOneDrive: 'OneDrive',\n    pluginNameZoom: 'Zoom',\n    poweredBy: 'Powered by %{uppy}',\n    processingXFiles: {\n        '0': 'Eine Datei verarbeiten',\n        '1': '%{smart_count} Dateien verarbeiten'\n    },\n    recording: 'Aufnahme',\n    recordingLength: 'Aufnahmedauer %{recording_length}',\n    recordingStoppedMaxSize: 'Die Aufnahme wurde gestoppt, weil die Dateigr\u00F6\u00DFe das Limit \u00FCberschritten hat',\n    recoveredAllFiles: 'Wir haben alle Dateien wiederhergestellt. Sie k\u00F6nnen mit dem Hochladen fortfahren.',\n    recoveredXFiles: {\n        '0': 'Wir konnten eine Datei nicht vollst\u00E4ndig wiederherstellen. Bitte w\u00E4hlen Sie sie erneut aus und fahren Sie dann mit dem Hochladen fort.',\n        '1': 'Wir konnten %{smart_count} Dateien nicht vollst\u00E4ndig wiederherstellen. Bitte w\u00E4hlen Sie sie erneut aus und fahren Sie dann mit dem Hochladen fort.'\n    },\n    removeFile: 'Datei entfernen',\n    reSelect: 'Erneut ausw\u00E4hlen',\n    resetFilter: 'Filter zur\u00FCcksetzen',\n    resume: 'Fortsetzen',\n    resumeUpload: 'Hochladen fortsetzen',\n    retry: 'Erneut versuchen',\n    retryUpload: 'Hochladen erneut versuchen',\n    revert: 'R\u00FCckg\u00E4ngig machen',\n    rotate: 'Drehen',\n    save: 'Speichern',\n    saveChanges: '\u00C4nderungen speichern',\n    searchImages: 'Suche nach Bildern',\n    selectX: {\n        '0': 'W\u00E4hlen Sie %{smart_count}',\n        '1': 'W\u00E4hlen Sie %{smart_count}'\n    },\n    sessionRestored: '',\n    smile: 'Bitte l\u00E4cheln!',\n    startCapturing: 'Bildschirmaufnahme starten',\n    startRecording: 'Videoaufnahme starten',\n    stopCapturing: 'Bildschirmaufnahme stoppen',\n    stopRecording: 'Videoaufnahme stoppen',\n    streamActive: 'Stream aktiv',\n    streamPassive: 'Stream passiv',\n    submitRecordedFile: 'Aufgezeichnete Datei verwenden',\n    takePicture: 'Ein Foto machen',\n    timedOut: 'Upload f\u00FCr %{seconds} Sekunden stehen geblieben, breche ab.',\n    upload: 'Hochladen',\n    uploadComplete: 'Hochladen abgeschlossen',\n    uploadFailed: 'Hochladen fehlgeschlagen',\n    uploading: 'Wird hochgeladen',\n    uploadingXFiles: {\n        '0': 'Eine Datei wird hochgeladen',\n        '1': '%{smart_count} Dateien werden hochgeladen'\n    },\n    uploadPaused: 'Hochladen pausiert',\n    uploadXFiles: {\n        '0': 'Eine Datei hochladen',\n        '1': '%{smart_count} Dateien hochladen'\n    },\n    uploadXNewFiles: {\n        '0': '+%{smart_count} Datei hochladen',\n        '1': '+%{smart_count} Dateien hochladen'\n    },\n    xFilesSelected: {\n        '0': 'Eine Datei ausgew\u00E4hlt',\n        '1': '%{smart_count} Dateien ausgew\u00E4hlt'\n    },\n    xMoreFilesAdded: {\n        '0': 'Eine weitere Datei hinzugef\u00FCgt',\n        '1': '%{smart_count} weitere Dateien hinzugef\u00FCgt'\n    },\n    xTimeLeft: '%{time} verbleibend',\n    youCanOnlyUploadFileTypes: 'Sie k\u00F6nnen nur folgende Dateitypen hochladen: %{types}',\n    fileTypeNotAllowed: 'Der Dateityp der Datei ist nicht erlaubt',\n    youCanOnlyUploadX: {\n        '0': 'Sie k\u00F6nnen nur eine Datei hochladen',\n        '1': 'Sie k\u00F6nnen nur %{smart_count} Dateien hochladen'\n    },\n    youHaveToAtLeastSelectX: {\n        '0': 'Sie m\u00FCssen mindestens eine Datei ausw\u00E4hlen',\n        '1': 'Sie m\u00FCssen mindestens %{smart_count} Dateien ausw\u00E4hlen'\n    },\n    zoomIn: 'Vergr\u00F6\u00DFern',\n    zoomOut: 'Verkleinern'\n};\n\nif (typeof Uppy !== 'undefined') {\n    globalThis.Uppy.locales.de_DE = de_DE;\n}\n\nexport default de_DE;\n", "const en_US = {\n    pluralize(count) {\n        if (count === 1) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n};\nen_US.strings = {\n    addBulkFilesFailed: {\n        '0': 'Failed to add %{smart_count} file due to an internal error',\n        '1': 'Failed to add %{smart_count} files due to internal errors'\n    },\n    addingMoreFiles: 'Adding more files',\n    addMore: 'Add more',\n    addMoreFiles: 'Add more files',\n    allFilesFromFolderNamed: 'All files from folder %{name}',\n    allowAccessDescription: 'In order to take pictures or record video with your camera, please allow camera access for this site.',\n    allowAccessTitle: 'Please allow access to your camera',\n    allowAudioAccessDescription: 'In order to record audio, please allow microphone access for this site.',\n    allowAudioAccessTitle: 'Please allow access to your microphone',\n    aspectRatioLandscape: 'Crop landscape (16:9)',\n    aspectRatioPortrait: 'Crop portrait (9:16)',\n    aspectRatioSquare: 'Crop square',\n    authAborted: 'Authentication aborted',\n    authenticateWith: 'Connect to %{pluginName}',\n    authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',\n    back: 'Back',\n    browse: 'browse',\n    mediaPool: 'media pool',\n    browseFiles: 'browse files',\n    browseFolders: 'browse folders',\n    cancel: 'Cancel',\n    cancelUpload: 'Cancel upload',\n    chooseFiles: 'Choose files',\n    closeModal: 'Close Modal',\n    companionError: 'Connection with Companion failed',\n    companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',\n    complete: 'Complete',\n    compressedX: 'Saved %{size} by compressing images',\n    compressingImages: 'Compressing images...',\n    connectedToInternet: 'Connected to the Internet',\n    copyLink: 'Copy link',\n    copyLinkToClipboardFallback: 'Copy the URL below',\n    copyLinkToClipboardSuccess: 'Link copied to clipboard.',\n    creatingAssembly: 'Preparing upload...',\n    creatingAssemblyFailed: 'Transloadit: Could not create Assembly',\n    dashboardTitle: 'Uppy Dashboard',\n    dashboardWindowTitle: 'Uppy Dashboard Window (Press escape to close)',\n    dataUploadedOfTotal: '%{complete} of %{total}',\n    discardRecordedFile: 'Discard recorded file',\n    done: 'Done',\n    dropHereOr: 'Drop here or %{browse}',\n    dropHereOrMediaPool: 'Search files in your %{mediaPool}, drop files here or %{browse}',\n    dropHint: 'Drop your files here',\n    dropPasteBoth: 'Drop files here, %{browseFiles} or %{browseFolders}',\n    dropPasteFiles: 'Drop files here or %{browseFiles}',\n    dropPasteFolders: 'Drop files here or %{browseFolders}',\n    dropPasteImportBoth: 'Drop files here, %{browseFiles}, %{browseFolders} or import from:',\n    dropPasteImportFiles: 'Drop files here, %{browseFiles} or import from:',\n    dropPasteImportFolders: 'Drop files here, %{browseFolders} or import from:',\n    editFile: 'Edit file',\n    editFileWithFilename: 'Edit file %{file}',\n    editing: 'Editing %{file}',\n    emptyFolderAdded: 'No files were added from empty folder',\n    encoding: 'Encoding...',\n    enterCorrectUrl: 'Incorrect URL: Please make sure you are entering a direct link to a file',\n    enterTextToSearch: 'Enter text to search for images',\n    enterUrlToImport: 'Enter URL to import a file',\n    exceedsSize: 'This file exceeds maximum allowed size',\n    failedToFetch: 'Companion failed to fetch this URL, please make sure it\u2019s correct',\n    failedToUpload: 'Failed to upload %{file}',\n    filesUploadedOfTotal: {\n        '0': '%{complete} of %{smart_count} file uploaded',\n        '1': '%{complete} of %{smart_count} files uploaded'\n    },\n    filter: 'Filter',\n    finishEditingFile: 'Finish editing file',\n    flipHorizontal: 'Flip horizontal',\n    folderAdded: {\n        '0': 'Added %{smart_count} file from %{folder}',\n        '1': 'Added %{smart_count} files from %{folder}'\n    },\n    folderAlreadyAdded: 'The folder \"%{folder}\" was already added',\n    generatingThumbnails: 'Generating thumbnails...',\n    import: 'Import',\n    importFiles: 'Import files from:',\n    importFrom: 'Import from %{name}',\n    inferiorSize: 'This file is smaller than the allowed size of %{size}',\n    loading: 'Loading...',\n    logOut: 'Log out',\n    micDisabled: 'Microphone access denied by user',\n    missingRequiredMetaField: 'Missing required meta fields',\n    missingRequiredMetaFieldOnFile: 'Missing required meta fields in %{fileName}',\n    missingRequiredMetaFields: {\n        '0': 'Missing required meta field: %{fields}.',\n        '1': 'Missing required meta fields: %{fields}.'\n    },\n    myDevice: 'My Device',\n    noAudioDescription: 'In order to record audio, please connect a microphone or another audio input device',\n    noAudioTitle: 'Microphone Not Available',\n    noCameraDescription: 'In order to take pictures or record video, please connect a camera device',\n    noCameraTitle: 'Camera Not Available',\n    noDuplicates: \"Cannot add the duplicate file '%{fileName}', it already exists\",\n    noFilesFound: 'You have no files or folders here',\n    noInternetConnection: 'No Internet connection',\n    noMoreFilesAllowed: 'Cannot add more files',\n    openFolderNamed: 'Open folder %{name}',\n    pause: 'Pause',\n    paused: 'Paused',\n    pauseUpload: 'Pause upload',\n    pluginNameAudio: 'Audio',\n    pluginNameBox: 'Box',\n    pluginNameCamera: 'Camera',\n    pluginNameDropbox: 'Dropbox',\n    pluginNameFacebook: 'Facebook',\n    pluginNameGoogleDrive: 'Google Drive',\n    pluginNameInstagram: 'Instagram',\n    pluginNameOneDrive: 'OneDrive',\n    pluginNameZoom: 'Zoom',\n    poweredBy: 'Powered by %{uppy}',\n    processingXFiles: {\n        '0': 'Processing %{smart_count} file',\n        '1': 'Processing %{smart_count} files'\n    },\n    recording: 'Recording',\n    recordingLength: 'Recording length %{recording_length}',\n    recordingStoppedMaxSize: 'Recording stopped because the file size is about to exceed the limit',\n    recordVideoBtn: 'Record Video',\n    recoveredAllFiles: 'We restored all files. You can now resume the upload.',\n    recoveredXFiles: {\n        '0': 'We could not fully recover 1 file. Please re-select it and resume the upload.',\n        '1': 'We could not fully recover %{smart_count} files. Please re-select them and resume the upload.'\n    },\n    removeFile: 'Remove file',\n    reSelect: 'Re-select',\n    resetFilter: 'Reset filter',\n    resume: 'Resume',\n    resumeUpload: 'Resume upload',\n    retry: 'Retry',\n    retryUpload: 'Retry upload',\n    revert: 'Revert',\n    rotate: 'Rotate',\n    save: 'Save',\n    saveChanges: 'Save changes',\n    search: 'Search',\n    searchImages: 'Search for images',\n    selectX: {\n        '0': 'Select %{smart_count}',\n        '1': 'Select %{smart_count}'\n    },\n    sessionRestored: 'Session restored',\n    showErrorDetails: 'Show error details',\n    signInWithGoogle: 'Sign in with Google',\n    smile: 'Smile!',\n    startAudioRecording: 'Begin audio recording',\n    startCapturing: 'Begin screen capturing',\n    startRecording: 'Begin video recording',\n    stopAudioRecording: 'Stop audio recording',\n    stopCapturing: 'Stop screen capturing',\n    stopRecording: 'Stop video recording',\n    streamActive: 'Stream active',\n    streamPassive: 'Stream passive',\n    submitRecordedFile: 'Submit recorded file',\n    takePicture: 'Take a picture',\n    takePictureBtn: 'Take Picture',\n    timedOut: 'Upload stalled for %{seconds} seconds, aborting.',\n    upload: 'Upload',\n    uploadComplete: 'Upload complete',\n    uploadFailed: 'Upload failed',\n    uploading: 'Uploading',\n    uploadingXFiles: {\n        '0': 'Uploading %{smart_count} file',\n        '1': 'Uploading %{smart_count} files'\n    },\n    uploadPaused: 'Upload paused',\n    uploadXFiles: {\n        '0': 'Upload %{smart_count} file',\n        '1': 'Upload %{smart_count} files'\n    },\n    uploadXNewFiles: {\n        '0': 'Upload +%{smart_count} file',\n        '1': 'Upload +%{smart_count} files'\n    },\n    xFilesSelected: {\n        '0': '%{smart_count} file selected',\n        '1': '%{smart_count} files selected'\n    },\n    xMoreFilesAdded: {\n        '0': '%{smart_count} more file added',\n        '1': '%{smart_count} more files added'\n    },\n    xTimeLeft: '%{time} left',\n    youCanOnlyUploadFileTypes: 'You can only upload: %{types}',\n    fileTypeNotAllowed: 'The file type of the file is not allowed',\n    youCanOnlyUploadX: {\n        '0': 'You can only upload %{smart_count} file',\n        '1': 'You can only upload %{smart_count} files'\n    },\n    youHaveToAtLeastSelectX: {\n        '0': 'You have to select at least %{smart_count} file',\n        '1': 'You have to select at least %{smart_count} files'\n    },\n    zoomIn: 'Zoom in',\n    zoomOut: 'Zoom out'\n};\n\nif (typeof Uppy !== 'undefined') {\n    globalThis.Uppy.locales.en_US = en_US;\n}\n\nexport default en_US;\n", "const es_ES = {\n    pluralize(count) {\n        if (count === 1) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n};\nes_ES.strings = {\n    addBulkFilesFailed: {\n      '0': 'No se pudo agregar %{smart_count} archivo debido a un error interno',\n      '1': 'No se pudieron agregar %{smart_count} archivos debido a errores internos',\n    },\n    addedNumFiles: 'Se agreg\u00F3 %{numFiles} archivo(s)',\n    addingMoreFiles: 'Agregando m\u00E1s archivos',\n    additionalRestrictionsFailed: 'No se cumplieron %{count} restricciones adicionales',\n    addMore: 'Agregar m\u00E1s',\n    addMoreFiles: 'Agregar m\u00E1s archivos',\n    allFilesFromFolderNamed: 'Todos los archivos de la carpeta %{name}',\n    allowAccessDescription: 'Para tomar fotos o grabar videos con tu c\u00E1mara, por favor permite el acceso a la c\u00E1mara para este sitio.',\n    allowAccessTitle: 'Por favor, permite el acceso a tu c\u00E1mara',\n    allowAudioAccessDescription: 'Para grabar audio, por favor permite el acceso al micr\u00F3fono para este sitio.',\n    allowAudioAccessTitle: 'Por favor, permite el acceso a tu micr\u00F3fono',\n    aspectRatioLandscape: 'Recortar horizontal (16:9)',\n    aspectRatioPortrait: 'Recortar vertical (9:16)',\n    aspectRatioSquare: 'Recortar cuadrado',\n    authAborted: 'Autenticaci\u00F3n cancelada',\n    authenticateWith: 'Conectar con %{pluginName}',\n    authenticateWithTitle: 'Por favor, autent\u00EDcate con %{pluginName} para seleccionar archivos',\n    back: 'Atr\u00E1s',\n    browse: 'Navegar',\n    browseFiles: 'Navegar por archivos',\n    browseFolders: 'Navegar por carpetas',\n    cancel: 'Cancelar',\n    cancelUpload: 'Cancelar subida',\n    chooseFiles: 'Seleccionar archivos',\n    closeModal: 'Cerrar ventana',\n    companionError: 'Error en la conexi\u00F3n con Companion',\n    companionUnauthorizeHint:\n      'Para desautorizar tu cuenta de %{provider}, por favor ve a %{url}',\n    complete: 'Completado',\n    compressedX: 'Se ahorr\u00F3 %{size} comprimiendo im\u00E1genes',\n    compressingImages: 'Comprimiendo im\u00E1genes...',\n    connectedToInternet: 'Conectado a Internet',\n    copyLink: 'Copiar enlace',\n    copyLinkToClipboardFallback: 'Copia la siguiente URL',\n    copyLinkToClipboardSuccess: 'Enlace copiado al portapapeles',\n    creatingAssembly: 'Preparando subida...',\n    creatingAssemblyFailed: 'No se pudo crear un Assembly',\n    dashboardTitle: 'Cargador de archivos',\n    dashboardWindowTitle: 'Ventana para cargar archivos (Presiona escape para cerrar)',\n    dataUploadedOfTotal: '%{complete} de %{total}',\n    discardRecordedFile: 'Descartar archivo grabado',\n    done: 'Hecho',\n    dropHereOr: 'Suelta archivos aqu\u00ED o %{browse}',\n    dropHereOrMediaPool: 'Busca archivos en tu %{mediaPool}, suelta archivos aqu\u00ED o %{browse}',\n    dropHint: 'Suelta tus archivos aqu\u00ED',\n    dropPasteBoth: 'Suelta archivos aqu\u00ED, %{browseFiles} o %{browseFolders}',\n    dropPasteFiles: 'Suelta archivos aqu\u00ED o %{browseFiles}',\n    dropPasteFolders: 'Suelta archivos aqu\u00ED o %{browseFolders}',\n    dropPasteImportBoth: 'Suelta archivos aqu\u00ED, %{browseFiles}, %{browseFolders} o importar desde:',\n    dropPasteImportFiles: 'Suelta archivos aqu\u00ED, %{browseFiles} o importar desde:',\n    dropPasteImportFolders: 'Suelta archivos aqu\u00ED, %{browseFolders} o importar desde:',\n    editFile: 'Editar archivo',\n    editImage: 'Editar imagen',\n    editFileWithFilename: 'Editar archivo %{file}',\n    editing: 'Editando %{file}',\n    emptyFolderAdded: 'No se agregaron archivos desde la carpeta vac\u00EDa',\n    encoding: 'Codificando...',\n    enterCorrectUrl: 'URL incorrecta: Por favor, aseg\u00FArate de ingresar un enlace directo a un archivo',\n    enterTextToSearch: 'Ingresa texto para buscar im\u00E1genes',\n    enterUrlToImport: 'Ingresa la URL para importar un archivo',\n    error: 'Error',\n    exceedsSize: '%{file} excede el tama\u00F1o m\u00E1ximo permitido de %{size}',\n    failedToFetch: 'Companion no pudo recuperar esta URL, por favor aseg\u00FArate de que sea correcta',\n    failedToUpload: 'No se pudo subir %{file}',\n    fileSource: 'Fuente de archivo: %{name}',\n    filesUploadedOfTotal: {\n      '0': '%{complete} de %{smart_count} archivo subido',\n      '1': '%{complete} de %{smart_count} archivos subidos',\n    },\n    filter: 'Filtrar',\n    finishEditingFile: 'Terminar edici\u00F3n de archivo',\n    flipHorizontal: 'Voltear horizontalmente',\n    folderAdded: {\n      '0': 'Se agreg\u00F3 %{smart_count} archivo desde %{folder}',\n      '1': 'Se agregaron %{smart_count} archivos desde %{folder}',\n    },\n    folderAlreadyAdded: 'La carpeta \"%{folder}\" ya fue agregada',\n    generatingThumbnails: 'Generando miniaturas...',\n    import: 'Importar',\n    importFiles: 'Importar archivos desde:',\n    importFrom: 'Importar desde %{name}',\n    inferiorSize:\n      'Este archivo es m\u00E1s peque\u00F1o que el tama\u00F1o permitido de %{size}',\n    loading: 'Cargando...',\n    logOut: 'Cerrar sesi\u00F3n',\n    mediaPool: 'Conjunto de medios',\n    micDisabled: 'El acceso al micr\u00F3fono fue denegado por el usuario',\n    missingRequiredMetaField: 'Faltan campos de metadatos obligatorios',\n    missingRequiredMetaFieldOnFile: 'Faltan campos de metadatos obligatorios en %{fileName}',\n    missingRequiredMetaFields: {\n      '0': 'Falta el campo de metadatos obligatorio: %{fields}.',\n      '1': 'Faltan los campos de metadatos obligatorios: %{fields}.',\n    },\n    myDevice: 'Mi dispositivo',\n    noAudioDescription: 'Para grabar audio, por favor conecta un micr\u00F3fono u otro dispositivo de entrada de audio',\n    noAudioTitle: 'Micr\u00F3fono no disponible',\n    noCameraDescription: 'Para tomar fotos o grabar video, por favor conecta un dispositivo de c\u00E1mara',\n    noCameraTitle: 'C\u00E1mara no disponible',\n    noDuplicates: \"No se puede agregar el archivo duplicado '%{fileName}', ya existe\",\n    noFilesFound: 'No tienes archivos o carpetas aqu\u00ED',\n    noInternetConnection: 'Sin conexi\u00F3n a Internet',\n    noMoreFilesAllowed: 'No se pueden agregar m\u00E1s archivos',\n    noSearchResults: 'Lamentablemente, no hay resultados para esta b\u00FAsqueda',\n    openFolderNamed: 'Abrir carpeta %{name}',\n    pause: 'Pausar',\n    paused: 'En pausa',\n    pauseUpload: 'Pausar subida',\n    pluginNameAudio: 'Audio',\n    pluginNameBox: 'Box',\n    pluginNameCamera: 'C\u00E1mara',\n    pluginNameDropbox: 'Dropbox',\n    pluginNameFacebook: 'Facebook',\n    pluginNameGoogleDrive: 'Google Drive',\n    pluginNameInstagram: 'Instagram',\n    pluginNameOneDrive: 'OneDrive',\n    pluginNameZoom: 'Zoom',\n    poweredBy: 'Desarrollado por %{uppy}',\n    processingXFiles: {\n      '0': 'Procesando %{smart_count} archivo',\n      '1': 'Procesando %{smart_count} archivos',\n    },\n    recording: 'Grabando',\n    recordingLength: 'Duraci\u00F3n de la grabaci\u00F3n %{recording_length}',\n    recordingStoppedMaxSize: 'La grabaci\u00F3n se detuvo porque el tama\u00F1o del archivo est\u00E1 a punto de exceder el l\u00EDmite',\n    recordVideoBtn: 'Grabar video',\n    recoveredAllFiles: 'Se restauraron todos los archivos. Ahora puedes reanudar la subida.',\n    recoveredXFiles: {\n      '0': 'No pudimos recuperar completamente 1 archivo. Por favor, vuelve a seleccionarlo y reanuda la subida.',\n      '1': 'No pudimos recuperar completamente %{smart_count} archivos. Por favor, vuelve a seleccionarlos y reanuda la subida.',\n    },\n    removeFile: 'Eliminar archivo',\n    reSelect: 'Volver a seleccionar',\n    resetFilter: 'Restablecer filtro',\n    resetSearch: 'Restablecer b\u00FAsqueda',\n    resume: 'Reanudar',\n    resumeUpload: 'Reanudar subida',\n    retry: 'Reintentar',\n    retryUpload: 'Reintentar subida',\n    revert: 'Revertir',\n    rotate: 'Rotar',\n    save: 'Guardar',\n    saveChanges: 'Guardar cambios',\n    search: 'Buscar',\n    searchImages: 'Buscar im\u00E1genes',\n    selectX: {\n      '0': 'Seleccionar %{smart_count}',\n      '1': 'Seleccionar %{smart_count}',\n    },\n    sessionRestored: 'Sesi\u00F3n restaurada',\n    showErrorDetails: 'Mostrar detalles del error',\n    signInWithGoogle: 'Iniciar sesi\u00F3n con Google',\n    smile: '\u00A1Sonr\u00EDe!',\n    startAudioRecording: 'Iniciar grabaci\u00F3n de audio',\n    startCapturing: 'Iniciar captura de pantalla',\n    startRecording: 'Iniciar grabaci\u00F3n de video',\n    stopAudioRecording: 'Detener grabaci\u00F3n de audio',\n    stopCapturing: 'Detener captura de pantalla',\n    stopRecording: 'Detener grabaci\u00F3n de video',\n    streamActive: 'Transmisi\u00F3n activa',\n    streamPassive: 'Transmisi\u00F3n pasiva',\n    submitRecordedFile: 'Enviar archivo grabado',\n    takePicture: 'Tomar una foto',\n    takePictureBtn: 'Tomar foto',\n    timedOut: 'La subida se detuvo durante %{seconds} segundos, abortando.',\n    upload: 'Subir',\n    uploadComplete: 'Subida completa',\n    uploadFailed: 'Error en la subida',\n    uploading: 'Subiendo',\n    uploadingXFiles: {\n      '0': 'Subiendo %{smart_count} archivo',\n      '1': 'Subiendo %{smart_count} archivos',\n    },\n    uploadPaused: 'Subida en pausa',\n    uploadStalled: 'La subida no ha realizado ning\u00FAn progreso durante %{seconds} segundos. Puedes intentarlo de nuevo.',\n    uploadXFiles: {\n      '0': 'Subir %{smart_count} archivo',\n      '1': 'Subir %{smart_count} archivos',\n    },\n    uploadXNewFiles: {\n      '0': 'Subir +%{smart_count} archivo',\n      '1': 'Subir +%{smart_count} archivos',\n    },\n    xFilesSelected: {\n      '0': '%{smart_count} archivo seleccionado',\n      '1': '%{smart_count} archivos seleccionados',\n    },\n    xMoreFilesAdded: {\n      '0': 'Se agreg\u00F3 %{smart_count} archivo m\u00E1s',\n      '1': 'Se agregaron %{smart_count} archivos m\u00E1s',\n    },\n    xTimeLeft: '%{time} restante',\n    youCanOnlyUploadFileTypes: 'Solo puedes subir: %{types}',\n    youCanOnlyUploadX: {\n      '0': 'Solo puedes subir %{smart_count} archivo',\n      '1': 'Solo puedes subir %{smart_count} archivos',\n    },\n    youHaveToAtLeastSelectX: {\n      '0': 'Debes seleccionar al menos %{smart_count} archivo',\n      '1': 'Debes seleccionar al menos %{smart_count} archivos',\n    },\n    zoomIn: 'Acercar',\n    zoomOut: 'Alejar',\n    selectFileNamed: 'Seleccione archivo %{name}',\n    unselectFileNamed: 'Deseleccionar archivo %{name}',\n}\n\nif (typeof Uppy !== 'undefined') {\n    globalThis.Uppy.locales.es_ES = es_ES\n}\n\nexport default es_ES\n", "const fr_FR = {\n    pluralize(count) {\n        if (count === 1) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n};\nfr_FR.strings = {\n    addBulkFilesFailed: {\n      '0': 'L\u2019ajout de %{smart_count} fichier a \u00E9chou\u00E9',\n      '1': 'L\u2019ajout de %{smart_count} fichiers a \u00E9chou\u00E9',\n    },\n    addedNumFiles: '%{numFiles} fichier(s) ajout\u00E9(s)',\n    addingMoreFiles: 'Ajout de fichiers',\n    addMore: 'Ajouter d\u2019autres',\n    addMoreFiles: 'Ajouter d\u2019autres fichiers',\n    allFilesFromFolderNamed: 'Tous les fichiers du dossier %{name}',\n    allowAccessDescription: 'Pour prendre des photos ou enregistrer une vid\u00E9o, veuillez autoriser l\u2019acc\u00E8s \u00E0 votre cam\u00E9ra pour ce site.',\n    allowAccessTitle: 'Veuillez autoriser l\u2019acc\u00E8s \u00E0 votre cam\u00E9ra',\n    authAborted: 'Authentification interrompue',\n    authenticateWith: 'Se connecter \u00E0 %{pluginName}',\n    authenticateWithTitle: 'Veuillez vous authentifier avec %{pluginName} pour s\u00E9lectionner les fichiers',\n    back: 'Retour',\n    browse: 'naviguer',\n    browseFiles: 'naviguer',\n    cancel: 'Annuler',\n    cancelUpload: 'Annuler le t\u00E9l\u00E9versement',\n    chooseFiles: 'Choisir des fichiers',\n    closeModal: 'Fermer la fen\u00EAtre',\n    companionError: 'Connexion \u00E0 Companion a \u00E9chou\u00E9',\n    companionUnauthorizeHint: 'Pour vous d\u00E9connecter de votre compte %{provider}, veuillez aller \u00E0 %{url}',\n    complete: 'Termin\u00E9',\n    compressedX: '%{size} \u00E9conomis\u00E9(s) par la compression',\n    compressingImages: 'Compression des images\u2026',\n    connectedToInternet: 'Connect\u00E9 \u00E0 Internet',\n    copyLink: 'Copier le lien',\n    copyLinkToClipboardFallback: 'Copier le lien ci-dessous',\n    copyLinkToClipboardSuccess: 'Lien copi\u00E9',\n    creatingAssembly: 'Pr\u00E9paration du t\u00E9l\u00E9versement\u2026',\n    creatingAssemblyFailed: 'Transloadit: Impossible de cr\u00E9er Assembly',\n    dashboardTitle: 'T\u00E9l\u00E9verseur de fichiers',\n    dashboardWindowTitle: 'Fen\u00EAtre de t\u00E9l\u00E9versement de fichiers (Appuyez sur \u00C9chap pour fermer)',\n    dataUploadedOfTotal: '%{complete} sur %{total}',\n    done: 'Termin\u00E9',\n    dropHereOr: 'Les fichiers peuvent \u00EAtre ajout\u00E9s via \u00AB Drag & Drop \u00BB ou via le s\u00E9lecteur de fichiers: %{browse}',\n    dropHereOrMediaPool: 'Recherche de fichiers dans votre %{mediaPool}, d\u00E9poser les fichiers ici, coller ou %{browse}',\n    dropHint: 'D\u00E9posez vos fichiers ici',\n    dropPasteBoth: 'D\u00E9poser les fichiers ici, coller ou %{browse}',\n    dropPasteFiles: 'D\u00E9poser les fichiers ici, coller ou %{browse}',\n    dropPasteFolders: 'D\u00E9poser les fichiers ici, coller ou %{browse}',\n    dropPasteImportBoth: 'D\u00E9poser les fichiers ici, coller, %{browse} ou importer de',\n    dropPasteImportFiles: 'D\u00E9poser les fichiers ici, coller, %{browse} ou importer de',\n    dropPasteImportFolders: 'D\u00E9poser les fichiers ici, coller, %{browse} ou importer de',\n    editFile: 'Modifier le fichier',\n    editImage: 'Modifier l\u2019image',\n    editFileWithFilename: 'Modifier le fichier %{file}',\n    editing: 'Modification en cours de %{file}',\n    emptyFolderAdded: 'Aucun fichier n\u2019a \u00E9t\u00E9 ajout\u00E9 depuis un dossier vide',\n    encoding: 'Traitement\u2026',\n    enterCorrectUrl: 'Lien incorrect: Assurez-vous que vous entrez un lien direct vers le fichier',\n    enterUrlToImport: 'Entrez le lien pour importer un fichier',\n    exceedsSize: 'Ce fichier d\u00E9passe la taille maximale autoris\u00E9e de %{size}',\n    failedToFetch: 'Companion a \u00E9chou\u00E9 \u00E0 r\u00E9cup\u00E9rer ce lien, assurez-vous qu\u2019il est correct',\n    failedToUpload: 'Le t\u00E9l\u00E9versement de %{file} a \u00E9chou\u00E9',\n    fileSource: 'Fichier source: %{name}',\n    filesUploadedOfTotal: {\n      '0': '%{complete} sur %{smart_count} fichier t\u00E9l\u00E9vers\u00E9',\n      '1': '%{complete} sur %{smart_count} fichiers t\u00E9l\u00E9vers\u00E9s',\n    },\n    filter: 'Filtrer',\n    finishEditingFile: 'Terminer l\u2019\u00E9dition du fichier',\n    folderAdded: {\n      '0': '%{smart_count} fichier ajout\u00E9 de %{folder}',\n      '1': '%{smart_count} fichiers ajout\u00E9s de %{folder}',\n    },\n    generatingThumbnails: 'G\u00E9n\u00E9ration des vignettes\u2026',\n    import: 'Importer',\n    importFrom: 'Importer de %{name}',\n    loading: 'Chargement\u2026',\n    logOut: 'D\u00E9connexion',\n    mediaPool: 'Pool de m\u00E9dias',\n    micDisabled: 'Acc\u00E8s au micro refus\u00E9 par l\u2019utilisateur',\n    myDevice: 'Mon Appareil',\n    noDuplicates: 'Impossible d\u2019ajouter le fichier \"%{fileName}\", il existe d\u00E9j\u00E0',\n    noFilesFound: 'Vous n\u2019avez aucun fichier ou dossier ici',\n    noInternetConnection: 'Pas de connexion \u00E0 Internet',\n    noMoreFilesAllowed: 'Impossible d\u2019ajouter de nouveaux fichiers: en cours de chargement ',\n    openFolderNamed: 'Ouvrir %{name}',\n    pause: 'Pause',\n    pauseUpload: 'Mettre en pause le t\u00E9l\u00E9versement',\n    paused: 'En pause',\n    poweredBy: 'Propuls\u00E9 par %{uppy}',\n    processingXFiles: {\n      '0': 'Traitement de %{smart_count} fichier',\n      '1': 'Traitement de %{smart_count} fichiers',\n    },\n    recording: 'Enregistrement',\n    recordingLength: 'Dur\u00E9e d\u2019enregistrement %{recording_length}',\n    recordingStoppedMaxSize: 'L\u2019enregistrement s\u2019est arr\u00E9t\u00E9 car la taille du fichier d\u00E9passe la limite',\n    removeFile: 'Effacer le fichier %{file}',\n    resetFilter: 'R\u00E9initialiser filtre',\n    resume: 'Reprendre',\n    resumeUpload: 'Reprendre le t\u00E9l\u00E9versement',\n    retry: 'R\u00E9essayer',\n    retryUpload: 'R\u00E9essayer le t\u00E9l\u00E9versement',\n    save: 'Sauvegarder',\n    saveChanges: 'Sauvegarder les modifications',\n    selectFileNamed: 'S\u00E9lectionner le fichier %{name}',\n    selectX: {\n      '0': 'S\u00E9lectionner %{smart_count}',\n      '1': 'S\u00E9lectionner %{smart_count}',\n    },\n    smile: 'Souriez !',\n    startRecording: 'Commencer l\u2019enregistrement vid\u00E9o',\n    stopRecording: 'Arr\u00EAter l\u2019enregistrement vid\u00E9o',\n    streamActive: 'Stream actif',\n    streamPassive: 'Stream passif',\n    submitRecordedFile: 'Envoyer la vid\u00E9o enregistr\u00E9e',\n    takePicture: 'Prendre une photo',\n    timedOut: 'T\u00E9l\u00E9versement bloqu\u00E9 durant %{seconds} secondes, annulation.',\n    unselectFileNamed: 'D\u00E9s\u00E9lectionner le fichier %{name}',\n    upload: 'T\u00E9l\u00E9verser',\n    uploadComplete: 'T\u00E9l\u00E9versement termin\u00E9',\n    uploadFailed: 'Le t\u00E9l\u00E9versement a \u00E9chou\u00E9',\n    uploadPaused: 'T\u00E9l\u00E9versement mis en pause',\n    uploadStalled: 'T\u00E9l\u00E9versement bloqu\u00E9 depuis %{seconds} secondes. Il est peut-\u00EAtre n\u00E9cessaire de recommencer l\u2019op\u00E9ration.',\n    uploadXFiles: {\n      '0': 'T\u00E9l\u00E9verser %{smart_count} fichier',\n      '1': 'T\u00E9l\u00E9verser %{smart_count} fichiers',\n    },\n    uploadXNewFiles: {\n      '0': 'T\u00E9l\u00E9verser +%{smart_count} fichier',\n      '1': 'T\u00E9l\u00E9verser +%{smart_count} fichiers',\n    },\n    uploading: 'T\u00E9l\u00E9versement en cours',\n    uploadingXFiles: {\n      '0': 'T\u00E9l\u00E9versement de %{smart_count} fichier',\n      '1': 'T\u00E9l\u00E9versement de %{smart_count} fichiers',\n    },\n    xFilesSelected: {\n      '0': '%{smart_count} fichier s\u00E9lectionn\u00E9',\n      '1': '%{smart_count} fichiers s\u00E9lectionn\u00E9s',\n    },\n    xMoreFilesAdded: {\n      '0': '%{smart_count} autre fichier ajout\u00E9',\n      '1': '%{smart_count} autres fichiers ajout\u00E9s',\n    },\n    xTimeLeft: '%{time} restantes',\n    youCanOnlyUploadFileTypes: 'Vous pouvez seulement t\u00E9l\u00E9verser: %{types}',\n    youCanOnlyUploadX: {\n      '0': 'Vous pouvez seulement t\u00E9l\u00E9verser %{smart_count} fichier',\n      '1': 'Vous pouvez seulement t\u00E9l\u00E9verser %{smart_count} fichiers',\n    },\n    youHaveToAtLeastSelectX: {\n      '0': 'Vous devez s\u00E9lectionner au moins %{smart_count} fichier',\n      '1': 'Vous devez s\u00E9lectionner au moins %{smart_count} fichiers',\n    },\n}\n\nif (typeof Uppy !== 'undefined') {\n  globalThis.Uppy.locales.fr_FR = fr_FR\n}\n\nexport default fr_FR\n", "/**\n * *********************************************************************************************************************\n * ************ WARNING: WHEN MAKING CHANGES HERE - app/helpers/flash_notices_helper.rb:46 (flash_notice_tag) **********\n * *********************************************************************************************************************\n */\nexport const toast = (message, type) => {\n    const options = {\n        typeClasses: 'text-body bg-light',\n        buttonClasses: 'btn-close-white',\n        timeout: 5000,\n        autohide: 'true',\n        role: 'status'\n    }\n\n    if (type === 'notice') {\n        options.typeClasses = 'text-body bg-info'\n        options.buttonClasses = 'btn-close-body'\n    } else if (type === 'success') {\n        options.typeClasses = 'text-white bg-success'\n    } else if (type === 'alert') {\n        options.typeClasses = 'text-body bg-warning'\n        options.buttonClasses = 'btn-close-body'\n        options.timeout = 10000\n    } else if (type === 'error') {\n        options.typeClasses = 'text-white bg-danger'\n        options.autohide = 'false'\n        options.role = 'alert'\n    }\n\n    const flashContainer = document.getElementById('flashNotices')\n    const accessibility = flashContainer?.dataset?.userAccessibility === 'true'\n    const prefixes = flashContainer?.dataset?.flashPrefixes ?\n                     JSON.parse(flashContainer.dataset.flashPrefixes) : {}\n\n    let displayMessage = message\n    if (accessibility && prefixes[type]) {\n        displayMessage = `<strong>${prefixes[type]}</strong>${message}`\n    }\n\n    flashContainer.insertAdjacentHTML(\n        'beforeend',\n        `<div class=\"toast align-items-center ${options.typeClasses} border-0\"\n              role=\"${options.role}\"\n              aria-atomic=\"true\"\n              data-controller=\"toast\"\n              data-bs-delay=\"${options.timeout}\"\n              data-bs-autohide=\"${options.autohide}\">\n            <div class=\"d-flex\">\n                <div class=\"toast-body\">${displayMessage}</div>\n                <button name=\"button\"\n                        type=\"button\"\n                        class=\"btn-close ${options.buttonClasses} me-2 m-auto\"\n                        aria-label=\"Schlie\u00DFen\"\n                        data-bs-dismiss=\"toast\"></button>\n            </div>\n        </div>`\n    )\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"display-with-button\"\nexport default class extends Controller {\n    static targets = ['displayDoms']\n\n    connect() {\n        document.body.style.overflow = \"\"\n        this._isOpen = false\n        this._scrollPos = 0\n    }\n\n    disconnect() {\n        document.body.style.overflow = \"\"\n    }\n\n    toggle_display() {\n        this._isOpen = !this._isOpen\n\n        const cardBody = document.querySelector(\"#aiChat .card-body\")\n\n        if (!this._isOpen && cardBody) {\n            if (cardBody) this._scrollPos = cardBody.scrollTop\n            this.displayDomsTargets.forEach(dom => dom.style.display = \"none\")\n        } else {\n            this.displayDomsTargets.forEach(dom => dom.style.display = \"\")\n            if (cardBody) requestAnimationFrame(() => {\n                requestAnimationFrame(() => cardBody.scrollTop = this._scrollPos)\n            })\n        }\n\n        this.displayDomsTargets.forEach(dom => dom.style.display = this._isOpen ? \"\" : \"none\")\n\n        if (window.innerWidth <= 1024)\n            document.body.style.overflow = this._isOpen ? \"hidden\" : \"\"\n\n        document.getElementById(\"chat-launcher\")\n            ?.classList.toggle(\"chat-launcher--active\")\n\n        document.getElementById(\"chat-mobile\")\n            ?.classList.toggle(\"chat-mobile--active\", this._isOpen && window.innerWidth <= 1024)\n\n\n    }\n\n\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"display-with-radio-button\"\nexport default class extends Controller {\n    static targets = ['display']\n\n    connect() {\n        //console.log(\"big brother\")\n    }\n\n    // true means: global settings apply and we destroy local setting\n    toggle_display(event) {\n        if (event?.target?.value === \"true\") {\n            this.displayTarget.classList.add(\"d-none\")\n        } else {\n            this.displayTarget.classList.remove(\"d-none\")\n        }\n    }\n}\n", "/**!\n * Sortable 1.15.7\n * @author\tRubaXa   <trash@rubaxa.org>\n * @author\towenm    <owen23355@gmail.com>\n * @license MIT\n */\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = _objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar version = \"1.15.7\";\n\nfunction userAgent(pattern) {\n  if (typeof window !== 'undefined' && window.navigator) {\n    return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n  }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n  capture: false,\n  passive: false\n};\nfunction on(el, event, fn) {\n  el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n  el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n  if (!selector) return;\n  selector[0] === '>' && (selector = selector.substring(1));\n  if (el) {\n    try {\n      if (el.matches) {\n        return el.matches(selector);\n      } else if (el.msMatchesSelector) {\n        return el.msMatchesSelector(selector);\n      } else if (el.webkitMatchesSelector) {\n        return el.webkitMatchesSelector(selector);\n      }\n    } catch (_) {\n      return false;\n    }\n  }\n  return false;\n}\nfunction getParentOrHost(el) {\n  return el.host && el !== document && el.host.nodeType && el.host !== el ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n  if (el) {\n    ctx = ctx || document;\n    do {\n      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n        return el;\n      }\n      if (el === ctx) break;\n      /* jshint boss:true */\n    } while (el = getParentOrHost(el));\n  }\n  return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n  if (el && name) {\n    if (el.classList) {\n      el.classList[state ? 'add' : 'remove'](name);\n    } else {\n      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n    }\n  }\n}\nfunction css(el, prop, val) {\n  var style = el && el.style;\n  if (style) {\n    if (val === void 0) {\n      if (document.defaultView && document.defaultView.getComputedStyle) {\n        val = document.defaultView.getComputedStyle(el, '');\n      } else if (el.currentStyle) {\n        val = el.currentStyle;\n      }\n      return prop === void 0 ? val : val[prop];\n    } else {\n      if (!(prop in style) && prop.indexOf('webkit') === -1) {\n        prop = '-webkit-' + prop;\n      }\n      style[prop] = val + (typeof val === 'string' ? '' : 'px');\n    }\n  }\n}\nfunction matrix(el, selfOnly) {\n  var appliedTransforms = '';\n  if (typeof el === 'string') {\n    appliedTransforms = el;\n  } else {\n    do {\n      var transform = css(el, 'transform');\n      if (transform && transform !== 'none') {\n        appliedTransforms = transform + ' ' + appliedTransforms;\n      }\n      /* jshint boss:true */\n    } while (!selfOnly && (el = el.parentNode));\n  }\n  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n  /*jshint -W056 */\n  return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n  if (ctx) {\n    var list = ctx.getElementsByTagName(tagName),\n      i = 0,\n      n = list.length;\n    if (iterator) {\n      for (; i < n; i++) {\n        iterator(list[i], i);\n      }\n    }\n    return list;\n  }\n  return [];\n}\nfunction getWindowScrollingElement() {\n  var scrollingElement = document.scrollingElement;\n  if (scrollingElement) {\n    return scrollingElement;\n  } else {\n    return document.documentElement;\n  }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\r\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\r\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\r\n * @param  {[HTMLElement]} container              The parent the element will be placed in\r\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n  if (!el.getBoundingClientRect && el !== window) return;\n  var elRect, top, left, bottom, right, height, width;\n  if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n    elRect = el.getBoundingClientRect();\n    top = elRect.top;\n    left = elRect.left;\n    bottom = elRect.bottom;\n    right = elRect.right;\n    height = elRect.height;\n    width = elRect.width;\n  } else {\n    top = 0;\n    left = 0;\n    bottom = window.innerHeight;\n    right = window.innerWidth;\n    height = window.innerHeight;\n    width = window.innerWidth;\n  }\n  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n    // Adjust for translate()\n    container = container || el.parentNode;\n\n    // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n    if (!IE11OrLess) {\n      do {\n        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n          var containerRect = container.getBoundingClientRect();\n\n          // Set relative to edges of padding box of container\n          top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n          left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n          bottom = top + elRect.height;\n          right = left + elRect.width;\n          break;\n        }\n        /* jshint boss:true */\n      } while (container = container.parentNode);\n    }\n  }\n  if (undoScale && el !== window) {\n    // Adjust for scale()\n    var elMatrix = matrix(container || el),\n      scaleX = elMatrix && elMatrix.a,\n      scaleY = elMatrix && elMatrix.d;\n    if (elMatrix) {\n      top /= scaleY;\n      left /= scaleX;\n      width /= scaleX;\n      height /= scaleY;\n      bottom = top + height;\n      right = left + width;\n    }\n  }\n  return {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\r\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n  var parent = getParentAutoScrollElement(el, true),\n    elSideVal = getRect(el)[elSide];\n\n  /* jshint boss:true */\n  while (parent) {\n    var parentSideVal = getRect(parent)[parentSide],\n      visible = void 0;\n    if (parentSide === 'top' || parentSide === 'left') {\n      visible = elSideVal >= parentSideVal;\n    } else {\n      visible = elSideVal <= parentSideVal;\n    }\n    if (!visible) return parent;\n    if (parent === getWindowScrollingElement()) break;\n    parent = getParentAutoScrollElement(parent, false);\n  }\n  return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param  {HTMLElement} el       The parent element\r\n * @param  {Number} childNum      The index of the child\r\n * @param  {Object} options       Parent Sortable's options\r\n * @return {HTMLElement}          The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n  var currentChild = 0,\n    i = 0,\n    children = el.children;\n  while (i < children.length) {\n    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n      if (currentChild === childNum) {\n        return children[i];\n      }\n      currentChild++;\n    }\n    i++;\n  }\n  return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param  {HTMLElement} el       Parent element\r\n * @param  {selector} selector    Any other elements that should be ignored\r\n * @return {HTMLElement}          The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n  var last = el.lastElementChild;\n  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n    last = last.previousElementSibling;\n  }\n  return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param  {HTMLElement} el\r\n * @param  {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n  var index = 0;\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n\n  /* jshint boss:true */\n  while (el = el.previousElementSibling) {\n    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n      index++;\n    }\n  }\n  return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param  {HTMLElement} el\r\n * @return {Array}             Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n  var offsetLeft = 0,\n    offsetTop = 0,\n    winScroller = getWindowScrollingElement();\n  if (el) {\n    do {\n      var elMatrix = matrix(el),\n        scaleX = elMatrix.a,\n        scaleY = elMatrix.d;\n      offsetLeft += el.scrollLeft * scaleX;\n      offsetTop += el.scrollTop * scaleY;\n    } while (el !== winScroller && (el = el.parentNode));\n  }\n  return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param  {Array} arr   Array that may or may not hold the object\r\n * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number}      The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n  for (var i in arr) {\n    if (!arr.hasOwnProperty(i)) continue;\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n    }\n  }\n  return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n  // skip to window\n  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n  var elem = el;\n  var gotSelf = false;\n  do {\n    // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n      var elemCSS = css(elem);\n      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n        if (gotSelf || includeSelf) return elem;\n        gotSelf = true;\n      }\n    }\n    /* jshint boss:true */\n  } while (elem = elem.parentNode);\n  return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n  if (dst && src) {\n    for (var key in src) {\n      if (src.hasOwnProperty(key)) {\n        dst[key] = src[key];\n      }\n    }\n  }\n  return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n  return function () {\n    if (!_throttleTimeout) {\n      var args = arguments,\n        _this = this;\n      if (args.length === 1) {\n        callback.call(_this, args[0]);\n      } else {\n        callback.apply(_this, args);\n      }\n      _throttleTimeout = setTimeout(function () {\n        _throttleTimeout = void 0;\n      }, ms);\n    }\n  };\n}\nfunction cancelThrottle() {\n  clearTimeout(_throttleTimeout);\n  _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n  el.scrollLeft += x;\n  el.scrollTop += y;\n}\nfunction clone(el) {\n  var Polymer = window.Polymer;\n  var $ = window.jQuery || window.Zepto;\n  if (Polymer && Polymer.dom) {\n    return Polymer.dom(el).cloneNode(true);\n  } else if ($) {\n    return $(el).clone(true)[0];\n  } else {\n    return el.cloneNode(true);\n  }\n}\nfunction setRect(el, rect) {\n  css(el, 'position', 'absolute');\n  css(el, 'top', rect.top);\n  css(el, 'left', rect.left);\n  css(el, 'width', rect.width);\n  css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n  css(el, 'position', '');\n  css(el, 'top', '');\n  css(el, 'left', '');\n  css(el, 'width', '');\n  css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n  var rect = {};\n  Array.from(container.children).forEach(function (child) {\n    var _rect$left, _rect$top, _rect$right, _rect$bottom;\n    if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n    var childRect = getRect(child);\n    rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n    rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n    rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n    rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n  });\n  rect.width = rect.right - rect.left;\n  rect.height = rect.bottom - rect.top;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n  var animationStates = [],\n    animationCallbackId;\n  return {\n    captureAnimationState: function captureAnimationState() {\n      animationStates = [];\n      if (!this.options.animation) return;\n      var children = [].slice.call(this.el.children);\n      children.forEach(function (child) {\n        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n        animationStates.push({\n          target: child,\n          rect: getRect(child)\n        });\n        var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n        // If animating: compensate for current animation\n        if (child.thisAnimationDuration) {\n          var childMatrix = matrix(child, true);\n          if (childMatrix) {\n            fromRect.top -= childMatrix.f;\n            fromRect.left -= childMatrix.e;\n          }\n        }\n        child.fromRect = fromRect;\n      });\n    },\n    addAnimationState: function addAnimationState(state) {\n      animationStates.push(state);\n    },\n    removeAnimationState: function removeAnimationState(target) {\n      animationStates.splice(indexOfObject(animationStates, {\n        target: target\n      }), 1);\n    },\n    animateAll: function animateAll(callback) {\n      var _this = this;\n      if (!this.options.animation) {\n        clearTimeout(animationCallbackId);\n        if (typeof callback === 'function') callback();\n        return;\n      }\n      var animating = false,\n        animationTime = 0;\n      animationStates.forEach(function (state) {\n        var time = 0,\n          target = state.target,\n          fromRect = target.fromRect,\n          toRect = getRect(target),\n          prevFromRect = target.prevFromRect,\n          prevToRect = target.prevToRect,\n          animatingRect = state.rect,\n          targetMatrix = matrix(target, true);\n        if (targetMatrix) {\n          // Compensate for current animation\n          toRect.top -= targetMatrix.f;\n          toRect.left -= targetMatrix.e;\n        }\n        target.toRect = toRect;\n        if (target.thisAnimationDuration) {\n          // Could also check if animatingRect is between fromRect and toRect\n          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n          // Make sure animatingRect is on line between toRect & fromRect\n          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n            // If returning to same place as started from animation and on same axis\n            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n          }\n        }\n\n        // if fromRect != toRect: animate\n        if (!isRectEqual(toRect, fromRect)) {\n          target.prevFromRect = fromRect;\n          target.prevToRect = toRect;\n          if (!time) {\n            time = _this.options.animation;\n          }\n          _this.animate(target, animatingRect, toRect, time);\n        }\n        if (time) {\n          animating = true;\n          animationTime = Math.max(animationTime, time);\n          clearTimeout(target.animationResetTimer);\n          target.animationResetTimer = setTimeout(function () {\n            target.animationTime = 0;\n            target.prevFromRect = null;\n            target.fromRect = null;\n            target.prevToRect = null;\n            target.thisAnimationDuration = null;\n          }, time);\n          target.thisAnimationDuration = time;\n        }\n      });\n      clearTimeout(animationCallbackId);\n      if (!animating) {\n        if (typeof callback === 'function') callback();\n      } else {\n        animationCallbackId = setTimeout(function () {\n          if (typeof callback === 'function') callback();\n        }, animationTime);\n      }\n      animationStates = [];\n    },\n    animate: function animate(target, currentRect, toRect, duration) {\n      if (duration) {\n        css(target, 'transition', '');\n        css(target, 'transform', '');\n        var elMatrix = matrix(this.el),\n          scaleX = elMatrix && elMatrix.a,\n          scaleY = elMatrix && elMatrix.d,\n          translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n          translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n        target.animatingX = !!translateX;\n        target.animatingY = !!translateY;\n        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n        this.forRepaintDummy = repaint(target); // repaint\n\n        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n        css(target, 'transform', 'translate3d(0,0,0)');\n        typeof target.animated === 'number' && clearTimeout(target.animated);\n        target.animated = setTimeout(function () {\n          css(target, 'transition', '');\n          css(target, 'transform', '');\n          target.animated = false;\n          target.animatingX = false;\n          target.animatingY = false;\n        }, duration);\n      }\n    }\n  };\n}\nfunction repaint(target) {\n  return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n  initializeByDefault: true\n};\nvar PluginManager = {\n  mount: function mount(plugin) {\n    // Set default static properties\n    for (var option in defaults) {\n      if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n        plugin[option] = defaults[option];\n      }\n    }\n    plugins.forEach(function (p) {\n      if (p.pluginName === plugin.pluginName) {\n        throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n      }\n    });\n    plugins.push(plugin);\n  },\n  pluginEvent: function pluginEvent(eventName, sortable, evt) {\n    var _this = this;\n    this.eventCanceled = false;\n    evt.cancel = function () {\n      _this.eventCanceled = true;\n    };\n    var eventNameGlobal = eventName + 'Global';\n    plugins.forEach(function (plugin) {\n      if (!sortable[plugin.pluginName]) return;\n      // Fire global events if it exists in this sortable\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n\n      // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n        sortable[plugin.pluginName][eventName](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n    });\n  },\n  initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n    plugins.forEach(function (plugin) {\n      var pluginName = plugin.pluginName;\n      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n      var initialized = new plugin(sortable, el, sortable.options);\n      initialized.sortable = sortable;\n      initialized.options = sortable.options;\n      sortable[pluginName] = initialized;\n\n      // Add default options from plugin\n      _extends(defaults, initialized.defaults);\n    });\n    for (var option in sortable.options) {\n      if (!sortable.options.hasOwnProperty(option)) continue;\n      var modified = this.modifyOption(sortable, option, sortable.options[option]);\n      if (typeof modified !== 'undefined') {\n        sortable.options[option] = modified;\n      }\n    }\n  },\n  getEventProperties: function getEventProperties(name, sortable) {\n    var eventProperties = {};\n    plugins.forEach(function (plugin) {\n      if (typeof plugin.eventProperties !== 'function') return;\n      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n    });\n    return eventProperties;\n  },\n  modifyOption: function modifyOption(sortable, name, value) {\n    var modifiedValue;\n    plugins.forEach(function (plugin) {\n      // Plugin must exist on the Sortable\n      if (!sortable[plugin.pluginName]) return;\n\n      // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n      }\n    });\n    return modifiedValue;\n  }\n};\n\nfunction dispatchEvent(_ref) {\n  var sortable = _ref.sortable,\n    rootEl = _ref.rootEl,\n    name = _ref.name,\n    targetEl = _ref.targetEl,\n    cloneEl = _ref.cloneEl,\n    toEl = _ref.toEl,\n    fromEl = _ref.fromEl,\n    oldIndex = _ref.oldIndex,\n    newIndex = _ref.newIndex,\n    oldDraggableIndex = _ref.oldDraggableIndex,\n    newDraggableIndex = _ref.newDraggableIndex,\n    originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    extraEventProperties = _ref.extraEventProperties;\n  sortable = sortable || rootEl && rootEl[expando];\n  if (!sortable) return;\n  var evt,\n    options = sortable.options,\n    onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent(name, true, true);\n  }\n  evt.to = toEl || rootEl;\n  evt.from = fromEl || rootEl;\n  evt.item = targetEl || rootEl;\n  evt.clone = cloneEl;\n  evt.oldIndex = oldIndex;\n  evt.newIndex = newIndex;\n  evt.oldDraggableIndex = oldDraggableIndex;\n  evt.newDraggableIndex = newDraggableIndex;\n  evt.originalEvent = originalEvent;\n  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n  var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n  for (var option in allEventProperties) {\n    evt[option] = allEventProperties[option];\n  }\n  if (rootEl) {\n    rootEl.dispatchEvent(evt);\n  }\n  if (options[onName]) {\n    options[onName].call(sortable, evt);\n  }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n    originalEvent = _ref.evt,\n    data = _objectWithoutProperties(_ref, _excluded);\n  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n    dragEl: dragEl,\n    parentEl: parentEl,\n    ghostEl: ghostEl,\n    rootEl: rootEl,\n    nextEl: nextEl,\n    lastDownEl: lastDownEl,\n    cloneEl: cloneEl,\n    cloneHidden: cloneHidden,\n    dragStarted: moved,\n    putSortable: putSortable,\n    activeSortable: Sortable.active,\n    originalEvent: originalEvent,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex,\n    hideGhostForTarget: _hideGhostForTarget,\n    unhideGhostForTarget: _unhideGhostForTarget,\n    cloneNowHidden: function cloneNowHidden() {\n      cloneHidden = true;\n    },\n    cloneNowShown: function cloneNowShown() {\n      cloneHidden = false;\n    },\n    dispatchSortableEvent: function dispatchSortableEvent(name) {\n      _dispatchEvent({\n        sortable: sortable,\n        name: name,\n        originalEvent: originalEvent\n      });\n    }\n  }, data));\n};\nfunction _dispatchEvent(info) {\n  dispatchEvent(_objectSpread2({\n    putSortable: putSortable,\n    cloneEl: cloneEl,\n    targetEl: dragEl,\n    rootEl: rootEl,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex\n  }, info));\n}\nvar dragEl,\n  parentEl,\n  ghostEl,\n  rootEl,\n  nextEl,\n  lastDownEl,\n  cloneEl,\n  cloneHidden,\n  oldIndex,\n  newIndex,\n  oldDraggableIndex,\n  newDraggableIndex,\n  activeGroup,\n  putSortable,\n  awaitingDragStarted = false,\n  ignoreNextClick = false,\n  sortables = [],\n  tapEvt,\n  touchEvt,\n  lastDx,\n  lastDy,\n  tapDistanceLeft,\n  tapDistanceTop,\n  moved,\n  lastTarget,\n  lastDirection,\n  pastFirstInvertThresh = false,\n  isCircumstantialInvert = false,\n  targetMoveDistance,\n  // For positioning ghost absolutely\n  ghostRelativeParent,\n  ghostRelativeParentInitialScroll = [],\n  // (left, top)\n\n  _silent = false,\n  savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n  PositionGhostAbsolutely = IOS,\n  CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n  // This will not pass for IE9, because IE9 DnD only works on anchors\n  supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n  supportCssPointerEvents = function () {\n    if (!documentExists) return;\n    // false when <= IE11\n    if (IE11OrLess) {\n      return false;\n    }\n    var el = document.createElement('x');\n    el.style.cssText = 'pointer-events:auto';\n    return el.style.pointerEvents === 'auto';\n  }(),\n  _detectDirection = function _detectDirection(el, options) {\n    var elCSS = css(el),\n      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n      child1 = getChild(el, 0, options),\n      child2 = getChild(el, 1, options),\n      firstChildCSS = child1 && css(child1),\n      secondChildCSS = child2 && css(child2),\n      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n    if (elCSS.display === 'flex') {\n      return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n    }\n    if (elCSS.display === 'grid') {\n      return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n    }\n    if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n      var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n      return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n    }\n    return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n  },\n  _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n    var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n      dragElOppLength = vertical ? dragRect.width : dragRect.height,\n      targetS1Opp = vertical ? targetRect.left : targetRect.top,\n      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n      targetOppLength = vertical ? targetRect.width : targetRect.height;\n    return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n  },\n  /**\r\n   * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n   * @param  {Number} x      X position\r\n   * @param  {Number} y      Y position\r\n   * @return {HTMLElement}   Element of the first found nearest Sortable\r\n   */\n  _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n    var ret;\n    sortables.some(function (sortable) {\n      var threshold = sortable[expando].options.emptyInsertThreshold;\n      if (!threshold || lastChild(sortable)) return;\n      var rect = getRect(sortable),\n        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n      if (insideHorizontally && insideVertically) {\n        return ret = sortable;\n      }\n    });\n    return ret;\n  },\n  _prepareGroup = function _prepareGroup(options) {\n    function toFn(value, pull) {\n      return function (to, from, dragEl, evt) {\n        var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n        if (value == null && (pull || sameGroup)) {\n          // Default pull value\n          // Default pull and put value if same group\n          return true;\n        } else if (value == null || value === false) {\n          return false;\n        } else if (pull && value === 'clone') {\n          return value;\n        } else if (typeof value === 'function') {\n          return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n        } else {\n          var otherGroup = (pull ? to : from).options.group.name;\n          return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n        }\n      };\n    }\n    var group = {};\n    var originalGroup = options.group;\n    if (!originalGroup || _typeof(originalGroup) != 'object') {\n      originalGroup = {\n        name: originalGroup\n      };\n    }\n    group.name = originalGroup.name;\n    group.checkPull = toFn(originalGroup.pull, true);\n    group.checkPut = toFn(originalGroup.put);\n    group.revertClone = originalGroup.revertClone;\n    options.group = group;\n  },\n  _hideGhostForTarget = function _hideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', 'none');\n    }\n  },\n  _unhideGhostForTarget = function _unhideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', '');\n    }\n  };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n  document.addEventListener('click', function (evt) {\n    if (ignoreNextClick) {\n      evt.preventDefault();\n      evt.stopPropagation && evt.stopPropagation();\n      evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n      ignoreNextClick = false;\n      return false;\n    }\n  }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n  if (dragEl) {\n    evt = evt.touches ? evt.touches[0] : evt;\n    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n    if (nearest) {\n      // Create imitation event\n      var event = {};\n      for (var i in evt) {\n        if (evt.hasOwnProperty(i)) {\n          event[i] = evt[i];\n        }\n      }\n      event.target = event.rootEl = nearest;\n      event.preventDefault = void 0;\n      event.stopPropagation = void 0;\n      nearest[expando]._onDragOver(event);\n    }\n  }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n  if (dragEl) {\n    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n  }\n};\n\n/**\r\n * @class  Sortable\r\n * @param  {HTMLElement}  el\r\n * @param  {Object}       [options]\r\n */\nfunction Sortable(el, options) {\n  if (!(el && el.nodeType && el.nodeType === 1)) {\n    throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n  }\n  this.el = el; // root element\n  this.options = options = _extends({}, options);\n\n  // Export instance\n  el[expando] = this;\n  var defaults = {\n    group: null,\n    sort: true,\n    disabled: false,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n    swapThreshold: 1,\n    // percentage; 0 <= x <= 1\n    invertSwap: false,\n    // invert always\n    invertedSwapThreshold: null,\n    // will be set to same as swapThreshold if default\n    removeCloneOnHide: true,\n    direction: function direction() {\n      return _detectDirection(el, this.options);\n    },\n    ghostClass: 'sortable-ghost',\n    chosenClass: 'sortable-chosen',\n    dragClass: 'sortable-drag',\n    ignore: 'a, img',\n    filter: null,\n    preventOnFilter: true,\n    animation: 0,\n    easing: null,\n    setData: function setData(dataTransfer, dragEl) {\n      dataTransfer.setData('Text', dragEl.textContent);\n    },\n    dropBubble: false,\n    dragoverBubble: false,\n    dataIdAttr: 'data-id',\n    delay: 0,\n    delayOnTouchOnly: false,\n    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n    forceFallback: false,\n    fallbackClass: 'sortable-fallback',\n    fallbackOnBody: false,\n    fallbackTolerance: 0,\n    fallbackOffset: {\n      x: 0,\n      y: 0\n    },\n    // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n    emptyInsertThreshold: 5\n  };\n  PluginManager.initializePlugins(this, el, defaults);\n\n  // Set default options\n  for (var name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n  _prepareGroup(options);\n\n  // Bind all private methods\n  for (var fn in this) {\n    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n      this[fn] = this[fn].bind(this);\n    }\n  }\n\n  // Setup drag mode\n  this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n  if (this.nativeDraggable) {\n    // Touch start threshold cannot be greater than the native dragstart threshold\n    this.options.touchStartThreshold = 1;\n  }\n\n  // Bind events\n  if (options.supportPointer) {\n    on(el, 'pointerdown', this._onTapStart);\n  } else {\n    on(el, 'mousedown', this._onTapStart);\n    on(el, 'touchstart', this._onTapStart);\n  }\n  if (this.nativeDraggable) {\n    on(el, 'dragover', this);\n    on(el, 'dragenter', this);\n  }\n  sortables.push(this.el);\n\n  // Restore sorting\n  options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n  // Add animation state manager\n  _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n  constructor: Sortable,\n  _isOutsideThisEl: function _isOutsideThisEl(target) {\n    if (!this.el.contains(target) && target !== this.el) {\n      lastTarget = null;\n    }\n  },\n  _getDirection: function _getDirection(evt, target) {\n    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n  },\n  _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n    if (!evt.cancelable) return;\n    var _this = this,\n      el = this.el,\n      options = this.options,\n      preventOnFilter = options.preventOnFilter,\n      type = evt.type,\n      touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n      target = (touch || evt).target,\n      originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n      filter = options.filter;\n    _saveInputCheckedState(el);\n\n    // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n    if (dragEl) {\n      return;\n    }\n    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n      return; // only left button and enabled\n    }\n\n    // cancel dnd if original target is content editable\n    if (originalTarget.isContentEditable) {\n      return;\n    }\n\n    // Safari ignores further event handling after mousedown\n    if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n      return;\n    }\n    target = closest(target, options.draggable, el, false);\n    if (target && target.animated) {\n      return;\n    }\n    if (lastDownEl === target) {\n      // Ignoring duplicate `down`\n      return;\n    }\n\n    // Get the index of the dragged element within its parent\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable);\n\n    // Check filter\n    if (typeof filter === 'function') {\n      if (filter.call(this, evt, target, this)) {\n        _dispatchEvent({\n          sortable: _this,\n          rootEl: originalTarget,\n          name: 'filter',\n          targetEl: target,\n          toEl: el,\n          fromEl: el\n        });\n        pluginEvent('filter', _this, {\n          evt: evt\n        });\n        preventOnFilter && evt.preventDefault();\n        return; // cancel dnd\n      }\n    } else if (filter) {\n      filter = filter.split(',').some(function (criteria) {\n        criteria = closest(originalTarget, criteria.trim(), el, false);\n        if (criteria) {\n          _dispatchEvent({\n            sortable: _this,\n            rootEl: criteria,\n            name: 'filter',\n            targetEl: target,\n            fromEl: el,\n            toEl: el\n          });\n          pluginEvent('filter', _this, {\n            evt: evt\n          });\n          return true;\n        }\n      });\n      if (filter) {\n        preventOnFilter && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    }\n\n    // Prepare `dragstart`\n    this._prepareDragStart(evt, touch, target);\n  },\n  _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n    var _this = this,\n      el = _this.el,\n      options = _this.options,\n      ownerDocument = el.ownerDocument,\n      dragStartFn;\n    if (target && !dragEl && target.parentNode === el) {\n      var dragRect = getRect(target);\n      rootEl = el;\n      dragEl = target;\n      parentEl = dragEl.parentNode;\n      nextEl = dragEl.nextSibling;\n      lastDownEl = target;\n      activeGroup = options.group;\n      Sortable.dragged = dragEl;\n      tapEvt = {\n        target: dragEl,\n        clientX: (touch || evt).clientX,\n        clientY: (touch || evt).clientY\n      };\n      tapDistanceLeft = tapEvt.clientX - dragRect.left;\n      tapDistanceTop = tapEvt.clientY - dragRect.top;\n      this._lastX = (touch || evt).clientX;\n      this._lastY = (touch || evt).clientY;\n      dragEl.style['will-change'] = 'all';\n      dragStartFn = function dragStartFn() {\n        pluginEvent('delayEnded', _this, {\n          evt: evt\n        });\n        if (Sortable.eventCanceled) {\n          _this._onDrop();\n          return;\n        }\n        // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n        _this._disableDelayedDragEvents();\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        }\n\n        // Bind the events: dragstart/dragend\n        _this._triggerDragStart(evt, touch);\n\n        // Drag start event\n        _dispatchEvent({\n          sortable: _this,\n          name: 'choose',\n          originalEvent: evt\n        });\n\n        // Chosen item\n        toggleClass(dragEl, options.chosenClass, true);\n      };\n\n      // Disable \"draggable\"\n      options.ignore.split(',').forEach(function (criteria) {\n        find(dragEl, criteria.trim(), _disableDraggable);\n      });\n      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n      if (options.supportPointer) {\n        on(ownerDocument, 'pointerup', _this._onDrop);\n        // Native D&D triggers pointercancel\n        !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n      } else {\n        on(ownerDocument, 'mouseup', _this._onDrop);\n        on(ownerDocument, 'touchend', _this._onDrop);\n        on(ownerDocument, 'touchcancel', _this._onDrop);\n      }\n\n      // Make dragEl draggable (must be before delay for FireFox)\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n      pluginEvent('delayStart', this, {\n        evt: evt\n      });\n\n      // Delay is impossible for native DnD in Edge or IE\n      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n          return;\n        }\n        // If the user moves the pointer or let go the click or touch\n        // before the delay has been reached:\n        // disable the delayed drag\n        if (options.supportPointer) {\n          on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n          on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n        } else {\n          on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n          on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n          on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n        }\n        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n      } else {\n        dragStartFn();\n      }\n    }\n  },\n  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n    var touch = e.touches ? e.touches[0] : e;\n    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n      this._disableDelayedDrag();\n    }\n  },\n  _disableDelayedDrag: function _disableDelayedDrag() {\n    dragEl && _disableDraggable(dragEl);\n    clearTimeout(this._dragStartTimer);\n    this._disableDelayedDragEvents();\n  },\n  _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n    off(ownerDocument, 'touchend', this._disableDelayedDrag);\n    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n    off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n    off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n    touch = touch || evt.pointerType == 'touch' && evt;\n    if (!this.nativeDraggable || touch) {\n      if (this.options.supportPointer) {\n        on(document, 'pointermove', this._onTouchMove);\n      } else if (touch) {\n        on(document, 'touchmove', this._onTouchMove);\n      } else {\n        on(document, 'mousemove', this._onTouchMove);\n      }\n    } else {\n      on(dragEl, 'dragend', this);\n      on(rootEl, 'dragstart', this._onDragStart);\n    }\n    try {\n      if (document.selection) {\n        _nextTick(function () {\n          document.selection.empty();\n        });\n      } else {\n        window.getSelection().removeAllRanges();\n      }\n    } catch (err) {}\n  },\n  _dragStarted: function _dragStarted(fallback, evt) {\n    awaitingDragStarted = false;\n    if (rootEl && dragEl) {\n      pluginEvent('dragStarted', this, {\n        evt: evt\n      });\n      if (this.nativeDraggable) {\n        on(document, 'dragover', _checkOutsideTargetEl);\n      }\n      var options = this.options;\n\n      // Apply effect\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n      Sortable.active = this;\n      fallback && this._appendGhost();\n\n      // Drag start event\n      _dispatchEvent({\n        sortable: this,\n        name: 'start',\n        originalEvent: evt\n      });\n    } else {\n      this._nulling();\n    }\n  },\n  _emulateDragOver: function _emulateDragOver() {\n    if (touchEvt) {\n      this._lastX = touchEvt.clientX;\n      this._lastY = touchEvt.clientY;\n      _hideGhostForTarget();\n      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n      var parent = target;\n      while (target && target.shadowRoot) {\n        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n        if (target === parent) break;\n        parent = target;\n      }\n      dragEl.parentNode[expando]._isOutsideThisEl(target);\n      if (parent) {\n        do {\n          if (parent[expando]) {\n            var inserted = void 0;\n            inserted = parent[expando]._onDragOver({\n              clientX: touchEvt.clientX,\n              clientY: touchEvt.clientY,\n              target: target,\n              rootEl: parent\n            });\n            if (inserted && !this.options.dragoverBubble) {\n              break;\n            }\n          }\n          target = parent; // store last element\n        }\n        /* jshint boss:true */ while (parent = getParentOrHost(parent));\n      }\n      _unhideGhostForTarget();\n    }\n  },\n  _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n    if (tapEvt) {\n      var options = this.options,\n        fallbackTolerance = options.fallbackTolerance,\n        fallbackOffset = options.fallbackOffset,\n        touch = evt.touches ? evt.touches[0] : evt,\n        ghostMatrix = ghostEl && matrix(ghostEl, true),\n        scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n        scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n        relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n        dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n        dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n      // only set the status to dragging, when we are actually dragging\n      if (!Sortable.active && !awaitingDragStarted) {\n        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n          return;\n        }\n        this._onDragStart(evt, true);\n      }\n      if (ghostEl) {\n        if (ghostMatrix) {\n          ghostMatrix.e += dx - (lastDx || 0);\n          ghostMatrix.f += dy - (lastDy || 0);\n        } else {\n          ghostMatrix = {\n            a: 1,\n            b: 0,\n            c: 0,\n            d: 1,\n            e: dx,\n            f: dy\n          };\n        }\n        var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n        css(ghostEl, 'webkitTransform', cssMatrix);\n        css(ghostEl, 'mozTransform', cssMatrix);\n        css(ghostEl, 'msTransform', cssMatrix);\n        css(ghostEl, 'transform', cssMatrix);\n        lastDx = dx;\n        lastDy = dy;\n        touchEvt = touch;\n      }\n      evt.cancelable && evt.preventDefault();\n    }\n  },\n  _appendGhost: function _appendGhost() {\n    // Bug if using scale(): https://stackoverflow.com/questions/2637058\n    // Not being adjusted for\n    if (!ghostEl) {\n      var container = this.options.fallbackOnBody ? document.body : rootEl,\n        rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n        options = this.options;\n\n      // Position absolutely\n      if (PositionGhostAbsolutely) {\n        // Get relatively positioned parent\n        ghostRelativeParent = container;\n        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n          ghostRelativeParent = ghostRelativeParent.parentNode;\n        }\n        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n          rect.top += ghostRelativeParent.scrollTop;\n          rect.left += ghostRelativeParent.scrollLeft;\n        } else {\n          ghostRelativeParent = getWindowScrollingElement();\n        }\n        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n      }\n      ghostEl = dragEl.cloneNode(true);\n      toggleClass(ghostEl, options.ghostClass, false);\n      toggleClass(ghostEl, options.fallbackClass, true);\n      toggleClass(ghostEl, options.dragClass, true);\n      css(ghostEl, 'transition', '');\n      css(ghostEl, 'transform', '');\n      css(ghostEl, 'box-sizing', 'border-box');\n      css(ghostEl, 'margin', 0);\n      css(ghostEl, 'top', rect.top);\n      css(ghostEl, 'left', rect.left);\n      css(ghostEl, 'width', rect.width);\n      css(ghostEl, 'height', rect.height);\n      css(ghostEl, 'opacity', '0.8');\n      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n      css(ghostEl, 'zIndex', '100000');\n      css(ghostEl, 'pointerEvents', 'none');\n      Sortable.ghost = ghostEl;\n      container.appendChild(ghostEl);\n\n      // Set transform-origin\n      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n    }\n  },\n  _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n    var _this = this;\n    var dataTransfer = evt.dataTransfer;\n    var options = _this.options;\n    pluginEvent('dragStart', this, {\n      evt: evt\n    });\n    if (Sortable.eventCanceled) {\n      this._onDrop();\n      return;\n    }\n    pluginEvent('setupClone', this);\n    if (!Sortable.eventCanceled) {\n      cloneEl = clone(dragEl);\n      cloneEl.removeAttribute(\"id\");\n      cloneEl.draggable = false;\n      cloneEl.style['will-change'] = '';\n      this._hideClone();\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      Sortable.clone = cloneEl;\n    }\n\n    // #1143: IFrame support workaround\n    _this.cloneId = _nextTick(function () {\n      pluginEvent('clone', _this);\n      if (Sortable.eventCanceled) return;\n      if (!_this.options.removeCloneOnHide) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      }\n      _this._hideClone();\n      _dispatchEvent({\n        sortable: _this,\n        name: 'clone'\n      });\n    });\n    !fallback && toggleClass(dragEl, options.dragClass, true);\n\n    // Set proper drop events\n    if (fallback) {\n      ignoreNextClick = true;\n      _this._loopId = setInterval(_this._emulateDragOver, 50);\n    } else {\n      // Undo what was set in _prepareDragStart before drag started\n      off(document, 'mouseup', _this._onDrop);\n      off(document, 'touchend', _this._onDrop);\n      off(document, 'touchcancel', _this._onDrop);\n      if (dataTransfer) {\n        dataTransfer.effectAllowed = 'move';\n        options.setData && options.setData.call(_this, dataTransfer, dragEl);\n      }\n      on(document, 'drop', _this);\n\n      // #1276 fix:\n      css(dragEl, 'transform', 'translateZ(0)');\n    }\n    awaitingDragStarted = true;\n    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n    on(document, 'selectstart', _this);\n    moved = true;\n    window.getSelection().removeAllRanges();\n    if (Safari) {\n      css(document.body, 'user-select', 'none');\n    }\n  },\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function _onDragOver( /**Event*/evt) {\n    var el = this.el,\n      target = evt.target,\n      dragRect,\n      targetRect,\n      revert,\n      options = this.options,\n      group = options.group,\n      activeSortable = Sortable.active,\n      isOwner = activeGroup === group,\n      canSort = options.sort,\n      fromSortable = putSortable || activeSortable,\n      vertical,\n      _this = this,\n      completedFired = false;\n    if (_silent) return;\n    function dragOverEvent(name, extra) {\n      pluginEvent(name, _this, _objectSpread2({\n        evt: evt,\n        isOwner: isOwner,\n        axis: vertical ? 'vertical' : 'horizontal',\n        revert: revert,\n        dragRect: dragRect,\n        targetRect: targetRect,\n        canSort: canSort,\n        fromSortable: fromSortable,\n        target: target,\n        completed: completed,\n        onMove: function onMove(target, after) {\n          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n        },\n        changed: changed\n      }, extra));\n    }\n\n    // Capture animation state\n    function capture() {\n      dragOverEvent('dragOverAnimationCapture');\n      _this.captureAnimationState();\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    }\n\n    // Return invocation when dragEl is inserted (or completed)\n    function completed(insertion) {\n      dragOverEvent('dragOverCompleted', {\n        insertion: insertion\n      });\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        } else {\n          activeSortable._showClone(_this);\n        }\n        if (_this !== fromSortable) {\n          // Set ghost class to new sortable's ghost class\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n          toggleClass(dragEl, options.ghostClass, true);\n        }\n        if (putSortable !== _this && _this !== Sortable.active) {\n          putSortable = _this;\n        } else if (_this === Sortable.active && putSortable) {\n          putSortable = null;\n        }\n\n        // Animation\n        if (fromSortable === _this) {\n          _this._ignoreWhileAnimating = target;\n        }\n        _this.animateAll(function () {\n          dragOverEvent('dragOverAnimationComplete');\n          _this._ignoreWhileAnimating = null;\n        });\n        if (_this !== fromSortable) {\n          fromSortable.animateAll();\n          fromSortable._ignoreWhileAnimating = null;\n        }\n      }\n\n      // Null lastTarget if it is not inside a previously swapped element\n      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n        lastTarget = null;\n      }\n\n      // no bubbling and not fallback\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n        // Do not detect for empty insert if already inserted\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n      return completedFired = true;\n    }\n\n    // Call when dragEl has been inserted\n    function changed() {\n      newIndex = index(dragEl);\n      newDraggableIndex = index(dragEl, options.draggable);\n      _dispatchEvent({\n        sortable: _this,\n        name: 'change',\n        toEl: el,\n        newIndex: newIndex,\n        newDraggableIndex: newDraggableIndex,\n        originalEvent: evt\n      });\n    }\n    if (evt.preventDefault !== void 0) {\n      evt.cancelable && evt.preventDefault();\n    }\n    target = closest(target, options.draggable, el, true);\n    dragOverEvent('dragOver');\n    if (Sortable.eventCanceled) return completedFired;\n    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n      return completed(false);\n    }\n    ignoreNextClick = false;\n    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n      vertical = this._getDirection(evt, target) === 'vertical';\n      dragRect = getRect(dragEl);\n      dragOverEvent('dragOverValid');\n      if (Sortable.eventCanceled) return completedFired;\n      if (revert) {\n        parentEl = rootEl; // actualization\n        capture();\n        this._hideClone();\n        dragOverEvent('revert');\n        if (!Sortable.eventCanceled) {\n          if (nextEl) {\n            rootEl.insertBefore(dragEl, nextEl);\n          } else {\n            rootEl.appendChild(dragEl);\n          }\n        }\n        return completed(true);\n      }\n      var elLastChild = lastChild(el, options.draggable);\n      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n        // Insert to end of list\n\n        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        }\n\n        // if there is a last element, it is the target\n        if (elLastChild && el === evt.target) {\n          target = elLastChild;\n        }\n        if (target) {\n          targetRect = getRect(target);\n        }\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n          capture();\n          if (elLastChild && elLastChild.nextSibling) {\n            // the last draggable element is not the last node\n            el.insertBefore(dragEl, elLastChild.nextSibling);\n          } else {\n            el.appendChild(dragEl);\n          }\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n        // Insert to start of list\n        var firstChild = getChild(el, 0, options, true);\n        if (firstChild === dragEl) {\n          return completed(false);\n        }\n        target = firstChild;\n        targetRect = getRect(target);\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n          capture();\n          el.insertBefore(dragEl, firstChild);\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (target.parentNode === el) {\n        targetRect = getRect(target);\n        var direction = 0,\n          targetBeforeFirstSwap,\n          differentLevel = dragEl.parentNode !== el,\n          differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n          side1 = vertical ? 'top' : 'left',\n          scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n          scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n        if (lastTarget !== target) {\n          targetBeforeFirstSwap = targetRect[side1];\n          pastFirstInvertThresh = false;\n          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n        }\n        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n        var sibling;\n        if (direction !== 0) {\n          // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n          var dragIndex = index(dragEl);\n          do {\n            dragIndex -= direction;\n            sibling = parentEl.children[dragIndex];\n          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n        }\n        // If dragEl is already beside target: Do not insert\n        if (direction === 0 || sibling === target) {\n          return completed(false);\n        }\n        lastTarget = target;\n        lastDirection = direction;\n        var nextSibling = target.nextElementSibling,\n          after = false;\n        after = direction === 1;\n        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n        if (moveVector !== false) {\n          if (moveVector === 1 || moveVector === -1) {\n            after = moveVector === 1;\n          }\n          _silent = true;\n          setTimeout(_unsilent, 30);\n          capture();\n          if (after && !nextSibling) {\n            el.appendChild(dragEl);\n          } else {\n            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n          }\n\n          // Undo chrome's scroll adjustment (has no effect on other browsers)\n          if (scrolledPastTop) {\n            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n          }\n          parentEl = dragEl.parentNode; // actualization\n\n          // must be done before animation\n          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n          }\n          changed();\n          return completed(true);\n        }\n      }\n      if (el.contains(dragEl)) {\n        return completed(false);\n      }\n    }\n    return false;\n  },\n  _ignoreWhileAnimating: null,\n  _offMoveEvents: function _offMoveEvents() {\n    off(document, 'mousemove', this._onTouchMove);\n    off(document, 'touchmove', this._onTouchMove);\n    off(document, 'pointermove', this._onTouchMove);\n    off(document, 'dragover', nearestEmptyInsertDetectEvent);\n    off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n    off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n  },\n  _offUpEvents: function _offUpEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._onDrop);\n    off(ownerDocument, 'touchend', this._onDrop);\n    off(ownerDocument, 'pointerup', this._onDrop);\n    off(ownerDocument, 'pointercancel', this._onDrop);\n    off(ownerDocument, 'touchcancel', this._onDrop);\n    off(document, 'selectstart', this);\n  },\n  _onDrop: function _onDrop( /**Event*/evt) {\n    var el = this.el,\n      options = this.options;\n\n    // Get the index of the dragged element within its parent\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    pluginEvent('drop', this, {\n      evt: evt\n    });\n    parentEl = dragEl && dragEl.parentNode;\n\n    // Get again after plugin event\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    if (Sortable.eventCanceled) {\n      this._nulling();\n      return;\n    }\n    awaitingDragStarted = false;\n    isCircumstantialInvert = false;\n    pastFirstInvertThresh = false;\n    clearInterval(this._loopId);\n    clearTimeout(this._dragStartTimer);\n    _cancelNextTick(this.cloneId);\n    _cancelNextTick(this._dragStartId);\n\n    // Unbind events\n    if (this.nativeDraggable) {\n      off(document, 'drop', this);\n      off(el, 'dragstart', this._onDragStart);\n    }\n    this._offMoveEvents();\n    this._offUpEvents();\n    if (Safari) {\n      css(document.body, 'user-select', '');\n    }\n    css(dragEl, 'transform', '');\n    if (evt) {\n      if (moved) {\n        evt.cancelable && evt.preventDefault();\n        !options.dropBubble && evt.stopPropagation();\n      }\n      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        // Remove clone(s)\n        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n      }\n      if (dragEl) {\n        if (this.nativeDraggable) {\n          off(dragEl, 'dragend', this);\n        }\n        _disableDraggable(dragEl);\n        dragEl.style['will-change'] = '';\n\n        // Remove classes\n        // ghostClass is added in dragStarted\n        if (moved && !awaitingDragStarted) {\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n        }\n        toggleClass(dragEl, this.options.chosenClass, false);\n\n        // Drag stop event\n        _dispatchEvent({\n          sortable: this,\n          name: 'unchoose',\n          toEl: parentEl,\n          newIndex: null,\n          newDraggableIndex: null,\n          originalEvent: evt\n        });\n        if (rootEl !== parentEl) {\n          if (newIndex >= 0) {\n            // Add event\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'add',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n\n            // Remove event\n            _dispatchEvent({\n              sortable: this,\n              name: 'remove',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n\n            // drag from one list and drop into another\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'sort',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n            _dispatchEvent({\n              sortable: this,\n              name: 'sort',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n          }\n          putSortable && putSortable.save();\n        } else {\n          if (newIndex !== oldIndex) {\n            if (newIndex >= 0) {\n              // drag & drop within the same list\n              _dispatchEvent({\n                sortable: this,\n                name: 'update',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n              _dispatchEvent({\n                sortable: this,\n                name: 'sort',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n            }\n          }\n        }\n        if (Sortable.active) {\n          /* jshint eqnull:true */\n          if (newIndex == null || newIndex === -1) {\n            newIndex = oldIndex;\n            newDraggableIndex = oldDraggableIndex;\n          }\n          _dispatchEvent({\n            sortable: this,\n            name: 'end',\n            toEl: parentEl,\n            originalEvent: evt\n          });\n\n          // Save sorting\n          this.save();\n        }\n      }\n    }\n    this._nulling();\n  },\n  _nulling: function _nulling() {\n    pluginEvent('nulling', this);\n    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n    var el = this.el;\n    savedInputChecked.forEach(function (checkEl) {\n      if (el.contains(checkEl)) {\n        checkEl.checked = true;\n      }\n    });\n    savedInputChecked.length = lastDx = lastDy = 0;\n  },\n  handleEvent: function handleEvent( /**Event*/evt) {\n    switch (evt.type) {\n      case 'drop':\n      case 'dragend':\n        this._onDrop(evt);\n        break;\n      case 'dragenter':\n      case 'dragover':\n        if (dragEl) {\n          this._onDragOver(evt);\n          _globalDragOver(evt);\n        }\n        break;\n      case 'selectstart':\n        evt.preventDefault();\n        break;\n    }\n  },\n  /**\r\n   * Serializes the item into an array of string.\r\n   * @returns {String[]}\r\n   */\n  toArray: function toArray() {\n    var order = [],\n      el,\n      children = this.el.children,\n      i = 0,\n      n = children.length,\n      options = this.options;\n    for (; i < n; i++) {\n      el = children[i];\n      if (closest(el, options.draggable, this.el, false)) {\n        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n      }\n    }\n    return order;\n  },\n  /**\r\n   * Sorts the elements according to the array.\r\n   * @param  {String[]}  order  order of the items\r\n   */\n  sort: function sort(order, useAnimation) {\n    var items = {},\n      rootEl = this.el;\n    this.toArray().forEach(function (id, i) {\n      var el = rootEl.children[i];\n      if (closest(el, this.options.draggable, rootEl, false)) {\n        items[id] = el;\n      }\n    }, this);\n    useAnimation && this.captureAnimationState();\n    order.forEach(function (id) {\n      if (items[id]) {\n        rootEl.removeChild(items[id]);\n        rootEl.appendChild(items[id]);\n      }\n    });\n    useAnimation && this.animateAll();\n  },\n  /**\r\n   * Save the current sorting\r\n   */\n  save: function save() {\n    var store = this.options.store;\n    store && store.set && store.set(this);\n  },\n  /**\r\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n   * @param   {HTMLElement}  el\r\n   * @param   {String}       [selector]  default: `options.draggable`\r\n   * @returns {HTMLElement|null}\r\n   */\n  closest: function closest$1(el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n  /**\r\n   * Set/get option\r\n   * @param   {string} name\r\n   * @param   {*}      [value]\r\n   * @returns {*}\r\n   */\n  option: function option(name, value) {\n    var options = this.options;\n    if (value === void 0) {\n      return options[name];\n    } else {\n      var modifiedValue = PluginManager.modifyOption(this, name, value);\n      if (typeof modifiedValue !== 'undefined') {\n        options[name] = modifiedValue;\n      } else {\n        options[name] = value;\n      }\n      if (name === 'group') {\n        _prepareGroup(options);\n      }\n    }\n  },\n  /**\r\n   * Destroy\r\n   */\n  destroy: function destroy() {\n    pluginEvent('destroy', this);\n    var el = this.el;\n    el[expando] = null;\n    off(el, 'mousedown', this._onTapStart);\n    off(el, 'touchstart', this._onTapStart);\n    off(el, 'pointerdown', this._onTapStart);\n    if (this.nativeDraggable) {\n      off(el, 'dragover', this);\n      off(el, 'dragenter', this);\n    }\n    // Remove draggable attributes\n    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n      el.removeAttribute('draggable');\n    });\n    this._onDrop();\n    this._disableDelayedDragEvents();\n    sortables.splice(sortables.indexOf(this.el), 1);\n    this.el = el = null;\n  },\n  _hideClone: function _hideClone() {\n    if (!cloneHidden) {\n      pluginEvent('hideClone', this);\n      if (Sortable.eventCanceled) return;\n      css(cloneEl, 'display', 'none');\n      if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n        cloneEl.parentNode.removeChild(cloneEl);\n      }\n      cloneHidden = true;\n    }\n  },\n  _showClone: function _showClone(putSortable) {\n    if (putSortable.lastPutMode !== 'clone') {\n      this._hideClone();\n      return;\n    }\n    if (cloneHidden) {\n      pluginEvent('showClone', this);\n      if (Sortable.eventCanceled) return;\n\n      // show clone at dragEl or original position\n      if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      } else if (nextEl) {\n        rootEl.insertBefore(cloneEl, nextEl);\n      } else {\n        rootEl.appendChild(cloneEl);\n      }\n      if (this.options.group.revertClone) {\n        this.animate(dragEl, cloneEl);\n      }\n      css(cloneEl, 'display', '');\n      cloneHidden = false;\n    }\n  }\n};\nfunction _globalDragOver( /**Event*/evt) {\n  if (evt.dataTransfer) {\n    evt.dataTransfer.dropEffect = 'move';\n  }\n  evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n  var evt,\n    sortable = fromEl[expando],\n    onMoveFn = sortable.options.onMove,\n    retVal;\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent('move', {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent('move', true, true);\n  }\n  evt.to = toEl;\n  evt.from = fromEl;\n  evt.dragged = dragEl;\n  evt.draggedRect = dragRect;\n  evt.related = targetEl || toEl;\n  evt.relatedRect = targetRect || getRect(toEl);\n  evt.willInsertAfter = willInsertAfter;\n  evt.originalEvent = originalEvent;\n  fromEl.dispatchEvent(evt);\n  if (onMoveFn) {\n    retVal = onMoveFn.call(sortable, evt, originalEvent);\n  }\n  return retVal;\n}\nfunction _disableDraggable(el) {\n  el.draggable = false;\n}\nfunction _unsilent() {\n  _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n  var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n  var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n    targetLength = vertical ? targetRect.height : targetRect.width,\n    targetS1 = vertical ? targetRect.top : targetRect.left,\n    targetS2 = vertical ? targetRect.bottom : targetRect.right,\n    invert = false;\n  if (!invertSwap) {\n    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n      // check if past first invert threshold on side opposite of lastDirection\n      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n        // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n        pastFirstInvertThresh = true;\n      }\n      if (!pastFirstInvertThresh) {\n        // dragEl shadow (target move distance shadow)\n        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n        : mouseOnAxis > targetS2 - targetMoveDistance) {\n          return -lastDirection;\n        }\n      } else {\n        invert = true;\n      }\n    } else {\n      // Regular\n      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n        return _getInsertDirection(target);\n      }\n    }\n  }\n  invert = invert || invertSwap;\n  if (invert) {\n    // Invert of regular\n    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n    }\n  }\n  return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\r\n * @return {Number}                   Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n\n/**\r\n * Generate id\r\n * @param   {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n  var str = el.tagName + el.className + el.src + el.href + el.textContent,\n    i = str.length,\n    sum = 0;\n  while (i--) {\n    sum += str.charCodeAt(i);\n  }\n  return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n  savedInputChecked.length = 0;\n  var inputs = root.getElementsByTagName('input');\n  var idx = inputs.length;\n  while (idx--) {\n    var el = inputs[idx];\n    el.checked && savedInputChecked.push(el);\n  }\n}\nfunction _nextTick(fn) {\n  return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n  return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n  on(document, 'touchmove', function (evt) {\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n}\n\n// Export utils\nSortable.utils = {\n  on: on,\n  off: off,\n  css: css,\n  find: find,\n  is: function is(el, selector) {\n    return !!closest(el, selector, el, false);\n  },\n  extend: extend,\n  throttle: throttle,\n  closest: closest,\n  toggleClass: toggleClass,\n  clone: clone,\n  index: index,\n  nextTick: _nextTick,\n  cancelNextTick: _cancelNextTick,\n  detectDirection: _detectDirection,\n  getChild: getChild,\n  expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param  {HTMLElement} element The element\r\n * @return {Sortable|undefined}         The instance of Sortable\r\n */\nSortable.get = function (element) {\n  return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\r\n */\nSortable.mount = function () {\n  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n    plugins[_key] = arguments[_key];\n  }\n  if (plugins[0].constructor === Array) plugins = plugins[0];\n  plugins.forEach(function (plugin) {\n    if (!plugin.prototype || !plugin.prototype.constructor) {\n      throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n    }\n    if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n    PluginManager.mount(plugin);\n  });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement}  el\r\n * @param {Object}      [options]\r\n */\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n  scrollEl,\n  scrollRootEl,\n  scrolling = false,\n  lastAutoScrollX,\n  lastAutoScrollY,\n  touchEvt$1,\n  pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n  function AutoScroll() {\n    this.defaults = {\n      scroll: true,\n      forceAutoScrollFallback: false,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: true\n    };\n\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n  }\n  AutoScroll.prototype = {\n    dragStarted: function dragStarted(_ref) {\n      var originalEvent = _ref.originalEvent;\n      if (this.sortable.nativeDraggable) {\n        on(document, 'dragover', this._handleAutoScroll);\n      } else {\n        if (this.options.supportPointer) {\n          on(document, 'pointermove', this._handleFallbackAutoScroll);\n        } else if (originalEvent.touches) {\n          on(document, 'touchmove', this._handleFallbackAutoScroll);\n        } else {\n          on(document, 'mousemove', this._handleFallbackAutoScroll);\n        }\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref2) {\n      var originalEvent = _ref2.originalEvent;\n      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n      if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n        this._handleAutoScroll(originalEvent);\n      }\n    },\n    drop: function drop() {\n      if (this.sortable.nativeDraggable) {\n        off(document, 'dragover', this._handleAutoScroll);\n      } else {\n        off(document, 'pointermove', this._handleFallbackAutoScroll);\n        off(document, 'touchmove', this._handleFallbackAutoScroll);\n        off(document, 'mousemove', this._handleFallbackAutoScroll);\n      }\n      clearPointerElemChangedInterval();\n      clearAutoScrolls();\n      cancelThrottle();\n    },\n    nulling: function nulling() {\n      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n      autoScrolls.length = 0;\n    },\n    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n      this._handleAutoScroll(evt, true);\n    },\n    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n      var _this = this;\n      var x = (evt.touches ? evt.touches[0] : evt).clientX,\n        y = (evt.touches ? evt.touches[0] : evt).clientY,\n        elem = document.elementFromPoint(x, y);\n      touchEvt$1 = evt;\n\n      // IE does not seem to have native autoscroll,\n      // Edge's autoscroll seems too conditional,\n      // MACOS Safari does not have autoscroll,\n      // Firefox and Chrome are good\n      if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n        autoScroll(evt, this.options, elem, fallback);\n\n        // Listener for pointer element change\n        var ogElemScroller = getParentAutoScrollElement(elem, true);\n        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval();\n          // Detect for pointer elem change, emulating native DnD behaviour\n          pointerElemChangedInterval = setInterval(function () {\n            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n            if (newElem !== ogElemScroller) {\n              ogElemScroller = newElem;\n              clearAutoScrolls();\n            }\n            autoScroll(evt, _this.options, newElem, fallback);\n          }, 10);\n          lastAutoScrollX = x;\n          lastAutoScrollY = y;\n        }\n      } else {\n        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n          clearAutoScrolls();\n          return;\n        }\n        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n      }\n    }\n  };\n  return _extends(AutoScroll, {\n    pluginName: 'scroll',\n    initializeByDefault: true\n  });\n}\nfunction clearAutoScrolls() {\n  autoScrolls.forEach(function (autoScroll) {\n    clearInterval(autoScroll.pid);\n  });\n  autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n  clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n  if (!options.scroll) return;\n  var x = (evt.touches ? evt.touches[0] : evt).clientX,\n    y = (evt.touches ? evt.touches[0] : evt).clientY,\n    sens = options.scrollSensitivity,\n    speed = options.scrollSpeed,\n    winScroller = getWindowScrollingElement();\n  var scrollThisInstance = false,\n    scrollCustomFn;\n\n  // New scroll root, set scrollEl\n  if (scrollRootEl !== rootEl) {\n    scrollRootEl = rootEl;\n    clearAutoScrolls();\n    scrollEl = options.scroll;\n    scrollCustomFn = options.scrollFn;\n    if (scrollEl === true) {\n      scrollEl = getParentAutoScrollElement(rootEl, true);\n    }\n  }\n  var layersOut = 0;\n  var currentParent = scrollEl;\n  do {\n    var el = currentParent,\n      rect = getRect(el),\n      top = rect.top,\n      bottom = rect.bottom,\n      left = rect.left,\n      right = rect.right,\n      width = rect.width,\n      height = rect.height,\n      canScrollX = void 0,\n      canScrollY = void 0,\n      scrollWidth = el.scrollWidth,\n      scrollHeight = el.scrollHeight,\n      elCSS = css(el),\n      scrollPosX = el.scrollLeft,\n      scrollPosY = el.scrollTop;\n    if (el === winScroller) {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n    } else {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n    }\n    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n    if (!autoScrolls[layersOut]) {\n      for (var i = 0; i <= layersOut; i++) {\n        if (!autoScrolls[i]) {\n          autoScrolls[i] = {};\n        }\n      }\n    }\n    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n      autoScrolls[layersOut].el = el;\n      autoScrolls[layersOut].vx = vx;\n      autoScrolls[layersOut].vy = vy;\n      clearInterval(autoScrolls[layersOut].pid);\n      if (vx != 0 || vy != 0) {\n        scrollThisInstance = true;\n        /* jshint loopfunc:true */\n        autoScrolls[layersOut].pid = setInterval(function () {\n          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n          if (isFallback && this.layer === 0) {\n            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n          }\n          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n          if (typeof scrollCustomFn === 'function') {\n            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n              return;\n            }\n          }\n          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n        }.bind({\n          layer: layersOut\n        }), 24);\n      }\n    }\n    layersOut++;\n  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n  var originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    dragEl = _ref.dragEl,\n    activeSortable = _ref.activeSortable,\n    dispatchSortableEvent = _ref.dispatchSortableEvent,\n    hideGhostForTarget = _ref.hideGhostForTarget,\n    unhideGhostForTarget = _ref.unhideGhostForTarget;\n  if (!originalEvent) return;\n  var toSortable = putSortable || activeSortable;\n  hideGhostForTarget();\n  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n  var target = document.elementFromPoint(touch.clientX, touch.clientY);\n  unhideGhostForTarget();\n  if (toSortable && !toSortable.el.contains(target)) {\n    dispatchSortableEvent('spill');\n    this.onSpill({\n      dragEl: dragEl,\n      putSortable: putSortable\n    });\n  }\n};\nfunction Revert() {}\nRevert.prototype = {\n  startIndex: null,\n  dragStart: function dragStart(_ref2) {\n    var oldDraggableIndex = _ref2.oldDraggableIndex;\n    this.startIndex = oldDraggableIndex;\n  },\n  onSpill: function onSpill(_ref3) {\n    var dragEl = _ref3.dragEl,\n      putSortable = _ref3.putSortable;\n    this.sortable.captureAnimationState();\n    if (putSortable) {\n      putSortable.captureAnimationState();\n    }\n    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n    if (nextSibling) {\n      this.sortable.el.insertBefore(dragEl, nextSibling);\n    } else {\n      this.sortable.el.appendChild(dragEl);\n    }\n    this.sortable.animateAll();\n    if (putSortable) {\n      putSortable.animateAll();\n    }\n  },\n  drop: drop\n};\n_extends(Revert, {\n  pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n  onSpill: function onSpill(_ref4) {\n    var dragEl = _ref4.dragEl,\n      putSortable = _ref4.putSortable;\n    var parentSortable = putSortable || this.sortable;\n    parentSortable.captureAnimationState();\n    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n    parentSortable.animateAll();\n  },\n  drop: drop\n};\n_extends(Remove, {\n  pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n  function Swap() {\n    this.defaults = {\n      swapClass: 'sortable-swap-highlight'\n    };\n  }\n  Swap.prototype = {\n    dragStart: function dragStart(_ref) {\n      var dragEl = _ref.dragEl;\n      lastSwapEl = dragEl;\n    },\n    dragOverValid: function dragOverValid(_ref2) {\n      var completed = _ref2.completed,\n        target = _ref2.target,\n        onMove = _ref2.onMove,\n        activeSortable = _ref2.activeSortable,\n        changed = _ref2.changed,\n        cancel = _ref2.cancel;\n      if (!activeSortable.options.swap) return;\n      var el = this.sortable.el,\n        options = this.options;\n      if (target && target !== el) {\n        var prevSwapEl = lastSwapEl;\n        if (onMove(target) !== false) {\n          toggleClass(target, options.swapClass, true);\n          lastSwapEl = target;\n        } else {\n          lastSwapEl = null;\n        }\n        if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n          toggleClass(prevSwapEl, options.swapClass, false);\n        }\n      }\n      changed();\n      completed(true);\n      cancel();\n    },\n    drop: function drop(_ref3) {\n      var activeSortable = _ref3.activeSortable,\n        putSortable = _ref3.putSortable,\n        dragEl = _ref3.dragEl;\n      var toSortable = putSortable || this.sortable;\n      var options = this.options;\n      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n        if (dragEl !== lastSwapEl) {\n          toSortable.captureAnimationState();\n          if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n          swapNodes(dragEl, lastSwapEl);\n          toSortable.animateAll();\n          if (toSortable !== activeSortable) activeSortable.animateAll();\n        }\n      }\n    },\n    nulling: function nulling() {\n      lastSwapEl = null;\n    }\n  };\n  return _extends(Swap, {\n    pluginName: 'swap',\n    eventProperties: function eventProperties() {\n      return {\n        swapItem: lastSwapEl\n      };\n    }\n  });\n}\nfunction swapNodes(n1, n2) {\n  var p1 = n1.parentNode,\n    p2 = n2.parentNode,\n    i1,\n    i2;\n  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n  i1 = index(n1);\n  i2 = index(n2);\n  if (p1.isEqualNode(p2) && i1 < i2) {\n    i2++;\n  }\n  p1.insertBefore(n2, p1.children[i1]);\n  p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n  multiDragClones = [],\n  lastMultiDragSelect,\n  // for selection with modifier key down (SHIFT)\n  multiDragSortable,\n  initialFolding = false,\n  // Initial multi-drag fold when drag started\n  folding = false,\n  // Folding any other time\n  dragStarted = false,\n  dragEl$1,\n  clonesFromRect,\n  clonesHidden;\nfunction MultiDragPlugin() {\n  function MultiDrag(sortable) {\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n    if (!sortable.options.avoidImplicitDeselect) {\n      if (sortable.options.supportPointer) {\n        on(document, 'pointerup', this._deselectMultiDrag);\n      } else {\n        on(document, 'mouseup', this._deselectMultiDrag);\n        on(document, 'touchend', this._deselectMultiDrag);\n      }\n    }\n    on(document, 'keydown', this._checkKeyDown);\n    on(document, 'keyup', this._checkKeyUp);\n    this.defaults = {\n      selectedClass: 'sortable-selected',\n      multiDragKey: null,\n      avoidImplicitDeselect: false,\n      setData: function setData(dataTransfer, dragEl) {\n        var data = '';\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          multiDragElements.forEach(function (multiDragElement, i) {\n            data += (!i ? '' : ', ') + multiDragElement.textContent;\n          });\n        } else {\n          data = dragEl.textContent;\n        }\n        dataTransfer.setData('Text', data);\n      }\n    };\n  }\n  MultiDrag.prototype = {\n    multiDragKeyDown: false,\n    isMultiDrag: false,\n    delayStartGlobal: function delayStartGlobal(_ref) {\n      var dragged = _ref.dragEl;\n      dragEl$1 = dragged;\n    },\n    delayEnded: function delayEnded() {\n      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n    },\n    setupClone: function setupClone(_ref2) {\n      var sortable = _ref2.sortable,\n        cancel = _ref2.cancel;\n      if (!this.isMultiDrag) return;\n      for (var i = 0; i < multiDragElements.length; i++) {\n        multiDragClones.push(clone(multiDragElements[i]));\n        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n        multiDragClones[i].draggable = false;\n        multiDragClones[i].style['will-change'] = '';\n        toggleClass(multiDragClones[i], this.options.selectedClass, false);\n        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n      }\n      sortable._hideClone();\n      cancel();\n    },\n    clone: function clone(_ref3) {\n      var sortable = _ref3.sortable,\n        rootEl = _ref3.rootEl,\n        dispatchSortableEvent = _ref3.dispatchSortableEvent,\n        cancel = _ref3.cancel;\n      if (!this.isMultiDrag) return;\n      if (!this.options.removeCloneOnHide) {\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          insertMultiDragClones(true, rootEl);\n          dispatchSortableEvent('clone');\n          cancel();\n        }\n      }\n    },\n    showClone: function showClone(_ref4) {\n      var cloneNowShown = _ref4.cloneNowShown,\n        rootEl = _ref4.rootEl,\n        cancel = _ref4.cancel;\n      if (!this.isMultiDrag) return;\n      insertMultiDragClones(false, rootEl);\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', '');\n      });\n      cloneNowShown();\n      clonesHidden = false;\n      cancel();\n    },\n    hideClone: function hideClone(_ref5) {\n      var _this = this;\n      var sortable = _ref5.sortable,\n        cloneNowHidden = _ref5.cloneNowHidden,\n        cancel = _ref5.cancel;\n      if (!this.isMultiDrag) return;\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', 'none');\n        if (_this.options.removeCloneOnHide && clone.parentNode) {\n          clone.parentNode.removeChild(clone);\n        }\n      });\n      cloneNowHidden();\n      clonesHidden = true;\n      cancel();\n    },\n    dragStartGlobal: function dragStartGlobal(_ref6) {\n      var sortable = _ref6.sortable;\n      if (!this.isMultiDrag && multiDragSortable) {\n        multiDragSortable.multiDrag._deselectMultiDrag();\n      }\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.sortableIndex = index(multiDragElement);\n      });\n\n      // Sort multi-drag elements\n      multiDragElements = multiDragElements.sort(function (a, b) {\n        return a.sortableIndex - b.sortableIndex;\n      });\n      dragStarted = true;\n    },\n    dragStarted: function dragStarted(_ref7) {\n      var _this2 = this;\n      var sortable = _ref7.sortable;\n      if (!this.isMultiDrag) return;\n      if (this.options.sort) {\n        // Capture rects,\n        // hide multi drag elements (by positioning them absolute),\n        // set multi drag elements rects to dragRect,\n        // show multi drag elements,\n        // animate to rects,\n        // unset rects & remove from DOM\n\n        sortable.captureAnimationState();\n        if (this.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            css(multiDragElement, 'position', 'absolute');\n          });\n          var dragRect = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRect);\n          });\n          folding = true;\n          initialFolding = true;\n        }\n      }\n      sortable.animateAll(function () {\n        folding = false;\n        initialFolding = false;\n        if (_this2.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n        }\n\n        // Remove all auxiliary multidrag items from el, if sorting enabled\n        if (_this2.options.sort) {\n          removeMultiDragElements();\n        }\n      });\n    },\n    dragOver: function dragOver(_ref8) {\n      var target = _ref8.target,\n        completed = _ref8.completed,\n        cancel = _ref8.cancel;\n      if (folding && ~multiDragElements.indexOf(target)) {\n        completed(false);\n        cancel();\n      }\n    },\n    revert: function revert(_ref9) {\n      var fromSortable = _ref9.fromSortable,\n        rootEl = _ref9.rootEl,\n        sortable = _ref9.sortable,\n        dragRect = _ref9.dragRect;\n      if (multiDragElements.length > 1) {\n        // Setup unfold animation\n        multiDragElements.forEach(function (multiDragElement) {\n          sortable.addAnimationState({\n            target: multiDragElement,\n            rect: folding ? getRect(multiDragElement) : dragRect\n          });\n          unsetRect(multiDragElement);\n          multiDragElement.fromRect = dragRect;\n          fromSortable.removeAnimationState(multiDragElement);\n        });\n        folding = false;\n        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref10) {\n      var sortable = _ref10.sortable,\n        isOwner = _ref10.isOwner,\n        insertion = _ref10.insertion,\n        activeSortable = _ref10.activeSortable,\n        parentEl = _ref10.parentEl,\n        putSortable = _ref10.putSortable;\n      var options = this.options;\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        }\n        initialFolding = false;\n        // If leaving sort:false root, or already folding - Fold to new location\n        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n          var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRectAbsolute);\n\n            // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n            parentEl.appendChild(multiDragElement);\n          });\n          folding = true;\n        }\n\n        // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n        if (!isOwner) {\n          // Only remove if not folding (folding will remove them anyways)\n          if (!folding) {\n            removeMultiDragElements();\n          }\n          if (multiDragElements.length > 1) {\n            var clonesHiddenBefore = clonesHidden;\n            activeSortable._showClone(sortable);\n\n            // Unfold animation for clones if showing from hidden\n            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n              multiDragClones.forEach(function (clone) {\n                activeSortable.addAnimationState({\n                  target: clone,\n                  rect: clonesFromRect\n                });\n                clone.fromRect = clonesFromRect;\n                clone.thisAnimationDuration = null;\n              });\n            }\n          } else {\n            activeSortable._showClone(sortable);\n          }\n        }\n      }\n    },\n    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n      var dragRect = _ref11.dragRect,\n        isOwner = _ref11.isOwner,\n        activeSortable = _ref11.activeSortable;\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.thisAnimationDuration = null;\n      });\n      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n        clonesFromRect = _extends({}, dragRect);\n        var dragMatrix = matrix(dragEl$1, true);\n        clonesFromRect.top -= dragMatrix.f;\n        clonesFromRect.left -= dragMatrix.e;\n      }\n    },\n    dragOverAnimationComplete: function dragOverAnimationComplete() {\n      if (folding) {\n        folding = false;\n        removeMultiDragElements();\n      }\n    },\n    drop: function drop(_ref12) {\n      var evt = _ref12.originalEvent,\n        rootEl = _ref12.rootEl,\n        parentEl = _ref12.parentEl,\n        sortable = _ref12.sortable,\n        dispatchSortableEvent = _ref12.dispatchSortableEvent,\n        oldIndex = _ref12.oldIndex,\n        putSortable = _ref12.putSortable;\n      var toSortable = putSortable || this.sortable;\n      if (!evt) return;\n      var options = this.options,\n        children = parentEl.children;\n\n      // Multi-drag selection\n      if (!dragStarted) {\n        if (options.multiDragKey && !this.multiDragKeyDown) {\n          this._deselectMultiDrag();\n        }\n        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n        if (!~multiDragElements.indexOf(dragEl$1)) {\n          multiDragElements.push(dragEl$1);\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'select',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n\n          // Modifier activated, select from last to dragEl\n          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n            var lastIndex = index(lastMultiDragSelect),\n              currentIndex = index(dragEl$1);\n            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n              (function () {\n                // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n                // (but previous selection existed)\n                var n, i;\n                if (currentIndex > lastIndex) {\n                  i = lastIndex;\n                  n = currentIndex;\n                } else {\n                  i = currentIndex;\n                  n = lastIndex + 1;\n                }\n                var filter = options.filter;\n                for (; i < n; i++) {\n                  if (~multiDragElements.indexOf(children[i])) continue;\n                  // Check if element is draggable\n                  if (!closest(children[i], options.draggable, parentEl, false)) continue;\n                  // Check if element is filtered\n                  var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n                    return closest(children[i], criteria.trim(), parentEl, false);\n                  }));\n                  if (filtered) continue;\n                  toggleClass(children[i], options.selectedClass, true);\n                  multiDragElements.push(children[i]);\n                  dispatchEvent({\n                    sortable: sortable,\n                    rootEl: rootEl,\n                    name: 'select',\n                    targetEl: children[i],\n                    originalEvent: evt\n                  });\n                }\n              })();\n            }\n          } else {\n            lastMultiDragSelect = dragEl$1;\n          }\n          multiDragSortable = toSortable;\n        } else {\n          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n          lastMultiDragSelect = null;\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'deselect',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n        }\n      }\n\n      // Multi-drag drop\n      if (dragStarted && this.isMultiDrag) {\n        folding = false;\n        // Do not \"unfold\" after around dragEl if reverted\n        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n          var dragRect = getRect(dragEl$1),\n            multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n          toSortable.captureAnimationState();\n          if (!initialFolding) {\n            if (options.animation) {\n              dragEl$1.fromRect = dragRect;\n              multiDragElements.forEach(function (multiDragElement) {\n                multiDragElement.thisAnimationDuration = null;\n                if (multiDragElement !== dragEl$1) {\n                  var rect = folding ? getRect(multiDragElement) : dragRect;\n                  multiDragElement.fromRect = rect;\n\n                  // Prepare unfold animation\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect\n                  });\n                }\n              });\n            }\n\n            // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n            // properly they must all be removed\n            removeMultiDragElements();\n            multiDragElements.forEach(function (multiDragElement) {\n              if (children[multiDragIndex]) {\n                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n              } else {\n                parentEl.appendChild(multiDragElement);\n              }\n              multiDragIndex++;\n            });\n\n            // If initial folding is done, the elements may have changed position because they are now\n            // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n            // must be fired here as Sortable will not.\n            if (oldIndex === index(dragEl$1)) {\n              var update = false;\n              multiDragElements.forEach(function (multiDragElement) {\n                if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n                  update = true;\n                  return;\n                }\n              });\n              if (update) {\n                dispatchSortableEvent('update');\n                dispatchSortableEvent('sort');\n              }\n            }\n          }\n\n          // Must be done after capturing individual rects (scroll bar)\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n          toSortable.animateAll();\n        }\n        multiDragSortable = toSortable;\n      }\n\n      // Remove clones if necessary\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        multiDragClones.forEach(function (clone) {\n          clone.parentNode && clone.parentNode.removeChild(clone);\n        });\n      }\n    },\n    nullingGlobal: function nullingGlobal() {\n      this.isMultiDrag = dragStarted = false;\n      multiDragClones.length = 0;\n    },\n    destroyGlobal: function destroyGlobal() {\n      this._deselectMultiDrag();\n      off(document, 'pointerup', this._deselectMultiDrag);\n      off(document, 'mouseup', this._deselectMultiDrag);\n      off(document, 'touchend', this._deselectMultiDrag);\n      off(document, 'keydown', this._checkKeyDown);\n      off(document, 'keyup', this._checkKeyUp);\n    },\n    _deselectMultiDrag: function _deselectMultiDrag(evt) {\n      if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n      // Only deselect if selection is in this sortable\n      if (multiDragSortable !== this.sortable) return;\n\n      // Only deselect if target is not item in this sortable\n      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n      // Only deselect if left click\n      if (evt && evt.button !== 0) return;\n      while (multiDragElements.length) {\n        var el = multiDragElements[0];\n        toggleClass(el, this.options.selectedClass, false);\n        multiDragElements.shift();\n        dispatchEvent({\n          sortable: this.sortable,\n          rootEl: this.sortable.el,\n          name: 'deselect',\n          targetEl: el,\n          originalEvent: evt\n        });\n      }\n    },\n    _checkKeyDown: function _checkKeyDown(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = true;\n      }\n    },\n    _checkKeyUp: function _checkKeyUp(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = false;\n      }\n    }\n  };\n  return _extends(MultiDrag, {\n    // Static methods & properties\n    pluginName: 'multiDrag',\n    utils: {\n      /**\r\n       * Selects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be selected\r\n       */\n      select: function select(el) {\n        var sortable = el.parentNode[expando];\n        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n        if (multiDragSortable && multiDragSortable !== sortable) {\n          multiDragSortable.multiDrag._deselectMultiDrag();\n          multiDragSortable = sortable;\n        }\n        toggleClass(el, sortable.options.selectedClass, true);\n        multiDragElements.push(el);\n      },\n      /**\r\n       * Deselects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be deselected\r\n       */\n      deselect: function deselect(el) {\n        var sortable = el.parentNode[expando],\n          index = multiDragElements.indexOf(el);\n        if (!sortable || !sortable.options.multiDrag || !~index) return;\n        toggleClass(el, sortable.options.selectedClass, false);\n        multiDragElements.splice(index, 1);\n      }\n    },\n    eventProperties: function eventProperties() {\n      var _this3 = this;\n      var oldIndicies = [],\n        newIndicies = [];\n      multiDragElements.forEach(function (multiDragElement) {\n        oldIndicies.push({\n          multiDragElement: multiDragElement,\n          index: multiDragElement.sortableIndex\n        });\n\n        // multiDragElements will already be sorted if folding\n        var newIndex;\n        if (folding && multiDragElement !== dragEl$1) {\n          newIndex = -1;\n        } else if (folding) {\n          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n        } else {\n          newIndex = index(multiDragElement);\n        }\n        newIndicies.push({\n          multiDragElement: multiDragElement,\n          index: newIndex\n        });\n      });\n      return {\n        items: _toConsumableArray(multiDragElements),\n        clones: [].concat(multiDragClones),\n        oldIndicies: oldIndicies,\n        newIndicies: newIndicies\n      };\n    },\n    optionListeners: {\n      multiDragKey: function multiDragKey(key) {\n        key = key.toLowerCase();\n        if (key === 'ctrl') {\n          key = 'Control';\n        } else if (key.length > 1) {\n          key = key.charAt(0).toUpperCase() + key.substr(1);\n        }\n        return key;\n      }\n    }\n  });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n  multiDragElements.forEach(function (multiDragElement, i) {\n    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(multiDragElement, target);\n    } else {\n      rootEl.appendChild(multiDragElement);\n    }\n  });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\r\n * @param  {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n  multiDragClones.forEach(function (clone, i) {\n    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(clone, target);\n    } else {\n      rootEl.appendChild(clone);\n    }\n  });\n}\nfunction removeMultiDragElements() {\n  multiDragElements.forEach(function (multiDragElement) {\n    if (multiDragElement === dragEl$1) return;\n    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n  });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n", "import {Controller} from '@hotwired/stimulus'\nimport Sortable from 'sortablejs'\n\nexport default class extends Controller {\n    static values = {\n        handleClass: {type: String, default: 'handle'},\n        sortableGroup: String\n    }\n\n    initialize() {\n        this.onEnd = this.onEnd.bind(this)\n        this.onMove = this.onMove.bind(this)\n    }\n\n    connect() {\n        this._sortable = this._initSortable(this.element)\n    }\n\n    _initSortable(element) {\n        return Sortable.create(element, {\n            tutorizeSortable: true,\n            handle: `.${this.handleClassValue}`,\n            onEnd: this.onEnd,\n            onMove: this.onMove,\n            group: this.sortableGroupValue,\n            fallbackOnBody: true,\n            swapThreshold: 0.65,\n            emptyInsertThreshold: 5,\n            forceFallback: true\n        })\n    }\n\n    onEnd(event) {\n        this.element.dispatchEvent(new CustomEvent('dragDrop.onDrop', {bubbles: true}))\n\n        const draggedElement = event.item\n        const url = draggedElement.dataset.moveUrl\n        if (!url) return\n\n        let data = new FormData()\n        const target = event.to\n        const position = event.newIndex.toString()\n        data.append('move[new_position]', position)\n        if (draggedElement.dataset.id) data.append('move[id]', draggedElement.dataset.id)\n        if (target.dataset.parentId) data.append('move[new_parent_id]', target.dataset.parentId)\n\n        Rails.ajax({\n            type: 'PATCH', url, data, error: (_response, _statusText, _xhr) => {\n                this._revert(draggedElement, event.oldIndex)\n            }\n        })\n    }\n\n    onMove(event) {\n        if (event.dragged.getAttribute('data-not-nestable') === 'true') {\n            return !!event.to.getAttribute('data-sortable-root-container')\n        }\n        return true\n    }\n\n    _revert(el, oldIndex) {\n        let nextSibling = Sortable.utils.getChild(this._sortable.el, oldIndex, {}, false)\n\n        if (nextSibling) {\n            this._sortable.el.insertBefore(el, nextSibling)\n        } else {\n            this._sortable.el.appendChild(el)\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {Dropdown} from 'bootstrap'\n\nexport default class extends Controller {\n    connect() {\n        new Dropdown(this.element, {\n            boundary: document.body,\n            reference: 'toggle',\n            popperConfig(defaultBsPopperConfig) {\n                return {...defaultBsPopperConfig, strategy: 'fixed'}\n            }\n        })\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nimport {TutorizeClassicEditor} from 'ckeditor5'\nimport 'ckeditor5/build/translations/de'\nimport 'ckeditor5/build/translations/es'\nimport 'ckeditor5/build/translations/fr'\nimport {TutorizeUploadAdapterPlugin} from '../components/ckeditor/upload_adapter'\nimport {debounce} from 'debounce'\nimport {mentionItemRenderer, MentionCustomization} from '../components/ckeditor/mentions'\n\nexport default class extends Controller {\n    static values = {\n        mediaFileUploadEnabled: Boolean,\n        mediaFileUploadEndpoint: String,\n        mediaFileUploadAllowedFileTypes: String,\n        mediaFileUploadMaxFileSize: Number,\n        mediaFileUploadMediaPoolUrl: String,\n        mediaFileUploadTooltipText: String,\n        htmlAllowedTags: String,\n        htmlAllowedAttrs: String,\n        height: Number,\n        maxHeight: Number,\n        tablesEnabled: Boolean,\n        mediaEmbedEnabled: Boolean,\n        required: Boolean,\n        maxlength: Number,\n        minlength: Number,\n        requiredMsg: String,\n        minlengthMsg: String,\n        maxlengthMsg: String,\n        bubbleChangeDataEvent: Boolean,\n        mentionUrl: String\n    }\n\n    initialize() {\n        this._handleChangeDataEvent = debounce(this._handleChangeDataEvent.bind(this), 500)\n        this._handleValidationError = debounce(this._handleValidationError.bind(this), 500)\n        super.initialize()\n    }\n\n    connect() {\n        TutorizeClassicEditor\n            .create(this.element, this._editorOptions)\n            .then(editor => {\n                this._setupEditor(editor)\n                this.element.editorInstance = editor;\n            });\n\n        this.element['editor'] = {\n            setBackgroundImage: this.setBackgroundImage.bind(this)\n        }\n    }\n\n    disconnect() {\n        this.editor.destroy()\n    }\n\n    setBackgroundImage(backgroundImageUrl, opacity) {\n        opacity = typeof opacity === 'undefined' ? 0 : opacity\n        this.editor.editing.view.change(writer => {\n            const editorDocumentRoot = this.editor.editing.view.document.getRoot()\n            writer.setStyle('background-color', `rgba(255, 255, 255, ${opacity}) !important`, editorDocumentRoot)\n            const main = this.element.parentElement.querySelector('.ck-editor__background_image_wrapper')\n            if (!main) return\n\n            if (backgroundImageUrl && backgroundImageUrl.length > 0) {\n                main.style.backgroundImage = `url(\"${backgroundImageUrl}\")`\n            } else {\n                main.style.backgroundImage = ''\n            }\n        })\n    }\n\n    get _editorOptions() {\n        return {\n            licenseKey: 'c1pTOU9jbmhMZ0M3TVhobUFTYVJRQXlkMmtrS0l4Q3JNd0FTZDJBdGlnTkJ1R2xqRmZJUi1NakF5TlRBNE16QT0=',\n            language: document.documentElement.lang,\n            extraPlugins: this._extraPlugins,\n            removePlugins: this._removePlugins,\n            mediaFileUpload: this._mediaFileUploadOptions,\n            mediaFileEmbed: this._mediaFileEmbedOptions,\n            mention: this._mentionOptions,\n            toolbar: {\n                shouldNotGroupWhenFull: true,\n                items: this._enabledToolbarItems\n            },\n            ui: {\n                viewportOffset: {\n                    top: 54\n                }\n            }\n        }\n    }\n\n    _setupEditor(editor) {\n        this.editor = editor\n        this._setHeight()\n        this._setupWordCount()\n        this._setupValidations()\n        this._setupChangeDataEvent()\n    }\n\n    _setHeight() {\n        const height = this.heightValue || 500\n        const maxHeight = this.maxHeightValue || 800\n        this.editor.editing.view.change(writer => {\n            const editorDocumentRoot = this.editor.editing.view.document.getRoot()\n            writer.setStyle('min-height', `${height}px`, editorDocumentRoot)\n            writer.setStyle('max-height', `${maxHeight}px`, editorDocumentRoot)\n        })\n    }\n\n    _setupWordCount() {\n        const wordCountPlugin = this.editor.plugins.get('WordCount')\n        if (!wordCountPlugin) return\n\n        const parent = this.element.parentElement\n        const editor_wrapper = parent.querySelector('div.ck.ck-editor')\n        if (!editor_wrapper) return\n\n        this.element.parentElement.insertBefore(wordCountPlugin.wordCountContainer, editor_wrapper.nextSibling)\n    }\n\n    get _shouldValidate() {\n        return !!this.maxlengthValue || !!this.minlengthValue || !!this.required\n    }\n\n    _setupValidations() {\n        if (!this._shouldValidate) return\n\n        this._validationInput = this._buildValidationInput()\n        const container = this.editor.plugins.get('WordCount').wordCountContainer\n        container.appendChild(this._validationInput)\n\n        this.element.form.addEventListener('submit', e => {\n            if (!this._validateError()) {\n                e.preventDefault()\n                e.stopPropagation()\n                return false\n            } else {\n                this._validationInput.remove()\n            }\n        })\n    }\n\n    _handleValidationError(_event) {\n        this._validateError()\n    }\n\n    _validateError() {\n        const dataLength = this.editor.getData().length\n\n        if (this.requiredValue && dataLength === 0) {\n            this._validationInput.setCustomValidity(this.requiredMsgValue)\n            this._validationInput.reportValidity()\n            return false\n        } else if (this.maxlengthValue && dataLength > this.maxlengthValue) {\n            this._validationInput.setCustomValidity(this.maxlengthMsgValue)\n            this._validationInput.reportValidity()\n            return false\n        } else if (this.minlengthValue && dataLength < this.minlengthValue) {\n            this._validationInput.setCustomValidity(this.minlengthMsgValue)\n            this._validationInput.reportValidity()\n            return false\n        } else {\n            this._validationInput.setCustomValidity('')\n            return true\n        }\n    }\n\n    _setupChangeDataEvent() {\n        this.editor.model.document.on('change:data', (event) => {\n            if (this._shouldValidate) this._handleValidationError(event)\n            if (this.bubbleChangeDataEventValue === true) this._handleChangeDataEvent(event)\n\n            this.element.form.dispatchEvent(new CustomEvent('change'))\n        })\n    }\n\n    _handleChangeDataEvent(_event) {\n        this.element.dispatchEvent(\n            new CustomEvent('editor.change:data', {\n                bubbles: true,\n                detail: {\n                    data: this.editor.getData()\n                }\n            })\n        )\n    }\n\n    _buildValidationInput() {\n        const name = `${this.element.getAttribute('name')}_validation`\n        const validationInput = document.createElement('input')\n        validationInput.setAttribute('type', 'text')\n        validationInput.setAttribute('tabindex', '-1')\n        validationInput.setAttribute('name', name)\n        validationInput.classList.add('visually-hidden')\n\n        validationInput.addEventListener('focus', () => this.editor.editing.view.focus())\n\n        return validationInput\n    }\n\n    _insertFile(e) {\n        const file = e.detail\n\n        if (['document', 'video'].includes(file.type)) {\n            this.editor.model.change(writer => {\n                const mediaFileEmbed = writer.createElement('mediaFileEmbed', {\n                    'data-media-file-json': JSON.stringify(file),\n                })\n                this.editor.model.insertContent(mediaFileEmbed, this.editor.model.document.selection)\n            })\n        } else if (file.type === 'image') {\n            this.editor.model.change(writer => {\n                const element = writer.createElement('imageBlock', {src: file.download_url})\n                this.editor.model.insertContent(element, this.editor.model.document.selection)\n            })\n        } else {\n            this.editor.model.change(writer => {\n                const element = writer.createText(file.name)\n                writer.setAttribute('linkHref', file.download_url, element)\n                this.editor.model.insertContent(element, this.editor.model.document.selection)\n            })\n        }\n    }\n\n    get _mediaFileUploadOptions() {\n        if (!this._fileUploadEnabled) return {}\n\n        const directUploads = buildDirectUploadsElement({\n            endpoint: this.mediaFileUploadEndpointValue,\n            allowedFileTypes: this.mediaFileUploadAllowedFileTypesValue,\n            maxFileSize: this.mediaFileUploadMaxFileSizeValue,\n            mediaPoolUrl: this.mediaFileUploadMediaPoolUrlValue,\n            tooltipText: this.mediaFileUploadTooltipTextValue,\n            imageUrl: this.mediaFileUploadImageUrlValue\n        })\n\n        directUploads.addEventListener('fileUploaded', e => this._insertFile(e))\n\n        return {directUploads}\n    }\n\n    get _mediaFileEmbedOptions() {\n        if (!this._fileUploadEnabled) return {}\n\n        return {\n            editingDowncast: mediaFileEmbedEditingDowncast\n        }\n    }\n\n    get _mentionOptions() {\n        if (!this._mentionsEnabled) return {}\n\n        return {\n            // dropdownLimit: 4,\n            feeds: [\n                {\n                    marker: '@',\n                    feed: query => {\n                        const url = this.mentionUrlValue + '?q=' + query\n                        return fetch(url).then(r => r.json()).then(json => json.results)\n                    },\n                    itemRenderer: mentionItemRenderer\n                }\n            ]\n        }\n    }\n\n    get _mentionsEnabled() {\n        return this.hasMentionUrlValue\n    }\n\n    get _fileUploadEnabled() {\n        return !!this.mediaFileUploadEnabledValue\n    }\n\n    get _tablesEnabled() {\n        return !!this.tablesEnabledValue\n    }\n\n    get _mediaEmbedEnabled() {\n        return !!this.mediaEmbedEnabledValue\n    }\n\n    get _extraPlugins() {\n        const plugins = []\n\n        if (this._fileUploadEnabled) {\n            const url = this.mediaFileUploadEndpointValue\n            const tutorizeUpload = function (editor) {\n                return TutorizeUploadAdapterPlugin(editor, url)\n            }\n            plugins.push(tutorizeUpload)\n        }\n\n        if (this._mentionsEnabled) {\n            plugins.push(MentionCustomization)\n        }\n\n        return plugins\n    }\n\n    get _removePlugins() {\n        let removePlugins = []\n\n        if (!this._tablesEnabled) {\n            removePlugins.push('Table')\n            removePlugins.push('TableToolbar')\n            removePlugins.push('TableProperties')\n            removePlugins.push('TableCellProperties')\n        }\n\n        if (!this._fileUploadEnabled) {\n            removePlugins.push('Image')\n            removePlugins.push('ImageBlock')\n            removePlugins.push('ImageCaption')\n            removePlugins.push('ImageInline')\n            removePlugins.push('ImageResize')\n            removePlugins.push('ImageStyle')\n            removePlugins.push('ImageToolbar')\n            removePlugins.push('ImageUpload')\n            removePlugins.push('MediaEmbed')\n            removePlugins.push('TutorizeMediaUpload')\n        }\n\n        if (!this._mediaEmbedEnabled) {\n            removePlugins.push('MediaEmbed')\n        }\n\n        return removePlugins\n    }\n\n    get _enabledToolbarItems() {\n        let items = [\n            'heading',\n            'fontSize',\n            'fontColor',\n            'fontBackgroundColor',\n            '|',\n            'bold',\n            'italic',\n            'underline',\n            'strikethrough',\n            '|',\n            'alignment',\n            'bulletedList',\n            'numberedList',\n            'outdent',\n            'indent',\n            '|',\n            'link',\n            'removeFormat',\n            'undo',\n            'redo'\n        ]\n\n        if (this._fileUploadEnabled) items.splice(17, 0, 'tutorizeMediaUpload')\n        if (this._tablesEnabled) items.splice(17, 0, 'insertTable')\n\n        return items\n    }\n}\n\nfunction buildDirectUploadsElement(opts) {\n    const directUploadsWrapper = document.createElement('div')\n    directUploadsWrapper.setAttribute('data-controller', 'direct-upload')\n    directUploadsWrapper.setAttribute('data-direct-upload-target', 'dragDrop')\n    directUploadsWrapper.setAttribute('data-direct-upload-endpoint', opts.endpoint)\n    directUploadsWrapper.setAttribute('data-direct-upload-allowed-file-types', opts.allowedFileTypes)\n    directUploadsWrapper.setAttribute('data-direct-upload-max-file-size', opts.maxFileSize)\n    directUploadsWrapper.setAttribute('data-direct-upload-media-pool-url', opts.mediaPoolUrl)\n    directUploadsWrapper.setAttribute('data-direct-upload-tooltip-text', opts.tooltipText)\n    directUploadsWrapper.classList.add('uppy-DragDrop-container')\n    directUploadsWrapper.classList.add('uppy-DragDrop--is-dragdrop-supported')\n\n    const fileInputWrapper = document.createElement('div')\n    fileInputWrapper.setAttribute('data-direct-upload-target', 'fileInput')\n    fileInputWrapper.classList.add('inline-block')\n    directUploadsWrapper.appendChild(fileInputWrapper)\n\n    const mediaFileIdInput = document.createElement('input')\n    mediaFileIdInput.setAttribute('data-direct-upload-target', 'fieldFileID')\n    mediaFileIdInput.setAttribute('type', 'hidden')\n    mediaFileIdInput.setAttribute('name', 'media_file_id_input')\n    directUploadsWrapper.appendChild(mediaFileIdInput)\n\n    const statusBar = document.createElement('div')\n    statusBar.setAttribute('data-direct-upload-target', 'statusBar')\n    directUploadsWrapper.appendChild(statusBar)\n\n    return directUploadsWrapper\n}\n\nconst mediaFileEmbedEditingDowncast = (modelElement, writer) => {\n    const raw = modelElement.getAttribute('data-media-file-json')\n    const json = JSON.parse(raw)\n\n    const label = writer.createText(`${json.file_name} (${json.type_translation})`)\n    const labelWrapper = writer.createContainerElement('div', {class: 'bg-gray-200 p-2'}, [label])\n    let children = [labelWrapper]\n\n    switch (json.type) {\n        case 'video':\n            const sources = json.video.filter(src => (src.endsWith('.mp4'))).map(src => (writer.createEmptyElement('source', {src})))\n            const video = writer.createContainerElement('video', {\n                style: \"width: 100%; height: 100%\"\n            }, sources)\n            children.push(video)\n            break\n        case 'document':\n            let data = json.document[0]\n            const obj = writer.createEmptyElement('object', {\n                data,\n                type: 'application/pdf',\n                style: 'width:100%; height:60vh;'\n            })\n            children.push(obj)\n            break\n        default:\n            break\n    }\n\n    const div = writer.createContainerElement('div', {}, children)\n    const figure = writer.createContainerElement('figure', {class: 'media ck-widget'}, [div])\n    return figure\n}\n", "!function(e){const n=e.de=e.de||{};n.dictionary=Object.assign(n.dictionary||{},{\"(may require <kbd>Fn</kbd>)\":\"(erfordert gegebenenfalls <kbd>Fn</kbd>)\",\"%0 of %1\":\"%0 von %1\",Accept:\"Akzeptieren\",Accessibility:\"Bedienungshilfen\",\"Accessibility help\":\"Hilfe zur Eingabe\",\"Align cell text to the bottom\":\"Zellentext unten ausrichten\",\"Align cell text to the center\":\"Zellentext zentriert ausrichten\",\"Align cell text to the left\":\"Zellentext linksb\u00FCndig ausrichten\",\"Align cell text to the middle\":\"Zellentext mittig ausrichten\",\"Align cell text to the right\":\"Zellentext rechtsb\u00FCndig ausrichten\",\"Align cell text to the top\":\"Zellentext oben ausrichten\",\"Align center\":\"Zentriert\",\"Align left\":\"Linksb\u00FCndig\",\"Align right\":\"Rechtsb\u00FCndig\",\"Align table to the left\":\"Tabelle links ausrichten\",\"Align table to the right\":\"Tabelle rechts ausrichten\",Alignment:\"Ausrichtung\",Aquamarine:\"Aquamarinblau\",Background:\"Hintergrund\",\"Below, you can find a list of keyboard shortcuts that can be used in the editor.\":\"Unten finden Sie eine Liste mit Tastenkombinationen, die im Editor benutzt werden k\u00F6nnen.\",Big:\"Gro\u00DF\",Black:\"Schwarz\",Blue:\"Blau\",Bold:\"Fett\",\"Bold text\":\"Fettschrift\",Border:\"Rahmen\",\"Break text\":\"Bild teilt Text\",\"Bulleted List\":\"Aufz\u00E4hlungsliste\",Cancel:\"Abbrechen\",\"Caption for image: %0\":\"Bildunterschrift: %0\",\"Caption for the image\":\"Bildunterschrift\",\"Cell properties\":\"Zelleneigenschaften\",\"Center table\":\"Tabelle zentrieren\",\"Centered image\":\"Zentriertes Bild\",\"Change image text alternative\":\"Alternativtext \u00E4ndern\",\"Characters: %0\":\"Zeichen: %0 \",\"Choose heading\":\"\u00DCberschrift ausw\u00E4hlen\",Clear:\"L\u00F6schen\",\"Click to edit block\":\"Zum Bearbeiten des Blocks klicken\",Close:\"Schlie\u00DFen\",\"Close contextual balloons, dropdowns, and dialogs\":\"Kontextsprechblasen, Dropdown-Men\u00FC und Dialoge schlie\u00DFen\",Color:\"Farbe\",\"Color picker\":\"Farbw\u00E4hler\",Column:\"Spalte\",\"Content editing keystrokes\":\"Tastatureingaben zur Inhaltsverarbeitung\",\"Copy selected content\":\"Markierten Inhalt kopieren\",\"Create link\":\"Link erstellen\",Custom:\"Benutzerdefiniert\",\"Custom image size\":\"Benutzerdefinierte Bildgr\u00F6\u00DFe\",Dashed:\"Gestrichelt\",\"Decrease indent\":\"Einzug verkleinern\",\"Decrease list item indent\":\"Listeneinzug verkleinern\",Default:\"Standard\",\"Delete column\":\"Spalte l\u00F6schen\",\"Delete row\":\"Zeile l\u00F6schen\",\"Dim grey\":\"Dunkelgrau\",Dimensions:\"Gr\u00F6\u00DFe\",\"Document colors\":\"Dokumentfarben\",Dotted:\"Gepunktet\",Double:\"Doppelt\",Downloadable:\"Herunterladbar\",\"Drag to move\":\"Zum Verschieben ziehen\",\"Dropdown menu\":\"Dropdown-Men\u00FC\",\"Dropdown toolbar\":\"Dropdown-Liste Werkzeugleiste\",\"Edit block\":\"Absatz bearbeiten\",\"Edit link\":\"Link bearbeiten\",\"Editor block content toolbar\":\"Editor Blockinhalt-Toolbar\",\"Editor contextual toolbar\":\"Editor kontextuelle Toolbar\",\"Editor dialog\":\"Editor-Dialog\",\"Editor menu bar\":\"Men\u00FCleiste des Editors\",\"Editor toolbar\":\"Editor Werkzeugleiste\",\"Enter image caption\":\"Bildunterschrift eingeben\",\"Error during image upload\":\"Fehler beim Hochladen des Bildes\",\"Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.\":\"Ausf\u00FChren der aktuell fokussierten Schaltfl\u00E4che. Das Ausf\u00FChren von Schaltfl\u00E4chen, die mit dem Inhalt des Editors interagieren, richtet den Fokus zur\u00FCck auf den Inhalt.\",\"Font Background Color\":\"Hintergrundfarbe\",\"Font Color\":\"Schriftfarbe\",\"Font Family\":\"Schriftart\",\"Font Size\":\"Schriftgr\u00F6\u00DFe\",\"From computer\":\"Vom Computer\",\"Full size image\":\"Bild in voller Gr\u00F6\u00DFe\",Green:\"Gr\u00FCn\",Grey:\"Grau\",Groove:\"Eingeritzt\",\"Header column\":\"Kopfspalte\",\"Header row\":\"Kopfzeile\",Heading:\"\u00DCberschrift\",\"Heading 1\":\"\u00DCberschrift 1\",\"Heading 2\":\"\u00DCberschrift 2\",\"Heading 3\":\"\u00DCberschrift 3\",\"Heading 4\":\"\u00DCberschrift 4\",\"Heading 5\":\"\u00DCberschrift 5\",\"Heading 6\":\"\u00DCberschrift 6\",Height:\"H\u00F6he\",\"Help Contents. To close this dialog press ESC.\":\"Hilfe zum Inhalt. Dr\u00FCcken Sie die Esc-Taste, um dieses Dialogfenster zu schlie\u00DFen.\",HEX:\"HEX\",\"Horizontal text alignment toolbar\":\"Werkzeugleiste f\u00FCr die horizontale Zellentext-Ausrichtung\",Huge:\"Sehr gro\u00DF\",Image:\"Bild\",\"Image from computer\":\"Bild vom Computer\",\"Image resize list\":\"Bildgr\u00F6\u00DFen-Liste\",\"Image toolbar\":\"Bild Werkzeugleiste\",\"Image upload complete\":\"Bild erfolgreich hochgeladen\",\"image widget\":\"Bild-Steuerelement\",\"In line\":\"Text in Zeile\",\"Increase indent\":\"Einzug vergr\u00F6\u00DFern\",\"Increase list item indent\":\"Listeneinzug vergr\u00F6\u00DFern\",\"Insert a hard break (a new paragraph)\":\"Zeilenumbruch einf\u00FCgen (einen neuen Abschnitt)\",\"Insert a new paragraph directly after a widget\":\"Einen neuen Abschnitt direkt nach einem Widget einf\u00FCgen\",\"Insert a new paragraph directly before a widget\":\"Einen neuen Abschnitt direkt vor einem Widget einf\u00FCgen\",\"Insert a new table row (when in the last cell of a table)\":\"Eine neue Tabellenspalte einf\u00FCgen (wenn in der letzten Tabellenzelle)\",\"Insert a soft break (a <code>&lt;br&gt;</code> element)\":\"Einen weichen Zeilenumbruch einf\u00FCgen (ein <code>&lt;br&gt;</code>-Element)\",\"Insert column left\":\"Spalte links einf\u00FCgen\",\"Insert column right\":\"Spalte rechts einf\u00FCgen\",\"Insert image\":\"Bild einf\u00FCgen\",\"Insert media\":\"Medium einf\u00FCgen\",\"Insert paragraph after block\":\"Absatz nach Block einf\u00FCgen\",\"Insert paragraph before block\":\"Absatz vor Block einf\u00FCgen\",\"Insert row above\":\"Zeile oben einf\u00FCgen\",\"Insert row below\":\"Zeile unten einf\u00FCgen\",\"Insert table\":\"Tabelle einf\u00FCgen\",Inset:\"Eingelassen\",Italic:\"Kursiv\",\"Italic text\":\"Kursivschrift\",Justify:\"Blocksatz\",\"Justify cell text\":\"Zellentext als Blocksatz ausrichten\",\"Keystrokes that can be used in a list\":\"Tastatureingaben, die in einer Liste verwendet werden k\u00F6nnen.\",\"Keystrokes that can be used in a table cell\":\"Tastatureingaben, die in einer Tabelle benutz werden k\u00F6nnen.\",\"Keystrokes that can be used when a widget is selected (for example: image, table, etc.)\":\"Tastatureingaben, die verwendet werden k\u00F6nnen, wenn ein Widget ausgew\u00E4hlt wurde (zum Beispiel: Bilder, Tabellen etc.)\",\"Left aligned image\":\"Linksb\u00FCndiges Bild\",\"Light blue\":\"Hellblau\",\"Light green\":\"Hellgr\u00FCn\",\"Light grey\":\"Hellgrau\",Link:\"Link\",\"Link URL\":\"Linkadresse\",\"Link URL must not be empty.\":\"Die Link-URL darf nicht leer sein.\",Media:\"Medien\",\"Media URL\":\"Medien-URL\",\"media widget\":\"Medien-Widget\",MENU_BAR_MENU_EDIT:\"Bearbeiten\",MENU_BAR_MENU_FILE:\"Datei\",MENU_BAR_MENU_FONT:\"Schriftart\",MENU_BAR_MENU_FORMAT:\"Format\",MENU_BAR_MENU_HELP:\"Hilfe\",MENU_BAR_MENU_INSERT:\"Einf\u00FCgen\",MENU_BAR_MENU_TEXT:\"Text\",MENU_BAR_MENU_TOOLS:\"Werkzeuge\",MENU_BAR_MENU_VIEW:\"Anzeigen\",\"Merge cell down\":\"Zelle unten verbinden\",\"Merge cell left\":\"Zelle links verbinden\",\"Merge cell right\":\"Zelle rechts verbinden\",\"Merge cell up\":\"Zelle verbinden\",\"Merge cells\":\"Zellen verbinden\",\"Move focus between form fields (inputs, buttons, etc.)\":\"Fokus zwischen Formularfeldern verschieben (Eingaben, Tastenfelder etc.)\",\"Move focus from an editable area back to the parent widget\":\"Bewegen Sie den Fokus von einem bearbeitbaren Bereich zur\u00FCck zum \u00FCbergeordneten Widget\",\"Move focus in and out of an active dialog window\":\"Fokus auf ein aktives Dialogfenster richten oder aufheben\",\"Move focus to the menu bar, navigate between menu bars\":\"Fokus auf die Men\u00FCleiste richten, zwischen Men\u00FCleisten navigieren\",\"Move focus to the toolbar, navigate between toolbars\":\"Fokus auf die Symbolleiste verschieben, zwischen den Symbolleisten navigieren\",\"Move out of a link\":\"Linkauswahl aufheben\",\"Move the caret to allow typing directly after a widget\":\"Verschieben Sie den Textcursor, um die direkte Eingabe nach dem Widget zu erlauben\",\"Move the caret to allow typing directly before a widget\":\"Verschieben Sie den Textcursor, um die Eingabe direkt nach dem Widget zu erlauben\",\"Move the selection to the next cell\":\"Auswahl in die n\u00E4chste Zelle verschieben\",\"Move the selection to the previous cell\":\"Auswahl in die vorherige Zelle verschieben\",\"Navigate through the table\":\"Tabellennavigation\",\"Navigate through the toolbar or menu bar\":\"Durch die Werkzeugleiste oder Men\u00FCleiste navigieren\",Next:\"N\u00E4chste\",\"No results found\":\"Keine Ergebnisse gefunden\",\"No searchable items\":\"Keine durchsuchbaren Elemente\",None:\"Kein Rahmen\",\"Numbered List\":\"Nummerierte Liste\",\"Open in a new tab\":\"In neuem Tab \u00F6ffnen\",\"Open link in new tab\":\"Link im neuen Tab \u00F6ffnen\",\"Open media in new tab\":\"Medien in neuem Tab \u00F6ffnen\",\"Open the accessibility help dialog\":\"Den Dialog zur Eingabehilfe \u00F6ffnen\",Orange:\"Orange\",Original:\"Original\",Outset:\"Gepr\u00E4gt\",Padding:\"Innenabstand\",Paragraph:\"Absatz\",\"Paste content\":\"Inhalt einf\u00FCgen\",\"Paste content as plain text\":\"Inhalt als Klartext einf\u00FCgen\",\"Paste the media URL in the input.\":\"Medien-URL in das Eingabefeld einf\u00FCgen.\",'Please enter a valid color (e.g. \"ff0000\").':\"Bitte geben Sie eine g\u00FCltige Farbe ein (z. B. \u201Eff0000\u201C).\",\"Press %0 for help.\":\"Dr\u00FCcken Sie %0 f\u00FCr Hilfe.\",\"Press Enter to type after or press Shift + Enter to type before the widget\":\"Dr\u00FCcken Sie die Eingabetaste, um nach dem Widget zu tippen oder Shift + Eingabetaste, um vor dem Widget zu tippen.\",Previous:\"vorherige\",Purple:\"Violett\",Red:\"Rot\",Redo:\"Wiederherstellen\",\"Remove color\":\"Farbe entfernen\",\"Remove Format\":\"Formatierung entfernen\",\"Replace from computer\":\"Vom Computer ersetzen\",\"Replace image\":\"Bild ersetzen\",\"Replace image from computer\":\"Bild vom Computer ersetzen\",\"Resize image\":\"Bildgr\u00F6\u00DFe \u00E4ndern\",\"Resize image (in %0)\":\"Bildgr\u00F6\u00DFe \u00E4ndern (in %0)\",\"Resize image to %0\":\"Bildgr\u00F6\u00DFe \u00E4ndern in %0\",\"Resize image to the original size\":\"Bild in Originalgr\u00F6\u00DFe \u00E4ndern\",\"Restore default\":\"Standard wiederherstellen\",\"Rich Text Editor\":\"Rich Text Editor\",\"Rich Text Editor. Editing area: %0\":\"Rich Text Editor. Bearbeitungsbereich: %0\",Ridge:\"Hervorgehoben\",\"Right aligned image\":\"Rechtsb\u00FCndiges Bild\",Row:\"Zeile\",Save:\"Speichern\",\"Select all\":\"Alles ausw\u00E4hlen\",\"Select column\":\"Spalte ausw\u00E4hlen\",\"Select row\":\"Zeile ausw\u00E4hlen\",\"Show more items\":\"Mehr anzeigen\",\"Side image\":\"Seitenbild\",Small:\"Klein\",Solid:\"Durchgezogen\",\"Split cell horizontally\":\"Zelle horizontal teilen\",\"Split cell vertically\":\"Zelle vertikal teilen\",Strikethrough:\"Durchgestrichen\",\"Strikethrough text\":\"Durchgestrichener Text\",Style:\"Rahmenart\",Table:\"Tabelle\",\"Table alignment toolbar\":\"Werkzeugleiste f\u00FCr die Tabellen-Ausrichtung\",\"Table cell text alignment\":\"Ausrichtung des Zellentextes\",\"Table properties\":\"Tabelleneigenschaften\",\"Table toolbar\":\"Tabelle Werkzeugleiste\",\"Text alignment\":\"Textausrichtung\",\"Text alignment toolbar\":\"Text-Ausrichtung Toolbar\",\"Text alternative\":\"Alternativtext\",'The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".':\"Die Farbe ist ung\u00FCltig. Probieren Sie \u201E#FF0000\u201C oder \u201Ergb(255,0,0)\u201C oder \u201Ered\u201C.\",\"The URL must not be empty.\":\"Die URL darf nicht leer sein.\",'The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".':\"Der Wert ist ung\u00FCltig. Probieren Sie \u201E10px\u201C oder \u201E2em\u201C oder \u201E2\u201C.\",\"The value must not be empty.\":\"Der Wert darf nicht leer sein.\",\"The value should be a plain number.\":\"Der Wert sollte eine einfache Zahl sein.\",\"These keyboard shortcuts allow for quick access to content editing features.\":\"Diese Tastenkombinationen erm\u00F6glichen einen schnellen Zugang zu den Inhaltsverarbeitungsfunktionen.\",\"This link has no URL\":\"Dieser Link hat keine Adresse\",\"This media URL is not supported.\":\"Diese Medien-URL wird nicht unterst\u00FCtzt.\",Tiny:\"Sehr klein\",\"Tip: Paste the URL into the content to embed faster.\":\"Tipp: Zum schnelleren Einbetten k\u00F6nnen Sie die Medien-URL in den Inhalt einf\u00FCgen.\",\"Toggle caption off\":\"Tabellen\u00FCberschrift deaktivieren\",\"Toggle caption on\":\"Tabellen\u00FCberschrift aktivieren\",Turquoise:\"T\u00FCrkis\",Underline:\"Unterstrichen\",\"Underline text\":\"Text hervorheben\",Undo:\"R\u00FCckg\u00E4ngig\",Unlink:\"Link entfernen\",\"Upload failed\":\"Hochladen fehlgeschlagen\",\"Upload from computer\":\"Vom Computer hochladen\",\"Upload image from computer\":\"Bild vom Computer hochladen\",\"Upload in progress\":\"Upload l\u00E4uft\",\"Uploading image\":\"Bild hochladen\",\"Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.\":\"Verwenden Sie die folgenden Tastatureingaben f\u00FCr eine effizientere Navigation auf der CKEditor-5-Benutzeroberfl\u00E4che.\",\"User interface and content navigation keystrokes\":\"Benutzeroberfl\u00E4che und Inhaltsnavigationstasten\",\"Vertical text alignment toolbar\":\"Werkzeugleiste f\u00FCr die vertikale Zellentext-Ausrichtung\",White:\"Wei\u00DF\",\"Widget toolbar\":\"Widget Werkzeugleiste\",Width:\"Breite\",\"Words: %0\":\"W\u00F6rter: %0 \",\"Wrap text\":\"Text umflie\u00DFt Bild\",Yellow:\"Gelb\",\"You have no image upload permissions.\":\"Sie haben keine Berechtigung zum Hochladen von Bildern.\"}),n.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));", "!function(e){const a=e.es=e.es||{};a.dictionary=Object.assign(a.dictionary||{},{\"(may require <kbd>Fn</kbd>)\":\"(puede requerir <kbd>Fn</kbd>)\",\"%0 of %1\":\"%0 de %1\",Accept:\"Aceptar\",Accessibility:\"Accesibilidad\",\"Accessibility help\":\"Ayuda de accesibilidad\",\"Align cell text to the bottom\":\"Alinear texto de celda hacia abajo\",\"Align cell text to the center\":\"Centrar texto de celda\",\"Align cell text to the left\":\"Alinear texto de celda a la izquierda\",\"Align cell text to the middle\":\"Alinear texto de celda al medio\",\"Align cell text to the right\":\"Alinear texto de celda a la derecha\",\"Align cell text to the top\":\"Alinear texto de celda hacia arriba\",\"Align center\":\"Centrar\",\"Align left\":\"Alinear a la izquierda\",\"Align right\":\"Alinear a la derecha\",\"Align table to the left\":\"Alinear tabla a la izquierda\",\"Align table to the right\":\"Alinear tabla a la derecha\",Alignment:\"Alineaci\u00F3n\",Aquamarine:\"Aguamarina\",Background:\"Fondo\",\"Below, you can find a list of keyboard shortcuts that can be used in the editor.\":\"A continuaci\u00F3n, encontrar\u00E1 una lista de atajos de teclado que se pueden utilizar en el editor.\",Big:\"Grande\",Black:\"Negro\",Blue:\"Azul\",Bold:\"Negrita\",\"Bold text\":\"Texto en negrita\",Border:\"Borde\",\"Break text\":\"Permitir quebrar texto\",\"Bulleted List\":\"Lista con vi\u00F1etas\",Cancel:\"Cancelar\",\"Caption for image: %0\":\"T\u00EDtulo de la imagen: %0\",\"Caption for the image\":\"Descripci\u00F3n de la imagen\",\"Cell properties\":\"Propiedades de celda\",\"Center table\":\"Centrar tabla\",\"Centered image\":\"Imagen centrada\",\"Change image text alternative\":\"Cambiar el texto alternativo de la imagen\",\"Characters: %0\":\"Caracteres: %0\",\"Choose heading\":\"Elegir Encabezado\",Clear:\"Borrar\",\"Click to edit block\":\"Haz clic para editar el bloque\",Close:\"Cerrar\",\"Close contextual balloons, dropdowns, and dialogs\":\"Cierra globos contextuales, men\u00FAs desplegables y cuadros de di\u00E1logo\",Color:\"Color\",\"Color picker\":\"Selector de color\",Column:\"Columna\",\"Content editing keystrokes\":\"Teclas de edici\u00F3n de contenido\",\"Copy selected content\":\"Copia el contenido seleccionado\",\"Create link\":\"Crea un enlace\",Custom:\"Personalizar\",\"Custom image size\":\"Personalizar tama\u00F1o de imagen\",Dashed:\"L\u00EDnea discontinua\",\"Decrease indent\":\"Disminuir sangr\u00EDa\",\"Decrease list item indent\":\"Reduce la sangr\u00EDa de los elementos de la lista\",Default:\"Por defecto\",\"Delete column\":\"Eliminar columna\",\"Delete row\":\"Eliminar fila\",\"Dim grey\":\"Gris oscuro\",Dimensions:\"Dimensiones\",\"Document colors\":\"Colores del documento\",Dotted:\"L\u00EDnea de puntos\",Double:\"Doble l\u00EDnea\",Downloadable:\"Descargable\",\"Drag to move\":\"Arrastra para mover\",\"Dropdown menu\":\"Men\u00FA desplegable\",\"Dropdown toolbar\":\"Barra de herramientas desplegable\",\"Edit block\":\"Cuadro de edici\u00F3n\",\"Edit link\":\"Editar enlace\",\"Editor block content toolbar\":\"Barra de herramientas de contenido del bloque del editor\",\"Editor contextual toolbar\":\"Barra de herramientas contextual del editor\",\"Editor dialog\":\"Di\u00E1logo del editor\",\"Editor menu bar\":\"Barra de men\u00FA del editor\",\"Editor toolbar\":\"Barra de herramientas de edici\u00F3n\",\"Enter image caption\":\"Introducir t\u00EDtulo de la imagen\",\"Error during image upload\":\"Error durante la carga de la imagen\",\"Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.\":\"Ejecutar el bot\u00F3n actualmente enfocado. Al ejecutar botones que interact\u00FAan con el contenido del editor, el foco vuelve al contenido.\",\"Font Background Color\":\"Color de Fondo\",\"Font Color\":\"Color de Fuente\",\"Font Family\":\"Fuente\",\"Font Size\":\"Tama\u00F1o de fuente\",\"From computer\":\"Desde el ordenador\",\"Full size image\":\"Imagen a tama\u00F1o completo\",Green:\"Verde\",Grey:\"Gris\",Groove:\"Bisel\",\"Header column\":\"Columna de encabezado\",\"Header row\":\"Fila de encabezado\",Heading:\"Encabezado\",\"Heading 1\":\"Encabezado 1\",\"Heading 2\":\"Encabezado 2\",\"Heading 3\":\"Encabezado 3\",\"Heading 4\":\"Encabezado 4\",\"Heading 5\":\"Encabezado 5\",\"Heading 6\":\"Encabezado 6\",Height:\"Altura\",\"Help Contents. To close this dialog press ESC.\":\"Contenidos de ayuda. Presione ESC para cerrar este cuadro de di\u00E1logo.\",HEX:\"HEX\",\"Horizontal text alignment toolbar\":\"Alineaci\u00F3n horizontal de texto\",Huge:\"Enorme\",Image:\"Imagen\",\"Image from computer\":\"Imagen del ordenador\",\"Image resize list\":\"Listado para redimensionar imagen\",\"Image toolbar\":\"Barra de herramientas de imagen\",\"Image upload complete\":\"Carga de imagen completa\",\"image widget\":\"Widget de imagen\",\"In line\":\"En l\u00EDnea\",\"Increase indent\":\"Aumentar sangr\u00EDa\",\"Increase list item indent\":\"Aumenta la sangr\u00EDa de los elementos de la lista\",\"Insert a hard break (a new paragraph)\":\"Inserta un salto de p\u00E1rrafo (un nuevo p\u00E1rrafo)\",\"Insert a new paragraph directly after a widget\":\"Inserta un nuevo p\u00E1rrafo directamente despu\u00E9s de un m\u00F3dulo interactivo\",\"Insert a new paragraph directly before a widget\":\"Inserta un nuevo p\u00E1rrafo directamente antes de un m\u00F3dulo interactivo\",\"Insert a new table row (when in the last cell of a table)\":\"Inserta una nueva fila de la tabla (cuando est\u00E9 en la \u00FAltima celda de una tabla)\",\"Insert a soft break (a <code>&lt;br&gt;</code> element)\":\"Inserta un salto de l\u00EDnea (un elemento <code>&lt;br&gt;</code>)\",\"Insert column left\":\"Insertar columna izquierda\",\"Insert column right\":\"Insertar columna derecha\",\"Insert image\":\"Insertar imagen\",\"Insert media\":\"Insertar contenido multimedia\",\"Insert paragraph after block\":\"Insertar p\u00E1rrafo despu\u00E9s del bloque\",\"Insert paragraph before block\":\"Insertar p\u00E1rrafo antes del bloque\",\"Insert row above\":\"Insertar fila encima\",\"Insert row below\":\"Insertar fila debajo\",\"Insert table\":\"Insertar tabla\",Inset:\"Incrustaci\u00F3n\",Italic:\"Cursiva\",\"Italic text\":\"Texto en cursiva\",Justify:\"Justificar\",\"Justify cell text\":\"Justificar texto de celda\",\"Keystrokes that can be used in a list\":\"Teclas que se pueden utilizar en una lista\",\"Keystrokes that can be used in a table cell\":\"Teclas que se pueden utilizar en una celda de tabla\",\"Keystrokes that can be used when a widget is selected (for example: image, table, etc.)\":\"Teclas que se pueden utilizar cuando se selecciona un m\u00F3dulo interactivo (por ejemplo: imagen, tabla, etc.)\",\"Left aligned image\":\"Imagen alineada a la izquierda\",\"Light blue\":\"Azul claro\",\"Light green\":\"Verde claro\",\"Light grey\":\"Gris claro\",Link:\"Enlace\",\"Link URL\":\"URL del enlace\",\"Link URL must not be empty.\":\"La URL del enlace no puede estar vac\u00EDa.\",Media:\"Multimedia\",\"Media URL\":\"URL del contenido multimedia\",\"media widget\":\"Widget de contenido multimedia\",MENU_BAR_MENU_EDIT:\"Editar\",MENU_BAR_MENU_FILE:\"Archivo\",MENU_BAR_MENU_FONT:\"Fuente\",MENU_BAR_MENU_FORMAT:\"Formato\",MENU_BAR_MENU_HELP:\"Ayuda\",MENU_BAR_MENU_INSERT:\"Insertar\",MENU_BAR_MENU_TEXT:\"Texto\",MENU_BAR_MENU_TOOLS:\"Herramientas\",MENU_BAR_MENU_VIEW:\"Ver\",\"Merge cell down\":\"Combinar celda inferior\",\"Merge cell left\":\"Combinar celda izquierda\",\"Merge cell right\":\"Combinar celda derecha\",\"Merge cell up\":\"Combinar celda superior\",\"Merge cells\":\"Combinar celdas\",\"Move focus between form fields (inputs, buttons, etc.)\":\"Mueve el foco entre campos de formulario (entradas, botones, etc.)\",\"Move focus from an editable area back to the parent widget\":\"Cambiar el foco de un \u00E1rea editable al widget principal\",\"Move focus in and out of an active dialog window\":\"Mueve el foco dentro y fuera de una ventana de di\u00E1logo activa\",\"Move focus to the menu bar, navigate between menu bars\":\"Mover el foco a la barra de men\u00FA, navegar entre las barras de men\u00FA\",\"Move focus to the toolbar, navigate between toolbars\":\"Mueve el foco a la barra de herramientas y navega entre barras de herramientas\",\"Move out of a link\":\"Sale de un enlace\",\"Move the caret to allow typing directly after a widget\":\"Mueve el cursor para permitir escribir directamente despu\u00E9s de un m\u00F3dulo interactivo\",\"Move the caret to allow typing directly before a widget\":\"Mueve el cursor para permitir escribir directamente antes de un m\u00F3dulo interactivo\",\"Move the selection to the next cell\":\"Mueve la selecci\u00F3n a la siguiente celda\",\"Move the selection to the previous cell\":\"Mueve la selecci\u00F3n a la celda anterior\",\"Navigate through the table\":\"Navega por la tabla\",\"Navigate through the toolbar or menu bar\":\"Navegar por la barra de herramientas o la barra de men\u00FA\",Next:\"Siguiente\",\"No results found\":\"No se han encontrado resultados\",\"No searchable items\":\"No hay elementos que buscar\",None:\"Ninguno\",\"Numbered List\":\"Lista numerada\",\"Open in a new tab\":\"Abrir en una pesta\u00F1a nueva \",\"Open link in new tab\":\"Abrir enlace en una pesta\u00F1a nueva\",\"Open media in new tab\":\"Abrir medio en una pesta\u00F1a nueva\",\"Open the accessibility help dialog\":\"Abre el cuadro de di\u00E1logo de ayuda de accesibilidad\",Orange:\"Naranja\",Original:\"Original\",Outset:\"Relieve\",Padding:\"M\u00E1rgenes\",Paragraph:\"P\u00E1rrafo\",\"Paste content\":\"Pega el contenido\",\"Paste content as plain text\":\"Pega el contenido como texto sin formato\",\"Paste the media URL in the input.\":\"Pega la URL del contenido multimedia\",'Please enter a valid color (e.g. \"ff0000\").':'Introduzca un color v\u00E1lido (p. ej., \"ff0000\").',\"Press %0 for help.\":\"Presione %0 para obtener ayuda.\",\"Press Enter to type after or press Shift + Enter to type before the widget\":\"Pulse Intro para escribir despu\u00E9s o pulse May\u00FAs + Intro para escribir antes del \u00ABwidget\u00BB.\",Previous:\"Anterior\",Purple:\"Morado\",Red:\"Rojo\",Redo:\"Rehacer\",\"Remove color\":\"Quitar color\",\"Remove Format\":\"Quitar Formato\",\"Replace from computer\":\"Reemplazar desde el ordenador\",\"Replace image\":\"Reemplazar imagen\",\"Replace image from computer\":\"Reemplazar imagen del ordenador\",\"Resize image\":\"Redimensionar imagen\",\"Resize image (in %0)\":\"Cambiar tama\u00F1o de la imagen (en un %0)\",\"Resize image to %0\":\"Redimensionar imagen al %0\",\"Resize image to the original size\":\"Redimensionar imagen al tama\u00F1o original\",\"Restore default\":\"Restaurar valores predeterminados\",\"Rich Text Editor\":\"Editor de Texto Enriquecido\",\"Rich Text Editor. Editing area: %0\":\"Editor de texto enriquecido. \u00C1rea de edici\u00F3n: %0\",Ridge:\"Marco\",\"Right aligned image\":\"Imagen alineada a la derecha\",Row:\"Fila\",Save:\"Guardar\",\"Select all\":\"Seleccionar todo\",\"Select column\":\"Seleccionar columna\",\"Select row\":\"Seleccionar fila\",\"Show more items\":\"Mostrar m\u00E1s elementos\",\"Side image\":\"Imagen lateral\",Small:\"Peque\u00F1o\",Solid:\"S\u00F3lido\",\"Split cell horizontally\":\"Dividir celdas horizontalmente\",\"Split cell vertically\":\"Dividir celdas verticalmente\",Strikethrough:\"Tachado\",\"Strikethrough text\":\"Tacha el texto\",Style:\"Estilo\",Table:\"Tabla\",\"Table alignment toolbar\":\"Alineaci\u00F3n de tabla\",\"Table cell text alignment\":\"Alineaci\u00F3n texto de celda\",\"Table properties\":\"Propiedades de tabla\",\"Table toolbar\":\"Barra de herramientas de tabla\",\"Text alignment\":\"Alineaci\u00F3n del texto\",\"Text alignment toolbar\":\"Barra de herramientas de alineaci\u00F3n del texto\",\"Text alternative\":\"Texto alternativo\",'The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".':'El color es inv\u00E1lido. Intente con \"#FF0000\", \"rgb(255,0,0)\" o \"red\".',\"The URL must not be empty.\":\"La URL no debe estar vac\u00EDa\",'The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".':'El valor es inv\u00E1lido. Intente con \"10px\", \"2em\" o simplemente \"2\".',\"The value must not be empty.\":\"El valor no puede estar vac\u00EDo.\",\"The value should be a plain number.\":\"El valor debe ser un n\u00FAmero simple.\",\"These keyboard shortcuts allow for quick access to content editing features.\":\"Estos atajos de teclado permiten acceder r\u00E1pidamente a las funciones de edici\u00F3n de contenido.\",\"This link has no URL\":\"Este enlace no tiene URL\",\"This media URL is not supported.\":\"La URL de este contenido multimedia no est\u00E1 soportada\",Tiny:\"Min\u00FAsculo\",\"Tip: Paste the URL into the content to embed faster.\":\"Tip: pega la URL dentro del contenido para embeber m\u00E1s r\u00E1pido\",\"Toggle caption off\":\"Desactivar t\u00EDtulo\",\"Toggle caption on\":\"Activar t\u00EDtulo\",Turquoise:\"Turquesa\",Underline:\"Subrayado\",\"Underline text\":\"Subraya el texto\",Undo:\"Deshacer\",Unlink:\"Quitar enlace\",\"Upload failed\":\"Fallo en la subida\",\"Upload from computer\":\"Subir desde el ordenador\",\"Upload image from computer\":\"Subir imagen desde el ordenador\",\"Upload in progress\":\"Subida en progreso\",\"Uploading image\":\"Cargando imagen\",\"Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.\":\"Utilice las siguientes combinaciones de teclas para una navegaci\u00F3n m\u00E1s eficiente en la interfaz de usuario de CKEditor 5.\",\"User interface and content navigation keystrokes\":\"Teclas de navegaci\u00F3n de contenido e interfaz de usuario\",\"Vertical text alignment toolbar\":\"Alineaci\u00F3n vertical de texto\",White:\"Blanco\",\"Widget toolbar\":\"Barra de herramientas del widget\",Width:\"Ancho\",\"Words: %0\":\"Palabras: %0\",\"Wrap text\":\"Mantener texto unido\",Yellow:\"Amarillo\",\"You have no image upload permissions.\":\"No tienes permiso para subir im\u00E1genes.\"}),a.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));", "!function(e){const t=e.fr=e.fr||{};t.dictionary=Object.assign(t.dictionary||{},{\"(may require <kbd>Fn</kbd>)\":\"(peut n\u00E9cessiter <kbd> Fn </kbd> )\",\"%0 of %1\":\"%0 sur %1\",Accept:\"Accepter\",Accessibility:\"Accessibilit\u00E9\",\"Accessibility help\":\"Aide \u00E0 l'accessibilit\u00E9\",\"Align cell text to the bottom\":\"Aligner le texte en bas\",\"Align cell text to the center\":\"Aligner la cellule au centre\",\"Align cell text to the left\":\"Aligner la cellule \u00E0 gauche\",\"Align cell text to the middle\":\"Aligner le texte au milieu\",\"Align cell text to the right\":\"Aligner la cellule \u00E0 droite\",\"Align cell text to the top\":\"Aligner le texte en haut\",\"Align center\":\"Centrer\",\"Align left\":\"Aligner \u00E0 gauche\",\"Align right\":\"Aligner \u00E0 droite\",\"Align table to the left\":\"Aligner le tableau \u00E0 gauche\",\"Align table to the right\":\"Aligner le tableau \u00E0 droite\",Alignment:\"Alignement\",Aquamarine:\"Bleu vert\",Background:\"Fond\",\"Below, you can find a list of keyboard shortcuts that can be used in the editor.\":\"Ci-dessous, vous trouverez une liste de raccourcis clavier pouvant \u00EAtre utilis\u00E9s dans l\u2019\u00E9diteur.\",Big:\"Grand\",Black:\"Noir\",Blue:\"Bleu\",Bold:\"Gras\",\"Bold text\":\"Texte en gras\",Border:\"Bordure\",\"Break text\":\"Saut de ligne\",\"Bulleted List\":\"Liste \u00E0 puces\",Cancel:\"Annuler\",\"Caption for image: %0\":\"L\u00E9gende de l'image\u00A0: %0\",\"Caption for the image\":\"L\u00E9gende de l'image\",\"Cell properties\":\"Propri\u00E9t\u00E9s de la cellule\",\"Center table\":\"Centrer le tableau \",\"Centered image\":\"Image centr\u00E9e\",\"Change image text alternative\":\"Changer le texte alternatif \u00E0 l\u2019image\",\"Characters: %0\":\"Caract\u00E8res : %0\",\"Choose heading\":\"Choisir l'en-t\u00EAte\",Clear:\"Effacer\",\"Click to edit block\":\"Cliquer pour modifier le bloc\",Close:\"Fermer\",\"Close contextual balloons, dropdowns, and dialogs\":\"Fermer les bulles contextuelles, les listes d\u00E9roulantes et les bo\u00EEtes de dialogue\",Color:\"Couleur\",\"Color picker\":\"Pipette \u00E0 couleurs\",Column:\"Colonne\",\"Content editing keystrokes\":\"Touches d'\u00E9dition de contenu\",\"Copy selected content\":\"Copier le contenu s\u00E9lectionn\u00E9\",\"Create link\":\"Cr\u00E9er un lien\",Custom:\"Personnalis\u00E9\",\"Custom image size\":\"Taille d'image personnalis\u00E9e\",Dashed:\"Tirets\",\"Decrease indent\":\"Diminuer le retrait\",\"Decrease list item indent\":\"Diminuer le retrait des \u00E9l\u00E9ments de liste\",Default:\"Par d\u00E9faut\",\"Delete column\":\"Supprimer la colonne\",\"Delete row\":\"Supprimer la ligne\",\"Dim grey\":\"Gris p\u00E2le\",Dimensions:\"Dimensions\",\"Document colors\":\"Couleurs du document\",Dotted:\"Pointill\u00E9s\",Double:\"Double\",Downloadable:\"Fichier t\u00E9l\u00E9chargeable\",\"Drag to move\":\"Faire glisser pour d\u00E9placer\",\"Dropdown menu\":\"Menu d\u00E9roulant\",\"Dropdown toolbar\":\"Barre d'outils dans un menu d\u00E9roulant\",\"Edit block\":\"Modifier le bloc\",\"Edit link\":\"Modifier le lien\",\"Editor block content toolbar\":\"Barre d'outils du contenu du bloc \u00E9diteur\",\"Editor contextual toolbar\":\"Barre d'outils contextuelle de l'\u00E9diteur\",\"Editor dialog\":\"Bo\u00EEte de dialogue de l'\u00E9diteur\",\"Editor menu bar\":\"Barre de menu de l'\u00E9diteur\",\"Editor toolbar\":\"Barre d'outils de l'\u00E9diteur\",\"Enter image caption\":\"Saisir la l\u00E9gende de l\u2019image\",\"Error during image upload\":\"Une erreur s'est produite lors du t\u00E9l\u00E9chargement de l'image.\",\"Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.\":\"Ex\u00E9cuter le bouton sur lequel se trouve le focus. L'ex\u00E9cution de boutons qui interagissent avec le contenu de l'\u00E9diteur ram\u00E8ne le focus sur le contenu.\",\"Font Background Color\":\"Couleur d'arri\u00E8re-plan\",\"Font Color\":\"Couleur de police\",\"Font Family\":\"Police\",\"Font Size\":\"Taille de police\",\"From computer\":\"Depuis l'ordinateur\",\"Full size image\":\"Image taille r\u00E9elle\",Green:\"Vert\",Grey:\"Gris\",Groove:\"Rainur\u00E9\",\"Header column\":\"Colonne d'ent\u00EAte\",\"Header row\":\"Ligne d'ent\u00EAte\",Heading:\"En-t\u00EAte\",\"Heading 1\":\"Titre 1\",\"Heading 2\":\"Titre 2\",\"Heading 3\":\"Titre 3\",\"Heading 4\":\"Titre 4\",\"Heading 5\":\"Titre 5\",\"Heading 6\":\"Titre 6\",Height:\"Hauteur\",\"Help Contents. To close this dialog press ESC.\":\"Contenu de l'aide. Pour fermer cette bo\u00EEte de dialogue, appuyez sur ESC.\",HEX:\"HEX\",\"Horizontal text alignment toolbar\":\"Barre d'outils pour modifier l'alignement horizontal du texte\",Huge:\"Enorme\",Image:\"Image\",\"Image from computer\":\"Image provenant d'un ordinateur\",\"Image resize list\":\"Liste des tailles d'images\",\"Image toolbar\":\"Barre d'outils des images\",\"Image upload complete\":\"T\u00E9l\u00E9chargement de l'image termin\u00E9\",\"image widget\":\"Objet image\",\"In line\":\"Align\u00E9\",\"Increase indent\":\"Augmenter le retrait\",\"Increase list item indent\":\"Augmenter le retrait des \u00E9l\u00E9ments de liste\",\"Insert a hard break (a new paragraph)\":\"Ins\u00E9rer une pause (un nouveau paragraphe)\",\"Insert a new paragraph directly after a widget\":\"Ins\u00E9rer un nouveau paragraphe directement apr\u00E8s un widget\",\"Insert a new paragraph directly before a widget\":\"Ins\u00E9rer un nouveau paragraphe directement avant un widget\",\"Insert a new table row (when in the last cell of a table)\":\"Ins\u00E9rer une nouvelle ligne de tableau (dans la derni\u00E8re cellule d'un tableau)\",\"Insert a soft break (a <code>&lt;br&gt;</code> element)\":\"Ins\u00E9rer un saut progressif (un \u00E9l\u00E9ment <code> <br> </code> )\",\"Insert column left\":\"Ins\u00E9rer une colonne \u00E0 gauche\",\"Insert column right\":\"Ins\u00E9rer une colonne \u00E0 droite\",\"Insert image\":\"Ins\u00E9rer une image\",\"Insert media\":\"Ins\u00E9rer un m\u00E9dia\",\"Insert paragraph after block\":\"Ins\u00E9rer du texte apr\u00E8s ce bloc\",\"Insert paragraph before block\":\"Ins\u00E9rer du texte avant ce bloc\",\"Insert row above\":\"Ins\u00E9rer une ligne au-dessus\",\"Insert row below\":\"Ins\u00E9rer une ligne en-dessous\",\"Insert table\":\"Ins\u00E9rer un tableau\",Inset:\"Relief int\u00E9rieur\",Italic:\"Italique\",\"Italic text\":\"Texte en italique\",Justify:\"Justifier\",\"Justify cell text\":\"Justifier le contenu de la cellule\",\"Keystrokes that can be used in a list\":\"Frappes de touches pouvant \u00EAtre utilis\u00E9es dans une liste\",\"Keystrokes that can be used in a table cell\":\"Frappes de touches pouvant \u00EAtre utilis\u00E9es dans une cellule de tableau\",\"Keystrokes that can be used when a widget is selected (for example: image, table, etc.)\":\"Frappes de touches pouvant \u00EAtre utilis\u00E9es lorsqu'un widget est s\u00E9lectionn\u00E9 (par exemple : image, tableau, etc.)\",\"Left aligned image\":\"Image align\u00E9e \u00E0 gauche\",\"Light blue\":\"Bleu clair\",\"Light green\":\"Vert clair\",\"Light grey\":\"Gris clair\",Link:\"Lien\",\"Link URL\":\"URL du lien\",\"Link URL must not be empty.\":\"L'URL du lien ne doit pas \u00EAtre vide.\",Media:\"M\u00E9dia\",\"Media URL\":\"URL de m\u00E9dia\",\"media widget\":\"Widget m\u00E9dia\",MENU_BAR_MENU_EDIT:\"\u00C9diter\",MENU_BAR_MENU_FILE:\"Fichier\",MENU_BAR_MENU_FONT:\"Police de caract\u00E8re\",MENU_BAR_MENU_FORMAT:\"Format\",MENU_BAR_MENU_HELP:\"Aide\",MENU_BAR_MENU_INSERT:\"Ins\u00E9rer\",MENU_BAR_MENU_TEXT:\"Texte\",MENU_BAR_MENU_TOOLS:\"Outils\",MENU_BAR_MENU_VIEW:\"Afficher\",\"Merge cell down\":\"Fusionner la cellule en-dessous\",\"Merge cell left\":\"Fusionner la cellule \u00E0 gauche\",\"Merge cell right\":\"Fusionner la cellule \u00E0 droite\",\"Merge cell up\":\"Fusionner la cellule au-dessus\",\"Merge cells\":\"Fusionner les cellules\",\"Move focus between form fields (inputs, buttons, etc.)\":\"D\u00E9placer le focus entre les champs du formulaire (saisies, boutons, etc.)\",\"Move focus from an editable area back to the parent widget\":\"D\u00E9placer le focus d'une zone modifiable vers le widget parent\",\"Move focus in and out of an active dialog window\":\"D\u00E9placer le focus vers et hors d'une fen\u00EAtre de dialogue active\",\"Move focus to the menu bar, navigate between menu bars\":\"D\u00E9placer le focus sur la barre du menu, naviguer entre les barres de menu\",\"Move focus to the toolbar, navigate between toolbars\":\"D\u00E9placez le focus sur la barre d'outils, naviguez entre les barres d'outils\",\"Move out of a link\":\"Sortir d'un lien\",\"Move the caret to allow typing directly after a widget\":\"D\u00E9placez le curseur pour permettre de taper directement apr\u00E8s un widget\",\"Move the caret to allow typing directly before a widget\":\"D\u00E9placez le curseur pour permettre la saisie directement avant un widget\",\"Move the selection to the next cell\":\"D\u00E9placer la s\u00E9lection vers la cellule suivante\",\"Move the selection to the previous cell\":\"D\u00E9placer la s\u00E9lection vers la cellule pr\u00E9c\u00E9dente\",\"Navigate through the table\":\"Naviguer dans le tableau\",\"Navigate through the toolbar or menu bar\":\"Naviguer sur la barre d'outils ou la barre de menu\",Next:\"Suivant\",\"No results found\":\"Aucun r\u00E9sultat trouv\u00E9\",\"No searchable items\":\"Aucun \u00E9l\u00E9ment consultable\",None:\"Aucun\",\"Numbered List\":\"Liste num\u00E9rot\u00E9e\",\"Open in a new tab\":\"Ouvrir dans un nouvel onglet\",\"Open link in new tab\":\"Ouvrir le lien dans un nouvel onglet\",\"Open media in new tab\":\"Ouvrir le m\u00E9dia dans un nouvel onglet\",\"Open the accessibility help dialog\":\"Ouvrir la bo\u00EEte de dialogue d'aide sur l'accessibilit\u00E9\",Orange:\"Orange\",Original:\"Taille originale\",Outset:\"Relief ext\u00E9rieur\",Padding:\"Remplissage pour a\u00E9rer le texte\",Paragraph:\"Paragraphe\",\"Paste content\":\"Coller le contenu\",\"Paste content as plain text\":\"Coller le contenu sous forme de texte brut\",\"Paste the media URL in the input.\":\"Coller l'URL du m\u00E9dia\",'Please enter a valid color (e.g. \"ff0000\").':\"Veuillez saisir une couleur valide (par exemple \u00AB\u00A0ff0000\u00A0\u00BB).\",\"Press %0 for help.\":\"Appuyez sur %0 pour obtenir de l'aide.\",\"Press Enter to type after or press Shift + Enter to type before the widget\":\"Appuyez sur la touche Entr\u00E9e pour taper apr\u00E8s ou sur Maj + Entr\u00E9e pour taper avant le widget.\",Previous:\"Pr\u00E9cedent\",Purple:\"Violet\",Red:\"Rouge\",Redo:\"Restaurer\",\"Remove color\":\"Enlever la couleur\",\"Remove Format\":\"Enlever le format\",\"Replace from computer\":\"Remplacer depuis l'ordinateur\",\"Replace image\":\"Remplacer l'image\",\"Replace image from computer\":\"Remplacer l'image depuis l'ordinateur\",\"Resize image\":\"Redimensionner l'image\",\"Resize image (in %0)\":\"Redimensionner l'image (en %0)\",\"Resize image to %0\":\"Redimensionner \u00E0 %0\",\"Resize image to the original size\":\"Appliquer les dimensions d'origine\",\"Restore default\":\"Restaurer par d\u00E9faut\",\"Rich Text Editor\":\"\u00C9diteur de texte enrichi\",\"Rich Text Editor. Editing area: %0\":\"\u00C9diteur de texte enrichi. Zone d'\u00E9dition\u00A0: %0\",Ridge:\"Relief\",\"Right aligned image\":\"Image align\u00E9e \u00E0 droite\",Row:\"Ligne\",Save:\"Enregistrer\",\"Select all\":\"S\u00E9lectionner tout\",\"Select column\":\"S\u00E9lectionner la colonne\",\"Select row\":\"S\u00E9lectionner la ligne\",\"Show more items\":\"Montrer plus d'\u00E9l\u00E9ments\",\"Side image\":\"Image lat\u00E9rale\",Small:\"Petit\",Solid:\"Continu\",\"Split cell horizontally\":\"Scinder la cellule horizontalement\",\"Split cell vertically\":\"Scinder la cellule verticalement\",Strikethrough:\"Barr\u00E9\",\"Strikethrough text\":\"Texte barr\u00E9\",Style:\"Style\",Table:\"Tableau\",\"Table alignment toolbar\":\"Barre d'outils pour modifier l'alignement du tableau\",\"Table cell text alignment\":\"Alignement du texte de la cellule\",\"Table properties\":\"Propri\u00E9t\u00E9s du tableau\",\"Table toolbar\":\"Barre d'outils des tableaux\",\"Text alignment\":\"Alignement du texte\",\"Text alignment toolbar\":\"Barre d'outils d'alignement du texte\",\"Text alternative\":\"Texte alternatif\",'The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".':'La couleur est invalide. Essayez \"#FF0000\" ou \"rgb(255,0,0)\" ou \"red\".',\"The URL must not be empty.\":\"L'URL ne doit pas \u00EAtre vide.\",'The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".':'La valeur est invalide. Essayez \"10px\" ou \"2em\" ou simplement \"2\".',\"The value must not be empty.\":\"La valeur ne doit pas \u00EAtre vide.\",\"The value should be a plain number.\":\"La valeur doit \u00EAtre un nombre simple.\",\"These keyboard shortcuts allow for quick access to content editing features.\":\"Ces raccourcis clavier permettent un acc\u00E8s rapide aux fonctionnalit\u00E9s d'\u00E9dition de contenu.\",\"This link has no URL\":\"Ce lien n'a pas d'URL\",\"This media URL is not supported.\":\"Cette URL de m\u00E9dia n'est pas support\u00E9e.\",Tiny:\"Minuscule\",\"Tip: Paste the URL into the content to embed faster.\":\"Astuce : Copier l'URL du m\u00E9dia dans le contenu pour l'ins\u00E9rer plus rapidement\",\"Toggle caption off\":\"D\u00E9sactiver la l\u00E9gende\",\"Toggle caption on\":\"Activer la l\u00E9gende\",Turquoise:\"Turquoise\",Underline:\"Soulign\u00E9\",\"Underline text\":\"Souligner le texte\",Undo:\"Annuler\",Unlink:\"Supprimer le lien\",\"Upload failed\":\"\u00C9chec de l'envoi\",\"Upload from computer\":\"T\u00E9l\u00E9charger depuis l'ordinateur\",\"Upload image from computer\":\"T\u00E9l\u00E9charger une image depuis l'ordinateur\",\"Upload in progress\":\"T\u00E9l\u00E9chargement en cours\",\"Uploading image\":\"T\u00E9l\u00E9chargement de l'image\",\"Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.\":\"Utilisez les touches suivantes pour une navigation plus efficace dans l'interface utilisateur de CKEditor 5.\",\"User interface and content navigation keystrokes\":\"Interface utilisateur et frappes de navigation dans le contenu\",\"Vertical text alignment toolbar\":\"Barre d'outils pour modifier l'alignement vertical du texte\",White:\"Blanc\",\"Widget toolbar\":\"Barre d'outils du widget\",Width:\"Largeur\",\"Words: %0\":\"Mots : %0\",\"Wrap text\":\"Retour \u00E0 la ligne\",Yellow:\"Jaune\",\"You have no image upload permissions.\":\"Vous n'\u00EAtes pas autoris\u00E9 \u00E0 t\u00E9l\u00E9charger des images.\"}),t.getPluralForm=function(e){return e<=-2||e>=2}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));", "import {toast} from './toast'\n\nexport const handleUnauthorized = response => {\n    const contentType = response.headers.get('content-type')\n\n    if (contentType.includes('application/json')) {\n        response.json().then(json => (toast(json.value, 'error')))\n    } else if (response.body) {\n        response.text().then(text => (toast(text, 'error')))\n    }\n}\n", "import {toast} from '../utility/toast'\nimport {handleUnauthorized} from '../utility/handle_unauthorized'\n\nclass TutorizeUploadAdapter {\n    constructor(loader, url) {\n        this.loader = loader\n        this.url = url\n    }\n\n    upload() {\n        return this.loader.file\n            .then(async file => {\n                const data = new FormData()\n                data.append('media_file[media]', file)\n\n                const response = await fetch(this.url, {\n                    credentials: 'same-origin',\n                    headers: {\n                        'Accept': 'application/json',\n                        'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`\n                    },\n                    method: 'POST',\n                    body: data\n                })\n\n                if (response.status === 401) {\n                    handleUnauthorized(response)\n                    return Promise.reject()\n                }\n\n                const json = await response.json()\n\n                if (response.ok) {\n                    return {urls: {['default']: json.download_url}}\n                } else {\n                    if (json?.error) {\n                        toast(json.error[json.error.length - 1], 'alert')\n                        return Promise.reject()\n                    }\n                }\n            })\n    }\n\n    abort() {\n    }\n}\n\nexport function TutorizeUploadAdapterPlugin(editor, url) {\n    editor.plugins.get('FileRepository').createUploadAdapter = loader => {\n        // Configure the URL to the upload script in your back-end here!\n        return new TutorizeUploadAdapter(loader, url)\n    }\n}\n", "export function MentionCustomization(editor) {\n    // The upcast converter will convert <a class=\"mention\" href=\"\" data-mention-id=\"\">\n    // elements to the model 'mention' attribute.\n    editor.conversion.for('upcast').elementToAttribute({\n        view: {\n            name: 'a',\n            key: 'data-mention',\n            classes: 'mention',\n            attributes: {\n                href: true,\n                'data-mention-id': true,\n                'data-mention-type': true\n            }\n        },\n        model: {\n            key: 'mention',\n            value: viewItem => {\n                // The mention feature expects that the mention attribute value\n                // in the model is a plain object with a set of additional attributes.\n                // In order to create a proper object, use the toMentionAttribute helper method:\n                return editor.plugins.get('Mention').toMentionAttribute(viewItem, {\n                    // Add any other properties that you need.\n                    link: viewItem.getAttribute('href'),\n                    mentionId: viewItem.getAttribute('data-mention-id'),\n                    mentionType: viewItem.getAttribute('data-mention-type')\n                })\n            }\n        },\n        converterPriority: 'high'\n    })\n\n    // Downcast the model 'mention' text attribute to a view <a> element.\n    editor.conversion.for('downcast').attributeToElement({\n        model: 'mention',\n        view: (modelAttributeValue, {writer}) => {\n            // Do not convert empty attributes (lack of value means no mention).\n            if (!modelAttributeValue) {\n                return\n            }\n\n            return writer.createAttributeElement('a', {\n                class: 'mention',\n                'data-mention': modelAttributeValue.id,\n                'data-mention-id': modelAttributeValue.mentionId,\n                'data-mention-type': modelAttributeValue.mentionType,\n                'href': modelAttributeValue.link\n            }, {\n                // Make mention attribute to be wrapped by other attribute elements.\n                priority: 20,\n                // Prevent merging mentions together.\n                id: modelAttributeValue.uid\n            })\n        },\n        converterPriority: 'high'\n    })\n}\n\n// <span class=\"dropdown-item-text ck-button ck-on\" id=\"mention-list-item-id-contents_knowledge_5\">\n//   <span class=\"ck__mention-title\">\n//     AAA WET\n//   </span>\n//   <span class=\"text-muted\">\n//     Wissenseintrag\n//   </span>\n// </span>\n//\nexport function mentionItemRenderer(item) {\n    const itemElement = document.createElement('span')\n\n    itemElement.classList.add('dropdown-item-text')\n    itemElement.id = `mention-list-item-id-${item.mentionId}`\n\n    const nameElement = document.createElement('span')\n    nameElement.textContent = `${item.name} `\n    nameElement.classList.add('ck__mention-title')\n    itemElement.appendChild(nameElement)\n\n    const typeElement = document.createElement('span')\n    typeElement.classList.add('text-muted')\n    typeElement.textContent = item.mentionType\n    itemElement.appendChild(typeElement)\n\n    return itemElement\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nimport 'mediaelement'\nimport 'mediaelement/build/lang/de'\nimport 'mediaelement/build/lang/fr'\nimport 'mediaelement/build/lang/es'\nimport 'mediaelement/build/renderers/vimeo'\n\nexport default class extends Controller {\n    static values = {dashPath: String, hlsPath: String, iconSpritePath: String}\n\n    initialize() {\n        mejs.i18n.language(document.documentElement.lang)\n    }\n\n    connect() {\n        const elements = this.element.querySelectorAll('oembed')\n        elements.forEach(e => this._loadMediaFile(e))\n    }\n\n    _loadMediaFile(oembed) {\n        if (oembed.hasAttribute('url')) {\n            this._loadYoutubeVimeo(oembed)\n        } else if (oembed.hasAttribute('data-media-file-json')) {\n            const json = JSON.parse(oembed.getAttribute('data-media-file-json'))\n            switch (json.type) {\n                case 'document':\n                    this._loadPdf(oembed, json)\n                    break\n                case 'video':\n                    this._loadVideo(oembed, json)\n                    break\n                default:\n                    break\n            }\n        }\n\n        oembed.style.display = 'none'\n    }\n\n    _loadPdf(oembed, json) {\n        const obj = document.createElement('object')\n        obj.setAttribute('data', json.document[0])\n        obj.setAttribute('type', 'application/pdf')\n        obj.classList.add('pdf')\n        obj.style.width = '100%'\n        obj.style.height = '60vh'\n        oembed.parentNode.appendChild(obj)\n    }\n\n    _loadVideo(oembed, json) {\n        const video = document.createElement('video')\n        for (let src of json.video) {\n            const source = document.createElement('source')\n            source.setAttribute('src', src)\n            video.appendChild(source)\n        }\n        video.style.width = '100%'\n        video.style.height = '100%'\n        video.setAttribute('data-media-element-target', 'mediaElement')\n\n        const wrapper = document.createElement('div')\n        wrapper.setAttribute('data-controller', 'media-element')\n        wrapper.setAttribute('data-media-element-dash-path-value', this.dashPathValue)\n        wrapper.setAttribute('data-media-element-hls-path-value', this.hlsPathValue)\n        wrapper.setAttribute('data-media-element-icon-sprite-path-value', this.iconSpritePathValue)\n        wrapper.append(video)\n        oembed.parentNode.appendChild(wrapper)\n    }\n\n    _loadYoutubeVimeo(oembed) {\n        const video = document.createElement('video')\n        video.setAttribute('src', oembed.getAttribute('url'))\n        video.style.width = '100%'\n        video.style.height = '100%'\n        oembed.parentNode.appendChild(video)\n\n        new MediaElementPlayer(video, {\n            renderers: ['youtube_iframe', 'vimeo_iframe'],\n            features: ['playpause', 'progress', 'current', 'duration', 'tracks', 'volume', 'fullscreen'],\n            iconSprite: this.iconSpritePathValue,\n            autoRewind: false,\n            youtube: {\n                nocookie: true\n            }\n        })\n    }\n}\n", "/*!\n * This is a `i18n` language object.\n *\n * German\n *\n * @author\n *   Jalios (Twitter: @Jalios)\n *   Sascha Greuel (Twitter: @SoftCreatR)\n *\n * @see core/i18n.js\n */\n(function (exports) {\n    'use strict';\tif (exports.de === undefined) {\n\t\texports.de = {\n\t\t\t'mejs.plural-form': 1,\t\t\t\n\t\t\t'mejs.download-file': 'Datei herunterladen',\t\t\t\n\t\t\t'mejs.install-flash': 'Ihr Browser unterst\u00FCtzt kein Flash. Bitte aktivieren Sie Flash bzw. laden Sie die aktuellste Flash-Version herunter unter https://get.adobe.com/flashplayer/',\t\t\t\n\t\t\t'mejs.fullscreen': 'Vollbild',\t\t\t\n\t\t\t'mejs.play': 'Abspielen',\n\t\t\t'mejs.pause': 'Pause',\t\t\t\n\t\t\t'mejs.time-slider': 'Zeitschieberegler',\n\t\t\t'mejs.time-help-text': 'Verwende die Pfeiltaste nach links/rechts, um eine Sekunde zu spulen, hoch/runter um zehn Sekunden zu spulen.',\n\t\t\t'mejs.live-broadcast' : 'Live-\u00DCbertragung',\t\t\t\n\t\t\t'mejs.current': 'Aktueller Zeitpunkt',\n\t\t\t'mejs.duration': 'Gesamtlaufzeit',\t\t\t\n\t\t\t'mejs.volume-help-text': 'Verwende die Pfeiltaste nach oben/nach unten um die Lautst\u00E4rke zu erh\u00F6hen oder zu verringern.',\n\t\t\t'mejs.unmute': 'Stummschaltung aufheben',\n\t\t\t'mejs.mute': 'Stummschalten',\n\t\t\t'mejs.volume-slider': 'Lautst\u00E4rkeregler',\t\t\t\n\t\t\t'mejs.video-player': 'Video-Player',\n\t\t\t'mejs.audio-player': 'Audio-Player',\t\t\t\n\t\t\t'mejs.captions-subtitles': '\u00DCberschriften/Untertitel',\n\t\t\t'mejs.captions-chapters': 'Kapitel',\n\t\t\t'mejs.none': 'Keine',\n\t\t\t'mejs.afrikaans': 'Afrikanisch',\n\t\t\t'mejs.albanian': 'Albanisch',\n\t\t\t'mejs.arabic': 'Arabisch',\n\t\t\t'mejs.belarusian': 'Wei\u00DFrussisch',\n\t\t\t'mejs.bulgarian': 'Bulgarisch',\n\t\t\t'mejs.catalan': 'Katalanisch',\n\t\t\t'mejs.chinese': 'Chinesisch',\n\t\t\t'mejs.chinese-simplified': 'Chinesisch (Vereinfacht)',\n\t\t\t'mejs.chinese-traditional': 'Chinesisch (Traditionell)',\n\t\t\t'mejs.croatian': 'Kroatisch',\n\t\t\t'mejs.czech': 'Tschechisch',\n\t\t\t'mejs.danish': 'D\u00E4nisch',\n\t\t\t'mejs.dutch': 'Niederl\u00E4ndisch',\n\t\t\t'mejs.english': 'Englisch',\n\t\t\t'mejs.estonian': 'Estnisch',\n\t\t\t'mejs.filipino': 'Filipino',\n\t\t\t'mejs.finnish': 'Finnisch',\n\t\t\t'mejs.french': 'Franz\u00F6sisch',\n\t\t\t'mejs.galician': 'Galicisch',\n\t\t\t'mejs.german': 'Deutsch',\n\t\t\t'mejs.greek': 'Griechisch',\n\t\t\t'mejs.haitian-creole': 'Haitianisch',\n\t\t\t'mejs.hebrew': 'Hebr\u00E4isch',\n\t\t\t'mejs.hindi': 'Hindi',\n\t\t\t'mejs.hungarian': 'Ungarisch',\n\t\t\t'mejs.icelandic': 'Isl\u00E4ndisch',\n\t\t\t'mejs.indonesian': 'Indonesisch',\n\t\t\t'mejs.irish': 'Irisch',\n\t\t\t'mejs.italian': 'Italienisch',\n\t\t\t'mejs.japanese': 'Japanisch',\n\t\t\t'mejs.korean': 'Koreanisch',\n\t\t\t'mejs.latvian': 'Lettisch',\n\t\t\t'mejs.lithuanian': 'Litauisch',\n\t\t\t'mejs.macedonian': 'Mazedonisch',\n\t\t\t'mejs.malay': 'Malaysisch',\n\t\t\t'mejs.maltese': 'Maltesisch',\n\t\t\t'mejs.norwegian': 'Norwegisch',\n\t\t\t'mejs.persian': 'Persisch',\n\t\t\t'mejs.polish': 'Polnisch',\n\t\t\t'mejs.portuguese': 'Portugiesisch',\n\t\t\t'mejs.romanian': 'Rum\u00E4nisch',\n\t\t\t'mejs.russian': 'Russisch',\n\t\t\t'mejs.serbian': 'Serbisch',\n\t\t\t'mejs.slovak': 'Slovakisch',\n\t\t\t'mejs.slovenian': 'Slovenisch',\n\t\t\t'mejs.spanish': 'Spanisch',\n\t\t\t'mejs.swahili': 'Swahili',\n\t\t\t'mejs.swedish': 'Schwedisch',\n\t\t\t'mejs.tagalog': 'Tagalog',\n\t\t\t'mejs.thai': 'Thail\u00E4ndisch',\n\t\t\t'mejs.turkish': 'T\u00FCrkisch',\n\t\t\t'mejs.ukrainian': 'Ukrainisch',\n\t\t\t'mejs.vietnamese': 'Vietnamnesisch',\n\t\t\t'mejs.welsh': 'Walisisch',\n\t\t\t'mejs.yiddish': 'Jiddisch'\n\t\t};\n\t}\n})(mejs.i18n);\n", "/*!\n * This is a `i18n` language object.\n *\n * French\n *\n * @author\n *   Luc Poupard (Twitter: @klohFR)\n *   Jalios (Twitter: @Jalios)\n *   Sascha Greuel (Twitter: @SoftCreatR)\n *\n * @see core/i18n.js\n */\n(function (exports) {\n    'use strict';\tif (exports.fr === undefined) {\n\t\texports.fr = {\n\t\t\t'mejs.plural-form': 2,\t\t\t\n\t\t\t'mejs.download-file': 'T\u00E9l\u00E9charger le fichier',\t\t\t\n\t\t\t'mejs.install-flash': 'Vous utilisez un navigateur sur lequel Flash ne semble pas install\u00E9 ou activ\u00E9. Veuillez activer le plugin Flash ou t\u00E9l\u00E9charger la derni\u00E8re version sur https://get.adobe.com/flashplayer/',\t\t\t\n\t\t\t'mejs.fullscreen': 'Plein \u00E9cran',\t\t\t\n\t\t\t'mejs.play': 'Lecture',\n\t\t\t'mejs.pause': 'Pause',\t\t\t\n\t\t\t'mejs.time-slider': 'Curseur temporel',\n\t\t\t'mejs.time-help-text': 'Utilisez les fl\u00E8ches Gauche/Droite du clavier pour avancer d\\'une seconde, les fl\u00E8ches Haut/Bas pour avancer de 10 secondes.',\n\t\t\t'mejs.live-broadcast' : 'Diffusion en direct',\t\t\t\n\t\t\t'mejs.current': 'Temps actuel',\n\t\t\t'mejs.duration': 'Dur\u00E9e totale',\t\t\t\n\t\t\t'mejs.volume-help-text': 'Utilisez les fl\u00E8ches Haut/Bas du clavier pour augmenter ou diminuer le volume.',\n\t\t\t'mejs.unmute': 'Activer le son',\n\t\t\t'mejs.mute': 'D\u00E9sactiver le son',\n\t\t\t'mejs.volume-slider': 'Volume',\t\t\t\n\t\t\t'mejs.video-player': 'Lecteur Vid\u00E9o',\n\t\t\t'mejs.audio-player': 'Lecteur Audio',\t\t\t\n\t\t\t'mejs.captions-subtitles': 'Sous-titres',\n\t\t\t'mejs.captions-chapters': 'Chapitres',\n\t\t\t'mejs.none': 'Aucun',\n\t\t\t'mejs.afrikaans': 'Afrikaans',\n\t\t\t'mejs.albanian': 'Albanais',\n\t\t\t'mejs.arabic': 'Arabe',\n\t\t\t'mejs.belarusian': 'Bi\u00E9lorusse',\n\t\t\t'mejs.bulgarian': 'Bulgare',\n\t\t\t'mejs.catalan': 'Catalan',\n\t\t\t'mejs.chinese': 'Chinois',\n\t\t\t'mejs.chinese-simplified': 'Chinois (simplifi\u00E9)',\n\t\t\t'mejs.chinese-traditional': 'Chinois (traditionnel)',\n\t\t\t'mejs.croatian': 'Croate',\n\t\t\t'mejs.czech': 'Tch\u00E8que',\n\t\t\t'mejs.danish': 'Danois',\n\t\t\t'mejs.dutch': 'N\u00E9erlandais',\n\t\t\t'mejs.english': 'Anglais',\n\t\t\t'mejs.estonian': 'Estonien',\n\t\t\t'mejs.filipino': 'Filipino',\n\t\t\t'mejs.finnish': 'Finnois',\n\t\t\t'mejs.french': 'Fran\u00E7ais',\n\t\t\t'mejs.galician': 'Galicien',\n\t\t\t'mejs.german': 'Allemand',\n\t\t\t'mejs.greek': 'Grec',\n\t\t\t'mejs.haitian-creole': 'Cr\u00E9ole ha\u00EFtien',\n\t\t\t'mejs.hebrew': 'H\u00E9breu',\n\t\t\t'mejs.hindi': 'Hindi',\n\t\t\t'mejs.hungarian': 'Hongrois',\n\t\t\t'mejs.icelandic': 'Islandais',\n\t\t\t'mejs.indonesian': 'Indon\u00E9sien',\n\t\t\t'mejs.irish': 'Irlandais',\n\t\t\t'mejs.italian': 'Italien',\n\t\t\t'mejs.japanese': 'Japonais',\n\t\t\t'mejs.korean': 'Cor\u00E9en',\n\t\t\t'mejs.latvian': 'Letton',\n\t\t\t'mejs.lithuanian': 'Lituanien',\n\t\t\t'mejs.macedonian': 'Mac\u00E9donien',\n\t\t\t'mejs.malay': 'Malais',\n\t\t\t'mejs.maltese': 'Maltais',\n\t\t\t'mejs.norwegian': 'Norv\u00E9gien',\n\t\t\t'mejs.persian': 'Perse',\n\t\t\t'mejs.polish': 'Polonais',\n\t\t\t'mejs.portuguese': 'Portugais',\n\t\t\t'mejs.romanian': 'Roumain',\n\t\t\t'mejs.russian': 'Russe',\n\t\t\t'mejs.serbian': 'Serbe',\n\t\t\t'mejs.slovak': 'Slovaque',\n\t\t\t'mejs.slovenian': 'Slov\u00E8ne',\n\t\t\t'mejs.spanish': 'Espagnol',\n\t\t\t'mejs.swahili': 'Swahili',\n\t\t\t'mejs.swedish': 'Su\u00E9dois',\n\t\t\t'mejs.tagalog': 'Tagalog',\n\t\t\t'mejs.thai': 'Tha\u00EF',\n\t\t\t'mejs.turkish': 'Turque',\n\t\t\t'mejs.ukrainian': 'Ukrainien',\n\t\t\t'mejs.vietnamese': 'Vietnamien',\n\t\t\t'mejs.welsh': 'Gallois',\n\t\t\t'mejs.yiddish': 'Yiddish'\n\t\t};\n\t}\n})(mejs.i18n);\n", "/*!\n * This is a `i18n` language object.\n *\n * Spanish\n *\n * @author\n *   Jalios (Twitter: @Jalios)\n *   Sascha Greuel (Twitter: @SoftCreatR)\n *   Rafael Miranda (GitHub: @rafa8626)\n *\n * @see core/i18n.js\n */\n(function (exports) {\n    'use strict';\tif (exports.es === undefined) {\n\t\texports.es = {\n\t\t\t'mejs.plural-form': 1,\t\t\t\n\t\t\t'mejs.download-file': 'Descargar archivo',\t\t\t\n\t\t\t'mejs.install-flash': 'Esta usando un navegador que no tiene activado o instalado el reproductor de Flash. Por favor active el plugin del reproductor de Flash o descargue la versi\u00F3n m\u00E1s reciente en https://get.adobe.com/flashplayer/',\t\t\t\n\t\t\t'mejs.fullscreen': 'Pantalla completa',\t\t\t\n\t\t\t'mejs.play': 'Reproducci\u00F3n',\n\t\t\t'mejs.pause': 'Pausa',\t\t\t\n\t\t\t'mejs.time-slider': 'Control deslizante de tiempo',\n\t\t\t'mejs.time-help-text': 'Use las flechas Izquierda/Derecha para avanzar un segundo y las flechas Arriba/Abajo para avanzar diez segundos.',\n\t\t\t'mejs.live-broadcast': 'Transmisi\u00F3n en Vivo',\t\t\t\n\t\t\t'mejs.current': 'Hora actual',\n\t\t\t'mejs.duration': 'Duraci\u00F3n total',\t\t\t\n\t\t\t'mejs.volume-help-text': 'Use las flechas Arriba/Abajo para subir o bajar el volumen.',\n\t\t\t'mejs.unmute': 'Reactivar silencio',\n\t\t\t'mejs.mute': 'Silencio',\n\t\t\t'mejs.volume-slider': 'Control deslizante de volumen',\t\t\t\n\t\t\t'mejs.video-player': 'Reproductor de video',\n\t\t\t'mejs.audio-player': 'Reproductor de audio',\t\t\t\n\t\t\t'mejs.captions-subtitles': 'Leyendas/Subt\u00EDtulos',\n\t\t\t'mejs.captions-chapters': 'Cap\u00EDtulos',\n\t\t\t'mejs.none': 'Ninguno',\n\t\t\t'mejs.afrikaans': 'Afrikaans',\n\t\t\t'mejs.albanian': 'Albano',\n\t\t\t'mejs.arabic': '\u00C1rabe',\n\t\t\t'mejs.belarusian': 'Bielorruso',\n\t\t\t'mejs.bulgarian': 'B\u00FAlgaro',\n\t\t\t'mejs.catalan': 'Catal\u00E1n',\n\t\t\t'mejs.chinese': 'Chino',\n\t\t\t'mejs.chinese-simplified': 'Chino (Simplificado)',\n\t\t\t'mejs.chinese-traditional': 'Chino (Tradicional)',\n\t\t\t'mejs.croatian': 'Croata',\n\t\t\t'mejs.czech': 'Checo',\n\t\t\t'mejs.danish': 'Dan\u00E9s',\n\t\t\t'mejs.dutch': 'Holand\u00E9s',\n\t\t\t'mejs.english': 'Ingl\u00E9s',\n\t\t\t'mejs.estonian': 'Estoniano',\n\t\t\t'mejs.filipino': 'Filipino',\n\t\t\t'mejs.finnish': 'Finland\u00E9s',\n\t\t\t'mejs.french': 'Franc\u00E9s',\n\t\t\t'mejs.galician': 'Gallego',\n\t\t\t'mejs.german': 'Alem\u00E1n',\n\t\t\t'mejs.greek': 'Griego',\n\t\t\t'mejs.haitian-creole': 'Haitiano Criollo',\n\t\t\t'mejs.hebrew': 'Hebreo',\n\t\t\t'mejs.hindi': 'Hindi',\n\t\t\t'mejs.hungarian': 'H\u00FAngaro',\n\t\t\t'mejs.icelandic': 'Island\u00E9s',\n\t\t\t'mejs.indonesian': 'Indonesio',\n\t\t\t'mejs.irish': 'Irland\u00E9s',\n\t\t\t'mejs.italian': 'Italiano',\n\t\t\t'mejs.japanese': 'Japon\u00E9s',\n\t\t\t'mejs.korean': 'Coreano',\n\t\t\t'mejs.latvian': 'Let\u00F3n',\n\t\t\t'mejs.lithuanian': 'Lituano',\n\t\t\t'mejs.macedonian': 'Macedonio',\n\t\t\t'mejs.malay': 'Malayo',\n\t\t\t'mejs.maltese': 'Malt\u00E9s',\n\t\t\t'mejs.norwegian': 'Noruego',\n\t\t\t'mejs.persian': 'Persa',\n\t\t\t'mejs.polish': 'Polaco',\n\t\t\t'mejs.portuguese': 'Portugu\u00E9s',\n\t\t\t'mejs.romanian': 'Rumano',\n\t\t\t'mejs.russian': 'Ruso',\n\t\t\t'mejs.serbian': 'Serbio',\n\t\t\t'mejs.slovak': 'Eslovaco',\n\t\t\t'mejs.slovenian': 'Eslovenio',\n\t\t\t'mejs.spanish': 'Espa\u00F1ol',\n\t\t\t'mejs.swahili': 'Swahili',\n\t\t\t'mejs.swedish': 'Suizo',\n\t\t\t'mejs.tagalog': 'Tagalog',\n\t\t\t'mejs.thai': 'Tailand\u00E9s',\n\t\t\t'mejs.turkish': 'Turco',\n\t\t\t'mejs.ukrainian': 'Ucraniano',\n\t\t\t'mejs.vietnamese': 'Vietnamita',\n\t\t\t'mejs.welsh': 'Gal\u00E9s',\n\t\t\t'mejs.yiddish': 'Yiddish'\n\t\t};\n\t}\n})(mejs.i18n);\n", "/*!\n * MediaElement.js\n * http://www.mediaelementjs.com/\n *\n * Wrapper that mimics native HTML5 MediaElement (audio and video)\n * using a variety of technologies (pure JavaScript, Flash, iframe)\n *\n * Copyright 2010-2017, John Dyer (http://j.hn/)\n * License: MIT\n *\n */(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(_dereq_,module,exports){\n'use strict';\n\nvar VimeoApi = {\n\n\tpromise: null,\n\n\tload: function load(settings) {\n\n\t\tif (typeof Vimeo !== 'undefined') {\n\t\t\tVimeoApi._createPlayer(settings);\n\t\t} else {\n\t\t\tVimeoApi.promise = VimeoApi.promise || mejs.Utils.loadScript('https://player.vimeo.com/api/player.js');\n\t\t\tVimeoApi.promise.then(function () {\n\t\t\t\tVimeoApi._createPlayer(settings);\n\t\t\t});\n\t\t}\n\t},\n\n\t_createPlayer: function _createPlayer(settings) {\n\t\tvar player = new Vimeo.Player(settings.iframe);\n\t\twindow['__ready__' + settings.id](player);\n\t},\n\n\tgetVimeoId: function getVimeoId(url) {\n\t\tif (url == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar parts = url.split('?');\n\t\turl = parts[0];\n\n\t\tvar playerLinkMatch = url.match(/https:\\/\\/player.vimeo.com\\/video\\/(\\d+)$/);\n\t\tif (playerLinkMatch) {\n\t\t\treturn parseInt(playerLinkMatch[1], 10);\n\t\t}\n\n\t\tvar vimeoLinkMatch = url.match(/https:\\/\\/vimeo.com\\/(\\d+)$/);\n\t\tif (vimeoLinkMatch) {\n\t\t\treturn parseInt(vimeoLinkMatch[1], 10);\n\t\t}\n\n\t\tvar privateVimeoLinkMatch = url.match(/https:\\/\\/vimeo.com\\/(\\d+)\\/\\w+$/);\n\t\tif (privateVimeoLinkMatch) {\n\t\t\treturn parseInt(privateVimeoLinkMatch[1], 10);\n\t\t}\n\n\t\treturn NaN;\n\t}\n};\n\nvar vimeoIframeRenderer = {\n\n\tname: 'vimeo_iframe',\n\toptions: {\n\t\tprefix: 'vimeo_iframe'\n\t},\n\n\tcanPlayType: function canPlayType(type) {\n\t\treturn ~['video/vimeo', 'video/x-vimeo'].indexOf(type.toLowerCase());\n\t},\n\n\tcreate: function create(mediaElement, options, mediaFiles) {\n\t\tvar apiStack = [],\n\t\t    vimeo = {},\n\t\t    readyState = 4;\n\n\t\tvar paused = true,\n\t\t    volume = 1,\n\t\t    oldVolume = volume,\n\t\t    currentTime = 0,\n\t\t    bufferedTime = 0,\n\t\t    ended = false,\n\t\t    duration = 0,\n\t\t    vimeoPlayer = null,\n\t\t    url = '';\n\n\t\tvimeo.options = options;\n\t\tvimeo.id = mediaElement.id + '_' + options.prefix;\n\t\tvimeo.mediaElement = mediaElement;\n\n\t\tvar errorHandler = function errorHandler(error) {\n\t\t\tmediaElement.generateError('Code ' + error.name + ': ' + error.message, mediaFiles);\n\t\t};\n\n\t\tvar props = mejs.html5media.properties,\n\t\t    assignGettersSetters = function assignGettersSetters(propName) {\n\n\t\t\tvar capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\tvimeo['get' + capName] = function () {\n\t\t\t\tif (vimeoPlayer !== null) {\n\t\t\t\t\tvar value = null;\n\n\t\t\t\t\tswitch (propName) {\n\t\t\t\t\t\tcase 'currentTime':\n\t\t\t\t\t\t\treturn currentTime;\n\t\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\t\treturn duration;\n\t\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t\treturn volume;\n\t\t\t\t\t\tcase 'muted':\n\t\t\t\t\t\t\treturn volume === 0;\n\t\t\t\t\t\tcase 'paused':\n\t\t\t\t\t\t\treturn paused;\n\t\t\t\t\t\tcase 'ended':\n\t\t\t\t\t\t\treturn ended;\n\t\t\t\t\t\tcase 'src':\n\t\t\t\t\t\t\tvimeoPlayer.getVideoUrl().then(function (_url) {\n\t\t\t\t\t\t\t\turl = _url;\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn url;\n\t\t\t\t\t\tcase 'buffered':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstart: function start() {\n\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tend: function end() {\n\t\t\t\t\t\t\t\t\treturn bufferedTime * duration;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tlength: 1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'readyState':\n\t\t\t\t\t\t\treturn readyState;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvimeo['set' + capName] = function (value) {\n\t\t\t\tif (vimeoPlayer !== null) {\n\t\t\t\t\tswitch (propName) {\n\t\t\t\t\t\tcase 'src':\n\t\t\t\t\t\t\tvar _url2 = typeof value === 'string' ? value : value[0].src,\n\t\t\t\t\t\t\t    videoId = VimeoApi.getVimeoId(_url2);\n\n\t\t\t\t\t\t\tvimeoPlayer.loadVideo(videoId).then(function () {\n\t\t\t\t\t\t\t\tif (mediaElement.originalNode.autoplay) {\n\t\t\t\t\t\t\t\t\tvimeoPlayer.play();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'currentTime':\n\t\t\t\t\t\t\tvimeoPlayer.setCurrentTime(value).then(function () {\n\t\t\t\t\t\t\t\tcurrentTime = value;\n\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\tvar event = mejs.Utils.createEvent('timeupdate', vimeo);\n\t\t\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t\tvimeoPlayer.setVolume(value).then(function () {\n\t\t\t\t\t\t\t\tvolume = value;\n\t\t\t\t\t\t\t\toldVolume = volume;\n\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\tvar event = mejs.Utils.createEvent('volumechange', vimeo);\n\t\t\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'loop':\n\t\t\t\t\t\t\tvimeoPlayer.setLoop(value).catch(function (error) {\n\t\t\t\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'muted':\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tvimeoPlayer.setVolume(0).then(function () {\n\t\t\t\t\t\t\t\t\tvolume = 0;\n\t\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\t\tvar event = mejs.Utils.createEvent('volumechange', vimeo);\n\t\t\t\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvimeoPlayer.setVolume(oldVolume).then(function () {\n\t\t\t\t\t\t\t\t\tvolume = oldVolume;\n\t\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\t\tvar event = mejs.Utils.createEvent('volumechange', vimeo);\n\t\t\t\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'readyState':\n\t\t\t\t\t\t\tvar event = mejs.Utils.createEvent('canplay', vimeo);\n\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tapiStack.push({ type: 'set', propName: propName, value: value });\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 0, total = props.length; i < total; i++) {\n\t\t\tassignGettersSetters(props[i]);\n\t\t}\n\n\t\tvar methods = mejs.html5media.methods,\n\t\t    assignMethods = function assignMethods(methodName) {\n\t\t\tvimeo[methodName] = function () {\n\t\t\t\tif (vimeoPlayer !== null) {\n\t\t\t\t\tswitch (methodName) {\n\t\t\t\t\t\tcase 'play':\n\t\t\t\t\t\t\tpaused = false;\n\t\t\t\t\t\t\treturn vimeoPlayer.play();\n\t\t\t\t\t\tcase 'pause':\n\t\t\t\t\t\t\tpaused = true;\n\t\t\t\t\t\t\treturn vimeoPlayer.pause();\n\t\t\t\t\t\tcase 'load':\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tapiStack.push({ type: 'call', methodName: methodName });\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tfor (var _i = 0, _total = methods.length; _i < _total; _i++) {\n\t\t\tassignMethods(methods[_i]);\n\t\t}\n\n\t\twindow['__ready__' + vimeo.id] = function (_vimeoPlayer) {\n\n\t\t\tmediaElement.vimeoPlayer = vimeoPlayer = _vimeoPlayer;\n\n\t\t\tif (apiStack.length) {\n\t\t\t\tfor (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) {\n\t\t\t\t\tvar stackItem = apiStack[_i2];\n\n\t\t\t\t\tif (stackItem.type === 'set') {\n\t\t\t\t\t\tvar propName = stackItem.propName,\n\t\t\t\t\t\t    capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);\n\n\t\t\t\t\t\tvimeo['set' + capName](stackItem.value);\n\t\t\t\t\t} else if (stackItem.type === 'call') {\n\t\t\t\t\t\tvimeo[stackItem.methodName]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mediaElement.originalNode.muted) {\n\t\t\t\tvimeoPlayer.setVolume(0);\n\t\t\t\tvolume = 0;\n\t\t\t}\n\n\t\t\tvar vimeoIframe = document.getElementById(vimeo.id);\n\t\t\tvar events = void 0;\n\n\t\t\tevents = ['mouseover', 'mouseout'];\n\n\t\t\tvar assignEvents = function assignEvents(e) {\n\t\t\t\tvar event = mejs.Utils.createEvent(e.type, vimeo);\n\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t};\n\n\t\t\tfor (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {\n\t\t\t\tvimeoIframe.addEventListener(events[_i3], assignEvents, false);\n\t\t\t}\n\n\t\t\tvimeoPlayer.on('loaded', function () {\n\t\t\t\tvimeoPlayer.getDuration().then(function (loadProgress) {\n\t\t\t\t\tduration = loadProgress;\n\t\t\t\t\tif (duration > 0) {\n\t\t\t\t\t\tbufferedTime = duration * loadProgress;\n\t\t\t\t\t\tif (mediaElement.originalNode.autoplay) {\n\t\t\t\t\t\t\tpaused = false;\n\t\t\t\t\t\t\tended = false;\n\t\t\t\t\t\t\tvar event = mejs.Utils.createEvent('play', vimeo);\n\t\t\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}).catch(function (error) {\n\t\t\t\t\terrorHandler(error, vimeo);\n\t\t\t\t});\n\t\t\t});\n\t\t\tvimeoPlayer.on('progress', function () {\n\t\t\t\tvimeoPlayer.getDuration().then(function (loadProgress) {\n\t\t\t\t\tduration = loadProgress;\n\n\t\t\t\t\tif (duration > 0) {\n\t\t\t\t\t\tbufferedTime = duration * loadProgress;\n\t\t\t\t\t\tif (mediaElement.originalNode.autoplay) {\n\t\t\t\t\t\t\tvar initEvent = mejs.Utils.createEvent('play', vimeo);\n\t\t\t\t\t\t\tmediaElement.dispatchEvent(initEvent);\n\n\t\t\t\t\t\t\tvar playingEvent = mejs.Utils.createEvent('playing', vimeo);\n\t\t\t\t\t\t\tmediaElement.dispatchEvent(playingEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar event = mejs.Utils.createEvent('progress', vimeo);\n\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t}).catch(function (error) {\n\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t});\n\t\t\t});\n\t\t\tvimeoPlayer.on('timeupdate', function () {\n\t\t\t\tvimeoPlayer.getCurrentTime().then(function (seconds) {\n\t\t\t\t\tcurrentTime = seconds;\n\t\t\t\t\tvar event = mejs.Utils.createEvent('timeupdate', vimeo);\n\t\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t\t}).catch(function (error) {\n\t\t\t\t\treturn errorHandler(error);\n\t\t\t\t});\n\t\t\t});\n\t\t\tvimeoPlayer.on('play', function () {\n\t\t\t\tpaused = false;\n\t\t\t\tended = false;\n\t\t\t\tvar event = mejs.Utils.createEvent('play', vimeo);\n\t\t\t\tmediaElement.dispatchEvent(event);\n\n\t\t\t\tvar playingEvent = mejs.Utils.createEvent('playing', vimeo);\n\t\t\t\tmediaElement.dispatchEvent(playingEvent);\n\t\t\t});\n\t\t\tvimeoPlayer.on('pause', function () {\n\t\t\t\tpaused = true;\n\t\t\t\tended = false;\n\n\t\t\t\tvar event = mejs.Utils.createEvent('pause', vimeo);\n\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t});\n\t\t\tvimeoPlayer.on('ended', function () {\n\t\t\t\tpaused = false;\n\t\t\t\tended = true;\n\n\t\t\t\tvar event = mejs.Utils.createEvent('ended', vimeo);\n\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t});\n\n\t\t\tevents = ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];\n\n\t\t\tfor (var _i4 = 0, _total4 = events.length; _i4 < _total4; _i4++) {\n\t\t\t\tvar event = mejs.Utils.createEvent(events[_i4], vimeo);\n\t\t\t\tmediaElement.dispatchEvent(event);\n\t\t\t}\n\t\t};\n\n\t\tvar height = mediaElement.originalNode.height,\n\t\t    width = mediaElement.originalNode.width,\n\t\t    vimeoContainer = document.createElement('iframe'),\n\t\t    standardUrl = 'https://player.vimeo.com/video/' + VimeoApi.getVimeoId(mediaFiles[0].src);\n\n\t\tvar queryArgs = ~mediaFiles[0].src.indexOf('?') ? '?' + mediaFiles[0].src.slice(mediaFiles[0].src.indexOf('?') + 1) : '';\n\t\tvar args = [];\n\n\t\tif (mediaElement.originalNode.autoplay && queryArgs.indexOf('autoplay') === -1) {\n\t\t\targs.push('autoplay=1');\n\t\t}\n\t\tif (mediaElement.originalNode.loop && queryArgs.indexOf('loop') === -1) {\n\t\t\targs.push('loop=1');\n\t\t}\n\n\t\tqueryArgs = '' + queryArgs + (queryArgs ? '&' : '?') + args.join('&');\n\n\t\tvimeoContainer.setAttribute('id', vimeo.id);\n\t\tvimeoContainer.setAttribute('width', width);\n\t\tvimeoContainer.setAttribute('height', height);\n\t\tvimeoContainer.setAttribute('frameBorder', '0');\n\t\tvimeoContainer.setAttribute('src', '' + standardUrl + queryArgs);\n\t\tvimeoContainer.setAttribute('webkitallowfullscreen', 'true');\n\t\tvimeoContainer.setAttribute('mozallowfullscreen', 'true');\n\t\tvimeoContainer.setAttribute('allowfullscreen', 'true');\n\t\tvimeoContainer.setAttribute('allow', 'autoplay');\n\n\t\tmediaElement.originalNode.parentNode.insertBefore(vimeoContainer, mediaElement.originalNode);\n\t\tmediaElement.originalNode.style.display = 'none';\n\n\t\tVimeoApi.load({\n\t\t\tiframe: vimeoContainer,\n\t\t\tid: vimeo.id\n\t\t});\n\n\t\tvimeo.hide = function () {\n\t\t\tvimeo.pause();\n\t\t\tif (vimeoPlayer) {\n\t\t\t\tvimeoContainer.style.display = 'none';\n\t\t\t}\n\t\t};\n\t\tvimeo.setSize = function (width, height) {\n\t\t\tvimeoContainer.setAttribute('width', width);\n\t\t\tvimeoContainer.setAttribute('height', height);\n\t\t};\n\t\tvimeo.show = function () {\n\t\t\tif (vimeoPlayer) {\n\t\t\t\tvimeoContainer.style.display = '';\n\t\t\t}\n\t\t};\n\n\t\tvimeo.destroy = function () {};\n\n\t\treturn vimeo;\n\t}\n};\n\nmejs.Utils.typeChecks.push(function (url) {\n\treturn (/(\\/\\/player\\.vimeo|vimeo\\.com)/i.test(url) ? 'video/x-vimeo' : null\n\t);\n});\n\nmejs.Renderers.add(vimeoIframeRenderer);\n\n},{}]},{},[1]);\n", "import {Controller} from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n    static targets = ['elementType'];\n\n    connect() {\n        console.log(\"ElementStatisticsController connected\");\n        this._setupTabChangeListener();\n        this._setLoader();\n        this._submitForm();\n    }\n\n    _setupTabChangeListener() {\n        const tabs = this.element.querySelectorAll('button[data-bs-toggle=\"tab\"]');\n        tabs.forEach((tab) => {\n            tab.addEventListener('shown.bs.tab', (event) => {\n                const elementType = this._getElementType(event);\n                this._updateElementType(elementType);\n\n                const activeTabPane = document.querySelector(`#${elementType}`);\n                if (activeTabPane && !activeTabPane.querySelector(\".card-group\")) {\n                    this._setLoader();\n                    this._submitForm();\n                }\n            });\n        });\n    }\n\n    _setLoader() {\n        const activeTab = document.querySelector(\".tab-pane.active\");\n        const informationsFrame = activeTab.querySelector(`#${this.elementTypeTarget.value}_informations`);\n        informationsFrame.innerHTML = this.data.get('loader');\n        const tableFrame = activeTab.querySelector(`#${this.elementTypeTarget.value}_table`);\n        tableFrame.innerHTML = this.data.get('loader');\n    }\n\n    _getElementType(event) {\n        let target = event.target.getAttribute('data-bs-target');\n        const elementType = target.slice(1);\n        console.log(`Type: ${elementType}`);\n        return elementType;\n    }\n\n    _updateElementType(elementType) {\n        this.elementTypeTarget.value = elementType;\n    }\n\n    _submitForm() {\n        const form = document.getElementById(`element_statistics_${this.elementTypeTarget.value}_form`);\n        Rails.fire(form, 'submit');\n    }\n}\n", "class DomParserSupport {\n    static get isSupported() {\n        if (!window.DOMParser) return false\n        let parser = new DOMParser()\n        try {\n            parser.parseFromString('x', 'text/html')\n        } catch (_error) {\n            return false\n        }\n        return true\n    }\n\n    static parse(text) {\n        const parser = new DOMParser()\n        let documentFragment = new DocumentFragment()\n        let doc = parser.parseFromString(text, 'text/html')\n        const children = Array.from(doc.querySelector('body').children)\n        Array.prototype.forEach.call(children, (element, _index) => {\n            documentFragment.appendChild(element)\n        })\n\n        return documentFragment\n    }\n}\n\nexport default DomParserSupport\n", "class SupportChecker {\n    static get intersectionObserverSupported() {\n        return 'IntersectionObserver' in window || 'IntersectionObserverEntry' in window ||\n            'intersectionRatio' in window.IntersectionObserverEntry.prototype\n    }\n\n    static get resizeObserverSupported() {\n        return 'ResizeObserver' in window || 'ResizeObserverEntry' in window ||\n            'intersectionRatio' in window.IntersectionObserverEntry.prototype\n    }\n\n    static get localStorageSupported() {\n        return typeof (Storage) !== 'undefined' || ('localStorage' in window && window['localStorage'] !== null)\n    }\n}\n\nexport default SupportChecker\n", "class LoadScripts {\n    static load(domElement) {\n        domElement.querySelectorAll('script').forEach((content) => {\n            const script = document.createElement('script')\n            script.innerHTML = content.innerHTML\n            document.head.appendChild(script).parentNode.removeChild(script)\n        })\n    }\n}\n\nexport default LoadScripts", "import {Controller} from '@hotwired/stimulus'\nimport DomParserSupport from '../components/utility/dom_parser_support'\nimport SupportChecker from '../components/utility/support_checker'\nimport LoadScripts from '../components/utility/load_scripts'\nimport {handleUnauthorized} from '../components/utility/handle_unauthorized'\n\nexport default class extends Controller {\n    static values = {\n        debug: {type: Boolean, default: false},\n        url: String,\n        autoload: {type: Boolean, default: true},\n        alternativeTargetQuery: String,\n        refreshInterval: Number,\n        spinner: String,\n        removeTargetOnFailure: false,\n        spinnerLabel: {type: String, default: 'Loading...'}\n    }\n    static targets = ['target']\n\n    connect() {\n        this._log('connected')\n        if (this.autoloadValue === true) this.load()\n\n        this.element['fetchHtml'] = {reload: this.reload.bind(this)}\n    }\n\n    disconnect() {\n        this._log('disconnected')\n        this._stopRefreshing()\n        this.intersectionObserver && this.intersectionObserver.disconnect()\n    }\n\n    load(_event) {\n        SupportChecker.intersectionObserverSupported ? this._lazyLoad() : this._load()\n    }\n\n    reload() {\n        this._log('reload called')\n        this.target.innerHTML = this.spinner\n        this._fetch()\n    }\n\n    _load() {\n        this._log('load called')\n        this._fetch()\n        if (this.hasRefreshIntervalValue) this._startRefreshing()\n    }\n\n    _fetch() {\n        this._log('fetch called')\n        fetch(this.urlValue, {\n            credentials: 'same-origin',\n            headers: {\n                'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`,\n                'X-Requested-With': 'XMLHttpRequest'\n            }\n        }).then(response => {\n            if (response.status === 401) handleUnauthorized(response)\n            if (!response.ok || response.redirected) throw new Error('Network response was not ok')\n            if (response.status === 201) this._stopRefreshing()\n            return response.text()\n        }).then(text => {\n            if (text.length === 0) return\n            if (DomParserSupport.isSupported) {\n                while (this.target.firstChild) this.target.removeChild(this.target.firstChild)\n                this.target.appendChild(DomParserSupport.parse(text))\n            } else {\n                this.target.innerHTML = text\n            }\n        }).then(() => {\n            LoadScripts.load(this.target)\n        }).catch(error => {\n            this._handleError()\n            console.log(error)\n        })\n    }\n\n    _handleError() {\n        this._stopRefreshing()\n        if (this.removeTargetOnFailureValue) {\n            this.target.remove()\n        } else {\n            this.target.innerText = 'Error'\n        }\n    }\n\n    _startRefreshing() {\n        this._log('startRefreshing called')\n        this.refreshTimer = setInterval(() => {\n            this._fetch()\n        }, this.refreshIntervalValue)\n    }\n\n    _stopRefreshing() {\n        if (this.refreshTimer) clearInterval(this.refreshTimer)\n    }\n\n    _lazyLoad() {\n        this.intersectionObserver = new IntersectionObserver((entries, observer) => {\n            entries.forEach((entry) => {\n                if (entry.isIntersecting) {\n                    this._load()\n                    observer.unobserve(entry.target)\n                }\n            })\n        })\n        this.intersectionObserver.observe(this.target)\n    }\n\n    _log(message) {\n        if (this.debugValue === true) console.log(`DEBUG fetch-html: ${message}`)\n    }\n\n    get spinner() {\n        return this.spinnerValue || `<div class=\"text-center py-4\"><div class=\"spinner-border\" role=\"status\"><span class=\"visually-hidden\">${this.spinnerLabelValue}</span></div></div>`\n    }\n\n    get target() {\n        if (this.hasAlternativeTargetQueryValue) {\n            return document.querySelector(this.alternativeTargetQueryValue)\n        } else {\n            return this.targetTarget\n        }\n    }\n}\n", "/*\n  Filterable Stimulus Controller v0.0.1\n\n  You can filter all kinds of Dom Elements from given an input element which triggers the filter function.\n  Every element specified with the 'data-filterable-target=\"element\"' attribute will be considers for the filter.\n  You can set a 'data-filterable-target=\"curriculum\"' in which a text is displayed when the filter does not match any\n  element.\n */\nimport {Controller} from '@hotwired/stimulus'\nimport {debounce} from 'debounce'\n\nexport default class extends Controller {\n    static values = {noEntriesHint: {type: String, default: '<p class=\"text-center text-muted\">No entries found</p>'}}\n    static targets = ['element', 'curriculum']\n\n    initialize() {\n        this.filter = debounce(this.filter, 500)\n    }\n\n    connect() {\n        let template = document.createElement('template')\n        template.innerHTML = this.noEntriesHintValue.trim()\n        this._noEntriesHint = template.content.firstChild\n    }\n\n    filter(event) {\n        const inputValue = event.target.value.trim().toLowerCase()\n        Array.prototype.forEach.call(this.elementTargets, function (element) {\n            if (element.textContent.toLowerCase().indexOf(inputValue) > -1) {\n                element.classList.remove('visually-hidden')\n            } else {\n                element.classList.add('visually-hidden')\n            }\n        })\n        this._handleNoEntriesHint()\n    }\n\n    _handleNoEntriesHint() {\n        if (this.curriculumTarget.querySelectorAll(':scope > div:not(.visually-hidden)').length === 0) {\n            this.curriculumTarget.appendChild(this._noEntriesHint)\n        } else if (this.curriculumTarget.contains(this._noEntriesHint)) {\n            this.curriculumTarget.removeChild(this._noEntriesHint)\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    initialize() {\n        this.element.dataset.preventLeave = \"false\";\n        Object.defineProperty(this, 'preventLeave', {\n            get: () => this.element.dataset.preventLeave === \"true\",\n            set: (value) => {\n                this.element.dataset.preventLeave = value ? \"true\" : \"false\";\n            },\n            configurable: true,\n        });\n        this._setupListeners()\n    }\n\n    _setupListeners() {\n        ['input', 'change'].forEach(type => {\n            this.element.addEventListener(type, () => (this.preventLeave = true))\n        })\n        this.element.addEventListener('submit', () => (this.preventLeave = false))\n\n        window.addEventListener('beforeunload', event => {\n            if (this.preventLeave) {\n                // do NOT remove this text! It is not shown, but it is required in firefox\n                event.returnValue = 'Are you sure?'\n                return event.returnValue\n            }\n        })\n    }\n}", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    connect() {\n        this._heartbeatTimeout = setInterval(function () {\n            fetch('/heartbeats', {\n                method: 'PATCH',\n                credentials: 'same-origin',\n                headers: {\n                    'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`,\n                    'Accept': 'application/json'\n                }\n            }).catch(error => console.log(error))\n        }, 300000)\n    }\n\n    disconnect() {\n        if (this._heartbeatTimeout) clearInterval(this._heartbeatTimeout)\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static values = {url: String}\n    static targets = ['entries', 'intersection']\n\n    connect() {\n        this.intersectionObserver = new IntersectionObserver((entries, observer) => {\n            entries.forEach((entry) => {\n                if (entry.isIntersecting) {\n                    this._load()\n                }\n            })\n        })\n        this.intersectionObserver.observe(this.intersectionTarget)\n    }\n\n    _load() {\n        if (this.urlValue.length === 0) {\n            while (this.intersectionTarget.firstChild) this.intersectionTarget.removeChild(this.intersectionTarget.firstChild)\n            return\n        }\n\n        fetch(this.urlValue, {\n            credentials: 'same-origin',\n            headers: {\n                'Accept': 'application/json',\n                'Content-Type': 'application/json',\n                'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`\n            }\n        }).then(response => {\n            if (!response.ok || response.redirected) throw new Error('Network response was not ok')\n            return response.json()\n        }).then(json => {\n            this.entriesTarget.insertAdjacentHTML('afterbegin', json.entries)\n            this.urlValue = json.url\n        }).catch(error => {\n            console.log(error)\n        })\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n\n    initialize() {\n        this.setShowLeavingAlert('true')\n    }\n\n    leavingPage(event) {\n        if (this.showLeavingAlert()) {\n            // do NOT remove this text! It is not shown, but it is required in firefox\n            event.returnValue = 'Are you sure?'\n            return event.returnValue\n        }\n    }\n\n    allowFormSubmission(_event) {\n        this.setShowLeavingAlert('false')\n    }\n\n    setShowLeavingAlert(showAlert) {\n        this.data.set(\"showAlert\", showAlert)\n    }\n\n    showLeavingAlert() {\n        return this.data.get(\"showAlert\") === 'true'\n    }\n}\n", "import {Controller} from \"@hotwired/stimulus\"\nimport {Modal} from \"bootstrap\"\n\nexport default class extends Controller {\n    static values = {\n        resourceType: String,\n        resourceId: Number,\n        lockTimeInSeconds: Number,\n        redirectPath: String,\n        extendLockPath: String,\n        editLockEnabled: Boolean\n    }\n\n    connect() {\n        console.log(\"TimeoutModalController connected.\");\n        // trigger automatic extension of edit time, if user enters site with little lockTimeInSeconds left\n        if (this.editLockEnabledValue && this.lockTimeInSecondsValue <= 65) {\n            this.extendLockAndHideModal();\n        }\n    }\n\n    disconnect() {\n        console.log(\"TimeoutModalController disconnected.\");\n        this.clearCountdown();\n    }\n\n    /*\n    * Stimulus callback\n    * Entering edit sites set a lockTimeInSecondsValue, which should result in a new countdown\n    */\n    lockTimeInSecondsValueChanged(newValue, oldValue) {\n        if (this.lockTimeInSecondsValue > 65) {\n            console.log(`Lock time changed from ${oldValue} to ${newValue}.`);\n            this.restartCountdown();\n        }\n    }\n\n    // response triggers callback lockTimeInSecondsValueChanged\n    extendLockAndHideModal() {\n        Rails.ajax({\n            type: \"GET\",\n            url: this.extendLockPathValue,\n            dataType: \"script\",\n            success: () => {\n                console.log(\"Lock automatically extended.\");\n\n                const modalElement = document.getElementById('timeoutModal');\n                if (modalElement) {\n                    const modal = Modal.getInstance(modalElement) || new Modal(modalElement);\n                    this.removeModal(modal, modalElement);\n                }\n            },\n            error: (err) => {\n                console.log(\"Failed to extend lock:\", err);\n                this.showModal();\n            }\n        });\n    }\n\n    restartCountdown() {\n        this.clearCountdown();\n        this.startCountdown();\n        console.log(\"Countdown restarted.\");\n    }\n\n    clearCountdown() {\n        clearTimeout(this.countdownTimeout);\n        this.countdownTimeout = null;\n        console.log('Countdown cleared.');\n    }\n\n    startCountdown() {\n        const lockTimeInMilliseconds = (this.lockTimeInSecondsValue - 65) * 1000;\n\n        this.countdownTimeout = setTimeout(() => {\n            this.handleTimeout();\n        }, lockTimeInMilliseconds);\n\n        console.log(`Countdown started for ${this.lockTimeInSecondsValue} seconds.`);\n    }\n\n    removeModal(modal, modalElement) {\n        modalElement.addEventListener('hidden.bs.modal', () => {\n            modalElement.remove();\n\n            const modalBackdrop = document.querySelector('.modal-backdrop');\n            if (modalBackdrop) {\n                modalBackdrop.remove();\n            }\n            document.body.style.overflow = '';\n        }, {once: true});\n\n        modal.hide();\n    }\n\n    showModal() {\n        this.closeExistingModals();\n\n        const template = document.getElementById('timeoutModalTemplate');\n        const modalClone = template.content.cloneNode(true);\n        document.body.appendChild(modalClone);\n\n        const modalElement = document.getElementById('timeoutModal');\n        const modal = new Modal(modalElement);\n        modal.show();\n\n        this.addExtendLockListener(modal, modalElement);\n        this.addFormSubmissionListener(modal, modalElement);\n    }\n\n    closeExistingModals() {\n        const openModalCloseButtons = document.querySelectorAll('.modal.show button.btn-close[data-bs-dismiss=\"modal\"]');\n        openModalCloseButtons.forEach(button => button.click());\n    }\n\n    handleTimeout() {\n        if (this.editLockEnabledValue === false) {\n            this.extendLockAndHideModal();\n        } else if (this.uploadIsInProgress()) {\n            console.log(\"Upload in progress. Extending lock automatically.\");\n            this.extendLockAndHideModal();\n        } else {\n            console.log(\"Showing timeout modal.\");\n            this.showModal();\n        }\n    }\n\n    uploadIsInProgress() {\n        return document.querySelector('.is-uploading') !== null;\n    }\n\n    addExtendLockListener(modal, modalElement) {\n        const extendEditLink = modalElement.querySelector('#timeoutContinueButton');\n        extendEditLink.addEventListener('click', (event) => {\n            event.preventDefault();\n\n            // guard against multiple clicks\n            if (extendEditLink.dataset.clicked === 'true') return;\n            extendEditLink.dataset.clicked = 'true';\n\n            // visual / functional disabling\n            extendEditLink.classList.add('disabled');\n            extendEditLink.setAttribute('aria-disabled', 'true');\n            extendEditLink.style.pointerEvents = 'none';\n\n            this.extendLockAndHideModal();\n        }, {once: true});\n    }\n\n    addFormSubmissionListener(modal, modalElement) {\n        const confirmButton = modalElement.querySelector('#timeoutConfirmButton');\n        confirmButton.addEventListener('click', () => {\n            this.removeModal(modal, modalElement);\n            window.onbeforeunload = null;\n            this.saveAndRedirect();\n        });\n    }\n\n    saveAndRedirect() {\n        this.disableFormLeave();\n\n        const autoSaveFlags = document.querySelectorAll('.auto_save_flag');\n        if (autoSaveFlags.length > 0) {\n            autoSaveFlags.forEach((flag) => {\n                flag.value = 'true';\n            });\n            this.saveChanges();\n        } else {\n            window.location.href = this.redirectPathValue;\n        }\n\n        setTimeout(() => {\n            console.log(\"Force redirect.\")\n            this.forceRedirect();\n        }, 3500);\n    }\n\n    saveChanges() {\n        const submitButtons = this.querySubmitButtons();\n        console.log(`Triggering submit on ${submitButtons.length} forms.`);\n        if (submitButtons.length > 0) {\n            submitButtons.forEach((button) => button.click());\n        }\n    }\n\n    querySubmitButtons() {\n        const timeSettingsForm = document.querySelector('#timeSettingsForm');\n        if (timeSettingsForm) {\n            const selectedRadio = document.querySelector('input[name=\"tutorial[time_type]\"]:checked');\n            const radioBsTargetId = selectedRadio.value;\n            const form = this.getTimeSettingsForm(radioBsTargetId);\n            return form ? form.querySelectorAll('button[name=\"button\"][type=\"submit\"]') : [];\n        } else {\n            const selector = 'button[name=\"button\"][type=\"submit\"]:not([data-triggers-external-api])';\n            return document.querySelectorAll(selector);\n        }\n    }\n\n    getTimeSettingsForm(bsTargetId) {\n        if (parseInt(bsTargetId) === 0) {\n            return null;\n        } else if (parseInt(bsTargetId) === 1) {\n            return document.querySelector('#repetitionsAreaForm');\n        } else if (parseInt(bsTargetId) === 2) {\n            return document.querySelector('#exceedsAreaForm');\n        } else if (parseInt(bsTargetId) === 3) {\n            return document.querySelector('#dripFeedSettingsAreaForm');\n        }\n    }\n\n    disableFormLeave() {\n        document.querySelectorAll('[data-controller~=\"form-leave\"]').forEach(el => {\n            el.dataset.preventLeave = \"false\";\n        });\n    }\n\n    forceRedirect() {\n        this.disableFormLeave();\n\n        document.querySelectorAll('form').forEach(form => form.remove());\n        window.location.href = this.redirectPathValue;\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nimport 'mediaelement'\nimport 'mediaelement/build/lang/de'\nimport 'mediaelement/build/lang/fr'\nimport 'mediaelement/build/lang/es'\nimport 'mediaelement/build/renderers/vimeo'\n\nexport default class extends Controller {\n    static targets = ['mediaElement']\n    static values = {dashPath: String, hlsPath: String, iconSpritePath: String}\n\n    initialize() {\n        mejs.i18n.language(document.documentElement.lang)\n    }\n\n    connect() {\n        this._sourceType = this.mediaElementTarget.querySelector('source').getAttribute('type')\n        this._mediaElementPlayer = new MediaElementPlayer(this.mediaElementTarget, this._createOptionsHashForPlayer())\n        // The renderer for html5 streaming elements is not defined and the muted option for that is a set through the\n        // parentNode. The parentNode seems to be the streaming player, dash or hls. For all other elements we can mute\n        // the media element directly.\n        if (typeof this._mediaElementPlayer.media.rendererName === 'undefined') {\n            this._mediaElement = this._mediaElementPlayer.media.parentNode\n        } else {\n            this._mediaElement = this._mediaElementPlayer.media\n        }\n        this._mediaElement.setMuted(localStorage.getItem('mute') === 'true')\n        this._installMediaElementListener()\n        this._disableRightClickOnContextMenu()\n    }\n\n    disconnect() {\n        this._uninstallMediaElementListener()\n    }\n\n    _disableRightClickOnContextMenu() {\n        Array.prototype.forEach.call(document.querySelectorAll('.mejs__container'), function (element, _index) {\n            element.oncontextmenu = function () {\n                return false\n            }\n        })\n    }\n\n    _createOptionsHashForPlayer() {\n        let startVolume = localStorage.getItem('volume') !== null ? localStorage.getItem('volume') : 0.8\n        if (this.mediaElementTarget.nodeName === 'AUDIO') {\n            return {\n                iconSprite: this.iconSpritePathValue,\n                startVolume: startVolume,\n            }\n        } else if (this._sourceType === 'video/vimeo' || this._sourceType === 'video/youtube') {\n            return {\n                renderers: ['youtube_iframe', 'vimeo_iframe'],\n                features: ['playpause', 'progress', 'current', 'duration', 'tracks', 'volume', 'fullscreen'],\n                iconSprite: this.iconSpritePathValue,\n                autoRewind: false,\n                startVolume: startVolume,\n                youtube: {\n                    nocookie: true\n                }\n            }\n        } else if (this.mediaElementTarget.nodeName === 'VIDEO') {\n            if (mejs.Features.isiOS) {\n                Array.prototype.forEach.call(this.mediaElementTarget.querySelectorAll('source'), function (source, _index) {\n                    if (source.src.indexOf('.mpd') !== -1) source.disabled = true\n                })\n            }\n            return {\n                renderers: ['native_dash', 'native_hls', 'html5'],\n                features: ['playpause', 'progress', 'current', 'duration', 'tracks', 'volume', 'fullscreen'],\n                iconSprite: this.iconSpritePathValue,\n                autoRewind: false,\n                startVolume: startVolume,\n                dash: {path: this.dashPathValue},\n                hls: {path: this.hlsPathValue}\n            }\n        }\n    }\n\n    _handleVolumeChange() {\n        if (this._mediaElement.options.startVolume !== this._mediaElement.getVolume()) {\n            localStorage.setItem('volume', this._mediaElement.getVolume())\n        }\n        localStorage.setItem('mute', this._mediaElement.muted)\n    }\n\n    _handleMediaEnd() {\n        let toggleProgressCheckBox = document.getElementById('flexSwitchToggleProgress')\n        if (toggleProgressCheckBox && !toggleProgressCheckBox.checked) toggleProgressCheckBox.click()\n    }\n\n    _installMediaElementListener() {\n        this._mediaElement.addEventListener('volumechange', () => this._handleVolumeChange())\n        this._mediaElement.addEventListener('ended', this._handleMediaEnd)\n    }\n\n    _uninstallMediaElementListener() {\n        this._mediaElement.removeEventListener('volumechange', () => this._handleVolumeChange())\n        this._mediaElement.removeEventListener('ended', this._handleMediaEnd)\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {Modal} from 'bootstrap'\nimport SupportChecker from '../components/utility/support_checker'\n\nexport default class extends Controller {\n    initialize() {\n        this._handlePostSuccess = this._handlePostSuccess.bind(this)\n        this._handlePostError = this._handlePostError.bind(this)\n    }\n\n    connect() {\n        this._modal = this.element.closest('.modal')\n        this._installAjaxListener()\n        this._installResizeObserver()\n\n        this.element['modal'] = {close: this.close.bind(this)}\n    }\n\n    disconnect() {\n        this._uninstallAjaxListener()\n        this._uninstallResizeObserver()\n    }\n\n    _installAjaxListener() {\n        this.element.addEventListener('ajax:success', this._handlePostSuccess)\n        this.element.addEventListener('ajax:error', this._handlePostError)\n    }\n\n    close(_event) {\n        Modal.getInstance(this._modal)?.hide()\n    }\n\n    _uninstallAjaxListener() {\n        this.element.removeEventListener('ajax:success', this._handlePostSuccess)\n        this.element.removeEventListener('ajax:error', this._handlePostError)\n    }\n\n    _installResizeObserver() {\n        if (SupportChecker.resizeObserverSupported) this._handleResize()\n    }\n\n    _uninstallResizeObserver() {\n        this._resizeObserver && this._resizeObserver.disconnect()\n    }\n\n    _handlePostSuccess(event) {\n        if (this._modal && !event.target.hasAttribute('data-do-not-close-modal-on-submit')) {\n            Modal.getInstance(this._modal)?.hide()\n        }\n    }\n\n    _handlePostError(event) {\n        this._log('post error called')\n        let [data, status, xhr] = event.detail\n        this._log(`post error status -> ${status}`)\n        if (data.responseText) this._log(`post error response text -> ${data.responseText}`)\n    }\n\n    _handleResize() {\n        this._resizeObserver = new ResizeObserver((entries, _observer) => {\n            entries.forEach((entry) => {\n                Modal.getInstance(this._modal)?.handleUpdate()\n            })\n        })\n        this._resizeObserver.observe(this._modal)\n    }\n\n    _log(message) {\n        console.debug(`DEBUG modal: ${message}`)\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {Modal} from 'bootstrap'\nimport DomParserSupport from '../components/utility/dom_parser_support'\nimport LoadScripts from '../components/utility/load_scripts'\nimport {handleUnauthorized} from '../components/utility/handle_unauthorized'\n\nexport default class extends Controller {\n    static values = {\n        size: String, // sm, lg, xl\n        backdrop: {type: String, default: 'static'}, // true, false or 'static'\n        keyboard: {type: Boolean, default: true},\n        focus: {type: Boolean, default: true},\n        url: String,\n        autoOpen: {type: Boolean, default: false},\n        disableFocusTrap: {type: Boolean, default: false}\n    }\n\n    initialize() {\n        this._handleShown = this._handleShown.bind(this)\n        this._handleHide = this._handleHide.bind(this)\n    }\n\n    connect() {\n        if (this.autoOpenValue === true) this.openModal()\n    }\n\n    disconnect() {\n        this._uninstallModalHandler()\n    }\n\n    openModal(event) {\n        if (event) event.preventDefault();\n\n        if (this.element.disabled) return\n\n        this.element.disabled = true\n        this.element.classList.add('disabled')\n\n        this._modalHolder = document.getElementById('modalHolder')\n\n        let url = this.hasUrlValue ? new URL(this.urlValue) : new URL(this.element.href)\n        if (this.hasSizeValue) url.search = new URLSearchParams({size: this.sizeValue}).toString()\n\n        fetch(url, {\n            credentials: 'same-origin',\n            headers: {\n                'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`,\n                'X-Requested-With': 'XMLHttpRequest'\n            }\n        }).then(response => {\n            if (response.status === 401) handleUnauthorized(response)\n            if (!response.ok || response.redirected) throw new Error('Network response was not ok')\n            return response.text()\n        }).then(text => {\n            if (DomParserSupport.isSupported) {\n                this._modalHolder.appendChild(DomParserSupport.parse(text))\n            } else {\n                this._modalHolder.insertAdjacentHTML('beforeend', text)\n            }\n        }).then(() => {\n            this._modal = this._modalHolder.lastChild\n            const modalDialog = new Modal(this._modal, {\n                backdrop: this.backdropValue,\n                keyboard: this.keyboardValue,\n                focus: this.focusValue\n            })\n            modalDialog.show()\n            this._installModalHandler()\n        }).then(() =>\n            LoadScripts.load(this._modal)\n        ).catch(error =>\n            console.log(error)\n        )\n    }\n\n    _installModalHandler() {\n        if (this._modal === undefined) return\n\n        this._modal.addEventListener('shown.bs.modal', this._handleShown)\n        this._modal.addEventListener('hide.bs.modal', this._handleHide)\n    }\n\n    _uninstallModalHandler() {\n        if (this._modal === undefined) return\n\n        this._modal.removeEventListener('shown.bs.modal', this._handleShown)\n        this._modal.removeEventListener('hide.bs.modal', this._handleHide)\n    }\n\n    _handleShown(_event) {\n        let focusElement = this._modalHolder.querySelector('[autofocus]')\n        if (focusElement) focusElement.focus()\n    }\n\n    _handleHide(_event) {\n        this.element.disabled = false\n        this.element.classList.remove('disabled')\n        this._modal.remove()\n        if (this._modalHolder !== undefined) {\n            this._modalHolder.querySelector('.modal.show')?.focus()\n        }\n    }\n\n    // Bootstrap has no option to disable the focusTrap.\n    // Bootstrap only uses the methods \"activate\" and \"deactivate\" on the _focustrap object, so we override it with noop\n    _disableFocusTrap(modalDialog) {\n        modalDialog._focustrap = {\n            activate: () => {\n            },\n            deactivate: () => {\n            }\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['scrollable', 'navTabs']\n    static values = {overflowing: String, scroll_range: {type: Number, default: 200}}\n\n    initialize() {\n        this.scrolling = false\n    }\n\n    connect() {\n        this._moveToCurrentTab()\n        this._setOverflowingValue()\n    }\n\n    scroll(_event) {\n        // Wrap event in ticking frames to not fire a ridiculous amount of scroll events.\n        if (!this.scrolling) {\n            window.requestAnimationFrame(() => {\n                this._setOverflowingValue()\n                this.scrolling = false\n            })\n        }\n        this.scrolling = true\n    }\n\n    moveLeft(_event) {\n        this.scrollableTarget.scrollBy({top: 0, left: (0 - this.scrollRangeValue), behavior: 'smooth'})\n        this._setOverflowingValue()\n    }\n\n    moveRight(_event) {\n        this.scrollableTarget.scrollBy({top: 0, left: this.scrollRangeValue, behavior: 'smooth'})\n        this._setOverflowingValue()\n    }\n\n    _setOverflowingValue() {\n        this.overflowingValue = this._determineHorizontalOverflow(this.navTabsTarget, this.scrollableTarget)\n    }\n\n    _determineHorizontalOverflow(content, container) {\n        const containerMetrics = container.getBoundingClientRect()\n        const containerMetricsRight = Math.floor(containerMetrics.right)\n        const containerMetricsLeft = Math.floor(containerMetrics.left)\n        const contentMetrics = content.getBoundingClientRect()\n        const contentMetricsRight = Math.floor(contentMetrics.right)\n        const contentMetricsLeft = Math.floor(contentMetrics.left)\n        if (containerMetricsLeft > contentMetricsLeft && containerMetricsRight < contentMetricsRight) {\n            return 'both'\n        } else if (contentMetricsLeft < containerMetricsLeft) {\n            return 'left'\n        } else if (contentMetricsRight > containerMetricsRight) {\n            return 'right'\n        } else {\n            return 'none'\n        }\n    }\n\n    _moveToCurrentTab() {\n        const currentItem = this.element.querySelector('[aria-current=\"page\"],[aria-selected=\"true\"]')\n        if (currentItem) currentItem.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'center'})\n    }\n}\n", "import { Controller as n } from \"@hotwired/stimulus\";\nclass r extends n {\n  add(t) {\n    t.preventDefault();\n    const e = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime().toString());\n    this.targetTarget.insertAdjacentHTML(\"beforebegin\", e);\n  }\n  remove(t) {\n    t.preventDefault();\n    const e = t.target.closest(this.wrapperSelectorValue);\n    if (e.dataset.newRecord === \"true\")\n      e.remove();\n    else {\n      e.style.display = \"none\";\n      const a = e.querySelector(\"input[name*='_destroy']\");\n      a.value = \"1\";\n    }\n  }\n}\nr.targets = [\"target\", \"template\"];\nr.values = {\n  wrapperSelector: {\n    type: String,\n    default: \".nested-form-wrapper\"\n  }\n};\nexport {\n  r as default\n};\n", "import NestedForm from 'stimulus-rails-nested-form'\n\nexport default class extends NestedForm {\n    add(event) {\n        super.add(event)\n        let lastWrapper = Array.from(this.element.querySelectorAll(this.wrapperSelectorValue)).pop()\n        lastWrapper.querySelector('input[type=text], input[type=number]')?.focus()\n    }\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"no-paste\"\nexport default class extends Controller {\n    connect() {\n        this.element.addEventListener(\"paste\", e => e.preventDefault());\n        // if we ever want to upgrade\n        //this.element.addEventListener(\"copy\", e => e.preventDefault());\n        //this.element.addEventListener(\"cut\", e => e.preventDefault());\n        this.element.addEventListener(\"contextmenu\", e => e.preventDefault());\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['indicator']\n    static values = {url: String, alternativeTargetQuery: String}\n\n    connect() {\n        if (document.documentElement.hasAttribute('data-turbolinks-preview')) return\n\n        this.load()\n        this.element['notification'] = {reload: this.load.bind(this)}\n    }\n\n    load() {\n        fetch(this.urlValue, {\n            credentials: 'same-origin',\n            headers: {\n                'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`,\n                'Accept': 'application/json'\n            }\n        }).then(response => response.json())\n            .then(json => this.setIndicator(json))\n            .catch(error => console.log(error))\n    }\n\n    setIndicator(responseJson) {\n        if (responseJson.notifications === true) {\n            this.indicatorElements.forEach((target, _) => {\n                target.classList.add('navbar_user_notifications__indicator--active')\n            })\n        } else {\n            this.indicatorElements.forEach((target, _) => {\n                target.classList.remove('navbar_user_notifications__indicator--active')\n            })\n        }\n    }\n\n    get indicatorElements() {\n        let targets = []\n        if (this.hasAlternativeTargetQueryValue) {\n            targets = Array.from(document.querySelectorAll(this.alternativeTargetQueryValue))\n            targets.push(this.indicatorTarget)\n            return targets\n        } else {\n            return [this.indicatorTarget]\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport SupportChecker from \"../components/utility/support_checker\";\n\nexport default class extends Controller {\n    toggle(_event) {\n        let user_password_input = this.element.parentElement.querySelector('input')\n\n        this.element.querySelector('.fa-eye').parentElement.toggleAttribute('hidden')\n        this.element.querySelector('.fa-eye-slash').parentElement.toggleAttribute('hidden')\n        if (this.element.querySelector('.fa-eye').parentElement.hasAttribute('hidden')) {\n            user_password_input.setAttribute('type', 'text')\n        } else {\n            user_password_input.setAttribute('type', 'password')\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {TutorizeClassicEditor} from 'ckeditor5'\n\nexport default class extends Controller {\n    static targets = ['form']\n\n    connect() {\n        console.log('PdfSummaryConfirmationController connected.');\n        this._setupEventListeners();\n    }\n\n    disconnect() {\n        console.log('PdfSummaryConfirmationController disconnected.');\n    }\n\n    _setupEventListeners() {\n        this._setupGenerateButtonListener();\n        this._setupAccordionListeners();\n    }\n\n    _setupGenerateButtonListener() {\n        window.addEventListener('pdf-summary:generated', this._handleSummaryGenerated.bind(this));\n        const generateButton = document.getElementById('generateButton');\n\n        if (generateButton) {\n            generateButton.addEventListener('click', this._disableButtons.bind(this));\n        } else {\n            console.warn('generateButton element not found, retrying in 5 seconds...');\n            setTimeout(() => {\n                this._setupGenerateButtonListener();\n            }, 5000);\n        }\n    }\n\n    _setupAccordionListeners() {\n        const collapseElement = document.getElementById('collapseCreateSummaryInputForm');\n\n        if (collapseElement) {\n            collapseElement.addEventListener('shown.bs.collapse', () => {\n                const submitButton = document.getElementById('contentSubmitButton');\n                if (submitButton) {\n                    submitButton.disabled = true;\n                }\n            });\n            collapseElement.addEventListener('hidden.bs.collapse', () => {\n                const submitButton = document.getElementById('contentSubmitButton');\n                if (submitButton) {\n                    submitButton.disabled = false;\n                }\n            });\n        } else {\n            console.warn('collapseCreateSummaryInputForm element not found, retrying in 5 seconds...');\n            setTimeout(() => {\n                this._setupAccordionListeners();\n            }, 5000);\n        }\n    }\n\n\n    _disableButtons() {\n        const acceptButton = document.getElementById('acceptButton');\n        const contentSubmitButton = document.getElementById('contentSubmitButton');\n        const summaryAccordionButton = document.getElementById('summaryAccordionButton')\n        acceptButton.disabled = true;\n        contentSubmitButton.disabled = true;\n        summaryAccordionButton.disabled = true;\n    }\n\n    _handleSummaryGenerated(event) {\n        const summary = event.detail.summary;\n        this._setGeneratedText(summary);\n        this._enableButtons();\n    }\n\n    _enableButtons() {\n        const acceptButton = document.getElementById('acceptButton');\n        const contentSubmitButton = document.getElementById('contentSubmitButton');\n        const summaryAccordionButton = document.getElementById('summaryAccordionButton')\n        acceptButton.disabled = false;\n        contentSubmitButton.disabled = false;\n        summaryAccordionButton.disabled = false;\n    }\n\n    acceptSummary() {\n        const summary = document.querySelector('#generatedText').value;\n        if (!this._updateCKDescriptionText(summary) && !this._updateDescriptionText(summary)) {\n            console.warn('No valid target found for updating description.');\n        }\n        this._enableButtons();\n        this._closeAccordion();\n        this._saveChange();\n    }\n\n    _setGeneratedText(summary) {\n        const generatedTextArea = document.querySelector('#generatedText');\n        generatedTextArea.value = summary;\n    }\n\n    // Updates CKEditor\n    _updateCKDescriptionText(summary) {\n        const editorContainer = this.formTarget.querySelector('[data-controller=\"editor\"]');\n        if (!editorContainer || !editorContainer.editorInstance) return false;\n\n        editorContainer.editorInstance.setData(summary);\n        return true;\n    }\n\n    _updateDescriptionText(summary) {\n        const textarea = document.querySelector('#content_versionings_pdf_description');\n        if (!textarea) return false;\n\n        textarea.value = summary;\n        return true;\n    }\n\n    _closeAccordion() {\n        const summaryAccordionButton = document.getElementById('summaryAccordionButton')\n        summaryAccordionButton.disabled = false;\n        summaryAccordionButton.click();\n    }\n\n    _saveChange() {\n        const submitButton = this.formTarget.querySelector('button[type=\"submit\"]');\n        submitButton.click();\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {Popover} from 'bootstrap'\n\nexport default class extends Controller {\n    static values = {\n        remoteUrl: String,\n        trigger: 'click hover focus' // Value can be click, hover, focus, manual or multiple values at once.\n    }\n\n    initialize() {\n        this._handlePopoverShown = this._handlePopoverShown.bind(this)\n    }\n\n    connect() {\n        this._popover = new Popover(this.element, {\n            trigger: this.triggerValue,\n            html: true\n        })\n        if (this.hasRemoteUrlValue) this._installPopoverShownListener()\n    }\n\n    _installPopoverShownListener() {\n        this.element.addEventListener('shown.bs.popover', this._handlePopoverShown)\n    }\n\n    _handlePopoverShown(_event) {\n        fetch(this.remoteUrlValue, {\n            credentials: 'same-origin',\n            headers: {\n                'X-CSRF-Token': `${document.head.querySelector('meta[name=\"csrf-token\"]').content}`,\n                'X-Requested-With': 'XMLHttpRequest'\n            }\n        }).then(response => {\n            if (!response.ok || response.redirected) throw new Error('Network response was not ok')\n            return response.text()\n        }).then(text => {\n            this._popover.tip.querySelector('.popover-body').innerHTML = text\n            this._popover.update()\n        }).catch(error => console.log(error))\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['radio']\n\n    perform(event) {\n        let currentRadio = event.target\n\n        Array.prototype.forEach.call(this.radioTargets, function (element) {\n            element.checked = false\n        })\n        currentRadio.checked = true\n    }\n}\n", "/*!\n * @preserve\n * \n * Readmore.js plugin\n * Author: @jed_foster\n * Project home: jedfoster.com/Readmore.js\n * Version: 3.0.0-beta-1\n * Licensed under the MIT license\n * \n * Debounce function from davidwalsh.name/javascript-debounce-function\n */\nlet uniqueIdCounter = 0;\n\nconst isCssEmbeddedFor = [];\n\n// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md\n((function removePolyfill(arr) {\n  arr.forEach((item) => {\n    if (Object.prototype.hasOwnProperty.call(item, 'remove')) {\n      return;\n    }\n    Object.defineProperty(item, 'remove', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: function remove() {\n        if (this.parentNode !== null) {\n          this.parentNode.removeChild(this);\n        }\n      }\n    });\n  });\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]));\n\nfunction forEach(arr, callback, scope) {\n  for (let i = 0; i < arr.length; i += 1) {\n    callback.call(scope, arr[i], i);\n  }\n}\n\nfunction extend(...objects) {\n  const hasProp = {}.hasOwnProperty;\n  let child = objects[0];\n  let parent = objects[1];\n\n  if (objects.length > 2) {\n    const args = [];\n\n    Object.keys(objects).forEach((key) => {\n      args.push(objects[key]);\n    });\n\n    while (args.length > 2) {\n      const c1 = args.shift();\n      const p1 = args.shift();\n      args.unshift(extend(c1, p1));\n    }\n\n    child = args.shift();\n    parent = args.shift();\n  }\n\n  if (parent) {\n    Object.keys(parent).forEach((key) => {\n      if (hasProp.call(parent, key)) {\n        if (typeof parent[key] === 'object') {\n          child[key] = child[key] || {};\n          child[key] = extend(child[key], parent[key]);\n        } else {\n          child[key] = parent[key];\n        }\n      }\n    });\n  }\n\n  return child;\n}\n\nfunction debounce(func, wait, immediate) {\n  let timeout;\n\n  return function debouncedFunc(...args) {\n    const callNow = immediate && !timeout;\n    const later = () => {\n      timeout = null;\n      if (!immediate) func.apply(this, args);\n    };\n\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n\n    if (callNow) func.apply(this, args);\n  };\n}\n\nfunction uniqueId() {\n  uniqueIdCounter += 1;\n\n  return `rmjs-${uniqueIdCounter}`;\n}\n\nfunction setBoxHeights(element) {\n  element.style.height = 'auto';\n\n  const expandedHeight = parseInt(element.getBoundingClientRect().height, 10);\n  const cssMaxHeight = parseInt(window.getComputedStyle(element).maxHeight, 10);\n  const defaultHeight = parseInt(element.readmore.defaultHeight, 10);\n\n  // Store our measurements.\n  element.readmore.expandedHeight = expandedHeight;\n  element.readmore.maxHeight = cssMaxHeight;\n  element.readmore.collapsedHeight = cssMaxHeight || element.readmore.collapsedHeight || defaultHeight;\n\n  element.style.maxHeight = 'none';\n}\n\nfunction createElementFromString(htmlString) {\n  const div = document.createElement('div');\n  div.innerHTML = htmlString;\n\n  return div.firstChild;\n}\n\nfunction embedCSS(selector, options) {\n  if (!isCssEmbeddedFor[selector]) {\n    let styles = '';\n\n    if (options.embedCSS && options.blockCSS !== '') {\n      styles += `${selector} + [data-readmore-toggle], ${selector}[data-readmore] {\n        ${options.blockCSS}\n      }`;\n    }\n\n    // Include the transition CSS even if embedCSS is false\n    styles += `${selector}[data-readmore] {\n      transition: height ${options.speed}ms;\n      overflow: hidden;\n    }`;\n\n    (((d, u) => {\n      const css = d.createElement('style');\n      css.type = 'text/css';\n\n      if (css.styleSheet) {\n        css.styleSheet.cssText = u;\n      } else {\n        css.appendChild(d.createTextNode(u));\n      }\n\n      d.getElementsByTagName('head')[0].appendChild(css);\n    })(document, styles));\n\n    isCssEmbeddedFor[selector] = true;\n  }\n}\n\nfunction buildToggle(link, element, scope) {\n  function clickHandler(event) {\n    this.toggle(element, event);\n  }\n\n  let text = link;\n  if (typeof link === 'function') {\n    text = link(element);\n  }\n\n  const toggleLink = createElementFromString(text);\n  toggleLink.setAttribute('data-readmore-toggle', element.id);\n  toggleLink.setAttribute('aria-controls', element.id);\n  toggleLink.addEventListener('click', clickHandler.bind(scope));\n\n  return toggleLink;\n}\n\nfunction isEnvironmentSupported() {\n  return (typeof window !== 'undefined' && typeof document !== 'undefined')\n    && !!document.querySelectorAll && !!window.addEventListener;\n}\n\nconst resizeBoxes = debounce(() => {\n  const elements = document.querySelectorAll('[data-readmore]');\n\n  forEach(elements, (element) => {\n    const expanded = element.getAttribute('aria-expanded') === 'true';\n\n    setBoxHeights(element);\n\n    element.style.height = `${expanded ? element.readmore.expandedHeight : element.readmore.collapsedHeight}px`;\n  });\n}, 100);\n\nconst defaults = {\n  speed: 100,\n  collapsedHeight: 200,\n  heightMargin: 16,\n  moreLink: '<a href=\"#\">Read More</a>',\n  lessLink: '<a href=\"#\">Close</a>',\n  embedCSS: true,\n  blockCSS: 'display: block; width: 100%;',\n  startOpen: false,\n  sourceOrder: 'after',\n\n  // callbacks\n  blockProcessed: () => {},\n  beforeToggle: () => {},\n  afterToggle: () => {}\n};\n\nclass Readmore {\n  constructor(...args) {\n    if (!isEnvironmentSupported()) return;\n\n    const [selector, options] = args;\n    let elements;\n\n    if (typeof selector === 'string') {\n      elements = document.querySelectorAll(selector);\n    } else if (selector.nodeName) {\n      elements = [selector]; // emulate a NodeList by casting a single Node as an array\n    } else {\n      elements = selector;\n    }\n\n    // After all that, if we _still_ don't have iteratable NodeList, bail out.\n    if (!elements.length) return;\n\n    this.options = extend({}, defaults, options);\n\n    if (typeof selector === 'string') {\n      embedCSS(selector, this.options);\n    } else {\n      // Instances need distinct selectors so they don't stomp on each other.\n      this.instanceSelector = `.${uniqueId()}`;\n      embedCSS(this.instanceSelector, this.options);\n    }\n\n    // Need to resize boxes when the page has fully loaded.\n    window.addEventListener('load', resizeBoxes);\n    window.addEventListener('resize', resizeBoxes);\n\n    this.elements = [];\n\n    forEach(elements, (element) => {\n      if (this.instanceSelector) {\n        element.classList.add(this.instanceSelector.substr(1));\n      }\n\n      const expanded = this.options.startOpen;\n\n      element.readmore = {\n        defaultHeight: this.options.collapsedHeight,\n        heightMargin: this.options.heightMargin\n      };\n\n      setBoxHeights(element);\n\n      const { heightMargin } = element.readmore;\n\n      if (element.getBoundingClientRect().height <= element.readmore.collapsedHeight + heightMargin) {\n        if (typeof this.options.blockProcessed === 'function') {\n          this.options.blockProcessed(element, false);\n        }\n        return;\n      }\n\n      element.setAttribute('data-readmore', '');\n      element.setAttribute('aria-expanded', expanded);\n      element.id = element.id || uniqueId();\n\n      const toggleLink = expanded ? this.options.lessLink : this.options.moreLink;\n      const toggleElement = buildToggle(toggleLink, element, this);\n\n      element.parentNode.insertBefore(toggleElement, (this.options.sourceOrder === 'before') ? element : element.nextSibling);\n\n      element.style.height = `${expanded ? element.readmore.expandedHeight : element.readmore.collapsedHeight}px`;\n\n      if (typeof this.options.blockProcessed === 'function') {\n        this.options.blockProcessed(element, true);\n      }\n\n      this.elements.push(element);\n    });\n  }\n\n  // Signature when called internally by the toggleLink click handler:\n  //   toggle(element, event)\n  //\n  // When called externally by an instance,\n  // e.g. readmoreDemo.toggle(document.querySelector('article:nth-of-type(1)')):\n  //   toggle(elementOrQuerySelector)\n  toggle(...args) {\n    let el = args[0];\n\n    const toggleElement = (element) => {\n      const trigger = document.querySelector(`[aria-controls=\"${element.id}\"]`);\n      const expanded = element.getBoundingClientRect().height <= element.readmore.collapsedHeight;\n      const newHeight = expanded ? element.readmore.expandedHeight : element.readmore.collapsedHeight;\n\n      // Fire beforeToggle callback\n      // Since we determined the new \"expanded\" state above we're now out of sync\n      // with our true current state, so we need to flip the value of `expanded`\n      if (typeof this.options.beforeToggle === 'function') {\n        const shouldContinueToggle = this.options.beforeToggle(trigger, element, !expanded);\n\n        // if the beforeToggle callback returns false, stop toggling\n        if (shouldContinueToggle === false) {\n          return;\n        }\n      }\n\n      element.style.height = `${newHeight}px`;\n\n      const transitionendHandler = (transitionEvent) => {\n        // Fire afterToggle callback\n        if (typeof this.options.afterToggle === 'function') {\n          this.options.afterToggle(trigger, element, expanded);\n        }\n\n        transitionEvent.stopPropagation();\n\n        element.setAttribute('aria-expanded', expanded);\n        element.removeEventListener('transitionend', transitionendHandler, false);\n      };\n\n      element.addEventListener('transitionend', transitionendHandler, false);\n\n      if (this.options.speed < 1) {\n        transitionendHandler.call(this, { target: element });\n      }\n\n      const toggleLink = expanded ? this.options.lessLink : this.options.moreLink;\n\n      if (!toggleLink) {\n        trigger.remove();\n      } else if (trigger && trigger.parentNode) {\n        trigger.parentNode.replaceChild(buildToggle(toggleLink, element, this), trigger);\n      }\n    };\n\n    if (typeof el === 'string') {\n      el = document.querySelectorAll(el);\n    }\n\n    if (!el) {\n      throw new Error('Element MUST be either an HTML node or querySelector string');\n    }\n\n    const event = args[1];\n\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n\n    if (typeof el === 'object' && !el.nodeName) { // element is likely a NodeList\n      forEach(el, toggleElement);\n    } else {\n      toggleElement(el);\n    }\n  }\n\n  destroy(selector) {\n    let elements;\n\n    if (!selector) {\n      elements = this.elements; // eslint-disable-line\n    } else if (typeof selector === 'string') {\n      elements = document.querySelectorAll(selector);\n    } else if (selector.nodeName) {\n      elements = [selector]; // emulate a NodeList by casting a single Node as an array\n    } else {\n      elements = selector;\n    }\n\n    forEach(elements, (element) => {\n      if (this.elements.indexOf(element) === -1) {\n        return;\n      }\n\n      this.elements = this.elements.filter((el) => el !== element);\n\n      if (this.instanceSelector) {\n        element.classList.remove(this.instanceSelector.substr(1));\n      }\n\n      delete element.readmore;\n\n      element.style.height = 'initial';\n      element.style.maxHeight = 'initial';\n\n      element.removeAttribute('data-readmore');\n      element.removeAttribute('aria-expanded');\n\n      const trigger = document.querySelector(`[aria-controls=\"${element.id}\"]`);\n      if (trigger) {\n        trigger.remove();\n      }\n\n      if (element.id.indexOf('rmjs-') !== -1) {\n        element.removeAttribute('id');\n      }\n    });\n\n    delete this;\n  }\n}\n\nReadmore.VERSION = '3.0.0-beta-1';\n\nexport default Readmore;\n", "import {Controller} from '@hotwired/stimulus'\nimport Readmore from 'readmore-js'\nimport SupportChecker from '../components/utility/support_checker'\n\nexport default class extends Controller {\n    static values = {\n        moreLink: {type: String, default: 'Read more'},\n        lessLink: {type: String, default: 'Close'},\n        collapsedHeight: {type: Number, default: 200}\n    }\n\n    connect() {\n        if (SupportChecker.intersectionObserverSupported) {\n            this.intersectionObserver = new IntersectionObserver((entries, observer) => {\n                entries.forEach((entry) => {\n                    if (entry.isIntersecting) {\n                        this._initialize()\n                        observer.unobserve(entry.target)\n                    }\n                })\n            })\n            this.intersectionObserver.observe(this.element)\n        } else {\n            this._initialize()\n        }\n    }\n\n    disconnect() {\n        this.intersectionObserver && this.intersectionObserver.disconnect()\n    }\n\n    _initialize() {\n        new Readmore(this.element, {\n            moreLink: `<a href=\"#\"><small>${this.moreLinkValue}</small></a>`,\n            lessLink: `<a href=\"#\"><small>${this.lessLinkValue}</small></a>`,\n            collapsedHeight: this.collapsedHeightValue\n        })\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static values = {url: String}\n\n    connect() {\n        this.resize = this.resize.bind(this)\n    }\n\n    startResize(event) {\n        if (!event.target.classList.contains('resizable')) return true\n\n        window.addEventListener('mouseup', this.resize)\n    }\n\n    resize() {\n        window.removeEventListener('mouseup', this.resize)\n\n        const currentHeight = parseInt(this.element.style.height)\n        const newHeight = Math.round(currentHeight / 10) * 10\n        this.element.style.height = newHeight + 'px'\n\n        this._patchHeight({height: newHeight})\n    }\n\n    increaseHeight() {\n        this._patchHeight({increase: true, current_height: this.element.offsetHeight})\n    }\n\n    decreaseHeight() {\n        this._patchHeight({decrease: true, current_height: this.element.offsetHeight})\n    }\n\n    _patchHeight(params) {\n        const formData = new FormData()\n        Object.entries(params).forEach(([key, value]) => formData.append(key, value.toString()))\n        Rails.ajax({type: 'PATCH', url: this.urlValue, data: formData})\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n    static values = {\n        userId: Number,\n        resourceType: String,\n        cssSelectorPrefix: String,\n    };\n\n    connect() {\n        this.subscription = window.App.cable.subscriptions.create(\n            { channel: \"ResourceLockChannel\" },\n            {\n                initialized: () => console.log(\"ResourceLockChannel Initialized\"),\n                connected: () => console.log(\"Connected to ResourceLockChannel\"),\n                disconnected: () => console.log(\"Disconnected from ResourceLockChannel\"),\n                received: (data) => this.handleReceivedData(data)\n            }\n        );\n    }\n\n    disconnect() {\n        if (this.subscription) {\n            window.App.cable.subscriptions.remove(this.subscription);\n        }\n    }\n\n    handleReceivedData(data) {\n        console.log(\"Received data from ResourceLockChannel:\", data);\n\n        if (!this.isValidResourceType(data.resource_type)) return;\n\n        if (data.action === \"released\") {\n            this.handleReleaseAction(data);\n        } else if (data.action === \"locked\") {\n            this.handleLockAction(data);\n        }\n    }\n\n    isValidResourceType(receivedType) {\n        return receivedType === this.resourceTypeValue;\n    }\n\n    getHtmlElement(resourceId) {\n        const selector = `${this.cssSelectorPrefixValue}${resourceId}`;\n        return document.querySelector(selector);\n    }\n\n    updateLockIcon(htmlElement, lockHtml) {\n        let lockIconContainer;\n        if (htmlElement.classList.contains(\"lock-icon-container\")) {\n            lockIconContainer = htmlElement;\n        } else {\n            lockIconContainer = htmlElement.querySelector(\".lock-icon-container\");\n        }\n        lockIconContainer.innerHTML = lockHtml;\n    }\n\n    disableListItems(parentElement) {\n        parentElement.querySelectorAll(\"[data-disable-target='true']\").forEach(target => {\n            target.classList.add(\"disabled\");\n        });\n    }\n\n    enableListItems(parentElement) {\n        parentElement.querySelectorAll(\"[data-disable-target='true']\").forEach(target => {\n            target.classList.remove(\"disabled\");\n        });\n    }\n\n    handleReleaseAction(data) {\n        const htmlElement = this.getHtmlElement(data.resource_id);\n\n        if (!htmlElement) {\n            return;\n        }\n\n        this.updateLockIcon(htmlElement, data.lock_icon_html);\n        this.enableListItems(htmlElement);\n    }\n\n    handleLockAction(data) {\n        const htmlElement = this.getHtmlElement(data.resource_id);\n\n        if (!htmlElement) {\n            return;\n        }\n\n        const isThisUser = (data.user_id === this.userIdValue);\n        const lockHtml = isThisUser ? data.owner_lock_icon_html : data.others_lock_icon_html;\n\n        this.updateLockIcon(htmlElement, lockHtml);\n\n        if (!isThisUser) {\n            this.disableListItems(htmlElement);\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport SupportChecker from '../components/utility/support_checker'\n\nexport default class extends Controller {\n    connect() {\n        if (!SupportChecker.localStorageSupported) return\n\n        let sidebarCollapsed = JSON.parse(localStorage.getItem('main_sidebar_collapsed'))\n        if (sidebarCollapsed === true) {\n            let toggleElement = document.getElementById('mainSidebar')\n            if (toggleElement === null) return\n\n            toggleElement.classList.add('sidebar--collapsed')\n            toggleElement.setAttribute('aria-expanded', 'false')\n        }\n    }\n\n    toggle(_event) {\n        let toggleElement = document.getElementById('mainSidebar')\n        if (toggleElement === null) return\n\n        toggleElement.classList.toggle('sidebar--collapsed')\n\n        if (toggleElement.classList.contains('sidebar--collapsed')) {\n            toggleElement.setAttribute('aria-expanded', 'false')\n            if (SupportChecker.localStorageSupported) localStorage.setItem('main_sidebar_collapsed', 'true')\n        } else {\n            toggleElement.setAttribute('aria-expanded', 'true')\n            if (SupportChecker.localStorageSupported) localStorage.removeItem('main_sidebar_collapsed')\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    connect() {\n        this.submitted = false\n    }\n\n    submitForm(event) {\n        if (event.code === 'Enter' && !event.shiftKey) {\n            event.preventDefault()\n            if (!event.target.form.reportValidity()) return\n            if (this.submitted) return\n\n            // From here on, submitted doesn't need to be turned false again,\n            // because this stimulus controller is used in contexts\n            // where the DOM is replaced. So the values are reinitialized.\n            this.submitted = true\n            event.target.form.requestSubmit()\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['otherForm', 'ownForm', 'toggleButton', 'displayDoms']\n\n    initialize() {\n        this.toggleReady = true\n        this.otherFormJustSaved = false\n        if (this.hasOwnFormTarget) {\n            this.ownButton = this.ownFormTarget.querySelector(\"button[type='submit']\")\n        }\n        if (this.hasOtherFormTarget) {\n            this.otherButton = this.otherFormTarget.querySelector(\"button[type='submit']\")\n        }\n        this.fillUploader = this.data.get('fillUploaderForm')?.trim() === \"true\"\n        this._submitOnEvent = this._submitOnEvent.bind(this)\n        this.disableToggleAndSubmit = this.disableToggleAndSubmit.bind(this)\n    }\n\n    connect() {\n        document.addEventListener('submit-event', this._submitOnEvent)\n        document.addEventListener('disable-event', this.disableToggleAndSubmit)\n        if (this.ownButton) {\n            this.observer = new MutationObserver(() => {\n                this._syncDisabled()\n            })\n            this.observer.observe(this.ownButton, {attributes: true, attributeFilter: ['disabled']})\n        }\n    }\n\n    disconnect() {\n        this.observer.disconnect()\n        document.removeEventListener('disable-event', this.disableToggleAndSubmit)\n        document.removeEventListener('submit-event', this._submitOnEvent)\n    }\n\n    toggleOtherSubmit() {\n        if (this.otherFormTarget && this.toggleReady) {\n            this.toggleReady = false\n            if (this.otherButton) {\n                this.otherButton.disabled = !this.otherButton.disabled;\n                this.displayDomsTargets.forEach(dom => {\n                    dom.style.display = dom.style.display === \"none\" ? \"\" : \"none\"\n                })\n                // bs-accordion-collapse uses bs-collapse. Thus the collapse speed is: 0.35s, so we take 350 ms as timeout\n                setTimeout(() => {\n                    this.toggleReady = true\n                }, 350);\n            }\n        }\n    }\n\n    submitOtherForm() {\n        if (this.otherFormTarget && this.toggleReady) {\n            this.toggleReady = false\n            if (this.otherButton) {\n                this.displayDomsTargets.forEach(dom => {\n                    dom.style.display = dom.style.display === \"none\" ? \"\" : \"none\"\n                })\n                this.disableToggleAndSubmit()\n                if (!this.otherFormJustSaved) {\n                    Rails.fire(this.otherFormTarget, 'submit')\n                    if (this.otherFormTarget.dataset.remote !== 'true') this.otherFormTarget.submit()\n                    // ownButton and toggleButtonTarget lose their 'disabled'-tag after the submit was successful due\n                    // to rails-ujs. We built the submit button with submit-disabled-with functionality. Resetting\n                    // the disabled-tag after a successful submit is part of the feature\n                }\n                this.otherFormJustSaved = !this.otherFormJustSaved\n                // bs-accordion-collapse uses bs-collapse. Thus the collapse speed is: 0.35s, so we take 350 ms as timeout\n                setTimeout(() => {\n                    this.toggleReady = true\n                }, 350);\n            }\n        }\n    }\n\n    disableToggleAndSubmit() {\n        if (!this.toggleButtonTarget.classList.contains('collapsed') && this.ownButton && this.toggleButtonTarget) {\n            this.ownButton.disabled = !this.ownButton.disabled\n            this.toggleButtonTarget.disabled = !this.toggleButtonTarget.disabled\n        }\n    }\n\n    _submitOnEvent() {\n        if (this.fillUploader) {\n            this._fillUploaderForm()\n        }\n        if (this.otherFormTarget) {\n            Rails.fire(this.otherFormTarget, 'submit')\n            if (this.otherFormTarget.dataset.remote !== 'true') this.otherFormTarget.submit()\n        }\n    }\n\n    _syncDisabled() {\n        if (this.ownFormTarget && this.toggleButtonTarget) {\n            this.toggleButtonTarget.disabled = this.ownButton.disabled;\n        }\n    }\n\n    _fillUploaderForm() {\n        const fieldFileIDElement = this.element.querySelector('[data-controller=\"direct-upload\"] [data-direct-upload-target=\"fieldFileID\"]')\n        const fileNameElement = this.element.querySelector('[data-controller=\"direct-upload\"] [data-direct-upload-target=\"fileName\"]')\n        if (fieldFileIDElement) fieldFileIDElement.value = event.detail.mediaFileId\n        if (fileNameElement) fileNameElement.innerText = event.detail.mediaFileName\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['outputField', 'inputField']\n\n    initialize() {\n        this.sum()\n    }\n\n    inputFieldTargetConnected(_target) {\n        this.sum()\n    }\n\n    inputFieldTargetDisconnected(_target) {\n        this.sum()\n    }\n\n    sum() {\n        let sum = 0\n        Array.prototype.forEach.call(this.inputFieldTargets, function (element, _index) {\n            sum += Number(element.value)\n        })\n        this.outputFieldTarget.innerText = sum\n    }\n}\n", "export default function SyncPickMarkup (options) {\n    this.element = options.element\n    this.multiple = options.multiple || false\n    this.disabled = options.disabled || false\n    this.valueProp = options.valueProp\n    this.searchPlaceholder = options.searchPlaceholder\n    this.searchInputClasses = options.searchInputClasses\n    this.buttonClasses = options.buttonClasses\n    this.buttonDisabledClasses = options.buttonDisabledClasses\n    this.emptySelectButtonText = options.emptySelectButtonText\n    this.buttonIconClasses = options.buttonIconClasses\n    this.checkedIconClasses = options.checkedIconClasses\n    this.listClasses = options.listClasses\n    this.selectedTextFormat = options.selectedTextFormat\n    this.selectedTextVariable = options.selectedTextVariable\n    this.selectedText = options.selectedText\n    this.noResultsText = options.noResultsText\n    this.container = options.container\n    this.withSearch = options.withSearch\n    this.withSelectAllButton = options.withSelectAllButton\n    this.selectAllButtonClasses = options.selectAllButtonClasses\n    this.selectAllButtonGroupClasses = options.selectAllButtonGroupClasses\n    this.selectAllButtonText = options.selectAllButtonText\n    this.deselectAllButtonText = options.deselectAllButtonText\n    this.dropdownAlignRight = options.dropdownAlignRight\n    this.popupWidth = options.popupWidth\n    this.open = false\n\n    this.wrapper = this.buildWrapper()\n    this.button = this.buildButton()\n    if (!this.disabled) this.popup = this.buildPopup()\n\n    this.hideOriginalSelect()\n    this.assemble()\n}\n\nSyncPickMarkup.prototype.hideOriginalSelect = function () {\n    this.element.classList.add('visually-hidden')\n    this.element.setAttribute('tabindex', '-1')\n}\n\nSyncPickMarkup.prototype.showOriginalSelect = function () {\n    this.element.style.display = 'initial'\n}\n\nSyncPickMarkup.prototype.assemble = function () {\n    this.wrapper.appendChild(this.button)\n    if (!this.disabled) {\n        if (!!this.container) {\n            const container = document.querySelector(this.container)\n            if (container) {\n                container.appendChild(this.popup)\n                this.popup.style.position = 'absolute'\n                this.popup.style.top = '0'\n            }\n        } else {\n            this.wrapper.appendChild(this.popup)\n        }\n    }\n    this.element.parentNode.insertBefore(this.wrapper, this.element)\n}\n\nSyncPickMarkup.prototype.positionPopup = function () {\n    if (!this.open) return\n    if (!!this.container) {\n        const pos = this.wrapper.getBoundingClientRect()\n        const offset = getOffsetFromBoundingBox(pos)\n        const top = offset.top + this.wrapper.offsetHeight\n\n        if (this.shouldDropUp()) {\n            this.popup.style.top = (top - this.popup.offsetHeight - this.button.offsetHeight - parseInt(window.getComputedStyle(this.popup).marginTop)).toString() + 'px'\n        } else {\n            this.popup.style.top = top.toString() + 'px'\n        }\n        if (this.dropdownAlignRight) {\n            const right = window.innerWidth - pos.left - this.wrapper.offsetWidth\n            this.popup.style.right = right + 'px'\n        } else {\n            this.popup.style.left = offset.left.toString() + 'px'\n        }\n        this.popup.style.minWidth = this.wrapper.offsetWidth + 'px'\n        this.popup.style.width = this.popupWidth\n        this.popup.style.position = 'absolute'\n    } else {\n        if (this.shouldDropUp()) {\n            this.popup.style.top = 'auto'\n            this.popup.style.bottom = (this.button.offsetHeight + parseInt(window.getComputedStyle(this.popup).marginTop)).toString() + 'px'\n        } else {\n            this.popup.style.top = '100%'\n            this.popup.style.bottom = 'auto'\n        }\n    }\n}\n\nSyncPickMarkup.prototype.shouldDropUp = function () {\n    const pos = this.button.getBoundingClientRect()\n    const offset = getOffsetFromBoundingBox(pos)\n    const selectOffsetTop = offset.top - document.documentElement.scrollTop\n    const selectOffsetBot = window.innerHeight - selectOffsetTop - this.button.offsetHeight\n    return selectOffsetTop > selectOffsetBot && selectOffsetBot < this.popup.offsetHeight\n}\n\nSyncPickMarkup.prototype.buildWrapper = function () {\n    const wrapper = document.createElement('div')\n    wrapper.classList.add('sync-pick')\n    if (this.multiple) wrapper.classList.add('sync-pick--multiple')\n    return wrapper\n}\n\nSyncPickMarkup.prototype.buildButton = function () {\n    const button = document.createElement('button')\n    button.setAttribute('type', 'button')\n    this.buttonClasses.forEach(function (buttonClass) {\n        button.classList.add(buttonClass)\n    })\n    if (this.disabled) {\n        button.disabled = true\n        this.buttonDisabledClasses.forEach(function (buttonDisabledClass) {\n            button.classList.add(buttonDisabledClass)\n        })\n    }\n\n    this.buttonText = document.createElement('span')\n    this.buttonText.classList.add('sp__button-text')\n\n    if (this.buttonIconClasses && this.buttonIconClasses.length > 0) {\n        let buttonIcon = document.createElement('i')\n        this.buttonIconClasses.forEach(function (buttonIconClass) {\n            buttonIcon.classList.add(buttonIconClass)\n        })\n        button.appendChild(this.buttonText)\n        button.appendChild(buttonIcon)\n    } else {\n        button.appendChild(this.buttonText)\n    }\n\n    return button\n}\n\nSyncPickMarkup.prototype.buildPopup = function () {\n    const popup = document.createElement('div')\n    popup.classList.add('sp__popup')\n    if (this.dropdownAlignRight) popup.classList.add('sp__popup--right')\n\n    if (this.withSearch) popup.appendChild(this.buildSearchInput())\n    if (this.withSelectAllButton) popup.appendChild(this.buildSelectAllButtons())\n    popup.appendChild(this.buildResultsScrollWrapper())\n\n    return popup\n}\n\nSyncPickMarkup.prototype.buildSearchInput = function () {\n    const wrapper = document.createElement('div')\n    wrapper.classList.add('sp__search-input__wrapper')\n    this.searchInput = document.createElement('input')\n    this.searchInput.type = 'search'\n    this.searchInput.setAttribute('placeholder', this.searchPlaceholder)\n    this.searchInput.classList.add('sp__search-input')\n\n    let self = this\n    this.searchInputClasses.forEach(function (searchInputClass) {\n        self.searchInput.classList.add(searchInputClass)\n    })\n\n    wrapper.appendChild(this.searchInput)\n    return wrapper\n}\n\nSyncPickMarkup.prototype.buildSelectAllButtons = function () {\n    const buttongroup = document.createElement('div')\n    this.selectAllButtonGroupClasses.forEach(function (buttonGroupClass) {\n        buttongroup.classList.add(buttonGroupClass)\n    })\n    this.selectAllButton = document.createElement('button')\n    this.selectAllButton.setAttribute('type', 'button')\n    this.deselectAllButton = document.createElement('button')\n    this.deselectAllButton.setAttribute('type', 'button')\n    this.selectAllButton.innerHTML = this.selectAllButtonText\n    this.deselectAllButton.innerHTML = this.deselectAllButtonText\n    let self = this\n    this.selectAllButtonClasses.forEach(function (buttonClass) {\n        self.selectAllButton.classList.add(buttonClass)\n        self.deselectAllButton.classList.add(buttonClass)\n    })\n    buttongroup.appendChild(this.selectAllButton)\n    buttongroup.appendChild(this.deselectAllButton)\n\n    return buttongroup\n}\n\nSyncPickMarkup.prototype.buildResultsScrollWrapper = function () {\n    this.resultsScrollWrapper = document.createElement('div')\n    this.resultsScrollWrapper.classList.add('sp__results-scroll-wrapper')\n    this.resultsWrapper = document.createElement('div')\n    this.resultsWrapper.classList.add('sp__results')\n    this.resultsWrapper.setAttribute('aria-role', 'list')\n    this.resultsScrollWrapper.appendChild(this.resultsWrapper)\n    return this.resultsScrollWrapper\n}\n\nSyncPickMarkup.prototype.appendEntries = function (dropdownValues, selectedValues, valuesOrder) {\n    if (Object.keys(dropdownValues).length > 0) {\n        Object.entries(dropdownValues).forEach(([optGroupLabel, options], index, arr) => {\n            if (optGroupLabel && optGroupLabel.length > 0) {\n                const label = document.createElement('span')\n                label.classList.add('sp__opt-group-label')\n                label.innerText = optGroupLabel\n                this.resultsWrapper.appendChild(label)\n            }\n            const pageUl = buildUl(this.listClasses)\n            pageUl.setAttribute('data-label', optGroupLabel)\n            const order = valuesOrder[optGroupLabel]\n            this.renderNewEntries(options, pageUl, selectedValues, order)\n            this.resultsWrapper.appendChild(pageUl)\n            if (optGroupLabel && optGroupLabel.length > 0 && arr[index + 1]) {\n                const hr = document.createElement('hr')\n                hr.classList.add('sp__hr')\n                this.resultsWrapper.appendChild(hr)\n            }\n        })\n    } else {\n        const li = buildLi({ text: this.noResultsText })\n        li.classList.add('sp__results-list__item--muted')\n        const pageUl = buildUl(this.listClasses)\n        pageUl.appendChild(li)\n        this.resultsWrapper.appendChild(pageUl)\n    }\n\n}\n\nSyncPickMarkup.prototype.renderNewEntries = function (options, ul, selectedValues, order) {\n    let self = this\n    order.forEach(value => {\n        const element = options[value]\n        if (!element) return\n        const li = buildLi({\n            value,\n            ...element,\n            selected: selectedValues.indexOf(value) > -1,\n            multiple: self.multiple,\n            checkedIconClasses: self.checkedIconClasses\n        })\n        ul.appendChild(li)\n    })\n}\n\nSyncPickMarkup.prototype.selectItem = function (value) {\n    const option = this.element.querySelector('option[value=\"' + value.replaceAll('\"', '\\\\\"') + '\"]')\n    option.selected = true\n    option.setAttribute('data-selected', '')\n    this.addSelectedClassByValue(value)\n}\n\nSyncPickMarkup.prototype.deselectItem = function (value) {\n    const option = this.element.querySelector('option[value=\"' + value.replaceAll('\"', '\\\\\"') + '\"]')\n    option.selected = false\n    option.removeAttribute('data-selected')\n    this.removeSelectedClassByValue(value)\n}\n\nSyncPickMarkup.prototype.addSelectedClassByValue = function (value) {\n    const li = this.resultsWrapper.querySelector('li[data-value=\"' + value.replaceAll('\"', '\\\\\"') + '\"]')\n    if (li) setLiSelected(li, true, this.multiple, this.checkedIconClasses)\n}\n\nSyncPickMarkup.prototype.removeSelectedClassByValue = function (value) {\n    const li = this.resultsWrapper.querySelector('li[data-value=\"' + value.replaceAll('\"', '\\\\\"') + '\"]')\n    if (li) setLiSelected(li, false, this.multiple, this.checkedIconClasses)\n}\n\nSyncPickMarkup.prototype.destroy = function () {\n    this.showOriginalSelect()\n    if (!!this.container) {\n        const container = document.querySelector(this.container)\n        if (container) container.removeChild(this.popup)\n    }\n    if (this.element && this.element.parentNode) this.element.parentNode.removeChild(this.wrapper)\n}\n\nSyncPickMarkup.prototype.getSelected = function () {\n    return this.resultsWrapper.querySelectorAll('li.sp__results-list__item--selected')[0]\n}\n\nSyncPickMarkup.prototype.getHovered = function () {\n    return this.hovered\n}\n\nSyncPickMarkup.prototype.focusPreviousEntry = function () {\n    if (!this.hovered) this.hovered = this.getSelected()\n    const allLis = Array.from(this.resultsWrapper.querySelectorAll('li.sp__results-list__item[data-value]'))\n    if (this.hovered) {\n        const hoveredIndex = allLis.indexOf(this.hovered)\n        if (hoveredIndex > 0) {\n            this.hovered.classList.remove('sp__results-list__item--hover')\n            this.hovered = allLis[hoveredIndex - 1]\n            this.hovered.classList.add('sp__results-list__item--hover')\n            this.scrollEntryIntoView(this.hovered)\n        }\n    } else {\n        const first = allLis[0]\n        if (!first) return\n        first.classList.add('sp__results-list__item--hover')\n        this.hovered = first\n        this.scrollEntryIntoView(first)\n    }\n}\n\nSyncPickMarkup.prototype.focusNextEntry = function () {\n    if (!this.hovered) this.hovered = this.getSelected()\n    const allLis = Array.from(this.resultsWrapper.querySelectorAll('li.sp__results-list__item[data-value]'))\n    if (this.hovered) {\n        const hoveredIndex = allLis.indexOf(this.hovered)\n        if (hoveredIndex < allLis.length - 1) {\n            this.hovered.classList.remove('sp__results-list__item--hover')\n            this.hovered = allLis[hoveredIndex + 1]\n            this.hovered.classList.add('sp__results-list__item--hover')\n            this.scrollEntryIntoView(this.hovered)\n        }\n    } else {\n        const first = allLis[0]\n        if (!first) return\n        first.classList.add('sp__results-list__item--hover')\n        this.hovered = first\n        this.scrollEntryIntoView(first)\n    }\n}\n\nSyncPickMarkup.prototype.scrollEntryIntoView = function (entry) {\n    const entryOffsetTop = entry.offsetTop - this.resultsScrollWrapper.offsetTop\n    const shouldScrollDown = this.resultsScrollWrapper.offsetHeight + this.resultsScrollWrapper.scrollTop < entryOffsetTop + entry.offsetHeight\n    const shouldScrollUp = entryOffsetTop < this.resultsScrollWrapper.scrollTop\n\n    if (shouldScrollDown) {\n        this.resultsScrollWrapper.scrollTop = entryOffsetTop - this.resultsScrollWrapper.offsetHeight + entry.offsetHeight\n    } else if (shouldScrollUp) {\n        this.resultsScrollWrapper.scrollTop = entryOffsetTop\n    }\n}\n\nSyncPickMarkup.prototype.setButtonText = function (selectedValues) {\n    if (selectedValues && Object.keys(selectedValues).length > 0) {\n        this.buttonText.innerHTML = this.renderButtonText(selectedValues)\n    } else {\n        this.buttonText.innerHTML = this.emptySelectButtonText\n    }\n}\n\nSyncPickMarkup.prototype.renderButtonText = function (selectedValues) {\n    if (this.selectedTextFormat) {\n        const match = this.selectedTextFormat.match(/count\\s?>\\s?([0-9]*)/)\n        const count = match && match[1] && parseInt(match[1])\n\n        if (count && count < Object.keys(selectedValues).length) {\n            return this.selectedText.replace(this.selectedTextVariable, Object.keys(selectedValues).length)\n        } else {\n            return joinSelectedTexts(selectedValues)\n        }\n    } else {\n        return joinSelectedTexts(selectedValues)\n    }\n}\n\nfunction joinSelectedTexts (selectedValues) {\n    let selected = []\n    Object.keys(selectedValues).forEach(function (key) {\n        selected.push(selectedValues[key].text)\n    })\n    return selected.join(', ')\n}\n\nfunction buildUl (additionalClasses) {\n    const pageUl = document.createElement('ul')\n    pageUl.classList.add('sp__results-list')\n    pageUl.setAttribute('aria-role', 'listbox')\n    additionalClasses.forEach(function (listClass) {\n        pageUl.classList.add(listClass)\n    })\n    return pageUl\n}\n\nfunction buildLi (options) {\n    const text = options.text\n    const value = options.value\n    const subtext = options.subtext\n    const imgAttributes = options.img\n    const li = document.createElement('li')\n\n    const textSpan = document.createElement('span')\n    textSpan.classList.add('sp__results-list__item__text')\n    textSpan.innerHTML = text\n\n    if (typeof value !== 'undefined' && value !== null) li.setAttribute('data-value', value)\n    if (typeof text !== 'undefined' && text !== null) {\n        li.setAttribute('aria-label', text)\n        li.setAttribute('title', textSpan.innerText)\n        li.setAttribute('data-text', text)\n    }\n    if (typeof subtext !== 'undefined' && subtext !== null) {\n        li.setAttribute('data-subtext', subtext)\n        const subtextDom = document.createElement('small')\n        subtextDom.innerHTML = subtext\n        subtextDom.classList.add('sp__results-list__item__subtext')\n        textSpan.appendChild(subtextDom)\n    }\n\n    li.setAttribute('aria-role', 'listitem')\n    li.classList.add('sp__results-list__item')\n\n    if (typeof imgAttributes !== 'undefined' && imgAttributes !== null) {\n        const imageTag = document.createElement('img')\n        Object.keys(imgAttributes).forEach(function (attr) {\n            imageTag.setAttribute(attr, imgAttributes[attr])\n        })\n\n        imageTag.classList.add('sp__results-list__item__image')\n        li.setAttribute('data-img', JSON.stringify(imgAttributes))\n        li.appendChild(imageTag)\n    }\n\n    li.appendChild(textSpan)\n    if (options.selected) {\n        setLiSelected(li, true, options.multiple, options.checkedIconClasses)\n    }\n    return li\n}\n\nfunction setLiSelected (li, selected, addCheck, checkedIconClasses) {\n    if (selected) {\n        if (addCheck) {\n            const check = document.createElement('i')\n            checkedIconClasses.forEach(function (checkedIconClass) {\n                check.classList.add(checkedIconClass)\n            })\n            check.classList.add('sp__results-list__item__check-mark')\n            li.appendChild(check)\n        } else {\n            li.classList.remove('sp__results-list__item--hover')\n            li.classList.add('sp__results-list__item--selected')\n        }\n    } else {\n        if (addCheck) {\n            const check = li.querySelector('.sp__results-list__item__check-mark')\n            if (check) li.removeChild(check)\n        } else {\n            li.classList.remove('sp__results-list__item--selected')\n        }\n    }\n}\n\nfunction getOffsetFromBoundingBox (box) {\n    const docElem = document.documentElement\n\n    return {\n        top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n        left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n    }\n}\n", "export default {\n    searchPlaceholder: 'Search',\n    emptySelectButtonText: 'Show all',\n    noResultsText: 'No results found',\n    selectedText: '%num% selected',\n    selectAllButtonText: 'Select all',\n    deselectAllButtonText: 'Deselect all'\n}\n", "export default {\n    searchPlaceholder: 'Suchen',\n    emptySelectButtonText: 'Alle anzeigen',\n    noResultsText: 'Keine Ergebnisse gefunden',\n    selectedText: '%num% Eintr\u00E4ge ausgew\u00E4hlt',\n    selectAllButtonText: 'Alles ausw\u00E4hlen',\n    deselectAllButtonText: 'Nichts ausw\u00E4hlen'\n}\n", "export default {\n    searchPlaceholder: 'Buscar',\n    emptySelectButtonText: 'Mostrar todos',\n    noResultsText: 'No se encontraron resultados',\n    selectedText: '%num% seleccionados',\n    selectAllButtonText: 'Seleccionar todo',\n    deselectAllButtonText: 'Deseleccionar todo'\n}\n", "export default {\n    searchPlaceholder: 'Rechercher',\n    emptySelectButtonText: 'afficher Tout',\n    noResultsText: 'Aucun r\u00E9sultat trouv\u00E9',\n    selectedText: '%num% s\u00E9lectionn\u00E9s',\n    selectAllButtonText: 's\u00E9lectionner Tout',\n    deselectAllButtonText: 'd\u00E9s\u00E9lectionner Tout'\n}\n", "import SyncPickMarkup from './sync-pick/sync-pick-markup'\nimport en from \"./sync-pick/i18n/en\"\nimport de from \"./sync-pick/i18n/de\"\nimport es from \"./sync-pick/i18n/es\"\nimport fr from \"./sync-pick/i18n/fr\"\n\n/**\n * SyncPick\n * @param {Object}   options\n * @param {String}   options.id - id of the select to use\n * @param {String}  [options.language='en'] - set language. defaults to document language or 'en'\n * @param {String}  [options.valueProp='id'] - name of the json key that holds the data to use as option value\n * @param {Number}  [options.searchTimeout=50] - timeout after the last keydown when to start searching\n * @param {String}  [options.searchPlaceholder='Search'] - placeholder for the search input\n * @param {Array}   [options.searchInputClasses=[]] - additional classes to add to the search input\n * @param {String}  [options.emptySelectButtonText=[]] - set the text of the select button before something is selected\n * @param {Array}   [options.buttonClasses=[]] - additional classes to add to the \"open\" button\n * @param {Array}   [options.buttonDisabledClasses=[]] - additional classes to add to the disabled button\n * @param {Array}   [options.buttonIconClasses=[]] - additional classes to add to \"open\" buttons icon\n * @param {Array}   [options.checkedIconClasses=[]] - additional classes to add to \"checked\" icon\n * @param {Array}   [options.listClasses=[]] - additional classes to add to each list built from loaded data\n * @param {String}  [options.selectedTextFormat=null] - set to 'count > X' where X is a number to show all texts if the\n *                                                      selected count is below X, otherwise show `selectedText`\n * @param {String}  [options.selectedTextVariable='%num%'] - set to some placeholder that is included in `selectedText`\n *                                                        that gets replaced by the actual count when displaying text\n * @param {String}  [options.selectedText=options.selectedTextVariable + 'selected'] - the actual text\n * @param {String}  [options.noResultsText='No results'] - text to display when api returns no results\n * @param {String}  [options.container=null] - container to append the html to\n * @param {Boolean} [options.withSearch=false] - set to true to active the searchbar\n * @param {Boolean} [options.dropdownAlignRight=false] - set to true to align the dropdown on the right\n * @param {Boolean} [options.popupWidth='300px'] - set width for popup when container option is set\n * @param {Boolean} [options.multiple=false] - to enable multiple. alternatively set your select to multiple\n * @param {Boolean} [options.disabled=false] - to disabled the select. alternatively set your select to disabled\n * @param {Object}  [options.values] - hash with preselected values, overrides possible <option selected> elements.\n *                                    This is an alternative to adding actual <option selected> elements to the dom.\n *                                    Structure has to be {value: {text: <text>, subtext: <subtext>}}.\n * @param {Object}  [options.withSelectAllButton] - enables buttons to select and deselect all entries\n * @param {Array}   [options.selectAllButtonClasses=[]] - additional classes to add to \"select all\" buttons\n * @param {Array}   [options.selectAllButtonGroupClasses=[]] - additional classes to add to \"select all\" buttongroup\n * @param {String}  [options.selectAllButtonText='Select all'] - text to display on button to select all\n * @param {String}  [options.deselectAllButtonText='Deselect all'] - text to display on button to deselect all\n * @param {Boolean} [options.debug=false] - enable to log debug messages\n * @param {Function} [options.customDebugHandler=null] - additional function to call when debug messages are logged.\n *                                                       Receives the instance of sync-pick as first arg.\n * @constructor\n */\nexport default function SyncPick (options) {\n    this.id = options.id\n    this.label = document.querySelector('label[for=\"' + this.id + '\"]')\n    if (this.isInitialized()) SyncPick.elements[this.id].destroy()\n\n    this.element = document.getElementById(this.id)\n    this.language = options.language || document.documentElement.lang || 'en'\n    this.i18n = SyncPick.i18n ? SyncPick.i18n[this.language] : {}\n\n    this.searchTimeout = options.searchTimeout || 50\n    this.searchPlaceholder = options.searchPlaceholder || this.i18n.searchPlaceholder || 'Search'\n    this.searchInputClasses = options.searchInputClasses || []\n    this.buttonClasses = options.buttonClasses || []\n    this.emptySelectButtonText = options.emptySelectButtonText || this.i18n.emptySelectButtonText || 'Select'\n    this.buttonDisabledClasses = options.buttonDisabledClasses || []\n    this.buttonIconClasses = options.buttonIconClasses || ['fas', 'fa-fw', 'fa-caret-down']\n    this.checkedIconClasses = options.checkedIconClasses || ['fas', 'fa-fw', 'fa-check']\n    this.listClasses = options.listClasses || []\n    this.selectedTextFormat = options.selectedTextFormat || null\n    this.selectedTextVariable = options.selectedTextVariable || '%num%'\n    this.selectedText = options.selectedText || this.i18n.selectedText || this.selectedTextVariable + ' selected'\n    this.noResultsText = options.noResultsText || this.i18n.noResultsText || 'No results'\n    this.container = options.container || null\n    this.withSearch = !!options.withSearch\n    this.dropdownAlignRight = !!options.dropdownAlignRight\n    this.popupWidth = options.popupWidth || '300px'\n    this.selectedValues = options.values || null\n    this.withSelectAllButton = options.withSelectAllButton || false\n    this.selectAllButtonClasses = options.selectAllButtonClasses || []\n    this.selectAllButtonGroupClasses = options.selectAllButtonGroupClasses || []\n    this.selectAllButtonText = options.selectAllButtonText || this.i18n.selectAllButtonText || 'Select all'\n    this.deselectAllButtonText = options.deselectAllButtonText || this.i18n.deselectAllButtonText || 'Deselect all'\n    this.debug = options.debug || false\n    this.customDebugHandler = options.customDebugHandler || null\n    this.originallySelectedValues = []\n\n    const self = this\n    Array.apply(null, this.element.options).filter(function (option) {\n        return option.hasAttribute('selected') && ['', 'true', true, 'selected'].includes(option.getAttribute('selected'))\n    }).forEach(option => {\n        self.originallySelectedValues.push(option.value)\n    })\n\n    this.multiple = !!this.element.multiple || !!options.multiple\n    this.disabled = !!this.element.disabled || !!options.disabled\n    this.open = false\n\n    this.initialize()\n    this.logDebugMessage('initialized with options:', this)\n    return this\n}\nSyncPick.i18n = { de, en, es, fr }\nSyncPick.elements = {}\n\nSyncPick.prototype.initialize = function () {\n    this.markup = this.buildMarkup()\n    if (!this.disabled) {\n        this.addHandlers()\n        this.addEvents()\n    }\n    this.setupValues()\n    if (!this.disabled) {\n        this.markup.appendEntries(this.dropdownValues, Object.keys(this.selectedValues), this.selectedValuesOrder)\n        this.addEventListenersForPage()\n    }\n    this.register()\n    this.markup.setButtonText(this.selectedValues)\n}\n\nSyncPick.prototype.buildMarkup = function () {\n    return new SyncPickMarkup({\n        element: this.element,\n        multiple: this.multiple,\n        disabled: this.disabled,\n        searchPlaceholder: this.searchPlaceholder,\n        searchInputClasses: this.searchInputClasses,\n        buttonClasses: this.buttonClasses,\n        buttonDisabledClasses: this.buttonDisabledClasses,\n        emptySelectButtonText: this.emptySelectButtonText,\n        buttonIconClasses: this.buttonIconClasses,\n        checkedIconClasses: this.checkedIconClasses,\n        listClasses: this.listClasses,\n        selectedTextFormat: this.selectedTextFormat,\n        selectedTextVariable: this.selectedTextVariable,\n        selectedText: this.selectedText,\n        noResultsText: this.noResultsText,\n        container: this.container,\n        withSearch: this.withSearch,\n        dropdownAlignRight: this.dropdownAlignRight,\n        popupWidth: this.popupWidth,\n        withSelectAllButton: this.withSelectAllButton,\n        selectAllButtonClasses: this.selectAllButtonClasses,\n        selectAllButtonGroupClasses: this.selectAllButtonGroupClasses,\n        selectAllButtonText: this.selectAllButtonText,\n        deselectAllButtonText: this.deselectAllButtonText\n    })\n}\n\nSyncPick.prototype.addHandlers = function () {\n    this.togglePopupHandler = this.togglePopup.bind(this)\n    this.searchHandler = this.search.bind(this)\n    this.closePopupHandler = this.closePopup.bind(this)\n    this.selectHandler = this.select.bind(this)\n    this.stopPropagationHandler = function (e) {\n        e.stopPropagation()\n    }\n    this.buttonKeyHandler = this.onButtonKeyDown.bind(this)\n    this.markupKeyHandler = this.onMarkupKeyDown.bind(this)\n    this.selectAllHandler = this.selectAllEntries.bind(this)\n    this.deselectAllHandler = this.deselectAllEntries.bind(this)\n    this.labelClickHandler = function (e) {\n        e.preventDefault()\n        this.markup.button.focus()\n    }.bind(this)\n    this.containerPositionHandler = this.markup.positionPopup.bind(this.markup)\n    this.resetFormHandler = this.resetAndReload.bind(this)\n}\n\nSyncPick.prototype.resetAndReload = function () {\n    this.logDebugMessage('form reset! reloading sync-pick')\n    this.reload()\n}\n\nSyncPick.prototype.onButtonKeyDown = function (e) {\n    if (e.keyCode === 13) { // enter\n        e.preventDefault()\n        this.togglePopup(e)\n    }\n}\n\nSyncPick.prototype.onMarkupKeyDown = function (e) {\n    if (e.keyCode === 9 || e.keyCode === 27) { // tab || esc\n        this.closePopupAndFocus()\n    } else if (e.keyCode === 40) { // arrow down\n        e.preventDefault()\n        this.markup.focusNextEntry()\n    } else if (e.keyCode === 38) { // arrow up\n        e.preventDefault()\n        this.markup.focusPreviousEntry()\n    } else if (e.keyCode === 13) { // enter\n        e.preventDefault()\n        if (this.open) {\n            const li = this.markup.getHovered()\n            if (li) this.select({ currentTarget: li })\n        } else {\n            this.openPopup()\n        }\n    }\n}\n\nSyncPick.prototype.addEvents = function () {\n    this.markup.button.addEventListener('click', this.togglePopupHandler)\n    if (this.withSearch) this.markup.searchInput.addEventListener('input', this.searchHandler)\n    this.markup.popup.addEventListener('click', this.stopPropagationHandler)\n    if (this.withSelectAllButton) {\n        this.markup.selectAllButton.addEventListener('click', this.selectAllHandler)\n        this.markup.deselectAllButton.addEventListener('click', this.deselectAllHandler)\n    }\n    if (this.withSearch) {\n        this.markup.button.addEventListener('keydown', this.buttonKeyHandler)\n        this.markup.popup.addEventListener('keydown', this.markupKeyHandler)\n    } else {\n        this.markup.button.addEventListener('keydown', this.markupKeyHandler)\n    }\n    document.addEventListener('click', this.closePopupHandler)\n    window.addEventListener('resize', this.containerPositionHandler)\n    window.addEventListener('scroll', this.containerPositionHandler)\n    if (this.label) this.label.addEventListener('click', this.labelClickHandler)\n    if (this.element.form) this.element.form.addEventListener('reset', this.resetFormHandler)\n    let self = this\n    onDomRemove(this.markup.element, function () {\n        self.destroy()\n    })\n}\n\nSyncPick.prototype.removeEvents = function () {\n    let self = this\n    if (this.markup) { // sometimes markup is already removed from the DOM\n        this.markup.button.removeEventListener('click', this.togglePopupHandler)\n        if (this.withSearch) this.markup.searchInput.removeEventListener('input', this.searchHandler)\n        Array.apply(null, this.markup.resultsWrapper.querySelectorAll('li')).forEach(function (li) {\n            li.removeEventListener('click', self.selectHandler)\n        })\n        this.markup.popup.removeEventListener('click', this.stopPropagationHandler)\n        this.markup.button.removeEventListener('keydown', this.buttonKeyHandler)\n        this.markup.popup.removeEventListener('keydown', this.markupKeyHandler)\n    }\n    document.removeEventListener('click', this.closePopupHandler)\n    window.removeEventListener('resize', this.containerPositionHandler)\n    window.removeEventListener('scroll', this.containerPositionHandler)\n    if (this.label) this.label.removeEventListener('click', this.labelClickHandler)\n    if (this.element.form) this.element.form.removeEventListener('reset', this.resetFormHandler)\n}\n\nSyncPick.prototype.setupValues = function () {\n    if (!this.selectedValues) {\n        this.selectedValues = {}\n        this.dropdownValues = {}\n        this.selectedValuesOrder = {}\n        let self = this\n        Array.apply(null, this.element.options).forEach(function (option) {\n            let optgrouplabel\n            if (option.parentNode.nodeName === 'OPTGROUP') {\n                optgrouplabel = option.parentNode.label\n            } else {\n                optgrouplabel = ''\n            }\n            if (!self.selectedValuesOrder[optgrouplabel]) self.selectedValuesOrder[optgrouplabel] = []\n\n            self.selectedValuesOrder[optgrouplabel].push(option.value)\n            if (!self.dropdownValues[optgrouplabel]) self.dropdownValues[optgrouplabel] = {}\n\n            const newValue = {\n                text: option.innerHTML,\n                subtext: option.getAttribute('data-subtext'),\n                img: JSON.parse(option.getAttribute('data-img'))\n            }\n            self.dropdownValues[optgrouplabel][option.value] = newValue\n\n            if (option.selected || (option.hasAttribute('selected') && ['', 'true', true, 'selected'].includes(option.getAttribute('selected')))) {\n                self.selectedValues[option.value] = newValue\n                option.setAttribute('data-selected', true)\n            }\n        })\n    }\n}\n\nSyncPick.prototype.togglePopup = function () {\n    this.open ? this.closePopupAndFocus() : this.openPopup()\n}\n\nSyncPick.prototype.search = function () {\n    if (this.searchInputTimer) clearTimeout(this.searchInputTimer)\n    if (this.markup.hovered) this.markup.hovered.classList.remove('sp__results-list__item--hover')\n    this.markup.hovered = false\n\n    let inputValue = this.markup.searchInput.value\n    if (this.shouldSearch(inputValue)) {\n        let self = this\n        self.previousSearchValue = inputValue\n        const lowerInputValue = inputValue.toLowerCase()\n        this.searchInputTimer = setTimeout(function () {\n            let filteredValues = {}\n            Object.entries(self.dropdownValues).forEach(([optGroupLabel, options]) => {\n                Object.entries(options).forEach(([value, optionData]) => {\n                    if (optionData.text.toLowerCase().includes(lowerInputValue)) {\n                        if (!filteredValues[optGroupLabel]) filteredValues[optGroupLabel] = {}\n                        filteredValues[optGroupLabel][value] = optionData\n                    }\n                })\n            })\n            self.markup.resultsWrapper.innerHTML = ''\n            self.markup.appendEntries(filteredValues, Object.keys(self.selectedValues), self.selectedValuesOrder)\n            self.addEventListenersForPage()\n        }, self.searchTimeout)\n    }\n}\n\nSyncPick.prototype.openPopup = function () {\n    this.markup.popup.classList.add('sp__popup--visible')\n    this.open = true\n    this.markup.open = true\n    this.markup.positionPopup()\n    if (this.withSearch) this.markup.searchInput.focus()\n}\n\nSyncPick.prototype.closePopupAndFocus = function (e) {\n    this.closePopup(e)\n    this.markup.button.focus()\n}\n\nSyncPick.prototype.closePopup = function (e) {\n    let clickedButton = e && (e.target === this.markup.button || e.target.parentElement === this.markup.button)\n    if (this.open && !clickedButton) {\n        this.markup.popup.classList.remove('sp__popup--visible')\n        this.open = false\n        this.markup.open = false\n        if (this.markup.hovered) this.markup.hovered.classList.remove('sp__results-list__item--hover')\n        this.markup.hovered = false\n        if (this.withSearch) this.resetSearch()\n    }\n}\n\nSyncPick.prototype.selectAllEntries = function () {\n    const keysOfSelectedValues = Object.keys(this.selectedValues)\n    this.selectedValues = Object.assign({}, ...Object.values(this.dropdownValues))\n    Object.keys(this.selectedValues).forEach(value => {\n        if (!keysOfSelectedValues.includes(value)) {\n            this.markup.selectItem(value)\n        }\n    })\n    this.markup.setButtonText(this.selectedValues)\n    this.triggerChange()\n}\n\nSyncPick.prototype.deselectAllEntries = function () {\n    Object.keys(this.selectedValues).forEach(value => {\n        this.markup.deselectItem(value)\n    })\n    this.selectedValues = {}\n    this.markup.setButtonText(this.selectedValues)\n    this.triggerChange()\n}\n\nSyncPick.prototype.addEventListenersForPage = function () {\n    let self = this\n    Array.apply(null, self.markup.resultsWrapper.querySelectorAll('li.sp__results-list__item[data-value]:not(.sp__results-list__item--disabled)')).forEach(function (li) {\n        li.addEventListener('click', self.selectHandler)\n    })\n}\n\nSyncPick.prototype.shouldSearch = function (newValue) {\n    return this.previousSearchValue !== newValue\n}\n\nSyncPick.prototype.select = function (e) {\n    const li = e.currentTarget\n    const value = li.getAttribute('data-value')\n    const optionData = {\n        text: li.getAttribute('data-text'),\n        subtext: li.getAttribute('data-subtext'),\n        disabled: li.getAttribute('data-disabled'),\n        img: li.getAttribute('data-img') ? JSON.parse(li.getAttribute('data-img')) : null\n    }\n\n    if (this.multiple) {\n        this.toggleSelectedValue(value, optionData)\n    } else {\n        this.setSelectedValue(value, optionData)\n    }\n\n    this.markup.setButtonText(this.selectedValues)\n    if (!this.multiple) this.closePopupAndFocus()\n    this.triggerChange()\n}\n\nSyncPick.prototype.triggerChange = function () {\n    let event = new CustomEvent('Event', { detail: this.selectedValues })\n    event.initEvent('change', true, true)\n    this.element.dispatchEvent(event)\n    this.logDebugMessage('changeTriggered')\n}\n\nSyncPick.prototype.toggleSelectedValue = function (value, optionData) {\n    if (this.selectedValues[value]) {\n        this.removeSelectedValue(value, optionData)\n    } else {\n        this.addSelectedValue(value, optionData)\n    }\n}\n\nSyncPick.prototype.addSelectedValue = function (value, optionData) {\n    this.selectedValues[value] = optionData\n\n    this.markup.selectItem(value)\n    if (this.withSearch) this.markup.searchInput.focus()\n    this.logDebugMessage('Value added:', optionData)\n}\n\nSyncPick.prototype.removeSelectedValue = function (value, optionData) {\n    delete this.selectedValues[value]\n    this.markup.deselectItem(value)\n    this.logDebugMessage('Value removed:', optionData)\n}\n\nSyncPick.prototype.setSelectedValue = function (value, optionData) {\n    if (Object.keys(this.selectedValues).length > 0) {\n        this.removeSelectedValue(Object.keys(this.selectedValues)[0])\n        const selected = this.markup.getSelected()\n        if (selected) selected.classList.remove('sp__results-list__item--selected')\n    }\n    this.addSelectedValue(value, optionData)\n    this.logDebugMessage('Value set:', optionData)\n}\n\nSyncPick.prototype.logDebugMessage = function (msg, someObject) {\n    if (this.debug) {\n        if (msg) console.log('SyncPick#' + this.id, msg)\n        if (someObject) console.log(someObject)\n        if (typeof this.customDebugHandler === 'function') this.customDebugHandler(this)\n    }\n}\n\nSyncPick.prototype.register = function () {\n    SyncPick.elements[this.id] = this\n}\n\nSyncPick.prototype.isInitialized = function () {\n    if (typeof window.SyncPick === 'undefined') {\n        return false\n    } else {\n        return !!SyncPick.elements[this.id]\n    }\n}\n\nSyncPick.prototype.resetSearch = function () {\n    this.markup.searchInput.value = ''\n    this.search()\n}\n\nSyncPick.prototype.destroy = function () {\n    if (!this.disabled) this.removeEvents()\n    this.markup.destroy()\n    this.selectedValues = null\n    this.dropdownValues = null\n    delete this.markup\n    delete SyncPick.elements[this.id]\n    this.element.classList.remove('visually-hidden')\n}\n\nSyncPick.prototype.reload = function () {\n    Object.keys(this.selectedValues).forEach(value => {\n        this.markup.deselectItem(value)\n    })\n    this.destroy()\n    this.disabled = !!this.element.disabled\n\n    this.originallySelectedValues.forEach(value => {\n        const option = this.element.querySelector('option[value=\"' + value.replaceAll('\"', '\\\\\"') + '\"]')\n        option.selected = true\n    })\n\n    this.initialize()\n}\n\n/**\n * Helpers\n */\n\nfunction onDomRemove (element, onDetachCallback) {\n    const observer = new MutationObserver(function () {\n        function isDetached (el) {\n            if (el.parentNode === document) {\n                return false\n            } else if (el.parentNode === null) {\n                return true\n            } else {\n                return isDetached(el.parentNode)\n            }\n        }\n\n        if (isDetached(element)) {\n            observer.disconnect()\n            onDetachCallback()\n        }\n    })\n\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    })\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nimport SyncPick from 'sync-pick'\n\nexport default class extends Controller {\n    static values = {\n        emptySelectButtonTextOption: String,\n        containerOption: String,\n        withSearchOption: Boolean,\n        withSelectAllButtonOption: Boolean,\n        dropdownAlignRightOption: Boolean,\n        dropdownButtonClasses: Array,\n        searchInputClasses: Array,\n        listClasses: Array,\n        selectedTextFormatOption: String\n    }\n\n    reconnect() {\n        this._sync_pick.destroy()\n        this.load()\n    }\n\n    connect() {\n        this.load()\n        this.element['syncPick'] = {\n            reconnect: this.reconnect.bind(this),\n            values: this._sync_pick.selectedValues\n        }\n    }\n\n    load() {\n        let options = this.options\n        Object.keys(options).forEach(function (key) {\n            if (options[key] === \"\") delete options[key]\n        })\n\n        const elementId = this.element.getAttribute('id')\n        this._sync_pick = new SyncPick(Object.assign({}, this.defaultOptions, {id: elementId}, options))\n    }\n\n    get options() {\n        return {\n            buttonClasses: this.hasDropdownButtonClassesValue ? this.dropdownButtonClassesValue : '',\n            searchInputClasses: this.hasSearchInputClassesValue ? this.searchInputClassesValue : '',\n            listClasses: this.hasListClassesValue ? this.listClassesValue : '',\n            emptySelectButtonText: this.emptySelectButtonTextOptionValue,\n            container: this.containerOptionValue,\n            withSearch: this.hasWithSearchOptionValue ? this.withSearchOptionValue : '',\n            withSelectAllButton: this.hasWithSelectAllButtonOptionValue ? this.hasWithSelectAllButtonOptionValue : '',\n            dropdownAlignRight: this.hasDropdownAlignRightOptionValue ? this.dropdownAlignRightOptionValue : '',\n            selectedTextFormat: this.selectedTextFormatOptionValue,\n        }\n    }\n\n    get defaultOptions() {\n        return {\n            language: document.documentElement.lang,\n            buttonClasses: ['form-select'],\n            buttonDisabledClasses: ['btn-disabled'],\n            searchTimeout: 0,\n            searchInputClasses: ['form-control'],\n            buttonIconClasses: [],\n            checkedIconClasses: ['fas', 'fa-fw', 'fa-check'],\n            listClasses: [],\n            selectedTextFormat: 'count>3',\n            selectedTextVariable: '%num%',\n            container: false,\n            withSearch: false,\n            withSelectAllButton: false,\n            selectAllButtonClasses: ['btn', 'btn-outline-secondary', 'btn-sm'],\n            selectAllButtonGroupClasses: ['btn-group'],\n            dropdownAlignRight: false,\n            popupWidth: '300px',\n            values: null\n        }\n    }\n}\n", "export var ZERO_WIDTH_CHAR = '\\u200B';\nexport var ZERO_WIDTH_UNICODE_CHAR = `&#8203;`\nexport const UPDATE_DELAY = 100\n", "import {ZERO_WIDTH_CHAR} from './constants'\n\nexport const logger = {\n    isEnabled() { return window.TAGIFY_DEBUG ?? true},\n    log(...args){ this.isEnabled() && console.log('[Tagify]:', ...args) },\n    warn(...args) { this.isEnabled() && console.warn('[Tagify]:', ...args) }\n}\n\n// console.json = console.json || function(argument){\n//     for(var arg=0; arg < arguments.length; ++arg)\n//         console.log(  JSON.stringify(arguments[arg], null, 4)  )\n// }\n\n// const isEdge = /Edge/.test(navigator.userAgent)\nexport const sameStr = (s1, s2, caseSensitive, trim) => {\n    // cast to String\n    s1 = \"\"+s1;\n    s2 = \"\"+s2;\n\n    if( trim ){\n        s1 = s1.trim()\n        s2 = s2.trim()\n    }\n\n    return caseSensitive\n        ? s1 == s2\n        : s1.toLowerCase() == s2.toLowerCase()\n}\n\n\n// const getUID = () => (new Date().getTime() + Math.floor((Math.random()*10000)+1)).toString(16)\nexport const removeCollectionProp = (collection, unwantedProps) => collection && Array.isArray(collection) && collection.map(v => omit(v, unwantedProps))\n\nexport function omit(obj, props){\n    var newObj = {}, p;\n    for( p in obj )\n        if( props.indexOf(p) < 0 )\n            newObj[p] = obj[p]\n    return newObj\n}\n\nexport function decode( s ) {\n    var el = document.createElement('div');\n    return s.replace(/\\&#?[0-9a-z]+;/gi, function(enc){\n        el.innerHTML = enc;\n        return el.innerText\n    })\n}\n\n/**\n * utility method\n * https://stackoverflow.com/a/35385518/104380\n * @param  {String} s [HTML string]\n * @return {Object}   [DOM node]\n */\nexport function parseHTML( s ){\n    var parser = new DOMParser(),\n        node   = parser.parseFromString(s.trim(), \"text/html\");\n\n    return node.body.firstElementChild;\n}\n\n/**\n * Removed new lines and irrelevant spaces which might affect layout, and are better gone\n * @param {string} s [HTML string]\n */\nexport function minify( s ){\n    return s ? s\n        .replace(/\\>[\\r\\n ]+\\</g, \"><\")\n        .split(/>\\s+</).join('><').trim()\n        : \"\"\n}\n\nexport function removeTextChildNodes( elm ){\n    var iter = document.createNodeIterator(elm, NodeFilter.SHOW_TEXT, null, false),\n        textnode;\n\n    // print all text nodes\n    while (textnode = iter.nextNode()){\n        if( !textnode.textContent.trim() )\n            textnode.parentNode.removeChild(textnode)\n    }\n}\n\nexport function getfirstTextNode( elm, action ){\n    action = action || 'previous';\n    while ( elm = elm[action + 'Sibling'] )\n        if( elm.nodeType == 3 )\n            return elm\n}\n\n/**\n * utility method\n * https://stackoverflow.com/a/6234804/104380\n */\nexport function escapeHTML( s ){\n    return typeof s == 'string' ? s\n        .replace(/&/g, \"&amp;\")\n        .replace(/</g, \"&lt;\")\n        .replace(/>/g, \"&gt;\")\n        .replace(/\"/g, \"&quot;\")\n        .replace(/`|'/g, \"&#039;\")\n        : s;\n}\n\n/**\n * Checks if an argument is a javascript Object\n */\nexport function isObject(obj) {\n    var type = Object.prototype.toString.call(obj).split(' ')[1].slice(0, -1);\n    return obj === Object(obj) && type != 'Array' && type != 'Function' && type != 'RegExp' && type != 'HTMLUnknownElement';\n}\n\n/**\n * merge objects into a single new one\n * TEST: extend({}, {a:{foo:1}, b:[]}, {a:{bar:2}, b:[1], c:()=>{}})\n */\nexport function extend( o, o1, o2) {\n    if( !(o instanceof Object) ) o = {};\n\n    copy(o, o1);\n    if( o2 )\n        copy(o, o2)\n\n    function copy(a,b){\n        // copy o2 to o\n        for( var key in b )\n            if( b.hasOwnProperty(key) ){\n                if( isObject(b[key]) ){\n                    if( !isObject(a[key]) )\n                        a[key] = Object.assign({}, b[key])\n                    else\n                        copy(a[key], b[key])\n\n                    continue;\n                }\n\n                if( Array.isArray(b[key]) ){\n                    a[key] = Object.assign([], b[key])\n                    continue\n                }\n\n                a[key] = b[key]\n            }\n    }\n\n    return o\n}\n\n/**\n * concatenates N arrays without dups.\n * If an array's item is an Object, compare by `value`\n */\nexport function concatWithoutDups(){\n    const newArr = [],\n        existingObj = {};\n\n    for( let arr of arguments ) {\n        for( let item of arr ) {\n            // if current item is an object which has yet to be added to the new array\n            if( isObject(item) ){\n                if( !existingObj[item.value] ){\n                    newArr.push(item)\n                    existingObj[item.value] = 1\n                }\n            }\n\n            // if current item is not an object and is not in the new array\n            else if( !newArr.includes(item) )\n                newArr.push(item)\n        }\n    }\n\n    return newArr\n}\n\n/**\n *  Extracted from: https://stackoverflow.com/a/37511463/104380\n * @param {String} s\n */\nexport function unaccent( s ){\n    // if not supported, do not continue.\n    // developers should use a polyfill:\n    // https://github.com/walling/unorm\n    if( !String.prototype.normalize )\n        return s\n\n    if (typeof(s) === 'string')\n        return s.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\")\n}\n\n/**\n * Meassures an element's height, which might yet have been added DOM\n * https://stackoverflow.com/q/5944038/104380\n * @param {DOM} node\n */\nexport function getNodeHeight( node ){\n    var height, clone = node.cloneNode(true)\n    clone.style.cssText = \"position:fixed; top:-9999px; opacity:0\"\n    document.body.appendChild(clone)\n    height = clone.clientHeight\n    clone.parentNode.removeChild(clone)\n    return height\n}\n\nexport var isChromeAndroidBrowser = () => /(?=.*chrome)(?=.*android)/i.test(navigator.userAgent)\n\nexport function getUID() {\n    return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>\n        (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n    )\n}\n\nexport function isNodeTag(node){\n    const belongs = isNodeBelongsToThisTagifyInstance.call(this, node);\n    const isTag = node?.classList?.contains(this.settings.classNames.tag)\n    return belongs && isTag\n}\n\nexport function isWithinNodeTag(node){\n    return isNodeBelongsToThisTagifyInstance.call(this, node) && node?.closest(this.settings.classNames.tagSelector)\n}\n\nfunction isNodeBelongsToThisTagifyInstance(node) {\n    let closestTagifyNode = node?.closest?.(this.settings.classNames.namespaceSelector)\n    return closestTagifyNode === this.DOM.scope\n}\n\n/**\n* Get the caret position relative to the viewport\n* https://stackoverflow.com/q/58985076/104380\n*\n* @returns {object} left, top distance in pixels\n*/\nexport function getCaretGlobalPosition(){\n   const sel = document.getSelection()\n\n   if( sel.rangeCount ){\n       const r = sel.getRangeAt(0)\n       const node = r.startContainer\n       const offset = r.startOffset\n       let rect,  r2;\n\n       if (offset > 0) {\n           r2 = document.createRange()\n           r2.setStart(node, offset - 1)\n           r2.setEnd(node, offset)\n           rect = r2.getBoundingClientRect()\n           return {left:rect.right, top:rect.top, bottom:rect.bottom}\n       }\n\n       if( node.getBoundingClientRect )\n           return node.getBoundingClientRect()\n   }\n\n   return {left:-9999, top:-9999}\n}\n\n/**\n * Injects content (either string or node) at the current the current (or specificed) caret position\n * @param {content} string/node\n * @param {range} Object (optional, a range other than the current window selection)\n */\nexport function injectAtCaret(content, range){\n    var selection = window.getSelection();\n    range = range || selection.getRangeAt(0)\n\n    if( typeof content == 'string' )\n        content = document.createTextNode(content)\n\n    if( range ) {\n        range.deleteContents()\n        range.insertNode(content)\n    }\n\n    return content\n}\n\n/** Setter/Getter\n * Each tag DOM node contains a custom property called \"__tagifyTagData\" which hosts its data\n * @param {Node}   tagElm\n * @param {Object} data\n */\nexport function getSetTagData(tagElm, data, override){\n    if( !tagElm ){\n        logger.warn(\"tag element doesn't exist\",{tagElm, data})\n        return data\n    }\n\n    if( data )\n        tagElm.__tagifyTagData = override\n            ? data\n            : extend({}, tagElm.__tagifyTagData || {}, data)\n\n    return tagElm.__tagifyTagData\n}\n\nexport function placeCaretAfterNode( node ){\n    if( !node || !node.parentNode ) return\n\n    var nextSibling = node,\n        sel = window.getSelection(),\n        range = sel.getRangeAt(0);\n\n    if (sel.rangeCount) {\n        range.setStartAfter(nextSibling);\n        range.collapse(true)\n        // range.setEndBefore(nextSibling || node);\n        sel.removeAllRanges();\n        sel.addRange(range);\n    }\n}\n\n/**\n * iterate all tags, checking if multiple ones are close-siblings and if so, add a zero-space width character between them,\n * which forces the caret to be rendered when the selection is between tags.\n * Also do that if the tag is the first node.\n * @param {Array} tags\n */\nexport function fixCaretBetweenTags(tags, TagifyHasFocuse) {\n    tags.forEach(tag => {\n        if( getSetTagData(tag.previousSibling) || !tag.previousSibling ) {\n            var textNode = document.createTextNode(ZERO_WIDTH_CHAR)\n            tag.before(textNode)\n            TagifyHasFocuse && placeCaretAfterNode(textNode)\n        }\n    })\n}\n\n", "export default {\n    delimiters          : \",\",            // [RegEx] split tags by any of these delimiters (\"null\" to cancel) Example: \",| |.\"\n    pattern             : null,           // RegEx pattern to validate input by. Ex: /[1-9]/\n    tagTextProp         : 'value',        // tag data Object property which will be displayed as the tag's text\n    maxTags             : Infinity,       // Maximum number of tags\n    callbacks           : {},             // Exposed callbacks object to be triggered on certain events\n    addTagOnBlur        : true,           // automatically adds the text which was inputed as a tag when blur event happens\n    addTagOn            : ['blur', 'tab', 'enter'],  // if the tagify field (in a normal mode) has any non-tag input in it, convert it to a tag on any of these events: blur away from the field, click \"tab\"/\"enter\" key\n    onChangeAfterBlur   : true,           // By default, the native way of inputs' onChange events is kept, and it only fires when the field is blured.\n    duplicates          : false,          // \"true\" - allow duplicate tags\n    whitelist           : [],             // Array of tags to suggest as the user types (can be used along with \"enforceWhitelist\" setting)\n    blacklist           : [],             // A list of non-allowed tags\n    enforceWhitelist    : false,          // Only allow tags from the whitelist\n    userInput           : true,           // disable manually typing/pasting/editing tags (tags may only be added from the whitelist)\n    focusable           : true,           // Allow the component as a whole to recieve focus. There are implementations of Tagify without external border and so 'focusability' causes unwanted behaviour\n    focusInputOnRemove  : true,           // Refocus the input when a tag is removed\n    keepInvalidTags     : false,          // if true, do not remove tags which did not pass validation\n    createInvalidTags   : true,           // if false, do not create invalid tags from invalid user input\n    mixTagsAllowedAfter : /,|\\.|\\:|\\s/,   // RegEx - Define conditions in which mix-tags content allows a tag to be added after\n    mixTagsInterpolator : ['[[', ']]'],   // Interpolation for mix mode. Everything between these will become a tag, if is a valid Object\n    backspace           : true,           // false / true / \"edit\"\n    skipInvalid         : false,          // If `true`, do not add invalid, temporary, tags before automatically removing them\n    pasteAsTags         : true,           // automatically converts pasted text into tags. if \"false\", allows for further text editing\n\n    editTags            : {\n        clicks      : 2,                  // clicks to enter \"edit-mode\": 1 for single click. any other value is considered as double-click\n        keepInvalid : true                // keeps invalid edits as-is until `esc` is pressed while in focus\n    },              // 1 or 2 clicks to edit a tag. false/null for not allowing editing\n    transformTag        : ()=>{},         // Takes a tag input string as argument and returns a transformed value\n    trim                : true,           // whether or not the value provided should be trimmed, before being added as a tag\n    a11y: {\n        focusableTags: false,\n        inputAriaLabel: \"Tags input field\",\n    },\n\n    mixMode: {\n        insertAfterTag  : '\\u00A0',       // String/Node to inject after a tag has been added (see #588)\n    },\n\n    autoComplete: {\n        enabled: true,        // Tries to suggest the input's value while typing (match from whitelist) by adding the rest of term as grayed-out text\n        rightKey: false,      // If `true`, when Right key is pressed, use the suggested value to create a tag, else just auto-completes the input. in mixed-mode this is set to \"true\"\n        tabKey: false,        // If 'true`, pressing `tab` key would only auto-complete but not also convert to a tag (like `rightKey` does).\n    },\n\n    classNames: {\n        namespace            : 'tagify',\n        mixMode              : 'tagify--mix',\n        selectMode           : 'tagify--select',\n        input                : 'tagify__input',\n        focus                : 'tagify--focus',\n        tagNoAnimation       : 'tagify--noAnim',\n        tagInvalid           : 'tagify--invalid',\n        tagNotAllowed        : 'tagify--notAllowed',\n        scopeLoading         : 'tagify--loading',\n        hasMaxTags           : 'tagify--hasMaxTags',\n        hasNoTags            : 'tagify--noTags',\n        empty                : 'tagify--empty',\n        inputInvalid         : 'tagify__input--invalid',\n        dropdown             : 'tagify__dropdown',\n        dropdownWrapper      : 'tagify__dropdown__wrapper',\n        dropdownHeader       : 'tagify__dropdown__header',\n        dropdownFooter       : 'tagify__dropdown__footer',\n        dropdownItem         : 'tagify__dropdown__item',\n        dropdownItemActive   : 'tagify__dropdown__item--active',\n        dropdownItemHidden   : 'tagify__dropdown__item--hidden',\n        dropdownItemSelected : 'tagify__dropdown__item--selected',\n        dropdownInital       : 'tagify__dropdown--initial',\n        tag                  : 'tagify__tag',\n        tagText              : 'tagify__tag-text',\n        tagX                 : 'tagify__tag__removeBtn',\n        tagLoading           : 'tagify__tag--loading',\n        tagEditing           : 'tagify__tag--editable',\n        tagFlash             : 'tagify__tag--flash',\n        tagHide              : 'tagify__tag--hide',\n\n    },\n\n    dropdown: {\n        classname          : '',\n        enabled            : 2,      // minimum input characters to be typed for the suggestions dropdown to show\n        maxItems           : 10,\n        searchKeys         : [\"value\", \"searchBy\"],\n        fuzzySearch        : true,\n        caseSensitive      : false,\n        accentedSearch     : true,\n        includeSelectedTags: false,  // Should the suggestions list Include already-selected tags (after filtering)\n        escapeHTML         : true,   // escapes HTML entities in the suggestions' rendered text\n        highlightFirst     : true,   // highlights first-matched item in the list\n        closeOnSelect      : true,   // closes the dropdown after selecting an item, if `enabled:0` (which means always show dropdown)\n        clearOnSelect      : true,   // after selecting a suggetion, should the typed text input remain or be cleared\n        position           : 'all',  // 'manual' / 'text' / 'all'\n        appendTarget       : null    // defaults to document.body once DOM has been loaded\n    },\n\n    hooks: {\n        beforeRemoveTag: () => Promise.resolve(),\n        beforePaste: () => Promise.resolve(),\n        suggestionClick: () => Promise.resolve(),\n        beforeKeyDown: () => Promise.resolve(),\n    }\n}\n", "import { sameStr, isObject, minify, getNodeHeight, getCaretGlobalPosition } from './helpers'\nimport suggestionsMethods from './suggestions'\n\nexport function initDropdown(){\n    this.dropdown = {}\n\n    // auto-bind \"this\" to all the dropdown methods\n    for( let p in this._dropdown )\n        this.dropdown[p] = typeof this._dropdown[p] === 'function'\n            ? this._dropdown[p].bind(this)\n            : this._dropdown[p]\n\n    this.dropdown.refs()\n    this.DOM.dropdown.__tagify = this\n}\n\nexport default {\n    ...suggestionsMethods,\n\n    refs(){\n        this.DOM.dropdown = this.parseTemplate('dropdown', [this.settings])\n        this.DOM.dropdown.content = this.DOM.dropdown.querySelector(\"[data-selector='tagify-suggestions-wrapper']\")\n    },\n\n    getHeaderRef(){\n        return this.DOM.dropdown.querySelector(\"[data-selector='tagify-suggestions-header']\")\n    },\n\n    getFooterRef(){\n        return this.DOM.dropdown.querySelector(\"[data-selector='tagify-suggestions-footer']\")\n    },\n\n    getAllSuggestionsRefs(){\n        return [...this.DOM.dropdown.content.querySelectorAll(this.settings.classNames.dropdownItemSelector)]\n    },\n\n    /**\n     * shows the suggestions select box\n     * @param {String} value [optional, filter the whitelist by this value]\n     */\n    show( value ){\n        var _s = this.settings,\n            firstListItem,\n            firstListItemValue,\n            allowNewTags = _s.mode == 'mix' && !_s.enforceWhitelist,\n            noWhitelist =  !_s.whitelist || !_s.whitelist.length,\n            noMatchListItem,\n            isManual = _s.dropdown.position == 'manual';\n\n        // if text still exists in the input, and `show` method has no argument, then the input's text should be used\n        value = value === undefined ? this.state.inputText : value\n\n        // ⚠️ Do not render suggestions list  if:\n        // 1. there's no whitelist (can happen while async loading) AND new tags arn't allowed\n        // 2. dropdown is disabled\n        // 3. loader is showing (controlled outside of this code)\n        if( (noWhitelist && !allowNewTags && !_s.templates.dropdownItemNoMatch)\n            || _s.dropdown.enabled === false\n            || this.state.isLoading\n            || this.settings.readonly )\n            return;\n\n        clearTimeout(this.dropdownHide__bindEventsTimeout)\n\n        // if no value was supplied, show all the \"whitelist\" items in the dropdown\n        // @type [Array] listItems\n        this.suggestedListItems = this.dropdown.filterListItems(value)\n\n        // trigger at this exact point to let the developer the chance to manually set \"this.suggestedListItems\"\n        if( value && !this.suggestedListItems.length ){\n            this.trigger('dropdown:noMatch', value)\n\n            if( _s.templates.dropdownItemNoMatch )\n                noMatchListItem = _s.templates.dropdownItemNoMatch.call(this, {value})\n        }\n\n        // if \"dropdownItemNoMatch\" was not defined, procceed regular flow.\n        //\n        if( !noMatchListItem ){\n            // in mix-mode, if the value isn't included in the whilelist & \"enforceWhitelist\" setting is \"false\",\n            // then add a custom suggestion item to the dropdown\n            if( this.suggestedListItems.length ){\n                if( value   &&   allowNewTags   &&   !this.state.editing.scope  &&  !sameStr(this.suggestedListItems[0].value, value) )\n                    this.suggestedListItems.unshift({value})\n            }\n            else{\n                if( value   &&   allowNewTags  &&  !this.state.editing.scope ){\n                    this.suggestedListItems = [{value}]\n                }\n                // hide suggestions list if no suggestion matched\n                else{\n                    this.input.autocomplete.suggest.call(this);\n                    this.dropdown.hide()\n                    return;\n                }\n            }\n\n            firstListItem =  this.suggestedListItems[0]\n            firstListItemValue = \"\"+(isObject(firstListItem) ? firstListItem.value : firstListItem)\n\n            if( _s.autoComplete && firstListItemValue ){\n                // only fill the sugegstion if the value of the first list item STARTS with the input value (regardless of \"fuzzysearch\" setting)\n                if( firstListItemValue.indexOf(value) == 0 )\n                    this.input.autocomplete.suggest.call(this, firstListItem)\n            }\n        }\n\n        this.dropdown.fill(noMatchListItem)\n\n        if( _s.dropdown.highlightFirst ) {\n            this.dropdown.highlightOption(this.DOM.dropdown.content.querySelector(_s.classNames.dropdownItemSelector))\n        }\n\n        // bind events, exactly at this stage of the code. \"dropdown.show\" method is allowed to be\n        // called multiple times, regardless if the dropdown is currently visible, but the events-binding\n        // should only be called if the dropdown wasn't previously visible.\n        if( !this.state.dropdown.visible )\n            // timeout is needed for when pressing arrow down to show the dropdown,\n            // so the key event won't get registered in the dropdown events listeners\n            setTimeout(this.dropdown.events.binding.bind(this))\n\n        // set the dropdown visible state to be the same as the searched value.\n        // MUST be set *before* position() is called\n        this.state.dropdown.visible = value || true\n        this.state.dropdown.query = value\n\n        this.setStateSelection()\n\n        // try to positioning the dropdown (it might not yet be on the page, doesn't matter, next code handles this)\n        if( !isManual ){\n            // a slight delay is needed if the dropdown \"position\" setting is \"text\", and nothing was typed in the input,\n            // so sadly the \"getCaretGlobalPosition\" method doesn't recognize the caret position without this delay\n            setTimeout(() => {\n                this.dropdown.position()\n                this.dropdown.render()\n            })\n        }\n\n        // a delay is needed because of the previous delay reason.\n        // this event must be fired after the dropdown was rendered & positioned\n        setTimeout(() => {\n            this.trigger(\"dropdown:show\", this.DOM.dropdown)\n        })\n    },\n\n    /**\n     * Hides the dropdown (if it's not managed manually by the developer)\n     * @param {Boolean} overrideManual\n     */\n    hide( overrideManual ){\n        var {scope, dropdown} = this.DOM,\n            isManual = this.settings.dropdown.position == 'manual' && !overrideManual;\n\n        // if there's no dropdown, this means the dropdown events aren't binded\n        if( !dropdown || !document.body.contains(dropdown) || isManual ) return;\n\n        window.removeEventListener('resize', this.dropdown.position)\n        this.dropdown.events.binding.call(this, false) // unbind all events\n\n        // if the dropdown is open, and the input (scope) is clicked,\n        // the dropdown should be now \"close\", and the next click (on the scope)\n        // should re-open it, and without a timeout, clicking to close will re-open immediately\n        //  clearTimeout(this.dropdownHide__bindEventsTimeout)\n        //  this.dropdownHide__bindEventsTimeout = setTimeout(this.events.binding.bind(this), 250)  // re-bind main events\n\n\n        scope.setAttribute(\"aria-expanded\", false)\n        dropdown.parentNode.removeChild(dropdown)\n\n        // scenario: clicking the scope to show the dropdown, clicking again to hide -> calls dropdown.hide() and then re-focuses the input\n        // which casues another onFocus event, which checked \"this.state.dropdown.visible\" and see it as \"false\" and re-open the dropdown\n        setTimeout(() => {\n            this.state.dropdown.visible = false\n        }, 100)\n\n        this.state.dropdown.query =\n        this.state.ddItemData =\n        this.state.ddItemElm =\n        this.state.selection = null\n\n        // if the user closed the dropdown (in mix-mode) while a potential tag was detected, flag the current tag\n        // so the dropdown won't be shown on following user input for that \"tag\"\n        if( this.state.tag && this.state.tag.value.length ){\n            this.state.flaggedTags[this.state.tag.baseOffset] = this.state.tag\n        }\n\n        this.trigger(\"dropdown:hide\", dropdown)\n\n        return this\n    },\n\n    /**\n     * Toggles dropdown show/hide\n     * @param {Boolean} show forces the dropdown to show\n     */\n    toggle(show){\n        this.dropdown[this.state.dropdown.visible && !show ? 'hide' : 'show']()\n    },\n\n    getAppendTarget() {\n        var _sd = this.settings.dropdown;\n        return typeof _sd.appendTarget === 'function' ? _sd.appendTarget() : _sd.appendTarget;\n    },\n\n    render(){\n        // let the element render in the DOM first, to accurately measure it.\n        // this.DOM.dropdown.style.cssText = \"left:-9999px; top:-9999px;\";\n        var ddHeight = getNodeHeight(this.DOM.dropdown),\n            _s = this.settings,\n            appendTarget = this.dropdown.getAppendTarget();\n\n        if( _s.dropdown.enabled === false ) return this;\n\n        this.DOM.scope.setAttribute(\"aria-expanded\", true)\n\n        // if the dropdown has yet to be appended to the DOM,\n        // append the dropdown to the body element & handle events\n        if( !document.body.contains(this.DOM.dropdown) ){\n            this.DOM.dropdown.classList.add( _s.classNames.dropdownInital )\n            this.dropdown.position(ddHeight)\n            appendTarget.appendChild(this.DOM.dropdown)\n\n            setTimeout(() =>\n                this.DOM.dropdown.classList.remove( _s.classNames.dropdownInital )\n            )\n        }\n\n        return this\n    },\n\n    /**\n     * re-renders the dropdown content element (see \"dropdownContent\" in templates file)\n     * @param {String/Array} HTMLContent - optional\n     */\n    fill( HTMLContent ){\n        HTMLContent = typeof HTMLContent == 'string'\n            ? HTMLContent\n            : this.dropdown.createListHTML(HTMLContent || this.suggestedListItems)\n\n        var dropdownContent = this.settings.templates.dropdownContent.call(this, HTMLContent)\n\n        this.DOM.dropdown.content.innerHTML = minify(dropdownContent)\n    },\n\n    /**\n     * Re-renders only the header & footer.\n     * Used when selecting a suggestion and it is wanted that the suggestions dropdown stays open.\n     * Since the list of sugegstions is not being re-rendered completely every time a suggestion is selected (the item is transitioned-out)\n     * then the header & footer should be kept in sync with the suggestions data change\n     */\n    fillHeaderFooter(){\n        var suggestions = this.dropdown.filterListItems(this.state.dropdown.query),\n            newHeaderElem = this.parseTemplate('dropdownHeader', [suggestions]),\n            newFooterElem = this.parseTemplate('dropdownFooter', [suggestions]),\n            headerRef = this.dropdown.getHeaderRef(),\n            footerRef = this.dropdown.getFooterRef();\n\n        newHeaderElem && headerRef?.parentNode.replaceChild(newHeaderElem, headerRef)\n        newFooterElem && footerRef?.parentNode.replaceChild(newFooterElem, footerRef)\n    },\n\n    /**\n     * dropdown positioning logic\n     * (shown above/below or next to typed text for mix-mode)\n     */\n    position( ddHeight ){\n        var _sd = this.settings.dropdown,\n            appendTarget = this.dropdown.getAppendTarget();\n\n        if( _sd.position == 'manual' || !appendTarget) return\n\n        var rect, top, bottom, left, width, ancestorsOffsets,\n            isPlacedAbove, hasSpaceOnRight,\n            cssTop, cssLeft,\n            ddElm = this.DOM.dropdown,\n            isRTL = _sd.RTL,\n            isDefaultAppendTarget = appendTarget === document.body,\n            isSelfAppended = appendTarget === this.DOM.scope,\n            appendTargetScrollTop = isDefaultAppendTarget ? window.pageYOffset : appendTarget.scrollTop,\n            root = document.fullscreenElement || document.webkitFullscreenElement || document.documentElement,\n            viewportHeight = root.clientHeight,\n            viewportWidth = Math.max(root.clientWidth || 0, window.innerWidth || 0),\n            positionTo = viewportWidth > 480 ? _sd.position : 'all',\n            ddTarget = this.DOM[positionTo == 'input' ? 'input' : 'scope'],\n            MIN_DISTANCE_FROM_VIEWPORT_H_EDGE = 120;\n\n        ddHeight = ddHeight || ddElm.clientHeight\n\n        function getAncestorsOffsets(p){\n            var top = 0, left = 0;\n\n            p = p.parentNode;\n\n            // when in element-fullscreen mode, do not go above the fullscreened-element\n            while(p && p != root){\n                top += p.offsetTop || 0\n                left += p.offsetLeft || 0\n                p = p.parentNode\n            }\n\n            return {top, left};\n        }\n\n        function getAccumulatedAncestorsScrollTop() {\n            var scrollTop = 0,\n                p = _sd.appendTarget.parentNode;\n\n            while(p){\n                scrollTop += p.scrollTop || 0;\n                p = p.parentNode\n            }\n\n            return scrollTop;\n        }\n\n        if( !this.state.dropdown.visible ) return\n\n        if( positionTo == 'text' ){\n            rect   = getCaretGlobalPosition()\n            bottom = rect.bottom\n            top    = rect.top\n            left   = rect.left\n            width  = 'auto'\n        }\n\n        else{\n            ancestorsOffsets = getAncestorsOffsets(appendTarget)\n            rect   = ddTarget.getBoundingClientRect()\n            top    = isSelfAppended ? -1 : rect.top - ancestorsOffsets.top\n            bottom = (isSelfAppended ? rect.height : rect.bottom - ancestorsOffsets.top) - 1\n            left   = isSelfAppended ? -1 : rect.left - ancestorsOffsets.left\n            width  = rect.width + 'px'\n        }\n\n        // if the \"append target\" isn't the default, correct the `top` variable by ignoring any scrollTop of the target's Ancestors\n        if( !isDefaultAppendTarget ) {\n            let accumulatedAncestorsScrollTop = getAccumulatedAncestorsScrollTop()\n            top += accumulatedAncestorsScrollTop\n            bottom += accumulatedAncestorsScrollTop\n        }\n\n        top = Math.floor(top)\n        bottom = Math.ceil(bottom)\n\n        isPlacedAbove = _sd.placeAbove ?? viewportHeight - rect.bottom < ddHeight\n        hasSpaceOnRight = viewportWidth - left < MIN_DISTANCE_FROM_VIEWPORT_H_EDGE;\n\n        // flip vertically if there is no space for the dropdown below the input\n        cssTop = (isPlacedAbove ? top : bottom) + appendTargetScrollTop;\n\n        // \"pageXOffset\" property is an alias for \"scrollX\"\n        cssLeft = (left + (isRTL ? (rect.width || 0) : 0) + window.pageXOffset);\n\n        // check if there's enough space on the right-side of the viewport,\n        // because the element is positioned to the right of the caret, which might need to be changed.\n        if( positionTo == 'text' && hasSpaceOnRight ) {\n            cssLeft = `right: 0;`;\n        }\n        else {\n            cssLeft = `left: ${cssLeft}px;`;\n        }\n\n        // rtl = rtl ?? viewportWidth -\n        ddElm.style.cssText = `${cssLeft} top: ${cssTop}px; min-width: ${width}; max-width: ${width}`;\n\n        ddElm.setAttribute('placement', isPlacedAbove ? 'top' : 'bottom')\n        ddElm.setAttribute('position', positionTo)\n    },\n}\n", "import { isObject, escapeHTML, extend, unaccent, logger } from './helpers'\n\n\n/**\n * Tagify's dropdown suggestions-related logic\n */\n\nexport default {\n    events : {\n        /**\n         * Events should only be binded when the dropdown is rendered and removed when isn't\n         * because there might be multiple Tagify instances on a certain page\n         * @param  {Boolean} bindUnbind [optional. true when wanting to unbind all the events]\n         */\n        binding( bindUnbind = true ){\n            // references to the \".bind()\" methods must be saved so they could be unbinded later\n            var _CB = this.dropdown.events.callbacks,\n                // callback-refs\n                _CBR = (this.listeners.dropdown = this.listeners.dropdown || {\n                    position          : this.dropdown.position.bind(this, null),\n                    onKeyDown         : _CB.onKeyDown.bind(this),\n                    onMouseOver       : _CB.onMouseOver.bind(this),\n                    onMouseLeave      : _CB.onMouseLeave.bind(this),\n                    onClick           : _CB.onClick.bind(this),\n                    onScroll          : _CB.onScroll.bind(this),\n                }),\n                action = bindUnbind ? 'addEventListener' : 'removeEventListener';\n\n            if( this.settings.dropdown.position != 'manual' ){\n                document[action]('scroll', _CBR.position, true)\n                window[action]('resize', _CBR.position)\n                window[action]('keydown', _CBR.onKeyDown)\n            }\n\n            this.DOM.dropdown[action]('mouseover', _CBR.onMouseOver)\n            this.DOM.dropdown[action]('mouseleave', _CBR.onMouseLeave)\n            this.DOM.dropdown[action]('mousedown', _CBR.onClick)\n            this.DOM.dropdown.content[action]('scroll', _CBR.onScroll)\n        },\n\n        callbacks : {\n            onKeyDown(e){\n                // ignore keys during IME composition\n                if( !this.state.hasFocus || this.state.composing )\n                    return\n\n                // get the \"active\" element, and if there was none (yet) active, use first child\n                var _s = this.settings,\n                    includeSelectedTags = _s.dropdown.includeSelectedTags,\n                    selectedElm = this.DOM.dropdown.querySelector(_s.classNames.dropdownItemActiveSelector),\n                    selectedElmData = this.dropdown.getSuggestionDataByNode(selectedElm),\n                    isMixMode = _s.mode == 'mix',\n                    isSelectMode = _s.mode == 'select';\n\n                _s.hooks.beforeKeyDown(e, {tagify:this})\n                    .then(result => {\n                        switch( e.key ){\n                            case 'ArrowDown' :\n                            case 'ArrowUp' :\n                            case 'Down' :  // >IE11\n                            case 'Up' : {  // >IE11\n                                e.preventDefault()\n                                var dropdownItems = this.dropdown.getAllSuggestionsRefs(),\n                                    actionUp = e.key == 'ArrowUp' || e.key == 'Up';\n\n                                if( selectedElm ) {\n                                    selectedElm = this.dropdown.getNextOrPrevOption(selectedElm, !actionUp)\n                                }\n\n                                // if no element was found OR current item is not a \"real\" item, loop\n                                if( !selectedElm || !selectedElm.matches(_s.classNames.dropdownItemSelector) ){\n                                    selectedElm = dropdownItems[actionUp ? dropdownItems.length - 1 : 0];\n                                }\n\n                                this.dropdown.highlightOption(selectedElm, true)\n                                // selectedElm.scrollIntoView({inline: 'nearest', behavior: 'smooth'})\n                                break;\n                            }\n                            case 'PageUp':\n                            case 'PageDown': {\n                                e.preventDefault()\n                                const dropdownItems = this.dropdown.getAllSuggestionsRefs()\n                                const itemsPerPage = Math.floor(this.DOM.dropdown.content.clientHeight / dropdownItems[0]?.offsetHeight) || 1\n                                const isPageUp = e.key === 'PageUp'\n\n                                if (selectedElm) {\n                                    const currentIndex = dropdownItems.indexOf(selectedElm)\n                                    const targetIndex = isPageUp\n                                        ? Math.max(0, currentIndex - itemsPerPage)\n                                        : Math.min(dropdownItems.length - 1, currentIndex + itemsPerPage)\n                                    selectedElm = dropdownItems[targetIndex]\n                                } else {\n                                    selectedElm = dropdownItems[0]\n                                }\n\n                                this.dropdown.highlightOption(selectedElm, true)\n                                break;\n                            }\n                            case 'Home':\n                            case 'End': {\n                                e.preventDefault()\n                                const dropdownItems = this.dropdown.getAllSuggestionsRefs()\n                                selectedElm = dropdownItems[e.key === 'Home' ? 0 : dropdownItems.length - 1]\n                                this.dropdown.highlightOption(selectedElm, true)\n                                break;\n                            }\n                            case 'Escape' :\n                            case 'Esc': // IE11\n                                this.dropdown.hide();\n                                break;\n\n                            case 'ArrowRight' :\n                                // do not continue if the left arrow key was pressed while typing, because assuming the user wants to bypass any of the below logic and edit the content without intervention.\n                                // also do not procceed if a tag should be created when the setting `autoComplete.rightKey` is set to `true`\n                                if( this.state.actions.ArrowLeft || _s.autoComplete.rightKey )\n                                    return\n                            case 'Tab' : {\n                                let shouldAutocompleteOnKey = !_s.autoComplete.rightKey || !_s.autoComplete.tabKey\n\n                                // in mix-mode, treat arrowRight like Enter key, so a tag will be created\n                                if( !isMixMode && !isSelectMode && selectedElm && shouldAutocompleteOnKey && !this.state.editing && selectedElmData ){\n                                    e.preventDefault() // prevents blur so the autocomplete suggestion will not become a tag\n                                    var value = this.dropdown.getMappedValue(selectedElmData)\n\n                                    this.state.autoCompleteData = selectedElmData;\n                                    this.input.autocomplete.set.call(this, value)\n                                    return false\n                                }\n                                return true\n                            }\n                            case 'Enter' : {\n                                e.preventDefault()\n\n                                // temporary set the \"actions\" state to indicate to the main \"blur\" event it shouldn't execute any if its logic.\n                                // a `100ms` is a good-enough timeout after some testing\n                                this.state.actions.selectOption = true;\n                                setTimeout(()=> this.state.actions.selectOption = false, 100)\n\n                                _s.hooks.suggestionClick(e, {tagify:this, tagData:selectedElmData, suggestionElm:selectedElm})\n                                    .then(() => {\n                                        if( selectedElm ){\n                                            var nextOrPrevOption = includeSelectedTags ? selectedElm : this.dropdown.getNextOrPrevOption(selectedElm, !actionUp);\n\n                                            this.dropdown.selectOption(selectedElm, e, () => {\n                                                // highlight next option\n                                                if(nextOrPrevOption) {\n                                                    var nextOrPrevOptionValue = nextOrPrevOption.getAttribute('value')\n                                                    nextOrPrevOption = this.dropdown.getSuggestionNodeByValue(nextOrPrevOptionValue)\n                                                    this.dropdown.highlightOption(nextOrPrevOption)\n                                                }\n                                            })\n\n                                            return\n                                        }\n                                        else\n                                            this.dropdown.hide()\n\n                                        if( !isMixMode )\n                                            this.addTags(this.state.inputText.trim(), true)\n                                    })\n                                    .catch(err => logger.warn(err))\n\n                                break;\n                            }\n                            case 'Backspace' : {\n                                if( isMixMode || this.state.editing.scope ) return;\n\n                                const value = this.input.raw.call(this)\n\n                                if( value == \"\" || value.charCodeAt(0) == 8203 ){\n                                    if( _s.backspace === true )\n                                        this.removeTags()\n                                    else if( _s.backspace == 'edit' )\n                                        setTimeout(this.editTag.bind(this), 0)\n                                }\n                            }\n                        }\n                    })\n            },\n\n            onMouseOver(e){\n                var ddItem = e.target.closest(this.settings.classNames.dropdownItemSelector)\n                // event delegation check\n                this.dropdown.highlightOption(ddItem)\n            },\n\n            onMouseLeave(e){\n                // de-highlight any previously highlighted option\n                this.dropdown.highlightOption()\n            },\n\n            onClick(e){\n                if( e.button != 0 || e.target == this.DOM.dropdown || e.target == this.DOM.dropdown.content ) return; // allow only mouse left-clicks\n\n                var selectedElm = e.target.closest(this.settings.classNames.dropdownItemSelector),\n                    selectedElmData = this.dropdown.getSuggestionDataByNode(selectedElm)\n\n                // temporary set the \"actions\" state to indicate to the main \"blur\" event it shouldn't execute any if its logic.\n                // a `100ms` is a good-enough timeout after some testing\n                this.state.actions.selectOption = true;\n                setTimeout(()=> this.state.actions.selectOption = false, 100)\n\n                this.settings.hooks.suggestionClick(e, {tagify:this, tagData:selectedElmData, suggestionElm:selectedElm})\n                    .then(() => {\n                        if( selectedElm )\n                            this.dropdown.selectOption(selectedElm, e)\n                        else\n                            this.dropdown.hide()\n                    })\n                    .catch(err => logger.warn(err))\n            },\n\n            onScroll(e){\n                var elm = e.target,\n                    pos = elm.scrollTop / (elm.scrollHeight - elm.parentNode.clientHeight) * 100;\n\n                this.trigger(\"dropdown:scroll\", {percentage:Math.round(pos)})\n            },\n        }\n    },\n\n    /**\n     * fill data into the suggestions list\n     * (mainly used to update the list when removing tags while the suggestions dropdown is visible, so they will be re-added to the list. not efficient)\n     */\n    refilter( value ){\n        value = value || this.state.dropdown.query || ''\n        this.suggestedListItems = this.dropdown.filterListItems(value)\n\n        this.dropdown.fill()\n\n        if( !this.suggestedListItems.length )\n            this.dropdown.hide()\n\n        this.trigger(\"dropdown:updated\", this.DOM.dropdown)\n    },\n\n    /**\n     * Given a suggestion-item, return the data associated with it\n     * @param {HTMLElement} tagElm\n     * @returns Object\n     */\n    getSuggestionDataByNode( tagElm ){\n        var item, value = tagElm && tagElm.getAttribute('value')\n\n        for(var i = this.suggestedListItems.length; i--; ) {\n            item = this.suggestedListItems[i]\n            if( isObject(item) && item.value == value ) return item\n            // for primitive whitelist items:\n            else if( item == value ) return {value: item}\n        }\n    },\n\n    getSuggestionNodeByValue( value ){\n        var dropdownItems = this.dropdown.getAllSuggestionsRefs()\n        return dropdownItems.find(item => item.getAttribute('value') === value);\n    },\n\n    getNextOrPrevOption(selected, next = true) {\n        var dropdownItems = this.dropdown.getAllSuggestionsRefs(),\n            selectedIdx = dropdownItems.findIndex(item => item === selected);\n\n        return next ? dropdownItems[selectedIdx + 1] : dropdownItems[selectedIdx - 1]\n    },\n\n    /**\n     * mark the currently active suggestion option\n     * @param {Object}  elm            option DOM node\n     * @param {Boolean} adjustScroll   when navigation with keyboard arrows (up/down), auto-scroll to always show the highlighted element\n     */\n    highlightOption( elm, adjustScroll ){\n        var className = this.settings.classNames.dropdownItemActive,\n            itemData;\n\n        // focus casues a bug in Firefox with the placeholder been shown on the input element\n        // if( this.settings.dropdown.position != 'manual' )\n        //     elm.focus();\n\n        if( this.state.ddItemElm ){\n            this.state.ddItemElm.classList.remove(className)\n            this.state.ddItemElm.removeAttribute(\"aria-selected\")\n        }\n\n        if( !elm ){\n            this.state.ddItemData = null\n            this.state.ddItemElm = null\n            this.input.autocomplete.suggest.call(this)\n            return;\n        }\n\n        itemData = this.dropdown.getSuggestionDataByNode(elm)\n        this.state.ddItemData = itemData\n        this.state.ddItemElm = elm\n\n        // this.DOM.dropdown.querySelectorAll(\".\" + this.settings.classNames.dropdownItemActive).forEach(activeElm => activeElm.classList.remove(className));\n        elm.classList.add(className);\n        elm.setAttribute(\"aria-selected\", true)\n\n        if( adjustScroll )\n            elm.parentNode.scrollTop = elm.clientHeight + elm.offsetTop - elm.parentNode.clientHeight\n\n        // Try to autocomplete the typed value with the currently highlighted dropdown item\n        if( this.settings.autoComplete ){\n            this.input.autocomplete.suggest.call(this, itemData)\n            this.dropdown.position() // suggestions might alter the height of the tagify wrapper because of unkown suggested term length that could drop to the next line\n        }\n    },\n\n    /**\n     * Create a tag from the currently active suggestion option\n     * @param {Object} elm  DOM node to select\n     * @param {Object} event The original Click event, if available (since keyboard ENTER key also triggers this method)\n     */\n    selectOption( elm, event, onSelect ){\n        var _s = this.settings,\n            includeSelectedTags = _s.dropdown.includeSelectedTags,\n            {clearOnSelect, closeOnSelect} = _s.dropdown;\n\n        if( !elm ) {\n            this.addTags(this.state.inputText, true)\n            closeOnSelect && this.dropdown.hide()\n            return;\n        }\n\n        event = event || {}\n\n        // if in edit-mode, do not continue but instead replace the tag's text.\n        // the scenario is that \"addTags\" was called from a dropdown suggested option selected while editing\n\n        var value = elm.getAttribute('value'),\n            isNoMatch = value == 'noMatch',\n            isMixMode = _s.mode == 'mix',\n            tagData = this.suggestedListItems.find(item => (item.value ?? item) == value)\n\n        // The below event must be triggered, regardless of anything else which might go wrong\n        this.trigger('dropdown:select', {data:tagData, elm, event})\n\n        if( !tagData && !isNoMatch ){\n            closeOnSelect && setTimeout(this.dropdown.hide.bind(this))\n            return\n        }\n\n        if( this.state.editing ) {\n            let normalizedTagData = this.normalizeTags([tagData])[0]\n            tagData = _s.transformTag.call(this, normalizedTagData) || normalizedTagData\n\n            // normalizing value, because \"tagData\" might be a string, and therefore will not be able to extend the object\n            this.onEditTagDone(null, extend({__isValid: true}, tagData))\n        }\n        // Tagify instances should re-focus to the input element once an option was selected, to allow continuous typing\n        else {\n            this[isMixMode ? \"addMixTags\" : \"addTags\"]([tagData || this.input.raw.call(this)], clearOnSelect)\n        }\n\n        if( !isMixMode && !this.DOM.input.parentNode )\n            return\n\n        setTimeout(() => {\n            this.DOM.input.focus()\n            this.toggleFocusClass(true)\n        })\n\n        closeOnSelect && setTimeout(this.dropdown.hide.bind(this))\n\n        // execute these tasks once a suggestion has been selected\n        if(includeSelectedTags) {\n            onSelect && onSelect()\n        }\n\n        // if the selected suggestion is removed after being selected, more things things needs to be done:\n        else {\n            elm.addEventListener('transitionend', () => {\n                this.dropdown.fillHeaderFooter()\n\n                setTimeout(() => {\n                    elm.remove()\n                    this.dropdown.refilter()\n                    onSelect && onSelect()\n                }, 100)\n            }, {once: true})\n\n            // hide selected suggestion\n            elm.classList.add(this.settings.classNames.dropdownItemHidden)\n        }\n    },\n\n    // adds all the suggested items, including the ones which are not currently rendered,\n    // unless specified otherwise (by the \"onlyRendered\" argument)\n    selectAll( onlyRendered ){\n        // having suggestedListItems with items messes with \"normalizeTags\" when wanting\n        // to add all tags\n        this.suggestedListItems.length = 0;\n        this.dropdown.hide()\n\n        this.dropdown.filterListItems('');\n\n        var tagsToAdd = this.dropdown.filterListItems('');\n\n        if( !onlyRendered )\n            tagsToAdd = this.state.dropdown.suggestions\n\n        // some whitelist items might have already been added as tags so when addings all of them,\n        // skip adding already-added ones, so best to use \"filterListItems\" method over \"settings.whitelist\"\n        this.addTags(tagsToAdd, true)\n        return this\n    },\n\n    /**\n     * returns an HTML string of the suggestions' list items\n     * @param {String} value string t\n     * o filter the whitelist by\n     * @param {Object} options \"exact\" - for exact complete match\n     * @return {Array} list of filtered whitelist items according to the settings provided and current value\n     */\n    filterListItems( value, options ){\n        var _s = this.settings,\n            _sd = _s.dropdown,\n            options = options || {},\n            list = [],\n            exactMatchesList = [],\n            whitelist = _s.whitelist,\n            suggestionsCount = _sd.maxItems >= 0 ? _sd.maxItems : Infinity,\n            includeSelectedTags = _sd.includeSelectedTags,\n            hasCustomSort = typeof _sd.sortby == 'function',\n            searchKeys = _sd.searchKeys,\n            whitelistItem,\n            valueIsInWhitelist,\n            searchBy,\n            isDuplicate,\n            niddle,\n            i = 0;\n\n        value = (_s.mode == 'select' && this.value.length && this.value[0][_s.tagTextProp] == value\n            ? '' // do not filter if the tag, which is already selecetd in \"select\" mode, is the same as the typed text\n            : value);\n\n        if( !value || !searchKeys.length ){\n            list = includeSelectedTags\n                ? whitelist\n                : whitelist.filter(item => !this.isTagDuplicate( isObject(item) ? item.value : item )) // don't include tags which have already been added.\n\n            var filteredList = hasCustomSort\n                ? _sd.sortby(list, niddle)\n                : list.slice(0, suggestionsCount); // respect \"maxItems\" dropdown setting\n\n            this.state.dropdown.suggestions = filteredList;\n\n            return filteredList;\n        }\n\n        niddle = _sd.caseSensitive\n            ? \"\"+value\n            : (\"\"+value).toLowerCase()\n\n        // checks if ALL of the words in the search query exists in the current whitelist item, regardless of their order\n        function stringHasAll(s, query){\n            return query.toLowerCase().split(' ').every(q => s.includes(q.toLowerCase()))\n        }\n\n        for( ; i < whitelist.length; i++ ){\n            let startsWithMatch, exactMatch;\n\n            whitelistItem = whitelist[i] instanceof Object ? whitelist[i] : { value:whitelist[i] } //normalize value as an Object\n\n            let itemWithoutSearchKeys = !Object.keys(whitelistItem).some(k => searchKeys.includes(k) ),\n                _searchKeys = itemWithoutSearchKeys ? [\"value\"] : searchKeys\n\n            if( _sd.fuzzySearch && !options.exact ){\n                searchBy = _searchKeys.reduce((values, k) => values + \" \" + (whitelistItem[k]||\"\"), \"\").toLowerCase().trim()\n\n                if( _sd.accentedSearch ){\n                    searchBy = unaccent(searchBy)\n                    niddle = unaccent(niddle)\n                }\n\n                startsWithMatch = searchBy.indexOf(niddle) == 0\n                exactMatch = searchBy === niddle\n                valueIsInWhitelist = stringHasAll(searchBy, niddle)\n            }\n\n            else {\n                startsWithMatch = true;\n                valueIsInWhitelist = _searchKeys.some(k => {\n                    var v = '' + (whitelistItem[k] || '') // if key exists, cast to type String\n\n                    if( _sd.accentedSearch ){\n                        v = unaccent(v)\n                        niddle = unaccent(niddle)\n                    }\n\n                    if( !_sd.caseSensitive )\n                        v = v.toLowerCase()\n\n                    exactMatch = v === niddle\n\n                    return options.exact\n                        ? v === niddle\n                        : v.indexOf(niddle) == 0\n                })\n            }\n\n            isDuplicate = !_sd.includeSelectedTags && this.isTagDuplicate( isObject(whitelistItem) ? whitelistItem.value : whitelistItem )\n\n            // match for the value within each \"whitelist\" item\n            if( valueIsInWhitelist && !isDuplicate )\n                if( exactMatch && startsWithMatch)\n                    exactMatchesList.push(whitelistItem)\n                else if( _sd.sortby == 'startsWith' && startsWithMatch )\n                    list.unshift(whitelistItem)\n                else\n                    list.push(whitelistItem)\n        }\n\n        this.state.dropdown.suggestions = exactMatchesList.concat(list);\n\n        // custom sorting function\n        var filteredList = hasCustomSort\n            ? _sd.sortby(exactMatchesList.concat(list), niddle)\n            : exactMatchesList.concat(list).slice(0, suggestionsCount)\n\n        this.state.dropdown.suggestions = filteredList;\n        return filteredList\n    },\n\n    /**\n     * Returns the final value of a tag data (object) with regards to the \"mapValueTo\" dropdown setting\n     * @param {Object} tagData\n     * @returns\n     */\n    getMappedValue(tagData){\n        var mapValueTo = this.settings.dropdown.mapValueTo,\n            value = (mapValueTo\n                ? typeof mapValueTo == 'function' ? mapValueTo(tagData) : (tagData[mapValueTo] || tagData.value)\n                : tagData.value);\n\n        return value\n    },\n\n    /**\n     * Creates the dropdown items' HTML\n     * @param  {Array} sugegstionsList  [Array of Objects]\n     * @return {String}\n     */\n    createListHTML( sugegstionsList ){\n        return extend([], sugegstionsList).map((suggestion, idx) => {\n            if( typeof suggestion == 'string' || typeof suggestion == 'number' )\n                suggestion = {value:suggestion}\n\n            var mappedValue = this.dropdown.getMappedValue(suggestion);\n\n            mappedValue = (typeof mappedValue == 'string' && this.settings.dropdown.escapeHTML)\n                ? escapeHTML(mappedValue)\n                : mappedValue;\n\n            return this.settings.templates.dropdownItem.apply(this, [{...suggestion, mappedValue}, this])\n        }).join(\"\")\n    }\n}", "const VERSION = 1; // current version of persisted data. if code change breaks persisted data, verison number should be bumped.\nconst STORE_KEY = '@yaireo/tagify/'\n\nexport const getPersistedData = id => key => {\n    if( !id ) return;\n\n    // if \"persist\" is \"false\", do not save to localstorage\n    let customKey = '/'+key,\n        persistedData,\n        currentStorageVersion = localStorage?.getItem(STORE_KEY + id + '/v')\n\n    if( currentStorageVersion === VERSION){\n        try{ persistedData = JSON.parse(localStorage[STORE_KEY + id + customKey]) }\n        catch(err){}\n    }\n\n    return persistedData\n}\n\nexport const setPersistedData = id => {\n    if( !id ) return () => {};\n\n    // for storage invalidation\n    localStorage?.setItem(STORE_KEY + id + '/v', VERSION)\n\n    return (data, key) => {\n        let customKey = '/'+key,\n            persistedData = JSON.stringify(data)\n\n        if( data && key ){\n            localStorage?.setItem(STORE_KEY + id + customKey, persistedData)\n            dispatchEvent( new Event('storage') )\n        }\n    }\n}\n\nexport const clearPersistedData = id => key => {\n    const base = STORE_KEY + '/' + id + '/';\n\n    // delete specific key in the storage\n    if( key )\n        localStorage.removeItem(base + key)\n\n    // delete all keys in the storage with a specific tagify id\n    else {\n        for(let k in localStorage)\n            if( k.includes(base) )\n                localStorage.removeItem(k)\n    }\n}\n", "export default {\r\n    empty      : \"empty\",\r\n    exceed     : \"number of tags exceeded\",\r\n    pattern    : \"pattern mismatch\",\r\n    duplicate  : \"already exists\",\r\n    notAllowed : \"not allowed\"\r\n}", "import {ZERO_WIDTH_UNICODE_CHAR} from './constants'\n\nexport default {\n    /**\n     *\n     * @param {DOM Object} input     Original input DOm element\n     * @param {Object}     settings  Tagify instance settings Object\n     */\n    wrapper(input, _s){\n        return `<tags class=\"${_s.classNames.namespace} ${_s.mode ? `${_s.classNames[_s.mode + \"Mode\"]}` : \"\"} ${input.className}\"\n                    ${_s.readonly ? 'readonly' : ''}\n                    ${_s.disabled ? 'disabled' : ''}\n                    ${_s.required ? 'required' : ''}\n                    ${_s.mode === 'select' ? \"spellcheck='false'\" : ''}\n                    tabIndex=\"-1\">\n                    ${this.settings.templates.input.call(this)}\n                ${ZERO_WIDTH_UNICODE_CHAR}\n        </tags>`\n    },\n\n    input() {\n        var _s = this.settings,\n            placeholder = _s.placeholder || ZERO_WIDTH_UNICODE_CHAR;\n\n        return `<span ${!_s.readonly && _s.userInput ? 'contenteditable' : ''} data-can-editable tabIndex=\"0\" data-placeholder=\"${placeholder}\" aria-placeholder=\"${_s.placeholder || ''}\"\n                    class=\"${_s.classNames.input}\"\n                    role=\"textbox\"\n                    autocapitalize=\"false\"\n                    autocorrect=\"off\"\n                    aria-label=\"${_s.a11y.inputAriaLabel}\"\n                    aria-autocomplete=\"both\"\n                    aria-multiline=\"${_s.mode=='mix'?true:false}\"></span>`\n    },\n\n    tag(tagData, {settings: _s}){\n        return `<tag title=\"${(tagData.title || tagData.value)}\"\n                    contenteditable='false'\n                    tabIndex=\"${_s.a11y.focusableTags ? 0 : -1}\"\n                    class=\"${_s.classNames.tag} ${tagData.class || \"\"}\"\n                    ${this.getAttributes(tagData)}>\n            <x title='' tabIndex=\"${_s.a11y.focusableTags ? 0 : -1}\" class=\"${_s.classNames.tagX}\" role='button' aria-label='remove tag'></x>\n            <div>\n                <span ${_s.mode === 'select' && _s.userInput ? \"contenteditable='true'\" : ''} autocapitalize=\"false\" autocorrect=\"off\" spellcheck='false' class=\"${_s.classNames.tagText}\">${tagData[_s.tagTextProp] || tagData.value}</span>\n            </div>\n        </tag>`\n    },\n\n    dropdown(settings){\n        var _sd = settings.dropdown,\n            isManual = _sd.position == 'manual';\n\n        return `<div class=\"${isManual ? '' : settings.classNames.dropdown } ${_sd.classname}\" role=\"listbox\" aria-labelledby=\"dropdown\" dir=\"${_sd.RTL ? 'rtl' : ''}\">\n                    <div data-selector='tagify-suggestions-wrapper' class=\"${settings.classNames.dropdownWrapper}\"></div>\n                </div>`\n    },\n\n    dropdownContent(HTMLContent) {\n        var _t = this.settings.templates,\n            suggestions = this.state.dropdown.suggestions;\n\n        return `\n            ${_t.dropdownHeader.call(this, suggestions)}\n            ${HTMLContent}\n            ${_t.dropdownFooter.call(this, suggestions)}\n        `\n    },\n\n    dropdownItem(item){\n        return `<div ${this.getAttributes(item)}\n                    class='${this.settings.classNames.dropdownItem} ${this.isTagDuplicate(item.value) ? this.settings.classNames.dropdownItemSelected: \"\"} ${item.class || \"\"}'\n                    tabindex=\"0\"\n                    role=\"option\">${item.mappedValue || item.value}</div>`\n    },\n\n    /**\n     * @param {Array} suggestions An array of all the matched suggested items, including those which were sliced away due to the \"dropdown.maxItems\" setting\n     */\n    dropdownHeader(suggestions){\n        return `<header data-selector='tagify-suggestions-header' class=\"${this.settings.classNames.dropdownHeader}\"></header>`\n    },\n\n    dropdownFooter(suggestions){\n        var hasMore = suggestions.length - this.settings.dropdown.maxItems;\n\n        return hasMore > 0\n            ? `<footer data-selector='tagify-suggestions-footer' class=\"${this.settings.classNames.dropdownFooter}\">\n                ${hasMore} more items. Refine your search.\n            </footer>`\n            : '';\n    },\n\n    dropdownItemNoMatch: null\n}\n", "import { decode, extend, getfirstTextNode, isChromeAndroidBrowser, isNodeTag, isWithinNodeTag, injectAtCaret, getSetTagData, fixCaretBetweenTags, placeCaretAfterNode } from './helpers'\nimport {ZERO_WIDTH_CHAR} from './constants'\n\nexport function triggerChangeEvent(){\n    if( this.settings.mixMode.integrated ) return;\n\n    var inputElm = this.DOM.originalInput,\n        changed = this.state.lastOriginalValueReported !== inputElm.value,\n        event = new CustomEvent(\"change\", {bubbles: true}); // must use \"CustomEvent\" and not \"Event\" to support IE\n\n    if( !changed ) return;\n\n    // must apply this BEFORE triggering the simulated event\n    this.state.lastOriginalValueReported = inputElm.value\n\n    // React hack: https://github.com/facebook/react/issues/11488\n    event.simulated = true\n    if (inputElm._valueTracker)\n        inputElm._valueTracker.setValue(Math.random())\n\n    inputElm.dispatchEvent(event)\n\n    // also trigger a Tagify event\n    this.trigger(\"change\", this.state.lastOriginalValueReported)\n\n    // React, for some reason, clears the input's value after \"dispatchEvent\" is fired\n    inputElm.value = this.state.lastOriginalValueReported\n}\n\nexport default {\n    // bind custom events which were passed in the settings\n    customBinding(){\n        this.customEventsList.forEach(name => {\n            this.on(name, this.settings.callbacks[name])\n        })\n    },\n\n    binding( bindUnbind = true ){\n        var _s = this.settings,\n            _CB = this.events.callbacks,\n            _CBR,\n            action = bindUnbind ? 'addEventListener' : 'removeEventListener';\n\n        // do not allow the main events to be bound more than once\n        if( (this.state.mainEvents && bindUnbind ) || _s.disabled || _s.readonly )\n            return;\n\n\n        // set the binding state of the main events, so they will not be bound more than once\n        this.state.mainEvents = bindUnbind;\n\n        // everything inside gets executed only once-per instance\n        if( bindUnbind && !this.listeners.main ){\n            this.events.bindGlobal.call(this);\n\n            if( this.settings.isJQueryPlugin )\n                jQuery(this.DOM.originalInput).on('tagify.removeAllTags', this.removeAllTags.bind(this))\n        }\n\n        // setup callback references so events could be removed later\n        _CBR = (this.listeners.main = this.listeners.main || {\n            keydown          : ['input', _CB.onKeydown.bind(this)],\n            click            : ['scope', _CB.onClickScope.bind(this)],\n            dblclick         : _s.mode != 'select' && ['scope', _CB.onDoubleClickScope.bind(this)],\n            paste            : ['input', _CB.onPaste.bind(this)],\n            drop             : ['input', _CB.onDrop.bind(this)],\n            compositionstart : ['input', _CB.onCompositionStart.bind(this)],\n            compositionend   : ['input', _CB.onCompositionEnd.bind(this)]\n        })\n\n        for( var eventName in _CBR ){\n            _CBR[eventName] && this.DOM[_CBR[eventName][0]][action](eventName, _CBR[eventName][1]);\n        }\n\n        // observers\n        var inputMutationObserver = this.listeners.main.inputMutationObserver || new MutationObserver(_CB.onInputDOMChange.bind(this));\n\n        // cleaup just-in-case\n        inputMutationObserver.disconnect()\n\n        // observe stuff\n        if( _s.mode == 'mix' ) {\n            inputMutationObserver.observe(this.DOM.input, {childList:true})\n        }\n\n        this.events.bindOriginaInputListener.call(this)\n\n        if( bindUnbind ) {\n            this.listeners.main = undefined\n        }\n    },\n\n    bindOriginaInputListener(delay) {\n        const DELAY = (delay||0) + 500\n\n        if(!this.listeners.main) return\n        // listen to original input changes (unfortunetly this is the best way...)\n        // https://stackoverflow.com/a/1949416/104380\n        clearInterval(this.listeners.main.originalInputValueObserverInterval)\n        this.listeners.main.originalInputValueObserverInterval = setInterval(this.events.callbacks.observeOriginalInputValue.bind(this), DELAY)\n    },\n\n    bindGlobal( unbind ) {\n        var _CB = this.events.callbacks,\n            action = unbind ? 'removeEventListener' : 'addEventListener',\n            e;\n\n        if( !this.listeners || (!unbind  && this.listeners.global) ) return; // do not re-bind\n\n        // these events are global and should never be unbinded, unless the instance is destroyed:\n        this.listeners.global = this.listeners.global || [\n            {\n                type: this.isIE ? 'keydown' : 'input',  // IE cannot register \"input\" events on contenteditable elements, so the \"keydown\" should be used instead..\n                target: this.DOM.input,\n                cb: _CB[this.isIE ? 'onInputIE' : 'onInput'].bind(this)\n            },\n            {\n                type: 'keydown',\n                target: window,\n                cb: _CB.onWindowKeyDown.bind(this)\n            },\n            {\n                type: 'focusin',\n                target: this.DOM.scope,\n                cb: _CB.onFocusBlur.bind(this)\n            },\n            {\n                type: 'focusout',\n                target: this.DOM.scope,\n                cb: _CB.onFocusBlur.bind(this)\n            },\n            {\n                type: 'click',\n                target: document,\n                cb: _CB.onClickAnywhere.bind(this),\n                useCapture: true\n            },\n        ]\n\n        for( e of this.listeners.global )\n            e.target[action](e.type, e.cb, !!e.useCapture);\n\n        if( unbind ) {\n            this.listeners.global = undefined\n        }\n    },\n\n    unbindGlobal() {\n        this.events.bindGlobal.call(this, true);\n    },\n\n    /**\n     * DOM events callbacks\n     */\n    callbacks : {\n        onFocusBlur(e){\n            // when focusing within a tag which is in edit-mode\n            var _s = this.settings,\n                nodeTag = isWithinNodeTag.call(this, e.relatedTarget),\n                targetIsTagNode = isNodeTag.call(this, e.target),\n                isTargetXBtn = e.target.classList.contains(_s.classNames.tagX),\n                isFocused = e.type == 'focusin',\n                lostFocus = e.type == 'focusout';\n\n            // when focusing within a tag which is in edit-mode, only and specifically on the text-part of the tag node\n            // and not the X button or any other custom element thatmight be there\n            // var tagTextNode = e.target?.closest(this.settings.classNames.tagTextSelector)\n\n            if(isTargetXBtn && _s.mode != 'mix' && _s.focusInputOnRemove) {\n                this.DOM.input.focus()\n            }\n\n            if( nodeTag && isFocused && (!targetIsTagNode) && !isTargetXBtn) {\n                this.toggleFocusClass(this.state.hasFocus = +new Date())\n\n                // only if focused within a tag's text node should the `onEditTagFocus` function be called.\n                // if clicked anywhere else inside a tag, which had triggered an `focusin` event,\n                // the onFocusBlur should be aborted. This part was spcifically written for `select` mode.\n                // tagTextNode && this.events.callbacks.onEditTagFocus.call(this, nodeTag)\n            }\n\n            var text = e.target ? this.trim(this.DOM.input.textContent) : '', // a string\n                currentDisplayValue = this.value?.[0]?.[_s.tagTextProp],\n                ddEnabled = _s.dropdown.enabled >= 0,\n                eventData = {relatedTarget:e.relatedTarget},\n                isTargetSelectOption = this.state.actions.selectOption && (ddEnabled || !_s.dropdown.closeOnSelect),\n                isTargetAddNewBtn = this.state.actions.addNew && ddEnabled,\n                shouldAddTags;\n\n            if( lostFocus ){\n                if( e.relatedTarget === this.DOM.scope ){\n                    this.dropdown.hide()\n                    this.DOM.input.focus()\n                    return\n                }\n\n                this.postUpdate()\n                _s.onChangeAfterBlur && this.triggerChangeEvent()\n            }\n\n            if( isTargetSelectOption || isTargetAddNewBtn || isTargetXBtn ) {\n                return;\n            }\n\n            // should only loose focus at this point if the event was not generated from within a tag\n            if( isFocused || nodeTag ) {\n                this.state.hasFocus = +new Date()\n            }\n            else {\n                this.state.hasFocus = false;\n            }\n\n            this.toggleFocusClass(this.state.hasFocus)\n\n            if( _s.mode == 'mix' ){\n                if( isFocused ){\n                    this.trigger(\"focus\", eventData)\n                }\n\n                else if( lostFocus ){\n                    this.trigger(\"blur\", eventData)\n                    this.loading(false)\n                    this.dropdown.hide()\n                    // reset state which needs reseting\n                    this.state.dropdown.visible = undefined\n                    this.setStateSelection()\n                }\n\n                return\n            }\n\n            if( isFocused ){\n                if( !_s.focusable ) return;\n\n                // if( !targetIsTagNode && _s.mode != 'select' ){\n                //     this.DOM.input.focus()\n                // }\n\n                var dropdownCanBeShown = _s.dropdown.enabled === 0 && !this.state.dropdown.visible,\n                    tagText = this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector)\n\n                this.trigger(\"focus\", eventData)\n                //  e.target.classList.remove('placeholder');\n                if( dropdownCanBeShown && !targetIsTagNode ){  // && _s.mode != \"select\"\n                    this.dropdown.show(this.value.length ? '' : undefined)\n\n                    if(_s.mode === 'select') {\n                        this.setRangeAtStartEnd(false, tagText)\n                    }\n                }\n\n                return\n            }\n\n            else if( lostFocus ){\n                this.trigger(\"blur\", eventData)\n                this.loading(false)\n\n                // when clicking the X button of a selected tag, it is unwanted for it to be added back\n                // again in a few more lines of code (shouldAddTags && addTags)\n                if( _s.mode == 'select' ) {\n                    if( this.value.length ) {\n                        let firstTagNode = this.getTagElms()[0];\n                        text = this.trim(firstTagNode.textContent)\n                    }\n\n                    // if nothing has changed (same display value), do not add a tag\n                    if( currentDisplayValue === text )\n                        text = ''\n                }\n\n                shouldAddTags = text && !this.state.actions.selectOption && _s.addTagOnBlur && _s.addTagOn.includes('blur');\n                // do not add a tag if \"selectOption\" action was just fired (this means a tag was just added from the dropdown)\n                shouldAddTags && this.addTags(text, true)\n            }\n\n            // when clicking a tag, do not consider this is a \"blur\" event\n            if ( !nodeTag )  {\n                this.DOM.input.removeAttribute('style')\n                this.dropdown.hide()\n            }\n        },\n\n        onCompositionStart(e){\n            this.state.composing = true\n        },\n\n        onCompositionEnd(e){\n            this.state.composing = false\n        },\n\n        onWindowKeyDown(e){\n            var _s = this.settings,\n                focusedElm = document.activeElement,\n                withinTag = isWithinNodeTag.call(this, focusedElm),\n                isBelong = withinTag && this.DOM.scope.contains(focusedElm),\n                isInputNode = focusedElm === this.DOM.input,\n                isReadyOnlyTag = isBelong && focusedElm.hasAttribute('readonly'),\n                tagText = this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector),\n                isDropdownVisible = this.state.dropdown.visible,\n                nextTag;\n\n            if( !(e.key === 'Tab' && isDropdownVisible) && !this.state.hasFocus && (!isBelong || isReadyOnlyTag) || isInputNode ) return;\n\n            nextTag = focusedElm.nextElementSibling;\n\n            var targetIsRemoveBtn = e.target.classList.contains(_s.classNames.tagX);\n\n            switch( e.key ){\n                // remove tag if has focus\n                case 'Backspace': {\n                    if( !_s.readonly && !this.state.editing ) {\n                        this.removeTags(focusedElm);\n                        (nextTag ? nextTag : this.DOM.input).focus()\n                    }\n\n                    break;\n                }\n\n                case 'Enter': {\n                    if( targetIsRemoveBtn ) {\n                        this.removeTags( e.target.parentNode )\n                        return\n                    }\n\n                    if( _s.a11y.focusableTags && isNodeTag.call(this, focusedElm) )\n                        setTimeout(this.editTag.bind(this), 0, focusedElm)\n\n                    break;\n                }\n\n                case 'ArrowDown' : {\n                    // if( _s.mode == 'select' ) // issue #333\n                    if( !this.state.dropdown.visible && _s.mode != 'mix' )\n                        this.dropdown.show()\n                    break;\n                }\n\n                case 'Tab': {\n                    tagText?.focus();\n                    break;\n                }\n            }\n        },\n\n        onKeydown(e){\n            var _s = this.settings;\n\n            // ignore keys during IME composition or when user input is not allowed\n            if( this.state.composing || !_s.userInput )\n                return\n\n            if( _s.mode == 'select' && _s.enforceWhitelist && this.value.length && e.key != 'Tab' ){\n                e.preventDefault()\n            }\n\n            var s = this.trim(e.target.textContent);\n\n            this.trigger(\"keydown\", {event:e})\n\n            _s.hooks.beforeKeyDown(e, {tagify:this})\n                .then(result => {\n                    /**\n                     * ONLY FOR MIX-MODE:\n                     */\n                    if( _s.mode == 'mix' ){\n                        switch( e.key ){\n                            case 'Left' :\n                            case 'ArrowLeft' : {\n                                // when left arrow was pressed, set a flag so when the dropdown is shown, right-arrow will be ignored\n                                // because it seems likely the user wishes to use the arrows to move the caret\n                                this.state.actions.ArrowLeft = true\n                                break\n                            }\n\n                            case 'Delete':\n                            case 'Backspace' : {\n                                if( this.state.editing ) return\n\n                                var sel = document.getSelection(),\n                                    deleteKeyTagDetected = e.key == 'Delete' && sel.anchorOffset == (sel.anchorNode.length || 0),\n                                    prevAnchorSibling = sel.anchorNode.previousSibling,\n                                    isCaretAfterTag = sel.anchorNode.nodeType == 1 || !sel.anchorOffset && prevAnchorSibling && prevAnchorSibling.nodeType == 1 && sel.anchorNode.previousSibling,\n                                    lastInputValue = decode(this.DOM.input.innerHTML),\n                                    lastTagElems = this.getTagElms(),\n                                    isZWS = sel.anchorNode.length === 1 && sel.anchorNode.nodeValue == String.fromCharCode(8203),\n                                    //  isCaretInsideTag = sel.anchorNode.parentNode('.' + _s.classNames.tag),\n                                    tagBeforeCaret,\n                                    tagElmToBeDeleted,\n                                    firstTextNodeBeforeTag;\n\n                                if( _s.backspace == 'edit' && isCaretAfterTag ){\n                                    tagBeforeCaret = sel.anchorNode.nodeType == 1 ? null : sel.anchorNode.previousElementSibling;\n                                    setTimeout(this.editTag.bind(this), 0, tagBeforeCaret); // timeout is needed to the last cahacrter in the edited tag won't get deleted\n                                    e.preventDefault() // needed so the tag elm won't get deleted\n                                    return;\n                                }\n\n                                if( isChromeAndroidBrowser() && isCaretAfterTag instanceof Element ){\n                                    firstTextNodeBeforeTag = getfirstTextNode(isCaretAfterTag)\n\n                                    if( !isCaretAfterTag.hasAttribute('readonly') )\n                                        isCaretAfterTag.remove() // since this is Chrome, can safetly use this \"new\" DOM API\n\n                                    // Android-Chrome wrongly hides the keyboard, and loses focus,\n                                    // so this hack below is needed to regain focus at the correct place:\n                                    this.DOM.input.focus()\n                                    setTimeout(() => {\n                                        placeCaretAfterNode(firstTextNodeBeforeTag)\n                                        this.DOM.input.click()\n\n                                    })\n\n                                    return\n                                }\n\n                                if( sel.anchorNode.nodeName == 'BR')\n                                    return\n\n                                if( (deleteKeyTagDetected || isCaretAfterTag) && sel.anchorNode.nodeType == 1 )\n                                    if( sel.anchorOffset == 0 ) // caret is at the very begining, before a tag\n                                        tagElmToBeDeleted = deleteKeyTagDetected // delete key pressed\n                                            ? lastTagElems[0]\n                                            : null;\n                                    else\n                                        tagElmToBeDeleted = lastTagElems[Math.min(lastTagElems.length, sel.anchorOffset) - 1]\n\n                                // find out if a tag *might* be a candidate for deletion, and if so, which\n                                else if( deleteKeyTagDetected )\n                                    tagElmToBeDeleted = sel.anchorNode.nextElementSibling;\n\n                                else if( isCaretAfterTag instanceof Element )\n                                    tagElmToBeDeleted = isCaretAfterTag;\n\n                                // tagElm.hasAttribute('readonly')\n                                if( sel.anchorNode.nodeType == 3 &&   // node at caret location is a Text node\n                                    !sel.anchorNode.nodeValue    &&   // has some text\n                                    sel.anchorNode.previousElementSibling )  // text node has a Tag node before it\n                                    e.preventDefault()\n\n                                // if backspace not allowed, do nothing\n                                // TODO: a better way to detect if nodes were deleted is to simply check the \"this.value\" before & after\n                                if( (isCaretAfterTag || deleteKeyTagDetected) && !_s.backspace ){\n                                    e.preventDefault()\n                                    return\n                                }\n\n                                if( sel.type != 'Range' && !sel.anchorOffset && sel.anchorNode == this.DOM.input && e.key != 'Delete' ){\n                                    e.preventDefault()\n                                    return\n                                }\n\n                                if( sel.type != 'Range' && tagElmToBeDeleted && tagElmToBeDeleted.hasAttribute('readonly') ){\n                                    // allows the continuation of deletion by placing the caret on the first previous textNode.\n                                    // since a few readonly-tags might be one after the other, iteration is needed:\n\n                                    placeCaretAfterNode( getfirstTextNode(tagElmToBeDeleted) )\n                                    return\n                                }\n\n                                if ( e.key == 'Delete' && isZWS && getSetTagData(sel.anchorNode.nextSibling) ) {\n                                    this.removeTags(sel.anchorNode.nextSibling)\n                                }\n\n                                // update regarding https://github.com/yairEO/tagify/issues/762#issuecomment-786464317:\n                                // the bug described is more severe than the fix below, therefore I disable the fix until a solution\n                                // is found which work well for both cases.\n                                // -------\n                                // nodeType is \"1\" only when the caret is at the end after last tag (no text after), or before first first (no text before)\n                                /*\n                                if( this.isFirefox && sel.anchorNode.nodeType == 1 && sel.anchorOffset != 0 ){\n                                    this.removeTags() // removes last tag by default if no parameter supplied\n                                    // place caret inside last textNode, if exist. it's an annoying bug only in FF,\n                                    // if the last tag is removed, and there is a textNode before it, the caret is not placed at its end\n                                    placeCaretAfterNode( setRangeAtStartEnd(false, this.DOM.input) )\n                                }\n                                */\n\n                                break;\n                            }\n                            // currently commented to allow new lines in mixed-mode\n                            case 'Enter' : {\n                                e.preventDefault(); // solves Chrome bug - http://stackoverflow.com/a/20398191/104380\n\n                                if(this.state.tag) return; // assume a tag has just been added, so no need to create a new line\n                                // https://stackoverflow.com/a/72279112/104380\n                                let selection = window.getSelection();\n                                let range = selection.getRangeAt(0);\n                                range.insertNode(document.createElement('br'));\n                                selection.collapseToEnd();\n                            }\n                        }\n\n                        return true\n                    }\n\n                    var isManualDropdown = _s.dropdown.position == 'manual';\n\n                    switch( e.key ){\n                        case 'Backspace' :\n                            if( _s.mode == 'select' && _s.enforceWhitelist && this.value.length)\n                                this.removeTags()\n\n                            else if( !this.state.dropdown.visible || _s.dropdown.position == 'manual' ){\n                                if( e.target.textContent == \"\" || s.charCodeAt(0) == 8203 ){  // 8203: ZERO WIDTH SPACE unicode\n                                    if( _s.backspace === true )\n                                        this.removeTags()\n                                    else if( _s.backspace == 'edit' )\n                                        setTimeout(this.editTag.bind(this), 0) // timeout reason: when edited tag gets focused and the caret is placed at the end, the last character gets deletec (because of backspace)\n                                }\n                            }\n                            break;\n\n                        case 'Esc' :\n                        case 'Escape' :\n                            if( this.state.dropdown.visible ) return\n                            e.target.blur()\n                            break;\n\n                        case 'Down' :\n                        case 'ArrowDown' :\n                            // if( _s.mode == 'select' ) // issue #333\n                            if( !this.state.dropdown.visible )\n                                this.dropdown.show()\n                            break;\n\n                        case 'ArrowRight' : {\n                            let tagData = this.state.inputSuggestion || this.state.ddItemData\n                            if( tagData && _s.autoComplete.rightKey ){\n                                this.addTags([tagData], true)\n                                return;\n                            }\n                            break\n                        }\n\n                        case 'Tab' : {\n                            const shouldAddTag = _s.addTagOn.includes(e.key.toLowerCase());\n                            if(!shouldAddTag) {\n                                break;\n                            }\n                        }\n\n                        case 'Enter' : {\n                            // manual suggestion boxes are assumed to always be visible\n                            if( this.state.dropdown.visible && !isManualDropdown ) return\n\n                            var thingToAdd = this.state.autoCompleteData || s;\n\n                            // if nothing to add and tab key was pressed, return true (must be before preventDefault)\n                            if(!thingToAdd && e.key === \"Tab\") return true\n\n                            e.preventDefault(); // solves Chrome bug - http://stackoverflow.com/a/20398191/104380\n                            // because the main \"keydown\" event is bound before the dropdown events, this will fire first and will not *yet*\n                            // know if an option was just selected from the dropdown menu. If an option was selected,\n                            // the dropdown events should handle adding the tag\n\n\n\n                            setTimeout(()=>{\n                                if( (!this.state.dropdown.visible || isManualDropdown) && !this.state.actions.selectOption && _s.addTagOn.includes(e.key.toLowerCase()) ) {\n                                    this.addTags([thingToAdd], true)\n                                    this.state.autoCompleteData = null\n                                }\n                            })\n                        }\n                    }\n                })\n                .catch(err => err)\n        },\n\n        onInput(e){\n            this.postUpdate() // toggles \"tagify--empty\" class\n\n            var _s = this.settings;\n\n            if( _s.mode == 'mix' )\n                return this.events.callbacks.onMixTagsInput.call(this, e);\n\n            var value = this.input.normalize.call(this, undefined, {trim: false}),\n                showSuggestions = value.length >= _s.dropdown.enabled,\n                eventData = {value, inputElm:this.DOM.input},\n                validation = this.validateTag({value});\n\n            if( _s.mode == 'select' ) {\n                this.toggleScopeValidation(validation)\n            }\n\n            eventData.isValid = validation;\n\n            // for IE; since IE doesn't have an \"input\" event so \"keyDown\" is used instead to trigger the \"onInput\" callback,\n            // and so many keys do not change the input, and for those do not continue.\n            if( this.state.inputText == value ) return;\n\n            // save the value on the input's State object\n            this.input.set.call(this, value, false); // update the input with the normalized value and run validations\n            // this.setRangeAtStartEnd(false, this.DOM.input); // fix caret position\n\n            // if delimiters detected, add tags\n            if( value.search(_s.delimiters) != -1 ){\n                if( this.addTags( value ) ){\n                    this.input.set.call(this); // clear the input field's value\n                }\n            }\n\n            else if( _s.dropdown.enabled >= 0 ){\n                this.dropdown[showSuggestions ? \"show\" : \"hide\"](value);\n            }\n\n            this.trigger('input', eventData) // \"input\" event must be triggered at this point, before the dropdown is shown\n        },\n\n        onMixTagsInput( e ){\n            var rangeText, match, matchedPatternCount, tag, showSuggestions, selection,\n                _s = this.settings,\n                lastTagsCount = this.value.length,\n                matchFlaggedTag,\n                matchDelimiters,\n                tagsElems = this.getTagElms(),\n                fragment = document.createDocumentFragment(),\n                range = window.getSelection().getRangeAt(0),\n                remainingTagsValues = [].map.call(tagsElems, node => getSetTagData(node).value);\n\n            // Android Chrome \"keydown\" event argument does not report the correct \"key\".\n            // this workaround is needed to manually call \"onKeydown\" method with a synthesized event object\n            if( e.inputType == \"deleteContentBackward\" && isChromeAndroidBrowser() ){\n                this.events.callbacks.onKeydown.call(this, {\n                    target: e.target,\n                    key: \"Backspace\",\n                })\n            }\n\n            // if there's a tag as the first child of the input, always make sure it has a zero-width character before it\n            // or if two tags are next to each-other, add a zero-space width character (For the caret to appear)\n            fixCaretBetweenTags(this.getTagElms())\n\n            // re-add \"readonly\" tags which might have been removed\n            this.value.slice().forEach(item => {\n                if( item.readonly && !remainingTagsValues.includes(item.value) )\n                    fragment.appendChild( this.createTagElem(item) )\n            })\n\n            if( fragment.childNodes.length ){\n                range.insertNode(fragment)\n                this.setRangeAtStartEnd(false, fragment.lastChild)\n            }\n\n            // check if tags were \"magically\" added/removed (browser redo/undo or CTRL-A -> delete)\n            if( tagsElems.length != lastTagsCount ){\n                this.value = [].map.call(this.getTagElms(), node => getSetTagData(node))\n                this.update({ withoutChangeEvent:true })\n                return\n            }\n\n            if( this.hasMaxTags() )\n                return true\n\n            if( window.getSelection ){\n                selection = window.getSelection()\n\n                // only detect tags if selection is inside a textNode (not somehow on already-existing tag)\n                if( selection.rangeCount > 0 && selection.anchorNode.nodeType == 3 ){\n                    range = selection.getRangeAt(0).cloneRange()\n                    range.collapse(true)\n                    range.setStart(selection.focusNode, 0)\n\n                    rangeText = range.toString().slice(0, range.endOffset)  // slice the range so everything AFTER the caret will be trimmed\n                    // split = range.toString().split(_s.mixTagsAllowedAfter)  // [\"foo\", \"bar\", \"@baz\"]\n                    matchedPatternCount = rangeText.split(_s.pattern).length - 1;\n\n                    match = rangeText.match( _s.pattern )\n\n                    if( match )\n                        // tag string, example: \"@aaa ccc\"\n                        tag = rangeText.slice( rangeText.lastIndexOf(match[match.length-1]) )\n\n                    if( tag ){\n                        this.state.actions.ArrowLeft = false // start fresh, assuming the user did not (yet) used any arrow to move the caret\n                        this.state.tag = {\n                            prefix : tag.match(_s.pattern)[0],\n                            value  : tag.replace(_s.pattern, ''), // get rid of the prefix\n                        }\n                        this.state.tag.baseOffset = selection.baseOffset - this.state.tag.value.length\n\n                        matchDelimiters = this.state.tag.value.match(_s.delimiters)\n                        // if a delimeter exists, add the value as tag (exluding the delimiter)\n                        if( matchDelimiters ){\n                            this.state.tag.value = this.state.tag.value.replace(_s.delimiters, '')\n                            this.state.tag.delimiters = matchDelimiters[0]\n                            this.addTags(this.state.tag.value, _s.dropdown.clearOnSelect)\n                            this.dropdown.hide()\n                            return\n                        }\n\n                        showSuggestions = this.state.tag.value.length >= _s.dropdown.enabled\n\n                        // When writing something that might look like a tag (an email address) but isn't one - it is unwanted\n                        // the suggestions dropdown be shown, so the user can close it (in any way), and while continue typing,\n                        // dropdown should stay closed until another tag is typed.\n                        // if( this.state.tag.value.length && this.state.dropdown.visible === false )\n                        //     showSuggestions = false\n\n                        // test for similar flagged tags to the current tag\n\n                        try{\n                            matchFlaggedTag = this.state.flaggedTags[this.state.tag.baseOffset]\n                            matchFlaggedTag = matchFlaggedTag.prefix   == this.state.tag.prefix &&\n                                              matchFlaggedTag.value[0] == this.state.tag.value[0]\n\n                            // reset\n                            if( this.state.flaggedTags[this.state.tag.baseOffset] && !this.state.tag.value )\n                                delete this.state.flaggedTags[this.state.tag.baseOffset];\n                        }\n                        catch(err){}\n\n                        // scenario: (do not show suggestions of another matched tag, if more than one detected)\n                        // (2 tags exist)                          \" a@a.com and @\"\n                        // (second tag is removed by backspace)    \" a@a.com and \"\n                        if( matchFlaggedTag || matchedPatternCount < this.state.mixMode.matchedPatternCount )\n                            showSuggestions = false\n                    }\n                    // no (potential) tag found\n                    else{\n                        this.state.flaggedTags = {}\n                    }\n\n                    this.state.mixMode.matchedPatternCount = matchedPatternCount\n                }\n            }\n\n\n            // wait until the \"this.value\" has been updated (see \"onKeydown\" method for \"mix-mode\")\n            // the dropdown must be shown only after this event has been triggered, so an implementer could\n            // dynamically change the whitelist.\n            setTimeout(()=>{\n                this.update({withoutChangeEvent:true})\n                this.trigger('input', extend({}, this.state.tag, {textContent:this.DOM.input.textContent}))\n\n                if( this.state.tag )\n                    this.dropdown[showSuggestions ? \"show\" : \"hide\"](this.state.tag.value);\n            }, 10)\n        },\n\n        onInputIE(e){\n            var _this = this;\n            // for the \"e.target.textContent\" to be changed, the browser requires a small delay\n            setTimeout(function(){\n                _this.events.callbacks.onInput.call(_this, e)\n            })\n        },\n\n        observeOriginalInputValue(){\n            // if, for some reason, the Tagified element is no longer in the DOM,\n            // call the \"destroy\" method to kill all references to timeouts/intervals\n            if( !this.DOM.originalInput.parentNode ) this.destroy()\n\n            // if original input value changed for some reason (for exmaple a form reset)\n            if( this.DOM.originalInput.value != this.DOM.originalInput.tagifyValue )\n                this.loadOriginalValues()\n        },\n\n        onClickAnywhere(e){\n            if (e.target != this.DOM.scope && !this.DOM.scope.contains(e.target)) {\n                this.toggleFocusClass(false)\n                this.state.hasFocus = false\n\n                let closestTagifyDropdownElem = e.target.closest(this.settings.classNames.dropdownSelector);\n\n                // do not hide the dropdown if a click was initiated within it and that dropdown belongs to this Tagify instance\n                if( closestTagifyDropdownElem?.__tagify != this )\n                    this.dropdown.hide()\n            }\n        },\n\n        onClickScope(e){\n            var _s = this.settings,\n                tagElm = e.target.closest('.' + _s.classNames.tag),\n                isScope = e.target === this.DOM.scope,\n                timeDiffFocus = +new Date() - this.state.hasFocus;\n\n            if( e.target.classList.contains(_s.classNames.tagX) ){\n                this.removeTags( e.target.parentNode )\n                return\n            }\n\n            else if( tagElm && !this.state.editing ){\n                this.trigger(\"click\", { tag:tagElm, index:this.getNodeIndex(tagElm), data:getSetTagData(tagElm), event:e })\n\n                if( _s.editTags === 1 || _s.editTags.clicks === 1 || _s.mode == 'select' )\n                    this.events.callbacks.onDoubleClickScope.call(this, e)\n\n                return\n            }\n\n            // when clicking on the input itself\n            else if( e.target == this.DOM.input ){\n                if( _s.mode == 'mix' ){\n                    // firefox won't show caret if last element is a tag (and not a textNode),\n                    // so an empty textnode should be added\n                    this.fixFirefoxLastTagNoCaret()\n                }\n\n                if( timeDiffFocus > 500 || !_s.focusable ){\n                    if( this.state.dropdown.visible )\n                        this.dropdown.hide()\n                    else if( _s.dropdown.enabled === 0 && _s.mode != 'mix' )\n                        this.dropdown.show(this.value.length ? '' : undefined)\n                    return\n                }\n            }\n\n            if( _s.mode == 'select' && _s.dropdown.enabled === 0 && !this.state.dropdown.visible) {\n                this.events.callbacks.onDoubleClickScope.call(this, {...e, target: this.getTagElms()[0]})\n\n                !_s.userInput && this.dropdown.show()\n            }\n        },\n\n        // special proccess is needed for pasted content in order to \"clean\" it\n        onPaste(e){\n            e.preventDefault()\n\n            var tagsElems,\n                _s = this.settings;\n\n            if( !_s.userInput ){\n                return false;\n            }\n\n            var clipboardData, pastedText;\n\n            if( _s.readonly ) return\n\n            // Get pasted data via clipboard API\n            clipboardData = e.clipboardData || window.clipboardData\n            pastedText = clipboardData.getData('Text')\n\n            _s.hooks.beforePaste(e, {tagify:this, pastedText, clipboardData})\n                .then(result => {\n                    if( result === undefined )\n                        result = pastedText;\n\n            if( result ){\n                if( this.settings.mode == 'mix' ){\n                    // Auto-convert pasted pattern-prefixed text to tags if pasteAsTags is enabled\n                    if( this.settings.pasteAsTags ){\n                        const interpolatedText = this.convertPastedTextToMixTags(result)\n                        const fragment = this.parseMixTags(interpolatedText, { skipDOM: true })\n                        const tagsData = fragment.__tagifyTagsData || []\n\n                        // Inject the fragment (contains text nodes + tag elements)\n                        this.injectAtCaret(fragment, window.getSelection().getRangeAt(0))\n\n                        // Update internal state with new tags\n                        // Note: duplicates are already filtered out by parseMixTags based on settings\n                        tagsData.forEach(tagData => this.value.push(tagData))\n\n                        // Get the newly added tag elements and set their data\n                        const addedTags = this.getTagElms().slice(-tagsData.length)\n                        addedTags.forEach((elm, idx) => getSetTagData(elm, tagsData[idx]))\n\n                        this.update()\n                        fixCaretBetweenTags(addedTags)\n                    }\n                    else {\n                        this.injectAtCaret(result, window.getSelection().getRangeAt(0))\n                    }\n\n                    this.events.callbacks.onMixTagsInput.call(this, e);\n                }\n\n                else {\n                    this.injectAtCaret(result, window.getSelection().getRangeAt(0))\n\n                    if( this.settings.pasteAsTags ){\n                        tagsElems = this.addTags(this.state.inputText + result, true)\n                    }\n                    else {\n                        this.state.inputText = result\n                        this.dropdown.show(result)\n                    }\n                }\n            }\n\n                    this.trigger('paste', {event: e, pastedText, clipboardData, tagsElems})\n                })\n                .catch(err => err)\n        },\n\n        onDrop(e){\n            e.preventDefault()\n        },\n\n        onEditTagInput( editableElm, e ){\n            var tagElm = editableElm.closest('.' + this.settings.classNames.tag),\n                tagElmIdx = this.getNodeIndex(tagElm),\n                tagData = getSetTagData(tagElm),\n                textValue = this.input.normalize.call(this, editableElm),\n                dataForChangedProp = {[this.settings.tagTextProp]: textValue, __tagId: tagData.__tagId}, // \"__tagId\" is needed so validation will skip current tag when checking for dups\n                isValid = this.validateTag(dataForChangedProp), // the value could have been invalid in the first-place so make sure to re-validate it (via \"addEmptyTag\" method)\n                hasChanged = this.editTagChangeDetected(extend(tagData, dataForChangedProp));\n\n            // if the value is same as before-editing and the tag was valid before as well, ignore the  current \"isValid\" result, which is false-positive\n            if( !hasChanged && editableElm.originalIsValid === true )\n                isValid = true\n\n            tagElm.classList.toggle(this.settings.classNames.tagInvalid, isValid !== true)\n            tagData.__isValid = isValid\n\n            tagElm.title = isValid === true\n                ? tagData.title || tagData.value\n                : isValid // change the tag's title to indicate why is the tag invalid (if it's so)\n\n            // show dropdown if typed text is equal or more than the \"enabled\" dropdown setting\n            if( textValue.length >= this.settings.dropdown.enabled ){\n                // this check is needed apparently because doing browser \"undo\" will fire\n                //  \"onEditTagInput\" but \"this.state.editing\" will be \"false\"\n                if( this.state.editing )\n                    this.state.editing.value = textValue\n                this.dropdown.show(textValue)\n            }\n\n            this.trigger(\"edit:input\", {\n                tag  : tagElm,\n                index: tagElmIdx,\n                data : extend({}, this.value[tagElmIdx], {newValue:textValue}),\n                event: e\n            })\n        },\n\n        onEditTagPaste( tagElm, e ){\n            // Get pasted data via clipboard API\n            var clipboardData = e.clipboardData || window.clipboardData,\n                pastedText = clipboardData.getData('Text');\n\n            e.preventDefault()\n\n            var newNode = injectAtCaret(pastedText)\n            this.setRangeAtStartEnd(false, newNode)\n        },\n\n        onEditTagClick( tagElm, e) {\n            this.events.callbacks.onClickScope.call(this, e)\n        },\n\n        onEditTagFocus( tagElm ){\n            this.state.editing = {\n                scope: tagElm,\n                input: tagElm.querySelector(\"[contenteditable]\")\n            }\n        },\n\n        onEditTagBlur( editableElm, e ){\n            // if \"relatedTarget\" is the tag then do not continue as this should not be considered a \"blur\" event\n            var isRelatedTargetNodeTag = isNodeTag.call(this, e.relatedTarget)\n\n            // in \"select-mode\" when editing the tag's template to include more nodes other than the editable \"span\",\n            // clicking those elements should not be considered a blur event\n            if( this.settings.mode == 'select' && isRelatedTargetNodeTag && e.relatedTarget.contains(e.target) ) {\n                this.dropdown.hide()\n                return\n            }\n\n            // if \"ESC\" key was pressed then the \"editing\" state should be `false` and if so, logic should not continue\n            // because \"ESC\" reverts the edited tag back to how it was (replace the node) before editing\n            if( !this.state.editing )\n                return;\n\n            if( !this.state.hasFocus )\n                this.toggleFocusClass()\n\n            if(!this.DOM.scope.contains(document.activeElement)) {\n                this.trigger(\"blur\", {})\n            }\n\n            // one scenario is when selecting a suggestion from the dropdown, when editing, and by selecting it\n            // the \"onEditTagDone\" is called directly, already replacing the tag, so the argument \"editableElm\"\n            // node isn't in the DOM anynmore because it has been replaced.\n            if( !this.DOM.scope.contains(editableElm) ) return;\n\n            var _s           = this.settings,\n                tagElm       = editableElm.closest('.' + _s.classNames.tag),\n                tagData      = getSetTagData(tagElm),\n                textValue    = this.input.normalize.call(this, editableElm),\n                dataForChangedProp = {[_s.tagTextProp]: textValue, __tagId: tagData.__tagId}, // \"__tagId\" is needed so validation will skip current tag when checking for dups\n                originalData = tagData.__originalData, // pre-edit data\n                hasChanged   = this.editTagChangeDetected(extend(tagData, dataForChangedProp)),\n                isValid      = this.validateTag(dataForChangedProp), // \"__tagId\" is needed so validation will skip current tag when checking for dups\n                hasMaxTags,\n                newTagData;\n\n            if( !textValue ){\n                this.onEditTagDone(tagElm)\n                return\n            }\n\n            // if nothing changed revert back to how it was before editing\n            if( !hasChanged ){\n                this.onEditTagDone(tagElm, originalData)\n                return\n            }\n\n            // need to know this because if \"keepInvalidTags\" setting is \"true\" and an invalid tag is edited as a valid one,\n            // but the maximum number of tags have alreay been reached, so it should not allow saving the new valid value.\n            // only if the tag was already valid before editing, ignore this check (see a few lines below)\n            hasMaxTags = this.hasMaxTags()\n\n            newTagData = extend(\n                {},\n                originalData,\n                {\n                    [_s.tagTextProp]: this.trim(textValue),\n                    __isValid: isValid\n                }\n            )\n\n            // pass through optional transformer defined in settings\n            _s.transformTag.call(this, newTagData, originalData)\n\n            // MUST re-validate after tag transformation\n            // only validate the \"tagTextProp\" because is the only thing that metters for validating an edited tag.\n            // -- Scenarios: --\n            // 1. max 3 tags allowd. there are 4 tags, one has invalid input and is edited to a valid one, and now should be marked as \"not allowed\" because limit of tags has reached\n            // 2. max 3 tags allowed. there are 3 tags, one is edited, and so max-tags vaildation should be OK\n            isValid = (!hasMaxTags || originalData.__isValid === true) && this.validateTag(newTagData)\n\n            if( isValid !== true ){\n                this.trigger(\"invalid\", { data:newTagData, tag:tagElm, message:isValid })\n\n                // do nothing if invalid, stay in edit-mode until corrected or reverted by presssing esc\n                if( _s.editTags.keepInvalid ) return\n\n                if( _s.keepInvalidTags )\n                    newTagData.__isValid = isValid\n                else\n                    // revert back if not specified to keep\n                    newTagData = originalData\n            }\n\n            else if( _s.keepInvalidTags ){\n                // cleaup any previous leftovers if the tag was invalid\n                delete newTagData.title\n                delete newTagData[\"aria-invalid\"]\n                delete newTagData.class\n            }\n\n            // tagElm.classList.toggle(_s.classNames.tagInvalid, true)\n\n            this.onEditTagDone(tagElm, newTagData)\n        },\n\n        onEditTagkeydown(e, tagElm){\n            // ignore keys during IME composition\n            if( this.state.composing )\n                return\n\n            this.trigger(\"edit:keydown\", {event:e})\n\n            switch( e.key ){\n                case 'Esc' :\n                case 'Escape' : {\n                    this.state.editing = false\n                    var hasValueToRevertTo = !!tagElm.__tagifyTagData.__originalData.value\n\n                    if( hasValueToRevertTo )\n                        // revert the tag to how it was before editing\n                        // replace current tag with original one (pre-edited one)\n                        tagElm.parentNode.replaceChild(tagElm.__tagifyTagData.__originalHTML, tagElm)\n                    else\n                        tagElm.remove()\n\n                    break\n                }\n                case 'Enter' :\n                case 'Tab' : {\n                    e.preventDefault()\n\n                    var EDITED_TAG_BLUR_DELAY = 0;\n\n                    // a setTimeout is used so when editing (in \"select\" mode) while the dropdown is shown and a suggestion is highlighted\n                    // and ENTER key is pressed down - the `dropdown.hide` method won't be invoked immediately and unbind the dropdown's\n                    // KEYDOWN \"ENTER\" before it has time to call the handler and select the suggestion.\n                    setTimeout(() => e.target.blur(), EDITED_TAG_BLUR_DELAY)\n                }\n            }\n        },\n\n        onDoubleClickScope(e){\n            var tagElm = e.target.closest('.' + this.settings.classNames.tag);\n\n            if( !tagElm ) return\n\n            var tagData = getSetTagData(tagElm),\n                _s = this.settings,\n                isEditingTag,\n                isReadyOnlyTag;\n\n            if( tagData?.editable === false ) return\n\n            isEditingTag = tagElm.classList.contains(this.settings.classNames.tagEditing)\n            isReadyOnlyTag = tagElm.hasAttribute('readonly')\n\n            if( !_s.readonly && !isEditingTag && !isReadyOnlyTag && this.settings.editTags && _s.userInput ) {\n                this.events.callbacks.onEditTagFocus.call(this, tagElm)\n                this.editTag(tagElm)\n            }\n\n            this.toggleFocusClass(true)\n\n            if( _s.mode != 'select' )\n                this.trigger('dblclick', { tag:tagElm, index:this.getNodeIndex(tagElm), data:getSetTagData(tagElm) })\n        },\n\n        /**\n         *\n         * @param {Object} m an object representing the observed DOM changes\n         */\n        onInputDOMChange(m){\n            // get the last child BEFORE processing mutations\n            var lastInputChild = this.DOM.input.lastChild;\n\n            // iterate all DOM mutation\n            m.forEach(record => {\n                // only the ADDED nodes\n                record.addedNodes.forEach(addedNode => {\n                    // fix chrome's placing '<div><br></div>' everytime ENTER key is pressed, and replace with just `<br'\n                    if( addedNode.outerHTML == '<div><br></div>' ){\n                        addedNode.replaceWith(document.createElement('br'))\n                    }\n\n                    // if the added element is a div containing a tag within it (chrome does this when pressing ENTER before a tag)\n                    else if( addedNode.nodeType == 1 && addedNode.querySelector(this.settings.classNames.tagSelector) ){\n                        let newlineText = document.createTextNode('')\n\n                        if( addedNode.childNodes[0].nodeType == 3 && addedNode.previousSibling.nodeName != 'BR' )\n                            newlineText  = document.createTextNode('\\n')\n\n                        // unwrap the useless div\n                        // chrome adds a BR at the end which should be removed\n                        addedNode.replaceWith(...[newlineText, ...[...addedNode.childNodes].slice(0,-1)])\n                        placeCaretAfterNode(newlineText)\n                    }\n\n                    // if this is a tag\n                    else if( isNodeTag.call(this, addedNode) ){\n                        if( addedNode.previousSibling?.nodeType == 3 && !addedNode.previousSibling.textContent )\n                            addedNode.previousSibling.remove()\n\n                        // and it is the first node in a new line\n                        if( addedNode.previousSibling && addedNode.previousSibling.nodeName == 'BR' ){\n                            // allows placing the caret just before the tag, when the tag is the first node in that line\n                            addedNode.previousSibling.replaceWith('\\n' + ZERO_WIDTH_CHAR)\n\n                            let nextNode = addedNode.nextSibling, anythingAfterNode = '';\n\n                            while (nextNode) {\n                                anythingAfterNode += nextNode.textContent\n                                nextNode = nextNode.nextSibling;\n                            }\n\n                            // when hitting ENTER for new line just before an existing tag, but skip below logic when a tag has been addded\n                            anythingAfterNode.trim() && placeCaretAfterNode(addedNode.previousSibling)\n                        }\n\n                        // if previous sibling does not exists (meanning the addedNode is the first node in this.DOM.input)\n                        // or, if the previous sibling is also a tag, add a zero-space character before (to allow showing the caret in Chrome)\n                        else if( !addedNode.previousSibling || getSetTagData(addedNode.previousSibling) ){\n                            addedNode.before(ZERO_WIDTH_CHAR)\n                        }\n                    }\n                })\n\n                record.removedNodes.forEach(removedNode => {\n                    // when trying to delete a tag which is in a new line and there's nothing else there (caret is after the tag)\n                    if( removedNode && removedNode.nodeName == 'BR' && isNodeTag.call(this, lastInputChild)){\n                        this.removeTags(lastInputChild)\n                        this.fixFirefoxLastTagNoCaret()\n                    }\n                })\n            })\n\n            // get the last child only after the above DOM modifications\n            // check these scenarios:\n            // 1. after a single line, press ENTER once - should add only 1 BR\n            // 2. presss ENTER right before a tag\n            // 3. press enter within a text node before a tag\n\n\n            if( lastInputChild && lastInputChild.nodeValue == '' )\n                lastInputChild.remove()\n\n            // make sure the last element is always a BR\n            if( !lastInputChild || lastInputChild.nodeName != 'BR' ){\n                this.DOM.input.appendChild(document.createElement('br'))\n            }\n        },\n    }\n}\n\n", "import { sameStr, removeCollectionProp, omit, isObject, parseHTML, removeTextChildNodes, escapeHTML, extend, concatWithoutDups, getUID, isNodeTag, injectAtCaret, placeCaretAfterNode, getSetTagData, fixCaretBetweenTags, logger } from './parts/helpers'\nimport DEFAULTS from './parts/defaults'\nimport _dropdown, { initDropdown } from './parts/dropdown'\nimport { getPersistedData, setPersistedData, clearPersistedData } from './parts/persist'\nimport TEXTS from './parts/texts'\nimport templates from './parts/templates'\nimport EventDispatcher from './parts/EventDispatcher'\nimport events, { triggerChangeEvent } from './parts/events'\nimport { UPDATE_DELAY } from './parts/constants'\n\n/**\n * @constructor\n * @param {Object} input    DOM element\n * @param {Object} settings settings object\n */\nfunction Tagify( input, settings ){\n    if( !input ){\n        logger.warn('input element not found', input)\n        // return an empty mock of all methods, so the code using tagify will not break\n        // because it might be calling methods even though the input element does not exist\n        const mockInstance = new Proxy(this, { get(){ return () => mockInstance } })\n        return mockInstance\n    }\n\n    if( input.__tagify ){\n        logger.warn('input element is already Tagified - Same instance is returned.', input)\n        return input.__tagify\n    }\n\n    extend(this, EventDispatcher(this))\n    this.isFirefox = (/firefox|fxios/i).test(navigator.userAgent) && !(/seamonkey/i).test(navigator.userAgent)\n    this.isIE = window.document.documentMode; // https://developer.mozilla.org/en-US/docs/Web/API/Document/compatMode#Browser_compatibility\n\n    settings = settings || {};\n    this.getPersistedData = getPersistedData(settings.id)\n    this.setPersistedData = setPersistedData(settings.id)\n    this.clearPersistedData = clearPersistedData(settings.id)\n    this.applySettings(input, settings)\n\n    this.state = {\n        inputText: '',\n        editing : false,\n        composing: false,\n        actions : {},   // UI actions for state-locking\n        mixMode : {},\n        dropdown: {},\n        flaggedTags: {} // in mix-mode, when a string is detetced as potential tag, and the user has chocen to close the suggestions dropdown, keep the record of the tasg here\n    }\n\n    this.value = [] // tags' data\n\n    // events' callbacks references will be stores here, so events could be unbinded\n    this.listeners = {}\n\n    this.DOM = {} // Store all relevant DOM elements in an Object\n\n    this.build(input)\n    initDropdown.call(this)\n\n    this.getCSSVars()\n    this.loadOriginalValues()\n\n    this.events.customBinding.call(this)\n    this.events.binding.call(this)\n    input.autofocus && this.DOM.input.focus()\n    input.__tagify = this\n}\n\nTagify.prototype = {\n    _dropdown,\n    placeCaretAfterNode,\n    getSetTagData,\n    helpers: {sameStr, removeCollectionProp, omit, isObject, parseHTML, escapeHTML, extend, concatWithoutDups, getUID, isNodeTag},\n\n    customEventsList : ['change', 'add', 'remove', 'invalid', 'input', 'paste', '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'],\n    dataProps: ['__isValid', '__removed', '__originalData', '__originalHTML', '__tagId'], // internal-uasge props\n\n    trim(text){\n        return this.settings.trim && text && typeof text == \"string\" ? text.trim() : text\n    },\n\n    // expose this handy utility function\n    parseHTML,\n\n    templates,\n\n    parseTemplate(template, data){\n        template = this.settings.templates[template] || template;\n        return parseHTML( template.apply(this, data) )\n    },\n\n    set whitelist( arr ){\n        const isArray = arr && Array.isArray(arr)\n        this.settings.whitelist = isArray ? arr : []\n        this.setPersistedData(isArray ? arr : [], 'whitelist')\n    },\n\n    get whitelist(){\n        return this.settings.whitelist\n    },\n\n    set userInput( state ){\n        this.settings.userInput = !!state\n        this.setContentEditable(!!state)\n    },\n\n    get userInput(){\n        return this.settings.userInput\n    },\n\n    generateClassSelectors(classNames){\n        for( let name in classNames ) {\n            let currentName = name;\n            Object.defineProperty(classNames, currentName + \"Selector\" , {\n                get(){ return \".\" + this[currentName].split(\" \")[0] }\n            })\n        }\n    },\n\n    applySettings( input, settings ){\n        DEFAULTS.templates = this.templates\n\n        var mixModeDefaults = {\n            pasteAsTags: false,\n            dropdown: {\n                position: \"text\"\n            }\n        }\n\n        var mergedDefaults = extend({}, DEFAULTS, (settings.mode == 'mix' ? mixModeDefaults : {}));\n        var _s = this.settings = extend({}, mergedDefaults, settings)\n\n        _s.disabled = input.hasAttribute('disabled')\n        _s.readonly = _s.readonly || input.hasAttribute('readonly')\n        _s.placeholder = escapeHTML(input.getAttribute('placeholder') || _s.placeholder || \"\")\n        _s.required = input.hasAttribute('required')\n\n        this.generateClassSelectors(_s.classNames)\n\n        if( this.isIE )\n            _s.autoComplete = false; // IE goes crazy if this isn't false\n\n        [\"whitelist\", \"blacklist\"].forEach(name => {\n            var attrVal = input.getAttribute('data-' + name)\n            if( attrVal ){\n                attrVal = attrVal.split(_s.delimiters)\n                if( attrVal instanceof Array )\n                    _s[name] = attrVal\n            }\n        })\n\n        // backward-compatibility for old version of \"autoComplete\" setting:\n        if( \"autoComplete\" in settings && !isObject(settings.autoComplete) ){\n            _s.autoComplete = DEFAULTS.autoComplete\n            _s.autoComplete.enabled = settings.autoComplete\n        }\n\n        if( _s.mode == 'mix' ){\n            _s.pattern = _s.pattern || /@/;\n            _s.autoComplete.rightKey = true\n            _s.delimiters = settings.delimiters || null // default dlimiters in mix-mode must be NULL\n\n            // needed for \"filterListItems\". This assumes the user might have forgotten to manually\n            // define the same term in \"dropdown.searchKeys\" as defined in \"tagTextProp\" setting, so\n            // by automatically adding it, tagify is \"helping\" out, guessing the intesntions of the developer.\n            if( _s.tagTextProp && !_s.dropdown.searchKeys.includes(_s.tagTextProp) )\n                _s.dropdown.searchKeys.push(_s.tagTextProp)\n        }\n\n        if( input.pattern )\n            try { _s.pattern = new RegExp(input.pattern)  }\n            catch(e){}\n\n        // Convert the \"delimiters\" setting into a REGEX object\n        if( _s.delimiters ){\n            _s._delimiters = _s.delimiters;\n            try { _s.delimiters = new RegExp(this.settings.delimiters, \"g\") }\n            catch(e){}\n        }\n\n        if( _s.disabled || _s.readonly )\n            _s.userInput = false;\n\n        this.TEXTS = {...TEXTS, ...(_s.texts || {})}\n\n        // it makes sense to enable \"includeSelectedTags\" in \"select-mode\"\n        if( _s.mode == 'select' ){\n            _s.dropdown.includeSelectedTags = true\n        }\n\n        // make sure the dropdown will be shown on \"focus\" and not only after typing something (in \"select\" mode)\n        if( (_s.mode == 'select' && !settings.dropdown?.enabled) || !_s.userInput ){\n            _s.dropdown.enabled = 0\n        }\n\n        // additional override\n        if( _s.disabled ) {\n            _s.dropdown.enabled = false;\n        }\n\n        _s.dropdown.appendTarget = settings.dropdown?.appendTarget || document.body;\n\n        if ( _s.dropdown.includeSelectedTags === undefined )\n            _s.dropdown.includeSelectedTags = _s.duplicates;\n\n        // get & merge persisted data with current data\n        let persistedWhitelist = this.getPersistedData('whitelist');\n\n        if( Array.isArray(persistedWhitelist))\n            this.whitelist = Array.isArray(_s.whitelist)\n                ? concatWithoutDups(_s.whitelist, persistedWhitelist)\n                : persistedWhitelist;\n    },\n\n    /**\n     * Returns a string of HTML element attributes\n     * @param {Object} data [Tag data]\n     */\n    getAttributes( data ){\n        var attrs = this.getCustomAttributes(data), s = '', k;\n\n        for( k in attrs )\n            s += \" \" + k + (data[k] !== undefined ? `=\"${attrs[k]}\"` : \"\");\n\n        return s;\n    },\n\n    /**\n     * Returns an object of attributes to be used for the templates\n     */\n    getCustomAttributes( data ){\n        // only items which are objects have properties which can be used as attributes\n        if( !isObject(data) )\n            return '';\n\n        var output = {}, propName;\n\n        for( propName in data ){\n            if( propName.slice(0,2) != '__' && propName != 'class' && data.hasOwnProperty(propName) && data[propName] !== undefined )\n                output[propName] = escapeHTML(data[propName])\n        }\n        return output\n    },\n\n    setStateSelection(){\n        var selection = window.getSelection()\n\n        // save last selection place to be able to inject anything from outside to that specific place\n        var sel = {\n            anchorOffset: selection.anchorOffset,\n            anchorNode  : selection.anchorNode,\n            range       : selection.getRangeAt && selection.rangeCount && selection.getRangeAt(0)\n        }\n\n        this.state.selection = sel\n        return sel\n    },\n\n    /**\n     * Get specific CSS variables which are relevant to this script and parse them as needed.\n     * The result is saved on the instance in \"this.CSSVars\"\n     */\n    getCSSVars(){\n        var compStyle = getComputedStyle(this.DOM.scope, null)\n\n        const getProp = name => compStyle.getPropertyValue('--'+name)\n\n        function seprateUnitFromValue(a){\n            if( !a ) return {}\n            a = a.trim().split(' ')[0]\n            var unit  = a.split(/\\d+/g).filter(n=>n).pop().trim(),\n                value = +a.split(unit).filter(n=>n)[0].trim()\n            return {value, unit}\n        }\n\n        this.CSSVars = {\n            tagHideTransition: (({value, unit}) => unit=='s' ? value * 1000 : value)(seprateUnitFromValue(getProp('tag-hide-transition')))\n        }\n    },\n\n    /**\n     * builds the HTML of this component\n     * @param  {Object} input [DOM element which would be \"transformed\" into \"Tags\"]\n     */\n    build( input ){\n        var DOM  = this.DOM,\n            labelWrapper = input.closest('label');\n\n        if( this.settings.mixMode.integrated ){\n            DOM.originalInput = null;\n            DOM.scope = input;\n            DOM.input = input;\n        }\n\n        else {\n            DOM.originalInput = input\n            DOM.originalInput_tabIndex = input.tabIndex\n            DOM.scope = this.parseTemplate('wrapper', [input, this.settings])\n            DOM.input = DOM.scope.querySelector(this.settings.classNames.inputSelector)\n            input.parentNode.insertBefore(DOM.scope, input)\n            input.tabIndex = -1; // do not allow focus or typing directly, once tagified\n        }\n\n        // fixes tagify nested inside a <label> tag from getting focus when clicked on\n        if( labelWrapper )\n            labelWrapper.setAttribute('for', '')\n    },\n\n    /**\n     * revert any changes made by this component\n     */\n    destroy(){\n        this.events.unbindGlobal.call(this)\n        this.DOM.scope.parentNode?.removeChild(this.DOM.scope)\n        this.DOM.originalInput.tabIndex = this.DOM.originalInput_tabIndex\n        delete this.DOM.originalInput.__tagify\n        this.dropdown.hide(true)\n        this.removeAllCustomListeners()\n        clearTimeout(this.dropdownHide__bindEventsTimeout)\n        clearInterval(this.listeners?.main?.originalInputValueObserverInterval)\n    },\n\n    /**\n     * if the original input has any values, add them as tags\n     */\n    loadOriginalValues( value ){\n        var lastChild,\n            _s = this.settings\n\n        // temporarily block firing the \"change\" event on the original input until\n        // this method finish removing current value and adding a new one\n        this.state.blockChangeEvent = true\n\n        if( value === undefined ){\n            const persistedOriginalValue = this.getPersistedData('value')\n\n            // if the field already has a field, trust its the desired\n            // one to be rendered and do not use the persisted one\n            if( persistedOriginalValue && !this.DOM.originalInput.value )\n                value = persistedOriginalValue\n            else\n                value = _s.mixMode.integrated ? this.DOM.input.textContent : this.DOM.originalInput.value\n        }\n\n        this.removeAllTags()\n\n        if( value ){\n            if( _s.mode == 'mix' ){\n                this.parseMixTags(value)\n\n                lastChild = this.DOM.input.lastChild\n\n                // fixes a Chrome bug, when the last node in `mix-mode` is a tag, the caret appears at the far-top-top, outside the field\n                if( !lastChild || lastChild.tagName != 'BR' )\n                    this.DOM.input.insertAdjacentHTML('beforeend', '<br>')\n            }\n\n            else{\n                try{\n                    if( JSON.parse(value) instanceof Array )\n                        value = JSON.parse(value)\n                }\n                catch(err){}\n                this.addTags(value, true).forEach(tag => tag && tag.classList.add(_s.classNames.tagNoAnimation))\n            }\n        }\n\n        else\n            this.postUpdate()\n\n        this.state.lastOriginalValueReported = _s.mixMode.integrated ? '' : this.DOM.originalInput.value\n    },\n\n    cloneEvent(e){\n        var clonedEvent = {}\n        for( var v in e )\n            if( v != 'path' )\n                clonedEvent[v] = e[v]\n        return clonedEvent\n    },\n\n    /**\n     * Toogle global loading state on/off\n     * Useful when fetching async whitelist while user is typing\n     * @param {Boolean} isLoading\n     */\n    loading( isLoading ){\n        this.state.isLoading = isLoading\n        // IE11 doesn't support toggle with second parameter\n        this.DOM.scope.classList[isLoading ? \"add\" : \"remove\"](this.settings.classNames.scopeLoading)\n        return this\n    },\n\n    /**\n     * Toogle a tag loading state on/off\n     * @param {Boolean} isLoading\n     */\n    tagLoading( tagElm, isLoading ){\n        if( tagElm )\n            // IE11 doesn't support toggle with second parameter\n            tagElm.classList[isLoading ? \"add\" : \"remove\"](this.settings.classNames.tagLoading)\n        return this\n    },\n\n    /**\n     * Toggles class on the main tagify container (\"scope\")\n     * @param {String} className\n     * @param {Boolean} force\n     */\n    toggleClass( className, force ){\n        if( typeof className == 'string' )\n            this.DOM.scope.classList.toggle(className, force)\n    },\n\n    toggleScopeValidation( validation ){\n        var isValid = validation === true || validation === undefined; // initially it is undefined\n\n        if( !this.settings.required && validation && validation === this.TEXTS.empty)\n            isValid = true\n\n        this.toggleClass(this.settings.classNames.tagInvalid, !isValid)\n        this.DOM.scope.title = isValid ? '' : validation\n    },\n\n    toggleFocusClass( force ){\n        this.toggleClass(this.settings.classNames.focus, !!force)\n    },\n\n    /**\n     * Sets the templates placeholder after initialization\n     * @param {String} str\n     */\n    setPlaceholder(str) {\n        ['data', 'aria'].forEach(p => this.DOM.input.setAttribute(`${p}-placeholder`, str))\n    },\n\n    triggerChangeEvent,\n\n    events,\n\n    fixFirefoxLastTagNoCaret(){\n        return // seems to be fixed in newer version of FF, so retiring below code (for now)\n        // var inputElm = this.DOM.input\n\n        // if( this.isFirefox && inputElm.childNodes.length && inputElm.lastChild.nodeType == 1 ){\n        //     inputElm.appendChild(document.createTextNode(\"\\u200b\"))\n        //     this.setRangeAtStartEnd(true, inputElm)\n        //     return true\n        // }\n    },\n\n    /** https://stackoverflow.com/a/59156872/104380\n     * @param {Boolean} start indicating where to place it (start or end of the node)\n     * @param {Object}  node  DOM node to place the caret at\n     */\n    setRangeAtStartEnd( start, node ){\n        if( !node ) return;\n\n        start = typeof start == 'number' ? start : !!start\n        node = node.lastChild || node;\n        var sel = document.getSelection()\n\n        // do not force caret placement if the current selection (focus) is on another element (not this tagify instance)\n        if( sel.focusNode instanceof Element && !this.DOM.input.contains(sel.focusNode) ) {\n            return true\n        }\n\n        try{\n            if( sel.rangeCount >= 1 ){\n                ['Start', 'End'].forEach(pos =>\n                    sel.getRangeAt(0)[\"set\" + pos](node, start ? start : node.length)\n                )\n            }\n        } catch(err){\n            console.warn(err)\n        }\n    },\n\n    insertAfterTag( tagElm, newNode ){\n        newNode = newNode || this.settings.mixMode.insertAfterTag;\n\n        if( !tagElm || !tagElm.parentNode || !newNode ) return\n\n        newNode = typeof newNode == 'string'\n            ? document.createTextNode(newNode)\n            : newNode\n\n        tagElm.parentNode.insertBefore(newNode, tagElm.nextSibling)\n        return newNode\n    },\n\n    // compares all \"__originalData\" property values with the current \"tagData\" properties\n    // and returns \"true\" if something changed.\n    editTagChangeDetected(tagData) {\n        var originalData = tagData.__originalData;\n\n        for( var prop in originalData )\n            if( !this.dataProps.includes(prop) && tagData[prop] != originalData[prop] )\n                return true\n\n        return false; // not changed\n    },\n\n    // returns the node which has the actual tag's content\n    getTagTextNode(tagElm){\n        return tagElm.querySelector(this.settings.classNames.tagTextSelector)\n    },\n\n    // sets the text of a tag\n    setTagTextNode(tagElm, HTML){\n        this.getTagTextNode(tagElm).innerHTML = escapeHTML(HTML)\n    },\n\n    /**\n     * Enters a tag into \"edit\" mode\n     * @param {Node} tagElm the tag element to edit. if nothing specified, use last last\n     */\n    editTag( tagElm, opts ){\n        tagElm = tagElm || this.getLastTag()\n        opts = opts || {}\n\n        var _s = this.settings,\n            editableElm = this.getTagTextNode(tagElm),\n            tagIdx = this.getNodeIndex(tagElm),\n            tagData = getSetTagData(tagElm),\n            _CB = this.events.callbacks,\n            isValid = true,\n            isSelectMode = _s.mode == 'select'\n\n        // select mode is a bit different as clicking the tagify's content once will get into edit-mode if a value\n        // is already selected, and there cannot be a dropdown already open at this point.\n        !isSelectMode && this.dropdown.hide()\n\n        if( !editableElm ){\n            logger.warn('Cannot find element in Tag template: .', _s.classNames.tagTextSelector);\n            return;\n        }\n\n        if( tagData instanceof Object && \"editable\" in tagData && !tagData.editable )\n            return\n\n        // cache the original data, on the DOM node, before any modification ocurs, for possible revert\n        tagData = getSetTagData(tagElm, {\n            __originalData: extend({}, tagData),\n            __originalHTML: tagElm.cloneNode(true)\n        })\n        // re-set the tagify custom-prop on the clones element (because cloning removed it)\n        getSetTagData(tagData.__originalHTML, tagData.__originalData)\n\n        editableElm.setAttribute('contenteditable', true)\n        tagElm.classList.add( _s.classNames.tagEditing )\n\n        // because \"editTag\" method can be called manually, make sure that \"state.editing\" is set correctly\n        this.events.callbacks.onEditTagFocus.call(this, tagElm)\n\n        editableElm.addEventListener('click'            , _CB.onEditTagClick.bind(this, tagElm))\n        editableElm.addEventListener('blur'             , _CB.onEditTagBlur.bind(this, this.getTagTextNode(tagElm)))\n        editableElm.addEventListener('input'            , _CB.onEditTagInput.bind(this, editableElm))\n        editableElm.addEventListener('paste'            , _CB.onEditTagPaste.bind(this, editableElm))\n        editableElm.addEventListener('keydown'          , e => _CB.onEditTagkeydown.call(this, e, tagElm))\n        editableElm.addEventListener('compositionstart' , _CB.onCompositionStart.bind(this))\n        editableElm.addEventListener('compositionend'   , _CB.onCompositionEnd.bind(this))\n\n        if( !opts.skipValidation )\n            isValid = this.editTagToggleValidity(tagElm)\n\n        editableElm.originalIsValid = isValid\n\n        this.trigger(\"edit:start\", { tag:tagElm, index:tagIdx, data:tagData, isValid })\n\n        editableElm.focus()\n        !isSelectMode && this.setRangeAtStartEnd(false, editableElm) // place the caret at the END of the editable tag text\n\n        _s.dropdown.enabled === 0 && !isSelectMode && this.dropdown.show()\n        this.state.hasFocus = true\n\n        return this\n    },\n\n    /**\n     * If a tag is invalid, for any reason, set its class to \"not allowed\" (see defaults file)\n     * @param {Node} tagElm required\n     * @param {Object} tagData optional\n     * @returns true if valid, a string (reason) if not\n     */\n    editTagToggleValidity( tagElm, tagData ){\n        var tagData = tagData || getSetTagData(tagElm),\n            isValid;\n\n        if( !tagData ){\n            logger.warn(\"tag has no data: \", tagElm, tagData)\n            return;\n        }\n\n        isValid = !(\"__isValid\" in tagData) || tagData.__isValid === true\n\n        if( !isValid ){\n            this.removeTagsFromValue(tagElm)\n        }\n\n        this.update()\n\n        //this.validateTag(tagData);\n\n        tagElm.classList.toggle(this.settings.classNames.tagNotAllowed, !isValid)\n        tagData.__isValid = isValid;\n\n        return tagData.__isValid\n    },\n\n    onEditTagDone(tagElm, tagData){\n        tagElm = tagElm || this.state.editing.scope\n        tagData = tagData || {}\n\n        var _s = this.settings,\n            eventData = {\n                tag         : tagElm,\n                index       : this.getNodeIndex(tagElm),\n                previousData: getSetTagData(tagElm),\n                data        : tagData\n            }\n\n        this.trigger(\"edit:beforeUpdate\", eventData, {cloneData:false})\n\n        this.state.editing = false;\n\n        delete tagData.__originalData\n        delete tagData.__originalHTML\n\n        // some scenarrios like in the one in the demos page with textarea that has 2 whitelists, one of the whitelist might be\n        // an array of objects with a property defined the same as the `tagTextProp` setting (if used) but another whitelist\n        // might be simpler - just an array of primitives.\n        function veryfyTagTextProp() {\n            var tagTextProp = tagData[_s.tagTextProp];\n\n            // 'tagTextProp' might also be the number 0 so checking for `undefined` here:\n            if( tagTextProp !== undefined ) {\n                tagTextProp += ''; // cast possible number into a string\n                return !!tagTextProp.trim?.()\n            }\n\n            if( !(_s.tagTextProp in tagData) )\n                return !!tagData.value\n        }\n\n        if( tagElm && tagElm.parentNode ){\n            if( veryfyTagTextProp() ){\n                tagElm = this.replaceTag(tagElm, tagData)\n                this.editTagToggleValidity(tagElm, tagData)\n\n                if( _s.a11y.focusableTags )\n                    tagElm.focus()\n                else if( _s.mode != 'select' )\n                    // place caret after edited tag\n                    placeCaretAfterNode(tagElm)\n            }\n\n            else\n                this.removeTags(tagElm)\n        }\n\n        this.trigger(\"edit:updated\", eventData)\n        _s.dropdown.closeOnSelect && this.dropdown.hide()\n\n        // check if any of the current tags which might have been marked as \"duplicate\" should be now un-marked\n        if( this.settings.keepInvalidTags )\n            this.reCheckInvalidTags()\n    },\n\n    /**\n     * Replaces an exisitng tag with a new one. Used for updating a tag's data\n     * @param {Object} tagElm  [DOM node to replace]\n     * @param {Object} tagData [data to create new tag from]\n     */\n    replaceTag(tagElm, tagData){\n        if( !tagData || tagData.value === '' || tagData.value === undefined )\n            tagData = tagElm.__tagifyTagData\n\n        // if tag is invalid, make the according changes in the newly created element\n        if( tagData.__isValid && tagData.__isValid != true )\n            extend( tagData, this.getInvalidTagAttrs(tagData, tagData.__isValid) )\n\n        var newTagElm = this.createTagElem(tagData)\n\n        // update DOM\n        tagElm.parentNode.replaceChild(newTagElm, tagElm)\n        this.updateValueByDOMTags()\n        return newTagElm\n    },\n\n    /**\n     * update \"value\" (Array of Objects) by traversing all valid tags\n     */\n    updateValueByDOMTags(){\n        this.value.length = 0;\n\n        var clsNames = this.settings.classNames,\n            tagNotAllowedClassName = clsNames.tagNotAllowed.split(' ')[0],\n            skipNodesWithClassNames = [tagNotAllowedClassName, clsNames.tagHide];\n\n        [].forEach.call(this.getTagElms(), node => {\n            if ([...node.classList].some(cls => skipNodesWithClassNames.includes(cls))) return;\n            this.value.push( getSetTagData(node) )\n        })\n\n        this.update()\n        this.dropdown.refilter()\n    },\n\n    /**\n     * injects nodes/text at caret position, which is saved on the \"state\" when \"blur\" event gets triggered\n     * @param {Node} injectedNode [the node to inject at the caret position]\n     * @param {Object} selection [optional range Object. must have \"anchorNode\" & \"anchorOffset\"]\n     */\n    injectAtCaret( injectedNode, range ){\n        range = range || this.state.selection?.range\n\n        if( typeof injectedNode === 'string' )\n            injectedNode = document.createTextNode(injectedNode)\n\n        if( !injectedNode )\n            return this\n\n        const DOCUMENT_FRAGMENT_NODE = 11\n        const insertedNodes = injectedNode.nodeType === DOCUMENT_FRAGMENT_NODE\n            ? Array.prototype.slice.call(injectedNode.childNodes)\n            : [injectedNode]\n\n        if( !insertedNodes.length )\n            return this\n\n        if( !range ){\n            this.appendMixTags(injectedNode)\n            return this\n        }\n\n        const isValidInjectionPoint = this.DOM.scope.contains(range?.startContainer)\n\n        if( !isValidInjectionPoint )\n            return this\n\n        injectAtCaret(injectedNode, range)\n\n        const caretTarget = insertedNodes[insertedNodes.length - 1] || injectedNode\n\n        if( caretTarget?.parentNode )\n            placeCaretAfterNode(caretTarget)\n\n        this.setStateSelection()\n\n        this.updateValueByDOMTags() // updates internal \"this.value\"\n        this.update() // updates original input/textarea\n\n        return this\n    },\n\n    /**\n     * input bridge for accessing & setting\n     * @type {Object}\n     */\n    input : {\n        set( value = '', updateDOM = true ){\n            var _s = this.settings,\n                hideDropdown = _s.dropdown.closeOnSelect\n\n            this.state.inputText = value\n\n            if( updateDOM ) {\n                this.DOM.input.innerHTML = escapeHTML(\"\"+value);\n                value && this.toggleClass(_s.classNames.empty, !this.DOM.input.innerHTML) // remove the \"empty\" (is exists) class only if a value was added\n            }\n\n            if( !value && hideDropdown )\n                this.dropdown.hide.bind(this)\n\n            this.input.autocomplete.suggest.call(this);\n            this.input.validate.call(this);\n\n        },\n\n        raw(){\n            return this.DOM.input.textContent\n        },\n\n        /**\n         * Marks the tagify's input as \"invalid\" if the value did not pass \"validateTag()\"\n         */\n        validate(){\n            var isValid = !this.state.inputText || this.validateTag({value:this.state.inputText}) === true;\n\n            this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid, !isValid)\n\n            return isValid\n        },\n\n        // remove any child DOM elements that aren't of type TEXT (like <br>)\n        normalize( node, options ){\n            var clone = node || this.DOM.input, //.cloneNode(true),\n                v = [];\n\n            // when a text was pasted in FF, the \"this.DOM.input\" element will have <br> but no newline symbols (\\n), and this will\n            // result in tags not being properly created if one wishes to create a separate tag per newline.\n            clone.childNodes.forEach(n => n.nodeType==3 && v.push(n.nodeValue))\n            v = v.join(\"\\n\")\n\n            try{\n                // \"delimiters\" might be of a non-regex value, where this will fail (\"Tags With Properties\" example in demo page):\n                v = v.replace(/(?:\\r\\n|\\r|\\n)/g, this.settings.delimiters.source.charAt(0))\n            }\n            catch(err){}\n\n            v = v.replace(/\\s/g, ' ')  // replace NBSPs with spaces characters\n\n            return options?.trim ? this.trim(v) : v\n        },\n\n        /**\n         * suggest the rest of the input's value (via CSS \"::after\" using \"content:attr(...)\")\n         * @param  {String} s [description]\n         */\n        autocomplete : {\n            suggest( data ){\n                if( !this.settings.autoComplete.enabled ) return;\n\n                data = data || {value:''}\n                if (typeof data !== 'object') data = { value: data };\n\n                var suggestedText = this.dropdown.getMappedValue(data);\n\n                if( typeof suggestedText === 'number' ) return\n\n                var inputText = this.state.inputText.toLowerCase(),\n                    suggestionStart = suggestedText.substr(0, this.state.inputText.length).toLowerCase(),\n                    suggestionTrimmed = suggestedText.substring(this.state.inputText.length);\n\n                if( !suggestedText || !this.state.inputText || suggestionStart != inputText ){\n                    this.DOM.input.removeAttribute(\"data-suggest\");\n                    delete this.state.inputSuggestion\n                }\n                else{\n                    this.DOM.input.setAttribute(\"data-suggest\", suggestionTrimmed);\n                    this.state.inputSuggestion = data\n                }\n            },\n\n            /**\n             * sets the suggested text as the input's value & cleanup the suggestion autocomplete.\n             * @param {String} s [text]\n             */\n            set( s ){\n                var dataSuggest = this.DOM.input.getAttribute('data-suggest'),\n                    suggestion = s || (dataSuggest ? this.state.inputText + dataSuggest : null);\n\n                if( suggestion ){\n                    if( this.settings.mode == 'mix' ){\n                        this.replaceTextWithNode( document.createTextNode(this.state.tag.prefix + suggestion) )\n                    }\n                    else{\n                        this.input.set.call(this, suggestion);\n                        this.setRangeAtStartEnd(false, this.DOM.input)\n                    }\n\n                    this.input.autocomplete.suggest.call(this);\n                    this.dropdown.hide();\n\n                    return true;\n                }\n\n                return false;\n            }\n        }\n    },\n\n    /**\n     * returns the index of the the tagData within the \"this.value\" array collection.\n     * since values should be unique, it is suffice to only search by \"value\" property\n     * @param {Object} tagData\n     */\n    getTagIdx( tagData ){\n        return this.value.findIndex(item => item.__tagId == (tagData||{}).__tagId )\n    },\n\n    getNodeIndex( node ){\n        var index = 0;\n\n        if( node )\n            while( (node = node.previousElementSibling) )\n                index++;\n\n        return index;\n    },\n\n    getTagElms( ...classess ){\n        var classname = '.' + [...this.settings.classNames.tag.split(' '), ...classess].join('.')\n        return [].slice.call(this.DOM.scope.querySelectorAll(classname)) // convert nodeList to Array - https://stackoverflow.com/a/3199627/104380\n    },\n\n    /**\n     * gets the last non-readonly, not-in-the-proccess-of-removal tag\n     */\n    getLastTag(){\n        var _sc = this.settings.classNames,\n            tagNodes = this.DOM.scope.querySelectorAll(`${_sc.tagSelector}:not(.${_sc.tagHide}):not([readonly])`);\n        return tagNodes[tagNodes.length - 1];\n    },\n\n    /**\n     * Searches if any tag with a certain value already exis\n     * @param  {String/Object} value [text value / tag data object]\n     * @param  {Boolean} caseSensitive\n     * @return {Number}\n     */\n    isTagDuplicate( value, caseSensitive, tagId ){\n        var dupsCount = 0;\n\n        for( let item of this.value ) {\n            let isSameStr = sameStr( this.trim(\"\"+value), item.value, caseSensitive );\n            if( isSameStr && tagId != item.__tagId )\n                dupsCount++;\n        }\n\n        return dupsCount\n    },\n\n    getTagIndexByValue( value ){\n        var indices = [],\n            isCaseSensitive = this.settings.dropdown.caseSensitive;\n\n        this.getTagElms().forEach((tagElm, i) => {\n            if(  tagElm.__tagifyTagData && sameStr( this.trim(tagElm.__tagifyTagData.value), value, isCaseSensitive )  )\n                indices.push(i)\n        })\n\n        return indices;\n    },\n\n    getTagElmByValue( value ){\n        var tagIdx = this.getTagIndexByValue(value)[0]\n        return this.getTagElms()[tagIdx]\n    },\n\n    /**\n     * Temporarily marks a tag element (by value or Node argument)\n     * @param  {Object} tagElm [a specific \"tag\" element to compare to the other tag elements siblings]\n     */\n    flashTag( tagElm ){\n        if( tagElm ){\n            tagElm.classList.add(this.settings.classNames.tagFlash)\n            setTimeout(() => { tagElm.classList.remove(this.settings.classNames.tagFlash) }, 100)\n        }\n    },\n\n    /**\n     * checks if text is in the blacklist\n     */\n    isTagBlacklisted( v ){\n        v = this.trim(v.toLowerCase());\n        return this.settings.blacklist.filter(x => (\"\"+x).toLowerCase() == v).length;\n    },\n\n    /**\n     * checks if text is in the whitelist\n     */\n    isTagWhitelisted( v ){\n        return !!this.getWhitelistItem(v)\n        /*\n        return this.settings.whitelist.some(item =>\n            typeof v == 'string'\n                ? sameStr(this.trim(v), (item.value || item))\n                : sameStr(JSON.stringify(item), JSON.stringify(v))\n        )\n        */\n    },\n\n    /**\n     * Returns the first whitelist item matched, by value (if match found)\n     * @param {String} value [text to match by]\n     */\n    getWhitelistItem( value, prop, whitelist ){\n        var result,\n            prop = prop || 'value',\n            _s = this.settings,\n            whitelist = whitelist || _s.whitelist;\n\n        whitelist.some(_wi => {\n            // whitelist item value. Can be either a String, Number or an Object (with a `value` property)\n            var _wiv = typeof _wi == 'object' ? (_wi[prop] || _wi.value) : _wi,\n                isSameStr = sameStr(_wiv, value, _s.dropdown.caseSensitive, _s.trim)\n\n            if( isSameStr ){\n                result = typeof _wi == 'object' ? _wi : {value:_wi}\n                return true\n            }\n        })\n\n        // first iterate the whitelist, try find matches by \"value\" and if that fails\n        // and a \"tagTextProp\" is set to be other than \"value\", try that also\n        if( !result && prop == 'value' && _s.tagTextProp != 'value' ){\n            // if found, adds the first which matches\n            result = this.getWhitelistItem(value, _s.tagTextProp, whitelist)\n        }\n\n        return result\n    },\n\n    /**\n     * validate a tag object BEFORE the actual tag will be created & appeneded\n     * @param  {String} s\n     * @param  {String} uid      [unique ID, to not inclue own tag when cheking for duplicates]\n     * @return {Boolean/String}  [\"true\" if validation has passed, String for a fail]\n     */\n    validateTag( tagData ){\n        var _s = this.settings,\n            // when validating a tag in edit-mode, need to take \"tagTextProp\" into consideration\n            prop = \"value\" in tagData ? \"value\" : _s.tagTextProp,\n            v = this.trim(tagData[prop] + \"\");\n\n        // check for definitive empty value\n        if( !(tagData[prop]+\"\").trim() )\n            return this.TEXTS.empty;\n\n        // check if pattern should be used and if so, use it to test the value\n        if( _s.mode != 'mix' && _s.pattern && _s.pattern instanceof RegExp && !(_s.pattern.test(v)) )\n            return this.TEXTS.pattern;\n\n        // check for duplicates\n        if( !_s.duplicates && this.isTagDuplicate(v, _s.dropdown.caseSensitive, tagData.__tagId) )\n            return this.TEXTS.duplicate;\n\n        if( this.isTagBlacklisted(v) || (_s.enforceWhitelist && !this.isTagWhitelisted(v)) )\n            return this.TEXTS.notAllowed;\n\n        if( _s.validate )\n            return _s.validate(tagData)\n\n        return true\n    },\n\n    getInvalidTagAttrs(tagData, validation){\n        return {\n            \"aria-invalid\" : true,\n            \"class\": `${tagData.class || ''} ${this.settings.classNames.tagNotAllowed}`.trim(),\n            \"title\": validation\n        }\n    },\n\n    hasMaxTags(){\n        return this.value.length >= this.settings.maxTags\n            ? this.TEXTS.exceed\n            : false\n    },\n\n    setReadonly( toggle, attrribute ){\n        var _s = this.settings\n\n        this.DOM.scope.contains(document.activeElement) && document.activeElement.blur() // exit possible edit-mode\n        _s[attrribute || 'readonly'] = toggle\n        this.DOM.scope[(toggle ? 'set' : 'remove') + 'Attribute'](attrribute || 'readonly', true)\n\n        this.settings.userInput = true;\n        this.setContentEditable(!toggle)\n\n        if( !toggle ) {\n            // first unbind all events\n            this.events.binding.call(this, true)\n            // re-bind all events\n            this.events.binding.call(this)\n        }\n    },\n\n    setContentEditable(state){\n        this.DOM.scope.querySelectorAll(\"[data-can-editable]\").forEach(elm => {\n            elm.contentEditable = state\n            elm.tabIndex = !!state ? 0 : -1;\n        })\n    },\n\n    setDisabled( isDisabled ){\n        this.setReadonly(isDisabled, 'disabled')\n    },\n\n    /**\n     * pre-proccess the tagsItems, which can be a complex tagsItems like an Array of Objects or a string comprised of multiple words\n     * so each item should be iterated on and a tag created for.\n     * @return {Array} [Array of Objects]\n     */\n    normalizeTags( tagsItems ){\n        var {whitelist, delimiters, mode, tagTextProp} = this.settings,\n            whitelistMatches = [],\n            whitelistWithProps = whitelist ? whitelist[0] instanceof Object : false,\n            // checks if this is a \"collection\", meanning an Array of Objects\n            isArray = Array.isArray(tagsItems),\n            isCollection = isArray && tagsItems[0].value,\n            mapStringToCollection = s => (s+\"\").split(delimiters).reduce((acc, v) => {\n                const trimmed = this.trim(v)\n                trimmed && acc.push({ [tagTextProp]:trimmed, value:trimmed })\n                return acc\n            }, [])\n\n        if( typeof tagsItems == 'number' )\n            tagsItems = tagsItems.toString()\n\n        // if the argument is a \"simple\" String, ex: \"aaa, bbb, ccc\"\n        if( typeof tagsItems == 'string' ){\n            if( !tagsItems.trim() ) return [];\n\n            // go over each tag and add it (if there were multiple ones)\n            tagsItems = mapStringToCollection(tagsItems)\n        }\n\n        // if is an Array of Strings, convert to an Array of Objects\n        else if( isArray ){\n            // flatten the 2D array\n            tagsItems = tagsItems.reduce((acc, item) => {\n                if( isObject(item) ) {\n                    var itemCopy = extend({}, item)\n\n                    // if 'tagTextProp' property does not exist in the item, use `value` instead\n                    if(!(tagTextProp in itemCopy))\n                        tagTextProp = 'value'\n\n                    itemCopy[tagTextProp] = this.trim(itemCopy[tagTextProp])\n\n                    // discard empty tags but allow `0` as a valid value\n                    if( itemCopy[tagTextProp] || itemCopy[tagTextProp] === 0 )\n                        acc.push(itemCopy) // mapStringToCollection(item.value).map(newItem => ({...item,...newItem}))\n                }\n\n                else if(item != null && item !== '' && item !== undefined) {\n                    acc.push( ...mapStringToCollection(item) )\n                }\n\n                return acc\n            }, [])\n        }\n\n        // search if the tag exists in the whitelist as an Object (has props),\n        // to be able to use its properties.\n        // skip matching collections with whitelist items as they are considered \"whole\"\n        if( whitelistWithProps && !isCollection ){\n            tagsItems.forEach(item => {\n                var whitelistMatchesValues = whitelistMatches.map(a=>a.value)\n\n                // if suggestions are shown, they are already filtered, so it's easier to use them,\n                // because the whitelist might also include items which have already been added\n                var filteredList = this.dropdown.filterListItems.call(this, item[tagTextProp], { exact:true })\n\n                if( !this.settings.duplicates )\n                    // also filter out items which have already been matched in previous iterations\n                    filteredList = filteredList.filter(filteredItem => !whitelistMatchesValues.includes(filteredItem.value))\n\n                // get the best match out of list of possible matches.\n                // if there was a single item in the filtered list, use that one\n                var matchObj = filteredList.length > 1\n                    ? this.getWhitelistItem(item[tagTextProp], tagTextProp, filteredList)\n                    : filteredList[0]\n\n                if( matchObj && matchObj instanceof Object ){\n                    whitelistMatches.push( matchObj ) // set the Array (with the found Object) as the new value\n                }\n                else if( mode != 'mix' ){\n                    if( item.value == undefined )\n                        item.value = item[tagTextProp]\n                    whitelistMatches.push(item)\n                }\n            })\n\n            if( whitelistMatches.length )\n                tagsItems = whitelistMatches\n        }\n\n        return tagsItems;\n    },\n\n    /**\n     * Parse the initial value of a textarea (or input) element and generate mixed text w/ tags\n     * https://stackoverflow.com/a/57598892/104380\n     * @param {String} s\n     */\n    /**\n     * Parses interpolated text (e.g., \"text [[{\"value\":\"tag\"}]] more text\") into tags\n     * @param {String} s - Text with interpolated tags\n     * @param {Object} [options] - Optional settings\n     * @param {Boolean} [options.skipDOM=false] - If true, returns a DocumentFragment instead of updating DOM\n     * @returns {String|DocumentFragment} - HTML string (default) or DocumentFragment (if skipDOM=true)\n     */\n    parseMixTags( s, options ){\n        var {mixTagsInterpolator, duplicates, transformTag, enforceWhitelist, maxTags, tagTextProp} = this.settings,\n            skipDOM = options?.skipDOM,\n            fragment = skipDOM ? document.createDocumentFragment() : null,\n            tagsDataSet = [];\n\n        s = s.split(mixTagsInterpolator[0]).map((s1, i) => {\n            var s2 = s1.split(mixTagsInterpolator[1]),\n                preInterpolated = s2[0],\n                maxTagsReached = tagsDataSet.length == maxTags,\n                textProp,\n                tagData,\n                tagElm;\n\n            // For fragment mode: handle text before first tag\n            if( skipDOM && i == 0 && s1 ){\n                fragment.appendChild(document.createTextNode(s1))\n                return ''\n            }\n\n            try{\n                // skip numbers and go straight to the \"catch\" statement\n                if( preInterpolated == +preInterpolated )\n                    throw Error\n                tagData = JSON.parse(preInterpolated)\n            } catch(err){\n                tagData = this.normalizeTags(preInterpolated)[0] || {value:preInterpolated}\n            }\n\n            transformTag.call(this, tagData)\n\n            if( !maxTagsReached   &&\n                s2.length > 1   &&\n                (!enforceWhitelist || this.isTagWhitelisted(tagData.value))   &&\n                !(!duplicates && this.isTagDuplicate(tagData.value)) ){\n\n                // in case \"tagTextProp\" setting is set to other than \"value\" and this tag does not have this prop\n                textProp = tagData[tagTextProp] ? tagTextProp : 'value'\n                tagData[textProp] = this.trim(tagData[textProp])\n\n                tagElm = this.createTagElem(tagData)\n                tagsDataSet.push( tagData )\n                tagElm.classList.add(this.settings.classNames.tagNoAnimation)\n\n                if( skipDOM ){\n                    fragment.appendChild(tagElm)\n                    // Add text after tag\n                    if( s2[1] ){\n                        fragment.appendChild(document.createTextNode(s2[1]))\n                    }\n                    return ''\n                }\n                else {\n                    s2[0] = tagElm.outerHTML //+ \"&#8288;\"  // put a zero-space at the end so the caret won't jump back to the start (when the last input's child element is a tag)\n                    this.value.push(tagData)\n                }\n            }\n            else if(s1){\n                if( skipDOM ){\n                    // Invalid tag - add back the interpolator and content as text\n                    fragment.appendChild(document.createTextNode(mixTagsInterpolator[0] + s1))\n                    return ''\n                }\n                return i ? mixTagsInterpolator[0] + s1 : s1\n            }\n\n            return s2.join('')\n        }).join('')\n\n        // Fragment mode: return the fragment with tags data attached\n        if( skipDOM ){\n            fragment.__tagifyTagsData = tagsDataSet\n            return fragment\n        }\n\n        // DOM mode: update the input element\n        this.DOM.input.innerHTML = s\n        this.DOM.input.appendChild(document.createTextNode(''))\n        this.DOM.input.normalize()\n\n        var tagNodes = this.getTagElms()\n\n        tagNodes.forEach((elm, idx) => getSetTagData(elm,  tagsDataSet[idx]))\n        this.update({withoutChangeEvent:true})\n\n        fixCaretBetweenTags(tagNodes, this.state.hasFocus)\n        return s\n    },\n\n    /**\n     * Converts pasted text in mix-mode into tags by detecting pattern-prefixed text\n     * that matches items in the whitelist\n     * @param {String} text - The pasted text to process\n     * @returns {String} - Text with matched items wrapped in mixTagsInterpolator\n     */\n    convertPastedTextToMixTags( text ){\n        const { pattern, whitelist, mixTagsInterpolator, mixTagsAllowedAfter, tagTextProp } = this.settings\n\n        if( !pattern || !whitelist?.length )\n            return text\n\n        // Extract all possible prefix patterns (e.g., [@, #] from /@|#/)\n        const prefixPatterns = pattern.source ? pattern.source.split('|') : [pattern]\n\n        // Build a mapping of prefix -> whitelist items\n        const prefixWhitelistMap = {}\n\n        prefixPatterns.forEach(prefix => {\n            // Normalize prefix (remove escape chars if any)\n            const normalizedPrefix = prefix.replace(/\\\\/g, '')\n            prefixWhitelistMap[normalizedPrefix] = whitelist.map(item => {\n                // Get the text to match against - use tagTextProp for objects, or the string itself\n                let textValue\n                if( typeof item === 'string' ) {\n                    textValue = item\n                } else {\n                    // For objects, use tagTextProp (e.g., 'text' or 'value')\n                    textValue = item[tagTextProp] || item.value\n                }\n\n                // Convert to string (in case value is a number or other type)\n                textValue = String(textValue)\n\n                return {\n                    originalItem: item,\n                    value: textValue,\n                    searchValue: textValue.toLowerCase()\n                }\n            })\n            // Sort by length (longest first) for greedy matching\n            .sort((a, b) => b.value.length - a.value.length)\n        })\n\n        // Find all pattern prefix positions\n        const patternRegex = new RegExp(pattern.source, 'g')\n        const replacements = [] // Store replacements to apply in reverse order\n        let match\n\n        while ((match = patternRegex.exec(text)) !== null) {\n            const prefix = match[0]\n            const startIndex = match.index\n            const afterPrefixIndex = startIndex + prefix.length\n\n            // Get text after the prefix\n            const textAfterPrefix = text.slice(afterPrefixIndex)\n\n            // Try to match whitelist items (longest first)\n            const whitelistItems = prefixWhitelistMap[prefix]\n            if( !whitelistItems ) continue\n\n            let matchedItem = null\n            let matchedLength = 0\n\n            // Try each whitelist item starting with longest\n            for( const item of whitelistItems ){\n                const itemValue = item.value\n                const itemLength = itemValue.length\n\n                // Extract the same length from text after prefix (case-insensitive comparison)\n                const textSegment = textAfterPrefix.slice(0, itemLength)\n\n                if( textSegment.toLowerCase() === item.searchValue ){\n                    // Check if this match ends at a valid boundary or end of text\n                    const charAfterMatch = textAfterPrefix[itemLength]\n                    const isValidBoundary = !charAfterMatch || // end of string\n                                           mixTagsAllowedAfter.test(charAfterMatch) // or boundary char\n\n                    if( isValidBoundary ){\n                        matchedItem = item\n                        matchedLength = itemLength\n                        break // Found longest match\n                    }\n                }\n            }\n\n            if( matchedItem ){\n                // Build tag data: full whitelist object + prefix\n                const tagData = typeof matchedItem.originalItem === 'string'\n                    ? { value: matchedItem.value, prefix }\n                    : { ...matchedItem.originalItem, prefix }\n\n                // Validate the tag\n                const isValid = this.validateTag(tagData)\n\n                if( isValid === true ){\n                    // Wrap with interpolator\n                    const replacement = `${mixTagsInterpolator[0]}${JSON.stringify(tagData)}${mixTagsInterpolator[1]}`\n\n                    replacements.push({\n                        start: startIndex,\n                        end: afterPrefixIndex + matchedLength,\n                        replacement\n                    })\n\n                    // Skip ahead past this match to avoid re-processing\n                    patternRegex.lastIndex = afterPrefixIndex + matchedLength\n                }\n            }\n        }\n\n        // Apply replacements in reverse order to maintain indices\n        let result = text\n        replacements.reverse().forEach(({ start, end, replacement }) => {\n            result = result.slice(0, start) + replacement + result.slice(end)\n        })\n\n        return result\n    },\n\n    /**\n     * For mixed-mode: replaces a text starting with a prefix with a wrapper element (tag or something)\n     * First there *has* to be a \"this.state.tag\" which is a string that was just typed and is staring with a prefix\n     */\n    replaceTextWithNode( newWrapperNode, strToReplace ){\n        if( !this.state.tag && !strToReplace ) return;\n\n        strToReplace = strToReplace || this.state.tag.prefix + this.state.tag.value;\n        var idx, nodeToReplace,\n            selection = this.state.selection || window.getSelection(),\n            nodeAtCaret = selection.anchorNode,\n            firstSplitOffset = this.state.tag.delimiters ? this.state.tag.delimiters.length : 0;\n\n        // STEP 1: ex. replace #ba with the tag \"bart\" where \"|\" is where the caret is:\n        // CURRENT STATE: \"foo #ba #ba| #ba\"\n\n        // split the text node at the index of the caret\n        nodeAtCaret.splitText(selection.anchorOffset - firstSplitOffset)\n\n        // node 0: \"foo #ba #ba|\"\n        // node 1: \" #ba\"\n\n        // get index of LAST occurence of \"#ba\"\n        idx = nodeAtCaret.nodeValue.lastIndexOf(strToReplace)\n\n        if( idx == -1 ) return true;\n\n        nodeToReplace = nodeAtCaret.splitText(idx)\n\n        // node 0: \"foo #ba \"\n        // node 1: \"#ba\"    <- nodeToReplace\n\n        newWrapperNode && nodeAtCaret.parentNode.replaceChild(newWrapperNode, nodeToReplace)\n\n        // must NOT normalize contenteditable or it will cause unwanted issues:\n        // https://monosnap.com/file/ZDVmRvq5upYkidiFedvrwzSswegWk7\n        // nodeAtCaret.parentNode.normalize()\n\n        return true;\n    },\n\n    /**\n     * Validate a tag's data and create a new tag node\n     * @param {*} tagData\n     * @param {*} options\n     * @returns Object\n     */\n    prepareNewTagNode(tagData, options) {\n        options = options || {}\n\n        var tagElm,\n            _s = this.settings,\n            aggregatedInvalidInput = [],\n            tagElmParams = {},\n            originalData = Object.assign({}, tagData, {value:tagData.value+\"\"});\n\n        // shallow-clone tagData so later modifications will not apply to the source\n        tagData = Object.assign({}, originalData)\n        _s.transformTag.call(this, tagData)\n\n        tagData.__isValid = this.hasMaxTags() || this.validateTag(tagData)\n\n        if( tagData.__isValid !== true ){\n            if( options.skipInvalid )\n                return\n\n            // originalData is kept because it might be that this tag is invalid because it is a duplicate of another,\n            // and if that other tags is edited/deleted, this one should be re-validated and if is no more a duplicate - restored\n            extend(tagElmParams, this.getInvalidTagAttrs(tagData, tagData.__isValid), {__preInvalidData:originalData})\n\n            if( tagData.__isValid == this.TEXTS.duplicate )\n                // mark, for a brief moment, the tag (this this one) which THIS CURRENT tag is a duplcate of\n                this.flashTag( this.getTagElmByValue(tagData.value) )\n\n            if( !_s.createInvalidTags ){\n                aggregatedInvalidInput.push(tagData.value)\n                return\n            }\n        }\n\n        if( 'readonly' in tagData ){\n            if( tagData.readonly )\n                tagElmParams[\"aria-readonly\"] = true\n            // if \"readonly\" is \"false\", remove it from the tagData so it won't be added as an attribute in the template\n            else\n                delete tagData.readonly\n        }\n\n        // Create tag HTML element\n        tagElm = this.createTagElem(tagData, tagElmParams)\n\n        return {tagElm, tagData, aggregatedInvalidInput}\n    },\n\n    /**\n     * Logic to happen once a tag has just been injected into the DOM\n     * @param {Node} tagElm\n     * @param {Object} tagData\n     */\n    postProcessNewTagNode(tagElm, tagData) {\n        var _s = this.settings,\n            isValid = tagData.__isValid;\n\n        if( isValid && isValid === true ){\n            // update state\n            this.value.push(tagData)\n        }\n        else{\n            this.trigger('invalid', {data:tagData, index:this.value.length, tag:tagElm, message:isValid})\n            if( !_s.keepInvalidTags )\n                // remove invalid tags (if \"keepInvalidTags\" is set to \"false\")\n                setTimeout(() => this.removeTags(tagElm, true), 1000)\n        }\n\n        this.dropdown.position() // reposition the dropdown because the just-added tag might cause a new-line\n    },\n\n    /**\n     * For selecting a single option (not used for multiple tags, but for \"mode:select\" only)\n     * @param {Object} tagElm   Tag DOM node\n     * @param {Object} tagData  Tag data\n     */\n    selectTag( tagElm, tagData ){\n        var _s = this.settings\n\n        if( _s.enforceWhitelist && !this.isTagWhitelisted(tagData.value) )\n            return\n\n        // this.input.set.call(this, tagData[_s.tagTextProp] || tagData.value, true)\n\n        // place the caret at the end of the input, only if a dropdown option was selected (and not by manually typing another value and clicking \"TAB\")\n        if( this.state.actions.selectOption )\n            setTimeout(() => this.setRangeAtStartEnd(false, this.DOM.input))\n\n        var lastTagElm = this.getLastTag()\n\n        if( lastTagElm )\n            this.replaceTag(lastTagElm, tagData)\n        else\n            this.appendTag(tagElm)\n\n        // if( _s.enforceWhitelist )\n        //     this.setContentEditable(false);\n\n        this.value[0] = tagData\n        this.update()\n        this.trigger('add', { tag:tagElm, data:tagData })\n\n        return [tagElm]\n    },\n\n    /**\n     * add an empty \"tag\" element in an editable state\n     */\n    addEmptyTag( initialData ){\n        var tagData = extend({ value:\"\" }, initialData || {}),\n            tagElm = this.createTagElem(tagData)\n\n        getSetTagData(tagElm, tagData)\n\n        // add the tag to the component's DOM\n        this.appendTag(tagElm)\n        this.editTag(tagElm, {skipValidation:true})\n        this.toggleFocusClass(true)\n    },\n\n    /**\n     * add a \"tag\" element to the \"tags\" component\n     * @param {String/Array} tagsItems   [A string (single or multiple values with a delimiter), or an Array of Objects or just Array of Strings]\n     * @param {Boolean}      clearInput  [flag if the input's value should be cleared after adding tags]\n     * @param {Boolean}      skipInvalid [do not add, mark & remove invalid tags]\n     * @return {Array} Array of DOM elements (tags)\n     */\n    addTags( tagsItems, clearInput, skipInvalid ){\n        var tagElems = [],\n            _s = this.settings,\n            aggregatedInvalidInput = [],\n            frag = document.createDocumentFragment(),\n            addedTags = []; // all tags, also invalid. this is used for firing the `add` event\n\n        if( !tagsItems || tagsItems.length == 0 ){\n            return tagElems\n        }\n\n        // converts Array/String/Object to an Array of Objects\n        tagsItems = this.normalizeTags(tagsItems)\n\n        switch( _s.mode ){\n            case 'mix': return this.addMixTags(tagsItems)\n            case 'select': {\n                clearInput = false\n                this.removeAllTags()\n            }\n        }\n\n        this.DOM.input.removeAttribute('style')\n\n        tagsItems.forEach(tagData => {\n            const newTagNode = this.prepareNewTagNode(tagData, {skipInvalid: skipInvalid || _s.skipInvalid});\n\n            if( !newTagNode) return;\n\n            const tagElm = newTagNode.tagElm;\n\n            tagData = newTagNode.tagData\n            aggregatedInvalidInput = newTagNode.aggregatedInvalidInput\n\n            tagElems.push(tagElm)\n\n            // mode-select overrides\n            if( _s.mode == 'select' ){\n                return this.selectTag(tagElm, tagData)\n            }\n\n            // add the tag to the component's DOM\n            // this.appendTag(tagElm)\n            frag.appendChild(tagElm)\n            this.postProcessNewTagNode(tagElm, tagData)\n            addedTags.push({tagElm, tagData})\n        })\n\n        this.appendTag(frag)\n\n        addedTags.forEach(({tagElm, tagData}) =>\n            this.trigger('add', {tag:tagElm, index:this.getTagIdx(tagData), data:tagData})\n        )\n\n        this.update()\n\n\n        if( tagsItems.length && clearInput ){\n            this.input.set.call(this, _s.createInvalidTags ? '' : aggregatedInvalidInput.join(_s._delimiters))\n            this.setRangeAtStartEnd(false, this.DOM.input)\n        }\n\n        // hydrate the suggestions list\n        this.dropdown.refilter()\n        return tagElems\n    },\n\n    /**\n     * Adds a mix-content tag\n     * @param {String/Array} tagData    A string (single or multiple values with a delimiter), or an Array of Objects or just Array of Strings\n     */\n    addMixTags( tagsData ){\n        tagsData = this.normalizeTags(tagsData);\n\n        // flow for creating custom tags which aren't a part of the whitelist\n        if( tagsData[0].prefix || this.state.tag ){\n            return this.prefixedTextToTag(tagsData[0])\n        }\n\n        var frag = document.createDocumentFragment();\n        var addedTags = [];\n\n        tagsData.forEach(tagData => {\n            const newTagNode = this.prepareNewTagNode(tagData)\n            frag.appendChild(newTagNode.tagElm)\n            this.insertAfterTag(newTagNode.tagElm)\n            this.postProcessNewTagNode(newTagNode.tagElm, newTagNode.tagData)\n            addedTags.push({tagElm: newTagNode.tagElm, tagData: newTagNode.tagData})\n        })\n\n        this.appendMixTags(frag, addedTags)\n\n        return frag.children\n    },\n\n    appendMixTags( node, addedTags ) {\n        const DOCUMENT_FRAGMENT_NODE = 11\n        const savedRange = this.state.selection?.range\n        const hasSavedSelection = !!savedRange && this.DOM.scope.contains(savedRange.startContainer)\n        const insertedNodes = node\n            ? (node.nodeType === DOCUMENT_FRAGMENT_NODE ? Array.prototype.slice.call(node.childNodes) : [node])\n            : []\n\n        if( hasSavedSelection ){\n            this.injectAtCaret(node)\n        }\n        else{\n            this.DOM.input.focus()\n            const selection = this.setStateSelection()\n\n            if( selection?.range ){\n                selection.range.setStart(this.DOM.input, selection.range.endOffset)\n                selection.range.setEnd(this.DOM.input, selection.range.endOffset)\n            }\n\n            this.DOM.input.appendChild(node)\n\n            this.updateValueByDOMTags() // updates internal \"this.value\"\n            this.update() // updates original input/textarea\n\n            const caretTarget = insertedNodes[insertedNodes.length - 1]\n\n            if( caretTarget?.parentNode )\n                placeCaretAfterNode(caretTarget)\n\n            this.setStateSelection()\n        }\n\n        const tagsPayload = addedTags?.length\n            ? addedTags\n            : insertedNodes.filter(node => node.nodeType === 1)\n\n        if( tagsPayload?.length )\n            this.trigger('add', {tags: tagsPayload})\n    },\n\n    /**\n     * Adds a tag which was activly typed by the user\n     * @param {String/Array} tagData   [A string (single or multiple values with a delimiter), or an Array of Objects or just Array of Strings]\n     */\n    prefixedTextToTag( tagData ){\n        var _s = this.settings,\n            tagElm,\n            newTag,\n            createdFromDelimiters = this.state.tag?.delimiters;\n\n        tagData.prefix = tagData.prefix || this.state.tag ? this.state.tag.prefix : (_s.pattern.source||_s.pattern)[0];\n\n        newTag = this.prepareNewTagNode(tagData)\n        tagElm = newTag.tagElm\n\n        // tries to replace a taged textNode with a tagElm, and if not able,\n        // insert the new tag to the END if \"addTags\" was called from outside\n        if( !this.replaceTextWithNode(tagElm) ){\n            this.DOM.input.appendChild(tagElm)\n        }\n\n        setTimeout(()=> tagElm.classList.add(this.settings.classNames.tagNoAnimation), 300)\n\n        this.update()\n\n        if( !createdFromDelimiters ) {\n            var elm = this.insertAfterTag(tagElm) || tagElm;\n            // a timeout is needed when selecting a tag from the suggestions via mouse.\n            // Without it, it seems the caret is placed right after the tag and not after the\n            // node which was inserted after the tag (whitespace by default)\n            setTimeout(placeCaretAfterNode, 0, elm);\n        }\n\n        this.state.tag = null\n\n        this.postProcessNewTagNode(tagElm, newTag.tagData)\n\n        this.trigger('add', {tag: newTag, data:tagData})\n\n        return tagElm\n    },\n\n    /**\n     * appened (validated) tag to the component's DOM scope\n     */\n    appendTag(tagElm){\n        var DOM = this.DOM,\n            insertBeforeNode = DOM.input;\n\n        //if( insertBeforeNode === DOM.input )\n            DOM.scope.insertBefore(tagElm, insertBeforeNode)\n        //else\n        //    DOM.scope.appendChild(tagElm)\n    },\n\n    /**\n     * creates a DOM tag element and injects it into the component (this.DOM.scope)\n     * @param  {Object}  tagData [text value & properties for the created tag]\n     * @param  {Object}  extraData [properties which are for the HTML template only]\n     * @return {Object} [DOM element]\n     */\n    createTagElem( tagData, extraData ){\n        tagData.__tagId = getUID()\n\n        var tagElm,\n            templateData = extend({}, tagData, {\n                [this.settings.tagTextProp]: escapeHTML((tagData[this.settings.tagTextProp] || tagData.value) + \"\"),\n                title: escapeHTML((tagData.title || tagData.value) + \"\"),\n                value: escapeHTML(tagData.value + \"\"),\n                ...extraData\n            });\n\n        // if( this.settings.readonly )\n        //     tagData.readonly = true\n\n        tagElm = this.parseTemplate('tag', [templateData, this])\n\n        // crucial for proper caret placement when deleting content. if textNodes are allowed as children of a tag element,\n        // a browser bug casues the caret to be misplaced inside the tag element (especially affects \"readonly\" tags)\n        removeTextChildNodes(tagElm)\n        // while( tagElm.lastChild.nodeType == 3 )\n        //     tagElm.lastChild.parentNode.removeChild(tagElm.lastChild)\n\n        getSetTagData(tagElm, tagData)\n        return tagElm\n    },\n\n    /**\n     * re-check all invalid tags.\n     * called after a tag was edited or removed\n     */\n    reCheckInvalidTags(){\n        var _s = this.settings\n\n        this.getTagElms(_s.classNames.tagNotAllowed).forEach((tagElm, i) => {\n            var tagData = getSetTagData(tagElm),\n                hasMaxTags = this.hasMaxTags(),\n                tagValidation = this.validateTag(tagData),\n                isValid = tagValidation === true && !hasMaxTags;\n\n            if( _s.mode == 'select' )\n                this.toggleScopeValidation(tagValidation)\n\n            // if the tag has become valid\n            if( isValid ){\n                tagData = tagData.__preInvalidData\n                    ? tagData.__preInvalidData\n                    : { value:tagData.value }\n\n                return this.replaceTag(tagElm, tagData)\n            }\n\n            // if the tag is still invaild, set its title as such (reson of invalid might have changed)\n            tagElm.title = hasMaxTags || tagValidation\n        })\n    },\n\n    /**\n     * Removes a tag\n     * @param  {Array|Node|String}  tagElms         [DOM element(s) or a String value. if undefined or null, remove last added tag]\n     * @param  {Boolean}            silent          [A flag, which when turned on, does not remove any value and does not update the original input value but simply removes the tag from tagify]\n     * @param  {Number}             tranDuration    [Transition duration in MS]\n     * TODO: Allow multiple tags to be removed at-once\n     */\n    removeTags( tagElms, silent, tranDuration ){\n        var tagsToRemove,\n            _s = this.settings;\n\n        tagElms = tagElms && tagElms instanceof HTMLElement\n            ? [tagElms]\n            : tagElms instanceof Array\n                ? tagElms\n                : tagElms\n                    ? [tagElms]\n                    : [this.getLastTag()].filter(n => n)   // must filter because \"this.getLastTag()\" might be `undefined` if there are not tags\n\n        // normalize tagElms array values:\n        // 1. removing invalid items\n        // 2, if an item is String try to get the matching Tag HTML node\n        // 3. get the tag data\n        // 4. return a collection of Objects\n        tagsToRemove = tagElms.reduce((elms, tagElm) => {\n            if( tagElm && typeof tagElm == 'string')\n                tagElm = this.getTagElmByValue(tagElm)\n\n            var tagData = getSetTagData(tagElm);\n\n            if( tagElm && tagData && !tagData.readonly ) // make sure it's a tag and not some other node\n                // because the DOM node might be removed by async animation, the state will be updated while\n                // the node might still be in the DOM, so the \"update\" method should know which nodes to ignore\n                elms.push({\n                    node: tagElm,\n                    idx: this.getTagIdx(tagData), // this.getNodeIndex(tagElm); // this.getTagIndexByValue(tagElm.textContent)\n                    data: getSetTagData(tagElm, {'__removed':true})\n                })\n\n            return elms\n        }, [])\n\n        tranDuration = typeof tranDuration == \"number\" ? tranDuration : this.CSSVars.tagHideTransition\n\n        if( _s.mode == 'select' ){\n            tranDuration = 0;\n            this.input.set.call(this)\n        }\n\n        // if only a single tag is to be removed.\n        // skip \"select\" mode because invalid tags are actually set to `this.value`\n        if( tagsToRemove.length == 1 && _s.mode != 'select' ){\n            if( tagsToRemove[0].node.classList.contains(_s.classNames.tagNotAllowed) )\n                silent = true\n        }\n\n        if( !tagsToRemove.length )\n            return;\n\n        return _s.hooks.beforeRemoveTag(tagsToRemove, {tagify:this})\n            .then(() => {\n                function removeNode( tag ){\n                    if( !tag.node.parentNode ) return\n\n                    tag.node.parentNode.removeChild(tag.node)\n\n                    if( !silent ){\n                        // this.removeValueById(tagData.__uid)\n                        this.dropdown.refilter()\n                        this.dropdown.position()\n                        this.DOM.input.normalize() // best-practice when in mix-mode (safe to do always anyways)\n\n                        // check if any of the current tags which might have been marked as \"duplicate\" should be un-marked\n                        if( _s.keepInvalidTags )\n                            this.reCheckInvalidTags()\n\n                        // below code is unfinished. it should iterate all currently invalid edited tags, which their edits have not\n                        // changed the value yet, and should re-trigger the check, but since nothing has changed, it does not work...\n                        // this.getTagElms(_s.classNames.tagEditing).forEach( this.events.callbacks.onEditTagBlur.bind )\n\n                            this.trigger('remove', { tag:tag.node, index:tag.idx, data:tag.data })\n                    }\n                    else if( _s.keepInvalidTags )\n                            this.trigger('remove', { tag:tag.node, index:tag.idx })\n                }\n\n                function animation( tag ){\n                    tag.node.style.width = parseFloat(window.getComputedStyle(tag.node).width) + 'px'\n                    document.body.clientTop // force repaint for the width to take affect before the \"hide\" class below\n                    tag.node.classList.add(_s.classNames.tagHide)\n\n                    // manual timeout (hack, since transitionend cannot be used because of hover)\n                    setTimeout(removeNode.bind(this), tranDuration, tag)\n                }\n\n                // update state regardless of animation\n                if( !silent ){\n                    this.removeTagsFromValue(tagsToRemove.map(tag => tag.node))\n                    this.update() // update the original input with the current value\n\n                    if( _s.mode == 'select' && _s.userInput )\n                        this.setContentEditable(true);\n                }\n\n                // \"removeNode\" should be called AFTER \"removeTagsFromValue\" has been called,\n                // so the \"remove\" event is triggered after the tag is removed from the DOM\n                if( tranDuration && tranDuration > 10 && tagsToRemove.length == 1 )\n                    animation.call(this, tagsToRemove[0])\n                else\n                    tagsToRemove.forEach(removeNode.bind(this))\n            })\n            .catch(reason => {})\n    },\n\n    removeTagsFromDOM(){\n        this.getTagElms().forEach(node => node.remove())\n    },\n\n    /**\n     * @param {Array/Node} tags to be removed from the this.value array\n     */\n    removeTagsFromValue( tags ){\n        tags = Array.isArray(tags) ? tags : [tags];\n\n        tags.forEach(tag => {\n            var tagData = getSetTagData(tag),\n                tagIdx = this.getTagIdx(tagData)\n\n            //  delete tagData.__removed\n\n            if( tagIdx > -1 )\n                this.value.splice(tagIdx, 1)\n        })\n    },\n\n    removeAllTags( opts ){\n        opts = opts || {}\n        this.value = []\n\n        if( this.settings.mode == 'mix' )\n            this.DOM.input.innerHTML = ''\n        else\n            this.removeTagsFromDOM()\n\n        this.dropdown.refilter()\n        this.dropdown.position()\n\n        if( this.state.dropdown.visible )\n            setTimeout(() => {\n                this.DOM.input.focus()\n            })\n\n        if( this.settings.mode == 'select' ){\n            this.input.set.call(this)\n            this.settings.userInput && this.setContentEditable(true)\n        }\n\n        const updateCallback = this.state.blockChangeEvent ? undefined : () => {\n            !this.state.blockChangeEvent && this.trigger('remove', {})\n        }\n\n        // technically for now only \"withoutChangeEvent\" exists in the opts.\n        // if more properties will be added later, only pass what's needed to \"update\"\n        this.update(opts, updateCallback)\n\n    },\n\n    postUpdate(){\n        this.state.blockChangeEvent = false\n\n        var _s = this.settings,\n            classNames = _s.classNames,\n            hasValue = _s.mode == 'mix'\n                ? _s.mixMode.integrated\n                    ? this.DOM.input.textContent\n                    : this.DOM.originalInput.value.trim()\n                : this.value.length + this.input.raw.call(this).length;\n\n        this.toggleClass(classNames.hasMaxTags, this.value.length >= _s.maxTags)\n        this.toggleClass(classNames.hasNoTags, !this.value.length)\n        this.toggleClass(classNames.empty, !hasValue)\n\n        // specifically the \"select mode\" might have the \"invalid\" classname set when the field is changed, so it must be toggled on add/remove/edit\n        if( _s.mode == 'select' ){\n            this.toggleScopeValidation(this.value?.[0]?.__isValid)\n        }\n    },\n\n    setOriginalInputValue( v ){\n        var inputElm = this.DOM.originalInput;\n\n        if( !this.settings.mixMode.integrated ){\n            inputElm.value = v\n            inputElm.tagifyValue = inputElm.value // must set to \"inputElm.value\" and not again to \"inputValue\" because for some reason the browser changes the string afterwards a bit.\n        }\n    },\n\n    /**\n     * update the origianl (hidden) input field's value.\n     * uses a debounced timeout to prevent multiple rapid updates\n     * see - https://stackoverflow.com/q/50957841/104380\n     */\n    update( args, cb ){\n        clearTimeout(this.debouncedUpdateTimeout)\n        this.debouncedUpdateTimeout = setTimeout(reallyUpdate.bind(this), UPDATE_DELAY)\n        this.events.bindOriginaInputListener.call(this, UPDATE_DELAY)\n\n        var inputValue = this.getInputValue();\n        this.setOriginalInputValue(inputValue)\n\n        function reallyUpdate() {\n            this.setPersistedData(inputValue, 'value')\n\n            if( (!this.settings.onChangeAfterBlur || !(args||{}).withoutChangeEvent) && !this.state.blockChangeEvent )\n                this.triggerChangeEvent()\n\n            this.postUpdate()\n\n            cb?.()\n        }\n    },\n\n    getInputValue(){\n        var value = this.getCleanValue();\n\n        return this.settings.mode == 'mix'\n            ? this.getMixedTagsAsString(value)\n            : value.length\n                ? this.settings.originalInputValueFormat\n                    ? this.settings.originalInputValueFormat(value)\n                    : JSON.stringify(value)\n                : \"\"\n    },\n\n    /**\n     * removes properties from `this.value` which are only used internally\n     */\n    getCleanValue(v){\n        return removeCollectionProp(v || this.value, this.dataProps);\n    },\n\n    getMixedTagsAsString(){\n        var result = \"\",\n            that = this,\n            _s = this.settings,\n            originalInputValueFormat = _s.originalInputValueFormat || JSON.stringify,\n            _interpolator = _s.mixTagsInterpolator;\n\n        function iterateChildren(rootNode){\n            rootNode.childNodes.forEach((node) => {\n                if( node.nodeType == 1 ){\n                    const tagData = getSetTagData(node);\n\n                    if( node.tagName == 'BR'  ){\n                        result += \"\\r\\n\";\n                    }\n\n                    if( tagData && isNodeTag.call(that, node) ){\n                        if( tagData.__removed )\n                            return;\n                        else\n                            result += _interpolator[0] + originalInputValueFormat( omit(tagData, that.dataProps) ) + _interpolator[1]\n                    }\n                    else if( node.getAttribute('style') || ['B', 'I', 'U'].includes(node.tagName)  )\n                        result += node.textContent;\n\n                    else if( node.tagName == 'DIV' || node.tagName == 'P' ){\n                        result += \"\\r\\n\";\n                        //  if( !node.children.length && node.textContent )\n                        //  result += node.textContent;\n                        iterateChildren(node)\n                    }\n                }\n                else\n                    result += node.textContent;\n            })\n        }\n\n        iterateChildren(this.DOM.input)\n\n        return result;\n    }\n}\n\n// legacy support for changed methods names\nTagify.prototype.removeTag = Tagify.prototype.removeTags\n\nexport default Tagify\n", "import { extend, logger } from './helpers'\r\n\r\nexport default function EventDispatcher( instance ){\r\n    // Create a DOM EventTarget object\r\n    var target = document.createTextNode(''),\r\n        // keep track of all binded events & their callbacks to be able to completely remove all listeners of a speicific type\r\n        callbacksPerType = {}\r\n\r\n    function addRemove(op, events, cb){\r\n        if( cb )\r\n            events.split(/\\s+/g).forEach(ev => target[op + 'EventListener'].call(target, ev, cb))\r\n    }\r\n\r\n    // Pass EventTarget interface calls to DOM EventTarget object\r\n    return {\r\n        // unbinds all events\r\n        removeAllCustomListeners(){\r\n            Object.entries(callbacksPerType).forEach(([ev, cbArr]) => {\r\n                cbArr.forEach(cb => addRemove('remove', ev, cb))\r\n            })\r\n\r\n            callbacksPerType = {}\r\n        },\r\n\r\n        off(events, cb){\r\n            if( events ) {\r\n                if( cb )\r\n                    addRemove('remove', events, cb)\r\n                else\r\n                    // if `cb` argument was not specified then remove all listeners for the given event(s) types\r\n                    events.split(/\\s+/g).forEach(ev => {\r\n                        callbacksPerType[ev]?.forEach(cb => addRemove('remove', ev, cb))\r\n                        delete callbacksPerType[ev]\r\n                    })\r\n            }\r\n\r\n            return this\r\n        },\r\n\r\n        on(events, cb){\r\n            if(cb && typeof cb == 'function') {\r\n                //track events callbacks to be able to remove them altogehter\r\n                events.split(/\\s+/g).forEach(ev => {\r\n                    if (Array.isArray(callbacksPerType[ev]) )\r\n                        callbacksPerType[ev].push(cb)\r\n                    else\r\n                        callbacksPerType[ev] = [cb]\r\n                })\r\n\r\n                addRemove('add', events, cb)\r\n            }\r\n\r\n            return this\r\n        },\r\n\r\n        trigger(eventName, data, opts){\r\n            var e;\r\n\r\n            opts = opts || {\r\n                cloneData:true\r\n            }\r\n\r\n            if( !eventName ) return;\r\n\r\n            if( instance.settings.isJQueryPlugin ){\r\n                if( eventName == 'remove' ) eventName = 'removeTag' // issue #222\r\n                jQuery(instance.DOM.originalInput).triggerHandler(eventName, [data])\r\n            }\r\n            else{\r\n                try {\r\n                    var eventData = typeof data === 'object'\r\n                        ? data\r\n                        : {value:data};\r\n\r\n                    eventData = opts.cloneData ? extend({}, eventData) : eventData\r\n                    eventData.tagify = this\r\n\r\n                    if( data.event )\r\n                        eventData.event = this.cloneEvent(data.event)\r\n\r\n                    // TODO: move the below to the \"extend\" function\r\n                    if( data instanceof Object )\r\n                        for( var prop in data )\r\n                            if(data[prop] instanceof HTMLElement)\r\n                                eventData[prop] = data[prop]\r\n\r\n                    e = new CustomEvent(eventName, {\"detail\":eventData})\r\n                }\r\n                catch(err){ logger.warn(err) }\r\n\r\n                target.dispatchEvent(e);\r\n            }\r\n        }\r\n    }\r\n}\r\n", "import {Controller} from '@hotwired/stimulus'\nimport Tagify from '@yaireo/tagify'\n\nexport default class extends Controller {\n    static values = {\n        suggestions: Array,\n        userInput: {type: Boolean, default: true},\n        dropdownFooterText: {type: String, default: 'more items. Refine your search.'}\n    }\n\n    connect() {\n        let dropdownFooterText = this.dropdownFooterTextValue // Template options does not have access to 'this' object.\n\n        new Tagify(this.element, {\n            whitelist: this.suggestionsValue,\n            userInput: this.userInputValue,\n            dropdown: {\n                enabled: 0,\n                maxItems: 5\n            },\n            originalInputValueFormat: values => values.map(item => item.value).join(', '),\n            templates: {\n                dropdownFooter(suggestions) {\n                    let additionalSuggestions = suggestions.length - this.settings.dropdown.maxItems\n\n                    if (additionalSuggestions > 0) {\n                        return `<footer data-selector='tagify-suggestions-footer' class=\"${this.settings.classNames.dropdownFooter}\">${additionalSuggestions} ${dropdownFooterText}</footer>`\n                    } else {\n                        return ''\n                    }\n                }\n            }\n        })\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {Toast} from 'bootstrap'\n\nexport default class extends Controller {\n    connect() {\n        new Toast(this.element).show()\n    }\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\n/*\n * This controller is bound to an outer container element.\n * \"selector\" target is a select field, \"toggleable\" are elements to show/hide, \"clearable\" an optional element to clear\n *  on toggle.\n *\n * HTML setup:\n * 1.Bind this controller to a container element, that contains a select field and elements to toggle.\n * 2 Mark a select field as \"selector\" target and other (at least one) elements as \"toggleable\" targets.\n * 3.Set data-toggle-initial-option-value on the container to the default value of the select field.\n * 4.Set data-toggle-value on the \"toggleable\" target to the default value.\n * 5. Optionally enable clear on toggle by setting data-toggle-clear-on-toggle-value=\"true\" on the container and\n * marking an element (inout, textarea or select field) as \"clearable\" target.\n *\n * Result:\n * While the \"toggleable\" target with the default value is shown, other \"toggleable\" targets are hidden.\n * By selecting a different option in the \"selector\" target, the visibility of \"toggleable\" targets is updated.\n * An optional element is cleared when toggling if configured.\n */\n\nexport default class extends Controller {\n    static targets = [\"selector\", \"toggleable\", \"clearable\"];\n\n    static values = {\n        initialOption: { type: String },\n        clearOnToggle: { type: Boolean }\n    };\n\n    connect() {\n        console.log(\"ToggleController connected\");\n\n        if (this.selectorTarget.value !== this.initialOptionValue) {\n            this.selectorTarget.value = this.initialOptionValue;\n        }\n\n        this._initializeToggles();\n    }\n\n    _initializeToggles() {\n        this._updateVisibility(this.initialOptionValue);\n    }\n\n    _updateVisibility(selectedValue) {\n        this.toggleableTargets.forEach(element => {\n            element.classList.toggle(\"d-none\", element.dataset.toggleValue !== selectedValue);\n        });\n    }\n\n    toggle(event) {\n        this._updateVisibility(event.target.value);\n        this._clearTarget();\n    }\n\n    _clearTarget() {\n        if (!this.clearOnToggleValue) return;\n        if (!this.hasClearableTarget) return;\n\n        const el = this.clearableTarget;\n\n        // Possible targets: Inputs / textareas / selects\n        if ('value' in el) {\n            if (el.value === \"\") return;\n            el.value = \"\";\n            el.dispatchEvent(new InputEvent('input', { bubbles: true, cancelable: true }));\n            return;\n        }\n\n        // Fallback for non-input elements\n        if (el.textContent && el.textContent.trim() !== \"\") {\n            el.textContent = \"\";\n            el.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));\n        }\n    }\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"toggle-radio-group\"\nexport default class extends Controller {\n    static targets = [\"checkBox\", \"radioGroupLabel\", \"radioGroup\", \"radioBtn\"];\n\n    connect() {\n        this.toggle();\n    }\n\n    toggle() {\n        const checkBox = document.getElementById('rated-question-checkbox');\n\n        if (checkBox.checked) {\n            this.enable();\n        } else {\n            this.disable();\n        }\n    }\n\n    enable() {\n        this.radioGroupLabelTargets.forEach(label => {\n            label.classList.add('required');\n        });\n\n        this.radioGroupTargets.forEach(group => {\n            group.classList.remove('disabled');\n        });\n\n        this.radioBtnTargets.forEach(btn => {\n            btn.removeAttribute('disabled');\n            btn.setAttribute('required', 'required');\n        });\n    }\n\n    disable() {\n        this.radioGroupLabelTargets.forEach(label => {\n            label.classList.remove('required');\n        });\n\n        this.radioGroupTargets.forEach(group => {\n            group.classList.add('disabled');\n        });\n\n        this.radioBtnTargets.forEach(btn => {\n            btn.setAttribute('disabled', 'disabled');\n            btn.removeAttribute('required');\n            btn.checked = false;\n        });\n    }\n}\n", "/*\n  Since an optional course shouldn't block access to the following courses, this stimulus keeps the \"optional\" and\n  \"stop_when_not_done\" checkboxes of a tutorial_series_course mutually exclusive.\n*/\n\nimport {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n    static targets = ['optional', 'stopWhenNotDone']\n\n    toggleOptional() {\n        if (this.optionalTarget.checked && this.stopWhenNotDoneTarget.checked) {\n            this.stopWhenNotDoneTarget.checked = false\n        }\n    }\n\n    toggleStopWhenNotDone() {\n        if (this.stopWhenNotDoneTarget.checked && this.optionalTarget.checked) {\n            this.optionalTarget.checked = false\n        }\n    }\n}\n", "// Keeps the radio selection and Bootstrap collapse panels in sync so the last\n// clicked option always wins, even while other panels are still animating.\nimport { Controller } from \"@hotwired/stimulus\"\nimport { Collapse } from \"bootstrap\"\n\nexport default class extends Controller {\n  static targets = [\"form\", \"radio\", \"panel\"]\n  static values = {\n    confirmMessage: String\n  }\n\n  connect() {\n    this.currentValue = this.selectedValue()\n    this.handleCollapseChange = this.syncStates.bind(this)\n\n    this.panelTargets.forEach((panel) => {\n      Collapse.getOrCreateInstance(panel, { toggle: false })\n      panel.addEventListener(\"shown.bs.collapse\", this.handleCollapseChange)\n      panel.addEventListener(\"hidden.bs.collapse\", this.handleCollapseChange)\n    })\n\n    this.renderInitialState()\n  }\n\n  disconnect() {\n    this.panelTargets.forEach((panel) => {\n      panel.removeEventListener(\"shown.bs.collapse\", this.handleCollapseChange)\n      panel.removeEventListener(\"hidden.bs.collapse\", this.handleCollapseChange)\n    })\n  }\n\n  change(event) {\n    const nextValue = event.target.value\n\n    if (nextValue === \"0\" && !window.confirm(this.confirmMessageValue)) {\n      this.syncRadios(this.currentValue)\n      return\n    }\n\n    this.currentValue = nextValue\n    this.syncStates()\n\n    if (nextValue === \"0\") {\n      this.submitForm()\n    }\n  }\n\n  selectedValue() {\n    return this.radioTargets.find((radio) => radio.checked)?.value\n  }\n\n  renderInitialState() {\n    const selectedPanel = this.findPanel(this.currentValue)\n\n    this.syncRadios(this.currentValue)\n    this.panelTargets.forEach((panel) => {\n      this.setPanelState(panel, panel === selectedPanel)\n    })\n  }\n\n  syncStates() {\n    const selectedPanel = this.findPanel(this.currentValue)\n\n    this.syncRadios(this.currentValue)\n    this.closeWrongPanels(selectedPanel)\n\n    if (!selectedPanel || this.wrongPanelsAreStillActive(selectedPanel)) {\n      return\n    }\n\n    this.openPanel(selectedPanel)\n  }\n\n  syncRadios(selectedValue) {\n    this.radioTargets.forEach((radio) => {\n      const isSelected = radio.value === selectedValue\n      radio.checked = isSelected\n      radio.setAttribute(\"aria-expanded\", String(isSelected))\n    })\n  }\n\n  closeWrongPanels(selectedPanel) {\n    this.panelTargets.forEach((panel) => {\n      if (panel === selectedPanel || !this.panelIsActive(panel)) {\n        return\n      }\n\n      panel.setAttribute(\"aria-hidden\", \"true\")\n      this.collapseFor(panel).hide()\n    })\n  }\n\n  wrongPanelsAreStillActive(selectedPanel) {\n    return this.panelTargets.some((panel) => panel !== selectedPanel && this.panelIsActive(panel))\n  }\n\n  openPanel(panel) {\n    panel.setAttribute(\"aria-hidden\", \"false\")\n\n    if (this.panelIsActive(panel)) {\n      return\n    }\n\n    this.collapseFor(panel).show()\n  }\n\n  panelIsActive(panel) {\n    return panel.classList.contains(\"show\") || panel.classList.contains(\"collapsing\")\n  }\n\n  findPanel(value) {\n    return this.panelTargets.find((panel) => panel.dataset.timeType === value)\n  }\n\n  collapseFor(panel) {\n    return Collapse.getOrCreateInstance(panel, { toggle: false })\n  }\n\n  setPanelState(panel, open) {\n    panel.classList.remove(\"collapsing\")\n    panel.classList.toggle(\"show\", open)\n    panel.style.height = \"\"\n    panel.setAttribute(\"aria-hidden\", String(!open))\n  }\n\n  submitForm() {\n    if (typeof this.formTarget.requestSubmit === \"function\") {\n      this.formTarget.requestSubmit()\n    } else {\n      this.formTarget.submit()\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nconst optionSelector = \"[role='option']:not([aria-disabled])\"\nconst activeSelector = \"[aria-selected='true']\"\n\nexport default class Autocomplete extends Controller {\n  static targets = [\"input\", \"hidden\", \"results\"]\n  static classes = [\"selected\"]\n  static values = {\n    ready: Boolean,\n    submitOnEnter: Boolean,\n    url: String,\n    minLength: Number,\n    delay: { type: Number, default: 300 },\n    queryParam: { type: String, default: \"q\" },\n  }\n  static uniqOptionId = 0\n\n  connect() {\n    this.close()\n\n    if(!this.inputTarget.hasAttribute(\"autocomplete\")) this.inputTarget.setAttribute(\"autocomplete\", \"off\")\n    this.inputTarget.setAttribute(\"spellcheck\", \"false\")\n\n    this.mouseDown = false\n\n    this.onInputChange = debounce(this.onInputChange, this.delayValue)\n\n    this.inputTarget.addEventListener(\"keydown\", this.onKeydown)\n    this.inputTarget.addEventListener(\"blur\", this.onInputBlur)\n    this.inputTarget.addEventListener(\"input\", this.onInputChange)\n    this.resultsTarget.addEventListener(\"mousedown\", this.onResultsMouseDown)\n    this.resultsTarget.addEventListener(\"click\", this.onResultsClick)\n\n    if (this.inputTarget.hasAttribute(\"autofocus\")) {\n      this.inputTarget.focus()\n    }\n\n    this.readyValue = true\n  }\n\n  disconnect() {\n    if (this.hasInputTarget) {\n      this.inputTarget.removeEventListener(\"keydown\", this.onKeydown)\n      this.inputTarget.removeEventListener(\"blur\", this.onInputBlur)\n      this.inputTarget.removeEventListener(\"input\", this.onInputChange)\n    }\n\n    if (this.hasResultsTarget) {\n      this.resultsTarget.removeEventListener(\"mousedown\", this.onResultsMouseDown)\n      this.resultsTarget.removeEventListener(\"click\", this.onResultsClick)\n    }\n  }\n\n  sibling(next) {\n    const options = this.options\n    const selected = this.selectedOption\n    const index = options.indexOf(selected)\n    const sibling = next ? options[index + 1] : options[index - 1]\n    const def = next ? options[0] : options[options.length - 1]\n    return sibling || def\n  }\n\n  select(target) {\n    const previouslySelected = this.selectedOption\n    if (previouslySelected) {\n      previouslySelected.removeAttribute(\"aria-selected\")\n      previouslySelected.classList.remove(...this.selectedClassesOrDefault)\n    }\n\n    target.setAttribute(\"aria-selected\", \"true\")\n    target.classList.add(...this.selectedClassesOrDefault)\n    this.inputTarget.setAttribute(\"aria-activedescendant\", target.id)\n    target.scrollIntoView({ behavior: \"auto\", block: \"nearest\" })\n  }\n\n  onKeydown = (event) => {\n    const handler = this[`on${event.key}Keydown`]\n    if (handler) handler(event)\n  }\n\n  onEscapeKeydown = (event) => {\n    if (!this.resultsShown) return\n\n    this.hideAndRemoveOptions()\n    event.stopPropagation()\n    event.preventDefault()\n  }\n\n  onArrowDownKeydown = (event) => {\n    const item = this.sibling(true)\n    if (item) this.select(item)\n    event.preventDefault()\n  }\n\n  onArrowUpKeydown = (event) => {\n    const item = this.sibling(false)\n    if (item) this.select(item)\n    event.preventDefault()\n  }\n\n  onTabKeydown = (event) => {\n    const selected = this.selectedOption\n    if (selected) this.commit(selected)\n  }\n\n  onEnterKeydown = (event) => {\n    const selected = this.selectedOption\n    if (selected && this.resultsShown) {\n      this.commit(selected)\n      if (!this.hasSubmitOnEnterValue) {\n        event.preventDefault()\n      }\n    }\n  }\n\n  onInputBlur = () => {\n    if (this.mouseDown) return\n    this.close()\n  }\n\n  commit(selected) {\n    if (selected.getAttribute(\"aria-disabled\") === \"true\") return\n\n    if (selected instanceof HTMLAnchorElement) {\n      selected.click()\n      this.close()\n      return\n    }\n\n    const textValue = selected.getAttribute(\"data-autocomplete-label\") || selected.textContent.trim()\n    const value = selected.getAttribute(\"data-autocomplete-value\") || textValue\n    this.inputTarget.value = textValue\n\n    if (this.hasHiddenTarget) {\n      this.hiddenTarget.value = value\n      this.hiddenTarget.dispatchEvent(new Event(\"input\"))\n      this.hiddenTarget.dispatchEvent(new Event(\"change\"))\n    } else {\n      this.inputTarget.value = value\n    }\n\n    this.inputTarget.focus()\n    this.hideAndRemoveOptions()\n\n    this.element.dispatchEvent(\n      new CustomEvent(\"autocomplete.change\", {\n        bubbles: true,\n        detail: { value: value, textValue: textValue, selected: selected }\n      })\n    )\n  }\n\n  clear() {\n    this.inputTarget.value = \"\"\n    if (this.hasHiddenTarget) this.hiddenTarget.value = \"\"\n  }\n\n  onResultsClick = (event) => {\n    if (!(event.target instanceof Element)) return\n    const selected = event.target.closest(optionSelector)\n    if (selected) this.commit(selected)\n  }\n\n  onResultsMouseDown = () => {\n    this.mouseDown = true\n    this.resultsTarget.addEventListener(\"mouseup\", () => {\n      this.mouseDown = false\n    }, { once: true })\n  }\n\n  onInputChange = () => {\n    if (this.hasHiddenTarget) this.hiddenTarget.value = \"\"\n\n    const query = this.inputTarget.value.trim()\n    if (query && query.length >= this.minLengthValue) {\n      this.fetchResults(query)\n    } else {\n      this.hideAndRemoveOptions()\n    }\n  }\n\n  identifyOptions() {\n    const prefix = this.resultsTarget.id || \"stimulus-autocomplete\"\n    const optionsWithoutId = this.resultsTarget.querySelectorAll(`${optionSelector}:not([id])`)\n    optionsWithoutId.forEach(el => el.id = `${prefix}-option-${Autocomplete.uniqOptionId++}`)\n  }\n\n  hideAndRemoveOptions() {\n    this.close()\n    this.resultsTarget.innerHTML = null\n  }\n\n  fetchResults = async (query) => {\n    if (!this.hasUrlValue) return\n\n    const url = this.buildURL(query)\n    try {\n      this.element.dispatchEvent(new CustomEvent(\"loadstart\"))\n      const html = await this.doFetch(url)\n      this.replaceResults(html)\n      this.element.dispatchEvent(new CustomEvent(\"load\"))\n      this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n    } catch(error) {\n      this.element.dispatchEvent(new CustomEvent(\"error\"))\n      this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n      throw error\n    }\n  }\n\n  buildURL(query) {\n    const url = new URL(this.urlValue, window.location.href)\n    const params = new URLSearchParams(url.search.slice(1))\n    params.append(this.queryParamValue, query)\n    url.search = params.toString()\n\n    return url.toString()\n  }\n\n  doFetch = async (url) => {\n    const response = await fetch(url, this.optionsForFetch())\n\n    if (!response.ok) {\n      throw new Error(`Server responded with status ${response.status}`)\n    }\n\n    const html = await response.text()\n    return html\n  }\n\n  replaceResults(html) {\n    this.resultsTarget.innerHTML = html\n    this.identifyOptions()\n    if (!!this.options) {\n      this.open()\n    } else {\n      this.close()\n    }\n  }\n\n  open() {\n    if (this.resultsShown) return\n\n    this.resultsShown = true\n    this.element.setAttribute(\"aria-expanded\", \"true\")\n    this.element.dispatchEvent(\n      new CustomEvent(\"toggle\", {\n        detail: { action: \"open\", inputTarget: this.inputTarget, resultsTarget: this.resultsTarget }\n      })\n    )\n  }\n\n  close() {\n    if (!this.resultsShown) return\n\n    this.resultsShown = false\n    this.inputTarget.removeAttribute(\"aria-activedescendant\")\n    this.element.setAttribute(\"aria-expanded\", \"false\")\n    this.element.dispatchEvent(\n      new CustomEvent(\"toggle\", {\n        detail: { action: \"close\", inputTarget: this.inputTarget, resultsTarget: this.resultsTarget }\n      })\n    )\n  }\n\n  get resultsShown() {\n    return !this.resultsTarget.hidden\n  }\n\n  set resultsShown(value) {\n    this.resultsTarget.hidden = !value\n  }\n\n  get options() {\n    return Array.from(this.resultsTarget.querySelectorAll(optionSelector))\n  }\n\n  get selectedOption() {\n    return this.resultsTarget.querySelector(activeSelector)\n  }\n\n  get selectedClassesOrDefault() {\n    return this.hasSelectedClass ? this.selectedClasses : [\"active\"]\n  }\n\n  optionsForFetch() {\n    return { headers: { \"X-Requested-With\": \"XMLHttpRequest\" } } // override if you need\n  }\n}\n\nconst debounce = (fn, delay = 10) => {\n  let timeoutId = null\n\n  return (...args) => {\n    clearTimeout(timeoutId)\n    timeoutId = setTimeout(fn, delay)\n  }\n}\n\nexport { Autocomplete }\n", "import AutocompleteController from 'stimulus-autocomplete'\n\nexport default class extends AutocompleteController {\n    static targets = ['loader']\n\n    initialize() {\n        this._handleAutocompleteLoadStart = this._handleAutocompleteLoadStart.bind(this)\n        this._handleAutocompleteLoadEnd = this._handleAutocompleteLoadEnd.bind(this)\n    }\n\n    connect() {\n        super.element.addEventListener('loadstart', this._handleAutocompleteLoadStart)\n        super.element.addEventListener('loadend', this._handleAutocompleteLoadEnd)\n        super.connect()\n    }\n\n    disconnect() {\n        super.element.removeEventListener('loadstart', this._handleAutocompleteLoadStart)\n        super.element.removeEventListener('loadend', this._handleAutocompleteLoadEnd)\n        super.disconnect()\n    }\n\n    _handleAutocompleteLoadStart(_event) {\n        if (this.hasLoaderTarget) this.loaderTarget.innerHTML = '<i class=\"fas fa-spinner fa-spin\"></i>'\n    }\n\n    _handleAutocompleteLoadEnd(_event) {\n        if (this.hasLoaderTarget) this.loaderTarget.innerHTML = '<i class=\"fas fa-search\"></i>'\n    }\n\n    // Override replaceResults method to check for empty results and showing empty lists.\n    replaceResults(html) {\n        this.resultsTarget.innerHTML = html\n        this.identifyOptions()\n        if (!!this.options && (html.length > 0)) {\n            this.open()\n        } else {\n            this.close()\n        }\n    }\n}\n", "import {Controller} from '@hotwired/stimulus'\nimport {debounce} from 'debounce'\n\nexport default class extends Controller {\n    static targets = ['input', 'validateCustomInputsTrigger']\n    static values = {\n        debug: {type: Boolean, default: false},\n        disableSubmitButtons: {type: Boolean, default: false}\n    }\n\n    initialize() {\n        this.validateInput = debounce(this.validateInput, 500)\n        this._handleFormChange = debounce(this._handleFormChange.bind(this), 500)\n    }\n\n    connect() {\n        this._addEventListeners()\n        this._validateAllCustomInputs()\n        if (this.disableSubmitButtonsValue) this._toggleSubmitButtons(this.element.checkValidity())\n    }\n\n    disconnect() {\n        this._removeEventListeners()\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    validateCustomInputsTriggerTargetDisconnected() {\n        this._log('a validateCustomInputsTrigger disconnected')\n        this._validateAllCustomInputs()\n    }\n\n    validateInput(event) {\n        const input = event.target\n        this._log(`validateInput called for ${input.name}`)\n        input.dataset.validates.split(' ').forEach(validator => {\n            this[`_${validator}`](input)\n        })\n    }\n\n    _validateAllCustomInputs() {\n        this._log('_validateAllCustomInputs called')\n        Array.prototype.forEach.call(this.inputTargets, (input, _index) => {\n            input.dataset.validates.split(' ').forEach(validator => {\n                this[`_${validator}`](input)\n            })\n        })\n    }\n\n    _validateAllOtherCustomInputs(event) {\n        this._log('_validateAllOtherCustomInputs called')\n        let otherInputs = this.inputTargets\n        let indexOfTarget = otherInputs.indexOf(event.target)\n        if (indexOfTarget > -1) otherInputs.splice(indexOfTarget, 1)\n        Array.prototype.forEach.call(otherInputs, (input, _index) => {\n            input.dataset.validates.split(' ').forEach(validator => {\n                this[`_${validator}`](input)\n            })\n        })\n    }\n\n    _addEventListeners() {\n        this.element.addEventListener('input', this._handleFormChange)\n        this.element.addEventListener('change', this._handleFormChange)\n    }\n\n    _removeEventListeners() {\n        this.element.removeEventListener('input', this._handleFormChange)\n        this.element.removeEventListener('change', this._handleFormChange)\n    }\n\n    _handleFormChange(event) {\n        this._log('_handleFormChange called')\n        this._validateAllOtherCustomInputs(event)\n        if (this.disableSubmitButtonsValue) this._toggleSubmitButtons(event.currentTarget.checkValidity())\n    }\n\n    _toggleSubmitButtons(bool) {\n        this._log(`_toggleSubmitButtons called with '${bool}'`)\n        Array.prototype.forEach.call(this.element.querySelectorAll('[type=\"submit\"]'), (input, _index) => {\n            input.disabled = !bool\n        })\n    }\n\n    _log(message) {\n        if (this.debugValue === true) console.log(`DEBUG validation: ${message}`)\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _requireWhenOtherFieldNotEmpty(input) {\n        const otherField = this.element.querySelector(input.dataset.otherFieldSelector)\n        if (['checkbox', 'radio'].includes(otherField.type)) {\n            input.required = otherField.checked\n        } else {\n            input.required = otherField.value !== ''\n        }\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _requireWhenOtherFieldEmpty(input) {\n        const otherField = this.element.querySelector(input.dataset.otherFieldSelector)\n        if (['checkbox', 'radio'].includes(otherField.type)) {\n            input.required = !otherField.checked\n        } else {\n            input.required = otherField.value === ''\n        }\n    }\n\n    /**\n     * Makes a field required when other fields are empty.\n     *\n     * The parameter \"other_fields_selectors\" must be used on field definition to send\n     * the field selectors separated by commas.\n     * @example\n     *   other_fields_selectors: '#checkbox1,#online_appointment,#join_url'\n     */\n    _requireWhenOtherFieldsEmpty(input) {\n        let fieldStates = [];\n        const selectors = input.dataset.otherFieldsSelectors.split(',');\n\n        // Go through every field, check the status and store it in an array.\n        for (const selector of selectors) {\n            const otherField = this.element.querySelector(selector.trim())\n            if (['checkbox', 'radio'].includes(otherField.type)) {\n                fieldStates.push(!otherField.checked)\n            } else {\n                fieldStates.push(otherField.value === '')\n            }\n        }\n        // Check that every element in the array is true to set the required attribute accordingly.\n        let checker = arr => arr.every(element => element === true);\n        input.required = checker(fieldStates);\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _fieldValueEquality(input) {\n        const otherField = this.element.querySelector(input.dataset.equalFieldSelector)\n        const inputValid = input?.value === otherField?.value\n        this._setCustomValidity(input, inputValid)\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _minValueOfOtherField(input) {\n        const otherField = this.element.querySelector(input.dataset.minValueFieldSelector)\n\n        if (input.type === 'date' && otherField.type === 'date') {\n            input.min = otherField.value || ''\n        } else {\n            input.min = parseInt(otherField.value)\n        }\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _remoteValidation(input) {\n        if (input.value) {\n            const ajaxData = input.dataset.ajaxDataParams + input.value\n            Rails.ajax({\n                type: 'GET', url: input.dataset.remoteValidationUrl, data: ajaxData,\n                success: (response) => {\n                    this._setCustomValidity(input, response)\n                }\n            })\n        } else {\n            this._setCustomValidity(input, true)\n        }\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _notInListOfGroup(input) {\n        // Get all other elements of the form that must be unique from given query selector.\n        const inputs = this.element.querySelectorAll(input.dataset.notInListOfGroupSelector)\n        this._checkForNotInListOfGroup(inputs, input)\n\n        let otherInputs = [...inputs]\n        let indexOfTarget = otherInputs.indexOf(input)\n        if (indexOfTarget > -1) otherInputs.splice(indexOfTarget, 1)\n        Array.prototype.forEach.call(otherInputs, (input, _index) => {\n            this._checkForNotInListOfGroup(inputs, input)\n        })\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _fileSize(input) {\n        let maxFileSize = input.dataset.maxFileSize\n        let file = input.files[0]\n        this._setCustomValidity(input, !(file && file.size > maxFileSize))\n    }\n\n    // noinspection JSUnusedGlobalSymbols\n    _otherFieldHasSpecificValue(input) {\n        const otherField = this.element.querySelector(input.dataset.otherFieldSelector)\n        input.required = otherField.value === input.dataset.specificValue\n    }\n\n    // Extracted method to make checks for unique list more convenient.\n    // @param inputs: a list of input nodes whose values will be checked.\n    // @param input: given input node that triggered the check.\n    _checkForNotInListOfGroup(inputs, input) {\n        // Map the value of given inputs.\n        let values = [].map.call(inputs, input => input.value)\n        // Find first match of current input value in given array and remove it if found.\n        const index = values.indexOf(input.value)\n        if (index > -1) values.splice(index, 1)\n        // Check if current input value is still in the list and return false if so.\n        this._setCustomValidity(input, !values.includes(input.value))\n    }\n\n    _setCustomValidity(element, response) {\n        if (typeof response == 'boolean')\n            if (element.title.length > 0) {\n                response ? element.setCustomValidity('') : element.setCustomValidity(element.title)\n            } else {\n                this._log('cannot assign custom validity because element title is not present')\n            }\n        else {\n            element.setCustomValidity(response)\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\nimport AssignmentController from \"./assignment_controller\"\napplication.register(\"assignment\", AssignmentController)\n\nimport AsyncPickController from \"./async_pick_controller\"\napplication.register(\"async-pick\", AsyncPickController)\n\nimport AutoRedirectController from \"./auto_redirect_controller\"\napplication.register(\"auto-redirect\", AutoRedirectController)\n\nimport AutosaveController from \"./autosave_controller\"\napplication.register(\"autosave\", AutosaveController)\n\nimport ChartjsController from \"./chartjs_controller\"\napplication.register(\"chartjs\", ChartjsController)\n\nimport CheckboxSelectAllController from \"./checkbox_select_all_controller\"\napplication.register(\"checkbox-select-all\", CheckboxSelectAllController)\n\nimport CheckboxToFormController from \"./checkbox_to_form_controller\"\napplication.register(\"checkbox-to-form\", CheckboxToFormController)\n\nimport ClipboardController from \"./clipboard_controller\"\napplication.register(\"clipboard\", ClipboardController)\n\nimport CollapseAllController from \"./collapse_all_controller\"\napplication.register(\"collapse-all\", CollapseAllController)\n\nimport CollapseController from \"./collapse_controller\"\napplication.register(\"collapse\", CollapseController)\n\nimport CountdownController from \"./countdown_controller\"\napplication.register(\"countdown\", CountdownController)\n\nimport DatatableController from \"./datatable_controller\"\napplication.register(\"datatable\", DatatableController)\n\nimport DirectUploadController from \"./direct_upload_controller\"\napplication.register(\"direct-upload\", DirectUploadController)\n\nimport DisplayWithButtonController from \"./display_with_button_controller\"\napplication.register(\"display-with-button\", DisplayWithButtonController)\n\nimport DisplayWithRadioButtonController from \"./display_with_radio_button_controller\"\napplication.register(\"display-with-radio-button\", DisplayWithRadioButtonController)\n\nimport DragDropController from \"./drag_drop_controller\"\napplication.register(\"drag-drop\", DragDropController)\n\nimport DropdownController from \"./dropdown_controller\"\napplication.register(\"dropdown\", DropdownController)\n\nimport EditorController from \"./editor_controller\"\napplication.register(\"editor\", EditorController)\n\nimport EditorMediaFileEmbedController from \"./editor_media_file_embed_controller\"\napplication.register(\"editor-media-file-embed\", EditorMediaFileEmbedController)\n\nimport ElementStatisticsController from \"./element_statistics_controller\"\napplication.register(\"element-statistics\", ElementStatisticsController)\n\nimport FetchHtmlController from \"./fetch_html_controller\"\napplication.register(\"fetch-html\", FetchHtmlController)\n\nimport FilterableController from \"./filterable_controller\"\napplication.register(\"filterable\", FilterableController)\n\nimport FormLeaveController from \"./form_leave_controller\"\napplication.register(\"form-leave\", FormLeaveController)\n\nimport HeartbeatController from \"./heartbeat_controller\"\napplication.register(\"heartbeat\", HeartbeatController)\n\nimport InfiniteScrollController from \"./infinite_scroll_controller\"\napplication.register(\"infinite-scroll\", InfiniteScrollController)\n\nimport LeavePageController from \"./leave_page_controller\"\napplication.register(\"leave-page\", LeavePageController)\n\nimport LockTimeoutController from \"./lock_timeout_controller\"\napplication.register(\"lock-timeout\", LockTimeoutController)\n\nimport MediaElementController from \"./media_element_controller\"\napplication.register(\"media-element\", MediaElementController)\n\nimport ModalController from \"./modal_controller\"\napplication.register(\"modal\", ModalController)\n\nimport ModalLinkController from \"./modal_link_controller\"\napplication.register(\"modal-link\", ModalLinkController)\n\nimport NavTabsScrollableController from \"./nav_tabs_scrollable_controller\"\napplication.register(\"nav-tabs-scrollable\", NavTabsScrollableController)\n\nimport NestedFormController from \"./nested_form_controller\"\napplication.register(\"nested-form\", NestedFormController)\n\nimport NoPasteController from \"./no_paste_controller\"\napplication.register(\"no-paste\", NoPasteController)\n\nimport NotificationController from \"./notification_controller\"\napplication.register(\"notification\", NotificationController)\n\nimport PasswordShowToggleController from \"./password_show_toggle_controller\"\napplication.register(\"password-show-toggle\", PasswordShowToggleController)\n\nimport PdfSummaryConfirmationController from \"./pdf_summary_confirmation_controller\"\napplication.register(\"pdf-summary-confirmation\", PdfSummaryConfirmationController)\n\nimport PopoverController from \"./popover_controller\"\napplication.register(\"popover\", PopoverController)\n\nimport RadioCheckController from \"./radio_check_controller\"\napplication.register(\"radio-check\", RadioCheckController)\n\nimport ReadmoreController from \"./readmore_controller\"\napplication.register(\"readmore\", ReadmoreController)\n\nimport ResizeController from \"./resize_controller\"\napplication.register(\"resize\", ResizeController)\n\nimport ResourceLockChannelController from \"./resource_lock_channel_controller\"\napplication.register(\"resource-lock-channel\", ResourceLockChannelController)\n\nimport SidebarToggleController from \"./sidebar_toggle_controller\"\napplication.register(\"sidebar-toggle\", SidebarToggleController)\n\nimport SubmitOnEnterController from \"./submit_on_enter_controller\"\napplication.register(\"submit-on-enter\", SubmitOnEnterController)\n\nimport SubmitOtherFormController from \"./submit_other_form_controller\"\napplication.register(\"submit-other-form\", SubmitOtherFormController)\n\nimport SumPointController from \"./sum_point_controller\"\napplication.register(\"sum-point\", SumPointController)\n\nimport SyncPickController from \"./sync_pick_controller\"\napplication.register(\"sync-pick\", SyncPickController)\n\nimport TagInputController from \"./tag_input_controller\"\napplication.register(\"tag-input\", TagInputController)\n\nimport ToastController from \"./toast_controller\"\napplication.register(\"toast\", ToastController)\n\nimport ToggleController from \"./toggle_controller\"\napplication.register(\"toggle\", ToggleController)\n\nimport ToggleRadioGroupController from \"./toggle_radio_group_controller\"\napplication.register(\"toggle-radio-group\", ToggleRadioGroupController)\n\nimport TutorialSeriesCourseController from \"./tutorial_series_course_controller\"\napplication.register(\"tutorial-series-course\", TutorialSeriesCourseController)\n\nimport TutorialTimeSettingsController from \"./tutorial_time_settings_controller\"\napplication.register('tutorial-time-settings', TutorialTimeSettingsController)\n\nimport TypeaheadController from \"./typeahead_controller\"\napplication.register(\"typeahead\", TypeaheadController)\n\nimport ValidationController from \"./validation_controller\"\napplication.register(\"validation\", ValidationController)\n", "/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && _setPrototypeOf(t, e);\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _wrapRegExp() {\n  _wrapRegExp = function (e, r) {\n    return new BabelRegExp(e, void 0, r);\n  };\n  var e = RegExp.prototype,\n    r = new WeakMap();\n  function BabelRegExp(e, t, p) {\n    var o = RegExp(e, t);\n    return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype);\n  }\n  function buildGroups(e, t) {\n    var p = r.get(t);\n    return Object.keys(p).reduce(function (r, t) {\n      var o = p[t];\n      if (\"number\" == typeof o) r[t] = e[o];else {\n        for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;\n        r[t] = e[o[i]];\n      }\n      return r;\n    }, Object.create(null));\n  }\n  return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {\n    var t = e.exec.call(this, r);\n    if (t) {\n      t.groups = buildGroups(t, this);\n      var p = t.indices;\n      p && (p.groups = buildGroups(p, this));\n    }\n    return t;\n  }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {\n    if (\"string\" == typeof p) {\n      var o = r.get(this);\n      return e[Symbol.replace].call(this, t, p.replace(/\\$<([^>]+)>/g, function (e, r) {\n        var t = o[r];\n        return \"$\" + (Array.isArray(t) ? t.join(\"$\") : t);\n      }));\n    }\n    if (\"function\" == typeof p) {\n      var i = this;\n      return e[Symbol.replace].call(this, t, function () {\n        var e = arguments;\n        return \"object\" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);\n      });\n    }\n    return e[Symbol.replace].call(this, t, p);\n  }, _wrapRegExp.apply(this, arguments);\n}\n\nconst noop = () => {};\nlet _WINDOW = {};\nlet _DOCUMENT = {};\nlet _MUTATION_OBSERVER = null;\nlet _PERFORMANCE = {\n  mark: noop,\n  measure: noop\n};\ntry {\n  if (typeof window !== 'undefined') _WINDOW = window;\n  if (typeof document !== 'undefined') _DOCUMENT = document;\n  if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n  if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {}\nconst {\n  userAgent = ''\n} = _WINDOW.navigator || {};\nconst WINDOW = _WINDOW;\nconst DOCUMENT = _DOCUMENT;\nconst MUTATION_OBSERVER = _MUTATION_OBSERVER;\nconst PERFORMANCE = _PERFORMANCE;\nconst IS_BROWSER = !!WINDOW.document;\nconst IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nconst IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar p = /fa(s|r|l|t|d|dr|dl|dt|b|k|kd|ss|sr|sl|st|sds|sdr|sdl|sdt)?[\\-\\ ]/,\n  g = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp Duotone|Sharp|Kit)?.*/i;\nvar S = {\n    classic: {\n      fa: \"solid\",\n      fas: \"solid\",\n      \"fa-solid\": \"solid\",\n      far: \"regular\",\n      \"fa-regular\": \"regular\",\n      fal: \"light\",\n      \"fa-light\": \"light\",\n      fat: \"thin\",\n      \"fa-thin\": \"thin\",\n      fab: \"brands\",\n      \"fa-brands\": \"brands\"\n    },\n    duotone: {\n      fa: \"solid\",\n      fad: \"solid\",\n      \"fa-solid\": \"solid\",\n      \"fa-duotone\": \"solid\",\n      fadr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fadl: \"light\",\n      \"fa-light\": \"light\",\n      fadt: \"thin\",\n      \"fa-thin\": \"thin\"\n    },\n    sharp: {\n      fa: \"solid\",\n      fass: \"solid\",\n      \"fa-solid\": \"solid\",\n      fasr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fasl: \"light\",\n      \"fa-light\": \"light\",\n      fast: \"thin\",\n      \"fa-thin\": \"thin\"\n    },\n    \"sharp-duotone\": {\n      fa: \"solid\",\n      fasds: \"solid\",\n      \"fa-solid\": \"solid\",\n      fasdr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fasdl: \"light\",\n      \"fa-light\": \"light\",\n      fasdt: \"thin\",\n      \"fa-thin\": \"thin\"\n    }\n  },\n  A = {\n    GROUP: \"duotone-group\",\n    SWAP_OPACITY: \"swap-opacity\",\n    PRIMARY: \"primary\",\n    SECONDARY: \"secondary\"\n  },\n  P = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\nvar s = \"classic\",\n  t = \"duotone\",\n  r = \"sharp\",\n  o = \"sharp-duotone\",\n  L = [s, t, r, o];\nvar G = {\n    classic: {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\",\n      100: \"fat\"\n    },\n    duotone: {\n      900: \"fad\",\n      400: \"fadr\",\n      300: \"fadl\",\n      100: \"fadt\"\n    },\n    sharp: {\n      900: \"fass\",\n      400: \"fasr\",\n      300: \"fasl\",\n      100: \"fast\"\n    },\n    \"sharp-duotone\": {\n      900: \"fasds\",\n      400: \"fasdr\",\n      300: \"fasdl\",\n      100: \"fasdt\"\n    }\n  };\nvar lt = {\n    \"Font Awesome 6 Free\": {\n      900: \"fas\",\n      400: \"far\"\n    },\n    \"Font Awesome 6 Pro\": {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\",\n      100: \"fat\"\n    },\n    \"Font Awesome 6 Brands\": {\n      400: \"fab\",\n      normal: \"fab\"\n    },\n    \"Font Awesome 6 Duotone\": {\n      900: \"fad\",\n      400: \"fadr\",\n      normal: \"fadr\",\n      300: \"fadl\",\n      100: \"fadt\"\n    },\n    \"Font Awesome 6 Sharp\": {\n      900: \"fass\",\n      400: \"fasr\",\n      normal: \"fasr\",\n      300: \"fasl\",\n      100: \"fast\"\n    },\n    \"Font Awesome 6 Sharp Duotone\": {\n      900: \"fasds\",\n      400: \"fasdr\",\n      normal: \"fasdr\",\n      300: \"fasdl\",\n      100: \"fasdt\"\n    }\n  };\nvar pt = new Map([[\"classic\", {\n    defaultShortPrefixId: \"fas\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\", \"brands\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"sharp\", {\n    defaultShortPrefixId: \"fass\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"duotone\", {\n    defaultShortPrefixId: \"fad\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"sharp-duotone\", {\n    defaultShortPrefixId: \"fasds\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }]]),\n  xt = {\n    classic: {\n      solid: \"fas\",\n      regular: \"far\",\n      light: \"fal\",\n      thin: \"fat\",\n      brands: \"fab\"\n    },\n    duotone: {\n      solid: \"fad\",\n      regular: \"fadr\",\n      light: \"fadl\",\n      thin: \"fadt\"\n    },\n    sharp: {\n      solid: \"fass\",\n      regular: \"fasr\",\n      light: \"fasl\",\n      thin: \"fast\"\n    },\n    \"sharp-duotone\": {\n      solid: \"fasds\",\n      regular: \"fasdr\",\n      light: \"fasdl\",\n      thin: \"fasdt\"\n    }\n  };\nvar Ft = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"],\n  St = {\n    kit: {\n      fak: \"kit\",\n      \"fa-kit\": \"kit\"\n    },\n    \"kit-duotone\": {\n      fakd: \"kit-duotone\",\n      \"fa-kit-duotone\": \"kit-duotone\"\n    }\n  },\n  At = [\"kit\"];\nvar Ct = {\n  kit: {\n    \"fa-kit\": \"fak\"\n  },\n  \"kit-duotone\": {\n    \"fa-kit-duotone\": \"fakd\"\n  }\n};\nvar Lt = [\"fak\", \"fakd\"],\n  Wt = {\n    kit: {\n      fak: \"fa-kit\"\n    },\n    \"kit-duotone\": {\n      fakd: \"fa-kit-duotone\"\n    }\n  };\nvar Et = {\n    kit: {\n      kit: \"fak\"\n    },\n    \"kit-duotone\": {\n      \"kit-duotone\": \"fakd\"\n    }\n  };\n\nvar t$1 = {\n    GROUP: \"duotone-group\",\n    SWAP_OPACITY: \"swap-opacity\",\n    PRIMARY: \"primary\",\n    SECONDARY: \"secondary\"\n  },\n  r$1 = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\nvar bt$1 = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"];\nvar Yt = {\n    \"Font Awesome Kit\": {\n      400: \"fak\",\n      normal: \"fak\"\n    },\n    \"Font Awesome Kit Duotone\": {\n      400: \"fakd\",\n      normal: \"fakd\"\n    }\n  };\nvar ua = {\n    classic: {\n      \"fa-brands\": \"fab\",\n      \"fa-duotone\": \"fad\",\n      \"fa-light\": \"fal\",\n      \"fa-regular\": \"far\",\n      \"fa-solid\": \"fas\",\n      \"fa-thin\": \"fat\"\n    },\n    duotone: {\n      \"fa-regular\": \"fadr\",\n      \"fa-light\": \"fadl\",\n      \"fa-thin\": \"fadt\"\n    },\n    sharp: {\n      \"fa-solid\": \"fass\",\n      \"fa-regular\": \"fasr\",\n      \"fa-light\": \"fasl\",\n      \"fa-thin\": \"fast\"\n    },\n    \"sharp-duotone\": {\n      \"fa-solid\": \"fasds\",\n      \"fa-regular\": \"fasdr\",\n      \"fa-light\": \"fasdl\",\n      \"fa-thin\": \"fasdt\"\n    }\n  },\n  I$1 = {\n    classic: [\"fas\", \"far\", \"fal\", \"fat\", \"fad\"],\n    duotone: [\"fadr\", \"fadl\", \"fadt\"],\n    sharp: [\"fass\", \"fasr\", \"fasl\", \"fast\"],\n    \"sharp-duotone\": [\"fasds\", \"fasdr\", \"fasdl\", \"fasdt\"]\n  },\n  ga = {\n    classic: {\n      fab: \"fa-brands\",\n      fad: \"fa-duotone\",\n      fal: \"fa-light\",\n      far: \"fa-regular\",\n      fas: \"fa-solid\",\n      fat: \"fa-thin\"\n    },\n    duotone: {\n      fadr: \"fa-regular\",\n      fadl: \"fa-light\",\n      fadt: \"fa-thin\"\n    },\n    sharp: {\n      fass: \"fa-solid\",\n      fasr: \"fa-regular\",\n      fasl: \"fa-light\",\n      fast: \"fa-thin\"\n    },\n    \"sharp-duotone\": {\n      fasds: \"fa-solid\",\n      fasdr: \"fa-regular\",\n      fasdl: \"fa-light\",\n      fasdt: \"fa-thin\"\n    }\n  },\n  x = [\"fa-solid\", \"fa-regular\", \"fa-light\", \"fa-thin\", \"fa-duotone\", \"fa-brands\"],\n  Ia = [\"fa\", \"fas\", \"far\", \"fal\", \"fat\", \"fad\", \"fadr\", \"fadl\", \"fadt\", \"fab\", \"fass\", \"fasr\", \"fasl\", \"fast\", \"fasds\", \"fasdr\", \"fasdl\", \"fasdt\", ...r$1, ...x],\n  m$1 = [\"solid\", \"regular\", \"light\", \"thin\", \"duotone\", \"brands\"],\n  c$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n  F$1 = c$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),\n  ma = [...Object.keys(I$1), ...m$1, \"2xs\", \"xs\", \"sm\", \"lg\", \"xl\", \"2xl\", \"beat\", \"border\", \"fade\", \"beat-fade\", \"bounce\", \"flip-both\", \"flip-horizontal\", \"flip-vertical\", \"flip\", \"fw\", \"inverse\", \"layers-counter\", \"layers-text\", \"layers\", \"li\", \"pull-left\", \"pull-right\", \"pulse\", \"rotate-180\", \"rotate-270\", \"rotate-90\", \"rotate-by\", \"shake\", \"spin-pulse\", \"spin-reverse\", \"spin\", \"stack-1x\", \"stack-2x\", \"stack\", \"ul\", t$1.GROUP, t$1.SWAP_OPACITY, t$1.PRIMARY, t$1.SECONDARY].concat(c$1.map(a => \"\".concat(a, \"x\"))).concat(F$1.map(a => \"w-\".concat(a)));\nvar wa = {\n    \"Font Awesome 5 Free\": {\n      900: \"fas\",\n      400: \"far\"\n    },\n    \"Font Awesome 5 Pro\": {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\"\n    },\n    \"Font Awesome 5 Brands\": {\n      400: \"fab\",\n      normal: \"fab\"\n    },\n    \"Font Awesome 5 Duotone\": {\n      900: \"fad\"\n    }\n  };\n\nconst NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nconst UNITS_IN_GRID = 16;\nconst DEFAULT_CSS_PREFIX = 'fa';\nconst DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nconst DATA_FA_I2SVG = 'data-fa-i2svg';\nconst DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nconst DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nconst DATA_PREFIX = 'data-prefix';\nconst DATA_ICON = 'data-icon';\nconst HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nconst MUTATION_APPROACH_ASYNC = 'async';\nconst TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nconst PRODUCTION = (() => {\n  try {\n    return process.env.NODE_ENV === 'production';\n  } catch (e$$1) {\n    return false;\n  }\n})();\nfunction familyProxy(obj) {\n  // Defaults to the classic family if family is not available\n  return new Proxy(obj, {\n    get(target, prop) {\n      return prop in target ? target[prop] : target[s];\n    }\n  });\n}\nconst _PREFIX_TO_STYLE = _objectSpread2({}, S);\n\n// We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n// {'fa-duotone': 'duotone'}\n_PREFIX_TO_STYLE[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  'fa-duotone': 'duotone'\n}), S[s]), St['kit']), St['kit-duotone']);\nconst PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\nconst _STYLE_TO_PREFIX = _objectSpread2({}, xt);\n\n// We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  duotone: 'fad'\n}), _STYLE_TO_PREFIX[s]), Et['kit']), Et['kit-duotone']);\nconst STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\nconst _PREFIX_TO_LONG_STYLE = _objectSpread2({}, ga);\n_PREFIX_TO_LONG_STYLE[s] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[s]), Wt['kit']);\nconst PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\nconst _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ua);\n_LONG_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[s]), Ct['kit']);\nconst LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\nconst ICON_SELECTION_SYNTAX_PATTERN = p; // eslint-disable-line no-useless-escape\n\nconst LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nconst FONT_FAMILY_PATTERN = g;\nconst _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, G);\nconst FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\nconst ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nconst DUOTONE_CLASSES = A;\nconst RESERVED_CLASSES = [...At, ...ma];\n\nconst initial = WINDOW.FontAwesomeConfig || {};\nfunction getAttrConfig(attr) {\n  var element = DOCUMENT.querySelector('script[' + attr + ']');\n  if (element) {\n    return element.getAttribute(attr);\n  }\n}\nfunction coerce(val) {\n  // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n  // We'll assume that this is an indication that it should be toggled to true\n  if (val === '') return true;\n  if (val === 'false') return false;\n  if (val === 'true') return true;\n  return val;\n}\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n  const attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n  attrs.forEach(_ref => {\n    let [attr, key] = _ref;\n    const val = coerce(getAttrConfig(attr));\n    if (val !== undefined && val !== null) {\n      initial[key] = val;\n    }\n  });\n}\nconst _default = {\n  styleDefault: 'solid',\n  familyDefault: s,\n  cssPrefix: DEFAULT_CSS_PREFIX,\n  replacementClass: DEFAULT_REPLACEMENT_CLASS,\n  autoReplaceSvg: true,\n  autoAddCss: true,\n  autoA11y: true,\n  searchPseudoElements: false,\n  observeMutations: true,\n  mutateApproach: 'async',\n  keepOriginalSource: true,\n  measurePerformance: false,\n  showMissingIcons: true\n};\n\n// familyPrefix is deprecated but we must still support it if present\nif (initial.familyPrefix) {\n  initial.cssPrefix = initial.familyPrefix;\n}\nconst _config = _objectSpread2(_objectSpread2({}, _default), initial);\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\nconst config = {};\nObject.keys(_default).forEach(key => {\n  Object.defineProperty(config, key, {\n    enumerable: true,\n    set: function (val) {\n      _config[key] = val;\n      _onChangeCb.forEach(cb => cb(config));\n    },\n    get: function () {\n      return _config[key];\n    }\n  });\n});\n\n// familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\nObject.defineProperty(config, 'familyPrefix', {\n  enumerable: true,\n  set: function (val) {\n    _config.cssPrefix = val;\n    _onChangeCb.forEach(cb => cb(config));\n  },\n  get: function () {\n    return _config.cssPrefix;\n  }\n});\nWINDOW.FontAwesomeConfig = config;\nconst _onChangeCb = [];\nfunction onChange(cb) {\n  _onChangeCb.push(cb);\n  return () => {\n    _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n  };\n}\n\nconst d$2 = UNITS_IN_GRID;\nconst meaninglessTransform = {\n  size: 16,\n  x: 0,\n  y: 0,\n  rotate: 0,\n  flipX: false,\n  flipY: false\n};\nfunction insertCss(css) {\n  if (!css || !IS_DOM) {\n    return;\n  }\n  const style = DOCUMENT.createElement('style');\n  style.setAttribute('type', 'text/css');\n  style.innerHTML = css;\n  const headChildren = DOCUMENT.head.childNodes;\n  let beforeChild = null;\n  for (let i = headChildren.length - 1; i > -1; i--) {\n    const child = headChildren[i];\n    const tagName = (child.tagName || '').toUpperCase();\n    if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n      beforeChild = child;\n    }\n  }\n  DOCUMENT.head.insertBefore(style, beforeChild);\n  return css;\n}\nconst idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n  let size = 12;\n  let id = '';\n  while (size-- > 0) {\n    id += idPool[Math.random() * 62 | 0];\n  }\n  return id;\n}\nfunction toArray(obj) {\n  const array = [];\n  for (let i = (obj || []).length >>> 0; i--;) {\n    array[i] = obj[i];\n  }\n  return array;\n}\nfunction classArray(node) {\n  if (node.classList) {\n    return toArray(node.classList);\n  } else {\n    return (node.getAttribute('class') || '').split(' ').filter(i => i);\n  }\n}\nfunction htmlEscape(str) {\n  return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nfunction joinAttributes(attributes) {\n  return Object.keys(attributes || {}).reduce((acc, attributeName) => {\n    return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n  }, '').trim();\n}\nfunction joinStyles(styles) {\n  return Object.keys(styles || {}).reduce((acc, styleName) => {\n    return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n  }, '');\n}\nfunction transformIsMeaningful(transform) {\n  return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n  let {\n    transform,\n    containerWidth,\n    iconWidth\n  } = _ref;\n  const outer = {\n    transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n  };\n  const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n  const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n  const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n  const inner = {\n    transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n  };\n  const path = {\n    transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n  };\n  return {\n    outer,\n    inner,\n    path\n  };\n}\nfunction transformForCss(_ref2) {\n  let {\n    transform,\n    width = UNITS_IN_GRID,\n    height = UNITS_IN_GRID,\n    startCentered = false\n  } = _ref2;\n  let val = '';\n  if (startCentered && IS_IE) {\n    val += \"translate(\".concat(transform.x / d$2 - width / 2, \"em, \").concat(transform.y / d$2 - height / 2, \"em) \");\n  } else if (startCentered) {\n    val += \"translate(calc(-50% + \".concat(transform.x / d$2, \"em), calc(-50% + \").concat(transform.y / d$2, \"em)) \");\n  } else {\n    val += \"translate(\".concat(transform.x / d$2, \"em, \").concat(transform.y / d$2, \"em) \");\n  }\n  val += \"scale(\".concat(transform.size / d$2 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d$2 * (transform.flipY ? -1 : 1), \") \");\n  val += \"rotate(\".concat(transform.rotate, \"deg) \");\n  return val;\n}\n\nvar baseStyles = \":root, :host {\\n  --fa-font-solid: normal 900 1em/1 \\\"Font Awesome 6 Free\\\";\\n  --fa-font-regular: normal 400 1em/1 \\\"Font Awesome 6 Free\\\";\\n  --fa-font-light: normal 300 1em/1 \\\"Font Awesome 6 Pro\\\";\\n  --fa-font-thin: normal 100 1em/1 \\\"Font Awesome 6 Pro\\\";\\n  --fa-font-duotone: normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-duotone-regular: normal 400 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-duotone-light: normal 300 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-duotone-thin: normal 100 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-brands: normal 400 1em/1 \\\"Font Awesome 6 Brands\\\";\\n  --fa-font-sharp-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-thin: normal 100 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-duotone-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n  --fa-font-sharp-duotone-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n  --fa-font-sharp-duotone-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n  --fa-font-sharp-duotone-thin: normal 100 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n}\\n\\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\\n  overflow: visible;\\n  box-sizing: content-box;\\n}\\n\\n.svg-inline--fa {\\n  display: var(--fa-display, inline-block);\\n  height: 1em;\\n  overflow: visible;\\n  vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-2xs {\\n  vertical-align: 0.1em;\\n}\\n.svg-inline--fa.fa-xs {\\n  vertical-align: 0em;\\n}\\n.svg-inline--fa.fa-sm {\\n  vertical-align: -0.0714285705em;\\n}\\n.svg-inline--fa.fa-lg {\\n  vertical-align: -0.2em;\\n}\\n.svg-inline--fa.fa-xl {\\n  vertical-align: -0.25em;\\n}\\n.svg-inline--fa.fa-2xl {\\n  vertical-align: -0.3125em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n  margin-right: var(--fa-pull-margin, 0.3em);\\n  width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n  margin-left: var(--fa-pull-margin, 0.3em);\\n  width: auto;\\n}\\n.svg-inline--fa.fa-li {\\n  width: var(--fa-li-width, 2em);\\n  top: 0.25em;\\n}\\n.svg-inline--fa.fa-fw {\\n  width: var(--fa-fw-width, 1.25em);\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n  display: inline-block;\\n  position: absolute;\\n  text-align: center;\\n}\\n\\n.fa-layers {\\n  display: inline-block;\\n  height: 1em;\\n  position: relative;\\n  text-align: center;\\n  vertical-align: -0.125em;\\n  width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n  transform-origin: center center;\\n}\\n\\n.fa-layers-text {\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n  transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n  background-color: var(--fa-counter-background-color, #ff253a);\\n  border-radius: var(--fa-counter-border-radius, 1em);\\n  box-sizing: border-box;\\n  color: var(--fa-inverse, #fff);\\n  line-height: var(--fa-counter-line-height, 1);\\n  max-width: var(--fa-counter-max-width, 5em);\\n  min-width: var(--fa-counter-min-width, 1.5em);\\n  overflow: hidden;\\n  padding: var(--fa-counter-padding, 0.25em 0.5em);\\n  right: var(--fa-right, 0);\\n  text-overflow: ellipsis;\\n  top: var(--fa-top, 0);\\n  transform: scale(var(--fa-counter-scale, 0.25));\\n  transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n  bottom: var(--fa-bottom, 0);\\n  right: var(--fa-right, 0);\\n  top: auto;\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n  bottom: var(--fa-bottom, 0);\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: auto;\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n  top: var(--fa-top, 0);\\n  right: var(--fa-right, 0);\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: var(--fa-top, 0);\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: top left;\\n}\\n\\n.fa-1x {\\n  font-size: 1em;\\n}\\n\\n.fa-2x {\\n  font-size: 2em;\\n}\\n\\n.fa-3x {\\n  font-size: 3em;\\n}\\n\\n.fa-4x {\\n  font-size: 4em;\\n}\\n\\n.fa-5x {\\n  font-size: 5em;\\n}\\n\\n.fa-6x {\\n  font-size: 6em;\\n}\\n\\n.fa-7x {\\n  font-size: 7em;\\n}\\n\\n.fa-8x {\\n  font-size: 8em;\\n}\\n\\n.fa-9x {\\n  font-size: 9em;\\n}\\n\\n.fa-10x {\\n  font-size: 10em;\\n}\\n\\n.fa-2xs {\\n  font-size: 0.625em;\\n  line-height: 0.1em;\\n  vertical-align: 0.225em;\\n}\\n\\n.fa-xs {\\n  font-size: 0.75em;\\n  line-height: 0.0833333337em;\\n  vertical-align: 0.125em;\\n}\\n\\n.fa-sm {\\n  font-size: 0.875em;\\n  line-height: 0.0714285718em;\\n  vertical-align: 0.0535714295em;\\n}\\n\\n.fa-lg {\\n  font-size: 1.25em;\\n  line-height: 0.05em;\\n  vertical-align: -0.075em;\\n}\\n\\n.fa-xl {\\n  font-size: 1.5em;\\n  line-height: 0.0416666682em;\\n  vertical-align: -0.125em;\\n}\\n\\n.fa-2xl {\\n  font-size: 2em;\\n  line-height: 0.03125em;\\n  vertical-align: -0.1875em;\\n}\\n\\n.fa-fw {\\n  text-align: center;\\n  width: 1.25em;\\n}\\n\\n.fa-ul {\\n  list-style-type: none;\\n  margin-left: var(--fa-li-margin, 2.5em);\\n  padding-left: 0;\\n}\\n.fa-ul > li {\\n  position: relative;\\n}\\n\\n.fa-li {\\n  left: calc(-1 * var(--fa-li-width, 2em));\\n  position: absolute;\\n  text-align: center;\\n  width: var(--fa-li-width, 2em);\\n  line-height: inherit;\\n}\\n\\n.fa-border {\\n  border-color: var(--fa-border-color, #eee);\\n  border-radius: var(--fa-border-radius, 0.1em);\\n  border-style: var(--fa-border-style, solid);\\n  border-width: var(--fa-border-width, 0.08em);\\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\\n}\\n\\n.fa-pull-left {\\n  float: left;\\n  margin-right: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-pull-right {\\n  float: right;\\n  margin-left: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-beat {\\n  animation-name: fa-beat;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-bounce {\\n  animation-name: fa-bounce;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n}\\n\\n.fa-fade {\\n  animation-name: fa-fade;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-beat-fade {\\n  animation-name: fa-beat-fade;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-flip {\\n  animation-name: fa-flip;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-shake {\\n  animation-name: fa-shake;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin {\\n  animation-name: fa-spin;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 2s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-reverse {\\n  --fa-animation-direction: reverse;\\n}\\n\\n.fa-pulse,\\n.fa-spin-pulse {\\n  animation-name: fa-spin;\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, steps(8));\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n  .fa-beat,\\n.fa-bounce,\\n.fa-fade,\\n.fa-beat-fade,\\n.fa-flip,\\n.fa-pulse,\\n.fa-shake,\\n.fa-spin,\\n.fa-spin-pulse {\\n    animation-delay: -1ms;\\n    animation-duration: 1ms;\\n    animation-iteration-count: 1;\\n    transition-delay: 0s;\\n    transition-duration: 0s;\\n  }\\n}\\n@keyframes fa-beat {\\n  0%, 90% {\\n    transform: scale(1);\\n  }\\n  45% {\\n    transform: scale(var(--fa-beat-scale, 1.25));\\n  }\\n}\\n@keyframes fa-bounce {\\n  0% {\\n    transform: scale(1, 1) translateY(0);\\n  }\\n  10% {\\n    transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n  }\\n  30% {\\n    transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n  }\\n  50% {\\n    transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n  }\\n  57% {\\n    transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n  }\\n  64% {\\n    transform: scale(1, 1) translateY(0);\\n  }\\n  100% {\\n    transform: scale(1, 1) translateY(0);\\n  }\\n}\\n@keyframes fa-fade {\\n  50% {\\n    opacity: var(--fa-fade-opacity, 0.4);\\n  }\\n}\\n@keyframes fa-beat-fade {\\n  0%, 100% {\\n    opacity: var(--fa-beat-fade-opacity, 0.4);\\n    transform: scale(1);\\n  }\\n  50% {\\n    opacity: 1;\\n    transform: scale(var(--fa-beat-fade-scale, 1.125));\\n  }\\n}\\n@keyframes fa-flip {\\n  50% {\\n    transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n  }\\n}\\n@keyframes fa-shake {\\n  0% {\\n    transform: rotate(-15deg);\\n  }\\n  4% {\\n    transform: rotate(15deg);\\n  }\\n  8%, 24% {\\n    transform: rotate(-18deg);\\n  }\\n  12%, 28% {\\n    transform: rotate(18deg);\\n  }\\n  16% {\\n    transform: rotate(-22deg);\\n  }\\n  20% {\\n    transform: rotate(22deg);\\n  }\\n  32% {\\n    transform: rotate(-12deg);\\n  }\\n  36% {\\n    transform: rotate(12deg);\\n  }\\n  40%, 100% {\\n    transform: rotate(0deg);\\n  }\\n}\\n@keyframes fa-spin {\\n  0% {\\n    transform: rotate(0deg);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n}\\n.fa-rotate-90 {\\n  transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n  transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n  transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n  transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n  transform: scale(1, -1);\\n}\\n\\n.fa-flip-both,\\n.fa-flip-horizontal.fa-flip-vertical {\\n  transform: scale(-1, -1);\\n}\\n\\n.fa-rotate-by {\\n  transform: rotate(var(--fa-rotate-angle, 0));\\n}\\n\\n.fa-stack {\\n  display: inline-block;\\n  vertical-align: middle;\\n  height: 2em;\\n  position: relative;\\n  width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n  z-index: var(--fa-stack-z-index, auto);\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n  height: 1em;\\n  width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n  height: 2em;\\n  width: 2.5em;\\n}\\n\\n.fa-inverse {\\n  color: var(--fa-inverse, #fff);\\n}\\n\\n.sr-only,\\n.fa-sr-only {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border-width: 0;\\n}\\n\\n.sr-only-focusable:not(:focus),\\n.fa-sr-only-focusable:not(:focus) {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border-width: 0;\\n}\\n\\n.svg-inline--fa .fa-primary {\\n  fill: var(--fa-primary-color, currentColor);\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n  fill: var(--fa-secondary-color, currentColor);\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n  fill: black;\\n}\";\n\nfunction css() {\n  const dcp = DEFAULT_CSS_PREFIX;\n  const drc = DEFAULT_REPLACEMENT_CLASS;\n  const fp = config.cssPrefix;\n  const rc = config.replacementClass;\n  let s = baseStyles;\n  if (fp !== dcp || rc !== drc) {\n    const dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n    const customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n    const rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n    s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n  }\n  return s;\n}\nlet _cssInserted = false;\nfunction ensureCss() {\n  if (config.autoAddCss && !_cssInserted) {\n    insertCss(css());\n    _cssInserted = true;\n  }\n}\nvar InjectCSS = {\n  mixout() {\n    return {\n      dom: {\n        css,\n        insertCss: ensureCss\n      }\n    };\n  },\n  hooks() {\n    return {\n      beforeDOMElementCreation() {\n        ensureCss();\n      },\n      beforeI2svg() {\n        ensureCss();\n      }\n    };\n  }\n};\n\nconst w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nconst functions = [];\nconst listener = function () {\n  DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n  loaded = 1;\n  functions.map(fn => fn());\n};\nlet loaded = false;\nif (IS_DOM) {\n  loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n  if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\nfunction domready (fn) {\n  if (!IS_DOM) return;\n  loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nfunction toHtml(abstractNodes) {\n  const {\n    tag,\n    attributes = {},\n    children = []\n  } = abstractNodes;\n  if (typeof abstractNodes === 'string') {\n    return htmlEscape(abstractNodes);\n  } else {\n    return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n  }\n}\n\nfunction iconFromMapping(mapping, prefix, iconName) {\n  if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n    return {\n      prefix,\n      iconName,\n      icon: mapping[prefix][iconName]\n    };\n  }\n}\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n  return function (a, b, c, d) {\n    return func.call(thisContext, a, b, c, d);\n  };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param  {Object}   subject      The object to reduce over.\n * @param  {Function} fn           The reducer function.\n * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n * @param  {Object}   thisContext  The context for the reducer.\n * @return {mixed}                 The final result.\n */\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n  var keys = Object.keys(subject),\n    length = keys.length,\n    iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n    i,\n    key,\n    result;\n  if (initialValue === undefined) {\n    i = 1;\n    result = subject[keys[0]];\n  } else {\n    i = 0;\n    result = initialValue;\n  }\n  for (; i < length; i++) {\n    key = keys[i];\n    result = iterator(result, subject[key], key, subject);\n  }\n  return result;\n};\n\n/**\n * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n *\n * Copyright Mathias Bynens <https://mathiasbynens.be/>\n\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nfunction ucs2decode(string) {\n  const output = [];\n  let counter = 0;\n  const length = string.length;\n  while (counter < length) {\n    const value = string.charCodeAt(counter++);\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      const extra = string.charCodeAt(counter++);\n      if ((extra & 0xFC00) == 0xDC00) {\n        // eslint-disable-line eqeqeq\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n}\nfunction toHex(unicode) {\n  const decoded = ucs2decode(unicode);\n  return decoded.length === 1 ? decoded[0].toString(16) : null;\n}\nfunction codePointAt(string, index) {\n  const size = string.length;\n  let first = string.charCodeAt(index);\n  let second;\n  if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n    second = string.charCodeAt(index + 1);\n    if (second >= 0xDC00 && second <= 0xDFFF) {\n      return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n    }\n  }\n  return first;\n}\n\nfunction normalizeIcons(icons) {\n  return Object.keys(icons).reduce((acc, iconName) => {\n    const icon = icons[iconName];\n    const expanded = !!icon.icon;\n    if (expanded) {\n      acc[icon.iconName] = icon.icon;\n    } else {\n      acc[iconName] = icon;\n    }\n    return acc;\n  }, {});\n}\nfunction defineIcons(prefix, icons) {\n  let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const {\n    skipHooks = false\n  } = params;\n  const normalized = normalizeIcons(icons);\n  if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n    namespace.hooks.addPack(prefix, normalizeIcons(icons));\n  } else {\n    namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n  }\n\n  /**\n   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n   * for `fas` so we'll ease the upgrade process for our users by automatically defining\n   * this as well.\n   */\n  if (prefix === 'fas') {\n    defineIcons('fa', icons);\n  }\n}\n\nconst duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*path d=\"([^\"]+)\"/, {\n  d1: 1,\n  d2: 2\n}), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\".*path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n  cls1: 1,\n  d1: 2,\n  cls2: 3,\n  d2: 4\n}), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n  cls1: 1,\n  d1: 2\n})];\n\nconst {\n  styles,\n  shims\n} = namespace;\nconst FAMILY_NAMES = Object.keys(PREFIX_TO_LONG_STYLE);\nconst PREFIXES_FOR_FAMILY = FAMILY_NAMES.reduce((acc, familyId) => {\n  acc[familyId] = Object.keys(PREFIX_TO_LONG_STYLE[familyId]);\n  return acc;\n}, {});\nlet _defaultUsablePrefix = null;\nlet _byUnicode = {};\nlet _byLigature = {};\nlet _byOldName = {};\nlet _byOldUnicode = {};\nlet _byAlias = {};\nfunction isReserved(name) {\n  return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction getIconName(cssPrefix, cls) {\n  const parts = cls.split('-');\n  const prefix = parts[0];\n  const iconName = parts.slice(1).join('-');\n  if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n    return iconName;\n  } else {\n    return null;\n  }\n}\nconst build = () => {\n  const lookup = reducer => {\n    return reduce(styles, (o$$1, style, prefix) => {\n      o$$1[prefix] = reduce(style, reducer, {});\n      return o$$1;\n    }, {});\n  };\n  _byUnicode = lookup((acc, icon, iconName) => {\n    if (icon[3]) {\n      acc[icon[3]] = iconName;\n    }\n    if (icon[2]) {\n      const aliases = icon[2].filter(a$$1 => {\n        return typeof a$$1 === 'number';\n      });\n      aliases.forEach(alias => {\n        acc[alias.toString(16)] = iconName;\n      });\n    }\n    return acc;\n  });\n  _byLigature = lookup((acc, icon, iconName) => {\n    acc[iconName] = iconName;\n    if (icon[2]) {\n      const aliases = icon[2].filter(a$$1 => {\n        return typeof a$$1 === 'string';\n      });\n      aliases.forEach(alias => {\n        acc[alias] = iconName;\n      });\n    }\n    return acc;\n  });\n  _byAlias = lookup((acc, icon, iconName) => {\n    const aliases = icon[2];\n    acc[iconName] = iconName;\n    aliases.forEach(alias => {\n      acc[alias] = iconName;\n    });\n    return acc;\n  });\n\n  // If we have a Kit, we can't determine if regular is available since we\n  // could be auto-fetching it. We'll have to assume that it is available.\n  const hasRegular = 'far' in styles || config.autoFetchSvg;\n  const shimLookups = reduce(shims, (acc, shim) => {\n    const maybeNameMaybeUnicode = shim[0];\n    let prefix = shim[1];\n    const iconName = shim[2];\n    if (prefix === 'far' && !hasRegular) {\n      prefix = 'fas';\n    }\n    if (typeof maybeNameMaybeUnicode === 'string') {\n      acc.names[maybeNameMaybeUnicode] = {\n        prefix,\n        iconName\n      };\n    }\n    if (typeof maybeNameMaybeUnicode === 'number') {\n      acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n        prefix,\n        iconName\n      };\n    }\n    return acc;\n  }, {\n    names: {},\n    unicodes: {}\n  });\n  _byOldName = shimLookups.names;\n  _byOldUnicode = shimLookups.unicodes;\n  _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n    family: config.familyDefault\n  });\n};\nonChange(c$$1 => {\n  _defaultUsablePrefix = getCanonicalPrefix(c$$1.styleDefault, {\n    family: config.familyDefault\n  });\n});\nbuild();\nfunction byUnicode(prefix, unicode) {\n  return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n  return (_byLigature[prefix] || {})[ligature];\n}\nfunction byAlias(prefix, alias) {\n  return (_byAlias[prefix] || {})[alias];\n}\nfunction byOldName(name) {\n  return _byOldName[name] || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction byOldUnicode(unicode) {\n  const oldUnicode = _byOldUnicode[unicode];\n  const newUnicode = byUnicode('fas', unicode);\n  return oldUnicode || (newUnicode ? {\n    prefix: 'fas',\n    iconName: newUnicode\n  } : null) || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction getDefaultUsablePrefix() {\n  return _defaultUsablePrefix;\n}\nconst emptyCanonicalIcon = () => {\n  return {\n    prefix: null,\n    iconName: null,\n    rest: []\n  };\n};\nfunction getFamilyId(values) {\n  let family = s;\n  const famProps = FAMILY_NAMES.reduce((acc, familyId) => {\n    acc[familyId] = \"\".concat(config.cssPrefix, \"-\").concat(familyId);\n    return acc;\n  }, {});\n  L.forEach(familyId => {\n    if (values.includes(famProps[familyId]) || values.some(v$$1 => PREFIXES_FOR_FAMILY[familyId].includes(v$$1))) {\n      family = familyId;\n    }\n  });\n  return family;\n}\nfunction getCanonicalPrefix(styleOrPrefix) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    family = s\n  } = params;\n  const style = PREFIX_TO_STYLE[family][styleOrPrefix];\n\n  // handles the exception of passing in only a family of 'duotone' with no style\n  if (family === t && !styleOrPrefix) {\n    return 'fad';\n  }\n  const prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n  const defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n  const result = prefix || defined || null;\n  return result;\n}\nfunction moveNonFaClassesToRest(classNames) {\n  let rest = [];\n  let iconName = null;\n  classNames.forEach(cls => {\n    const result = getIconName(config.cssPrefix, cls);\n    if (result) {\n      iconName = result;\n    } else if (cls) {\n      rest.push(cls);\n    }\n  });\n  return {\n    iconName,\n    rest\n  };\n}\nfunction sortedUniqueValues(arr) {\n  return arr.sort().filter((value, index, arr) => {\n    return arr.indexOf(value) === index;\n  });\n}\nfunction getCanonicalIcon(values) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    skipLookups = false\n  } = params;\n  let givenPrefix = null;\n  const faCombinedClasses = Ia.concat(bt$1);\n  const faStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => faCombinedClasses.includes(cls)));\n  const nonStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => !Ia.includes(cls)));\n  const faStyles = faStyleOrFamilyClasses.filter(cls => {\n    givenPrefix = cls;\n    return !P.includes(cls);\n  });\n  const [styleFromValues = null] = faStyles;\n  const family = getFamilyId(faStyleOrFamilyClasses);\n  const canonical = _objectSpread2(_objectSpread2({}, moveNonFaClassesToRest(nonStyleOrFamilyClasses)), {}, {\n    prefix: getCanonicalPrefix(styleFromValues, {\n      family\n    })\n  });\n  return _objectSpread2(_objectSpread2(_objectSpread2({}, canonical), getDefaultCanonicalPrefix({\n    values,\n    family,\n    styles,\n    config,\n    canonical,\n    givenPrefix\n  })), applyShimAndAlias(skipLookups, givenPrefix, canonical));\n}\nfunction applyShimAndAlias(skipLookups, givenPrefix, canonical) {\n  let {\n    prefix,\n    iconName\n  } = canonical;\n  if (skipLookups || !prefix || !iconName) {\n    return {\n      prefix,\n      iconName\n    };\n  }\n  const shim = givenPrefix === 'fa' ? byOldName(iconName) : {};\n  const aliasIconName = byAlias(prefix, iconName);\n  iconName = shim.iconName || aliasIconName || iconName;\n  prefix = shim.prefix || prefix;\n  if (prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n    // Allow a fallback from the regular style to solid if regular is not available\n    // but only if we aren't auto-fetching SVGs\n    prefix = 'fas';\n  }\n  return {\n    prefix,\n    iconName\n  };\n}\nconst newCanonicalFamilies = L.filter(familyId => {\n  return familyId !== s || familyId !== t;\n});\nconst newCanonicalStyles = Object.keys(ga).filter(key => key !== s).map(key => Object.keys(ga[key])).flat();\nfunction getDefaultCanonicalPrefix(prefixOptions) {\n  const {\n    values,\n    family,\n    canonical,\n    givenPrefix = '',\n    styles = {},\n    config: config$$1 = {}\n  } = prefixOptions;\n  const isDuotoneFamily = family === t;\n  const valuesHasDuotone = values.includes('fa-duotone') || values.includes('fad');\n  const defaultFamilyIsDuotone = config$$1.familyDefault === 'duotone';\n  const canonicalPrefixIsDuotone = canonical.prefix === 'fad' || canonical.prefix === 'fa-duotone';\n  if (!isDuotoneFamily && (valuesHasDuotone || defaultFamilyIsDuotone || canonicalPrefixIsDuotone)) {\n    canonical.prefix = 'fad';\n  }\n  if (values.includes('fa-brands') || values.includes('fab')) {\n    canonical.prefix = 'fab';\n  }\n  if (!canonical.prefix && newCanonicalFamilies.includes(family)) {\n    const validPrefix = Object.keys(styles).find(key => newCanonicalStyles.includes(key));\n    if (validPrefix || config$$1.autoFetchSvg) {\n      const defaultPrefix = pt.get(family).defaultShortPrefixId;\n      canonical.prefix = defaultPrefix;\n      canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n    }\n  }\n  if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n    // The fa prefix is not canonical. So if it has made it through until this point\n    // we will shift it to the correct prefix.\n    canonical.prefix = getDefaultUsablePrefix() || 'fas';\n  }\n  return canonical;\n}\n\nclass Library {\n  constructor() {\n    this.definitions = {};\n  }\n  add() {\n    for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n      definitions[_key] = arguments[_key];\n    }\n    const additions = definitions.reduce(this._pullDefinitions, {});\n    Object.keys(additions).forEach(key => {\n      this.definitions[key] = _objectSpread2(_objectSpread2({}, this.definitions[key] || {}), additions[key]);\n      defineIcons(key, additions[key]);\n\n      // TODO can we stop doing this? We can't get the icons by 'fa-solid' any longer so this probably needs to change\n      const longPrefix = PREFIX_TO_LONG_STYLE[s][key];\n      if (longPrefix) defineIcons(longPrefix, additions[key]);\n      build();\n    });\n  }\n  reset() {\n    this.definitions = {};\n  }\n  _pullDefinitions(additions, definition) {\n    const normalized = definition.prefix && definition.iconName && definition.icon ? {\n      0: definition\n    } : definition;\n    Object.keys(normalized).map(key => {\n      const {\n        prefix,\n        iconName,\n        icon\n      } = normalized[key];\n      const aliases = icon[2];\n      if (!additions[prefix]) additions[prefix] = {};\n      if (aliases.length > 0) {\n        aliases.forEach(alias => {\n          if (typeof alias === 'string') {\n            additions[prefix][alias] = icon;\n          }\n        });\n      }\n      additions[prefix][iconName] = icon;\n    });\n    return additions;\n  }\n}\n\nlet _plugins = [];\nlet _hooks = {};\nconst providers = {};\nconst defaultProviderKeys = Object.keys(providers);\nfunction registerPlugins(nextPlugins, _ref) {\n  let {\n    mixoutsTo: obj\n  } = _ref;\n  _plugins = nextPlugins;\n  _hooks = {};\n  Object.keys(providers).forEach(k => {\n    if (defaultProviderKeys.indexOf(k) === -1) {\n      delete providers[k];\n    }\n  });\n  _plugins.forEach(plugin => {\n    const mixout = plugin.mixout ? plugin.mixout() : {};\n    Object.keys(mixout).forEach(tk => {\n      if (typeof mixout[tk] === 'function') {\n        obj[tk] = mixout[tk];\n      }\n      if (typeof mixout[tk] === 'object') {\n        Object.keys(mixout[tk]).forEach(sk => {\n          if (!obj[tk]) {\n            obj[tk] = {};\n          }\n          obj[tk][sk] = mixout[tk][sk];\n        });\n      }\n    });\n    if (plugin.hooks) {\n      const hooks = plugin.hooks();\n      Object.keys(hooks).forEach(hook => {\n        if (!_hooks[hook]) {\n          _hooks[hook] = [];\n        }\n        _hooks[hook].push(hooks[hook]);\n      });\n    }\n    if (plugin.provides) {\n      plugin.provides(providers);\n    }\n  });\n  return obj;\n}\nfunction chainHooks(hook, accumulator) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n  const hookFns = _hooks[hook] || [];\n  hookFns.forEach(hookFn => {\n    accumulator = hookFn.apply(null, [accumulator, ...args]); // eslint-disable-line no-useless-call\n  });\n  return accumulator;\n}\nfunction callHooks(hook) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n  const hookFns = _hooks[hook] || [];\n  hookFns.forEach(hookFn => {\n    hookFn.apply(null, args);\n  });\n  return undefined;\n}\nfunction callProvided() {\n  const hook = arguments[0];\n  const args = Array.prototype.slice.call(arguments, 1);\n  return providers[hook] ? providers[hook].apply(null, args) : undefined;\n}\n\nfunction findIconDefinition(iconLookup) {\n  if (iconLookup.prefix === 'fa') {\n    iconLookup.prefix = 'fas';\n  }\n  let {\n    iconName\n  } = iconLookup;\n  const prefix = iconLookup.prefix || getDefaultUsablePrefix();\n  if (!iconName) return;\n  iconName = byAlias(prefix, iconName) || iconName;\n  return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\nconst library = new Library();\nconst noAuto = () => {\n  config.autoReplaceSvg = false;\n  config.observeMutations = false;\n  callHooks('noAuto');\n};\nconst dom = {\n  i2svg: function () {\n    let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (IS_DOM) {\n      callHooks('beforeI2svg', params);\n      callProvided('pseudoElements2svg', params);\n      return callProvided('i2svg', params);\n    } else {\n      return Promise.reject(new Error('Operation requires a DOM of some kind.'));\n    }\n  },\n  watch: function () {\n    let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const {\n      autoReplaceSvgRoot\n    } = params;\n    if (config.autoReplaceSvg === false) {\n      config.autoReplaceSvg = true;\n    }\n    config.observeMutations = true;\n    domready(() => {\n      autoReplace({\n        autoReplaceSvgRoot\n      });\n      callHooks('watch', params);\n    });\n  }\n};\nconst parse = {\n  icon: icon => {\n    if (icon === null) {\n      return null;\n    }\n    if (typeof icon === 'object' && icon.prefix && icon.iconName) {\n      return {\n        prefix: icon.prefix,\n        iconName: byAlias(icon.prefix, icon.iconName) || icon.iconName\n      };\n    }\n    if (Array.isArray(icon) && icon.length === 2) {\n      const iconName = icon[1].indexOf('fa-') === 0 ? icon[1].slice(3) : icon[1];\n      const prefix = getCanonicalPrefix(icon[0]);\n      return {\n        prefix,\n        iconName: byAlias(prefix, iconName) || iconName\n      };\n    }\n    if (typeof icon === 'string' && (icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n      const canonicalIcon = getCanonicalIcon(icon.split(' '), {\n        skipLookups: true\n      });\n      return {\n        prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n        iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n      };\n    }\n    if (typeof icon === 'string') {\n      const prefix = getDefaultUsablePrefix();\n      return {\n        prefix,\n        iconName: byAlias(prefix, icon) || icon\n      };\n    }\n  }\n};\nconst api = {\n  noAuto,\n  config,\n  dom,\n  parse,\n  library,\n  findIconDefinition,\n  toHtml\n};\nconst autoReplace = function () {\n  let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  const {\n    autoReplaceSvgRoot = DOCUMENT\n  } = params;\n  if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n    node: autoReplaceSvgRoot\n  });\n};\n\nfunction domVariants(val, abstractCreator) {\n  Object.defineProperty(val, 'abstract', {\n    get: abstractCreator\n  });\n  Object.defineProperty(val, 'html', {\n    get: function () {\n      return val.abstract.map(a => toHtml(a));\n    }\n  });\n  Object.defineProperty(val, 'node', {\n    get: function () {\n      if (!IS_DOM) return;\n      const container = DOCUMENT.createElement('div');\n      container.innerHTML = val.html;\n      return container.children;\n    }\n  });\n  return val;\n}\n\nfunction asIcon (_ref) {\n  let {\n    children,\n    main,\n    mask,\n    attributes,\n    styles,\n    transform\n  } = _ref;\n  if (transformIsMeaningful(transform) && main.found && !mask.found) {\n    const {\n      width,\n      height\n    } = main;\n    const offset = {\n      x: width / height / 2,\n      y: 0.5\n    };\n    attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n      'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n    }));\n  }\n  return [{\n    tag: 'svg',\n    attributes,\n    children\n  }];\n}\n\nfunction asSymbol (_ref) {\n  let {\n    prefix,\n    iconName,\n    children,\n    attributes,\n    symbol\n  } = _ref;\n  const id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n  return [{\n    tag: 'svg',\n    attributes: {\n      style: 'display: none;'\n    },\n    children: [{\n      tag: 'symbol',\n      attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n        id\n      }),\n      children\n    }]\n  }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n  const {\n    icons: {\n      main,\n      mask\n    },\n    prefix,\n    iconName,\n    transform,\n    symbol,\n    title,\n    maskId,\n    titleId,\n    extra,\n    watchable = false\n  } = params;\n  const {\n    width,\n    height\n  } = mask.found ? mask : main;\n  const isUploadedIcon = Lt.includes(prefix);\n  const attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(c$$1 => extra.classes.indexOf(c$$1) === -1).filter(c$$1 => c$$1 !== '' || !!c$$1).concat(extra.classes).join(' ');\n  let content = {\n    children: [],\n    attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n      'data-prefix': prefix,\n      'data-icon': iconName,\n      'class': attrClass,\n      'role': extra.attributes.role || 'img',\n      'xmlns': 'http://www.w3.org/2000/svg',\n      'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n    })\n  };\n  const uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n    width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n  } : {};\n  if (watchable) {\n    content.attributes[DATA_FA_I2SVG] = '';\n  }\n  if (title) {\n    content.children.push({\n      tag: 'title',\n      attributes: {\n        id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n      },\n      children: [title]\n    });\n    delete content.attributes.title;\n  }\n  const args = _objectSpread2(_objectSpread2({}, content), {}, {\n    prefix,\n    iconName,\n    main,\n    mask,\n    maskId,\n    transform,\n    symbol,\n    styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n  });\n  const {\n    children,\n    attributes\n  } = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n    children: [],\n    attributes: {}\n  } : callProvided('generateAbstractIcon', args) || {\n    children: [],\n    attributes: {}\n  };\n  args.children = children;\n  args.attributes = attributes;\n  if (symbol) {\n    return asSymbol(args);\n  } else {\n    return asIcon(args);\n  }\n}\nfunction makeLayersTextAbstract(params) {\n  const {\n    content,\n    width,\n    height,\n    transform,\n    title,\n    extra,\n    watchable = false\n  } = params;\n  const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n    'title': title\n  } : {}), {}, {\n    'class': extra.classes.join(' ')\n  });\n  if (watchable) {\n    attributes[DATA_FA_I2SVG] = '';\n  }\n  const styles = _objectSpread2({}, extra.styles);\n  if (transformIsMeaningful(transform)) {\n    styles['transform'] = transformForCss({\n      transform,\n      startCentered: true,\n      width,\n      height\n    });\n    styles['-webkit-transform'] = styles['transform'];\n  }\n  const styleString = joinStyles(styles);\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n  const val = [];\n  val.push({\n    tag: 'span',\n    attributes,\n    children: [content]\n  });\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n  return val;\n}\nfunction makeLayersCounterAbstract(params) {\n  const {\n    content,\n    title,\n    extra\n  } = params;\n  const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n    'title': title\n  } : {}), {}, {\n    'class': extra.classes.join(' ')\n  });\n  const styleString = joinStyles(extra.styles);\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n  const val = [];\n  val.push({\n    tag: 'span',\n    attributes,\n    children: [content]\n  });\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n  return val;\n}\n\nconst {\n  styles: styles$1\n} = namespace;\nfunction asFoundIcon(icon) {\n  const width = icon[0];\n  const height = icon[1];\n  const [vectorData] = icon.slice(4);\n  let element = null;\n  if (Array.isArray(vectorData)) {\n    element = {\n      tag: 'g',\n      attributes: {\n        class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n      },\n      children: [{\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n          fill: 'currentColor',\n          d: vectorData[0]\n        }\n      }, {\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n          fill: 'currentColor',\n          d: vectorData[1]\n        }\n      }]\n    };\n  } else {\n    element = {\n      tag: 'path',\n      attributes: {\n        fill: 'currentColor',\n        d: vectorData\n      }\n    };\n  }\n  return {\n    found: true,\n    width,\n    height,\n    icon: element\n  };\n}\nconst missingIconResolutionMixin = {\n  found: false,\n  width: 512,\n  height: 512\n};\nfunction maybeNotifyMissing(iconName, prefix) {\n  if (!PRODUCTION && !config.showMissingIcons && iconName) {\n    console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n  }\n}\nfunction findIcon(iconName, prefix) {\n  let givenPrefix = prefix;\n  if (prefix === 'fa' && config.styleDefault !== null) {\n    prefix = getDefaultUsablePrefix();\n  }\n  return new Promise((resolve, reject) => {\n    if (givenPrefix === 'fa') {\n      const shim = byOldName(iconName) || {};\n      iconName = shim.iconName || iconName;\n      prefix = shim.prefix || prefix;\n    }\n    if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n      const icon = styles$1[prefix][iconName];\n      return resolve(asFoundIcon(icon));\n    }\n    maybeNotifyMissing(iconName, prefix);\n    resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n      icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n    }));\n  });\n}\n\nconst noop$1 = () => {};\nconst p$2 = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n  mark: noop$1,\n  measure: noop$1\n};\nconst preamble = \"FA \\\"6.7.2\\\"\";\nconst begin = name => {\n  p$2.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n  return () => end(name);\n};\nconst end = name => {\n  p$2.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n  p$2.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\nvar perf = {\n  begin,\n  end\n};\n\nconst noop$2 = () => {};\nfunction isWatched(node) {\n  const i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n  return typeof i2svg === 'string';\n}\nfunction hasPrefixAndIcon(node) {\n  const prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n  const icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n  return prefix && icon;\n}\nfunction hasBeenReplaced(node) {\n  return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n}\nfunction getMutator() {\n  if (config.autoReplaceSvg === true) {\n    return mutators.replace;\n  }\n  const mutator = mutators[config.autoReplaceSvg];\n  return mutator || mutators.replace;\n}\nfunction createElementNS(tag) {\n  return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n}\nfunction createElement(tag) {\n  return DOCUMENT.createElement(tag);\n}\nfunction convertSVG(abstractObj) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    ceFn = abstractObj.tag === 'svg' ? createElementNS : createElement\n  } = params;\n  if (typeof abstractObj === 'string') {\n    return DOCUMENT.createTextNode(abstractObj);\n  }\n  const tag = ceFn(abstractObj.tag);\n  Object.keys(abstractObj.attributes || []).forEach(function (key) {\n    tag.setAttribute(key, abstractObj.attributes[key]);\n  });\n  const children = abstractObj.children || [];\n  children.forEach(function (child) {\n    tag.appendChild(convertSVG(child, {\n      ceFn\n    }));\n  });\n  return tag;\n}\nfunction nodeAsComment(node) {\n  let comment = \" \".concat(node.outerHTML, \" \");\n  /* BEGIN.ATTRIBUTION */\n  comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n  /* END.ATTRIBUTION */\n  return comment;\n}\nconst mutators = {\n  replace: function (mutation) {\n    const node = mutation[0];\n    if (node.parentNode) {\n      mutation[1].forEach(abstract => {\n        node.parentNode.insertBefore(convertSVG(abstract), node);\n      });\n      if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n        let comment = DOCUMENT.createComment(nodeAsComment(node));\n        node.parentNode.replaceChild(comment, node);\n      } else {\n        node.remove();\n      }\n    }\n  },\n  nest: function (mutation) {\n    const node = mutation[0];\n    const abstract = mutation[1];\n\n    // If we already have a replaced node we do not want to continue nesting within it.\n    // Short-circuit to the standard replacement\n    if (~classArray(node).indexOf(config.replacementClass)) {\n      return mutators.replace(mutation);\n    }\n    const forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n    delete abstract[0].attributes.id;\n    if (abstract[0].attributes.class) {\n      const splitClasses = abstract[0].attributes.class.split(' ').reduce((acc, cls) => {\n        if (cls === config.replacementClass || cls.match(forSvg)) {\n          acc.toSvg.push(cls);\n        } else {\n          acc.toNode.push(cls);\n        }\n        return acc;\n      }, {\n        toNode: [],\n        toSvg: []\n      });\n      abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n      if (splitClasses.toNode.length === 0) {\n        node.removeAttribute('class');\n      } else {\n        node.setAttribute('class', splitClasses.toNode.join(' '));\n      }\n    }\n    const newInnerHTML = abstract.map(a => toHtml(a)).join('\\n');\n    node.setAttribute(DATA_FA_I2SVG, '');\n    node.innerHTML = newInnerHTML;\n  }\n};\nfunction performOperationSync(op) {\n  op();\n}\nfunction perform(mutations, callback) {\n  const callbackFunction = typeof callback === 'function' ? callback : noop$2;\n  if (mutations.length === 0) {\n    callbackFunction();\n  } else {\n    let frame = performOperationSync;\n    if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n      frame = WINDOW.requestAnimationFrame || performOperationSync;\n    }\n    frame(() => {\n      const mutator = getMutator();\n      const mark = perf.begin('mutate');\n      mutations.map(mutator);\n      mark();\n      callbackFunction();\n    });\n  }\n}\nlet disabled = false;\nfunction disableObservation() {\n  disabled = true;\n}\nfunction enableObservation() {\n  disabled = false;\n}\nlet mo = null;\nfunction observe(options) {\n  if (!MUTATION_OBSERVER) {\n    return;\n  }\n  if (!config.observeMutations) {\n    return;\n  }\n  const {\n    treeCallback = noop$2,\n    nodeCallback = noop$2,\n    pseudoElementsCallback = noop$2,\n    observeMutationsRoot = DOCUMENT\n  } = options;\n  mo = new MUTATION_OBSERVER(objects => {\n    if (disabled) return;\n    const defaultPrefix = getDefaultUsablePrefix();\n    toArray(objects).forEach(mutationRecord => {\n      if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n        if (config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target);\n        }\n        treeCallback(mutationRecord.target);\n      }\n      if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n        pseudoElementsCallback(mutationRecord.target.parentNode);\n      }\n      if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n        if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n          const {\n            prefix,\n            iconName\n          } = getCanonicalIcon(classArray(mutationRecord.target));\n          mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n          if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n        } else if (hasBeenReplaced(mutationRecord.target)) {\n          nodeCallback(mutationRecord.target);\n        }\n      }\n    });\n  });\n  if (!IS_DOM) return;\n  mo.observe(observeMutationsRoot, {\n    childList: true,\n    attributes: true,\n    characterData: true,\n    subtree: true\n  });\n}\nfunction disconnect() {\n  if (!mo) return;\n  mo.disconnect();\n}\n\nfunction styleParser (node) {\n  const style = node.getAttribute('style');\n  let val = [];\n  if (style) {\n    val = style.split(';').reduce((acc, style) => {\n      const styles = style.split(':');\n      const prop = styles[0];\n      const value = styles.slice(1);\n      if (prop && value.length > 0) {\n        acc[prop] = value.join(':').trim();\n      }\n      return acc;\n    }, {});\n  }\n  return val;\n}\n\nfunction classParser (node) {\n  const existingPrefix = node.getAttribute('data-prefix');\n  const existingIconName = node.getAttribute('data-icon');\n  const innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n  let val = getCanonicalIcon(classArray(node));\n  if (!val.prefix) {\n    val.prefix = getDefaultUsablePrefix();\n  }\n  if (existingPrefix && existingIconName) {\n    val.prefix = existingPrefix;\n    val.iconName = existingIconName;\n  }\n  if (val.iconName && val.prefix) {\n    return val;\n  }\n  if (val.prefix && innerText.length > 0) {\n    val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n  }\n  if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n    val.iconName = node.firstChild.data;\n  }\n  return val;\n}\n\nfunction attributesParser (node) {\n  const extraAttributes = toArray(node.attributes).reduce((acc, attr) => {\n    if (acc.name !== 'class' && acc.name !== 'style') {\n      acc[attr.name] = attr.value;\n    }\n    return acc;\n  }, {});\n  const title = node.getAttribute('title');\n  const titleId = node.getAttribute('data-fa-title-id');\n  if (config.autoA11y) {\n    if (title) {\n      extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n    } else {\n      extraAttributes['aria-hidden'] = 'true';\n      extraAttributes['focusable'] = 'false';\n    }\n  }\n  return extraAttributes;\n}\n\nfunction blankMeta() {\n  return {\n    iconName: null,\n    title: null,\n    titleId: null,\n    prefix: null,\n    transform: meaninglessTransform,\n    symbol: false,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    extra: {\n      classes: [],\n      styles: {},\n      attributes: {}\n    }\n  };\n}\nfunction parseMeta(node) {\n  let parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    styleParser: true\n  };\n  const {\n    iconName,\n    prefix,\n    rest: extraClasses\n  } = classParser(node);\n  const extraAttributes = attributesParser(node);\n  const pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n  let extraStyles = parser.styleParser ? styleParser(node) : [];\n  return _objectSpread2({\n    iconName,\n    title: node.getAttribute('title'),\n    titleId: node.getAttribute('data-fa-title-id'),\n    prefix,\n    transform: meaninglessTransform,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    symbol: false,\n    extra: {\n      classes: extraClasses,\n      styles: extraStyles,\n      attributes: extraAttributes\n    }\n  }, pluginMeta);\n}\n\nconst {\n  styles: styles$2\n} = namespace;\nfunction generateMutation(node) {\n  const nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n    styleParser: false\n  }) : parseMeta(node);\n  if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n    return callProvided('generateLayersText', node, nodeMeta);\n  } else {\n    return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n  }\n}\nfunction getKnownPrefixes() {\n  return [...Ft, ...Ia];\n}\nfunction onTree(root) {\n  let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  if (!IS_DOM) return Promise.resolve();\n  const htmlClassList = DOCUMENT.documentElement.classList;\n  const hclAdd = suffix => htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  const hclRemove = suffix => htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  const prefixes = config.autoFetchSvg ? getKnownPrefixes() : P.concat(Object.keys(styles$2));\n  if (!prefixes.includes('fa')) {\n    prefixes.push('fa');\n  }\n  const prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(p$$1 => \".\".concat(p$$1, \":not([\").concat(DATA_FA_I2SVG, \"])\"))).join(', ');\n  if (prefixesDomQuery.length === 0) {\n    return Promise.resolve();\n  }\n  let candidates = [];\n  try {\n    candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n  } catch (e$$1) {\n    // noop\n  }\n  if (candidates.length > 0) {\n    hclAdd('pending');\n    hclRemove('complete');\n  } else {\n    return Promise.resolve();\n  }\n  const mark = perf.begin('onTree');\n  const mutations = candidates.reduce((acc, node) => {\n    try {\n      const mutation = generateMutation(node);\n      if (mutation) {\n        acc.push(mutation);\n      }\n    } catch (e$$1) {\n      if (!PRODUCTION) {\n        if (e$$1.name === 'MissingIcon') {\n          console.error(e$$1);\n        }\n      }\n    }\n    return acc;\n  }, []);\n  return new Promise((resolve, reject) => {\n    Promise.all(mutations).then(resolvedMutations => {\n      perform(resolvedMutations, () => {\n        hclAdd('active');\n        hclAdd('complete');\n        hclRemove('pending');\n        if (typeof callback === 'function') callback();\n        mark();\n        resolve();\n      });\n    }).catch(e$$1 => {\n      mark();\n      reject(e$$1);\n    });\n  });\n}\nfunction onNode(node) {\n  let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  generateMutation(node).then(mutation => {\n    if (mutation) {\n      perform([mutation], callback);\n    }\n  });\n}\nfunction resolveIcons(next) {\n  return function (maybeIconDefinition) {\n    let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n    let {\n      mask\n    } = params;\n    if (mask) {\n      mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n    }\n    return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n      mask\n    }));\n  };\n}\nconst render = function (iconDefinition) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    transform = meaninglessTransform,\n    symbol = false,\n    mask = null,\n    maskId = null,\n    title = null,\n    titleId = null,\n    classes = [],\n    attributes = {},\n    styles = {}\n  } = params;\n  if (!iconDefinition) return;\n  const {\n    prefix,\n    iconName,\n    icon\n  } = iconDefinition;\n  return domVariants(_objectSpread2({\n    type: 'icon'\n  }, iconDefinition), () => {\n    callHooks('beforeDOMElementCreation', {\n      iconDefinition,\n      params\n    });\n    if (config.autoA11y) {\n      if (title) {\n        attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n      } else {\n        attributes['aria-hidden'] = 'true';\n        attributes['focusable'] = 'false';\n      }\n    }\n    return makeInlineSvgAbstract({\n      icons: {\n        main: asFoundIcon(icon),\n        mask: mask ? asFoundIcon(mask.icon) : {\n          found: false,\n          width: null,\n          height: null,\n          icon: {}\n        }\n      },\n      prefix,\n      iconName,\n      transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n      symbol,\n      title,\n      maskId,\n      titleId,\n      extra: {\n        attributes,\n        styles,\n        classes\n      }\n    });\n  });\n};\nvar ReplaceElements = {\n  mixout() {\n    return {\n      icon: resolveIcons(render)\n    };\n  },\n  hooks() {\n    return {\n      mutationObserverCallbacks(accumulator) {\n        accumulator.treeCallback = onTree;\n        accumulator.nodeCallback = onNode;\n        return accumulator;\n      }\n    };\n  },\n  provides(providers$$1) {\n    providers$$1.i2svg = function (params) {\n      const {\n        node = DOCUMENT,\n        callback = () => {}\n      } = params;\n      return onTree(node, callback);\n    };\n    providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n      const {\n        iconName,\n        title,\n        titleId,\n        prefix,\n        transform,\n        symbol,\n        mask,\n        maskId,\n        extra\n      } = nodeMeta;\n      return new Promise((resolve, reject) => {\n        Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n          found: false,\n          width: 512,\n          height: 512,\n          icon: {}\n        })]).then(_ref => {\n          let [main, mask] = _ref;\n          resolve([node, makeInlineSvgAbstract({\n            icons: {\n              main,\n              mask\n            },\n            prefix,\n            iconName,\n            transform,\n            symbol,\n            maskId,\n            title,\n            titleId,\n            extra,\n            watchable: true\n          })]);\n        }).catch(reject);\n      });\n    };\n    providers$$1.generateAbstractIcon = function (_ref2) {\n      let {\n        children,\n        attributes,\n        main,\n        transform,\n        styles\n      } = _ref2;\n      const styleString = joinStyles(styles);\n      if (styleString.length > 0) {\n        attributes['style'] = styleString;\n      }\n      let nextChild;\n      if (transformIsMeaningful(transform)) {\n        nextChild = callProvided('generateAbstractTransformGrouping', {\n          main,\n          transform,\n          containerWidth: main.width,\n          iconWidth: main.width\n        });\n      }\n      children.push(nextChild || main.icon);\n      return {\n        children,\n        attributes\n      };\n    };\n  }\n};\n\nvar Layers = {\n  mixout() {\n    return {\n      layer(assembler) {\n        let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        const {\n          classes = []\n        } = params;\n        return domVariants({\n          type: 'layer'\n        }, () => {\n          callHooks('beforeDOMElementCreation', {\n            assembler,\n            params\n          });\n          let children = [];\n          assembler(args => {\n            Array.isArray(args) ? args.map(a => {\n              children = children.concat(a.abstract);\n            }) : children = children.concat(args.abstract);\n          });\n          return [{\n            tag: 'span',\n            attributes: {\n              class: [\"\".concat(config.cssPrefix, \"-layers\"), ...classes].join(' ')\n            },\n            children\n          }];\n        });\n      }\n    };\n  }\n};\n\nvar LayersCounter = {\n  mixout() {\n    return {\n      counter(content) {\n        let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        const {\n          title = null,\n          classes = [],\n          attributes = {},\n          styles = {}\n        } = params;\n        return domVariants({\n          type: 'counter',\n          content\n        }, () => {\n          callHooks('beforeDOMElementCreation', {\n            content,\n            params\n          });\n          return makeLayersCounterAbstract({\n            content: content.toString(),\n            title,\n            extra: {\n              attributes,\n              styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-counter\"), ...classes]\n            }\n          });\n        });\n      }\n    };\n  }\n};\n\nvar LayersText = {\n  mixout() {\n    return {\n      text(content) {\n        let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        const {\n          transform = meaninglessTransform,\n          title = null,\n          classes = [],\n          attributes = {},\n          styles = {}\n        } = params;\n        return domVariants({\n          type: 'text',\n          content\n        }, () => {\n          callHooks('beforeDOMElementCreation', {\n            content,\n            params\n          });\n          return makeLayersTextAbstract({\n            content,\n            transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n            title,\n            extra: {\n              attributes,\n              styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-text\"), ...classes]\n            }\n          });\n        });\n      }\n    };\n  },\n  provides(providers$$1) {\n    providers$$1.generateLayersText = function (node, nodeMeta) {\n      const {\n        title,\n        transform,\n        extra\n      } = nodeMeta;\n      let width = null;\n      let height = null;\n      if (IS_IE) {\n        const computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n        const boundingClientRect = node.getBoundingClientRect();\n        width = boundingClientRect.width / computedFontSize;\n        height = boundingClientRect.height / computedFontSize;\n      }\n      if (config.autoA11y && !title) {\n        extra.attributes['aria-hidden'] = 'true';\n      }\n      return Promise.resolve([node, makeLayersTextAbstract({\n        content: node.innerHTML,\n        width,\n        height,\n        transform,\n        title,\n        extra,\n        watchable: true\n      })]);\n    };\n  }\n};\n\nconst CLEAN_CONTENT_PATTERN = new RegExp('\\u{22}', 'ug');\nconst SECONDARY_UNICODE_RANGE = [1105920, 1112319];\nconst _FONT_FAMILY_WEIGHT_TO_PREFIX = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  FontAwesome: {\n    normal: 'fas',\n    400: 'fas'\n  }\n}), lt), wa), Yt);\nconst FONT_FAMILY_WEIGHT_TO_PREFIX = Object.keys(_FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, key) => {\n  acc[key.toLowerCase()] = _FONT_FAMILY_WEIGHT_TO_PREFIX[key];\n  return acc;\n}, {});\nconst FONT_FAMILY_WEIGHT_FALLBACK = Object.keys(FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, fontFamily) => {\n  const weights = FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamily];\n  acc[fontFamily] = weights[900] || [...Object.entries(weights)][0][1];\n  return acc;\n}, {});\nfunction hexValueFromContent(content) {\n  const cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n  const codePoint = codePointAt(cleaned, 0);\n  const isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n  const isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n  return {\n    value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n    isSecondary: isPrependTen || isDoubled\n  };\n}\nfunction getPrefix(fontFamily, fontWeight) {\n  const fontFamilySanitized = fontFamily.replace(/^['\"]|['\"]$/g, '').toLowerCase();\n  const fontWeightInteger = parseInt(fontWeight);\n  const fontWeightSanitized = isNaN(fontWeightInteger) ? 'normal' : fontWeightInteger;\n  return (FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamilySanitized] || {})[fontWeightSanitized] || FONT_FAMILY_WEIGHT_FALLBACK[fontFamilySanitized];\n}\nfunction replaceForPosition(node, position) {\n  const pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n  return new Promise((resolve, reject) => {\n    if (node.getAttribute(pendingAttribute) !== null) {\n      // This node is already being processed\n      return resolve();\n    }\n    const children = toArray(node.children);\n    const alreadyProcessedPseudoElement = children.filter(c$$1 => c$$1.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position)[0];\n    const styles = WINDOW.getComputedStyle(node, position);\n    const fontFamily = styles.getPropertyValue('font-family');\n    const fontFamilyMatch = fontFamily.match(FONT_FAMILY_PATTERN);\n    const fontWeight = styles.getPropertyValue('font-weight');\n    const content = styles.getPropertyValue('content');\n    if (alreadyProcessedPseudoElement && !fontFamilyMatch) {\n      // If we've already processed it but the current computed style does not result in a font-family,\n      // that probably means that a class name that was previously present to make the icon has been\n      // removed. So we now should delete the icon.\n      node.removeChild(alreadyProcessedPseudoElement);\n      return resolve();\n    } else if (fontFamilyMatch && content !== 'none' && content !== '') {\n      const content = styles.getPropertyValue('content');\n      let prefix = getPrefix(fontFamily, fontWeight);\n      const {\n        value: hexValue,\n        isSecondary\n      } = hexValueFromContent(content);\n      const isV4 = fontFamilyMatch[0].startsWith('FontAwesome');\n      let iconName = byUnicode(prefix, hexValue);\n      let iconIdentifier = iconName;\n      if (isV4) {\n        const iconName4 = byOldUnicode(hexValue);\n        if (iconName4.iconName && iconName4.prefix) {\n          iconName = iconName4.iconName;\n          prefix = iconName4.prefix;\n        }\n      }\n\n      // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n      // already done so with the same prefix and iconName\n      if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n        node.setAttribute(pendingAttribute, iconIdentifier);\n        if (alreadyProcessedPseudoElement) {\n          // Delete the old one, since we're replacing it with a new one\n          node.removeChild(alreadyProcessedPseudoElement);\n        }\n        const meta = blankMeta();\n        const {\n          extra\n        } = meta;\n        extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n        findIcon(iconName, prefix).then(main => {\n          const abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n            icons: {\n              main,\n              mask: emptyCanonicalIcon()\n            },\n            prefix,\n            iconName: iconIdentifier,\n            extra,\n            watchable: true\n          }));\n          const element = DOCUMENT.createElementNS('http://www.w3.org/2000/svg', 'svg');\n          if (position === '::before') {\n            node.insertBefore(element, node.firstChild);\n          } else {\n            node.appendChild(element);\n          }\n          element.outerHTML = abstract.map(a$$1 => toHtml(a$$1)).join('\\n');\n          node.removeAttribute(pendingAttribute);\n          resolve();\n        }).catch(reject);\n      } else {\n        resolve();\n      }\n    } else {\n      resolve();\n    }\n  });\n}\nfunction replace(node) {\n  return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n}\nfunction processable(node) {\n  return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\nfunction searchPseudoElements(root) {\n  if (!IS_DOM) return;\n  return new Promise((resolve, reject) => {\n    const operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n    const end = perf.begin('searchPseudoElements');\n    disableObservation();\n    Promise.all(operations).then(() => {\n      end();\n      enableObservation();\n      resolve();\n    }).catch(() => {\n      end();\n      enableObservation();\n      reject();\n    });\n  });\n}\nvar PseudoElements = {\n  hooks() {\n    return {\n      mutationObserverCallbacks(accumulator) {\n        accumulator.pseudoElementsCallback = searchPseudoElements;\n        return accumulator;\n      }\n    };\n  },\n  provides(providers) {\n    providers.pseudoElements2svg = function (params) {\n      const {\n        node = DOCUMENT\n      } = params;\n      if (config.searchPseudoElements) {\n        searchPseudoElements(node);\n      }\n    };\n  }\n};\n\nlet _unwatched = false;\nvar MutationObserver$1 = {\n  mixout() {\n    return {\n      dom: {\n        unwatch() {\n          disableObservation();\n          _unwatched = true;\n        }\n      }\n    };\n  },\n  hooks() {\n    return {\n      bootstrap() {\n        observe(chainHooks('mutationObserverCallbacks', {}));\n      },\n      noAuto() {\n        disconnect();\n      },\n      watch(params) {\n        const {\n          observeMutationsRoot\n        } = params;\n        if (_unwatched) {\n          enableObservation();\n        } else {\n          observe(chainHooks('mutationObserverCallbacks', {\n            observeMutationsRoot\n          }));\n        }\n      }\n    };\n  }\n};\n\nconst parseTransformString = transformString => {\n  let transform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    flipX: false,\n    flipY: false,\n    rotate: 0\n  };\n  return transformString.toLowerCase().split(' ').reduce((acc, n) => {\n    const parts = n.toLowerCase().split('-');\n    const first = parts[0];\n    let rest = parts.slice(1).join('-');\n    if (first && rest === 'h') {\n      acc.flipX = true;\n      return acc;\n    }\n    if (first && rest === 'v') {\n      acc.flipY = true;\n      return acc;\n    }\n    rest = parseFloat(rest);\n    if (isNaN(rest)) {\n      return acc;\n    }\n    switch (first) {\n      case 'grow':\n        acc.size = acc.size + rest;\n        break;\n      case 'shrink':\n        acc.size = acc.size - rest;\n        break;\n      case 'left':\n        acc.x = acc.x - rest;\n        break;\n      case 'right':\n        acc.x = acc.x + rest;\n        break;\n      case 'up':\n        acc.y = acc.y - rest;\n        break;\n      case 'down':\n        acc.y = acc.y + rest;\n        break;\n      case 'rotate':\n        acc.rotate = acc.rotate + rest;\n        break;\n    }\n    return acc;\n  }, transform);\n};\nvar PowerTransforms = {\n  mixout() {\n    return {\n      parse: {\n        transform: transformString => {\n          return parseTransformString(transformString);\n        }\n      }\n    };\n  },\n  hooks() {\n    return {\n      parseNodeAttributes(accumulator, node) {\n        const transformString = node.getAttribute('data-fa-transform');\n        if (transformString) {\n          accumulator.transform = parseTransformString(transformString);\n        }\n        return accumulator;\n      }\n    };\n  },\n  provides(providers) {\n    providers.generateAbstractTransformGrouping = function (_ref) {\n      let {\n        main,\n        transform,\n        containerWidth,\n        iconWidth\n      } = _ref;\n      const outer = {\n        transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n      };\n      const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n      const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n      const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n      const inner = {\n        transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n      };\n      const path = {\n        transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n      };\n      const operations = {\n        outer,\n        inner,\n        path\n      };\n      return {\n        tag: 'g',\n        attributes: _objectSpread2({}, operations.outer),\n        children: [{\n          tag: 'g',\n          attributes: _objectSpread2({}, operations.inner),\n          children: [{\n            tag: main.icon.tag,\n            children: main.icon.children,\n            attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n          }]\n        }]\n      };\n    };\n  }\n};\n\nconst ALL_SPACE = {\n  x: 0,\n  y: 0,\n  width: '100%',\n  height: '100%'\n};\nfunction fillBlack(abstract) {\n  let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  if (abstract.attributes && (abstract.attributes.fill || force)) {\n    abstract.attributes.fill = 'black';\n  }\n  return abstract;\n}\nfunction deGroup(abstract) {\n  if (abstract.tag === 'g') {\n    return abstract.children;\n  } else {\n    return [abstract];\n  }\n}\nvar Masks = {\n  hooks() {\n    return {\n      parseNodeAttributes(accumulator, node) {\n        const maskData = node.getAttribute('data-fa-mask');\n        const mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(i => i.trim()));\n        if (!mask.prefix) {\n          mask.prefix = getDefaultUsablePrefix();\n        }\n        accumulator.mask = mask;\n        accumulator.maskId = node.getAttribute('data-fa-mask-id');\n        return accumulator;\n      }\n    };\n  },\n  provides(providers) {\n    providers.generateAbstractMask = function (_ref) {\n      let {\n        children,\n        attributes,\n        main,\n        mask,\n        maskId: explicitMaskId,\n        transform\n      } = _ref;\n      const {\n        width: mainWidth,\n        icon: mainPath\n      } = main;\n      const {\n        width: maskWidth,\n        icon: maskPath\n      } = mask;\n      const trans = transformForSvg({\n        transform,\n        containerWidth: maskWidth,\n        iconWidth: mainWidth\n      });\n      const maskRect = {\n        tag: 'rect',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          fill: 'white'\n        })\n      };\n      const maskInnerGroupChildrenMixin = mainPath.children ? {\n        children: mainPath.children.map(fillBlack)\n      } : {};\n      const maskInnerGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.inner),\n        children: [fillBlack(_objectSpread2({\n          tag: mainPath.tag,\n          attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n        }, maskInnerGroupChildrenMixin))]\n      };\n      const maskOuterGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.outer),\n        children: [maskInnerGroup]\n      };\n      const maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n      const clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n      const maskTag = {\n        tag: 'mask',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          id: maskId,\n          maskUnits: 'userSpaceOnUse',\n          maskContentUnits: 'userSpaceOnUse'\n        }),\n        children: [maskRect, maskOuterGroup]\n      };\n      const defs = {\n        tag: 'defs',\n        children: [{\n          tag: 'clipPath',\n          attributes: {\n            id: clipId\n          },\n          children: deGroup(maskPath)\n        }, maskTag]\n      };\n      children.push(defs, {\n        tag: 'rect',\n        attributes: _objectSpread2({\n          fill: 'currentColor',\n          'clip-path': \"url(#\".concat(clipId, \")\"),\n          mask: \"url(#\".concat(maskId, \")\")\n        }, ALL_SPACE)\n      });\n      return {\n        children,\n        attributes\n      };\n    };\n  }\n};\n\nvar MissingIconIndicator = {\n  provides(providers) {\n    let reduceMotion = false;\n    if (WINDOW.matchMedia) {\n      reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    }\n    providers.missingIconAbstract = function () {\n      const gChildren = [];\n      const FILL = {\n        fill: 'currentColor'\n      };\n      const ANIMATION_BASE = {\n        attributeType: 'XML',\n        repeatCount: 'indefinite',\n        dur: '2s'\n      };\n\n      // Ring\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n        })\n      });\n      const OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n        attributeName: 'opacity'\n      });\n      const dot = {\n        tag: 'circle',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          cx: '256',\n          cy: '364',\n          r: '28'\n        }),\n        children: []\n      };\n      if (!reduceMotion) {\n        dot.children.push({\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n            attributeName: 'r',\n            values: '28;14;28;28;14;28;'\n          })\n        }, {\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;1;1;0;1;'\n          })\n        });\n      }\n      gChildren.push(dot);\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          opacity: '1',\n          d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n        }),\n        children: reduceMotion ? [] : [{\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;0;0;0;1;'\n          })\n        }]\n      });\n      if (!reduceMotion) {\n        // Exclamation\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            opacity: '0',\n            d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n          }),\n          children: [{\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '0;0;1;1;0;0;'\n            })\n          }]\n        });\n      }\n      return {\n        tag: 'g',\n        attributes: {\n          'class': 'missing'\n        },\n        children: gChildren\n      };\n    };\n  }\n};\n\nvar SvgSymbols = {\n  hooks() {\n    return {\n      parseNodeAttributes(accumulator, node) {\n        const symbolData = node.getAttribute('data-fa-symbol');\n        const symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n        accumulator['symbol'] = symbol;\n        return accumulator;\n      }\n    };\n  }\n};\n\nvar plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\nregisterPlugins(plugins, {\n  mixoutsTo: api\n});\nconst noAuto$1 = api.noAuto;\nconst config$1 = api.config;\nconst library$1 = api.library;\nconst dom$1 = api.dom;\nconst parse$1 = api.parse;\nconst findIconDefinition$1 = api.findIconDefinition;\nconst toHtml$1 = api.toHtml;\nconst icon = api.icon;\nconst layer = api.layer;\nconst text = api.text;\nconst counter = api.counter;\n\nexport { noAuto$1 as noAuto, config$1 as config, library$1 as library, dom$1 as dom, parse$1 as parse, findIconDefinition$1 as findIconDefinition, toHtml$1 as toHtml, icon, layer, text, counter, api };\n", "/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\nconst prefix = \"fas\";\nconst fa0 = {\n  prefix: 'fas',\n  iconName: '0',\n  icon: [320, 512, [], \"30\", \"M0 192C0 103.6 71.6 32 160 32s160 71.6 160 160l0 128c0 88.4-71.6 160-160 160S0 408.4 0 320L0 192zM160 96c-53 0-96 43-96 96l0 128c0 53 43 96 96 96s96-43 96-96l0-128c0-53-43-96-96-96z\"]\n};\nconst fa1 = {\n  prefix: 'fas',\n  iconName: '1',\n  icon: [256, 512, [], \"31\", \"M160 64c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.8 1.6l-96 64C-.5 111.2-4.4 131 5.4 145.8s29.7 18.7 44.4 8.9L96 123.8 96 416l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-352z\"]\n};\nconst fa2 = {\n  prefix: 'fas',\n  iconName: '2',\n  icon: [320, 512, [], \"32\", \"M142.9 96c-21.5 0-42.2 8.5-57.4 23.8L54.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L40.2 74.5C67.5 47.3 104.4 32 142.9 32C223 32 288 97 288 177.1c0 38.5-15.3 75.4-42.5 102.6L109.3 416 288 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L200.2 234.5c15.2-15.2 23.8-35.9 23.8-57.4c0-44.8-36.3-81.1-81.1-81.1z\"]\n};\nconst fa3 = {\n  prefix: 'fas',\n  iconName: '3',\n  icon: [320, 512, [], \"33\", \"M0 64C0 46.3 14.3 32 32 32l240 0c13.2 0 25 8.1 29.8 20.4s1.5 26.3-8.2 35.2L162.3 208l21.7 0c75.1 0 136 60.9 136 136s-60.9 136-136 136l-78.6 0C63 480 24.2 456 5.3 418.1l-1.9-3.8c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l1.9 3.8c8.1 16.3 24.8 26.5 42.9 26.5l78.6 0c39.8 0 72-32.2 72-72s-32.2-72-72-72L80 272c-13.2 0-25-8.1-29.8-20.4s-1.5-26.3 8.2-35.2L189.7 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst fa4 = {\n  prefix: 'fas',\n  iconName: '4',\n  icon: [384, 512, [], \"34\", \"M189 77.6c7.5-16 .7-35.1-15.3-42.6s-35.1-.7-42.6 15.3L3 322.4c-4.7 9.9-3.9 21.5 1.9 30.8S21 368 32 368l224 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-144c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L82.4 304 189 77.6z\"]\n};\nconst fa5 = {\n  prefix: 'fas',\n  iconName: '5',\n  icon: [320, 512, [], \"35\", \"M32.5 58.3C35.3 43.1 48.5 32 64 32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L90.7 96 70.3 208 184 208c75.1 0 136 60.9 136 136s-60.9 136-136 136l-83.5 0c-39.4 0-75.4-22.3-93-57.5l-4.1-8.2c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l4.1 8.2c6.8 13.6 20.6 22.1 35.8 22.1l83.5 0c39.8 0 72-32.2 72-72s-32.2-72-72-72L32 272c-9.5 0-18.5-4.2-24.6-11.5s-8.6-16.9-6.9-26.2l32-176z\"]\n};\nconst fa6 = {\n  prefix: 'fas',\n  iconName: '6',\n  icon: [320, 512, [], \"36\", \"M232.4 84.7c11.4-13.5 9.7-33.7-3.8-45.1s-33.7-9.7-45.1 3.8L38.6 214.7C14.7 242.9 1.1 278.4 .1 315.2c0 1.4-.1 2.9-.1 4.3l0 .5c0 88.4 71.6 160 160 160s160-71.6 160-160c0-85.5-67.1-155.4-151.5-159.8l63.9-75.6zM256 320A96 96 0 1 1 64 320a96 96 0 1 1 192 0z\"]\n};\nconst fa7 = {\n  prefix: 'fas',\n  iconName: '7',\n  icon: [320, 512, [], \"37\", \"M0 64C0 46.3 14.3 32 32 32l256 0c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-224 384c-8.9 15.3-28.5 20.4-43.8 11.5s-20.4-28.5-11.5-43.8L232.3 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst fa8 = {\n  prefix: 'fas',\n  iconName: '8',\n  icon: [320, 512, [], \"38\", \"M304 160c0-70.7-57.3-128-128-128l-32 0C73.3 32 16 89.3 16 160c0 34.6 13.7 66 36 89C20.5 272.3 0 309.8 0 352c0 70.7 57.3 128 128 128l64 0c70.7 0 128-57.3 128-128c0-42.2-20.5-79.7-52-103c22.3-23 36-54.4 36-89zM176.1 288l15.9 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64s28.7-64 64-64l15.9 0c0 0 .1 0 .1 0l32 0c0 0 .1 0 .1 0zm0-64c0 0 0 0 0 0l-32 0c0 0 0 0 0 0c-35.3 0-64-28.7-64-64c0-35.3 28.7-64 64-64l32 0c35.3 0 64 28.7 64 64c0 35.3-28.6 64-64 64z\"]\n};\nconst fa9 = {\n  prefix: 'fas',\n  iconName: '9',\n  icon: [320, 512, [], \"39\", \"M64 192a96 96 0 1 0 192 0A96 96 0 1 0 64 192zm87.5 159.8C67.1 347.4 0 277.5 0 192C0 103.6 71.6 32 160 32s160 71.6 160 160c0 2.6-.1 5.3-.2 7.9c-1.7 35.7-15.2 70-38.4 97.4l-145 171.4c-11.4 13.5-31.6 15.2-45.1 3.8s-15.2-31.6-3.8-45.1l63.9-75.6z\"]\n};\nconst faFillDrip = {\n  prefix: 'fas',\n  iconName: 'fill-drip',\n  icon: [576, 512, [], \"f576\", \"M41.4 9.4C53.9-3.1 74.1-3.1 86.6 9.4L168 90.7l53.1-53.1c28.1-28.1 73.7-28.1 101.8 0L474.3 189.1c28.1 28.1 28.1 73.7 0 101.8L283.9 481.4c-37.5 37.5-98.3 37.5-135.8 0L30.6 363.9c-37.5-37.5-37.5-98.3 0-135.8L122.7 136 41.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm176 221.3L168 181.3 75.9 273.4c-4.2 4.2-7 9.3-8.4 14.6l319.2 0 42.3-42.3c3.1-3.1 3.1-8.2 0-11.3L277.7 82.9c-3.1-3.1-8.2-3.1-11.3 0L213.3 136l49.4 49.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0zM512 512c-35.3 0-64-28.7-64-64c0-25.2 32.6-79.6 51.2-108.7c6-9.4 19.5-9.4 25.5 0C543.4 368.4 576 422.8 576 448c0 35.3-28.7 64-64 64z\"]\n};\nconst faArrowsToCircle = {\n  prefix: 'fas',\n  iconName: 'arrows-to-circle',\n  icon: [640, 512, [], \"e4bd\", \"M9.4 9.4C21.9-3.1 42.1-3.1 54.6 9.4L160 114.7 160 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 4.3-.9 8.5-2.4 12.2c-1.6 3.7-3.8 7.3-6.9 10.3l-.1 .1c-3.1 3-6.6 5.3-10.3 6.9c-3.8 1.6-7.9 2.4-12.2 2.4l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.7 0L9.4 54.6C-3.1 42.1-3.1 21.9 9.4 9.4zM256 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM114.7 352L96 352c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0s0 0 0 0l.1 0c8.8 0 16.7 3.6 22.5 9.3l.1 .1c3 3.1 5.3 6.6 6.9 10.3c1.6 3.8 2.4 7.9 2.4 12.2l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L114.7 352zM416 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 18.7L585.4 9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 160l18.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-8.8 0-16.8-3.6-22.6-9.3l-.1-.1c-3-3.1-5.3-6.6-6.9-10.3s-2.4-7.8-2.4-12.2l0-.1s0 0 0 0l0-96zM525.3 352L630.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 397.3l0 18.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96s0 0 0 0l0-.1c0-4.3 .9-8.4 2.4-12.2c1.6-3.8 3.9-7.3 6.9-10.4c5.8-5.8 13.7-9.3 22.5-9.4l.1 0s0 0 0 0l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.7 0z\"]\n};\nconst faCircleChevronRight = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-right',\n  icon: [512, 512, [\"chevron-circle-right\"], \"f138\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM241 377c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L345 239c9.4 9.4 9.4 24.6 0 33.9L241 377z\"]\n};\nconst faChevronCircleRight = faCircleChevronRight;\nconst faAt = {\n  prefix: 'fas',\n  iconName: 'at',\n  icon: [512, 512, [61946], \"40\", \"M256 64C150 64 64 150 64 256s86 192 192 192c17.7 0 32 14.3 32 32s-14.3 32-32 32C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256l0 32c0 53-43 96-96 96c-29.3 0-55.6-13.2-73.2-33.9C320 371.1 289.5 384 256 384c-70.7 0-128-57.3-128-128s57.3-128 128-128c27.9 0 53.7 8.9 74.7 24.1c5.7-5 13.1-8.1 21.3-8.1c17.7 0 32 14.3 32 32l0 80 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32c0-106-86-192-192-192zm64 192a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faTrashCan = {\n  prefix: 'fas',\n  iconName: 'trash-can',\n  icon: [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M135.2 17.7C140.6 6.8 151.7 0 163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3zM32 128l384 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zm96 64c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16z\"]\n};\nconst faTrashAlt = faTrashCan;\nconst faTextHeight = {\n  prefix: 'fas',\n  iconName: 'text-height',\n  icon: [576, 512, [], \"f034\", \"M64 128l0-32 64 0 0 320-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-320 64 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48c0-26.5-21.5-48-48-48L160 32 48 32C21.5 32 0 53.5 0 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32zM502.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 192-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-192 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"]\n};\nconst faUserXmark = {\n  prefix: 'fas',\n  iconName: 'user-xmark',\n  icon: [640, 512, [\"user-times\"], \"f235\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM471 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faUserTimes = faUserXmark;\nconst faStethoscope = {\n  prefix: 'fas',\n  iconName: 'stethoscope',\n  icon: [576, 512, [129658], \"f0f1\", \"M142.4 21.9c5.6 16.8-3.5 34.9-20.2 40.5L96 71.1 96 192c0 53 43 96 96 96s96-43 96-96l0-120.9-26.1-8.7c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l26.1 8.7C334.4 19.1 352 43.5 352 71.1L352 192c0 77.2-54.6 141.6-127.3 156.7C231 404.6 278.4 448 336 448c61.9 0 112-50.1 112-112l0-70.7c-28.3-12.3-48-40.5-48-73.3c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 70.7c0 97.2-78.8 176-176 176c-92.9 0-168.9-71.9-175.5-163.1C87.2 334.2 32 269.6 32 192L32 71.1c0-27.5 17.6-52 43.8-60.7l26.1-8.7c16.8-5.6 34.9 3.5 40.5 20.2zM480 224a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faMessage = {\n  prefix: 'fas',\n  iconName: 'message',\n  icon: [512, 512, [\"comment-alt\"], \"f27a\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l96 0 0 80c0 6.1 3.4 11.6 8.8 14.3s11.9 2.1 16.8-1.5L309.3 416 448 416c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0z\"]\n};\nconst faCommentAlt = faMessage;\nconst faInfo = {\n  prefix: 'fas',\n  iconName: 'info',\n  icon: [192, 512, [], \"f129\", \"M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z\"]\n};\nconst faDownLeftAndUpRightToCenter = {\n  prefix: 'fas',\n  iconName: 'down-left-and-up-right-to-center',\n  icon: [512, 512, [\"compress-alt\"], \"f422\", \"M439 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39L439 7zM72 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39L73 505c-9.4 9.4-24.6 9.4-33.9 0L7 473c-9.4-9.4-9.4-24.6 0-33.9l87-87L55 313c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8z\"]\n};\nconst faCompressAlt = faDownLeftAndUpRightToCenter;\nconst faExplosion = {\n  prefix: 'fas',\n  iconName: 'explosion',\n  icon: [576, 512, [], \"e4e9\", \"M499.6 11.3c6.7-10.7 20.5-14.5 31.7-8.5s15.8 19.5 10.6 31L404.8 338.6c2.2 2.3 4.3 4.7 6.3 7.1l97.2-54.7c10.5-5.9 23.6-3.1 30.9 6.4s6.3 23-2.2 31.5l-87 87-71.4 0c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64l-79.6 0L42.3 363.7c-9.7-6.7-13.1-19.6-7.9-30.3s17.4-15.9 28.7-12.4l97.2 30.4c3-3.9 6.1-7.7 9.4-11.3L107.4 236.3c-6.1-10.1-3.9-23.1 5.1-30.7s22.2-7.5 31.1 .1L246 293.6c1.5-.4 3-.8 4.5-1.1l13.6-142.7c1.2-12.3 11.5-21.7 23.9-21.7s22.7 9.4 23.9 21.7l13.5 141.9L499.6 11.3zM64 448s0 0 0 0l448 0s0 0 0 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0zM288 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24z\"]\n};\nconst faFileLines = {\n  prefix: 'fas',\n  iconName: 'file-lines',\n  icon: [384, 512, [128441, 128462, 61686, \"file-alt\", \"file-text\"], \"f15c\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faFileAlt = faFileLines;\nconst faFileText = faFileLines;\nconst faWaveSquare = {\n  prefix: 'fas',\n  iconName: 'wave-square',\n  icon: [640, 512, [], \"f83e\", \"M128 64c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 352 96 0 0-160c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 160c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-352-96 0 0 160c0 17.7-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0 0-160z\"]\n};\nconst faRing = {\n  prefix: 'fas',\n  iconName: 'ring',\n  icon: [512, 512, [], \"f70b\", \"M64 208c0 7.8 4.4 18.7 17.1 30.3C126.5 214.1 188.9 200 256 200s129.5 14.1 174.9 38.3C443.6 226.7 448 215.8 448 208c0-12.3-10.8-32-47.9-50.6C364.9 139.8 314 128 256 128s-108.9 11.8-144.1 29.4C74.8 176 64 195.7 64 208zm192 40c-47 0-89.3 7.6-122.9 19.7C166.3 280.2 208.8 288 256 288s89.7-7.8 122.9-20.3C345.3 255.6 303 248 256 248zM0 208c0-49.6 39.4-85.8 83.3-107.8C129.1 77.3 190.3 64 256 64s126.9 13.3 172.7 36.2c43.9 22 83.3 58.2 83.3 107.8l0 96c0 49.6-39.4 85.8-83.3 107.8C382.9 434.7 321.7 448 256 448s-126.9-13.3-172.7-36.2C39.4 389.8 0 353.6 0 304l0-96z\"]\n};\nconst faBuildingUn = {\n  prefix: 'fas',\n  iconName: 'building-un',\n  icon: [384, 512, [], \"e4d9\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM237.3 71.1l34.7 52L272 80c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM112 80l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faDiceThree = {\n  prefix: 'fas',\n  iconName: 'dice-three',\n  icon: [448, 512, [9858], \"f527\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faCalendarDays = {\n  prefix: 'fas',\n  iconName: 'calendar-days',\n  icon: [448, 512, [\"calendar-alt\"], \"f073\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm64 80l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm128 0l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 400l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faCalendarAlt = faCalendarDays;\nconst faAnchorCircleCheck = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-check',\n  icon: [640, 512, [], \"e4aa\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faBuildingCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'building-circle-arrow-right',\n  icon: [640, 512, [], \"e4d1\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 184.2c-39.1 32.3-64 81.1-64 135.8c0 49.5 20.4 94.2 53.3 126.2C364.5 505.1 351.1 512 336 512l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm96 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm140.7-67.3c-6.2 6.2-6.2 16.4 0 22.6L521.4 352 432 352c-8.8 0-16 7.2-16 16s7.2 16 16 16l89.4 0-28.7 28.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56-56c6.2-6.2 6.2-16.4 0-22.6l-56-56c-6.2-6.2-16.4-6.2-22.6 0z\"]\n};\nconst faVolleyball = {\n  prefix: 'fas',\n  iconName: 'volleyball',\n  icon: [512, 512, [127952, \"volleyball-ball\"], \"f45f\", \"M511.8 267.4c-26.1 8.7-53.4 13.8-81 15.1c9.2-105.3-31.5-204.2-103.2-272.4C434.1 41.1 512 139.5 512 256c0 3.8-.1 7.6-.2 11.4zm-3.9 34.7c-5.8 32-17.6 62-34.2 88.7c-97.5 48.5-217.7 42.6-311.9-24.5c23.7-36.2 55.4-67.7 94.5-91.8c79.9 43.2 170.1 50.8 251.6 27.6zm-236-55.5c-2.5-90.9-41.1-172.7-101.9-231.7C196.8 5.2 225.8 0 256 0c2.7 0 5.3 0 7.9 .1c90.8 60.2 145.7 167.2 134.7 282.3c-43.1-2.4-86.4-14.1-126.8-35.9zM138 28.8c20.6 18.3 38.7 39.4 53.7 62.6C95.9 136.1 30.6 220.8 7.3 316.9C2.5 297.4 0 277 0 256C0 157.2 56 71.5 138 28.8zm69.6 90.5c19.5 38.6 31 81.9 32.3 127.7C162.5 294.6 110.9 368.9 90.2 451C66 430.4 45.6 405.4 30.4 377.2c6.7-108.7 71.9-209.9 177.1-257.9zM256 512c-50.7 0-98-14.7-137.8-40.2c5.6-27 14.8-53.1 27.4-77.7C232.2 454.6 338.1 468.8 433 441c-46 44-108.3 71-177 71z\"]\n};\nconst faVolleyballBall = faVolleyball;\nconst faArrowsUpToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-up-to-line',\n  icon: [576, 512, [], \"e4c2\", \"M32 96l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96zM9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 237.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96zm320 45.3c12.5 12.5 32.8 12.5 45.3 0L416 237.3 416 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3z\"]\n};\nconst faSortDown = {\n  prefix: 'fas',\n  iconName: 'sort-down',\n  icon: [320, 512, [\"sort-desc\"], \"f0dd\", \"M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z\"]\n};\nconst faSortDesc = faSortDown;\nconst faCircleMinus = {\n  prefix: 'fas',\n  iconName: 'circle-minus',\n  icon: [512, 512, [\"minus-circle\"], \"f056\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM184 232l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faMinusCircle = faCircleMinus;\nconst faDoorOpen = {\n  prefix: 'fas',\n  iconName: 'door-open',\n  icon: [576, 512, [], \"f52b\", \"M320 32c0-9.9-4.5-19.2-12.3-25.2S289.8-1.4 280.2 1l-179.9 45C79 51.3 64 70.5 64 92.5L64 448l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 192 0 32 0 0-32 0-448zM256 256c0 17.7-10.7 32-24 32s-24-14.3-24-32s10.7-32 24-32s24 14.3 24 32zm96-128l96 0 0 352c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-320c0-35.3-28.7-64-64-64l-96 0 0 64z\"]\n};\nconst faRightFromBracket = {\n  prefix: 'fas',\n  iconName: 'right-from-bracket',\n  icon: [512, 512, [\"sign-out-alt\"], \"f2f5\", \"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"]\n};\nconst faSignOutAlt = faRightFromBracket;\nconst faAtom = {\n  prefix: 'fas',\n  iconName: 'atom',\n  icon: [512, 512, [9883], \"f5d2\", \"M256 398.8c-11.8 5.1-23.4 9.7-34.9 13.5c16.7 33.8 31 35.7 34.9 35.7s18.1-1.9 34.9-35.7c-11.4-3.9-23.1-8.4-34.9-13.5zM446 256c33 45.2 44.3 90.9 23.6 128c-20.2 36.3-62.5 49.3-115.2 43.2c-22 52.1-55.6 84.8-98.4 84.8s-76.4-32.7-98.4-84.8c-52.7 6.1-95-6.8-115.2-43.2C21.7 346.9 33 301.2 66 256c-33-45.2-44.3-90.9-23.6-128c20.2-36.3 62.5-49.3 115.2-43.2C179.6 32.7 213.2 0 256 0s76.4 32.7 98.4 84.8c52.7-6.1 95 6.8 115.2 43.2c20.7 37.1 9.4 82.8-23.6 128zm-65.8 67.4c-1.7 14.2-3.9 28-6.7 41.2c31.8 1.4 38.6-8.7 40.2-11.7c2.3-4.2 7-17.9-11.9-48.1c-6.8 6.3-14 12.5-21.6 18.6zm-6.7-175.9c2.8 13.1 5 26.9 6.7 41.2c7.6 6.1 14.8 12.3 21.6 18.6c18.9-30.2 14.2-44 11.9-48.1c-1.6-2.9-8.4-13-40.2-11.7zM290.9 99.7C274.1 65.9 259.9 64 256 64s-18.1 1.9-34.9 35.7c11.4 3.9 23.1 8.4 34.9 13.5c11.8-5.1 23.4-9.7 34.9-13.5zm-159 88.9c1.7-14.3 3.9-28 6.7-41.2c-31.8-1.4-38.6 8.7-40.2 11.7c-2.3 4.2-7 17.9 11.9 48.1c6.8-6.3 14-12.5 21.6-18.6zM110.2 304.8C91.4 335 96 348.7 98.3 352.9c1.6 2.9 8.4 13 40.2 11.7c-2.8-13.1-5-26.9-6.7-41.2c-7.6-6.1-14.8-12.3-21.6-18.6zM336 256a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zm-80-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSoap = {\n  prefix: 'fas',\n  iconName: 'soap',\n  icon: [512, 512, [129532], \"e06e\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM416 32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 160c0 27.6-11.7 52.5-30.4 70.1C422.1 275.7 448 310.8 448 352c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96s43-96 96-96l88.4 0c-15.2-17-24.4-39.4-24.4-64L96 192c-53 0-96 43-96 96L0 416c0 53 43 96 96 96l320 0c53 0 96-43 96-96l0-128c0-53-43-96-96-96zM160 288c-35.3 0-64 28.7-64 64s28.7 64 64 64l192 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0-160 0z\"]\n};\nconst faIcons = {\n  prefix: 'fas',\n  iconName: 'icons',\n  icon: [512, 512, [\"heart-music-camera-bolt\"], \"f86d\", \"M500.3 7.3C507.7 13.3 512 22.4 512 32l0 144c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48l0-57L352 90.2 352 208c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48l0-96c0-15.3 10.8-28.4 25.7-31.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM74.7 304l11.8-17.8c5.9-8.9 15.9-14.2 26.6-14.2l61.7 0c10.7 0 20.7 5.3 26.6 14.2L213.3 304l26.7 0c26.5 0 48 21.5 48 48l0 112c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 352c0-26.5 21.5-48 48-48l26.7 0zM192 408a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM478.7 278.3L440.3 368l55.7 0c6.7 0 12.6 4.1 15 10.4s.6 13.3-4.4 17.7l-128 112c-5.6 4.9-13.9 5.3-19.9 .9s-8.2-12.4-5.3-19.2L391.7 400 336 400c-6.7 0-12.6-4.1-15-10.4s-.6-13.3 4.4-17.7l128-112c5.6-4.9 13.9-5.3 19.9-.9s8.2 12.4 5.3 19.2zm-339-59.2c-6.5 6.5-17 6.5-23 0L19.9 119.2c-28-29-26.5-76.9 5-103.9c27-23.5 68.4-19 93.4 6.5l10 10.5 9.5-10.5c25-25.5 65.9-30 93.9-6.5c31 27 32.5 74.9 4.5 103.9l-96.4 99.9z\"]\n};\nconst faHeartMusicCameraBolt = faIcons;\nconst faMicrophoneLinesSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-lines-slash',\n  icon: [640, 512, [\"microphone-alt-slash\"], \"f539\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24 0 16c0 21.2-5.1 41.1-14.2 58.7L416 300.8l0-44.8-57.1 0-34.5-27c2.9-3.1 7-5 11.6-5l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zm362.5 407l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c20.4-2.8 39.7-9.1 57.3-18.2z\"]\n};\nconst faMicrophoneAltSlash = faMicrophoneLinesSlash;\nconst faBridgeCircleCheck = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-check',\n  icon: [640, 512, [], \"e4c9\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faPumpMedical = {\n  prefix: 'fas',\n  iconName: 'pump-medical',\n  icon: [448, 512, [], \"e06a\", \"M128 32l0 96 128 0 0-32 60.1 0c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4L256 32c0-17.7-14.3-32-32-32L160 0c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512l186.4 0c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7l-149.1 0zM216 280l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faFingerprint = {\n  prefix: 'fas',\n  iconName: 'fingerprint',\n  icon: [512, 512, [], \"f577\", \"M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6c-15.2 5-18.7 23.7-8.3 35.9c7.1 8.3 18.8 10.8 29.4 7.9c10.6-2.9 21.8-4.4 33.4-4.4c70.7 0 128 57.3 128 128l0 24.9c0 25.2-1.5 50.3-4.4 75.3c-1.7 14.6 9.4 27.8 24.2 27.8c11.8 0 21.9-8.6 23.3-20.3c3.3-27.4 5-55 5-82.7l0-24.9c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4C93.7 178 80 215.4 80 256l0 24.9c0 24.2-2.6 48.4-7.8 71.9C68.8 368.4 80.1 384 96.1 384c10.5 0 19.9-7 22.2-17.3c6.4-28.1 9.7-56.8 9.7-85.8l0-24.9c0-27.2 8.5-52.4 22.9-73.1c7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96l0 24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7l0-24.9c0-28.7 23.3-52 52-52s52 23.3 52 52l0 24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1l0-24.9c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9l0-24.9z\"]\n};\nconst faHandPointRight = {\n  prefix: 'fas',\n  iconName: 'hand-point-right',\n  icon: [512, 512, [], \"f0a4\", \"M480 96c17.7 0 32 14.3 32 32s-14.3 32-32 32l-208 0 0-64 208 0zM320 288c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm64-64c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0c17.7 0 32 14.3 32 32zM288 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm-88-96l.6 0c-5.4 9.4-8.6 20.3-8.6 32c0 13.2 4 25.4 10.8 35.6C177.9 364.3 160 388.1 160 416c0 11.7 3.1 22.6 8.6 32l-8.6 0C71.6 448 0 376.4 0 288l0-61.7c0-42.4 16.9-83.1 46.9-113.1l11.6-11.6C82.5 77.5 115.1 64 149 64l27 0c35.3 0 64 28.7 64 64l0 88c0 22.1-17.9 40-40 40s-40-17.9-40-40l0-56c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 56c0 39.8 32.2 72 72 72z\"]\n};\nconst faMagnifyingGlassLocation = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-location',\n  icon: [512, 512, [\"search-location\"], \"f689\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM288 176c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 48.8 46.5 111.6 68.6 138.6c6 7.3 16.8 7.3 22.7 0c22.1-27 68.6-89.8 68.6-138.6zm-112 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faSearchLocation = faMagnifyingGlassLocation;\nconst faForwardStep = {\n  prefix: 'fas',\n  iconName: 'forward-step',\n  icon: [320, 512, [\"step-forward\"], \"f051\", \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416L0 96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241l0-145c0-17.7 14.3-32 32-32s32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-145-11.5 9.6-192 160z\"]\n};\nconst faStepForward = faForwardStep;\nconst faFaceSmileBeam = {\n  prefix: 'fas',\n  iconName: 'face-smile-beam',\n  icon: [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zm53.5-96.7s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faSmileBeam = faFaceSmileBeam;\nconst faFlagCheckered = {\n  prefix: 'fas',\n  iconName: 'flag-checkered',\n  icon: [448, 512, [127937], \"f11e\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 279.7c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80 0-66L0 64 0 32C0 14.3 14.3 0 32 0zM64 187.1l64-13.9 0 65.5L64 252.6 64 318l48.8-12.2c5.1-1.3 10.1-2.4 15.2-3.3l0-63.9 38.9-8.4c8.3-1.8 16.7-2.5 25.1-2.1l0-64c13.6 .4 27.2 2.6 40.4 6.4l23.6 6.9 0 66.7-41.7-12.3c-7.3-2.1-14.8-3.4-22.3-3.8l0 71.4c21.8 1.9 43.3 6.7 64 14.4l0-69.8 22.7 6.7c13.5 4 27.3 6.4 41.3 7.4l0-64.2c-7.8-.8-15.6-2.3-23.2-4.5l-40.8-12 0-62c-13-3.8-25.8-8.8-38.2-15c-8.2-4.1-16.9-7-25.8-8.8l0 72.4c-13-.4-26 .8-38.7 3.6L128 173.2 128 98 64 114l0 73.1zM320 335.7c16.8 1.5 33.9-.7 50-6.8l14-5.2 0-71.7-7.9 1.8c-18.4 4.3-37.3 5.7-56.1 4.5l0 77.4zm64-149.4l0-70.8c-20.9 6.1-42.4 9.1-64 9.1l0 69.4c13.9 1.4 28 .5 41.7-2.6l22.3-5.2z\"]\n};\nconst faFootball = {\n  prefix: 'fas',\n  iconName: 'football',\n  icon: [512, 512, [127944, \"football-ball\"], \"f44e\", \"M247.5 25.4c-13.5 3.3-26.4 7.2-38.6 11.7C142.9 61.6 96.7 103.6 66 153.6C47.8 183.4 35.1 215.9 26.9 249L264.5 486.6c13.5-3.3 26.4-7.2 38.6-11.7c66-24.5 112.2-66.5 142.9-116.5c18.3-29.8 30.9-62.3 39.1-95.3L247.5 25.4zM495.2 205.3c6.1-56.8 1.4-112.2-7.7-156.4c-2.7-12.9-13-22.9-26.1-25.1c-58.2-9.7-109.9-12-155.6-7.9L495.2 205.3zM206.1 496L16.8 306.7c-6.1 56.8-1.4 112.2 7.7 156.4c2.7 12.9 13 22.9 26.1 25.1c58.2 9.7 109.9 12 155.6 7.9zm54.6-331.3c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6z\"]\n};\nconst faFootballBall = faFootball;\nconst faSchoolCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'school-circle-exclamation',\n  icon: [640, 512, [], \"e56c\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faCrop = {\n  prefix: 'fas',\n  iconName: 'crop',\n  icon: [512, 512, [], \"f125\", \"M448 109.3l54.6-54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L402.7 64 160 64l0 64 178.7 0L128 338.7 128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l224 0 0-64-178.7 0L384 173.3 384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-274.7z\"]\n};\nconst faAnglesDown = {\n  prefix: 'fas',\n  iconName: 'angles-down',\n  icon: [448, 512, [\"angle-double-down\"], \"f103\", \"M246.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 402.7 361.4 265.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-160 160zm160-352l-160 160c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 210.7 361.4 73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3z\"]\n};\nconst faAngleDoubleDown = faAnglesDown;\nconst faUsersRectangle = {\n  prefix: 'fas',\n  iconName: 'users-rectangle',\n  icon: [640, 512, [], \"e594\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l448 0c53 0 96-43 96-96l0-320c0-53-43-96-96-96L96 0zM64 96c0-17.7 14.3-32 32-32l448 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32L64 96zm159.8 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0C119.9 256 96 279.9 96 309.3zM461.2 336l56.1 0c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6zM372 289c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-8.6-24.3-29.9-42.6-55.9-47zM512 176a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"]\n};\nconst faPeopleRoof = {\n  prefix: 'fas',\n  iconName: 'people-roof',\n  icon: [640, 512, [], \"e537\", \"M335.5 4l288 160c15.4 8.6 21 28.1 12.4 43.5s-28.1 21-43.5 12.4L320 68.6 47.5 220c-15.4 8.6-34.9 3-43.5-12.4s-3-34.9 12.4-43.5L304.5 4c9.7-5.4 21.4-5.4 31.1 0zM320 160a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM144 256a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm312 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM226.9 491.4L200 441.5l0 38.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-38.5L61.1 491.4c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l37.9-70.3c15.3-28.5 45.1-46.3 77.5-46.3l19.5 0c16.3 0 31.9 4.5 45.4 12.6l33.6-62.3c15.3-28.5 45.1-46.3 77.5-46.3l19.5 0c32.4 0 62.1 17.8 77.5 46.3l33.6 62.3c13.5-8.1 29.1-12.6 45.4-12.6l19.5 0c32.4 0 62.1 17.8 77.5 46.3l37.9 70.3c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8L552 441.5l0 38.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-38.5-26.9 49.9c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l36.3-67.5c-1.7-1.7-3.2-3.6-4.3-5.8L376 345.5l0 54.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-54.5-26.9 49.9c-1.2 2.2-2.6 4.1-4.3 5.8l36.3 67.5c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8z\"]\n};\nconst faPeopleLine = {\n  prefix: 'fas',\n  iconName: 'people-line',\n  icon: [640, 512, [], \"e534\", \"M360 72a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM144 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416zM496 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 217.5l0 54.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-54.5 26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 313.5l0 38.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3L18.9 340.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 313.5 88 352c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5z\"]\n};\nconst faBeerMugEmpty = {\n  prefix: 'fas',\n  iconName: 'beer-mug-empty',\n  icon: [512, 512, [\"beer\"], \"f0fc\", \"M32 64c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 32 51.2 0c42.4 0 76.8 34.4 76.8 76.8l0 102.1c0 30.4-17.9 57.9-45.6 70.2L384 381.7l0 34.3c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64L32 64zM384 311.6l56.4-25.1c4.6-2.1 7.6-6.6 7.6-11.7l0-102.1c0-7.1-5.7-12.8-12.8-12.8L384 160l0 151.6zM160 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224z\"]\n};\nconst faBeer = faBeerMugEmpty;\nconst faDiagramPredecessor = {\n  prefix: 'fas',\n  iconName: 'diagram-predecessor',\n  icon: [512, 512, [], \"e477\", \"M448 416l0-64L64 352l0 64 384 0zm0 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64zM288 160c0 35.3-28.7 64-64 64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l144 0 16 0 144 0c44.2 0 80 35.8 80 80l0 16 38.1 0c21.4 0 32.1 25.9 17 41L433 239c-9.4 9.4-24.6 9.4-33.9 0L329 169c-15.1-15.1-4.4-41 17-41l38.1 0 0-16c0-8.8-7.2-16-16-16l-80 0 0 64z\"]\n};\nconst faArrowUpLong = {\n  prefix: 'fas',\n  iconName: 'arrow-up-long',\n  icon: [384, 512, [\"long-arrow-up\"], \"f176\", \"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-370.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128z\"]\n};\nconst faLongArrowUp = faArrowUpLong;\nconst faFireFlameSimple = {\n  prefix: 'fas',\n  iconName: 'fire-flame-simple',\n  icon: [384, 512, [\"burn\"], \"f46a\", \"M372.5 256.5l-.7-1.9C337.8 160.8 282 76.5 209.1 8.5l-3.3-3C202.1 2 197.1 0 192 0s-10.1 2-13.8 5.5l-3.3 3C102 76.5 46.2 160.8 12.2 254.6l-.7 1.9C3.9 277.3 0 299.4 0 321.6C0 426.7 86.8 512 192 512s192-85.3 192-190.4c0-22.2-3.9-44.2-11.5-65.1zm-90.8 49.5c4.1 9.3 6.2 19.4 6.2 29.5c0 53-43 96.5-96 96.5s-96-43.5-96-96.5c0-10.1 2.1-20.3 6.2-29.5l1.9-4.3c15.8-35.4 37.9-67.7 65.3-95.1l8.9-8.9c3.6-3.6 8.5-5.6 13.6-5.6s10 2 13.6 5.6l8.9 8.9c27.4 27.4 49.6 59.7 65.3 95.1l1.9 4.3z\"]\n};\nconst faBurn = faFireFlameSimple;\nconst faPerson = {\n  prefix: 'fas',\n  iconName: 'person',\n  icon: [320, 512, [129485, \"male\"], \"f183\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z\"]\n};\nconst faMale = faPerson;\nconst faLaptop = {\n  prefix: 'fas',\n  iconName: 'laptop',\n  icon: [640, 512, [128187], \"f109\", \"M128 32C92.7 32 64 60.7 64 96l0 256 64 0 0-256 384 0 0 256 64 0 0-256c0-35.3-28.7-64-64-64L128 32zM19.2 384C8.6 384 0 392.6 0 403.2C0 445.6 34.4 480 76.8 480l486.4 0c42.4 0 76.8-34.4 76.8-76.8c0-10.6-8.6-19.2-19.2-19.2L19.2 384z\"]\n};\nconst faFileCsv = {\n  prefix: 'fas',\n  iconName: 'file-csv',\n  icon: [512, 512, [], \"f6dd\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 144-208 0c-35.3 0-64 28.7-64 64l0 144-48 0c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM200 352l16 0c22.1 0 40 17.9 40 40l0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8c0-4.4-3.6-8-8-8l-16 0c-4.4 0-8 3.6-8 8l0 80c0 4.4 3.6 8 8 8l16 0c4.4 0 8-3.6 8-8l0-8c0-8.8 7.2-16 16-16s16 7.2 16 16l0 8c0 22.1-17.9 40-40 40l-16 0c-22.1 0-40-17.9-40-40l0-80c0-22.1 17.9-40 40-40zm133.1 0l34.9 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-34.9 0c-7.2 0-13.1 5.9-13.1 13.1c0 5.2 3 9.9 7.8 12l37.4 16.6c16.3 7.2 26.8 23.4 26.8 41.2c0 24.9-20.2 45.1-45.1 45.1L304 512c-8.8 0-16-7.2-16-16s7.2-16 16-16l42.9 0c7.2 0 13.1-5.9 13.1-13.1c0-5.2-3-9.9-7.8-12l-37.4-16.6c-16.3-7.2-26.8-23.4-26.8-41.2c0-24.9 20.2-45.1 45.1-45.1zm98.9 0c8.8 0 16 7.2 16 16l0 31.6c0 23 5.5 45.6 16 66c10.5-20.3 16-42.9 16-66l0-31.6c0-8.8 7.2-16 16-16s16 7.2 16 16l0 31.6c0 34.7-10.3 68.7-29.6 97.6l-5.1 7.7c-3 4.5-8 7.1-13.3 7.1s-10.3-2.7-13.3-7.1l-5.1-7.7c-19.3-28.9-29.6-62.9-29.6-97.6l0-31.6c0-8.8 7.2-16 16-16z\"]\n};\nconst faMenorah = {\n  prefix: 'fas',\n  iconName: 'menorah',\n  icon: [640, 512, [], \"f676\", \"M20.8 7.4C22.8 2.9 27.1 0 32 0s9.2 2.9 11.2 7.4L61.3 49.7c1.8 4.1 2.7 8.6 2.7 13.1L64 64c0 17.7-14.3 32-32 32S0 81.7 0 64l0-1.2c0-4.5 .9-8.9 2.7-13.1L20.8 7.4zm96 0C118.8 2.9 123.1 0 128 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L116.8 7.4zm77.8 42.4L212.8 7.4C214.8 2.9 219.1 0 224 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM308.8 7.4C310.8 2.9 315.1 0 320 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L308.8 7.4zm77.8 42.4L404.8 7.4C406.8 2.9 411.1 0 416 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM500.8 7.4C502.8 2.9 507.1 0 512 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L500.8 7.4zm77.8 42.4L596.8 7.4C598.8 2.9 603.1 0 608 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM32 128c17.7 0 32 14.3 32 32l0 128c0 17.7 14.3 32 32 32l192 0 0-160c0-17.7 14.3-32 32-32s32 14.3 32 32l0 160 192 0c17.7 0 32-14.3 32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 53-43 96-96 96l-192 0 0 64 128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0 0-64L96 384c-53 0-96-43-96-96L0 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm192 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32z\"]\n};\nconst faTruckPlane = {\n  prefix: 'fas',\n  iconName: 'truck-plane',\n  icon: [640, 512, [], \"e58f\", \"M200 0c-30.6 0-56 54.7-56 86.1l0 106.5L7.8 274.3C2.9 277.2 0 282.4 0 288l0 64c0 5.1 2.4 9.8 6.4 12.8s9.3 3.9 14.1 2.5l123.4-37 0 81.2-50 40c-3.8 3-6 7.6-6 12.5l0 32c0 5.1 2.5 10 6.6 13s9.5 3.8 14.4 2.2L200 480.9 290.4 511c-1.6-4.7-2.4-9.8-2.4-15l0-32.6c-18.2-10.5-30.7-29.7-31.9-51.8l-.1-.1 0-3.5 0-82.5L256 184l0-1.1s0 0 0 0l0-96.9C256 54.7 231.5 0 200 0zm88 176l0 224c0 20.9 13.4 38.7 32 45.3l0 42.7c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-40 160 0 0 40c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-42.7c18.6-6.6 32-24.4 32-45.3l0-224c0-26.5-21.5-48-48-48l-256 0c-26.5 0-48 21.5-48 48zm79.8 78.7c3.3-8.7 11.2-14.7 20.5-14.7l151.4 0c9.2 0 17.2 6 20.5 14.7L576 304l-224 0 15.8-49.3zM568 352a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM336 376a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faRecordVinyl = {\n  prefix: 'fas',\n  iconName: 'record-vinyl',\n  icon: [512, 512, [], \"f8d9\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 224a128 128 0 1 0 0-256 128 128 0 1 0 0 256zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faFaceGrinStars = {\n  prefix: 'fas',\n  iconName: 'face-grin-stars',\n  icon: [512, 512, [129321, \"grin-stars\"], \"f587\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm407.4 75.5c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM160 120c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L160 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L226.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6zm192 0c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L352 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L418.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6z\"]\n};\nconst faGrinStars = faFaceGrinStars;\nconst faBong = {\n  prefix: 'fas',\n  iconName: 'bong',\n  icon: [448, 512, [], \"f55c\", \"M160 208.5c0 29.1-15.6 53.9-37.2 67.8c-17.2 11.1-31.5 26.1-41.7 43.7l221.8 0c-10.2-17.6-24.5-32.6-41.7-43.7c-21.6-13.9-37.2-38.7-37.2-67.8L224 64l-64 0 0 144.5zM288 64l0 144.5c0 5.7 3.1 10.9 7.9 14c11.2 7.2 21.5 15.5 30.9 24.8L366.1 208l-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l24 24 24 24c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-7-7-43.3 43.3C374 314.1 384 347.9 384 384c0 39.4-11.9 76.1-32.2 106.5c-9.6 14.4-26.5 21.5-43.8 21.5L76.1 512c-17.3 0-34.2-7.1-43.8-21.5C11.9 460.1 0 423.4 0 384c0-67.8 35.1-127.3 88.1-161.5c4.8-3.1 7.9-8.3 7.9-14L96 64C78.3 64 64 49.7 64 32S78.3 0 96 0l16 0L272 0l16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"]\n};\nconst faSpaghettiMonsterFlying = {\n  prefix: 'fas',\n  iconName: 'spaghetti-monster-flying',\n  icon: [640, 512, [\"pastafarianism\"], \"f67b\", \"M208 64a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 0c0 16.2-6 31.1-16 42.3l15.6 31.2c18.7-6 39.9-9.5 64.4-9.5s45.8 3.5 64.4 9.5L400 106.3C390 95.1 384 80.2 384 64c0-35.3 28.7-64 64-64s64 28.7 64 64s-28.7 64-64 64c-1.7 0-3.4-.1-5.1-.2L427.8 158c21.1 13.6 37.7 30.2 51.4 46.4c7.1 8.3 13.5 16.6 19.3 24l1.4 1.8c6.3 8.1 11.6 14.8 16.7 20.4C527.3 262.3 532.7 264 536 264c2.5 0 4.3-.6 7.1-3.3c3.7-3.5 7.1-8.8 12.5-17.4l.6-.9c4.6-7.4 11-17.6 19.4-25.7c9.7-9.3 22.9-16.7 40.4-16.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-2.5 0-4.3 .6-7.1 3.3c-3.7 3.5-7.1 8.8-12.5 17.4l-.6 .9c-4.6 7.4-11 17.6-19.4 25.7c-9.7 9.3-22.9 16.7-40.4 16.7c-18.5 0-32.9-8.5-44.3-18.6c-3.1 4-6.6 8.3-10.5 12.7c1.4 4.3 2.8 8.5 4 12.5c.9 3 1.8 5.8 2.6 8.6c3 9.8 5.5 18.2 8.6 25.9c3.9 9.8 7.4 15.4 10.8 18.5c2.6 2.4 5.9 4.3 12.8 4.3c8.7 0 16.9-4.2 33.7-13.2c15-8 35.7-18.8 62.3-18.8c13.3 0 24 10.7 24 24s-10.7 24-24 24c-13.4 0-24.7 5.2-39.7 13.2c-1 .6-2.1 1.1-3.2 1.7C559.9 414 541.4 424 520 424c-18.4 0-33.6-6.1-45.5-17.2c-11.1-10.3-17.9-23.7-22.7-36c-3.6-9-6.7-19.1-9.5-28.5c-16.4 12.3-36.1 23.6-58.9 31.3c3.6 10.8 8.4 23.5 14.4 36.2c7.5 15.9 16.2 30.4 25.8 40.5C433 460.5 441.2 464 448 464c13.3 0 24 10.7 24 24s-10.7 24-24 24c-25.2 0-45-13.5-59.5-28.8c-14.5-15.4-25.7-34.9-34.2-53c-8-17-14.1-33.8-18.3-46.9c-5.2 .4-10.6 .6-16 .6s-10.8-.2-16-.6c-4.2 13-10.3 29.9-18.3 46.9c-8.5 18.1-19.8 37.6-34.2 53C237 498.5 217.2 512 192 512c-13.3 0-24-10.7-24-24s10.7-24 24-24c6.8 0 15-3.5 24.5-13.7c9.5-10.1 18.3-24.6 25.8-40.5c5.9-12.6 10.7-25.4 14.4-36.2c-22.8-7.7-42.5-19-58.9-31.3c-2.9 9.4-6 19.5-9.5 28.5c-4.8 12.2-11.6 25.6-22.7 36C153.6 417.9 138.4 424 120 424c-21.4 0-39.9-10-53.1-17.1c0 0 0 0 0 0c-1.1-.6-2.2-1.2-3.2-1.7c-15-8-26.3-13.2-39.7-13.2c-13.3 0-24-10.7-24-24s10.7-24 24-24c26.6 0 47.3 10.8 62.3 18.8c16.8 9 25 13.2 33.7 13.2c6.8 0 10.2-1.9 12.8-4.3c3.4-3.2 7-8.8 10.8-18.5c3-7.7 5.6-16.1 8.6-25.9c.8-2.7 1.7-5.6 2.6-8.6c1.2-4 2.6-8.2 4-12.5c-3.9-4.5-7.4-8.8-10.5-12.7C136.9 303.5 122.5 312 104 312c-17.5 0-30.7-7.4-40.4-16.7c-8.4-8.1-14.8-18.3-19.4-25.7l-.6-.9c-5.4-8.6-8.8-13.9-12.5-17.4c-2.8-2.7-4.6-3.3-7.1-3.3c-13.3 0-24-10.7-24-24s10.7-24 24-24c17.5 0 30.7 7.4 40.4 16.7c8.4 8.1 14.8 18.3 19.4 25.7l.6 .9c5.4 8.6 8.8 13.9 12.5 17.4c2.8 2.7 4.6 3.3 7.1 3.3c3.3 0 8.7-1.7 19.4-13.4c5.1-5.6 10.4-12.3 16.7-20.4l1.4-1.8c5.8-7.4 12.2-15.7 19.3-24c13.8-16.2 30.3-32.8 51.4-46.4l-15.1-30.2c-1.7 .1-3.4 .2-5.1 .2c-35.3 0-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64zm208 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faPastafarianism = faSpaghettiMonsterFlying;\nconst faArrowDownUpAcrossLine = {\n  prefix: 'fas',\n  iconName: 'arrow-down-up-across-line',\n  icon: [576, 512, [], \"e4af\", \"M137.4 502.6c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7 192 288l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0 0-114.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L384 109.3 384 224l-192 0-64 0-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 114.7L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96zM128 192l64 0 0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128zM448 320l-64 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128z\"]\n};\nconst faSpoon = {\n  prefix: 'fas',\n  iconName: 'spoon',\n  icon: [512, 512, [129348, 61873, \"utensil-spoon\"], \"f2e5\", \"M245.8 220.9c-14.5-17.6-21.8-39.2-21.8-60.8C224 80 320 0 416 0c53 0 96 43 96 96c0 96-80 192-160.2 192c-21.6 0-43.2-7.3-60.8-21.8L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L245.8 220.9z\"]\n};\nconst faUtensilSpoon = faSpoon;\nconst faJarWheat = {\n  prefix: 'fas',\n  iconName: 'jar-wheat',\n  icon: [320, 512, [], \"e517\", \"M32 32C32 14.3 46.3 0 64 0L256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64l192 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 160zm112 0l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 198 90 224 122.2 224l21.8 0 32 0 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 160c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7zm48 117.7c-11.7-13.3-28.9-21.7-48-21.7l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 294 90 320 122.2 320l21.8 0 32 0 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 256c-19.1 0-36.3 8.4-48 21.7zM112 352l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 390 90 416 122.2 416l21.8 0 0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 352c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7z\"]\n};\nconst faEnvelopesBulk = {\n  prefix: 'fas',\n  iconName: 'envelopes-bulk',\n  icon: [640, 512, [\"mail-bulk\"], \"f674\", \"M128 0C110.3 0 96 14.3 96 32l0 192 96 0 0-32c0-35.3 28.7-64 64-64l224 0 0-96c0-17.7-14.3-32-32-32L128 0zM256 160c-17.7 0-32 14.3-32 32l0 32 96 0c35.3 0 64 28.7 64 64l0 128 192 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-320 0zm240 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM64 256c-17.7 0-32 14.3-32 32l0 13L187.1 415.9c1.4 1 3.1 1.6 4.9 1.6s3.5-.6 4.9-1.6L352 301l0-13c0-17.7-14.3-32-32-32L64 256zm288 84.8L216 441.6c-6.9 5.1-15.3 7.9-24 7.9s-17-2.8-24-7.9L32 340.8 32 480c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32l0-139.2z\"]\n};\nconst faMailBulk = faEnvelopesBulk;\nconst faFileCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'file-circle-exclamation',\n  icon: [576, 512, [], \"e4eb\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faCircleH = {\n  prefix: 'fas',\n  iconName: 'circle-h',\n  icon: [512, 512, [9405, \"hospital-symbol\"], \"f47e\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM368 152l0 104 0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80-128 0 0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80 128 0 0-80c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faHospitalSymbol = faCircleH;\nconst faPager = {\n  prefix: 'fas',\n  iconName: 'pager',\n  icon: [512, 512, [128223], \"f815\", \"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm64 32l0 64c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM80 320c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0zm136 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0z\"]\n};\nconst faAddressBook = {\n  prefix: 'fas',\n  iconName: 'address-book',\n  icon: [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L96 0zM208 288l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM496 192c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64z\"]\n};\nconst faContactBook = faAddressBook;\nconst faStrikethrough = {\n  prefix: 'fas',\n  iconName: 'strikethrough',\n  icon: [512, 512, [], \"f0cc\", \"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-209.9 0-.4-.1-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3c0 0 0 0 0 0s0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6c0 0 0 0 0 0l.2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1l-75.7 0c7 5.6 11.4 11.2 13.9 17.2z\"]\n};\nconst faK = {\n  prefix: 'fas',\n  iconName: 'k',\n  icon: [320, 512, [107], \"4b\", \"M311 86.3c12.3-12.7 12-32.9-.7-45.2s-32.9-12-45.2 .7l-155.2 160L64 249 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 328 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-107 64.7-66.7 133 192c10.1 14.5 30 18.1 44.5 8.1s18.1-30 8.1-44.5L174.1 227.4 311 86.3z\"]\n};\nconst faLandmarkFlag = {\n  prefix: 'fas',\n  iconName: 'landmark-flag',\n  icon: [512, 512, [], \"e51c\", \"M272 0l80 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-80 0 0 32 192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L48 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0 0-112c0-8.8 7.2-16 16-16l16 0zM64 224l64 0 0 192 40 0 0-192 64 0 0 192 48 0 0-192 64 0 0 192 40 0 0-192 64 0 0 196.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 224z\"]\n};\nconst faPencil = {\n  prefix: 'fas',\n  iconName: 'pencil',\n  icon: [512, 512, [9999, 61504, \"pencil-alt\"], \"f303\", \"M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1 0 32c0 8.8 7.2 16 16 16l32 0zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faPencilAlt = faPencil;\nconst faBackward = {\n  prefix: 'fas',\n  iconName: 'backward',\n  icon: [512, 512, [9194], \"f04a\", \"M459.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-320c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4L288 214.3l0 41.7 0 41.7L459.5 440.6zM256 352l0-96 0-128 0-32c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160C4.2 237.5 0 246.5 0 256s4.2 18.5 11.5 24.6l192 160c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-64z\"]\n};\nconst faCaretRight = {\n  prefix: 'fas',\n  iconName: 'caret-right',\n  icon: [256, 512, [], \"f0da\", \"M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z\"]\n};\nconst faComments = {\n  prefix: 'fas',\n  iconName: 'comments',\n  icon: [640, 512, [128490, 61670], \"f086\", \"M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2s0 0 0 0s0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.2-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9c0 0 0 0 0 0s0 0 0 0l-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z\"]\n};\nconst faPaste = {\n  prefix: 'fas',\n  iconName: 'paste',\n  icon: [512, 512, [\"file-clipboard\"], \"f0ea\", \"M160 0c-23.7 0-44.4 12.9-55.4 32L48 32C21.5 32 0 53.5 0 80L0 400c0 26.5 21.5 48 48 48l144 0 0-272c0-44.2 35.8-80 80-80l48 0 0-16c0-26.5-21.5-48-48-48l-56.6 0C204.4 12.9 183.7 0 160 0zM272 128c-26.5 0-48 21.5-48 48l0 272 0 16c0 26.5 21.5 48 48 48l192 0c26.5 0 48-21.5 48-48l0-220.1c0-12.7-5.1-24.9-14.1-33.9l-67.9-67.9c-9-9-21.2-14.1-33.9-14.1L320 128l-48 0zM160 40a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faFileClipboard = faPaste;\nconst faCodePullRequest = {\n  prefix: 'fas',\n  iconName: 'code-pull-request',\n  icon: [512, 512, [], \"e13c\", \"M305.8 2.1C314.4 5.9 320 14.5 320 24l0 40 16 0c70.7 0 128 57.3 128 128l0 166.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3L400 192c0-35.3-28.7-64-64-64l-16 0 0 40c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1zM104 80A24 24 0 1 0 56 80a24 24 0 1 0 48 0zm8 73.3l0 205.3c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-205.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80c0 32.8-19.7 61-48 73.3zM104 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm328 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faClipboardList = {\n  prefix: 'fas',\n  iconName: 'clipboard-list',\n  icon: [384, 512, [], \"f46d\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM72 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM72 368a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm88 0c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faTruckRampBox = {\n  prefix: 'fas',\n  iconName: 'truck-ramp-box',\n  icon: [640, 512, [\"truck-loading\"], \"f4de\", \"M640 0l0 400c0 61.9-50.1 112-112 112c-61 0-110.5-48.7-112-109.3L48.4 502.9c-17.1 4.6-34.6-5.4-39.3-22.5s5.4-34.6 22.5-39.3L352 353.8 352 64c0-35.3 28.7-64 64-64L640 0zM576 400a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM23.1 207.7c-4.6-17.1 5.6-34.6 22.6-39.2l46.4-12.4 20.7 77.3c2.3 8.5 11.1 13.6 19.6 11.3l30.9-8.3c8.5-2.3 13.6-11.1 11.3-19.6l-20.7-77.3 46.4-12.4c17.1-4.6 34.6 5.6 39.2 22.6l41.4 154.5c4.6 17.1-5.6 34.6-22.6 39.2L103.7 384.9c-17.1 4.6-34.6-5.6-39.2-22.6L23.1 207.7z\"]\n};\nconst faTruckLoading = faTruckRampBox;\nconst faUserCheck = {\n  prefix: 'fas',\n  iconName: 'user-check',\n  icon: [640, 512, [], \"f4fc\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM625 177L497 305c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L591 143c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faVialVirus = {\n  prefix: 'fas',\n  iconName: 'vial-virus',\n  icon: [512, 512, [], \"e597\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l0 288c0 53 43 96 96 96c28.6 0 54.2-12.5 71.8-32.3c.1-14.2 5.6-28.3 16.4-39.1c.2-.2 .1-.6-.2-.6c-30.9 0-56-25.1-56-56s25.1-56 56-56c.3 0 .4-.4 .2-.6c-21.9-21.9-21.9-57.3 0-79.2c2.4-2.4 5-4.6 7.8-6.5L224 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0L96 32 32 32zM96 192l0-96 64 0 0 96-64 0zM216 376c28.8 0 43.2 34.8 22.9 55.2c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0c20.4-20.4 55.2-5.9 55.2 22.9c0 13.3 10.7 24 24 24s24-10.7 24-24c0-28.8 34.8-43.2 55.2-22.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9C444.8 410.8 459.2 376 488 376c13.3 0 24-10.7 24-24s-10.7-24-24-24c-28.8 0-43.2-34.8-22.9-55.2c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0C410.8 259.2 376 244.8 376 216c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 28.8-34.8 43.2-55.2 22.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9c20.4 20.4 5.9 55.2-22.9 55.2c-13.3 0-24 10.7-24 24s10.7 24 24 24zm104-88a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm40 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faSheetPlastic = {\n  prefix: 'fas',\n  iconName: 'sheet-plastic',\n  icon: [384, 512, [], \"e571\", \"M0 448c0 35.3 28.7 64 64 64l160 0 0-128c0-17.7 14.3-32 32-32l128 0 0-288c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 448zM171.3 75.3l-96 96c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l96-96c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zm96 32l-160 160c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l160-160c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zM384 384l-128 0 0 128L384 384z\"]\n};\nconst faBlog = {\n  prefix: 'fas',\n  iconName: 'blog',\n  icon: [512, 512, [], \"f781\", \"M192 32c0 17.7 14.3 32 32 32c123.7 0 224 100.3 224 224c0 17.7 14.3 32 32 32s32-14.3 32-32C512 128.9 383.1 0 224 0c-17.7 0-32 14.3-32 32zm0 96c0 17.7 14.3 32 32 32c70.7 0 128 57.3 128 128c0 17.7 14.3 32 32 32s32-14.3 32-32c0-106-86-192-192-192c-17.7 0-32 14.3-32 32zM96 144c0-26.5-21.5-48-48-48S0 117.5 0 144L0 368c0 79.5 64.5 144 144 144s144-64.5 144-144s-64.5-144-144-144l-16 0 0 96 16 0c26.5 0 48 21.5 48 48s-21.5 48-48 48s-48-21.5-48-48l0-224z\"]\n};\nconst faUserNinja = {\n  prefix: 'fas',\n  iconName: 'user-ninja',\n  icon: [448, 512, [129399], \"f504\", \"M224 256c-57.2 0-105.6-37.5-122-89.3c-1.1 1.3-2.2 2.6-3.5 3.8c-15.8 15.8-38.8 20.7-53.6 22.1c-8.1 .8-14.6-5.7-13.8-13.8c1.4-14.7 6.3-37.8 22.1-53.6c5.8-5.8 12.6-10.1 19.6-13.4c-7-3.2-13.8-7.6-19.6-13.4C37.4 82.7 32.6 59.7 31.1 44.9c-.8-8.1 5.7-14.6 13.8-13.8c14.7 1.4 37.8 6.3 53.6 22.1c4.8 4.8 8.7 10.4 11.7 16.1C131.4 28.2 174.4 0 224 0c70.7 0 128 57.3 128 128s-57.3 128-128 128zM0 482.3C0 399.5 56.4 330 132.8 309.9c6-1.6 12.2 .9 15.9 5.8l62.5 83.3c6.4 8.5 19.2 8.5 25.6 0l62.5-83.3c3.7-4.9 9.9-7.4 15.9-5.8C391.6 330 448 399.5 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM160 96c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L160 96z\"]\n};\nconst faPersonArrowUpFromLine = {\n  prefix: 'fas',\n  iconName: 'person-arrow-up-from-line',\n  icon: [640, 512, [], \"e539\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352l0-96 16 0 0 96-16 0zm-64 0l-88 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l120 0 80 0 376 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-344 0 0-191.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 448zM598.6 121.4l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L464 141.3 464 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-242.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"]\n};\nconst faScrollTorah = {\n  prefix: 'fas',\n  iconName: 'scroll-torah',\n  icon: [640, 512, [\"torah\"], \"f6a0\", \"M96 480L96 32C96 14.3 74.5 0 48 0S0 14.3 0 32L0 480c0 17.7 21.5 32 48 32s48-14.3 48-32zM512 32L128 32l0 448 384 0 0-448zM592 0c-26.5 0-48 14.3-48 32l0 448c0 17.7 21.5 32 48 32s48-14.3 48-32l0-448c0-17.7-21.5-32-48-32zM196 313.7c0-3.2 .9-6.4 2.5-9.2L226.7 256l-28.3-48.5c-1.6-2.8-2.5-6-2.5-9.2c0-10.1 8.2-18.3 18.3-18.3l56.7 0 31.4-53.9c3.6-6.3 10.3-10.1 17.6-10.1s13.9 3.8 17.6 10.1L369 180l56.7 0c10.1 0 18.3 8.2 18.3 18.3c0 3.2-.9 6.4-2.5 9.2L413.3 256l28.3 48.5c1.6 2.8 2.5 6 2.5 9.2c0 10.1-8.2 18.3-18.3 18.3L369 332l-31.4 53.9c-3.6 6.3-10.3 10.1-17.6 10.1s-13.9-3.8-17.6-10.1L271 332l-56.7 0c-10.1 0-18.3-8.2-18.3-18.3zm124 54.7L341.2 332l-42.4 0L320 368.4zM254.5 256l30.3 52 70.4 0 30.3-52-30.3-52-70.4 0-30.3 52zm144.9 23.8L383 308l32.8 0-16.4-28.2zM415.8 204L383 204l16.4 28.2L415.8 204zM320 143.6L298.8 180l42.4 0L320 143.6zM224.2 204l16.4 28.2L257 204l-32.8 0zM257 308l-16.4-28.2L224.2 308l32.8 0z\"]\n};\nconst faTorah = faScrollTorah;\nconst faBroomBall = {\n  prefix: 'fas',\n  iconName: 'broom-ball',\n  icon: [576, 512, [\"quidditch\", \"quidditch-broom-ball\"], \"f458\", \"M566.6 9.4c12.5 12.5 12.5 32.8 0 45.3l-192 192 34.7 34.7c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6l-29.1 0L256 211.7l0-29.1c0-12.5 10.1-22.6 22.6-22.6c6 0 11.8 2.4 16 6.6l34.7 34.7 192-192c12.5-12.5 32.8-12.5 45.3 0zm-344 225.5L341.1 353.4c3.7 42.7-11.7 85.2-42.3 115.8C271.4 496.6 234.2 512 195.5 512L22.1 512C9.9 512 0 502.1 0 489.9c0-6.3 2.7-12.3 7.3-16.5L133.7 359.7c4.2-3.7-.4-10.4-5.4-7.9L77.2 377.4c-6.1 3-13.2-1.4-13.2-8.2c0-31.5 12.5-61.7 34.8-84l8-8c30.6-30.6 73.1-45.9 115.8-42.3zM464 352a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faQuidditch = faBroomBall;\nconst faQuidditchBroomBall = faBroomBall;\nconst faToggleOff = {\n  prefix: 'fas',\n  iconName: 'toggle-off',\n  icon: [576, 512, [], \"f204\", \"M384 128c70.7 0 128 57.3 128 128s-57.3 128-128 128l-192 0c-70.7 0-128-57.3-128-128s57.3-128 128-128l192 0zM576 256c0-106-86-192-192-192L192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192zM192 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nconst faBoxArchive = {\n  prefix: 'fas',\n  iconName: 'box-archive',\n  icon: [512, 512, [\"archive\"], \"f187\", \"M32 32l448 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96L0 64C0 46.3 14.3 32 32 32zm0 128l448 0 0 256c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-256zm128 80c0 8.8 7.2 16 16 16l160 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-160 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faArchive = faBoxArchive;\nconst faPersonDrowning = {\n  prefix: 'fas',\n  iconName: 'person-drowning',\n  icon: [576, 512, [], \"e545\", \"M192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32.2c0 54.1 23.5 104 62.2 138.3l-21 146.7c7.8 2.1 15.5 3.3 22.8 3.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c12.4 8.5 26.1 14.8 39.7 18l17.7-97.6c10.7-1.2 21.3-3.1 31.9-5.5l105-23.9c17.2-3.9 28-21.1 24.1-38.3s-21.1-28-38.3-24.1L400 216.6c-41 9.3-83.7 7.5-123.7-5.2c-50.2-16-84.3-62.6-84.3-115.3L192 64zM320 192a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM306.5 389.9c-11.1-7.9-25.9-7.9-37 0C247 405.4 219.5 416 192 416c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 469.7 159 480 192 480c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 405.2 410.9 416 384 416c-27.5 0-55-10.6-77.5-26.1z\"]\n};\nconst faArrowDown91 = {\n  prefix: 'fas',\n  iconName: 'arrow-down-9-1',\n  icon: [576, 512, [\"sort-numeric-desc\", \"sort-numeric-down-alt\"], \"f886\", \"M160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7 192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 301.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM450.7 294c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l48 0 48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26zM418.3 91a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 91zM405.1 203.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"]\n};\nconst faSortNumericDesc = faArrowDown91;\nconst faSortNumericDownAlt = faArrowDown91;\nconst faFaceGrinTongueSquint = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue-squint',\n  icon: [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448l0-47.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 46.9c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zM116 141.1c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 448l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGrinTongueSquint = faFaceGrinTongueSquint;\nconst faSprayCan = {\n  prefix: 'fas',\n  iconName: 'spray-can',\n  icon: [512, 512, [], \"f5bd\", \"M128 0l64 0c17.7 0 32 14.3 32 32l0 96L96 128l0-96c0-17.7 14.3-32 32-32zM0 256c0-53 43-96 96-96l128 0c53 0 96 43 96 96l0 208c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 256zm240 80A80 80 0 1 0 80 336a80 80 0 1 0 160 0zM256 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM448 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faTruckMonster = {\n  prefix: 'fas',\n  iconName: 'truck-monster',\n  icon: [640, 512, [], \"f63b\", \"M288 64l0 64 128 0L368 64l-80 0zM419.2 25.6L496 128l80 0c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64l-64 0c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l160 0 0-80c0-26.5 21.5-48 48-48l96 0c20.1 0 39.1 9.5 51.2 25.6zM152 256l16 0c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.7 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.3 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8l0 16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.3 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.8 3.7-14.1 6.8-21.7 9C190.1 503.1 180.1 512 168 512l-16 0c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2L63.8 468.9c-8.6-8.6-9.3-21.9-2.3-31.3c-3.7-6.9-6.8-14.1-9-21.8C40.9 414.1 32 404.1 32 392l0-16c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.3-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9c1.7-11.6 11.7-20.6 23.8-20.6zm8 176a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM448.2 276.6c1.7-11.6 11.7-20.6 23.8-20.6l16 0c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.8 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.2 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8l0 16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.2 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.9 3.7-14.1 6.8-21.8 9C510.1 503.1 500.1 512 488 512l-16 0c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2l-11.3-11.3c-8.6-8.6-9.3-21.9-2.2-31.3c-3.7-6.9-6.8-14.1-9-21.8C360.9 414.1 352 404.1 352 392l0-16c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.2-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9zM528 384a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faW = {\n  prefix: 'fas',\n  iconName: 'w',\n  icon: [576, 512, [119], \"57\", \"M20.8 34c16.5-6.2 35 2.2 41.2 18.7l110.2 294L257.3 55c4-13.7 16.5-23 30.7-23s26.7 9.4 30.7 23l85.1 291.7L514 52.8c6.2-16.5 24.6-24.9 41.2-18.7s24.9 24.7 18.7 41.2l-144 384c-4.8 12.9-17.4 21.3-31.2 20.7s-25.7-9.8-29.5-23L288 178.3 206.7 457c-3.9 13.2-15.8 22.5-29.5 23s-26.3-7.8-31.2-20.7L2 75.2C-4.2 58.7 4.2 40.2 20.8 34z\"]\n};\nconst faEarthAfrica = {\n  prefix: 'fas',\n  iconName: 'earth-africa',\n  icon: [512, 512, [127757, \"globe-africa\"], \"f57c\", \"M177.8 63.2l10 17.4c2.8 4.8 4.2 10.3 4.2 15.9l0 41.4c0 3.9 1.6 7.7 4.3 10.4c6.2 6.2 16.5 5.7 22-1.2l13.6-17c4.7-5.9 12.9-7.7 19.6-4.3l15.2 7.6c3.4 1.7 7.2 2.6 11 2.6c6.5 0 12.8-2.6 17.4-7.2l3.9-3.9c2.9-2.9 7.3-3.6 11-1.8l29.2 14.6c7.8 3.9 12.6 11.8 12.6 20.5c0 10.5-7.1 19.6-17.3 22.2l-35.4 8.8c-7.4 1.8-15.1 1.5-22.4-.9l-32-10.7c-3.3-1.1-6.7-1.7-10.2-1.7c-7 0-13.8 2.3-19.4 6.5L176 212c-10.1 7.6-16 19.4-16 32l0 28c0 26.5 21.5 48 48 48l32 0c8.8 0 16 7.2 16 16l0 48c0 17.7 14.3 32 32 32c10.1 0 19.6-4.7 25.6-12.8l25.6-34.1c8.3-11.1 12.8-24.6 12.8-38.4l0-12.1c0-3.9 2.6-7.3 6.4-8.2l5.3-1.3c11.9-3 20.3-13.7 20.3-26c0-7.1-2.8-13.9-7.8-18.9l-33.5-33.5c-3.7-3.7-3.7-9.7 0-13.4c5.7-5.7 14.1-7.7 21.8-5.1l14.1 4.7c12.3 4.1 25.7-1.5 31.5-13c3.5-7 11.2-10.8 18.9-9.2l27.4 5.5C432 112.4 351.5 48 256 48c-27.7 0-54 5.4-78.2 15.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faGlobeAfrica = faEarthAfrica;\nconst faRainbow = {\n  prefix: 'fas',\n  iconName: 'rainbow',\n  icon: [640, 512, [127752], \"f75b\", \"M320 96C178.6 96 64 210.6 64 352l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96C0 175.3 143.3 32 320 32s320 143.3 320 320l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96C576 210.6 461.4 96 320 96zm0 192c-35.3 0-64 28.7-64 64l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-70.7 57.3-128 128-128s128 57.3 128 128l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-35.3-28.7-64-64-64zM160 352l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-123.7 100.3-224 224-224s224 100.3 224 224l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-88.4-71.6-160-160-160s-160 71.6-160 160z\"]\n};\nconst faCircleNotch = {\n  prefix: 'fas',\n  iconName: 'circle-notch',\n  icon: [512, 512, [], \"f1ce\", \"M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z\"]\n};\nconst faTabletScreenButton = {\n  prefix: 'fas',\n  iconName: 'tablet-screen-button',\n  icon: [448, 512, [\"tablet-alt\"], \"f3fa\", \"M0 64C0 28.7 28.7 0 64 0L384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM256 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 64L64 64l0 320 320 0 0-320z\"]\n};\nconst faTabletAlt = faTabletScreenButton;\nconst faPaw = {\n  prefix: 'fas',\n  iconName: 'paw',\n  icon: [512, 512, [], \"f1b0\", \"M226.5 92.9c14.3 42.9-.3 86.2-32.6 96.8s-70.1-15.6-84.4-58.5s.3-86.2 32.6-96.8s70.1 15.6 84.4 58.5zM100.4 198.6c18.9 32.4 14.3 70.1-10.2 84.1s-59.7-.9-78.5-33.3S-2.7 179.3 21.8 165.3s59.7 .9 78.5 33.3zM69.2 401.2C121.6 259.9 214.7 224 256 224s134.4 35.9 186.8 177.2c3.6 9.7 5.2 20.1 5.2 30.5l0 1.6c0 25.8-20.9 46.7-46.7 46.7c-11.5 0-22.9-1.4-34-4.2l-88-22c-15.3-3.8-31.3-3.8-46.6 0l-88 22c-11.1 2.8-22.5 4.2-34 4.2C84.9 480 64 459.1 64 433.3l0-1.6c0-10.4 1.6-20.8 5.2-30.5zM421.8 282.7c-24.5-14-29.1-51.7-10.2-84.1s54-47.3 78.5-33.3s29.1 51.7 10.2 84.1s-54 47.3-78.5 33.3zM310.1 189.7c-32.3-10.6-46.9-53.9-32.6-96.8s52.1-69.1 84.4-58.5s46.9 53.9 32.6 96.8s-52.1 69.1-84.4 58.5z\"]\n};\nconst faCloud = {\n  prefix: 'fas',\n  iconName: 'cloud',\n  icon: [640, 512, [9729], \"f0c2\", \"M0 336c0 79.5 64.5 144 144 144l368 0c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z\"]\n};\nconst faTrowelBricks = {\n  prefix: 'fas',\n  iconName: 'trowel-bricks',\n  icon: [512, 512, [], \"e58a\", \"M240.8 4.8C250.3 10.6 256 20.9 256 32l0 72 89 0c3.6-13.8 16.1-24 31-24l88 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-88 0c-14.9 0-27.4-10.2-31-24l-89 0 0 72c0 11.1-5.7 21.4-15.2 27.2s-21.2 6.4-31.1 1.4l-192-96C6.8 151.2 0 140.1 0 128s6.8-23.2 17.7-28.6l192-96c9.9-5 21.7-4.4 31.1 1.4zM288 256c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-64zM32 384l96 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm192 0l256 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32z\"]\n};\nconst faFaceFlushed = {\n  prefix: 'fas',\n  iconName: 'face-flushed',\n  icon: [512, 512, [128563, \"flushed\"], \"f579\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM176 384c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16zm-16-88a72 72 0 1 0 0-144 72 72 0 1 0 0 144zm264-72a72 72 0 1 0 -144 0 72 72 0 1 0 144 0zm-288 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm192 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faFlushed = faFaceFlushed;\nconst faHospitalUser = {\n  prefix: 'fas',\n  iconName: 'hospital-user',\n  icon: [576, 512, [], \"f80d\", \"M48 0C21.5 0 0 21.5 0 48L0 256l144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L0 288l0 64 144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L0 384l0 80c0 26.5 21.5 48 48 48l217.9 0c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2l0-95.9L320 48c0-26.5-21.5-48-48-48L48 0zM152 64l16 0c8.8 0 16 7.2 16 16l0 24 24 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-24 0 0 24c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-24-24 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16l24 0 0-24c0-8.8 7.2-16 16-16zM512 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM288 477.1c0 19.3 15.6 34.9 34.9 34.9l218.2 0c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1l-101.8 0c-51.4 0-93.1 41.7-93.1 93.1z\"]\n};\nconst faTentArrowLeftRight = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-left-right',\n  icon: [576, 512, [], \"e57f\", \"M488.1 6.2c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9L489.5 72 86.5 72l33.5-30.2c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120l402.9 0-33.5 30.2c-9.9 8.9-10.7 24-1.8 33.9s24 10.7 33.9 1.8l80-72c5.1-4.6 7.9-11 7.9-17.8s-2.9-13.3-7.9-17.8l-80-72zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faGavel = {\n  prefix: 'fas',\n  iconName: 'gavel',\n  icon: [512, 512, [\"legal\"], \"f0e3\", \"M318.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-120 120c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l4-4L325.4 293.4l-4 4c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l120-120c12.5-12.5 12.5-32.8 0-45.3l-16-16c-12.5-12.5-32.8-12.5-45.3 0l-4 4L330.6 74.6l4-4c12.5-12.5 12.5-32.8 0-45.3l-16-16zm-152 288c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l48 48c12.5 12.5 32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-1.4-1.4L272 285.3 226.7 240 168 298.7l-1.4-1.4z\"]\n};\nconst faLegal = faGavel;\nconst faBinoculars = {\n  prefix: 'fas',\n  iconName: 'binoculars',\n  icon: [512, 512, [], \"f1e5\", \"M128 32l32 0c17.7 0 32 14.3 32 32l0 32L96 96l0-32c0-17.7 14.3-32 32-32zm64 96l0 320c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32l0-59.1c0-34.6 9.4-68.6 27.2-98.3C40.9 267.8 49.7 242.4 53 216L60.5 156c2-16 15.6-28 31.8-28l99.8 0zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6c17.8 29.7 27.2 63.7 27.2 98.3l0 59.1c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-320 99.8 0zM320 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 32-96 0 0-32zm-32 64l0 160-64 0 0-160 64 0z\"]\n};\nconst faMicrophoneSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-slash',\n  icon: [640, 512, [], \"f131\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 21.2-5.1 41.1-14.2 58.7L416 300.8 416 96c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zM344 430.4c20.4-2.8 39.7-9.1 57.3-18.2l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6z\"]\n};\nconst faBoxTissue = {\n  prefix: 'fas',\n  iconName: 'box-tissue',\n  icon: [512, 512, [], \"e05b\", \"M92.5 0L208 0c40 0 52 24 64 48s24 48 64 48l85.2 0C436 96 448 108 448 122.8c0 3.4-.7 6.8-1.9 10L409.6 224 384 288l-256 0-16-64L64.9 35.4c-.6-2.3-.9-4.6-.9-6.9C64 12.8 76.8 0 92.5 0zM79 224l16 64-15 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 256 0 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-13.5 0 25.6-64 19.9 0c26.5 0 48 21.5 48 48l0 112L0 384 0 272c0-26.5 21.5-48 48-48l31 0zM0 416l512 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48l0-48z\"]\n};\nconst faMotorcycle = {\n  prefix: 'fas',\n  iconName: 'motorcycle',\n  icon: [640, 512, [127949], \"f21c\", \"M280 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l57.7 0 16.4 30.3L256 192l-45.3-45.3c-12-12-28.3-18.7-45.3-18.7L64 128c-17.7 0-32 14.3-32 32l0 32 96 0c88.4 0 160 71.6 160 160c0 11-1.1 21.7-3.2 32l70.4 0c-2.1-10.3-3.2-21-3.2-32c0-52.2 25-98.6 63.7-127.8l15.4 28.6C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L418.2 128l61.8 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-20.4 0c-7.5 0-14.7 2.6-20.5 7.4L391.7 78.9l-14-26c-7-12.9-20.5-21-35.2-21L280 32zM462.7 311.2l28.2 52.2c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-28.2-52.2c2.3-.3 4.7-.4 7.1-.4c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-15.5 5.5-29.7 14.7-40.8zM187.3 376c-9.5 23.5-32.5 40-59.3 40c-35.3 0-64-28.7-64-64s28.7-64 64-64c26.9 0 49.9 16.5 59.3 40l66.4 0C242.5 268.8 190.5 224 128 224C57.3 224 0 281.3 0 352s57.3 128 128 128c62.5 0 114.5-44.8 125.8-104l-66.4 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faBellConcierge = {\n  prefix: 'fas',\n  iconName: 'bell-concierge',\n  icon: [512, 512, [128718, \"concierge-bell\"], \"f562\", \"M216 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.3C119.6 157.2 32 252.4 32 368l448 0c0-115.6-87.6-210.8-200-222.7l0-33.3 16 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0-40 0zM24 400c-13.3 0-24 10.7-24 24s10.7 24 24 24l464 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 400z\"]\n};\nconst faConciergeBell = faBellConcierge;\nconst faPenRuler = {\n  prefix: 'fas',\n  iconName: 'pen-ruler',\n  icon: [512, 512, [\"pencil-ruler\"], \"f5ae\", \"M469.3 19.3l23.4 23.4c25 25 25 65.5 0 90.5l-56.4 56.4L322.3 75.7l56.4-56.4c25-25 65.5-25 90.5 0zM44.9 353.2L299.7 98.3 413.7 212.3 158.8 467.1c-6.7 6.7-15.1 11.6-24.2 14.2l-104 29.7c-8.4 2.4-17.4 .1-23.6-6.1s-8.5-15.2-6.1-23.6l29.7-104c2.6-9.2 7.5-17.5 14.2-24.2zM249.4 103.4L103.4 249.4 16 161.9c-18.7-18.7-18.7-49.1 0-67.9L94.1 16c18.7-18.7 49.1-18.7 67.9 0l19.8 19.8c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1l45.1 45.1zM408.6 262.6l45.1 45.1c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1L496 350.1c18.7 18.7 18.7 49.1 0 67.9L417.9 496c-18.7 18.7-49.1 18.7-67.9 0l-87.4-87.4L408.6 262.6z\"]\n};\nconst faPencilRuler = faPenRuler;\nconst faPeopleArrows = {\n  prefix: 'fas',\n  iconName: 'people-arrows',\n  icon: [640, 512, [\"people-arrows-left-right\"], \"e068\", \"M64 64a64 64 0 1 1 128 0A64 64 0 1 1 64 64zM25.9 233.4C29.3 191.9 64 160 105.6 160l44.8 0c27 0 51 13.4 65.5 34.1c-2.7 1.9-5.2 4-7.5 6.3l-64 64c-21.9 21.9-21.9 57.3 0 79.2L192 391.2l0 72.8c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-115.7c-26.5-9.5-44.7-35.8-42.2-65.6l4.1-49.3zM448 64a64 64 0 1 1 128 0A64 64 0 1 1 448 64zM431.6 200.4c-2.3-2.3-4.9-4.4-7.5-6.3c14.5-20.7 38.6-34.1 65.5-34.1l44.8 0c41.6 0 76.3 31.9 79.7 73.4l4.1 49.3c2.5 29.8-15.7 56.1-42.2 65.6L576 464c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-72.8 47.6-47.6c21.9-21.9 21.9-57.3 0-79.2l-64-64zM272 240l0 32 96 0 0-32c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l64 64c9.4 9.4 9.4 24.6 0 33.9l-64 64c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-32-96 0 0 32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2z\"]\n};\nconst faPeopleArrowsLeftRight = faPeopleArrows;\nconst faMarsAndVenusBurst = {\n  prefix: 'fas',\n  iconName: 'mars-and-venus-burst',\n  icon: [640, 512, [], \"e523\", \"M504 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l39 39-22.2 22.2C475.9 78.4 439.6 64 400 64c-88.4 0-160 71.6-160 160c0 80.2 59.1 146.7 136.1 158.2c0 .6-.1 1.2-.1 1.8l0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .3 0 .4 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1c0 0 0 .1 0 .1s0 .1 0 .1l0 .1c0 0 0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0l24 0-24 0c0 13.3 10.7 24 24 24s24-10.7 24-24l-24 0 24 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1l0-.1c0 0 0-.1 0-.1s0-.1 0-.1l0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 24 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-24 0 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.4 0-.3 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4c0-.6 0-1.2-.1-1.8c77-11.6 136.1-78 136.1-158.2c0-31.4-9-60.7-24.7-85.4L560 113.9l39 39c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L504 0zM400 128a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.1 3.8 9.9 5.1 15.2 3.6C223.6 310.8 208 269.2 208 224c0-60.8 28.3-115 72.4-150.2L220.3 92.1l-29.4-74z\"]\n};\nconst faSquareCaretRight = {\n  prefix: 'fas',\n  iconName: 'square-caret-right',\n  icon: [448, 512, [\"caret-square-right\"], \"f152\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"]\n};\nconst faCaretSquareRight = faSquareCaretRight;\nconst faScissors = {\n  prefix: 'fas',\n  iconName: 'scissors',\n  icon: [512, 512, [9984, 9986, 9988, \"cut\"], \"f0c4\", \"M256 192l-39.5-39.5c4.9-12.6 7.5-26.2 7.5-40.5C224 50.1 173.9 0 112 0S0 50.1 0 112s50.1 112 112 112c14.3 0 27.9-2.7 40.5-7.5L192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5C50.1 288 0 338.1 0 400s50.1 112 112 112s112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6c-28.3-28.3-74.1-28.3-102.4 0L256 192zm22.6 150.6L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0c7.1-7.1 7.1-18.5 0-25.6L342.6 278.6l-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faCut = faScissors;\nconst faSunPlantWilt = {\n  prefix: 'fas',\n  iconName: 'sun-plant-wilt',\n  icon: [640, 512, [], \"e57a\", \"M160 0c-6.3 0-12 3.7-14.6 9.5L120.6 64.9 63.9 43.2c-5.9-2.3-12.6-.8-17 3.6s-5.9 11.1-3.6 17l21.7 56.7L9.5 145.4C3.7 148 0 153.7 0 160s3.7 12 9.5 14.6l55.4 24.8L43.2 256.1c-2.3 5.9-.8 12.6 3.6 17s11.1 5.9 17 3.6l56.7-21.7 24.8 55.4c2.6 5.8 8.3 9.5 14.6 9.5s12-3.7 14.6-9.5l24.8-55.4 56.7 21.7c5.9 2.3 12.6 .8 17-3.6s5.9-11.1 3.6-17l-21.7-56.7 55.4-24.8c5.8-2.6 9.5-8.3 9.5-14.6s-3.7-12-9.5-14.6l-55.4-24.8 21.7-56.7c2.3-5.9 .8-12.6-3.6-17s-11.1-5.9-17-3.6L199.4 64.9 174.6 9.5C172 3.7 166.3 0 160 0zm0 96a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm312 16c0-17.7 14.3-32 32-32s32 14.3 32 32l0 53.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C624 318 640 290.7 640 274c0-21.5-9.2-37-24-44.6l0-53.4c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 22.7c-9.8-4.3-20.6-6.7-32-6.7c-44.2 0-80 35.8-80 80l0 21.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C400 382 416 354.7 416 338c0-21.5-9.2-37-24-44.6l0-21.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 8 0 168L32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-104 0 0-168 0-8 0-96z\"]\n};\nconst faToiletsPortable = {\n  prefix: 'fas',\n  iconName: 'toilets-portable',\n  icon: [576, 512, [], \"e584\", \"M32 0L224 0c17.7 0 32 14.3 32 32l0 32L0 64 0 32C0 14.3 14.3 0 32 0zM0 96l24 0 208 0 24 0 0 24 0 368c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8L48 480l0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24L0 120 0 96zM192 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zM352 0L544 0c17.7 0 32 14.3 32 32l0 32L320 64l0-32c0-17.7 14.3-32 32-32zM320 96l24 0 208 0 24 0 0 24 0 368c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-160 0 0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-368 0-24zM512 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16z\"]\n};\nconst faHockeyPuck = {\n  prefix: 'fas',\n  iconName: 'hockey-puck',\n  icon: [512, 512, [], \"f453\", \"M256 256C114.6 256 0 213 0 160s114.6-96 256-96s256 43 256 96s-114.6 96-256 96zm192.3 1.8c24.7-9.3 46.9-21 63.7-35.6L512 352c0 53-114.6 96-256 96S0 405 0 352L0 222.3c16.8 14.6 39 26.3 63.7 35.6C114.5 276.9 182.5 288 256 288s141.5-11.1 192.3-30.2z\"]\n};\nconst faTable = {\n  prefix: 'fas',\n  iconName: 'table',\n  icon: [512, 512, [], \"f0ce\", \"M64 256l0-96 160 0 0 96L64 256zm0 64l160 0 0 96L64 416l0-96zm224 96l0-96 160 0 0 96-160 0zM448 256l-160 0 0-96 160 0 0 96zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nconst faMagnifyingGlassArrowRight = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-arrow-right',\n  icon: [512, 512, [], \"e521\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM241 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31L120 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l118.1 0-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9l-72-72z\"]\n};\nconst faTachographDigital = {\n  prefix: 'fas',\n  iconName: 'tachograph-digital',\n  icon: [640, 512, [\"digital-tachograph\"], \"f566\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l512 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm32 64l224 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 256c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zM64 368c0-8.8 7.2-16 16-16l256 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 384c-8.8 0-16-7.2-16-16zm320 0c0-8.8 7.2-16 16-16l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16zM80 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faDigitalTachograph = faTachographDigital;\nconst faUsersSlash = {\n  prefix: 'fas',\n  iconName: 'users-slash',\n  icon: [640, 512, [], \"e073\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L440.6 320l178.1 0c11.8 0 21.3-9.6 21.3-21.3C640 239.8 592.2 192 533.3 192l-42.7 0c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 30.2-10.5 58-28 79.9l-25.2-19.7C408.1 267.7 416 246.8 416 224c0-53-43-96-96-96c-31.1 0-58.7 14.8-76.3 37.7l-40.6-31.8c13-14.2 20.9-33.1 20.9-53.9c0-44.2-35.8-80-80-80C116.3 0 91.9 14.1 77.5 35.5L38.8 5.1zM106.7 192C47.8 192 0 239.8 0 298.7C0 310.4 9.6 320 21.3 320l213.3 0c.2 0 .4 0 .7 0c-20.6-18.2-35.2-42.8-40.8-70.8L121.8 192l-15.2 0zM261.3 352C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7l330.7 0c10.5 0 19.5-6 23.9-14.8L324.9 352l-63.6 0zM512 160A80 80 0 1 0 512 0a80 80 0 1 0 0 160z\"]\n};\nconst faClover = {\n  prefix: 'fas',\n  iconName: 'clover',\n  icon: [448, 512, [], \"e139\", \"M216.6 49.9C205.1 38.5 189.5 32 173.3 32C139.4 32 112 59.4 112 93.3l0 4.9c0 12 3.3 23.7 9.4 34l18.8 31.3c1.1 1.8 1.2 3.1 1 4.2c-.2 1.2-.8 2.5-2 3.6s-2.4 1.8-3.6 2c-1 .2-2.4 .1-4.2-1l-31.3-18.8c-10.3-6.2-22-9.4-34-9.4l-4.9 0C27.4 144 0 171.4 0 205.3c0 16.2 6.5 31.8 17.9 43.3l1.2 1.2c3.4 3.4 3.4 9 0 12.4l-1.2 1.2C6.5 274.9 0 290.5 0 306.7C0 340.6 27.4 368 61.3 368l4.9 0c12 0 23.7-3.3 34-9.4l31.3-18.8c1.8-1.1 3.1-1.2 4.2-1c1.2 .2 2.5 .8 3.6 2s1.8 2.4 2 3.6c.2 1 .1 2.4-1 4.2l-18.8 31.3c-6.2 10.3-9.4 22-9.4 34l0 4.9c0 33.8 27.4 61.3 61.3 61.3c16.2 0 31.8-6.5 43.3-17.9l1.2-1.2c3.4-3.4 9-3.4 12.4 0l1.2 1.2c11.5 11.5 27.1 17.9 43.3 17.9c33.8 0 61.3-27.4 61.3-61.3l0-4.9c0-12-3.3-23.7-9.4-34l-18.8-31.3c-1.1-1.8-1.2-3.1-1-4.2c.2-1.2 .8-2.5 2-3.6s2.4-1.8 3.6-2c1-.2 2.4-.1 4.2 1l31.3 18.8c10.3 6.2 22 9.4 34 9.4l4.9 0c33.8 0 61.3-27.4 61.3-61.3c0-16.2-6.5-31.8-17.9-43.3l-1.2-1.2c-3.4-3.4-3.4-9 0-12.4l1.2-1.2c11.5-11.5 17.9-27.1 17.9-43.3c0-33.8-27.4-61.3-61.3-61.3l-4.9 0c-12 0-23.7 3.3-34 9.4l-31.3 18.8c-1.8 1.1-3.1 1.2-4.2 1c-1.2-.2-2.5-.8-3.6-2s-1.8-2.4-2-3.6c-.2-1-.1-2.4 1-4.2l18.8-31.3c6.2-10.3 9.4-22 9.4-34l0-4.9C336 59.4 308.6 32 274.7 32c-16.2 0-31.8 6.5-43.3 17.9l-1.2 1.2c-3.4 3.4-9 3.4-12.4 0l-1.2-1.2z\"]\n};\nconst faReply = {\n  prefix: 'fas',\n  iconName: 'reply',\n  icon: [512, 512, [61714, \"mail-reply\"], \"f3e5\", \"M205 34.8c11.5 5.1 19 16.6 19 29.2l0 64 112 0c97.2 0 176 78.8 176 176c0 113.3-81.5 163.9-100.2 174.1c-2.5 1.4-5.3 1.9-8.1 1.9c-10.9 0-19.7-8.9-19.7-19.7c0-7.5 4.3-14.4 9.8-19.5c9.4-8.8 22.2-26.4 22.2-56.7c0-53-43-96-96-96l-96 0 0 64c0 12.6-7.4 24.1-19 29.2s-25 3-34.4-5.4l-160-144C3.9 225.7 0 217.1 0 208s3.9-17.7 10.6-23.8l160-144c9.4-8.5 22.9-10.6 34.4-5.4z\"]\n};\nconst faMailReply = faReply;\nconst faStarAndCrescent = {\n  prefix: 'fas',\n  iconName: 'star-and-crescent',\n  icon: [512, 512, [9770], \"f699\", \"M0 256C0 114.6 114.6 0 256 0c33 0 64.6 6.3 93.6 17.7c7.4 2.9 11.5 10.7 9.8 18.4s-8.8 13-16.7 12.4c-4.8-.3-9.7-.5-14.6-.5c-114.9 0-208 93.1-208 208s93.1 208 208 208c4.9 0 9.8-.2 14.6-.5c7.9-.5 15 4.7 16.7 12.4s-2.4 15.5-9.8 18.4C320.6 505.7 289 512 256 512C114.6 512 0 397.4 0 256zM375.4 137.4c3.5-7.1 13.7-7.1 17.2 0l31.5 63.8c1.4 2.8 4.1 4.8 7.2 5.3l70.4 10.2c7.9 1.1 11 10.8 5.3 16.4l-50.9 49.6c-2.3 2.2-3.3 5.4-2.8 8.5l12 70.1c1.3 7.8-6.9 13.8-13.9 10.1l-63-33.1c-2.8-1.5-6.1-1.5-8.9 0l-63 33.1c-7 3.7-15.3-2.3-13.9-10.1l12-70.1c.5-3.1-.5-6.3-2.8-8.5L261 233.1c-5.7-5.6-2.6-15.2 5.3-16.4l70.4-10.2c3.1-.5 5.8-2.4 7.2-5.3l31.5-63.8z\"]\n};\nconst faHouseFire = {\n  prefix: 'fas',\n  iconName: 'house-fire',\n  icon: [640, 512, [], \"e50c\", \"M288 350.1l0 1.9-32 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L447.3 128.1c-12.3-1-25 3-34.8 11.7c-35.4 31.6-65.6 67.7-87.3 102.8C304.3 276.5 288 314.9 288 350.1zM480 512c-88.4 0-160-71.6-160-160c0-76.7 62.5-144.7 107.2-179.4c5-3.9 10.9-5.8 16.8-5.8c7.9-.1 16 3.1 22 9.2l46 46 11.3-11.3c11.7-11.7 30.6-12.7 42.3-1C624.5 268 640 320.2 640 352c0 88.4-71.6 160-160 160zm64-111.8c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C453 327.1 416 363.6 416 400.2c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faSquareMinus = {\n  prefix: 'fas',\n  iconName: 'square-minus',\n  icon: [448, 512, [61767, \"minus-square\"], \"f146\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 200l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faMinusSquare = faSquareMinus;\nconst faHelicopter = {\n  prefix: 'fas',\n  iconName: 'helicopter',\n  icon: [640, 512, [128641], \"f533\", \"M128 32c0-17.7 14.3-32 32-32L544 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L384 64l0 64 32 0c88.4 0 160 71.6 160 160l0 64c0 17.7-14.3 32-32 32l-160 0-64 0c-20.1 0-39.1-9.5-51.2-25.6l-71.4-95.2c-3.5-4.7-8.3-8.3-13.7-10.5L47.2 198.1c-9.5-3.8-16.7-12-19.2-22L5 83.9C2.4 73.8 10.1 64 20.5 64L48 64c10.1 0 19.6 4.7 25.6 12.8L112 128l208 0 0-64L160 64c-17.7 0-32-14.3-32-32zM384 320l128 0 0-32c0-53-43-96-96-96l-32 0 0 128zM630.6 425.4c12.5 12.5 12.5 32.8 0 45.3l-3.9 3.9c-24 24-56.6 37.5-90.5 37.5L256 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l280.2 0c17 0 33.3-6.7 45.3-18.7l3.9-3.9c12.5-12.5 32.8-12.5 45.3 0z\"]\n};\nconst faCompass = {\n  prefix: 'fas',\n  iconName: 'compass',\n  icon: [512, 512, [129517], \"f14e\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm50.7-186.9L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faSquareCaretDown = {\n  prefix: 'fas',\n  iconName: 'square-caret-down',\n  icon: [448, 512, [\"caret-square-down\"], \"f150\", \"M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"]\n};\nconst faCaretSquareDown = faSquareCaretDown;\nconst faFileCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'file-circle-question',\n  icon: [576, 512, [], \"e4ef\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6l0 6.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-6.4c0-5.3 4.3-9.6 9.6-9.6l40.5 0c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2l0 14.8c0 8.8 7.2 16 16 16s16-7.2 16-16l0-5.1 23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9l-40.5 0c-23 0-41.6 18.6-41.6 41.6z\"]\n};\nconst faLaptopCode = {\n  prefix: 'fas',\n  iconName: 'laptop-code',\n  icon: [640, 512, [], \"f5fc\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 256-64 0 0-256L128 96l0 256-64 0L64 96zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM393 175l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nconst faSwatchbook = {\n  prefix: 'fas',\n  iconName: 'swatchbook',\n  icon: [512, 512, [], \"f5c3\", \"M0 32C0 14.3 14.3 0 32 0L160 0c17.7 0 32 14.3 32 32l0 384c0 53-43 96-96 96s-96-43-96-96L0 32zM223.6 425.9c.3-3.3 .4-6.6 .4-9.9l0-262 75.4-75.4c12.5-12.5 32.8-12.5 45.3 0l90.5 90.5c12.5 12.5 12.5 32.8 0 45.3L223.6 425.9zM182.8 512l192-192L480 320c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-297.2 0zM128 64L64 64l0 64 64 0 0-64zM64 192l0 64 64 0 0-64-64 0zM96 440a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faPrescriptionBottle = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle',\n  icon: [384, 512, [], \"f485\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zm32 96l320 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-32 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 384l0-64 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 288l0-64 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 192l0-64z\"]\n};\nconst faBars = {\n  prefix: 'fas',\n  iconName: 'bars',\n  icon: [448, 512, [\"navicon\"], \"f0c9\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faNavicon = faBars;\nconst faPeopleGroup = {\n  prefix: 'fas',\n  iconName: 'people-group',\n  icon: [640, 512, [], \"e533\", \"M72 88a56 56 0 1 1 112 0A56 56 0 1 1 72 88zM64 245.7C54 256.9 48 271.8 48 288s6 31.1 16 42.3l0-84.7zm144.4-49.3C178.7 222.7 160 261.2 160 304c0 34.3 12 65.8 32 90.5l0 21.5c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-26.8C26.2 371.2 0 332.7 0 288c0-61.9 50.1-112 112-112l32 0c24 0 46.2 7.5 64.4 20.3zM448 416l0-21.5c20-24.7 32-56.2 32-90.5c0-42.8-18.7-81.3-48.4-107.7C449.8 183.5 472 176 496 176l32 0c61.9 0 112 50.1 112 112c0 44.7-26.2 83.2-64 101.2l0 26.8c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32zm8-328a56 56 0 1 1 112 0A56 56 0 1 1 456 88zM576 245.7l0 84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM320 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM240 304c0 16.2 6 31 16 42.3l0-84.7c-10 11.3-16 26.1-16 42.3zm144-42.3l0 84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM448 304c0 44.7-26.2 83.2-64 101.2l0 42.8c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-42.8c-37.8-18-64-56.5-64-101.2c0-61.9 50.1-112 112-112l32 0c61.9 0 112 50.1 112 112z\"]\n};\nconst faHourglassEnd = {\n  prefix: 'fas',\n  iconName: 'hourglass-end',\n  icon: [384, 512, [8987, \"hourglass-3\"], \"f253\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM96 75l0-11 192 0 0 11c0 25.5-10.1 49.9-28.1 67.9L192 210.7l-67.9-67.9C106.1 124.9 96 100.4 96 75z\"]\n};\nconst faHourglass3 = faHourglassEnd;\nconst faHeartCrack = {\n  prefix: 'fas',\n  iconName: 'heart-crack',\n  icon: [512, 512, [128148, \"heart-broken\"], \"f7a9\", \"M119.4 44.1c23.3-3.9 46.8-1.9 68.6 5.3l49.8 77.5-75.4 75.4c-1.5 1.5-2.4 3.6-2.3 5.8s1 4.2 2.6 5.7l112 104c2.9 2.7 7.4 2.9 10.5 .3s3.8-7 1.7-10.4l-60.4-98.1 90.7-75.6c2.6-2.1 3.5-5.7 2.4-8.8L296.8 61.8c28.5-16.7 62.4-23.2 95.7-17.6C461.5 55.6 512 115.2 512 185.1l0 5.8c0 41.5-17.2 81.2-47.6 109.5L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9L47.6 300.4C17.2 272.1 0 232.4 0 190.9l0-5.8c0-69.9 50.5-129.5 119.4-141z\"]\n};\nconst faHeartBroken = faHeartCrack;\nconst faSquareUpRight = {\n  prefix: 'fas',\n  iconName: 'square-up-right',\n  icon: [448, 512, [8599, \"external-link-square-alt\"], \"f360\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM160 160c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l40 40-71 71C114 302 112 306.9 112 312s2 10 5.7 13.7l36.7 36.7c3.6 3.6 8.5 5.7 13.7 5.7s10-2 13.7-5.7l71-71 40 40c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8l0-144c0-8.8-7.2-16-16-16l-144 0z\"]\n};\nconst faExternalLinkSquareAlt = faSquareUpRight;\nconst faFaceKissBeam = {\n  prefix: 'fas',\n  iconName: 'face-kiss-beam',\n  icon: [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-84.9s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faKissBeam = faFaceKissBeam;\nconst faFilm = {\n  prefix: 'fas',\n  iconName: 'film',\n  icon: [512, 512, [127902], \"f008\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM48 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 240l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L64 96c-8.8 0-16 7.2-16 16zM416 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM160 128l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L192 96c-17.7 0-32 14.3-32 32zm32 160c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0z\"]\n};\nconst faRulerHorizontal = {\n  prefix: 'fas',\n  iconName: 'ruler-horizontal',\n  icon: [640, 512, [], \"f547\", \"M0 336c0 26.5 21.5 48 48 48l544 0c26.5 0 48-21.5 48-48l0-160c0-26.5-21.5-48-48-48l-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0c-26.5 0-48 21.5-48 48L0 336z\"]\n};\nconst faPeopleRobbery = {\n  prefix: 'fas',\n  iconName: 'people-robbery',\n  icon: [576, 512, [], \"e536\", \"M488.2 59.1C478.1 99.6 441.7 128 400 128s-78.1-28.4-88.2-68.9L303 24.2C298.8 7.1 281.4-3.3 264.2 1S236.7 22.6 241 39.8l8.7 34.9c11 44 40.2 79.6 78.3 99.6L328 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-305.7c38.1-20 67.3-55.6 78.3-99.6L559 39.8c4.3-17.1-6.1-34.5-23.3-38.8S501.2 7.1 497 24.2l-8.7 34.9zM400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zm-8 32c-35.3 0-64 28.7-64 64l0 96 0 .6L8 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-227.3 13 20.5c5.9 9.2 16.1 14.9 27 14.9l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-30.4 0-37.4-58.9C157.6 142 132.1 128 104.7 128L72 128z\"]\n};\nconst faLightbulb = {\n  prefix: 'fas',\n  iconName: 'lightbulb',\n  icon: [384, 512, [128161], \"f0eb\", \"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z\"]\n};\nconst faCaretLeft = {\n  prefix: 'fas',\n  iconName: 'caret-left',\n  icon: [256, 512, [], \"f0d9\", \"M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 256c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z\"]\n};\nconst faCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'circle-exclamation',\n  icon: [512, 512, [\"exclamation-circle\"], \"f06a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faExclamationCircle = faCircleExclamation;\nconst faSchoolCircleXmark = {\n  prefix: 'fas',\n  iconName: 'school-circle-xmark',\n  icon: [640, 512, [], \"e56d\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 368z\"]\n};\nconst faArrowRightFromBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-right-from-bracket',\n  icon: [512, 512, [\"sign-out\"], \"f08b\", \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 192 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128zM160 96c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0z\"]\n};\nconst faSignOut = faArrowRightFromBracket;\nconst faCircleChevronDown = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-down',\n  icon: [512, 512, [\"chevron-circle-down\"], \"f13a\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM135 241c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l87 87 87-87c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 345c-9.4 9.4-24.6 9.4-33.9 0L135 241z\"]\n};\nconst faChevronCircleDown = faCircleChevronDown;\nconst faUnlockKeyhole = {\n  prefix: 'fas',\n  iconName: 'unlock-keyhole',\n  icon: [448, 512, [\"unlock-alt\"], \"f13e\", \"M224 64c-44.2 0-80 35.8-80 80l0 48 240 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256c0-35.3 28.7-64 64-64l16 0 0-48C80 64.5 144.5 0 224 0c57.5 0 107 33.7 130.1 82.3c7.6 16 .8 35.1-15.2 42.6s-35.1 .8-42.6-15.2C283.4 82.6 255.9 64 224 64zm32 320c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0z\"]\n};\nconst faUnlockAlt = faUnlockKeyhole;\nconst faCloudShowersHeavy = {\n  prefix: 'fas',\n  iconName: 'cloud-showers-heavy',\n  icon: [512, 512, [], \"f740\", \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96L96 320zM81.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6S-3.3 490.7 1.9 478.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm120 0c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm244.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6s17.8 19.3 12.6 31.5zM313.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6z\"]\n};\nconst faHeadphonesSimple = {\n  prefix: 'fas',\n  iconName: 'headphones-simple',\n  icon: [512, 512, [\"headphones-alt\"], \"f58f\", \"M256 80C141.1 80 48 173.1 48 288l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24L0 288C0 146.6 114.6 32 256 32s256 114.6 256 256l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-114.9-93.1-208-208-208zM80 352c0-35.3 28.7-64 64-64l16 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-16 0c-35.3 0-64-28.7-64-64l0-64zm288-64c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-16 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l16 0z\"]\n};\nconst faHeadphonesAlt = faHeadphonesSimple;\nconst faSitemap = {\n  prefix: 'fas',\n  iconName: 'sitemap',\n  icon: [576, 512, [], \"f0e8\", \"M208 80c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-8 0 0 40 152 0c30.9 0 56 25.1 56 56l0 32 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-32c0-4.4-3.6-8-8-8l-152 0 0 40 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-40-152 0c-4.4 0-8 3.6-8 8l0 32 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-32c0-30.9 25.1-56 56-56l152 0 0-40-8 0c-26.5 0-48-21.5-48-48l0-64z\"]\n};\nconst faCircleDollarToSlot = {\n  prefix: 'fas',\n  iconName: 'circle-dollar-to-slot',\n  icon: [512, 512, [\"donate\"], \"f4b9\", \"M326.7 403.7c-22.1 8-45.9 12.3-70.7 12.3s-48.7-4.4-70.7-12.3l-.8-.3c-30-11-56.8-28.7-78.6-51.4C70 314.6 48 263.9 48 208C48 93.1 141.1 0 256 0S464 93.1 464 208c0 55.9-22 106.6-57.9 144c-1 1-2 2.1-3 3.1c-21.4 21.4-47.4 38.1-76.3 48.6zM256 91.9c-11.1 0-20.1 9-20.1 20.1l0 6c-5.6 1.2-10.9 2.9-15.9 5.1c-15 6.8-27.9 19.4-31.1 37.7c-1.8 10.2-.8 20 3.4 29c4.2 8.8 10.7 15 17.3 19.5c11.6 7.9 26.9 12.5 38.6 16l2.2 .7c13.9 4.2 23.4 7.4 29.3 11.7c2.5 1.8 3.4 3.2 3.7 4c.3 .8 .9 2.6 .2 6.7c-.6 3.5-2.5 6.4-8 8.8c-6.1 2.6-16 3.9-28.8 1.9c-6-1-16.7-4.6-26.2-7.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-2.2-.7-4.3-1.5-6.4-2.1c-10.5-3.5-21.8 2.2-25.3 12.7s2.2 21.8 12.7 25.3c1.2 .4 2.7 .9 4.4 1.5c7.9 2.7 20.3 6.9 29.8 9.1l0 6.4c0 11.1 9 20.1 20.1 20.1s20.1-9 20.1-20.1l0-5.5c5.3-1 10.5-2.5 15.4-4.6c15.7-6.7 28.4-19.7 31.6-38.7c1.8-10.4 1-20.3-3-29.4c-3.9-9-10.2-15.6-16.9-20.5c-12.2-8.8-28.3-13.7-40.4-17.4l-.8-.2c-14.2-4.3-23.8-7.3-29.9-11.4c-2.6-1.8-3.4-3-3.6-3.5c-.2-.3-.7-1.6-.1-5c.3-1.9 1.9-5.2 8.2-8.1c6.4-2.9 16.4-4.5 28.6-2.6c4.3 .7 17.9 3.3 21.7 4.3c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-4.4-1.2-14.4-3.2-21-4.4l0-6.3c0-11.1-9-20.1-20.1-20.1zM48 352l16 0c19.5 25.9 44 47.7 72.2 64L64 416l0 32 192 0 192 0 0-32-72.2 0c28.2-16.3 52.8-38.1 72.2-64l16 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48z\"]\n};\nconst faDonate = faCircleDollarToSlot;\nconst faMemory = {\n  prefix: 'fas',\n  iconName: 'memory',\n  icon: [576, 512, [], \"f538\", \"M64 64C28.7 64 0 92.7 0 128l0 7.4c0 6.8 4.4 12.6 10.1 16.3C23.3 160.3 32 175.1 32 192s-8.7 31.7-21.9 40.3C4.4 236 0 241.8 0 248.6L0 320l576 0 0-71.4c0-6.8-4.4-12.6-10.1-16.3C552.7 223.7 544 208.9 544 192s8.7-31.7 21.9-40.3c5.7-3.7 10.1-9.5 10.1-16.3l0-7.4c0-35.3-28.7-64-64-64L64 64zM576 352L0 352l0 64c0 17.7 14.3 32 32 32l48 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 48 0c17.7 0 32-14.3 32-32l0-64zM192 160l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faRoadSpikes = {\n  prefix: 'fas',\n  iconName: 'road-spikes',\n  icon: [640, 512, [], \"e568\", \"M64 116.8c0-15.8 20.5-22 29.3-8.9L192 256l0-139.2c0-15.8 20.5-22 29.3-8.9L320 256l0-139.2c0-15.8 20.5-22 29.3-8.9L448 256l0-139.2c0-15.8 20.5-22 29.3-8.9L606.8 302.2c14.2 21.3-1.1 49.7-26.6 49.7L512 352l-64 0-64 0-64 0-64 0-64 0L64 352l0-235.2zM32 384l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faFireBurner = {\n  prefix: 'fas',\n  iconName: 'fire-burner',\n  icon: [640, 512, [], \"e4f1\", \"M345.7 48.3L358 34.5c5.4-6.1 13.3-8.8 20.9-8.9c7.2 0 14.3 2.6 19.9 7.8c19.7 18.3 39.8 43.2 55 70.6C469 131.2 480 162.2 480 192.2C480 280.8 408.7 352 320 352c-89.6 0-160-71.3-160-159.8c0-37.3 16-73.4 36.8-104.5c20.9-31.3 47.5-59 70.9-80.2C273.4 2.3 280.7-.2 288 0c14.1 .3 23.8 11.4 32.7 21.6c0 0 0 0 0 0c2 2.3 4 4.6 6 6.7l19 19.9zM384 240.2c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C293 167.1 256 203.6 256 240.2c0 35.3 28.7 64 64 64s64-28.7 64-64zM32 288c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 64 448 0 0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l0-96zM320 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm160-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM192 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faFlag = {\n  prefix: 'fas',\n  iconName: 'flag',\n  icon: [448, 512, [127988, 61725], \"f024\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32L0 64 0 368 0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 64.3-16.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30l0-247.7c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L64 48l0-16z\"]\n};\nconst faHanukiah = {\n  prefix: 'fas',\n  iconName: 'hanukiah',\n  icon: [640, 512, [128334], \"f6e6\", \"M314.2 3.3C309.1 12.1 296 36.6 296 56c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C324.6 1.2 322.4 0 320 0s-4.6 1.2-5.8 3.3zm-288 48C21.1 60.1 8 84.6 8 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C36.6 49.2 34.4 48 32 48s-4.6 1.2-5.8 3.3zM88 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C101.1 60.1 88 84.6 88 104zm82.2-52.7C165.1 60.1 152 84.6 152 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM216 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C229.1 60.1 216 84.6 216 104zM394.2 51.3C389.1 60.1 376 84.6 376 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM440 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C453.1 60.1 440 84.6 440 104zm82.2-52.7C517.1 60.1 504 84.6 504 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM584 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C597.1 60.1 584 84.6 584 104zM112 160c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zM352 144c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176L96 320c-17.7 0-32-14.3-32-32l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 53 43 96 96 96l192 0 0 64-128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-64 192 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32l-192 0 0-176z\"]\n};\nconst faFeather = {\n  prefix: 'fas',\n  iconName: 'feather',\n  icon: [512, 512, [129718], \"f52d\", \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57 68 0c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330l0 55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"]\n};\nconst faVolumeLow = {\n  prefix: 'fas',\n  iconName: 'volume-low',\n  icon: [448, 512, [128264, \"volume-down\"], \"f027\", \"M301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM412.6 181.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5z\"]\n};\nconst faVolumeDown = faVolumeLow;\nconst faCommentSlash = {\n  prefix: 'fas',\n  iconName: 'comment-slash',\n  icon: [640, 512, [], \"f4b3\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L512.9 376.7C552.2 340.2 576 292.3 576 240C576 125.1 461.4 32 320 32c-67.7 0-129.3 21.4-175.1 56.3L38.8 5.1zm385.2 425L82.9 161.3C70.7 185.6 64 212.2 64 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c37 0 72.3-6.4 104.1-17.9z\"]\n};\nconst faCloudSunRain = {\n  prefix: 'fas',\n  iconName: 'cloud-sun-rain',\n  icon: [640, 512, [127782], \"f743\", \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l10.4 62.4c-23.3 10.8-42.9 28.4-56 50.3c-14.6-9-31.8-14.1-50.2-14.1c-53 0-96 43-96 96c0 35.5 19.3 66.6 48 83.2c.8 31.8 13.2 60.7 33.1 82.7l-56 39.2c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM208 144c13.8 0 26.7 4.4 37.1 11.9c-1.2 4.1-2.2 8.3-3 12.6c-37.9 14.6-67.2 46.6-77.8 86.4C151.8 243.1 144 226.5 144 208c0-35.3 28.7-64 64-64zm69.4 276c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm74.5-116.1c0 44.2-35.8 80-80 80l-271.9 0c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"]\n};\nconst faCompress = {\n  prefix: 'fas',\n  iconName: 'compress',\n  icon: [448, 512, [], \"f066\", \"M160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z\"]\n};\nconst faWheatAwn = {\n  prefix: 'fas',\n  iconName: 'wheat-awn',\n  icon: [512, 512, [\"wheat-alt\"], \"e2cd\", \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0L486.5 231c6.2-6.2 6.2-16.4 0-22.6L475.2 197c-5.2-5.2-10.6-9.8-16.4-13.9L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3z\"]\n};\nconst faWheatAlt = faWheatAwn;\nconst faAnkh = {\n  prefix: 'fas',\n  iconName: 'ankh',\n  icon: [320, 512, [9765], \"f644\", \"M96 128c0-35.3 28.7-64 64-64s64 28.7 64 64c0 41.6-20.7 76.6-46.6 104.1c-5.9 6.2-11.8 11.8-17.4 16.7c-5.6-4.9-11.5-10.5-17.4-16.7C116.7 204.6 96 169.6 96 128zM160 0C89.3 0 32 57.3 32 128c0 52.4 21.5 95.5 46.8 128L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-46.8 0c25.4-32.5 46.8-75.6 46.8-128C288 57.3 230.7 0 160 0z\"]\n};\nconst faHandsHoldingChild = {\n  prefix: 'fas',\n  iconName: 'hands-holding-child',\n  icon: [640, 512, [], \"e4fa\", \"M320 0a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm44.7 164.3L375.8 253c1.6 13.2-7.7 25.1-20.8 26.8s-25.1-7.7-26.8-20.8l-4.4-35-7.6 0-4.4 35c-1.6 13.2-13.6 22.5-26.8 20.8s-22.5-13.6-20.8-26.8l11.1-88.8L255.5 181c-10.1 8.6-25.3 7.3-33.8-2.8s-7.3-25.3 2.8-33.8l27.9-23.6C271.3 104.8 295.3 96 320 96s48.7 8.8 67.6 24.7l27.9 23.6c10.1 8.6 11.4 23.7 2.8 33.8s-23.7 11.4-33.8 2.8l-19.8-16.7zM40 64c22.1 0 40 17.9 40 40l0 40 0 80 0 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2c0 0 0 0 0 0l25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 224l0-64 0-56C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 56 0 64 0 101.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3c0 0 0 0 0 0l15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3l0-40.2 0-80 0-40c0-22.1 17.9-40 40-40z\"]\n};\nconst faAsterisk = {\n  prefix: 'fas',\n  iconName: 'asterisk',\n  icon: [384, 512, [10033, 61545], \"2a\", \"M192 32c17.7 0 32 14.3 32 32l0 135.5 111.5-66.9c15.2-9.1 34.8-4.2 43.9 11s4.2 34.8-11 43.9L254.2 256l114.3 68.6c15.2 9.1 20.1 28.7 11 43.9s-28.7 20.1-43.9 11L224 312.5 224 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-135.5L48.5 379.4c-15.2 9.1-34.8 4.2-43.9-11s-4.2-34.8 11-43.9L129.8 256 15.5 187.4c-15.2-9.1-20.1-28.7-11-43.9s28.7-20.1 43.9-11L160 199.5 160 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faSquareCheck = {\n  prefix: 'fas',\n  iconName: 'square-check',\n  icon: [448, 512, [9745, 9989, 61510, \"check-square\"], \"f14a\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faCheckSquare = faSquareCheck;\nconst faPesetaSign = {\n  prefix: 'fas',\n  iconName: 'peseta-sign',\n  icon: [384, 512, [], \"e221\", \"M64 32C46.3 32 32 46.3 32 64l0 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 96 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 96 0c77.4 0 142-55 156.8-128l3.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-3.2 0C334 87 269.4 32 192 32L64 32zM282.5 160L96 160l0-64 96 0c41.8 0 77.4 26.7 90.5 64zM96 224l186.5 0c-13.2 37.3-48.7 64-90.5 64l-96 0 0-64z\"]\n};\nconst faHeading = {\n  prefix: 'fas',\n  iconName: 'heading',\n  icon: [448, 512, [\"header\"], \"f1dc\", \"M0 64C0 46.3 14.3 32 32 32l48 0 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 112 224 0 0-112-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 144 0 176 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-144-224 0 0 144 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-176L48 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst faHeader = faHeading;\nconst faGhost = {\n  prefix: 'fas',\n  iconName: 'ghost',\n  icon: [384, 512, [128123], \"f6e2\", \"M40.1 467.1l-11.2 9c-3.2 2.5-7.1 3.9-11.1 3.9C8 480 0 472 0 462.2L0 192C0 86 86 0 192 0S384 86 384 192l0 270.2c0 9.8-8 17.8-17.8 17.8c-4 0-7.9-1.4-11.1-3.9l-11.2-9c-13.4-10.7-32.8-9-44.1 3.9L269.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6l-26.6-30.5c-12.7-14.6-35.4-14.6-48.2 0L141.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6L84.2 471c-11.3-12.9-30.7-14.6-44.1-3.9zM160 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faList = {\n  prefix: 'fas',\n  iconName: 'list',\n  icon: [512, 512, [\"list-squares\"], \"f03a\", \"M40 48C26.7 48 16 58.7 16 72l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24L40 48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM16 232l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zM40 368c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0z\"]\n};\nconst faListSquares = faList;\nconst faSquarePhoneFlip = {\n  prefix: 'fas',\n  iconName: 'square-phone-flip',\n  icon: [448, 512, [\"phone-square-alt\"], \"f87b\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zm-90.7 96.7c-9.7-2.6-19.9 2.3-23.7 11.6l-20 48c-3.4 8.2-1 17.6 5.8 23.2L280 231.7c-16.6 35.2-45.1 63.7-80.3 80.3l-20.2-24.7c-5.6-6.8-15-9.2-23.2-5.8l-48 20c-9.3 3.9-14.2 14-11.6 23.7l12 44C111.1 378 119 384 128 384c123.7 0 224-100.3 224-224c0-9-6-16.9-14.7-19.3l-44-12z\"]\n};\nconst faPhoneSquareAlt = faSquarePhoneFlip;\nconst faCartPlus = {\n  prefix: 'fas',\n  iconName: 'cart-plus',\n  icon: [576, 512, [], \"f217\", \"M0 24C0 10.7 10.7 0 24 0L69.5 0c22 0 41.5 12.8 50.6 32l411 0c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3l-288.5 0 5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5L488 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-288.3 0c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5L24 48C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM252 160c0 11 9 20 20 20l44 0 0 44c0 11 9 20 20 20s20-9 20-20l0-44 44 0c11 0 20-9 20-20s-9-20-20-20l-44 0 0-44c0-11-9-20-20-20s-20 9-20 20l0 44-44 0c-11 0-20 9-20 20z\"]\n};\nconst faGamepad = {\n  prefix: 'fas',\n  iconName: 'gamepad',\n  icon: [640, 512, [], \"f11b\", \"M192 64C86 64 0 150 0 256S86 448 192 448l256 0c106 0 192-86 192-192s-86-192-192-192L192 64zM496 168a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM392 304a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM168 200c0-13.3 10.7-24 24-24s24 10.7 24 24l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32z\"]\n};\nconst faCircleDot = {\n  prefix: 'fas',\n  iconName: 'circle-dot',\n  icon: [512, 512, [128280, \"dot-circle\"], \"f192\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faDotCircle = faCircleDot;\nconst faFaceDizzy = {\n  prefix: 'fas',\n  iconName: 'face-dizzy',\n  icon: [512, 512, [\"dizzy\"], \"f567\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-224a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM100.7 132.7c6.2-6.2 16.4-6.2 22.6 0L160 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L182.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L160 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L137.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6zm192 0c6.2-6.2 16.4-6.2 22.6 0L352 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L374.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L352 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L329.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6z\"]\n};\nconst faDizzy = faFaceDizzy;\nconst faEgg = {\n  prefix: 'fas',\n  iconName: 'egg',\n  icon: [384, 512, [129370], \"f7fb\", \"M192 496C86 496 0 394 0 288C0 176 64 16 192 16s192 160 192 272c0 106-86 208-192 208zM154.8 134c6.5-6 7-16.1 1-22.6s-16.1-7-22.6-1c-23.9 21.8-41.1 52.7-52.3 84.2C69.7 226.1 64 259.7 64 288c0 8.8 7.2 16 16 16s16-7.2 16-16c0-24.5 5-54.4 15.1-82.8c10.1-28.5 25-54.1 43.7-71.2z\"]\n};\nconst faHouseMedicalCircleXmark = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-xmark',\n  icon: [640, 512, [], \"e513\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"]\n};\nconst faCampground = {\n  prefix: 'fas',\n  iconName: 'campground',\n  icon: [576, 512, [9978], \"f6bb\", \"M377 52c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5L288 60.8 249 12c-11-13.8-31.2-16-45-5s-16 31.2-5 45l48 60L12.3 405.4C4.3 415.4 0 427.7 0 440.4L0 464c0 26.5 21.5 48 48 48l240 0 240 0c26.5 0 48-21.5 48-48l0-23.6c0-12.7-4.3-25.1-12.3-35L329 112l48-60zM288 448l-119.5 0L288 291.7 407.5 448 288 448z\"]\n};\nconst faFolderPlus = {\n  prefix: 'fas',\n  iconName: 'folder-plus',\n  icon: [512, 512, [], \"f65e\", \"M512 416c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64l0 256zM232 376c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 64z\"]\n};\nconst faFutbol = {\n  prefix: 'fas',\n  iconName: 'futbol',\n  icon: [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M417.3 360.1l-71.6-4.8c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-17.6 69.6C289.5 445.8 273 448 256 448s-33.5-2.2-49.2-6.4L189.2 372c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-71.6 4.8c-17.6-27.2-28.5-59.2-30.4-93.6L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15l-26.7-66.6C128 109.2 155.3 89 186.7 76.9l55.2 46c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l55.2-46c31.3 12.1 58.7 32.3 79.6 57.9l-26.7 66.6c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9l60.7 38.2c-1.9 34.4-12.8 66.4-30.4 93.6zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6l59.2 0c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"]\n};\nconst faFutbolBall = faFutbol;\nconst faSoccerBall = faFutbol;\nconst faPaintbrush = {\n  prefix: 'fas',\n  iconName: 'paintbrush',\n  icon: [576, 512, [128396, \"paint-brush\"], \"f1fc\", \"M339.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L568.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S517.7-4.4 499.1 9.6L262.4 187.2c-24 18-38.2 46.1-38.4 76.1L339.3 367.1zm-19.6 25.4l-116-104.4C143.9 290.3 96 339.6 96 400c0 3.9 .2 7.8 .6 11.6C98.4 429.1 86.4 448 68.8 448L64 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z\"]\n};\nconst faPaintBrush = faPaintbrush;\nconst faLock = {\n  prefix: 'fas',\n  iconName: 'lock',\n  icon: [448, 512, [128274], \"f023\", \"M144 144l0 48 160 0 0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192l0-48C80 64.5 144.5 0 224 0s144 64.5 144 144l0 48 16 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256c0-35.3 28.7-64 64-64l16 0z\"]\n};\nconst faGasPump = {\n  prefix: 'fas',\n  iconName: 'gas-pump',\n  icon: [512, 512, [9981], \"f52f\", \"M32 64C32 28.7 60.7 0 96 0L256 0c35.3 0 64 28.7 64 64l0 192 8 0c48.6 0 88 39.4 88 88l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-154c-27.6-7.1-48-32.2-48-62l0-64L384 64c-8.8-8.8-8.8-23.2 0-32s23.2-8.8 32 0l77.3 77.3c12 12 18.7 28.3 18.7 45.3l0 13.5 0 24 0 32 0 152c0 39.8-32.2 72-72 72s-72-32.2-72-72l0-32c0-22.1-17.9-40-40-40l-8 0 0 144c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64zM96 80l0 96c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16L112 64c-8.8 0-16 7.2-16 16z\"]\n};\nconst faHotTubPerson = {\n  prefix: 'fas',\n  iconName: 'hot-tub-person',\n  icon: [512, 512, [\"hot-tub\"], \"f593\", \"M272 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5l0 13.2c0 13.3 10.7 24 24 24s24-10.7 24-24l0-13.2c0-34-14.4-66.4-39.7-89.2L295.8 82.8C280.7 69.1 272 49.7 272 29.2l0-5.2zM0 320l0 16L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-170.7 0c-13.8 0-27.3-4.5-38.4-12.8l-85.3-64C137 166.7 116.8 160 96 160c-53 0-96 43-96 96l0 64zm128 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zm112 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zM360 0c-13.3 0-24 10.7-24 24l0 5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5l0 13.2c0 13.3 10.7 24 24 24s24-10.7 24-24l0-13.2c0-34-14.4-66.4-39.7-89.2L407.8 82.8C392.7 69.1 384 49.7 384 29.2l0-5.2c0-13.3-10.7-24-24-24zM64 128A64 64 0 1 0 64 0a64 64 0 1 0 0 128z\"]\n};\nconst faHotTub = faHotTubPerson;\nconst faMapLocation = {\n  prefix: 'fas',\n  iconName: 'map-location',\n  icon: [576, 512, [\"map-marked\"], \"f59f\", \"M302.8 312C334.9 271.9 408 174.6 408 120C408 53.7 354.3 0 288 0S168 53.7 168 120c0 54.6 73.1 151.9 105.2 192c7.7 9.6 22 9.6 29.6 0zM416 503l144.9-58c9.1-3.6 15.1-12.5 15.1-22.3L576 152c0-17-17.1-28.6-32.9-22.3l-116 46.4c-.5 1.2-1 2.5-1.5 3.7c-2.9 6.8-6.1 13.7-9.6 20.6L416 503zM15.1 187.3C6 191 0 199.8 0 209.6L0 480.4c0 17 17.1 28.6 32.9 22.3L160 451.8l0-251.4c-3.5-6.9-6.7-13.8-9.6-20.6c-5.6-13.2-10.4-27.4-12.8-41.5l-122.6 49zM384 255c-20.5 31.3-42.3 59.6-56.2 77c-20.5 25.6-59.1 25.6-79.6 0c-13.9-17.4-35.7-45.7-56.2-77l0 194.4 192 54.9L384 255z\"]\n};\nconst faMapMarked = faMapLocation;\nconst faHouseFloodWater = {\n  prefix: 'fas',\n  iconName: 'house-flood-water',\n  icon: [576, 512, [], \"e50e\", \"M306.8 6.1C295.6-2 280.4-2 269.2 6.1l-176 128c-11.2 8.2-15.9 22.6-11.6 35.8S98.1 192 112 192l16 0 0 73c1.7 1 3.3 2 4.9 3.1c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c1.5-1 3-2 4.5-2.9l-.3-73.2 16.6 0c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128zM269.5 309.9C247 325.4 219.5 336 192 336c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 389.7 159 400 192 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448z\"]\n};\nconst faTree = {\n  prefix: 'fas',\n  iconName: 'tree',\n  icon: [448, 512, [127794], \"f1bb\", \"M210.6 5.9L62 169.4c-3.9 4.2-6 9.8-6 15.5C56 197.7 66.3 208 79.1 208l24.9 0L30.6 281.4c-4.2 4.2-6.6 10-6.6 16C24 309.9 34.1 320 46.6 320L80 320 5.4 409.5C1.9 413.7 0 419 0 424.5c0 13 10.5 23.5 23.5 23.5L192 448l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 168.5 0c13 0 23.5-10.5 23.5-23.5c0-5.5-1.9-10.8-5.4-15L368 320l33.4 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L344 208l24.9 0c12.7 0 23.1-10.3 23.1-23.1c0-5.7-2.1-11.3-6-15.5L237.4 5.9C234 2.1 229.1 0 224 0s-10 2.1-13.4 5.9z\"]\n};\nconst faBridgeLock = {\n  prefix: 'fas',\n  iconName: 'bridge-lock',\n  icon: [640, 512, [], \"e4cc\", \"M32 64c0-17.7 14.3-32 32-32l512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-40 0 0 64-8 0c-61.9 0-112 50.1-112 112l0 24.6c-9.9 5.8-18.2 14.1-23.8 24.1c-17.6-20-43.4-32.7-72.2-32.7c-53 0-96 43-96 96l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c0-53-43-96-96-96l0-128 72 0 0-64L64 96C46.3 96 32 81.7 32 64zM408 96l0 64 80 0 0-64-80 0zm-48 64l0-64-80 0 0 64 80 0zM152 96l0 64 80 0 0-64-80 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faSackDollar = {\n  prefix: 'fas',\n  iconName: 'sack-dollar',\n  icon: [512, 512, [128176], \"f81d\", \"M320 96L192 96 144.6 24.9C137.5 14.2 145.1 0 157.9 0L354.1 0c12.8 0 20.4 14.2 13.3 24.9L320 96zM192 128l128 0c3.8 2.5 8.1 5.3 13 8.4C389.7 172.7 512 250.9 512 416c0 53-43 96-96 96L96 512c-53 0-96-43-96-96C0 250.9 122.3 172.7 179 136.4c0 0 0 0 0 0s0 0 0 0c4.8-3.1 9.2-5.9 13-8.4zm84 88c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15c0 0 0 0 0 0l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7l0-13.9z\"]\n};\nconst faPenToSquare = {\n  prefix: 'fas',\n  iconName: 'pen-to-square',\n  icon: [512, 512, [\"edit\"], \"f044\", \"M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z\"]\n};\nconst faEdit = faPenToSquare;\nconst faCarSide = {\n  prefix: 'fas',\n  iconName: 'car-side',\n  icon: [640, 512, [128663], \"f5e4\", \"M171.3 96L224 96l0 96-112.7 0 30.4-75.9C146.5 104 158.2 96 171.3 96zM272 192l0-96 81.2 0c9.7 0 18.9 4.4 25 12l67.2 84L272 192zm256.2 1L428.2 68c-18.2-22.8-45.8-36-75-36L171.3 32c-39.3 0-74.6 23.9-89.1 60.3L40.6 196.4C16.8 205.8 0 228.9 0 256L0 368c0 17.7 14.3 32 32 32l33.3 0c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80l130.7 0c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80l33.3 0c17.7 0 32-14.3 32-32l0-48c0-65.2-48.8-119-111.8-127zM434.7 368a48 48 0 1 1 90.5 32 48 48 0 1 1 -90.5-32zM160 336a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faShareNodes = {\n  prefix: 'fas',\n  iconName: 'share-nodes',\n  icon: [448, 512, [\"share-alt\"], \"f1e0\", \"M352 224c53 0 96-43 96-96s-43-96-96-96s-96 43-96 96c0 4 .2 8 .7 11.9l-94.1 47C145.4 170.2 121.9 160 96 160c-53 0-96 43-96 96s43 96 96 96c25.9 0 49.4-10.2 66.6-26.9l94.1 47c-.5 3.9-.7 7.8-.7 11.9c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-25.9 0-49.4 10.2-66.6 26.9l-94.1-47c.5-3.9 .7-7.8 .7-11.9s-.2-8-.7-11.9l94.1-47C302.6 213.8 326.1 224 352 224z\"]\n};\nconst faShareAlt = faShareNodes;\nconst faHeartCircleMinus = {\n  prefix: 'fas',\n  iconName: 'heart-circle-minus',\n  icon: [576, 512, [], \"e4ff\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"]\n};\nconst faHourglassHalf = {\n  prefix: 'fas',\n  iconName: 'hourglass-half',\n  icon: [384, 512, [\"hourglass-2\"], \"f252\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM96 75l0-11 192 0 0 11c0 19-5.6 37.4-16 53L112 128c-10.3-15.6-16-34-16-53zm16 309c3.5-5.3 7.6-10.3 12.1-14.9L192 301.3l67.9 67.9c4.6 4.6 8.6 9.6 12.1 14.9L112 384z\"]\n};\nconst faHourglass2 = faHourglassHalf;\nconst faMicroscope = {\n  prefix: 'fas',\n  iconName: 'microscope',\n  icon: [512, 512, [128300], \"f610\", \"M160 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32c-17.7 0-32-14.3-32-32l0-224c0-17.7 14.3-32 32-32zM32 448l288 0c70.7 0 128-57.3 128-128s-57.3-128-128-128l0-64c106 0 192 86 192 192c0 49.2-18.5 94-48.9 128l16.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32zm80-64l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faSink = {\n  prefix: 'fas',\n  iconName: 'sink',\n  icon: [512, 512, [], \"e06d\", \"M288 96c0-17.7 14.3-32 32-32s32 14.3 32 32s14.3 32 32 32s32-14.3 32-32c0-53-43-96-96-96s-96 43-96 96l0 192-64 0 0-24c0-30.9-25.1-56-56-56l-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c4.4 0 8 3.6 8 8l0 24-80 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0 224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-24c0-4.4 3.6-8 8-8l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0c-30.9 0-56 25.1-56 56l0 24-64 0 0-192zM480 416l0-32L32 384l0 32c0 53 43 96 96 96l256 0c53 0 96-43 96-96z\"]\n};\nconst faBagShopping = {\n  prefix: 'fas',\n  iconName: 'bag-shopping',\n  icon: [448, 512, [\"shopping-bag\"], \"f290\", \"M160 112c0-35.3 28.7-64 64-64s64 28.7 64 64l0 48-128 0 0-48zm-48 48l-64 0c-26.5 0-48 21.5-48 48L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-208c0-26.5-21.5-48-48-48l-64 0 0-48C336 50.1 285.9 0 224 0S112 50.1 112 112l0 48zm24 48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm152 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faShoppingBag = faBagShopping;\nconst faArrowDownZA = {\n  prefix: 'fas',\n  iconName: 'arrow-down-z-a',\n  icon: [576, 512, [\"sort-alpha-desc\", \"sort-alpha-down-alt\"], \"f881\", \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7 128 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 64c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 160l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 96 352 96c-17.7 0-32-14.3-32-32zm96 192c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 448l-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128c5.4-10.8 16.5-17.7 28.6-17.7zM395.8 400l40.4 0L416 359.6 395.8 400z\"]\n};\nconst faSortAlphaDesc = faArrowDownZA;\nconst faSortAlphaDownAlt = faArrowDownZA;\nconst faMitten = {\n  prefix: 'fas',\n  iconName: 'mitten',\n  icon: [448, 512, [], \"f7b5\", \"M352 384L64 384 5.4 178.9C1.8 166.4 0 153.4 0 140.3C0 62.8 62.8 0 140.3 0l3.4 0c66 0 123.5 44.9 139.5 108.9l31.4 125.8 17.6-20.1C344.8 200.2 362.9 192 382 192l2.8 0c34.9 0 63.3 28.3 63.3 63.3c0 15.9-6 31.2-16.8 42.9L352 384zM32 448c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32l0-32z\"]\n};\nconst faPersonRays = {\n  prefix: 'fas',\n  iconName: 'person-rays',\n  icon: [512, 512, [], \"e54d\", \"M208 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1-28.6 47.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L328 256.9 328 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM7 7C16.4-2.3 31.6-2.3 41 7l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 41C-2.3 31.6-2.3 16.4 7 7zM471 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L471 7zM7 505c-9.4-9.4-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 505c-9.4 9.4-24.6 9.4-33.9 0zm464 0l-80-80c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"]\n};\nconst faUsers = {\n  prefix: 'fas',\n  iconName: 'users',\n  icon: [640, 512, [], \"f0c0\", \"M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192l42.7 0c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0L21.3 320C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7l42.7 0C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3l-213.3 0zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352l117.3 0C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7l-330.7 0c-14.7 0-26.7-11.9-26.7-26.7z\"]\n};\nconst faEyeSlash = {\n  prefix: 'fas',\n  iconName: 'eye-slash',\n  icon: [640, 512, [], \"f070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\"]\n};\nconst faFlaskVial = {\n  prefix: 'fas',\n  iconName: 'flask-vial',\n  icon: [640, 512, [], \"e4f3\", \"M175 389.4c-9.8 16-15 34.3-15 53.1c-10 3.5-20.8 5.5-32 5.5c-53 0-96-43-96-96L32 64C14.3 64 0 49.7 0 32S14.3 0 32 0L96 0l64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 245.9-49 79.6zM96 64l0 96 64 0 0-96L96 64zM352 0L480 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 150.9L629.7 406.2c6.7 10.9 10.3 23.5 10.3 36.4c0 38.3-31.1 69.4-69.4 69.4l-309.2 0c-38.3 0-69.4-31.1-69.4-69.4c0-12.8 3.6-25.4 10.3-36.4L320 214.9 320 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0zm32 64l0 160c0 5.9-1.6 11.7-4.7 16.8L330.5 320l171 0-48.8-79.2c-3.1-5-4.7-10.8-4.7-16.8l0-160-64 0z\"]\n};\nconst faHand = {\n  prefix: 'fas',\n  iconName: 'hand',\n  icon: [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208z\"]\n};\nconst faHandPaper = faHand;\nconst faOm = {\n  prefix: 'fas',\n  iconName: 'om',\n  icon: [512, 512, [128329], \"f679\", \"M379.3 4.7c-6.2-6.2-16.4-6.2-22.6 0l-16 16c-6.2 6.2-6.2 16.4 0 22.6l16 16c6.2 6.2 16.4 6.2 22.6 0l16-16c6.2-6.2 6.2-16.4 0-22.6l-16-16zM281 66.7c-2.2-1.5-4.9-2.5-7.7-2.7c-.6 0-1.3-.1-1.9 0c-3.9 .2-7.4 1.7-10.1 4.2c-.9 .8-1.6 1.7-2.3 2.6c-1.7 2.4-2.7 5.3-2.9 8.5c0 .7 0 1.4 0 2.1c.2 2.2 .9 4.3 1.9 6.2l.3 .6c.3 .6 .8 1.4 1.4 2.4c1.2 2 2.9 4.8 5.1 8.2c4.4 6.7 11.1 15.5 20 24.4C302.4 141.1 330.3 160 368 160c31.2 0 56.6-10.4 73.9-20.2c8.7-5 15.6-9.9 20.4-13.8c2.4-1.9 4.3-3.6 5.7-4.9c.7-.6 1.3-1.2 1.7-1.6l.6-.5 .1-.1 .1-.1s0 0 0 0s0 0 0 0c5.9-5.8 9.5-13.9 9.5-22.8c0-17.7-14.3-32-32-32c-8.7 0-16.7 3.5-22.4 9.2c-.1 .1-.2 .2-.5 .4c-.5 .5-1.5 1.3-2.8 2.4c-2.7 2.2-6.8 5.2-12.1 8.2C399.4 90.4 384.8 96 368 96c-20.8 0-42.4-7-59.5-14.6c-8.4-3.7-15.4-7.5-20.3-10.3c-2.4-1.4-4.3-2.5-5.6-3.3c-.6-.4-1.1-.7-1.4-.9l-.3-.2zM115.2 169.6c8-6 17.9-9.6 28.8-9.6c26.5 0 48 21.5 48 48s-21.5 48-48 48l-34.2 0c-7.6 0-13.8 6.2-13.8 13.8c0 1.5 .2 2.9 .7 4.4l8 24c4.4 13.1 16.6 21.9 30.4 21.9l8.9 0 16 0c35.3 0 64 28.7 64 64s-28.7 64-64 64c-50.8 0-82.7-21.5-102.2-42.8c-9.9-10.8-16.6-21.6-20.9-29.7c-2.1-4-3.6-7.3-4.5-9.6c-.5-1.1-.8-2-1-2.5l-.2-.5c-.3-.9-.7-1.8-1.1-2.6c-1.2-2.2-2.8-4-4.7-5.4c-1.9-1.4-4.1-2.3-6.5-2.8c-1.4-.3-2.9-.3-4.4-.2c-2.5 .2-4.8 1-6.8 2.3c-1.1 .7-2.2 1.5-3.1 2.5c-2.4 2.5-4.1 5.8-4.5 9.5c-.1 .6-.1 1.1-.1 1.7c0 0 0 0 0 0c0 .8 .1 1.7 .2 2.5l0 .1c0 .3 .1 .8 .2 1.3c.2 1.1 .4 2.7 .8 4.6c.8 3.9 2 9.4 3.9 15.9c3.8 13 10.3 30.4 21.3 48C48.7 476.2 89.4 512 160 512c70.7 0 128-57.3 128-128c0-23.3-6.2-45.2-17.1-64l22.6 0c25.5 0 49.9-10.1 67.9-28.1l26.5-26.5c6-6 14.1-9.4 22.6-9.4l5.5 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32c-25.7 0-41.4-12.5-51.2-25.6c-5-6.7-8.4-13.4-10.5-18.6c-1.1-2.5-1.8-4.6-2.2-6c-.2-.7-.4-1.2-.5-1.5l-.1-.2c-.3-1.3-.8-2.6-1.5-3.8c-1.1-2-2.6-3.8-4.4-5.1c-2.7-2-6-3.2-9.6-3.2l-.2 0c-8 .1-14.6 6.1-15.6 13.9c0 0 0 0 0 0c0 .3-.1 .6-.2 1.1c-.1 .9-.3 2.1-.4 3.6c-.3 3-.6 7.3-.6 12.4c0 10.1 1.1 23.9 5.8 38.1c4.8 14.3 13.4 29.3 28.6 40.7C368.7 473.3 389.3 480 416 480c53 0 96-43 96-96l0-96c0-53-43-96-96-96l-5.5 0c-25.5 0-49.9 10.1-67.9 28.1l-26.5 26.5c-6 6-14.1 9.4-22.6 9.4l-48.3 0c6.9-14.5 10.8-30.8 10.8-48c0-61.9-50.1-112-112-112c-25.2 0-48.5 8.3-67.2 22.4c-14.1 10.6-17 30.7-6.4 44.8s30.7 17 44.8 6.4z\"]\n};\nconst faWorm = {\n  prefix: 'fas',\n  iconName: 'worm',\n  icon: [512, 512, [], \"e599\", \"M256 96c0-53 43-96 96-96l38.4 0C439.9 0 480 40.1 480 89.6l0 86.4 0 16 0 184c0 75.1-60.9 136-136 136s-136-60.9-136-136l0-80c0-22.1-17.9-40-40-40s-40 17.9-40 40l0 168c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-168c0-75.1 60.9-136 136-136s136 60.9 136 136l0 80c0 22.1 17.9 40 40 40s40-17.9 40-40l0-184-32 0c-53 0-96-43-96-96zm144-8a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faHouseCircleXmark = {\n  prefix: 'fas',\n  iconName: 'house-circle-xmark',\n  icon: [640, 512, [], \"e50b\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faPlug = {\n  prefix: 'fas',\n  iconName: 'plug',\n  icon: [384, 512, [128268], \"f1e6\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2C297 398 352 333.4 352 256l0-32c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"]\n};\nconst faChevronUp = {\n  prefix: 'fas',\n  iconName: 'chevron-up',\n  icon: [512, 512, [], \"f077\", \"M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z\"]\n};\nconst faHandSpock = {\n  prefix: 'fas',\n  iconName: 'hand-spock',\n  icon: [576, 512, [128406], \"f259\", \"M246.9 23.7C242.3 6.6 224.8-3.5 207.7 1.1s-27.2 22.1-22.6 39.2L238 237.8c2.5 9.2-4.5 18.2-14 18.2c-6.4 0-12-4.2-13.9-10.3L166.6 102.7c-5.1-16.9-23-26.4-39.9-21.3s-26.4 23-21.3 39.9l62.8 206.4c2.4 7.9-7.2 13.8-13.2 8.1L99.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L156.8 448c43.1 41.1 100.4 64 160 64l10.9 0 8.2 0c.1 0 .1-.1 .1-.1s.1-.1 .1-.1c58.3-3.5 108.6-43.2 125.3-99.7l81.2-275c5-16.9-4.7-34.7-21.6-39.8s-34.7 4.7-39.8 21.6L443.5 247.1c-1.6 5.3-6.4 8.9-12 8.9c-7.9 0-13.8-7.3-12.2-15.1l36-170.3c3.7-17.3-7.4-34.3-24.7-37.9s-34.3 7.4-37.9 24.7L355.1 235.1c-2.6 12.2-13.3 20.9-25.8 20.9c-11.9 0-22.4-8-25.4-19.5l-57-212.8z\"]\n};\nconst faStopwatch = {\n  prefix: 'fas',\n  iconName: 'stopwatch',\n  icon: [448, 512, [9201], \"f2f2\", \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 34.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6L256 64l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L224 0 176 0zm72 192l0 128c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-128c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faFaceKiss = {\n  prefix: 'fas',\n  iconName: 'face-kiss',\n  icon: [512, 512, [128535, \"kiss\"], \"f596\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faKiss = faFaceKiss;\nconst faBridgeCircleXmark = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-xmark',\n  icon: [640, 512, [], \"e4cb\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faFaceGrinTongue = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue',\n  icon: [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448l0-47.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 46.9c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 448l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGrinTongue = faFaceGrinTongue;\nconst faChessBishop = {\n  prefix: 'fas',\n  iconName: 'chess-bishop',\n  icon: [320, 512, [9821], \"f43a\", \"M128 0C110.3 0 96 14.3 96 32c0 16.1 11.9 29.4 27.4 31.7C78.4 106.8 8 190 8 288c0 47.4 30.8 72.3 56 84.7L64 400l192 0 0-27.3c25.2-12.5 56-37.4 56-84.7c0-37.3-10.2-72.4-25.3-104.1l-99.4 99.4c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L270.8 154.6c-23.2-38.1-51.8-69.5-74.2-90.9C212.1 61.4 224 48.1 224 32c0-17.7-14.3-32-32-32L128 0zM48 432L6.6 473.4c-4.2 4.2-6.6 10-6.6 16C0 501.9 10.1 512 22.6 512l274.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L272 432 48 432z\"]\n};\nconst faFaceGrinWink = {\n  prefix: 'fas',\n  iconName: 'face-grin-wink',\n  icon: [512, 512, [\"grin-wink\"], \"f58c\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-16.9-79.2c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrinWink = faFaceGrinWink;\nconst faEarDeaf = {\n  prefix: 'fas',\n  iconName: 'ear-deaf',\n  icon: [512, 512, [\"deaf\", \"deafness\", \"hard-of-hearing\"], \"f2a4\", \"M502.6 54.6l-40 40c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l40-40c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm-320 320l-128 128c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM240 128c-57.6 0-105.1 43.6-111.3 99.5c-1.9 17.6-17.8 30.2-35.3 28.3s-30.2-17.8-28.3-35.3C74.8 132.5 149.4 64 240 64c97.2 0 176 78.8 176 176c0 46-17.7 87.9-46.6 119.3c-12 13-17.4 24.8-17.4 34.7l0 6.1c0 61.9-50.1 112-112 112c-17.7 0-32-14.3-32-32s14.3-32 32-32c26.5 0 48-21.5 48-48l0-6.1c0-32.9 17.4-59.6 34.4-78c18.4-20 29.6-46.6 29.6-75.9c0-61.9-50.1-112-112-112zm0 80c-17.7 0-32 14.3-32 32c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-17.7-14.3-32-32-32z\"]\n};\nconst faDeaf = faEarDeaf;\nconst faDeafness = faEarDeaf;\nconst faHardOfHearing = faEarDeaf;\nconst faRoadCircleCheck = {\n  prefix: 'fas',\n  iconName: 'road-circle-check',\n  icon: [640, 512, [], \"e564\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faDiceFive = {\n  prefix: 'fas',\n  iconName: 'dice-five',\n  icon: [448, 512, [9860], \"f523\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSquareRss = {\n  prefix: 'fas',\n  iconName: 'square-rss',\n  icon: [448, 512, [\"rss-square\"], \"f143\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 136c0-13.3 10.7-24 24-24c137 0 248 111 248 248c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24c83.9 0 152 68.1 152 152c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104c-13.3 0-24-10.7-24-24zm0 120a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faRssSquare = faSquareRss;\nconst faLandMineOn = {\n  prefix: 'fas',\n  iconName: 'land-mine-on',\n  icon: [640, 512, [], \"e51b\", \"M344 24l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24zM192 320c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 32-256 0 0-32zm-77.3 90.5c8.1-16.3 24.8-26.5 42.9-26.5l324.7 0c18.2 0 34.8 10.3 42.9 26.5l27.6 55.2C563.5 487 548 512 524.2 512l-408.4 0c-23.8 0-39.3-25-28.6-46.3l27.6-55.2zM36.3 138.3c7.5-10.9 22.5-13.6 33.4-6.1l104 72c10.9 7.5 13.6 22.5 6.1 33.4s-22.5 13.6-33.4 6.1l-104-72c-10.9-7.5-13.6-22.5-6.1-33.4zm534.1-6.1c10.9-7.5 25.8-4.8 33.4 6.1s4.8 25.8-6.1 33.4l-104 72c-10.9 7.5-25.8 4.8-33.4-6.1s-4.8-25.8 6.1-33.4l104-72z\"]\n};\nconst faICursor = {\n  prefix: 'fas',\n  iconName: 'i-cursor',\n  icon: [256, 512, [], \"f246\", \"M.1 29.3C-1.4 47 11.7 62.4 29.3 63.9l8 .7C70.5 67.3 96 95 96 128.3L96 224l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 95.7c0 33.3-25.5 61-58.7 63.8l-8 .7C11.7 449.6-1.4 465 .1 482.7s16.9 30.7 34.5 29.2l8-.7c34.1-2.8 64.2-18.9 85.4-42.9c21.2 24 51.2 40 85.4 42.9l8 .7c17.6 1.5 33.1-11.6 34.5-29.2s-11.6-33.1-29.2-34.5l-8-.7C185.5 444.7 160 417 160 383.7l0-95.7 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-95.7c0-33.3 25.5-61 58.7-63.8l8-.7c17.6-1.5 30.7-16.9 29.2-34.5S239-1.4 221.3 .1l-8 .7C179.2 3.6 149.2 19.7 128 43.7c-21.2-24-51.2-40-85.4-42.9l-8-.7C17-1.4 1.6 11.7 .1 29.3z\"]\n};\nconst faStamp = {\n  prefix: 'fas',\n  iconName: 'stamp',\n  icon: [512, 512, [], \"f5bf\", \"M312 201.8c0-17.4 9.2-33.2 19.9-47C344.5 138.5 352 118.1 352 96c0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8c10.7 13.8 19.9 29.6 19.9 47c0 29.9-24.3 54.2-54.2 54.2L112 256C50.1 256 0 306.1 0 368c0 20.9 13.4 38.7 32 45.3L32 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-50.7c18.6-6.6 32-24.4 32-45.3c0-61.9-50.1-112-112-112l-33.8 0c-29.9 0-54.2-24.3-54.2-54.2zM416 416l0 32L96 448l0-32 320 0z\"]\n};\nconst faStairs = {\n  prefix: 'fas',\n  iconName: 'stairs',\n  icon: [576, 512, [], \"e289\", \"M384 64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96z\"]\n};\nconst faI = {\n  prefix: 'fas',\n  iconName: 'i',\n  icon: [320, 512, [105], \"49\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l96 0 0 320-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0 0-320 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L160 32 32 32z\"]\n};\nconst faHryvniaSign = {\n  prefix: 'fas',\n  iconName: 'hryvnia-sign',\n  icon: [384, 512, [8372, \"hryvnia\"], \"f6f2\", \"M121.9 116.2C138.3 103.1 158.7 96 179.6 96L223 96c27.1 0 49 21.9 49 49c0 11.5-4 22.4-11.1 31L32 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l123.5 0-50.6 28.9c-1.7 1-3.4 2-5.1 3.1L32 272c-17.7 0-32 14.3-32 32s14.3 32 32 32l20.3 0c-2.8 9.9-4.3 20.4-4.3 31c0 62.4 50.6 113 113 113l43.4 0c35.5 0 70-12.1 97.7-34.3L308 441c13.8-11 16-31.2 5-45s-31.2-16-45-5l-5.9 4.7c-16.4 13.1-36.7 20.2-57.7 20.2L161 416c-27.1 0-49-21.9-49-49c0-11.5 4-22.4 11.1-31L352 336c17.7 0 32-14.3 32-32s-14.3-32-32-32l-123.5 0 50.6-28.9c1.7-1 3.4-2 5.1-3.1l67.8 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-20.3 0c2.8-10 4.3-20.4 4.3-31c0-62.4-50.6-113-113-113l-43.4 0c-35.5 0-70 12.1-97.7 34.3L76 71c-13.8 11-16 31.2-5 45s31.2 16 45 5l5.9-4.7z\"]\n};\nconst faHryvnia = faHryvniaSign;\nconst faPills = {\n  prefix: 'fas',\n  iconName: 'pills',\n  icon: [576, 512, [], \"f484\", \"M112 96c-26.5 0-48 21.5-48 48l0 112 96 0 0-112c0-26.5-21.5-48-48-48zM0 144C0 82.1 50.1 32 112 32s112 50.1 112 112l0 224c0 61.9-50.1 112-112 112S0 429.9 0 368L0 144zM554.9 399.4c-7.1 12.3-23.7 13.1-33.8 3.1L333.5 214.9c-10-10-9.3-26.7 3.1-33.8C360 167.7 387.1 160 416 160c88.4 0 160 71.6 160 160c0 28.9-7.7 56-21.1 79.4zm-59.5 59.5C472 472.3 444.9 480 416 480c-88.4 0-160-71.6-160-160c0-28.9 7.7-56 21.1-79.4c7.1-12.3 23.7-13.1 33.8-3.1L498.5 425.1c10 10 9.3 26.7-3.1 33.8z\"]\n};\nconst faFaceGrinWide = {\n  prefix: 'fas',\n  iconName: 'face-grin-wide',\n  icon: [512, 512, [128515, \"grin-alt\"], \"f581\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM208 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm128 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\"]\n};\nconst faGrinAlt = faFaceGrinWide;\nconst faTooth = {\n  prefix: 'fas',\n  iconName: 'tooth',\n  icon: [448, 512, [129463], \"f5c9\", \"M186.1 52.1C169.3 39.1 148.7 32 127.5 32C74.7 32 32 74.7 32 127.5l0 6.2c0 15.8 3.7 31.3 10.7 45.5l23.5 47.1c4.5 8.9 7.6 18.4 9.4 28.2l36.7 205.8c2 11.2 11.6 19.4 22.9 19.8s21.4-7.4 24-18.4l28.9-121.3C192.2 323.7 207 312 224 312s31.8 11.7 35.8 28.3l28.9 121.3c2.6 11.1 12.7 18.8 24 18.4s20.9-8.6 22.9-19.8l36.7-205.8c1.8-9.8 4.9-19.3 9.4-28.2l23.5-47.1c7.1-14.1 10.7-29.7 10.7-45.5l0-2.1c0-55-44.6-99.6-99.6-99.6c-24.1 0-47.4 8.8-65.6 24.6l-3.2 2.8 19.5 15.2c7 5.4 8.2 15.5 2.8 22.5s-15.5 8.2-22.5 2.8l-24.4-19-37-28.8z\"]\n};\nconst faV = {\n  prefix: 'fas',\n  iconName: 'v',\n  icon: [384, 512, [118], \"56\", \"M19.7 34.5c16.3-6.8 35 .9 41.8 17.2L192 364.8 322.5 51.7c6.8-16.3 25.5-24 41.8-17.2s24 25.5 17.2 41.8l-160 384c-5 11.9-16.6 19.7-29.5 19.7s-24.6-7.8-29.5-19.7L2.5 76.3c-6.8-16.3 .9-35 17.2-41.8z\"]\n};\nconst faBangladeshiTakaSign = {\n  prefix: 'fas',\n  iconName: 'bangladeshi-taka-sign',\n  icon: [384, 512, [], \"e2e6\", \"M36 32.3C18.4 30.1 2.4 42.5 .2 60S10.5 93.6 28 95.8l7.9 1c16 2 28 15.6 28 31.8L64 160l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 160c0 53 43 96 96 96l32 0c106 0 192-86 192-192l0-32c0-53-43-96-96-96l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0c17.7 0 32 14.3 32 32l0 32c0 70.7-57.3 128-128 128l-32 0c-17.7 0-32-14.3-32-32l0-160 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-31.5c0-48.4-36.1-89.3-84.1-95.3l-7.9-1z\"]\n};\nconst faBicycle = {\n  prefix: 'fas',\n  iconName: 'bicycle',\n  icon: [640, 512, [128690], \"f206\", \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l25.7 0 34.6 64-149.4 0-27.4-38C191 99.7 183.7 96 176 96l-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l43.7 0 22.1 30.7-26.6 53.1c-10-2.5-20.5-3.8-31.2-3.8C57.3 224 0 281.3 0 352s57.3 128 128 128c65.3 0 119.1-48.9 127-112l49 0c8.5 0 16.3-4.5 20.7-11.8l84.8-143.5 21.7 40.1C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L375.4 48.8C369.8 38.4 359 32 347.2 32L312 32zM458.6 303.7l32.3 59.7c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-32.3-59.7c3.6-.6 7.4-.9 11.2-.9c39.8 0 72 32.2 72 72s-32.2 72-72 72s-72-32.2-72-72c0-18.6 7-35.5 18.6-48.3zM133.2 368l65 0c-7.3 32.1-36 56-70.2 56c-39.8 0-72-32.2-72-72s32.2-72 72-72c1.7 0 3.4 .1 5.1 .2l-24.2 48.5c-9 18.1 4.1 39.4 24.3 39.4zm33.7-48l50.7-101.3 72.9 101.2-.1 .1-123.5 0zm90.6-128l108.5 0L317 274.8 257.4 192z\"]\n};\nconst faStaffSnake = {\n  prefix: 'fas',\n  iconName: 'staff-snake',\n  icon: [384, 512, [\"rod-asclepius\", \"rod-snake\", \"staff-aesculapius\"], \"e579\", \"M222.6 43.2l-.1 4.8L288 48c53 0 96 43 96 96s-43 96-96 96l-40 0 0-80 40 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-40 0-28 0-4.5 144 40.5 0c53 0 96 43 96 96s-43 96-96 96l-16 0 0-80 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-43 0-3.1 99.5L208.5 495l0 1c-.3 8.9-7.6 16-16.5 16s-16.2-7.1-16.5-16l0-1-1-31L136 464c-22.1 0-40-17.9-40-40s17.9-40 40-40l36 0-1-32-19 0c-53 0-96-43-96-96c0-47.6 34.6-87.1 80-94.7l0 94.7c0 8.8 7.2 16 16 16l16.5 0L164 128l-28 0-13.4 0c-9 18.9-28.3 32-50.6 32l-16 0c-30.9 0-56-25.1-56-56S25.1 48 56 48l8 0 8 0 89.5 0-.1-4.8L161 32c0-.7 0-1.3 0-1.9c.5-16.6 14.1-30 31-30s30.5 13.4 31 30c0 .6 0 1.3 0 1.9l-.4 11.2zM64 112a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faRodAsclepius = faStaffSnake;\nconst faRodSnake = faStaffSnake;\nconst faStaffAesculapius = faStaffSnake;\nconst faHeadSideCoughSlash = {\n  prefix: 'fas',\n  iconName: 'head-side-cough-slash',\n  icon: [640, 512, [], \"e062\", \"M448 325.8l44 34.5c8.1 1.4 14.8 6.8 18 14.1L552.9 408c10.6 .4 19.5 7.6 22.2 17.4l39.1 30.6c.6 0 1.2-.1 1.8-.1c11.1 0 20.4 7.5 23.2 17.8l-3.9 0c6.2 8.5 6.4 20.4-.4 29c-8.2 10.4-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L89.6 44.9C127 16.7 173.5 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320s0 0 0 0l0 5.8zM0 224.2c0-38.7 9.8-75.1 27.1-106.9L341.8 365.3l-2.5 .3c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9l62 3.9 43 33.9C439.3 466.2 421.2 480 400 480l-80 0 0 8c0 13.3-10.7 24-24 24l-40 0s0 0 0 0L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM616 360a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm-64-48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faTruckMedical = {\n  prefix: 'fas',\n  iconName: 'truck-medical',\n  icon: [640, 512, [128657, \"ambulance\"], \"f0f9\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM176 80l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faAmbulance = faTruckMedical;\nconst faWheatAwnCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'wheat-awn-circle-exclamation',\n  icon: [640, 512, [], \"e598\", \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c22.5 22.5 53.3 31.5 82.4 27c0-1 0-2.1 0-3.1c0-33.1 9.1-64.1 25-90.6c-15.5-8.7-32.5-13.8-49.8-15.5l31.9-31.9 12.2 12.2c6 6 12.6 11.1 19.7 15.2c27.5-34 67.3-57.5 112.6-63.8c-4.1-3.8-8.4-7.3-12.9-10.5L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faSnowman = {\n  prefix: 'fas',\n  iconName: 'snowman',\n  icon: [512, 512, [9731, 9924], \"f7d0\", \"M341.1 140.6c-2 3.9-1.6 8.6 1.2 12c7 8.5 12.9 18.1 17.2 28.4L408 160.2l0-40.2c0-13.3 10.7-24 24-24s24 10.7 24 24l0 19.6 22.5-9.7c12.2-5.2 26.3 .4 31.5 12.6s-.4 26.3-12.6 31.5l-56 24-73.6 31.5c-.5 9.5-2.1 18.6-4.8 27.3c-1.2 3.8-.1 8 2.8 10.8C396.7 296.9 416 338.2 416 384c0 44.7-18.3 85-47.8 114.1c-9.9 9.7-23.7 13.9-37.5 13.9l-149.3 0c-13.9 0-27.7-4.2-37.5-13.9C114.3 469 96 428.7 96 384c0-45.8 19.3-87.1 50.1-116.3c2.9-2.8 4-6.9 2.8-10.8c-2.7-8.7-4.3-17.9-4.8-27.3L70.5 198.1l-56-24C2.4 168.8-3.3 154.7 1.9 142.5s19.3-17.8 31.5-12.6L56 139.6 56 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40.2L152.6 181c4.3-10.3 10.1-19.9 17.2-28.4c2.8-3.4 3.3-8.1 1.2-12C164 127.2 160 112.1 160 96c0-53 43-96 96-96s96 43 96 96c0 16.1-4 31.2-10.9 44.6zM224 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm48 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-16 80a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm16 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM288 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48 24l0 3.2c0 3.2 .8 6.3 2.3 9l9 16.9c.9 1.7 2.7 2.8 4.7 2.8s3.8-1.1 4.7-2.8l9-16.9c1.5-2.8 2.3-5.9 2.3-9l0-3.2c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"]\n};\nconst faMortarPestle = {\n  prefix: 'fas',\n  iconName: 'mortar-pestle',\n  icon: [512, 512, [], \"f5a7\", \"M504.3 11.1C493.3-1.6 474.5-3.7 461 6.2L252.3 160l144.9 0L502.6 54.6c11.8-11.8 12.6-30.8 1.6-43.5zM32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32c0 82.5 43.4 147.7 123.9 176.2c-11.1 13.9-19.4 30.3-23.9 48.1C127.6 497.4 142.3 512 160 512l192 0c17.7 0 32.4-14.6 28.1-31.7c-4.5-17.8-12.8-34.1-23.9-48.1C436.6 403.7 480 338.5 480 256c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 192z\"]\n};\nconst faRoadBarrier = {\n  prefix: 'fas',\n  iconName: 'road-barrier',\n  icon: [640, 512, [], \"e562\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-181.7L149.2 96 64 96l0-32c0-17.7-14.3-32-32-32zM405.2 96l-74.3 0-5.4 10.7L234.8 288l74.3 0 5.4-10.7L405.2 96zM362.8 288l74.3 0 5.4-10.7L533.2 96l-74.3 0-5.4 10.7L362.8 288zM202.8 96l-5.4 10.7L106.8 288l74.3 0 5.4-10.7L277.2 96l-74.3 0zm288 192l85.2 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 53.7L490.8 288z\"]\n};\nconst faSchool = {\n  prefix: 'fas',\n  iconName: 'school',\n  icon: [640, 512, [127979], \"f549\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l208 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 208 0c26.5 0 48-21.5 48-48l0-320c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64zM96 320l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64zM232 176a88 88 0 1 1 176 0 88 88 0 1 1 -176 0zm88-48c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16z\"]\n};\nconst faIgloo = {\n  prefix: 'fas',\n  iconName: 'igloo',\n  icon: [576, 512, [], \"f7ae\", \"M320 33.8L320 160 48.5 160C100.2 82.8 188.1 32 288 32c10.8 0 21.5 .6 32 1.8zM352 160l0-120.9C424.9 55.7 487.2 99.8 527.5 160L352 160zM29.9 192L96 192l0 128L0 320c0-46 10.8-89.4 29.9-128zM192 320l-64 0 0-128 320 0 0 128-64 0 0 32 192 0 0 80c0 26.5-21.5 48-48 48l-176 0 0-128c0-35.3-28.7-64-64-64s-64 28.7-64 64l0 128L48 480c-26.5 0-48-21.5-48-48l0-80 192 0 0-32zm288 0l0-128 66.1 0c19.2 38.6 29.9 82 29.9 128l-96 0z\"]\n};\nconst faJoint = {\n  prefix: 'fas',\n  iconName: 'joint',\n  icon: [640, 512, [], \"f595\", \"M448 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11c0 55.2 21.9 108.1 60.9 147.1l21 21c9 9 14.1 21.2 14.1 33.9l0 11c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11c0-29.7-11.8-58.2-32.8-79.2l-21-21C463.2 117.8 448 81.2 448 43l0-11zM576 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11c0-55.2-21.9-108.1-60.9-147.1l-21-21c-9-9-14.1-21.2-14.1-33.9l0-11c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11c0 29.7 11.8 58.2 32.8 79.2l21 21c27 27 42.2 63.6 42.2 101.8l0 11zM229.8 360c-4.7-2.3-10-2.7-15.2-2c-37.8 5.6-75.2 14.3-106.9 22.8C81.3 388 58.3 395.1 42 400.4c-8.2 2.7-14.7 4.9-19.2 6.5c-2.3 .8-4 1.4-5.2 1.8l-1.3 .5C6.8 412.5 0 421.4 0 432s6.8 19.5 16.3 22.7l1.3 .5c1.2 .4 3 1.1 5.2 1.8c4.5 1.6 11 3.8 19.2 6.5c16.3 5.4 39.2 12.5 65.7 19.6C160.3 497.3 228.8 512 288 512l67.3 0c4.1 0 6.3-5.1 3.6-8.3L256.5 380.8c-7.4-8.9-16.5-15.9-26.7-20.8zM445 512l19 0 51.3 0c4.1 0 6.3-5.1 3.6-8.3L416.5 380.8C401.3 362.5 378.8 352 355 352l-19 0-48 0c-1.1 0-2.3 0-3.4 0c-4.1 0-6.2 5.1-3.5 8.3L383.5 483.2C398.7 501.5 421.2 512 445 512zm-3.9-151.7L543.5 483.2c14.6 17.5 35.9 27.9 58.6 28.7c21.1-1.1 37.9-18.6 37.9-39.9l0-80c0-22.1-17.9-40-40-40l-155.3 0c-4.1 0-6.3 5.1-3.6 8.3z\"]\n};\nconst faAngleRight = {\n  prefix: 'fas',\n  iconName: 'angle-right',\n  icon: [320, 512, [8250], \"f105\", \"M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z\"]\n};\nconst faHorse = {\n  prefix: 'fas',\n  iconName: 'horse',\n  icon: [576, 512, [128014], \"f6f0\", \"M448 238.1l0-78.1 16 0 9.8 19.6c12.5 25.1 42.2 36.4 68.3 26c20.5-8.2 33.9-28 33.9-50.1L576 80c0-19.1-8.4-36.3-21.7-48l5.7 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L480 0 448 0C377.3 0 320 57.3 320 128l-96 0-20.8 0-54.4 0c-30.7 0-57.6 16.3-72.5 40.8C33.2 174.5 0 211.4 0 256l0 56c0 13.3 10.7 24 24 24s24-10.7 24-24l0-56c0-13.4 6.6-25.2 16.7-32.5c1.6 13 6.3 25.4 13.6 36.4l28.2 42.4c8.3 12.4 6.4 28.7-1.2 41.6c-16.5 28-20.6 62.2-10 93.9l17.5 52.4c4.4 13.1 16.6 21.9 30.4 21.9l33.7 0c21.8 0 37.3-21.4 30.4-42.1l-20.8-62.5c-2.1-6.4-.5-13.4 4.3-18.2l12.7-12.7c13.2-13.2 20.6-31.1 20.6-49.7c0-2.3-.1-4.6-.3-6.9l84 24c4.1 1.2 8.2 2.1 12.3 2.8L320 480c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-164.3c19.2-19.2 31.5-45.7 32-75.7c0 0 0 0 0 0l0-1.9zM496 64a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faQ = {\n  prefix: 'fas',\n  iconName: 'q',\n  icon: [448, 512, [113], \"51\", \"M64 256c0 88.4 71.6 160 160 160c28.9 0 56-7.7 79.4-21.1l-72-86.4c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l70.9 85.1C371.9 325.8 384 292.3 384 256c0-88.4-71.6-160-160-160S64 167.6 64 256zM344.9 444.6C310 467 268.5 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32s224 100.3 224 224c0 56.1-20.6 107.4-54.7 146.7l47.3 56.8c11.3 13.6 9.5 33.8-4.1 45.1s-33.8 9.5-45.1-4.1l-46.6-55.9z\"]\n};\nconst faG = {\n  prefix: 'fas',\n  iconName: 'g',\n  icon: [448, 512, [103], \"47\", \"M224 96C135.6 96 64 167.6 64 256s71.6 160 160 160c77.4 0 142-55 156.8-128L256 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l144 0c25.8 0 49.6 21.4 47.2 50.6C437.8 389.6 341.4 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32c57.4 0 109.7 21.6 149.3 57c13.2 11.8 14.3 32 2.5 45.2s-32 14.3-45.2 2.5C302.3 111.4 265 96 224 96z\"]\n};\nconst faNotesMedical = {\n  prefix: 'fas',\n  iconName: 'notes-medical',\n  icon: [512, 512, [], \"f481\", \"M96 352L96 96c0-35.3 28.7-64 64-64l256 0c35.3 0 64 28.7 64 64l0 197.5c0 17-6.7 33.3-18.7 45.3l-58.5 58.5c-12 12-28.3 18.7-45.3 18.7L160 416c-35.3 0-64-28.7-64-64zM272 128c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0zm24 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-160 0C60.9 512 0 451.1 0 376L0 152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 224c0 48.6 39.4 88 88 88l160 0z\"]\n};\nconst faTemperatureHalf = {\n  prefix: 'fas',\n  iconName: 'temperature-half',\n  icon: [320, 512, [127777, \"temperature-2\", \"thermometer-2\", \"thermometer-half\"], \"f2c9\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 208c0-8.8 7.2-16 16-16s16 7.2 16 16l0 114.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature2 = faTemperatureHalf;\nconst faThermometer2 = faTemperatureHalf;\nconst faThermometerHalf = faTemperatureHalf;\nconst faDongSign = {\n  prefix: 'fas',\n  iconName: 'dong-sign',\n  icon: [384, 512, [], \"e169\", \"M288 32c-17.7 0-32 14.3-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 49.1c-18.8-10.9-40.7-17.1-64-17.1c-70.7 0-128 57.3-128 128s57.3 128 128 128c24.5 0 47.4-6.9 66.8-18.8c5 11.1 16.2 18.8 29.2 18.8c17.7 0 32-14.3 32-32l0-96 0-160c17.7 0 32-14.3 32-32s-14.3-32-32-32c0-17.7-14.3-32-32-32zM128 288a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448z\"]\n};\nconst faCapsules = {\n  prefix: 'fas',\n  iconName: 'capsules',\n  icon: [576, 512, [], \"f46b\", \"M64 144c0-26.5 21.5-48 48-48s48 21.5 48 48l0 112-96 0 0-112zM0 144L0 368c0 61.9 50.1 112 112 112s112-50.1 112-112l0-178.4c1.8 19.1 8.2 38 19.8 54.8L372.3 431.7c35.5 51.7 105.3 64.3 156 28.1s63-107.5 27.5-159.2L427.3 113.3C391.8 61.5 321.9 49 271.3 85.2c-28 20-44.3 50.8-47.3 83l0-24.2c0-61.9-50.1-112-112-112S0 82.1 0 144zm296.6 64.2c-16-23.3-10-55.3 11.9-71c21.2-15.1 50.5-10.3 66 12.2l67 97.6L361.6 303l-65-94.8zM491 407.7c-.8 .6-1.6 1.1-2.4 1.6l4-2.8c-.5 .4-1 .8-1.6 1.2z\"]\n};\nconst faPooStorm = {\n  prefix: 'fas',\n  iconName: 'poo-storm',\n  icon: [448, 512, [\"poo-bolt\"], \"f75a\", \"M236.9 .2c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.3c2.8 8.2 4.3 16.9 4.3 26.1c0 21.7-8.5 37.2-21.9 47.6c-13.8 10.8-34 17-57.8 17L128 112c-35.3 0-64 28.7-64 64c0 12.2 3.4 23.5 9.3 33.2C31.7 216.2 0 252.4 0 296c0 40.9 28 75.4 65.8 85.2c-5.3-18.5 1-38.5 16.2-50.7l160-128c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L285.7 320l18.3 0c20.4 0 38.5 12.9 45.3 32.1c3.7 10.6 3.5 21.8 0 31.9l10.7 0c48.6 0 88-39.4 88-88c0-43.6-31.7-79.8-73.3-86.8c5.9-9.7 9.3-21.1 9.3-33.2c0-35.3-28.7-64-64-64l-1.4 0c.9-5.4 1.4-10.9 1.4-16.6c0-48.7-36.1-88.9-83.1-95.2zm45.1 227.4c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7l70.1 0L129.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7l-70.1 0 52.4-104.8c3.4-6.7 1.6-14.9-4.3-19.6z\"]\n};\nconst faPooBolt = faPooStorm;\nconst faFaceFrownOpen = {\n  prefix: 'fas',\n  iconName: 'face-frown-open',\n  icon: [512, 512, [128550, \"frown-open\"], \"f57a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-122 174.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8z\"]\n};\nconst faFrownOpen = faFaceFrownOpen;\nconst faHandPointUp = {\n  prefix: 'fas',\n  iconName: 'hand-point-up',\n  icon: [384, 512, [9757], \"f0a6\", \"M32 32C32 14.3 46.3 0 64 0S96 14.3 96 32l0 208-64 0L32 32zM224 192c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-64-64c17.7 0 32 14.3 32 32l0 48c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-17.7 14.3-32 32-32zm160 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9L37.5 453.5C13.5 429.5 0 396.9 0 363l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"]\n};\nconst faMoneyBill = {\n  prefix: 'fas',\n  iconName: 'money-bill',\n  icon: [576, 512, [], \"f0d6\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm64 320l-64 0 0-64c35.3 0 64 28.7 64 64zM64 192l0-64 64 0c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM288 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faBookmark = {\n  prefix: 'fas',\n  iconName: 'bookmark',\n  icon: [384, 512, [128278, 61591], \"f02e\", \"M0 48V487.7C0 501.1 10.9 512 24.3 512c5 0 9.9-1.5 14-4.4L192 400 345.7 507.6c4.1 2.9 9 4.4 14 4.4c13.4 0 24.3-10.9 24.3-24.3V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48z\"]\n};\nconst faAlignJustify = {\n  prefix: 'fas',\n  iconName: 'align-justify',\n  icon: [448, 512, [], \"f039\", \"M448 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32L32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32z\"]\n};\nconst faUmbrellaBeach = {\n  prefix: 'fas',\n  iconName: 'umbrella-beach',\n  icon: [576, 512, [127958], \"f5ca\", \"M346.3 271.8l-60.1-21.9L214 448 32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-261.9 0 64.1-176.2zm121.1-.2l-3.3 9.1 67.7 24.6c18.1 6.6 38-4.2 39.6-23.4c6.5-78.5-23.9-155.5-80.8-208.5c2 8 3.2 16.3 3.4 24.8l.2 6c1.8 57-7.3 113.8-26.8 167.4zM462 99.1c-1.1-34.4-22.5-64.8-54.4-77.4c-.9-.4-1.9-.7-2.8-1.1c-33-11.7-69.8-2.4-93.1 23.8l-4 4.5C272.4 88.3 245 134.2 226.8 184l-3.3 9.1L434 269.7l3.3-9.1c18.1-49.8 26.6-102.5 24.9-155.5l-.2-6zM107.2 112.9c-11.1 15.7-2.8 36.8 15.3 43.4l71 25.8 3.3-9.1c19.5-53.6 49.1-103 87.1-145.5l4-4.5c6.2-6.9 13.1-13 20.5-18.2c-79.6 2.5-154.7 42.2-201.2 108z\"]\n};\nconst faHelmetUn = {\n  prefix: 'fas',\n  iconName: 'helmet-un',\n  icon: [512, 512, [], \"e503\", \"M479.5 224C471.2 98.9 367.2 0 240 0C107.5 0 0 107.5 0 240l0 56.3C0 344.8 39.2 384 87.7 384L200 384l14.9 0L343.5 505.4c4.5 4.2 10.4 6.6 16.5 6.6l96 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-86.5 0-1.5-1.5L368 288l80 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-.5 0zM320 417.2l-78-73.7L274.4 288l45.6 0 0 129.2zM285.3 103.1l34.7 52 0-43.2c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM160 112l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faBullseye = {\n  prefix: 'fas',\n  iconName: 'bullseye',\n  icon: [512, 512, [], \"f140\", \"M448 256A192 192 0 1 0 64 256a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 80a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zM224 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faBacon = {\n  prefix: 'fas',\n  iconName: 'bacon',\n  icon: [576, 512, [129363], \"f7e5\", \"M439.2 1.2c11.2-3.2 23.2-.1 31.4 8.1L518 56.7l-26.5 7.9c-58 16.6-98.1 39.6-129.6 67.4c-31.2 27.5-53.2 59.1-75.1 90.9l-2.3 3.3C241.6 288.7 195 356.6 72.8 417.7L37.9 435.2 9.4 406.6c-7.3-7.3-10.6-17.6-9-27.8s8.1-18.9 17.3-23.5C136.1 296.2 180.9 231 223.3 169.3l2.3-3.4c21.8-31.8 44.9-64.9 77.7-93.9c33.4-29.5 75.8-53.6 135.9-70.8zM61.8 459l25.4-12.7c129.5-64.7 179.9-138.1 223.8-202l2.2-3.3c22.1-32.1 42.1-60.5 69.9-85.1c27.5-24.3 63.4-45.2 117.3-60.6c0 0 0 0 0 0l.2-.1 43.1-12.9 23 23c8 8 11.2 19.7 8.3 30.7s-11.3 19.6-22.2 22.7c-51.9 14.8-85.6 34.7-111.1 57.2c-26.1 23-45.1 49.9-67.3 82.1l-2.2 3.2C327.8 365.9 275.5 442 142.3 508.6c-12.3 6.2-27.2 3.7-36.9-6L61.8 459z\"]\n};\nconst faHandPointDown = {\n  prefix: 'fas',\n  iconName: 'hand-point-down',\n  icon: [384, 512, [], \"f0a7\", \"M32 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208-64 0 0 208zM224 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-64 64c17.7 0 32-14.3 32-32l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 17.7 14.3 32 32 32zm160-96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-96-88l0 .6c9.4-5.4 20.3-8.6 32-8.6c13.2 0 25.4 4 35.6 10.8c8.7-24.9 32.5-42.8 60.4-42.8c11.7 0 22.6 3.1 32 8.6l0-8.6C384 71.6 312.4 0 224 0L162.3 0C119.8 0 79.1 16.9 49.1 46.9L37.5 58.5C13.5 82.5 0 115.1 0 149l0 27c0 35.3 28.7 64 64 64l88 0c22.1 0 40-17.9 40-40s-17.9-40-40-40l-56 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l56 0c39.8 0 72 32.2 72 72z\"]\n};\nconst faArrowUpFromBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-bracket',\n  icon: [448, 512, [], \"e09a\", \"M246.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 109.3 192 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-64z\"]\n};\nconst faFolder = {\n  prefix: 'fas',\n  iconName: 'folder',\n  icon: [512, 512, [128193, 128447, 61716, \"folder-blank\"], \"f07b\", \"M64 480H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H288c-10.1 0-19.6-4.7-25.6-12.8L243.2 57.6C231.1 41.5 212.1 32 192 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64z\"]\n};\nconst faFolderBlank = faFolder;\nconst faFileWaveform = {\n  prefix: 'fas',\n  iconName: 'file-waveform',\n  icon: [448, 512, [\"file-medical-alt\"], \"f478\", \"M96 0C60.7 0 32 28.7 32 64l0 224 112 0c6.1 0 11.6 3.4 14.3 8.8L176 332.2l49.7-99.4c2.7-5.4 8.3-8.8 14.3-8.8s11.6 3.4 14.3 8.8L281.9 288l70.1 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-80 0c-6.1 0-11.6-3.4-14.3-8.8L240 275.8l-49.7 99.4c-2.7 5.4-8.3 8.8-14.3 8.8s-11.6-3.4-14.3-8.8L134.1 320 32 320l0 128c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L256 0 96 0zM288 0l0 128 128 0L288 0z\"]\n};\nconst faFileMedicalAlt = faFileWaveform;\nconst faRadiation = {\n  prefix: 'fas',\n  iconName: 'radiation',\n  icon: [512, 512, [], \"f7b9\", \"M216 186.7c-23.9 13.8-40 39.7-40 69.3L32 256C14.3 256-.2 241.6 2 224.1C10.7 154 47.8 92.7 101.3 52c14.1-10.7 33.8-5.3 42.7 10l72 124.7zM256 336c14.6 0 28.2-3.9 40-10.7l72 124.8c8.8 15.3 3.7 35.1-12.6 41.9c-30.6 12.9-64.2 20-99.4 20s-68.9-7.1-99.4-20c-16.3-6.9-21.4-26.6-12.6-41.9l72-124.8c11.8 6.8 25.4 10.7 40 10.7zm224-80l-144 0c0-29.6-16.1-55.5-40-69.3L368 62c8.8-15.3 28.6-20.7 42.7-10c53.6 40.7 90.6 102 99.4 172.1c2.2 17.5-12.4 31.9-30 31.9zM256 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faChartSimple = {\n  prefix: 'fas',\n  iconName: 'chart-simple',\n  icon: [448, 512, [], \"e473\", \"M160 80c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 352c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-352zM0 272c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48L0 272zM368 96l32 0c26.5 0 48 21.5 48 48l0 288c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48z\"]\n};\nconst faMarsStroke = {\n  prefix: 'fas',\n  iconName: 'mars-stroke',\n  icon: [512, 512, [9894], \"f229\", \"M376 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L370.3 96.4 345 71c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l25.4 25.4L307.8 159c-28.4-19.5-62.7-31-99.8-31c-97.2 0-176 78.8-176 176s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l28.6-28.6L407 201c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-25.4-25.4 22.1-22.1L471 153c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L376 0zm88 48s0 0 0 0s0 0 0 0s0 0 0 0zM96 304a112 112 0 1 1 224 0A112 112 0 1 1 96 304z\"]\n};\nconst faVial = {\n  prefix: 'fas',\n  iconName: 'vial',\n  icon: [512, 512, [129514], \"f492\", \"M342.6 9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L28.1 342.6C10.1 360.6 0 385 0 410.5L0 416c0 53 43 96 96 96l5.5 0c25.5 0 49.9-10.1 67.9-28.1L448 205.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-32-32-96-96-32-32zM205.3 256L352 109.3 402.7 160l-96 96-101.5 0z\"]\n};\nconst faGauge = {\n  prefix: 'fas',\n  iconName: 'gauge',\n  icon: [512, 512, [\"dashboard\", \"gauge-med\", \"tachometer-alt-average\"], \"f624\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3L280 88c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 204.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64zM144 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm-16 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM400 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faDashboard = faGauge;\nconst faGaugeMed = faGauge;\nconst faTachometerAltAverage = faGauge;\nconst faWandMagicSparkles = {\n  prefix: 'fas',\n  iconName: 'wand-magic-sparkles',\n  icon: [576, 512, [\"magic-wand-sparkles\"], \"e2ca\", \"M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z\"]\n};\nconst faMagicWandSparkles = faWandMagicSparkles;\nconst faE = {\n  prefix: 'fas',\n  iconName: 'e',\n  icon: [320, 512, [101], \"45\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 416c0 35.3 28.7 64 64 64l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 416l0-128 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 224 64 96l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32z\"]\n};\nconst faPenClip = {\n  prefix: 'fas',\n  iconName: 'pen-clip',\n  icon: [512, 512, [\"pen-alt\"], \"f305\", \"M453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-52.1 52.1s0 0 0 0l-1-1s0 0 0 0l-16-16-96-96-17-17 52.1-52.1c25-25 65.5-25 90.5 0zM241 114.9c-9.4-9.4-24.6-9.4-33.9 0L105 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L173.1 81c28.1-28.1 73.7-28.1 101.8 0L288 94.1l17 17 96 96 16 16 1 1-17 17L229.5 412.5c-48 48-109.2 80.8-175.8 94.1l-25 5c-7.9 1.6-16-.9-21.7-6.6s-8.1-13.8-6.6-21.7l5-25c13.3-66.6 46.1-127.8 94.1-175.8L254.1 128 241 114.9z\"]\n};\nconst faPenAlt = faPenClip;\nconst faBridgeCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-exclamation',\n  icon: [640, 512, [], \"e4ca\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faUser = {\n  prefix: 'fas',\n  iconName: 'user',\n  icon: [448, 512, [128100, 62144], \"f007\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z\"]\n};\nconst faSchoolCircleCheck = {\n  prefix: 'fas',\n  iconName: 'school-circle-check',\n  icon: [640, 512, [], \"e56b\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-99.3-43.3c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7z\"]\n};\nconst faDumpster = {\n  prefix: 'fas',\n  iconName: 'dumpster',\n  icon: [576, 512, [], \"f793\", \"M49.7 32c-10.5 0-19.8 6.9-22.9 16.9L.9 133c-.6 2-.9 4.1-.9 6.1C0 150.7 9.3 160 20.9 160l94 0L140.5 32 49.7 32zM272 160l0-128-98.9 0L147.5 160 272 160zm32 0l124.5 0L402.9 32 304 32l0 128zm157.1 0l94 0c11.5 0 20.9-9.3 20.9-20.9c0-2.1-.3-4.1-.9-6.1L549.2 48.9C546.1 38.9 536.8 32 526.3 32l-90.8 0 25.6 128zM32 192l4 32-4 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l12 0L64 448c0 17.7 14.3 32 32 32s32-14.3 32-32l320 0c0 17.7 14.3 32 32 32s32-14.3 32-32l20-160 12 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-4 0 4-32L32 192z\"]\n};\nconst faVanShuttle = {\n  prefix: 'fas',\n  iconName: 'van-shuttle',\n  icon: [640, 512, [128656, \"shuttle-van\"], \"f5b6\", \"M64 104l0 88 96 0 0-96L72 96c-4.4 0-8 3.6-8 8zm482 88L465.1 96 384 96l0 96 162 0zm-226 0l0-96-96 0 0 96 96 0zM592 384l-16 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 104C0 64.2 32.2 32 72 32l120 0 160 0 113.1 0c18.9 0 36.8 8.3 49 22.8L625 186.5c9.7 11.5 15 26.1 15 41.2L640 336c0 26.5-21.5 48-48 48zm-64 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faShuttleVan = faVanShuttle;\nconst faBuildingUser = {\n  prefix: 'fas',\n  iconName: 'building-user',\n  icon: [640, 512, [], \"e4da\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 89.9 0c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2l0-95.9L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM576 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM352 477.1c0 19.3 15.6 34.9 34.9 34.9l218.2 0c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1l-101.8 0c-51.4 0-93.1 41.7-93.1 93.1z\"]\n};\nconst faSquareCaretLeft = {\n  prefix: 'fas',\n  iconName: 'square-caret-left',\n  icon: [448, 512, [\"caret-square-left\"], \"f191\", \"M0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416zM128 256c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"]\n};\nconst faCaretSquareLeft = faSquareCaretLeft;\nconst faHighlighter = {\n  prefix: 'fas',\n  iconName: 'highlighter',\n  icon: [576, 512, [], \"f591\", \"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5s0 0 0 0l0-71.7c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5L224 416l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7L24 512c-13.3 0-24-10.7-24-24l0-4.7c0-6.4 2.5-12.5 7-17z\"]\n};\nconst faKey = {\n  prefix: 'fas',\n  iconName: 'key',\n  icon: [512, 512, [128273], \"f084\", \"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0S160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-40 40 0c13.3 0 24-10.7 24-24l0-40 40 0c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3zM376 96a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nconst faBullhorn = {\n  prefix: 'fas',\n  iconName: 'bullhorn',\n  icon: [512, 512, [128226, 128363], \"f0a1\", \"M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75l-8.7 0-32 0-96 0c-35.3 0-64 28.7-64 64l0 96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-128 8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-147.6c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4L480 32zm-64 76.7L416 240l0 131.3C357.2 317.8 280.5 288 200.7 288l-8.7 0 0-96 8.7 0c79.8 0 156.5-29.8 215.3-83.3z\"]\n};\nconst faGlobe = {\n  prefix: 'fas',\n  iconName: 'globe',\n  icon: [512, 512, [127760], \"f0ac\", \"M352 256c0 22.2-1.2 43.6-3.3 64l-185.3 0c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64l185.3 0c2.2 20.4 3.3 41.8 3.3 64zm28.8-64l123.1 0c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64l-123.1 0c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32l-116.7 0c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0l-176.6 0c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0L18.6 160C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192l123.1 0c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64L8.1 320C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6l176.6 0c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352l116.7 0zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6l116.7 0z\"]\n};\nconst faSynagogue = {\n  prefix: 'fas',\n  iconName: 'synagogue',\n  icon: [640, 512, [128333], \"f69b\", \"M309.8 3.7c5.9-4.9 14.6-4.9 20.5 0l121 100.8C469.5 119.7 480 142.2 480 166l0 114.1L480 512l-16 0-112 0 0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96-112 0-16 0 0-231.9L160 166c0-23.7 10.5-46.3 28.8-61.5L309.8 3.7zM512 512l0-267.5 28.1-31.2c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3l63.8 70.9c7.9 8.8 12.3 20.3 12.3 32.1L640 448c0 35.3-28.7 64-64 64l-64 0zM128 244.5L128 512l-64 0c-35.3 0-64-28.7-64-64L0 316.3c0-11.9 4.4-23.3 12.3-32.1l63.8-70.9c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3L128 244.5zM327 124.3c-3.1-5.4-10.9-5.4-13.9 0l-15.9 28.1-32.3-.3c-6.2-.1-10.1 6.7-7 12.1L274.3 192l-16.4 27.8c-3.2 5.4 .7 12.1 7 12.1l32.3-.3L313 259.7c3.1 5.4 10.9 5.4 13.9 0l15.9-28.1 32.3 .3c6.2 .1 10.1-6.7 7-12.1L365.7 192l16.4-27.8c3.2-5.4-.7-12.1-7-12.1l-32.3 .3L327 124.3z\"]\n};\nconst faPersonHalfDress = {\n  prefix: 'fas',\n  iconName: 'person-half-dress',\n  icon: [320, 512, [], \"e548\", \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm8 352l0-224 6.9 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128s0 0 0 0zM58.2 182.3c19.9-33.1 55.3-53.5 93.8-54.3l0 256s0 0 0 0l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-17.8 0c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2z\"]\n};\nconst faRoadBridge = {\n  prefix: 'fas',\n  iconName: 'road-bridge',\n  icon: [640, 512, [], \"e563\", \"M352 0L608 0c17.7 0 32 14.3 32 32l0 448c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM480 200c-13.3 0-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24zm24 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64zM480 40c-13.3 0-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24zM32 96l256 0 0 64-40 0 0 64 40 0 0 96c-53 0-96 43-96 96l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c0-53-43-96-96-96l0-96 72 0 0-64-40 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm168 64l-80 0 0 64 80 0 0-64z\"]\n};\nconst faLocationArrow = {\n  prefix: 'fas',\n  iconName: 'location-arrow',\n  icon: [448, 512, [], \"f124\", \"M429.6 92.1c4.9-11.9 2.1-25.6-7-34.7s-22.8-11.9-34.7-7l-352 144c-14.2 5.8-22.2 20.8-19.3 35.8s16.1 25.8 31.4 25.8l176 0 0 176c0 15.3 10.8 28.4 25.8 31.4s30-5.1 35.8-19.3l144-352z\"]\n};\nconst faC = {\n  prefix: 'fas',\n  iconName: 'c',\n  icon: [384, 512, [99], \"43\", \"M329.1 142.9c-62.5-62.5-155.8-62.5-218.3 0s-62.5 163.8 0 226.3s155.8 62.5 218.3 0c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-87.5 87.5-221.3 87.5-308.8 0s-87.5-229.3 0-316.8s221.3-87.5 308.8 0c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z\"]\n};\nconst faTabletButton = {\n  prefix: 'fas',\n  iconName: 'tablet-button',\n  icon: [448, 512, [], \"f10a\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM224 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBuildingLock = {\n  prefix: 'fas',\n  iconName: 'building-lock',\n  icon: [576, 512, [], \"e4d6\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 88.6 0c-5.4-9.4-8.6-20.3-8.6-32l0-128c0-23.7 12.9-44.4 32-55.4l0-24.6c0-30.5 12.2-58.2 32-78.4L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM464 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faPizzaSlice = {\n  prefix: 'fas',\n  iconName: 'pizza-slice',\n  icon: [512, 512, [], \"f818\", \"M169.7 .9c-22.8-1.6-41.9 14-47.5 34.7L110.4 80c.5 0 1.1 0 1.6 0c176.7 0 320 143.3 320 320c0 .5 0 1.1 0 1.6l44.4-11.8c20.8-5.5 36.3-24.7 34.7-47.5C498.5 159.5 352.5 13.5 169.7 .9zM399.8 410.2c.1-3.4 .2-6.8 .2-10.2c0-159.1-128.9-288-288-288c-3.4 0-6.8 .1-10.2 .2L.5 491.9c-1.5 5.5 .1 11.4 4.1 15.4s9.9 5.6 15.4 4.1L399.8 410.2zM176 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM96 384a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faMoneyBillWave = {\n  prefix: 'fas',\n  iconName: 'money-bill-wave',\n  icon: [576, 512, [], \"f53a\", \"M0 112.5L0 422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4l0-309.9c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM288 352c-44.2 0-80-43-80-96s35.8-96 80-96s80 43 80 96s-35.8 96-80 96zM64 352c35.3 0 64 28.7 64 64l-64 0 0-64zm64-208c0 35.3-28.7 64-64 64l0-64 64 0zM512 304l0 64-64 0c0-35.3 28.7-64 64-64zM448 96l64 0 0 64c-35.3 0-64-28.7-64-64z\"]\n};\nconst faChartArea = {\n  prefix: 'fas',\n  iconName: 'chart-area',\n  icon: [512, 512, [\"area-chart\"], \"f1fe\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm96 288l288 0c17.7 0 32-14.3 32-32l0-68.2c0-7.6-2.7-15-7.7-20.8l-65.8-76.8c-12.1-14.2-33.7-15-46.9-1.8l-21 21c-10 10-26.4 9.2-35.4-1.6l-39.2-47c-12.6-15.1-35.7-15.4-48.7-.6L135.9 215c-5.1 5.8-7.9 13.3-7.9 21.1l0 84c0 17.7 14.3 32 32 32z\"]\n};\nconst faAreaChart = faChartArea;\nconst faHouseFlag = {\n  prefix: 'fas',\n  iconName: 'house-flag',\n  icon: [640, 512, [], \"e50d\", \"M480 0c-17.7 0-32 14.3-32 32l0 160 0 320 64 0 0-320 112 0c8.8 0 16-7.2 16-16l0-128c0-8.8-7.2-16-16-16L512 32c0-17.7-14.3-32-32-32zM416 159L276.8 39.7c-12-10.3-29.7-10.3-41.7 0l-224 192C1 240.4-2.7 254.5 2 267.1S18.6 288 32 288l32 0 0 192c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-96c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 96c0 17.7 14.3 32 32 32l64.7 0 .2 0-1 0 0-353z\"]\n};\nconst faPersonCircleMinus = {\n  prefix: 'fas',\n  iconName: 'person-circle-minus',\n  icon: [576, 512, [], \"e540\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"]\n};\nconst faBan = {\n  prefix: 'fas',\n  iconName: 'ban',\n  icon: [512, 512, [128683, \"cancel\"], \"f05e\", \"M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faCancel = faBan;\nconst faCameraRotate = {\n  prefix: 'fas',\n  iconName: 'camera-rotate',\n  icon: [640, 512, [], \"e0d8\", \"M213.1 64.8L202.7 96 128 96c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0L426.9 64.8C420.4 45.2 402.1 32 381.4 32L258.6 32c-20.7 0-39 13.2-45.5 32.8zM448 256c0 8.8-7.2 16-16 16l-76.7 0c-6.2 0-11.3-5.1-11.3-11.3c0-3 1.2-5.9 3.3-8L371 229c-13.6-13.4-31.9-21-51-21c-19.2 0-37.7 7.6-51.3 21.3L249 249c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l19.7-19.7C257.4 172.7 288 160 320 160c31.8 0 62.4 12.6 85 35l23.7-23.7c2.1-2.1 5-3.3 8-3.3c6.2 0 11.3 5.1 11.3 11.3l0 76.7zM192 320c0-8.8 7.2-16 16-16l76.7 0c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8L269 347c13.6 13.4 31.9 21 51 21c19.2 0 37.7-7.6 51.3-21.3L391 327c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-19.7 19.7C382.6 403.3 352 416 320 416c-31.8 0-62.4-12.6-85-35l-23.7 23.7c-2.1 2.1-5 3.3-8 3.3c-6.2 0-11.3-5.1-11.3-11.3l0-76.7z\"]\n};\nconst faSprayCanSparkles = {\n  prefix: 'fas',\n  iconName: 'spray-can-sparkles',\n  icon: [512, 512, [\"air-freshener\"], \"f5d0\", \"M96 32l0 96 128 0 0-96c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32zm0 128c-53 0-96 43-96 96L0 464c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-208c0-53-43-96-96-96L96 160zm64 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM384 48c0-1.4-1-3-2.2-3.6L352 32 339.6 2.2C339 1 337.4 0 336 0s-3 1-3.6 2.2L320 32 290.2 44.4C289 45 288 46.6 288 48c0 1.4 1 3 2.2 3.6L320 64l12.4 29.8C333 95 334.6 96 336 96s3-1 3.6-2.2L352 64l29.8-12.4C383 51 384 49.4 384 48zm76.4 45.8C461 95 462.6 96 464 96s3-1 3.6-2.2L480 64l29.8-12.4C511 51 512 49.4 512 48c0-1.4-1-3-2.2-3.6L480 32 467.6 2.2C467 1 465.4 0 464 0s-3 1-3.6 2.2L448 32 418.2 44.4C417 45 416 46.6 416 48c0 1.4 1 3 2.2 3.6L448 64l12.4 29.8zm7.2 100.4c-.6-1.2-2.2-2.2-3.6-2.2s-3 1-3.6 2.2L448 224l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L448 256l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L480 256l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6c0-1.4-1-3-2.2-3.6L480 224l-12.4-29.8zM448 144c0-1.4-1-3-2.2-3.6L416 128 403.6 98.2C403 97 401.4 96 400 96s-3 1-3.6 2.2L384 128l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L384 160l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L416 160l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6z\"]\n};\nconst faAirFreshener = faSprayCanSparkles;\nconst faStar = {\n  prefix: 'fas',\n  iconName: 'star',\n  icon: [576, 512, [11088, 61446], \"f005\", \"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"]\n};\nconst faRepeat = {\n  prefix: 'fas',\n  iconName: 'repeat',\n  icon: [512, 512, [128257], \"f363\", \"M0 224c0 17.7 14.3 32 32 32s32-14.3 32-32c0-53 43-96 96-96l160 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9S320 19.1 320 32l0 32L160 64C71.6 64 0 135.6 0 224zm512 64c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 53-43 96-96 96l-160 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 160 0c88.4 0 160-71.6 160-160z\"]\n};\nconst faCross = {\n  prefix: 'fas',\n  iconName: 'cross',\n  icon: [384, 512, [128327, 10013], \"f654\", \"M176 0c-26.5 0-48 21.5-48 48l0 80-80 0c-26.5 0-48 21.5-48 48l0 32c0 26.5 21.5 48 48 48l80 0 0 208c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-208 80 0c26.5 0 48-21.5 48-48l0-32c0-26.5-21.5-48-48-48l-80 0 0-80c0-26.5-21.5-48-48-48L176 0z\"]\n};\nconst faBox = {\n  prefix: 'fas',\n  iconName: 'box',\n  icon: [448, 512, [128230], \"f466\", \"M50.7 58.5L0 160l208 0 0-128L93.7 32C75.5 32 58.9 42.3 50.7 58.5zM240 160l208 0L397.3 58.5C389.1 42.3 372.5 32 354.3 32L240 32l0 128zm208 32L0 192 0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-224z\"]\n};\nconst faVenusMars = {\n  prefix: 'fas',\n  iconName: 'venus-mars',\n  icon: [640, 512, [9892], \"f228\", \"M176 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM352 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9C62.1 334.1 0 262.3 0 176C0 78.8 78.8 0 176 0s176 78.8 176 176zM271.9 360.6c19.3-10.1 36.9-23.1 52.1-38.4c20 18.5 46.7 29.8 76.1 29.8c61.9 0 112-50.1 112-112s-50.1-112-112-112c-7.2 0-14.3 .7-21.1 2c-4.9-21.5-13-41.7-24-60.2C369.3 66 384.4 64 400 64c37 0 71.4 11.4 99.8 31l20.6-20.6L487 41c-6.9-6.9-8.9-17.2-5.2-26.2S494.3 0 504 0L616 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L545 140.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176c-50.5 0-96-21.3-128.1-55.4z\"]\n};\nconst faArrowPointer = {\n  prefix: 'fas',\n  iconName: 'arrow-pointer',\n  icon: [320, 512, [\"mouse-pointer\"], \"f245\", \"M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z\"]\n};\nconst faMousePointer = faArrowPointer;\nconst faMaximize = {\n  prefix: 'fas',\n  iconName: 'maximize',\n  icon: [512, 512, [\"expand-arrows-alt\"], \"f31e\", \"M200 32L56 32C42.7 32 32 42.7 32 56l0 144c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l40-40 79 79-79 79L73 295c-6.9-6.9-17.2-8.9-26.2-5.2S32 302.3 32 312l0 144c0 13.3 10.7 24 24 24l144 0c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-40-40 79-79 79 79-40 40c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l144 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2l-40 40-79-79 79-79 40 40c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-144c0-13.3-10.7-24-24-24L312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l40 40-79 79-79-79 40-40c6.9-6.9 8.9-17.2 5.2-26.2S209.7 32 200 32z\"]\n};\nconst faExpandArrowsAlt = faMaximize;\nconst faChargingStation = {\n  prefix: 'fas',\n  iconName: 'charging-station',\n  icon: [576, 512, [], \"f5e7\", \"M96 0C60.7 0 32 28.7 32 64l0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-144 16 0c22.1 0 40 17.9 40 40l0 32c0 39.8 32.2 72 72 72s72-32.2 72-72l0-123.7c32.5-10.2 56-40.5 56-76.3l0-32c0-8.8-7.2-16-16-16l-16 0 0-48c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-32 0 0-48c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-16 0c-8.8 0-16 7.2-16 16l0 32c0 35.8 23.5 66.1 56 76.3L472 376c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-48.6-39.4-88-88-88l-16 0 0-192c0-35.3-28.7-64-64-64L96 0zM216.9 82.7c6 4 8.5 11.5 6.3 18.3l-25 74.9 57.8 0c6.7 0 12.7 4.2 15 10.4s.5 13.3-4.6 17.7l-112 96c-5.5 4.7-13.4 5.1-19.3 1.1s-8.5-11.5-6.3-18.3l25-74.9L96 208c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7l112-96c5.5-4.7 13.4-5.1 19.3-1.1z\"]\n};\nconst faShapes = {\n  prefix: 'fas',\n  iconName: 'shapes',\n  icon: [512, 512, [\"triangle-circle-square\"], \"f61f\", \"M315.4 15.5C309.7 5.9 299.2 0 288 0s-21.7 5.9-27.4 15.5l-96 160c-5.9 9.9-6.1 22.2-.4 32.2s16.3 16.2 27.8 16.2l192 0c11.5 0 22.2-6.2 27.8-16.2s5.5-22.3-.4-32.2l-96-160zM288 312l0 144c0 22.1 17.9 40 40 40l144 0c22.1 0 40-17.9 40-40l0-144c0-22.1-17.9-40-40-40l-144 0c-22.1 0-40 17.9-40 40zM128 512a128 128 0 1 0 0-256 128 128 0 1 0 0 256z\"]\n};\nconst faTriangleCircleSquare = faShapes;\nconst faShuffle = {\n  prefix: 'fas',\n  iconName: 'shuffle',\n  icon: [512, 512, [128256, \"random\"], \"f074\", \"M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-10.1 0-19.6 4.7-25.6 12.8L284 229.3 244 176l31.2-41.6C293.3 110.2 321.8 96 352 96l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6zM164 282.7L204 336l-31.2 41.6C154.7 401.8 126.2 416 96 416l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c10.1 0 19.6-4.7 25.6-12.8L164 282.7zm274.6 188c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z\"]\n};\nconst faRandom = faShuffle;\nconst faPersonRunning = {\n  prefix: 'fas',\n  iconName: 'person-running',\n  icon: [448, 512, [127939, \"running\"], \"f70c\", \"M320 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM125.7 175.5c9.9-9.9 23.4-15.5 37.5-15.5c1.9 0 3.8 .1 5.6 .3L137.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9-25.4 88.8c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l28.7-100.4c5.9-20.6-2.6-42.6-20.7-53.9L238 299l30.9-82.4 5.1 12.3C289 264.7 323.9 288 362.7 288l21.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-21.3 0c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3L57.4 153.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l23.1-23.1zM91.2 352L32 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l69.6 0c19 0 36.2-11.2 43.9-28.5L157 361.6l-9.5-6c-17.5-10.9-30.5-26.8-37.9-44.9L91.2 352z\"]\n};\nconst faRunning = faPersonRunning;\nconst faMobileRetro = {\n  prefix: 'fas',\n  iconName: 'mobile-retro',\n  icon: [320, 512, [], \"e527\", \"M0 64C0 28.7 28.7 0 64 0L256 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm64 96l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM80 352a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM128 48c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0z\"]\n};\nconst faGripLinesVertical = {\n  prefix: 'fas',\n  iconName: 'grip-lines-vertical',\n  icon: [192, 512, [], \"f7a5\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 64zm128 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384z\"]\n};\nconst faSpider = {\n  prefix: 'fas',\n  iconName: 'spider',\n  icon: [512, 512, [128375], \"f717\", \"M158.4 32.6c4.8-12.4-1.4-26.3-13.8-31s-26.3 1.4-31 13.8L81.1 100c-7.9 20.7-3 44.1 12.7 59.7l57.4 57.4L70.8 190.3c-2.4-.8-4.3-2.7-5.1-5.1L46.8 128.4C42.6 115.8 29 109 16.4 113.2S-3 131 1.2 143.6l18.9 56.8c5.6 16.7 18.7 29.8 35.4 35.4L116.1 256 55.6 276.2c-16.7 5.6-29.8 18.7-35.4 35.4L1.2 368.4C-3 381 3.8 394.6 16.4 398.8s26.2-2.6 30.4-15.2l18.9-56.8c.8-2.4 2.7-4.3 5.1-5.1l80.4-26.8L93.7 352.3C78.1 368 73.1 391.4 81.1 412l32.5 84.6c4.8 12.4 18.6 18.5 31 13.8s18.5-18.6 13.8-31l-32.5-84.6c-1.1-3-.4-6.3 1.8-8.5L160 353.9c1 52.1 43.6 94.1 96 94.1s95-41.9 96-94.1l32.3 32.3c2.2 2.2 2.9 5.6 1.8 8.5l-32.5 84.6c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8L430.9 412c7.9-20.7 3-44.1-12.7-59.7l-57.4-57.4 80.4 26.8c2.4 .8 4.3 2.7 5.1 5.1l18.9 56.8c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-18.9-56.8c-5.6-16.7-18.7-29.8-35.4-35.4L395.9 256l60.5-20.2c16.7-5.6 29.8-18.7 35.4-35.4l18.9-56.8c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-18.9 56.8c-.8 2.4-2.7 4.3-5.1 5.1l-80.4 26.8 57.4-57.4c15.6-15.6 20.6-39 12.7-59.7L398.4 15.4C393.6 3 379.8-3.2 367.4 1.6s-18.5 18.6-13.8 31l32.5 84.6c1.1 3 .4 6.3-1.8 8.5L336 174.1l0-14.1c0-31.8-18.6-59.3-45.5-72.2c-9.1-4.4-18.5 3.3-18.5 13.4l0 10.8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-10.8c0-10.1-9.4-17.7-18.5-13.4C194.6 100.7 176 128.2 176 160l0 14.1-48.3-48.3c-2.2-2.2-2.9-5.6-1.8-8.5l32.5-84.6z\"]\n};\nconst faHandsBound = {\n  prefix: 'fas',\n  iconName: 'hands-bound',\n  icon: [640, 512, [], \"e4f9\", \"M96 32C96 14.3 81.7 0 64 0S32 14.3 32 32l0 64 0 59.1 0 .7L32 192l0 21.9c0 14.2 5.1 27.9 14.3 38.7L131.6 352l-3.6 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 128 0 64 0 128 0 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-3.6 0 85.3-99.5c9.2-10.8 14.3-24.5 14.3-38.7l0-21.9 0-36.2 0-.7L608 96l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64 0 48.8-69.3 92.4c-5.7 7.6-16.1 9.6-24.2 4.8c-9.7-5.7-12.1-18.7-5.1-27.5L473 180c10.8-13.5 8.9-33.3-4.4-44.5s-33-9.8-44.5 3.2l-46.7 52.5C361 209.7 352 233.4 352 258.1l0 61.9 0 32-64 0 0-32 0-61.9c0-24.6-9-48.4-25.4-66.8l-46.7-52.5c-11.5-13-31.3-14.4-44.5-3.2s-15.2 30.9-4.4 44.5l27.6 34.5c7 8.8 4.7 21.8-5.1 27.5c-8.1 4.8-18.6 2.7-24.2-4.8L96 144.8 96 96l0-64zm64 448l0 32 128 0 0-32 64 0 0 32 128 0 0-32 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0-128 0-64 0-128 0-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0z\"]\n};\nconst faFileInvoiceDollar = {\n  prefix: 'fas',\n  iconName: 'file-invoice-dollar',\n  icon: [384, 512, [], \"f571\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 80c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16zm128 72c8.8 0 16 7.2 16 16l0 17.3c8.5 1.2 16.7 3.1 24.1 5.1c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-11.1-3-22-5.2-32.1-5.3c-8.4-.1-17.4 1.8-23.6 5.5c-5.7 3.4-8.1 7.3-8.1 12.8c0 3.7 1.3 6.5 7.3 10.1c6.9 4.1 16.6 7.1 29.2 10.9l.5 .1s0 0 0 0s0 0 0 0c11.3 3.4 25.3 7.6 36.3 14.6c12.1 7.6 22.4 19.7 22.7 38.2c.3 19.3-9.6 33.3-22.9 41.6c-7.7 4.8-16.4 7.6-25.1 9.1l0 17.1c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-17.8c-11.2-2.1-21.7-5.7-30.9-8.9c0 0 0 0 0 0c-2.1-.7-4.2-1.4-6.2-2.1c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c2.5 .8 4.8 1.6 7.1 2.4c0 0 0 0 0 0s0 0 0 0s0 0 0 0c13.6 4.6 24.6 8.4 36.3 8.7c9.1 .3 17.9-1.7 23.7-5.3c5.1-3.2 7.9-7.3 7.8-14c-.1-4.6-1.8-7.8-7.7-11.6c-6.8-4.3-16.5-7.4-29-11.2l-1.6-.5s0 0 0 0c-11-3.3-24.3-7.3-34.8-13.7c-12-7.2-22.6-18.9-22.7-37.3c-.1-19.4 10.8-32.8 23.8-40.5c7.5-4.4 15.8-7.2 24.1-8.7l0-17.3c0-8.8 7.2-16 16-16z\"]\n};\nconst faPlaneCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'plane-circle-exclamation',\n  icon: [640, 512, [], \"e556\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faXRay = {\n  prefix: 'fas',\n  iconName: 'x-ray',\n  icon: [512, 512, [], \"f497\", \"M0 64C0 46.3 14.3 32 32 32l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 320c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 96C14.3 96 0 81.7 0 64zM256 96c-8.8 0-16 7.2-16 16l0 32-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48-112 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l112 0 0 70.6L189.1 307c-5.2-2-10.6-3-16.2-3l-2.1 0c-23.6 0-42.8 19.2-42.8 42.8c0 9.6 3.2 18.9 9.1 26.4l18.2 23.2c9.7 12.4 24.6 19.6 40.3 19.6l120.8 0c15.7 0 30.6-7.2 40.3-19.6l18.2-23.2c5.9-7.5 9.1-16.8 9.1-26.4c0-23.6-19.2-42.8-42.8-42.8l-2.2 0c-5.5 0-11 1-16.2 3L272 326.6l0-70.6 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-112 0 0-48 80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-80 0 0-32c0-8.8-7.2-16-16-16zM208 352a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm80 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faSpellCheck = {\n  prefix: 'fas',\n  iconName: 'spell-check',\n  icon: [576, 512, [], \"f891\", \"M112 0C99.1 0 87.4 7.8 82.5 19.7l-66.7 160-13.3 32c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L66.7 224l90.7 0 5.1 12.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-13.3-32-66.7-160C136.6 7.8 124.9 0 112 0zm18.7 160l-37.3 0L112 115.2 130.7 160zM256 32l0 96 0 96c0 17.7 14.3 32 32 32l80 0c44.2 0 80-35.8 80-80c0-23.1-9.8-43.8-25.4-58.4c6-11.2 9.4-24 9.4-37.6c0-44.2-35.8-80-80-80L288 0c-17.7 0-32 14.3-32 32zm96 64l-32 0 0-32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-32 64l32 0 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0-32zM566.6 310.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L352 434.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l192-192z\"]\n};\nconst faSlash = {\n  prefix: 'fas',\n  iconName: 'slash',\n  icon: [640, 512, [], \"f715\", \"M5.1 9.2C13.3-1.2 28.4-3.1 38.8 5.1l592 464c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2z\"]\n};\nconst faComputerMouse = {\n  prefix: 'fas',\n  iconName: 'computer-mouse',\n  icon: [384, 512, [128433, \"mouse\"], \"f8cc\", \"M0 192l176 0L176 0 160 0C71.6 0 0 71.6 0 160l0 32zm0 32L0 352c0 88.4 71.6 160 160 160l64 0c88.4 0 160-71.6 160-160l0-128-192 0L0 224zm384-32l0-32C384 71.6 312.4 0 224 0L208 0l0 192 176 0z\"]\n};\nconst faMouse = faComputerMouse;\nconst faArrowRightToBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-right-to-bracket',\n  icon: [512, 512, [\"sign-in\"], \"f090\", \"M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"]\n};\nconst faSignIn = faArrowRightToBracket;\nconst faShopSlash = {\n  prefix: 'fas',\n  iconName: 'shop-slash',\n  icon: [640, 512, [\"store-alt-slash\"], \"e070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-54.8-43L576 224l-64 0 0 152L384 275.7l0-51.7-64 0 0 1.5L277.2 192l325.9 0c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L74.1 32.8 38.8 5.1zM36.8 192l85 0L21 112.5 6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM320 384l-192 0 0-160-64 0 0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-65.5-64-50.4 0 35.9z\"]\n};\nconst faStoreAltSlash = faShopSlash;\nconst faServer = {\n  prefix: 'fas',\n  iconName: 'server',\n  icon: [512, 512, [], \"f233\", \"M64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 32zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 288zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faVirusCovidSlash = {\n  prefix: 'fas',\n  iconName: 'virus-covid-slash',\n  icon: [640, 512, [], \"e4a9\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c11.4-19.5 19.1-41.4 22.3-64.7l33.6 0 0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16-33.6 0c-4.2-30.7-16.3-58.8-34.1-82.3L484 125.9l11.3 11.3c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L472.7 46.7c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L450.1 92l-23.8 23.8C402.8 97.9 374.7 85.8 344 81.6L344 48l16 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L280 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.6c-30.7 4.2-58.8 16.3-82.3 34.1L189.9 92l11.3-11.3c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L134.1 79.8 38.8 5.1zM149.2 213.5c-1.5 6-2.7 12.2-3.5 18.5L112 232l0-16c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16 33.6 0c4.2 30.7 16.3 58.8 34.1 82.3L156 386.1l-11.3-11.3c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l56.6 56.6c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L189.9 420l23.8-23.8c23.5 17.9 51.7 29.9 82.3 34.1l0 33.6-16 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0-33.6c20.4-2.8 39.7-9.1 57.3-18.2L149.2 213.5z\"]\n};\nconst faShopLock = {\n  prefix: 'fas',\n  iconName: 'shop-lock',\n  icon: [640, 512, [], \"e4a5\", \"M36.8 192l412.8 0c20.2-19.8 47.9-32 78.4-32c30.5 0 58.1 12.2 78.3 31.9c18.9-1.6 33.7-17.4 33.7-36.7c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM384 224l-64 0 0 160-192 0 0-160-64 0 0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-80 0-32 0-128zm144 16c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faHourglassStart = {\n  prefix: 'fas',\n  iconName: 'hourglass-start',\n  icon: [384, 512, [\"hourglass-1\"], \"f251\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM288 437l0 11L96 448l0-11c0-25.5 10.1-49.9 28.1-67.9L192 301.3l67.9 67.9c18 18 28.1 42.4 28.1 67.9z\"]\n};\nconst faHourglass1 = faHourglassStart;\nconst faBlenderPhone = {\n  prefix: 'fas',\n  iconName: 'blender-phone',\n  icon: [576, 512, [], \"f6b6\", \"M224 352L196.8 52.3C194.2 24.2 216.3 0 244.6 0L534.1 0c21.1 0 36.4 20.1 30.9 40.4L558.5 64 400 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l149.8 0-17.5 64L400 160c-8.8 0-16 7.2-16 16s7.2 16 16 16l123.6 0-17.5 64L400 256c-8.8 0-16 7.2-16 16s7.2 16 16 16l97.5 0L480 352l-256 0zm-16 32l288 0c26.5 0 48 21.5 48 48l0 32c0 26.5-21.5 48-48 48l-288 0c-26.5 0-48-21.5-48-48l0-32c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM147.5 30.7c10.8 6.7 15.3 21 10.6 33.4l-22 57.8c-4.2 10.9-14.5 17.6-25.3 16.4l-33.3-3.6c-13.6 42.2-13.6 88.4 0 130.7l33.3-3.6c10.9-1.2 21.2 5.5 25.3 16.4l22 57.8c4.7 12.4 .2 26.7-10.6 33.4l-44 27.2c-9.7 6-21.9 4.2-29.8-4.3C-24.6 286-24.6 114 73.7 7.8C81.6-.7 93.8-2.5 103.5 3.5l44 27.2z\"]\n};\nconst faBuildingWheat = {\n  prefix: 'fas',\n  iconName: 'building-wheat',\n  icon: [640, 512, [], \"e4db\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm384 80l0 16c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0zm0 128c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0 0 16zm0 112c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0 0 16zM512 496l0 16-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80zm0-96l-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80l0 16zm0-128l0 16-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80zM528 32c13.3 0 24 10.7 24 24l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-13.3 10.7-24 24-24zm96 64l0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-13.3 10.7-24 24-24s24 10.7 24 24zM456 72c13.3 0 24 10.7 24 24l0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-13.3 10.7-24 24-24z\"]\n};\nconst faPersonBreastfeeding = {\n  prefix: 'fas',\n  iconName: 'person-breastfeeding',\n  icon: [448, 512, [], \"e53a\", \"M224 0a80 80 0 1 1 0 160A80 80 0 1 1 224 0zM436.8 382.8L373.5 462c-16.6 20.7-46.8 24.1-67.5 7.5c-17.6-14.1-22.7-38.1-13.5-57.7l-.8-.1c-38.9-5.6-74.3-25.1-99.7-54.8l0-36.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 .8 0 1.6 .1 2.4l101.4 50.7c23.7 11.9 33.3 40.7 21.5 64.4s-40.7 33.3-64.4 21.5L27.2 427.3c-1.1-.5-2.2-1.1-3.3-1.7c-4.9-2.8-9.2-6.4-12.6-10.6c-4.6-5.4-7.8-11.7-9.6-18.4c-3.3-12-1.9-25.2 4.8-36.6c.6-1.1 1.3-2.2 2-3.2L75.6 256.1c26.7-40.1 71.7-64.1 119.8-64.1l75.2 0c46.5 0 90.1 22.5 117.2 60.3l50.7 70.9c2.2 3 4 6.1 5.5 9.4c2.9 6.7 4.3 13.8 4 20.8c-.3 10.6-4.2 21-11.2 29.4zM320 332a44 44 0 1 0 -88 0 44 44 0 1 0 88 0z\"]\n};\nconst faRightToBracket = {\n  prefix: 'fas',\n  iconName: 'right-to-bracket',\n  icon: [512, 512, [\"sign-in-alt\"], \"f2f6\", \"M217.9 105.9L340.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L217.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1L32 320c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM352 416l64 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faSignInAlt = faRightToBracket;\nconst faVenus = {\n  prefix: 'fas',\n  iconName: 'venus',\n  icon: [384, 512, [9792], \"f221\", \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1l0 34.9-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-34.9z\"]\n};\nconst faPassport = {\n  prefix: 'fas',\n  iconName: 'passport',\n  icon: [448, 512, [], \"f5ab\", \"M0 64C0 28.7 28.7 0 64 0L384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM183 278.8c-27.9-13.2-48.4-39.4-53.7-70.8l39.1 0c1.6 30.4 7.7 53.8 14.6 70.8zm41.3 9.2l-.3 0-.3 0c-2.4-3.5-5.7-8.9-9.1-16.5c-6-13.6-12.4-34.3-14.2-63.5l47.1 0c-1.8 29.2-8.1 49.9-14.2 63.5c-3.4 7.6-6.7 13-9.1 16.5zm40.7-9.2c6.8-17.1 12.9-40.4 14.6-70.8l39.1 0c-5.3 31.4-25.8 57.6-53.7 70.8zM279.6 176c-1.6-30.4-7.7-53.8-14.6-70.8c27.9 13.2 48.4 39.4 53.7 70.8l-39.1 0zM223.7 96l.3 0 .3 0c2.4 3.5 5.7 8.9 9.1 16.5c6 13.6 12.4 34.3 14.2 63.5l-47.1 0c1.8-29.2 8.1-49.9 14.2-63.5c3.4-7.6 6.7-13 9.1-16.5zM183 105.2c-6.8 17.1-12.9 40.4-14.6 70.8l-39.1 0c5.3-31.4 25.8-57.6 53.7-70.8zM352 192A128 128 0 1 0 96 192a128 128 0 1 0 256 0zM112 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l224 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-224 0z\"]\n};\nconst faThumbtackSlash = {\n  prefix: 'fas',\n  iconName: 'thumbtack-slash',\n  icon: [640, 512, [\"thumb-tack-slash\"], \"e68f\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L481.4 352c9.8-.4 18.9-5.3 24.6-13.3c6-8.3 7.7-19.1 4.4-28.8l-1-3c-13.8-41.5-42.8-74.8-79.5-94.7L418.5 64 448 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l29.5 0-6.1 79.5L38.8 5.1zM324.9 352L177.1 235.6c-20.9 18.9-37.2 43.3-46.5 71.3l-1 3c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l164.9 0zM288 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96-64 0z\"]\n};\nconst faThumbTackSlash = faThumbtackSlash;\nconst faHeartPulse = {\n  prefix: 'fas',\n  iconName: 'heart-pulse',\n  icon: [512, 512, [\"heartbeat\"], \"f21e\", \"M228.3 469.1L47.6 300.4c-4.2-3.9-8.2-8.1-11.9-12.4l87 0c22.6 0 43-13.6 51.7-34.5l10.5-25.2 49.3 109.5c3.8 8.5 12.1 14 21.4 14.1s17.8-5 22-13.3L320 253.7l1.7 3.4c9.5 19 28.9 31 50.1 31l104.5 0c-3.7 4.3-7.7 8.5-11.9 12.4L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9zM503.7 240l-132 0c-3 0-5.8-1.7-7.2-4.4l-23.2-46.3c-4.1-8.1-12.4-13.3-21.5-13.3s-17.4 5.1-21.5 13.3l-41.4 82.8L205.9 158.2c-3.9-8.7-12.7-14.3-22.2-14.1s-18.1 5.9-21.8 14.8l-31.8 76.3c-1.2 3-4.2 4.9-7.4 4.9L16 240c-2.6 0-5 .4-7.3 1.1C3 225.2 0 208.2 0 190.9l0-5.8c0-69.9 50.5-129.5 119.4-141C165 36.5 211.4 51.4 244 84l12 12 12-12c32.6-32.6 79-47.5 124.6-39.9C461.5 55.6 512 115.2 512 185.1l0 5.8c0 16.9-2.8 33.5-8.3 49.1z\"]\n};\nconst faHeartbeat = faHeartPulse;\nconst faPeopleCarryBox = {\n  prefix: 'fas',\n  iconName: 'people-carry-box',\n  icon: [640, 512, [\"people-carry\"], \"f4ce\", \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm64 193.7l0 65.1 51 51c7.1 7.1 11.8 16.2 13.4 26.1l15.2 90.9c2.9 17.4-8.9 33.9-26.3 36.8s-33.9-8.9-36.8-26.3l-14.3-85.9L66.8 320C54.8 308 48 291.7 48 274.7l0-88.1c0-32.4 26.2-58.6 58.6-58.6c24.1 0 46.5 12 59.9 32l47.4 71.1 10.1 5 0-76.2c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 76.2 10.1-5L473.5 160c13.3-20 35.8-32 59.9-32c32.4 0 58.6 26.2 58.6 58.6l0 88.1c0 17-6.7 33.3-18.7 45.3l-79.4 79.4-14.3 85.9c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l15.2-90.9c1.6-9.9 6.3-19 13.4-26.1l51-51 0-65.1-19 28.5c-4.6 7-11 12.6-18.5 16.3l-59.6 29.8c-2.4 1.3-4.9 2.2-7.6 2.8c-2.6 .6-5.3 .9-7.9 .8l-126.7 0c-2.5 .1-5-.2-7.5-.7c-2.9-.6-5.6-1.6-8.1-3l-59.5-29.8c-7.5-3.7-13.8-9.4-18.5-16.3l-19-28.5zM2.3 468.1L50.1 348.6l49.2 49.2-37.6 94c-6.6 16.4-25.2 24.4-41.6 17.8S-4.3 484.5 2.3 468.1zM512 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm77.9 348.6l47.8 119.5c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8l-37.6-94 49.2-49.2z\"]\n};\nconst faPeopleCarry = faPeopleCarryBox;\nconst faTemperatureHigh = {\n  prefix: 'fas',\n  iconName: 'temperature-high',\n  icon: [512, 512, [], \"f769\", \"M416 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 128A96 96 0 1 0 416 0a96 96 0 1 0 0 192zM96 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C217.8 332.6 224 349.5 224 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9C88.9 308.4 96 293.8 96 276.5L96 112zM144 0C82.1 0 32 50.2 32 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C11.2 304.2 0 334.8 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L256 112C256 50.2 205.9 0 144 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3L160 112c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 210.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48z\"]\n};\nconst faMicrochip = {\n  prefix: 'fas',\n  iconName: 'microchip',\n  icon: [512, 512, [], \"f2db\", \"M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c-35.3 0-64 28.7-64 64l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c0 35.3 28.7 64 64 64l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c35.3 0 64-28.7 64-64l40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0c0-35.3-28.7-64-64-64l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40zM160 128l192 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32l0-192c0-17.7 14.3-32 32-32zm192 32l-192 0 0 192 192 0 0-192z\"]\n};\nconst faCrown = {\n  prefix: 'fas',\n  iconName: 'crown',\n  icon: [576, 512, [128081], \"f521\", \"M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6l277.2 0c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z\"]\n};\nconst faWeightHanging = {\n  prefix: 'fas',\n  iconName: 'weight-hanging',\n  icon: [512, 512, [], \"f5cd\", \"M224 96a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm122.5 32c3.5-10 5.5-20.8 5.5-32c0-53-43-96-96-96s-96 43-96 96c0 11.2 1.9 22 5.5 32L120 128c-22 0-41.2 15-46.6 36.4l-72 288c-3.6 14.3-.4 29.5 8.7 41.2S33.2 512 48 512l416 0c14.8 0 28.7-6.8 37.8-18.5s12.3-26.8 8.7-41.2l-72-288C433.2 143 414 128 392 128l-45.5 0z\"]\n};\nconst faXmarksLines = {\n  prefix: 'fas',\n  iconName: 'xmarks-lines',\n  icon: [640, 512, [], \"e59a\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416zM7 167c-9.4 9.4-9.4 24.6 0 33.9l55 55L7 311c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55L41 167c-9.4-9.4-24.6-9.4-33.9 0zM265 167c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55zM455 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z\"]\n};\nconst faFilePrescription = {\n  prefix: 'fas',\n  iconName: 'file-prescription',\n  icon: [384, 512, [], \"f572\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM104 196l72 0c33.1 0 60 26.9 60 60c0 25.5-15.9 47.2-38.3 55.9l43 40.3 33.8-31c8.1-7.5 20.8-6.9 28.3 1.2s6.9 20.8-1.2 28.3L270 379.7l31.7 29.7c8.1 7.6 8.5 20.2 .9 28.3s-20.2 8.5-28.3 .9l-33.9-31.8-34.9 32c-8.1 7.5-20.8 6.9-28.3-1.2s-6.9-20.8 1.2-28.3l32.6-29.9-64.8-60.8c-.9-.8-1.6-1.7-2.3-2.6l-20 0 0 44c0 11-9 20-20 20s-20-9-20-20l0-64 0-80c0-11 9-20 20-20zm72 80c11 0 20-9 20-20s-9-20-20-20l-52 0 0 40 52 0z\"]\n};\nconst faWeightScale = {\n  prefix: 'fas',\n  iconName: 'weight-scale',\n  icon: [512, 512, [\"weight\"], \"f496\", \"M128 176a128 128 0 1 1 256 0 128 128 0 1 1 -256 0zM391.8 64C359.5 24.9 310.7 0 256 0S152.5 24.9 120.2 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-56.2 0zM296 224c0-10.6-4.1-20.2-10.9-27.4l33.6-78.3c3.5-8.1-.3-17.5-8.4-21s-17.5 .3-21 8.4L255.7 184c-22 .1-39.7 18-39.7 40c0 22.1 17.9 40 40 40s40-17.9 40-40z\"]\n};\nconst faWeight = faWeightScale;\nconst faUserGroup = {\n  prefix: 'fas',\n  iconName: 'user-group',\n  icon: [640, 512, [128101, \"user-friends\"], \"f500\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM609.3 512l-137.8 0c5.4-9.4 8.6-20.3 8.6-32l0-8c0-60.7-27.1-115.2-69.8-151.8c2.4-.1 4.7-.2 7.1-.2l61.4 0C567.8 320 640 392.2 640 481.3c0 17-13.8 30.7-30.7 30.7zM432 256c-31 0-59-12.6-79.3-32.9C372.4 196.5 384 163.6 384 128c0-26.8-6.6-52.1-18.3-74.3C384.3 40.1 407.2 32 432 32c61.9 0 112 50.1 112 112s-50.1 112-112 112z\"]\n};\nconst faUserFriends = faUserGroup;\nconst faArrowUpAZ = {\n  prefix: 'fas',\n  iconName: 'arrow-up-a-z',\n  icon: [576, 512, [\"sort-alpha-up\"], \"f15e\", \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3 128 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 320c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-128 0c-17.7 0-32 14.3-32 32zM416 32c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 38.8 428.1 32 416 32zM395.8 176L416 135.6 436.2 176l-40.4 0z\"]\n};\nconst faSortAlphaUp = faArrowUpAZ;\nconst faChessKnight = {\n  prefix: 'fas',\n  iconName: 'chess-knight',\n  icon: [448, 512, [9822], \"f441\", \"M96 48L82.7 61.3C70.7 73.3 64 89.5 64 106.5l0 132.4c0 10.7 5.3 20.7 14.2 26.6l10.6 7c14.3 9.6 32.7 10.7 48.1 3l3.2-1.6c2.6-1.3 5-2.8 7.3-4.5l49.4-37c6.6-5 15.7-5 22.3 0c10.2 7.7 9.9 23.1-.7 30.3L90.4 350C73.9 361.3 64 380 64 400l320 0 28.9-159c2.1-11.3 3.1-22.8 3.1-34.3l0-14.7C416 86 330 0 224 0L83.8 0C72.9 0 64 8.9 64 19.8c0 7.5 4.2 14.3 10.9 17.7L96 48zm24 68a20 20 0 1 1 40 0 20 20 0 1 1 -40 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512l370.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L384 432 64 432 22.6 473.4z\"]\n};\nconst faFaceLaughSquint = {\n  prefix: 'fas',\n  iconName: 'face-laugh-squint',\n  icon: [512, 512, [\"laugh-squint\"], \"f59b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zm36.7-199.4l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 125.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faLaughSquint = faFaceLaughSquint;\nconst faWheelchair = {\n  prefix: 'fas',\n  iconName: 'wheelchair',\n  icon: [512, 512, [], \"f193\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM120.5 247.2c12.4-4.7 18.7-18.5 14-30.9s-18.5-18.7-30.9-14C43.1 225.1 0 283.5 0 352c0 88.4 71.6 160 160 160c61.2 0 114.3-34.3 141.2-84.7c6.2-11.7 1.8-26.2-9.9-32.5s-26.2-1.8-32.5 9.9C240 440 202.8 464 160 464C98.1 464 48 413.9 48 352c0-47.9 30.1-88.8 72.5-104.8zM259.8 176l-1.9-9.7c-4.5-22.3-24-38.3-46.8-38.3c-30.1 0-52.7 27.5-46.8 57l23.1 115.5c6 29.9 32.2 51.4 62.8 51.4l5.1 0c.4 0 .8 0 1.3 0l94.1 0c6.7 0 12.6 4.1 15 10.4L402 459.2c6 16.1 23.8 24.6 40.1 19.1l48-16c16.8-5.6 25.8-23.7 20.2-40.5s-23.7-25.8-40.5-20.2l-18.7 6.2-25.5-68c-11.7-31.2-41.6-51.9-74.9-51.9l-68.5 0-9.6-48 63.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-76.2 0z\"]\n};\nconst faCircleArrowUp = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-up',\n  icon: [512, 512, [\"arrow-circle-up\"], \"f0aa\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM385 215c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-71-71L280 392c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-214.1-71 71c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 103c9.4-9.4 24.6-9.4 33.9 0L385 215z\"]\n};\nconst faArrowCircleUp = faCircleArrowUp;\nconst faToggleOn = {\n  prefix: 'fas',\n  iconName: 'toggle-on',\n  icon: [576, 512, [], \"f205\", \"M192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192s-86-192-192-192L192 64zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faPersonWalking = {\n  prefix: 'fas',\n  iconName: 'person-walking',\n  icon: [320, 512, [128694, \"walking\"], \"f554\", \"M160 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM126.5 199.3c-1 .4-1.9 .8-2.9 1.2l-8 3.5c-16.4 7.3-29 21.2-34.7 38.2l-2.6 7.8c-5.6 16.8-23.7 25.8-40.5 20.2s-25.8-23.7-20.2-40.5l2.6-7.8c11.4-34.1 36.6-61.9 69.4-76.5l8-3.5c20.8-9.2 43.3-14 66.1-14c44.6 0 84.8 26.8 101.9 67.9L281 232.7l21.4 10.7c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L247 287.3c-10.3-5.2-18.4-13.8-22.8-24.5l-9.6-23-19.3 65.5 49.5 54c5.4 5.9 9.2 13 11.2 20.8l23 92.1c4.3 17.1-6.1 34.5-23.3 38.8s-34.5-6.1-38.8-23.3l-22-88.1-70.7-77.1c-14.8-16.1-20.3-38.6-14.7-59.7l16.9-63.5zM68.7 398l25-62.4c2.1 3 4.5 5.8 7 8.6l40.7 44.4-14.5 36.2c-2.4 6-6 11.5-10.6 16.1L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L68.7 398z\"]\n};\nconst faWalking = faPersonWalking;\nconst faL = {\n  prefix: 'fas',\n  iconName: 'l',\n  icon: [320, 512, [108], \"4c\", \"M64 32c17.7 0 32 14.3 32 32l0 352 192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-17.7 0-32-14.3-32-32L32 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faFire = {\n  prefix: 'fas',\n  iconName: 'fire',\n  icon: [448, 512, [128293], \"f06d\", \"M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-4.5-9-16-9.6-22.5-2l-25.2 29.3c-6.6 7.6-18.5 7.4-24.7-.5c-16.5-21-46-58.5-62.8-79.8c-6.3-8-18.3-8.1-24.7-.1c-33.8 42.5-50.8 69.3-50.8 99.4C112 375.4 162.6 416 225.7 416z\"]\n};\nconst faBedPulse = {\n  prefix: 'fas',\n  iconName: 'bed-pulse',\n  icon: [640, 512, [\"procedures\"], \"f487\", \"M483.2 9.6L524 64l92 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-104 0c-7.6 0-14.7-3.6-19.2-9.6L468.7 70.3l-47 99.9c-3.7 7.8-11.3 13.1-19.9 13.7s-16.9-3.4-21.7-10.6L339.2 112 216 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l136 0c8 0 15.5 4 20 10.7l24.4 36.6 45.9-97.5C445.9 6.2 453.2 1 461.6 .1s16.6 2.7 21.6 9.5zM320 160l12.7 0 20.7 31.1c11.2 16.8 30.6 26.3 50.7 24.8s37.9-13.7 46.5-32L461.9 160l82.1 0c53 0 96 43 96 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-224 0-32 0L64 448l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64s32 14.3 32 32l0 256 224 0 0-160c0-17.7 14.3-32 32-32zm-144 0a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faProcedures = faBedPulse;\nconst faShuttleSpace = {\n  prefix: 'fas',\n  iconName: 'shuttle-space',\n  icon: [640, 512, [\"space-shuttle\"], \"f197\", \"M130 480c40.6 0 80.4-11 115.2-31.9L352 384l-224 0 0 96 2 0zM352 128L245.2 63.9C210.4 43 170.6 32 130 32l-2 0 0 96 224 0zM96 128l0-96L80 32C53.5 32 32 53.5 32 80l0 48 8 0c-22.1 0-40 17.9-40 40l0 16L0 328l0 16c0 22.1 17.9 40 40 40l-8 0 0 48c0 26.5 21.5 48 48 48l16 0 0-96 8 0c26.2 0 49.4-12.6 64-32l288 0c69.3 0 135-22.7 179.2-81.6c6.4-8.5 6.4-20.3 0-28.8C591 182.7 525.3 160 456 160l-288 0c-14.6-19.4-37.8-32-64-32l-8 0zM512 243.6l0 24.9c0 19.6-15.9 35.6-35.6 35.6c-2.5 0-4.4-2-4.4-4.4l0-87.1c0-2.5 2-4.4 4.4-4.4c19.6 0 35.6 15.9 35.6 35.6z\"]\n};\nconst faSpaceShuttle = faShuttleSpace;\nconst faFaceLaugh = {\n  prefix: 'fas',\n  iconName: 'face-laugh',\n  icon: [512, 512, [\"laugh\"], \"f599\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faLaugh = faFaceLaugh;\nconst faFolderOpen = {\n  prefix: 'fas',\n  iconName: 'folder-open',\n  icon: [576, 512, [128194, 128449, 61717], \"f07c\", \"M88.7 223.8L0 375.8 0 96C0 60.7 28.7 32 64 32l117.5 0c17 0 33.3 6.7 45.3 18.7l26.5 26.5c12 12 28.3 18.7 45.3 18.7L416 96c35.3 0 64 28.7 64 64l0 32-336 0c-22.8 0-43.8 12.1-55.3 31.8zm27.6 16.1C122.1 230 132.6 224 144 224l400 0c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-112 192C453.9 474 443.4 480 432 480L32 480c-11.5 0-22-6.1-27.7-16.1s-5.7-22.2 .1-32.1l112-192z\"]\n};\nconst faHeartCirclePlus = {\n  prefix: 'fas',\n  iconName: 'heart-circle-plus',\n  icon: [576, 512, [], \"e500\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faCodeFork = {\n  prefix: 'fas',\n  iconName: 'code-fork',\n  icon: [448, 512, [], \"e13b\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 38.7c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-38.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 38.7c0 53-43 96-96 96l-48 0 0 70.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-70.7-48 0c-53 0-96-43-96-96l0-38.7C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm208 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM248 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faCity = {\n  prefix: 'fas',\n  iconName: 'city',\n  icon: [640, 512, [127961], \"f64f\", \"M480 48c0-26.5-21.5-48-48-48L336 0c-26.5 0-48 21.5-48 48l0 48-64 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-64 0 0-72c0-13.3-10.7-24-24-24S64 10.7 64 24l0 72L48 96C21.5 96 0 117.5 0 144l0 96L0 464c0 26.5 21.5 48 48 48l256 0 32 0 96 0 160 0c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48l-112 0 0-144zm96 320l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM240 416l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zM128 400c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM560 256c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM256 176l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM112 160c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM256 304c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM112 320l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zm304-48l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM400 64c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zm16 112l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16z\"]\n};\nconst faMicrophoneLines = {\n  prefix: 'fas',\n  iconName: 'microphone-lines',\n  icon: [384, 512, [127897, \"microphone-alt\"], \"f3c9\", \"M96 96l0 160c0 53 43 96 96 96s96-43 96-96l-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0c0-53-43-96-96-96S96 43 96 96zM320 240l0 16c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24z\"]\n};\nconst faMicrophoneAlt = faMicrophoneLines;\nconst faPepperHot = {\n  prefix: 'fas',\n  iconName: 'pepper-hot',\n  icon: [512, 512, [127798], \"f816\", \"M428.3 3c11.6-6.4 26.2-2.3 32.6 9.3l4.8 8.7c19.3 34.7 19.8 75.7 3.4 110C495.8 159.6 512 197.9 512 240c0 18.5-3.1 36.3-8.9 52.8c-6.1 17.3-28.5 16.3-36.8-.1l-11.7-23.4c-4.1-8.1-12.4-13.3-21.5-13.3L360 256c-13.3 0-24-10.7-24-24l0-80c0-13.3-10.7-24-24-24l-17.1 0c-21.3 0-30-23.9-10.8-32.9C304.7 85.4 327.7 80 352 80c28.3 0 54.8 7.3 77.8 20.2c5.5-18.2 3.7-38.4-6-55.8L419 35.7c-6.4-11.6-2.3-26.2 9.3-32.6zM171.2 345.5L264 160l40 0 0 80c0 26.5 21.5 48 48 48l76.2 0 23.9 47.8C372.3 443.9 244.3 512 103.2 512l-58.8 0C19.9 512 0 492.1 0 467.6c0-20.8 14.5-38.8 34.8-43.3l49.8-11.1c37.6-8.4 69.5-33.2 86.7-67.7z\"]\n};\nconst faUnlock = {\n  prefix: 'fas',\n  iconName: 'unlock',\n  icon: [448, 512, [128275], \"f09c\", \"M144 144c0-44.2 35.8-80 80-80c31.9 0 59.4 18.6 72.3 45.7c7.6 16 26.7 22.8 42.6 15.2s22.8-26.7 15.2-42.6C331 33.7 281.5 0 224 0C144.5 0 80 64.5 80 144l0 48-16 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-240 0 0-48z\"]\n};\nconst faColonSign = {\n  prefix: 'fas',\n  iconName: 'colon-sign',\n  icon: [384, 512, [], \"e140\", \"M255 39.8c4.3-17.1-6.1-34.5-23.3-38.8S197.2 7.1 193 24.2L181.9 68.6C96.1 87.8 32 164.4 32 256c0 58.1 25.8 110.2 66.7 145.4L81 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l13-52.1c9 3.4 18.4 6.2 28 8.2L177 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l10.4-41.4c33.4-4.4 64.1-17.4 89.8-36.7c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-10.2 7.7-21.7 13.9-34 18.3L321 160c9.4-.3 18.5-4.7 24.6-12.8c10.6-14.1 7.8-34.2-6.4-44.8c-1.1-.8-2.2-1.6-3.3-2.4L351 39.8c4.3-17.1-6.1-34.5-23.3-38.8S293.2 7.1 289 24.2L277.2 71.5c-9.3-2.7-18.8-4.6-28.6-5.9L255 39.8zM163.2 143.3L117.3 326.8C103.9 306.5 96 282.2 96 256c0-48.7 27.2-91 67.2-112.7zm8.6 229.5l61.1-244.6c9.9 .7 19.5 2.5 28.7 5.3l-62 248.1c-9.7-1.9-19-4.8-27.8-8.8z\"]\n};\nconst faHeadset = {\n  prefix: 'fas',\n  iconName: 'headset',\n  icon: [512, 512, [], \"f590\", \"M256 48C141.1 48 48 141.1 48 256l0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-40C0 114.6 114.6 0 256 0S512 114.6 512 256l0 144.1c0 48.6-39.4 88-88.1 88L313.6 488c-8.3 14.3-23.8 24-41.6 24l-32 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l32 0c17.8 0 33.3 9.7 41.6 24l110.4 .1c22.1 0 40-17.9 40-40L464 256c0-114.9-93.1-208-208-208zM144 208l16 0c17.7 0 32 14.3 32 32l0 112c0 17.7-14.3 32-32 32l-16 0c-35.3 0-64-28.7-64-64l0-48c0-35.3 28.7-64 64-64zm224 0c35.3 0 64 28.7 64 64l0 48c0 35.3-28.7 64-64 64l-16 0c-17.7 0-32-14.3-32-32l0-112c0-17.7 14.3-32 32-32l16 0z\"]\n};\nconst faStoreSlash = {\n  prefix: 'fas',\n  iconName: 'store-slash',\n  icon: [640, 512, [], \"e071\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.8-68 0-17.1 0-131.4c-4 1-8 1.8-12.3 2.3c0 0 0 0-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3l0 100.3L301.2 210.7c7-4.4 13.3-9.7 18.8-15.7c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4L522.3 13.1C517.2 5 508.1 0 498.4 0L141.6 0c-9.7 0-18.8 5-23.9 13.1l-22.7 36L38.8 5.1zm73.4 218.1c4 .5 8.1 .8 12.1 .8c11 0 21.4-2 31-5.6L48.9 134.5c-6.1 40.6 19.5 82.8 63.3 88.7zM160 384l0-133.4c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3L96 384l0 64c0 35.3 28.7 64 64 64l320 0c12.9 0 24.8-3.8 34.9-10.3L365.5 384 160 384z\"]\n};\nconst faRoadCircleXmark = {\n  prefix: 'fas',\n  iconName: 'road-circle-xmark',\n  icon: [640, 512, [], \"e566\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"]\n};\nconst faUserMinus = {\n  prefix: 'fas',\n  iconName: 'user-minus',\n  icon: [640, 512, [], \"f503\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM472 200l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faMarsStrokeUp = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-up',\n  icon: [320, 512, [9896, \"mars-stroke-v\"], \"f22a\", \"M148.7 4.7c6.2-6.2 16.4-6.2 22.6 0l64 64c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9l-40 0 0 24 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 24c0 .6 0 1.2-.1 1.8c77 11.6 136.1 78 136.1 158.2c0 88.4-71.6 160-160 160S0 440.4 0 352c0-80.2 59.1-146.7 136.1-158.2c0-.6-.1-1.2-.1-1.8l0-24-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-24L96 96c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l64-64zM256 352A96 96 0 1 0 64 352a96 96 0 1 0 192 0z\"]\n};\nconst faMarsStrokeV = faMarsStrokeUp;\nconst faChampagneGlasses = {\n  prefix: 'fas',\n  iconName: 'champagne-glasses',\n  icon: [640, 512, [129346, \"glass-cheers\"], \"f79f\", \"M155.6 17.3C163 3 179.9-3.6 195 1.9L320 47.5l125-45.6c15.1-5.5 32 1.1 39.4 15.4l78.8 152.9c28.8 55.8 10.3 122.3-38.5 156.6L556.1 413l41-15c16.6-6 35 2.5 41 19.1s-2.5 35-19.1 41l-71.1 25.9L476.8 510c-16.6 6.1-35-2.5-41-19.1s2.5-35 19.1-41l41-15-31.3-86.2c-59.4 5.2-116.2-34-130-95.2L320 188.8l-14.6 64.7c-13.8 61.3-70.6 100.4-130 95.2l-31.3 86.2 41 15c16.6 6 25.2 24.4 19.1 41s-24.4 25.2-41 19.1L92.2 484.1 21.1 458.2c-16.6-6.1-25.2-24.4-19.1-41s24.4-25.2 41-19.1l41 15 31.3-86.2C66.5 292.5 48.1 226 76.9 170.2L155.6 17.3zm44 54.4l-27.2 52.8L261.6 157l13.1-57.9L199.6 71.7zm240.9 0L365.4 99.1 378.5 157l89.2-32.5L440.5 71.7z\"]\n};\nconst faGlassCheers = faChampagneGlasses;\nconst faClipboard = {\n  prefix: 'fas',\n  iconName: 'clipboard',\n  icon: [384, 512, [128203], \"f328\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM112 192l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faHouseCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'house-circle-exclamation',\n  icon: [640, 512, [], \"e50a\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faFileArrowUp = {\n  prefix: 'fas',\n  iconName: 'file-arrow-up',\n  icon: [384, 512, [\"file-upload\"], \"f574\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM216 408c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-102.1-31 31c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l72-72c9.4-9.4 24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-31-31L216 408z\"]\n};\nconst faFileUpload = faFileArrowUp;\nconst faWifi = {\n  prefix: 'fas',\n  iconName: 'wifi',\n  icon: [640, 512, [\"wifi-3\", \"wifi-strong\"], \"f1eb\", \"M54.2 202.9C123.2 136.7 216.8 96 320 96s196.8 40.7 265.8 106.9c12.8 12.2 33 11.8 45.2-.9s11.8-33-.9-45.2C549.7 79.5 440.4 32 320 32S90.3 79.5 9.8 156.7C-2.9 169-3.3 189.2 8.9 202s32.5 13.2 45.2 .9zM320 256c56.8 0 108.6 21.1 148.2 56c13.3 11.7 33.5 10.4 45.2-2.8s10.4-33.5-2.8-45.2C459.8 219.2 393 192 320 192s-139.8 27.2-190.5 72c-13.3 11.7-14.5 31.9-2.8 45.2s31.9 14.5 45.2 2.8c39.5-34.9 91.3-56 148.2-56zm64 160a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faWifi3 = faWifi;\nconst faWifiStrong = faWifi;\nconst faBath = {\n  prefix: 'fas',\n  iconName: 'bath',\n  icon: [512, 512, [128705, \"bathtub\"], \"f2cd\", \"M96 77.3c0-7.3 5.9-13.3 13.3-13.3c3.5 0 6.9 1.4 9.4 3.9l14.9 14.9C130 91.8 128 101.7 128 112c0 19.9 7.2 38 19.2 52c-5.3 9.2-4 21.1 3.8 29c9.4 9.4 24.6 9.4 33.9 0L289 89c9.4-9.4 9.4-24.6 0-33.9c-7.9-7.9-19.8-9.1-29-3.8C246 39.2 227.9 32 208 32c-10.3 0-20.2 2-29.2 5.5L163.9 22.6C149.4 8.1 129.7 0 109.3 0C66.6 0 32 34.6 32 77.3L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 256 96 77.3zM32 352l0 16c0 28.4 12.4 54 32 71.6L64 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-16 256 0 0 16c0 17.7 14.3 32 32 32s32-14.3 32-32l0-40.4c19.6-17.6 32-43.1 32-71.6l0-16L32 352z\"]\n};\nconst faBathtub = faBath;\nconst faUnderline = {\n  prefix: 'fas',\n  iconName: 'underline',\n  icon: [448, 512, [], \"f0cd\", \"M16 64c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 128c0 53 43 96 96 96s96-43 96-96l0-128-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 128c0 88.4-71.6 160-160 160s-160-71.6-160-160L64 96 48 96C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32z\"]\n};\nconst faUserPen = {\n  prefix: 'fas',\n  iconName: 'user-pen',\n  icon: [640, 512, [\"user-edit\"], \"f4ff\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l293.1 0c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7l40.3-40.3c-32.1-31-75.7-50.1-123.9-50.1l-91.4 0zm435.5-68.3c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM375.9 417c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L576.1 358.7l-71-71L375.9 417z\"]\n};\nconst faUserEdit = faUserPen;\nconst faSignature = {\n  prefix: 'fas',\n  iconName: 'signature',\n  icon: [640, 512, [], \"f5b7\", \"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92l0 71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-83.6 0 18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3l0-7.8c0-53-43-96-96-96s-96 43-96 96l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5l0-71.9c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24l40.3 0c-.2-2.8-.3-5.6-.3-8.5L64 368l-40 0zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24l-310.1 0c-6.7 16.3-14.2 32.3-22.3 48L616 416z\"]\n};\nconst faStroopwafel = {\n  prefix: 'fas',\n  iconName: 'stroopwafel',\n  icon: [512, 512, [], \"f551\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM312.6 63.7c-6.2-6.2-16.4-6.2-22.6 0L256 97.6 222.1 63.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l33.9 33.9-45.3 45.3-56.6-56.6c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l56.6 56.6-45.3 45.3L86.3 199.4c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L97.6 256 63.7 289.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l33.9-33.9 45.3 45.3-56.6 56.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56.6-56.6 45.3 45.3-33.9 33.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L256 414.4l33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 45.3-45.3 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 45.3-45.3 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L414.4 256l33.9-33.9c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-33.9 33.9-45.3-45.3 56.6-56.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-56.6 56.6-45.3-45.3 33.9-33.9c6.2-6.2 6.2-16.4 0-22.6zM142.9 256l45.3-45.3L233.4 256l-45.3 45.3L142.9 256zm67.9 67.9L256 278.6l45.3 45.3L256 369.1l-45.3-45.3zM278.6 256l45.3-45.3L369.1 256l-45.3 45.3L278.6 256zm22.6-67.9L256 233.4l-45.3-45.3L256 142.9l45.3 45.3z\"]\n};\nconst faBold = {\n  prefix: 'fas',\n  iconName: 'bold',\n  icon: [384, 512, [], \"f032\", \"M0 64C0 46.3 14.3 32 32 32l48 0 16 0 128 0c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128L96 480l-16 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-160L48 96 32 96C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64L112 96l0 128 112 0zM112 288l0 128 144 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0-112 0z\"]\n};\nconst faAnchorLock = {\n  prefix: 'fas',\n  iconName: 'anchor-lock',\n  icon: [640, 512, [], \"e4ad\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8 0 15.9-.6 23.6-1.7c-4.8-9-7.6-19.3-7.6-30.3l0-33.3c-5.2 .9-10.5 1.3-16 1.3l-48 0 0-208 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM528 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faBuildingNgo = {\n  prefix: 'fas',\n  iconName: 'building-ngo',\n  icon: [384, 512, [], \"e4d7\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM168 64l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 64 16 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 24c0 13.3-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24l0-88c0-8.8 7.2-16 16-16zM304 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32c0-8.8-7.2-16-16-16zm-48 16c0-26.5 21.5-48 48-48s48 21.5 48 48l0 32c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-32zM61.3 71.1l34.7 52L96 80c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4L64 132.8 64 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4z\"]\n};\nconst faManatSign = {\n  prefix: 'fas',\n  iconName: 'manat-sign',\n  icon: [384, 512, [], \"e1d5\", \"M192 32c-17.7 0-32 14.3-32 32l0 34.7C69.2 113.9 0 192.9 0 288L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-59.6 40.8-109.8 96-124l0 284c0 17.7 14.3 32 32 32s32-14.3 32-32l0-284c55.2 14.2 96 64.3 96 124l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-95.1-69.2-174.1-160-189.3L224 64c0-17.7-14.3-32-32-32z\"]\n};\nconst faNotEqual = {\n  prefix: 'fas',\n  iconName: 'not-equal',\n  icon: [448, 512, [], \"f53e\", \"M369.8 37.4c14.7 9.8 18.7 29.7 8.9 44.4L337.1 144l62.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-105.5 0-64 96L400 304c17.7 0 32 14.3 32 32s-14.3 32-32 32l-212.2 0-65.2 97.7c-9.8 14.7-29.7 18.7-44.4 8.9s-18.7-29.7-8.9-44.4L110.9 368 48 368c-17.7 0-32-14.3-32-32s14.3-32 32-32l105.5 0 64-96L48 208c-17.7 0-32-14.3-32-32s14.3-32 32-32l212.2 0 65.2-97.7c9.8-14.7 29.7-18.7 44.4-8.9z\"]\n};\nconst faBorderTopLeft = {\n  prefix: 'fas',\n  iconName: 'border-top-left',\n  icon: [448, 512, [\"border-style\"], \"f853\", \"M0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-336c0-8.8 7.2-16 16-16l336 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32C35.8 32 0 67.8 0 112L0 448zm160 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-96 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm0 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faBorderStyle = faBorderTopLeft;\nconst faMapLocationDot = {\n  prefix: 'fas',\n  iconName: 'map-location-dot',\n  icon: [576, 512, [\"map-marked-alt\"], \"f5a0\", \"M408 120c0 54.6-73.1 151.9-105.2 192c-7.7 9.6-22 9.6-29.6 0C241.1 271.9 168 174.6 168 120C168 53.7 221.7 0 288 0s120 53.7 120 120zm8 80.4c3.5-6.9 6.7-13.8 9.6-20.6c.5-1.2 1-2.5 1.5-3.7l116-46.4C558.9 123.4 576 135 576 152l0 270.8c0 9.8-6 18.6-15.1 22.3L416 503l0-302.6zM137.6 138.3c2.4 14.1 7.2 28.3 12.8 41.5c2.9 6.8 6.1 13.7 9.6 20.6l0 251.4L32.9 502.7C17.1 509 0 497.4 0 480.4L0 209.6c0-9.8 6-18.6 15.1-22.3l122.6-49zM327.8 332c13.9-17.4 35.7-45.7 56.2-77l0 249.3L192 449.4 192 255c20.5 31.3 42.3 59.6 56.2 77c20.5 25.6 59.1 25.6 79.6 0zM288 152a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faMapMarkedAlt = faMapLocationDot;\nconst faJedi = {\n  prefix: 'fas',\n  iconName: 'jedi',\n  icon: [576, 512, [], \"f669\", \"M246 315.7l-21.2-31.9c-2.1-3.2-1.7-7.4 1-10.1s6.9-3.1 10.1-1l29.5 19.7c2.1 1.4 4.9 0 5-2.6L279.7 8c.1-4.5 3.8-8 8.3-8s8.1 3.5 8.3 8l9.4 281.9c.1 2.5 2.9 3.9 5 2.6l29.5-19.7c3.2-2.1 7.4-1.7 10.1 1s3.1 6.9 1 10.1L330 315.7c-1.3 1.9-.2 4.5 2 4.9l37.6 7.5c3.7 .7 6.4 4 6.4 7.8s-2.7 7.1-6.4 7.8L332 351.4c-2.2 .4-3.3 3-2 4.9l21.2 31.9c2.1 3.2 1.7 7.4-1 10.1s-6.9 3.1-10.1 1l-26.3-17.6c-2.2-1.4-5.1 .2-5 2.8l2.1 61.5C370.6 435.2 416 382.9 416 320c0-37-15.7-70.4-40.8-93.7c-7-6.5-6.5-18.6 1-24.4C410.1 175.5 432 134.3 432 88c0-16.8-2.9-33-8.2-48c-4.6-13 10.2-30 21.4-22c53.5 38 92.7 94.8 107.8 160.7c.5 2.1-.2 4.3-1.7 5.9l-28.4 28.4c-4 4-1.2 10.9 4.5 10.9l26 0c3.4 0 6.2 2.6 6.3 6c.1 3.3 .2 6.6 .2 10c0 17.5-1.7 34.7-4.8 51.3c-.2 1.2-.9 2.4-1.7 3.3l-46.5 46.5c-4 4-1.2 10.9 4.5 10.9l14.6 0c4.6 0 7.7 4.8 5.7 9C487.2 450.5 394.8 512 288 512S88.8 450.5 44.3 361c-2.1-4.2 1-9 5.7-9l14.6 0c5.7 0 8.6-6.9 4.5-10.9L22.6 294.6c-.9-.9-1.5-2-1.7-3.3C17.7 274.7 16 257.5 16 240c0-3.3 .1-6.7 .2-10c.1-3.4 2.9-6 6.3-6l26 0c5.7 0 8.6-6.9 4.5-10.9L24.6 184.6c-1.5-1.5-2.2-3.8-1.7-5.9C38.1 112.8 77.3 56 130.8 18c11.3-8 26 8.9 21.4 22c-5.3 15-8.2 31.2-8.2 48c0 46.3 21.9 87.5 55.8 113.9c7.5 5.8 8 17.9 1 24.4C175.7 249.6 160 283 160 320c0 62.9 45.4 115.2 105.1 126l2.1-61.5c.1-2.6-2.8-4.2-5-2.8l-26.3 17.6c-3.2 2.1-7.4 1.7-10.1-1s-3.1-6.9-1-10.1L246 356.3c1.3-1.9 .2-4.5-2-4.9l-37.6-7.5c-3.7-.7-6.4-4-6.4-7.8s2.7-7.1 6.4-7.8l37.6-7.5c2.2-.4 3.3-3 2-4.9z\"]\n};\nconst faSquarePollVertical = {\n  prefix: 'fas',\n  iconName: 'square-poll-vertical',\n  icon: [448, 512, [\"poll\"], \"f681\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 192c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zm64-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192zM320 288c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32z\"]\n};\nconst faPoll = faSquarePollVertical;\nconst faMugHot = {\n  prefix: 'fas',\n  iconName: 'mug-hot',\n  icon: [512, 512, [9749], \"f7b6\", \"M88 0C74.7 0 64 10.7 64 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C120.5 112.3 128 119.9 128 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C119.5 47.7 112 40.1 112 24c0-13.3-10.7-24-24-24zM32 192c-17.7 0-32 14.3-32 32L0 416c0 53 43 96 96 96l192 0c53 0 96-43 96-96l16 0c61.9 0 112-50.1 112-112s-50.1-112-112-112l-48 0L32 192zm352 64l16 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0 0-96zM224 24c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C232.5 112.3 240 119.9 240 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C231.5 47.7 224 40.1 224 24z\"]\n};\nconst faCarBattery = {\n  prefix: 'fas',\n  iconName: 'car-battery',\n  icon: [512, 512, [\"battery-car\"], \"f5df\", \"M80 96c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l96 0c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l16 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64l16 0zm304 96c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 32-32 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0 0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32 32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0-32zM80 240c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faBatteryCar = faCarBattery;\nconst faGift = {\n  prefix: 'fas',\n  iconName: 'gift',\n  icon: [512, 512, [127873], \"f06b\", \"M190.5 68.8L225.3 128l-1.3 0-72 0c-22.1 0-40-17.9-40-40s17.9-40 40-40l2.2 0c14.9 0 28.8 7.9 36.3 20.8zM64 88c0 14.4 3.5 28 9.6 40L32 128c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l448 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-41.6 0c6.1-12 9.6-25.6 9.6-40c0-48.6-39.4-88-88-88l-2.2 0c-31.9 0-61.5 16.9-77.7 44.4L256 85.5l-24.1-41C215.7 16.9 186.1 0 154.2 0L152 0C103.4 0 64 39.4 64 88zm336 0c0 22.1-17.9 40-40 40l-72 0-1.3 0 34.8-59.2C329.1 55.9 342.9 48 357.8 48l2.2 0c22.1 0 40 17.9 40 40zM32 288l0 176c0 26.5 21.5 48 48 48l144 0 0-224L32 288zM288 512l144 0c26.5 0 48-21.5 48-48l0-176-192 0 0 224z\"]\n};\nconst faDiceTwo = {\n  prefix: 'fas',\n  iconName: 'dice-two',\n  icon: [448, 512, [9857], \"f528\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM352 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faChessQueen = {\n  prefix: 'fas',\n  iconName: 'chess-queen',\n  icon: [512, 512, [9819], \"f445\", \"M256 0a56 56 0 1 1 0 112A56 56 0 1 1 256 0zM134.1 143.8c3.3-13 15-23.8 30.2-23.8c12.3 0 22.6 7.2 27.7 17c12 23.2 36.2 39 64 39s52-15.8 64-39c5.1-9.8 15.4-17 27.7-17c15.3 0 27 10.8 30.2 23.8c7 27.8 32.2 48.3 62.1 48.3c10.8 0 21-2.7 29.8-7.4c8.4-4.4 18.9-4.5 27.6 .9c13 8 17.1 25 9.2 38L399.7 400 384 400l-40.4 0-175.1 0L128 400l-15.7 0L5.4 223.6c-7.9-13-3.8-30 9.2-38c8.7-5.3 19.2-5.3 27.6-.9c8.9 4.7 19 7.4 29.8 7.4c29.9 0 55.1-20.5 62.1-48.3zM256 224s0 0 0 0s0 0 0 0s0 0 0 0zM112 432l288 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L86.6 512C74.1 512 64 501.9 64 489.4c0-6 2.4-11.8 6.6-16L112 432z\"]\n};\nconst faGlasses = {\n  prefix: 'fas',\n  iconName: 'glasses',\n  icon: [576, 512, [], \"f530\", \"M118.6 80c-11.5 0-21.4 7.9-24 19.1L57 260.3c20.5-6.2 48.3-12.3 78.7-12.3c32.3 0 61.8 6.9 82.8 13.5c10.6 3.3 19.3 6.7 25.4 9.2c3.1 1.3 5.5 2.4 7.3 3.2c.9 .4 1.6 .7 2.1 1l.6 .3 .2 .1c0 0 .1 0 .1 0c0 0 0 0 0 0s0 0 0 0L247.9 288s0 0 0 0l6.3-12.7c5.8 2.9 10.4 7.3 13.5 12.7l40.6 0c3.1-5.3 7.7-9.8 13.5-12.7l6.3 12.7s0 0 0 0c-6.3-12.7-6.3-12.7-6.3-12.7s0 0 0 0s0 0 0 0c0 0 .1 0 .1 0l.2-.1 .6-.3c.5-.2 1.2-.6 2.1-1c1.8-.8 4.2-1.9 7.3-3.2c6.1-2.6 14.8-5.9 25.4-9.2c21-6.6 50.4-13.5 82.8-13.5c30.4 0 58.2 6.1 78.7 12.3L481.4 99.1c-2.6-11.2-12.6-19.1-24-19.1c-3.1 0-6.2 .6-9.2 1.8L416.9 94.3c-12.3 4.9-26.3-1.1-31.2-13.4s1.1-26.3 13.4-31.2l31.3-12.5c8.6-3.4 17.7-5.2 27-5.2c33.8 0 63.1 23.3 70.8 56.2l43.9 188c1.7 7.3 2.9 14.7 3.5 22.1c.3 1.9 .5 3.8 .5 5.7l0 6.7 0 41.3 0 16c0 61.9-50.1 112-112 112l-44.3 0c-59.4 0-108.5-46.4-111.8-105.8L306.6 352l-37.2 0-1.2 22.2C264.9 433.6 215.8 480 156.3 480L112 480C50.1 480 0 429.9 0 368l0-16 0-41.3L0 304c0-1.9 .2-3.8 .5-5.7c.6-7.4 1.8-14.8 3.5-22.1l43.9-188C55.5 55.3 84.8 32 118.6 32c9.2 0 18.4 1.8 27 5.2l31.3 12.5c12.3 4.9 18.3 18.9 13.4 31.2s-18.9 18.3-31.2 13.4L127.8 81.8c-2.9-1.2-6-1.8-9.2-1.8zM64 325.4L64 368c0 26.5 21.5 48 48 48l44.3 0c25.5 0 46.5-19.9 47.9-45.3l2.5-45.6c-2.3-.8-4.9-1.7-7.5-2.5c-17.2-5.4-39.9-10.5-63.6-10.5c-23.7 0-46.2 5.1-63.2 10.5c-3.1 1-5.9 1.9-8.5 2.9zM512 368l0-42.6c-2.6-.9-5.5-1.9-8.5-2.9c-17-5.4-39.5-10.5-63.2-10.5c-23.7 0-46.4 5.1-63.6 10.5c-2.7 .8-5.2 1.7-7.5 2.5l2.5 45.6c1.4 25.4 22.5 45.3 47.9 45.3l44.3 0c26.5 0 48-21.5 48-48z\"]\n};\nconst faChessBoard = {\n  prefix: 'fas',\n  iconName: 'chess-board',\n  icon: [448, 512, [], \"f43c\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 64l0 64 64 0 0-64 64 0 0 64 64 0 0-64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64 64 0 0-64-64 0 0-64 64 0 0-64-64 0 0-64 64 0zm64 128l64 0 0-64-64 0 0 64zm0 64l0-64-64 0 0 64 64 0zm64 0l-64 0 0 64 64 0 0-64zm0 0l64 0 0-64-64 0 0 64z\"]\n};\nconst faBuildingCircleCheck = {\n  prefix: 'fas',\n  iconName: 'building-circle-check',\n  icon: [640, 512, [], \"e4d2\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faPersonChalkboard = {\n  prefix: 'fas',\n  iconName: 'person-chalkboard',\n  icon: [640, 512, [], \"e53d\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-288 56 0 64 0 16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-64 192 0 0 192-192 0 0-32-64 0 0 48c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48L368 0c-26.5 0-48 21.5-48 48l0 80-76.9 0-65.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 480c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nconst faMarsStrokeRight = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-right',\n  icon: [640, 512, [9897, \"mars-stroke-h\"], \"f22b\", \"M208 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm174.4-88C370.7 365.8 297.1 432 208 432c-97.2 0-176-78.8-176-176s78.8-176 176-176c89.1 0 162.7 66.2 174.4 152l33.6 0 0-56c0-13.3 10.7-24 24-24s24 10.7 24 24l0 56 32 0 0-56c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-56-32 0 0 56c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56-33.6 0z\"]\n};\nconst faMarsStrokeH = faMarsStrokeRight;\nconst faHandBackFist = {\n  prefix: 'fas',\n  iconName: 'hand-back-fist',\n  icon: [448, 512, [\"hand-rock\"], \"f255\", \"M144 0C117.5 0 96 21.5 96 48l0 48 0 28.5L96 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-26.7-9 7.5C40.4 169 32 187 32 206L32 244c0 38 16.9 74 46.1 98.3L128 384l0 96c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-105.3c46.9-19 80-65 80-118.7l0-80 0-16 0-16c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 83.5 329.3 64 304 64c-12.4 0-23.6 4.7-32.1 12.3C270 51.5 249.3 32 224 32c-12.4 0-23.6 4.7-32.1 12.3C190 19.5 169.3 0 144 0z\"]\n};\nconst faHandRock = faHandBackFist;\nconst faSquareCaretUp = {\n  prefix: 'fas',\n  iconName: 'square-caret-up',\n  icon: [448, 512, [\"caret-square-up\"], \"f151\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"]\n};\nconst faCaretSquareUp = faSquareCaretUp;\nconst faCloudShowersWater = {\n  prefix: 'fas',\n  iconName: 'cloud-showers-water',\n  icon: [576, 512, [], \"e4e4\", \"M224 0c38.6 0 71.9 22.8 87.2 55.7C325.7 41.1 345.8 32 368 32c38.7 0 71 27.5 78.4 64l1.6 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64s28.7-64 64-64c0-53 43-96 96-96zM140.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm327.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM252.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm103.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faChartBar = {\n  prefix: 'fas',\n  iconName: 'chart-bar',\n  icon: [512, 512, [\"bar-chart\"], \"f080\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faBarChart = faChartBar;\nconst faHandsBubbles = {\n  prefix: 'fas',\n  iconName: 'hands-bubbles',\n  icon: [576, 512, [\"hands-wash\"], \"e05e\", \"M416 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM160 464a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM32 160l.1 72.6c.1 52.2 24 101 64 133.1c-.1-1.9-.1-3.8-.1-5.7l0-8c0-71.8 37-138.6 97.9-176.7l60.2-37.6c8.6-5.4 17.9-8.4 27.3-9.4l45.9-79.5c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8l-78 135.1c-3.3 5.7-10.7 7.7-16.4 4.4s-7.7-10.7-4.4-16.4l62-107.4c6.6-11.5 2.7-26.2-8.8-32.8S214 5 207.4 16.5l-68 117.8s0 0 0 0s0 0 0 0l-43.3 75L96 160c0-17.7-14.4-32-32-32s-32 14.4-32 32zM332.1 88.5L307.5 131c13.9 4.5 26.4 13.7 34.7 27c.9 1.5 1.8 2.9 2.5 4.4l28.9-50c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zm46.4 63.7l-26.8 46.4c-.6 6-2.1 11.8-4.3 17.4l4.7 0 13.3 0s0 0 0 0l31.8 0 23-39.8c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zM315.1 175c-9.4-15-29.1-19.5-44.1-10.2l-60.2 37.6C159.3 234.7 128 291.2 128 352l0 8c0 8.9 .8 17.6 2.2 26.1c35.4 8.2 61.8 40 61.8 77.9c0 6.3-.7 12.5-2.1 18.4C215.1 501 246.3 512 280 512l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-92 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-124 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l156 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-156 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-136 0s0 0 0 0s0 0 0 0l-93.2 0L305 219.1c15-9.4 19.5-29.1 10.2-44.1z\"]\n};\nconst faHandsWash = faHandsBubbles;\nconst faLessThanEqual = {\n  prefix: 'fas',\n  iconName: 'less-than-equal',\n  icon: [448, 512, [], \"f537\", \"M395.9 93.7c16.4-6.6 24.4-25.2 17.8-41.6s-25.2-24.4-41.6-17.8l-320 128C40 167.1 32 178.9 32 192s8 24.9 20.1 29.7l320 128c16.4 6.6 35-1.4 41.6-17.8s-1.4-35-17.8-41.6L150.2 192 395.9 93.7zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"]\n};\nconst faTrain = {\n  prefix: 'fas',\n  iconName: 'train',\n  icon: [448, 512, [128646], \"f238\", \"M96 0C43 0 0 43 0 96L0 352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512l39.7 0c8.5 0 16.6-3.4 22.6-9.4L160 448l128 0 54.6 54.6c6 6 14.1 9.4 22.6 9.4l39.7 0c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9l0-256c0-53-43-96-96-96L96 0zM64 96c0-17.7 14.3-32 32-32l256 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L96 224c-17.7 0-32-14.3-32-32l0-96zM224 288a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faEyeLowVision = {\n  prefix: 'fas',\n  iconName: 'eye-low-vision',\n  icon: [640, 512, [\"low-vision\"], \"f2a8\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223 149.5c48.6-44.3 123-50.8 179.3-11.7c60.8 42.4 78.9 123.2 44.2 186.9L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3L223 149.5zm223.1 298L83.1 161.5c-11 14.4-20.5 28.7-28.4 42.2l339 265.7c18.7-5.5 36.2-13 52.6-21.8zM34.5 268.3c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c3.1 0 6.1-.1 9.2-.2L33.1 247.8c-1.8 6.8-1.3 14 1.4 20.5z\"]\n};\nconst faLowVision = faEyeLowVision;\nconst faCrow = {\n  prefix: 'fas',\n  iconName: 'crow',\n  icon: [640, 512, [], \"f520\", \"M456 0c-48.6 0-88 39.4-88 88l0 29.2L12.5 390.6c-14 10.8-16.6 30.9-5.9 44.9s30.9 16.6 44.9 5.9L126.1 384l133.1 0 46.6 113.1c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3L311.1 384l40.9 0c1.1 0 2.1 0 3.2 0l46.6 113.2c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3l-42-102C484.9 354.1 544 280 544 192l0-64 0-8 80.5-20.1c8.6-2.1 13.8-10.8 11.6-19.4C629 52 603.4 32 574 32l-50.1 0C507.7 12.5 483.3 0 456 0zm0 64a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faSailboat = {\n  prefix: 'fas',\n  iconName: 'sailboat',\n  icon: [576, 512, [], \"e445\", \"M256 16c0-7 4.5-13.2 11.2-15.3s13.9 .4 17.9 6.1l224 320c3.4 4.9 3.8 11.3 1.1 16.6s-8.2 8.6-14.2 8.6l-224 0c-8.8 0-16-7.2-16-16l0-320zM212.1 96.5c7 1.9 11.9 8.2 11.9 15.5l0 224c0 8.8-7.2 16-16 16L80 352c-5.7 0-11-3-13.8-8s-2.9-11-.1-16l128-224c3.6-6.3 11-9.4 18-7.5zM5.7 404.3C2.8 394.1 10.5 384 21.1 384l533.8 0c10.6 0 18.3 10.1 15.4 20.3l-4 14.3C550.7 473.9 500.4 512 443 512L133 512C75.6 512 25.3 473.9 9.7 418.7l-4-14.3z\"]\n};\nconst faWindowRestore = {\n  prefix: 'fas',\n  iconName: 'window-restore',\n  icon: [512, 512, [], \"f2d2\", \"M432 64L208 64c-8.8 0-16 7.2-16 16l0 16-64 0 0-16c0-44.2 35.8-80 80-80L432 0c44.2 0 80 35.8 80 80l0 224c0 44.2-35.8 80-80 80l-16 0 0-64 16 0c8.8 0 16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zM0 192c0-35.3 28.7-64 64-64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192zm64 32c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 192c-17.7 0-32 14.3-32 32z\"]\n};\nconst faSquarePlus = {\n  prefix: 'fas',\n  iconName: 'square-plus',\n  icon: [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM200 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nconst faPlusSquare = faSquarePlus;\nconst faToriiGate = {\n  prefix: 'fas',\n  iconName: 'torii-gate',\n  icon: [512, 512, [9961], \"f6a1\", \"M0 80c0 26.5 21.5 48 48 48l16 0 0 64 64 0 0-64 96 0 0 64 64 0 0-64 96 0 0 64 64 0 0-64 16 0c26.5 0 48-21.5 48-48l0-66.6C512 6 506 0 498.6 0c-1.7 0-3.4 .3-5 1l-49 19.6C425.7 28.1 405.5 32 385.2 32L126.8 32c-20.4 0-40.5-3.9-59.4-11.4L18.4 1c-1.6-.6-3.3-1-5-1C6 0 0 6 0 13.4L0 80zM64 288l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0 0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0z\"]\n};\nconst faFrog = {\n  prefix: 'fas',\n  iconName: 'frog',\n  icon: [576, 512, [], \"f52e\", \"M368 32c41.7 0 75.9 31.8 79.7 72.5l85.6 26.3c25.4 7.8 42.8 31.3 42.8 57.9c0 21.8-11.7 41.9-30.7 52.7L400.8 323.5 493.3 416l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-8.5 0-16.6-3.4-22.6-9.4L346.9 360.2c11.7-36 3.2-77.1-25.4-105.7c-40.6-40.6-106.3-40.6-146.9-.1L101 324.4c-6.4 6.1-6.7 16.2-.6 22.6s16.2 6.6 22.6 .6l73.8-70.2 .1-.1 .1-.1c3.5-3.5 7.3-6.6 11.3-9.2c27.9-18.5 65.9-15.4 90.5 9.2c24.7 24.7 27.7 62.9 9 90.9c-2.6 3.8-5.6 7.5-9 10.9L261.8 416l90.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-35.3 0-64-28.7-64-64C0 249.6 127 112.9 289.3 97.5C296.2 60.2 328.8 32 368 32zm0 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faBucket = {\n  prefix: 'fas',\n  iconName: 'bucket',\n  icon: [448, 512, [], \"e4cf\", \"M96 152l0 8-48 0 0-8C48 68.1 116.1 0 200 0l48 0c83.9 0 152 68.1 152 152l0 8-48 0 0-8c0-57.4-46.6-104-104-104l-48 0C142.6 48 96 94.6 96 152zM0 224c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-5.1 0L388.5 469c-2.6 24.4-23.2 43-47.7 43l-233.6 0c-24.6 0-45.2-18.5-47.7-43L37.1 256 32 256c-17.7 0-32-14.3-32-32z\"]\n};\nconst faImage = {\n  prefix: 'fas',\n  iconName: 'image',\n  icon: [512, 512, [], \"f03e\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l96 0 32 0 208 0c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faMicrophone = {\n  prefix: 'fas',\n  iconName: 'microphone',\n  icon: [384, 512, [], \"f130\", \"M192 0C139 0 96 43 96 96l0 160c0 53 43 96 96 96s96-43 96-96l0-160c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40z\"]\n};\nconst faCow = {\n  prefix: 'fas',\n  iconName: 'cow',\n  icon: [640, 512, [128004], \"f6c8\", \"M96 224l0 32 0 160c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-88.2c9.9 6.6 20.6 12 32 16.1l0 24.2c0 8.8 7.2 16 16 16s16-7.2 16-16l0-16.9c5.3 .6 10.6 .9 16 .9s10.7-.3 16-.9l0 16.9c0 8.8 7.2 16 16 16s16-7.2 16-16l0-24.2c11.4-4 22.1-9.4 32-16.1l0 88.2c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-160 32 32 0 49.5c0 9.5 2.8 18.7 8.1 26.6L530 427c8.8 13.1 23.5 21 39.3 21c22.5 0 41.9-15.9 46.3-38l20.3-101.6c2.6-13-.3-26.5-8-37.3l-3.9-5.5 0-81.6c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 14.4-52.9-74.1C496 86.5 452.4 64 405.9 64L272 64l-16 0-64 0-48 0C77.7 64 24 117.7 24 184l0 54C9.4 249.8 0 267.8 0 288l0 17.6c0 8 6.4 14.4 14.4 14.4C46.2 320 72 294.2 72 262.4l0-6.4 0-32 0-40c0-24.3 12.1-45.8 30.5-58.9C98.3 135.9 96 147.7 96 160l0 64zM560 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM166.6 166.6c-4.2-4.2-6.6-10-6.6-16c0-12.5 10.1-22.6 22.6-22.6l178.7 0c12.5 0 22.6 10.1 22.6 22.6c0 6-2.4 11.8-6.6 16l-23.4 23.4C332.2 211.8 302.7 224 272 224s-60.2-12.2-81.9-33.9l-23.4-23.4z\"]\n};\nconst faCaretUp = {\n  prefix: 'fas',\n  iconName: 'caret-up',\n  icon: [320, 512, [], \"f0d8\", \"M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"]\n};\nconst faScrewdriver = {\n  prefix: 'fas',\n  iconName: 'screwdriver',\n  icon: [512, 512, [129691], \"f54a\", \"M465 7c-8.5-8.5-22-9.4-31.6-2.1l-104 80c-5.9 4.5-9.4 11.6-9.4 19l0 54.1-85.6 85.6c6.7 4.2 13 9.3 18.8 15.1s10.9 12.2 15.1 18.8L353.9 192l54.1 0c7.5 0 14.5-3.5 19-9.4l80-104c7.4-9.6 6.5-23.1-2.1-31.6L465 7zM121.4 281.4l-112 112c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l112-112c30.2-30.2 30.2-79.1 0-109.3s-79.1-30.2-109.3 0z\"]\n};\nconst faFolderClosed = {\n  prefix: 'fas',\n  iconName: 'folder-closed',\n  icon: [512, 512, [], \"e185\", \"M448 480L64 480c-35.3 0-64-28.7-64-64L0 192l512 0 0 224c0 35.3-28.7 64-64 64zm64-320L0 160 0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64z\"]\n};\nconst faHouseTsunami = {\n  prefix: 'fas',\n  iconName: 'house-tsunami',\n  icon: [576, 512, [], \"e515\", \"M80.8 136.5C104.9 93.8 152.6 64 209 64c16.9 0 33.1 2.7 48.2 7.7c16.8 5.5 34.9-3.6 40.4-20.4s-3.6-34.9-20.4-40.4C255.8 3.8 232.8 0 209 0C95.2 0 0 88 0 200c0 91.6 53.5 172.1 142.2 194.1c13.4 3.8 27.5 5.9 42.2 5.9c.7 0 1.4 0 2.1-.1c1.8 0 3.7 .1 5.5 .1c0 0 0 0 0 0c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0c-22.4 15.5-49.9 26.1-77.4 26.1c0 0-.1 0-.1 0c-12.4 0-24-1.5-34.9-4.3C121.6 320.2 96 287 96 248c0-48.5 39.5-88 88.4-88c13.5 0 26.1 3 37.5 8.3c16 7.5 35.1 .6 42.5-15.5s.6-35.1-15.5-42.5C229.3 101.1 207.4 96 184.4 96c-40 0-76.4 15.4-103.6 40.5zm252-18.1c-8.1 6-12.8 15.5-12.8 25.6l0 121c1.6 1 3.3 2 4.8 3.1c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c5.8 1.4 11.2 3.4 16.2 6.2c.7-2.7 1.1-5.5 1.1-8.4l-.4-144c0-10-4.7-19.4-12.7-25.5l-95.5-72c-11.4-8.6-27.1-8.6-38.5 0l-96 72zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448z\"]\n};\nconst faSquareNfi = {\n  prefix: 'fas',\n  iconName: 'square-nfi',\n  icon: [448, 512, [], \"e576\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm75.7 64.6C68.8 162.5 64 168.8 64 176l0 160c0 8.8 7.2 16 16 16s16-7.2 16-16l0-102.2 66.3 110.5c3.7 6.2 11.1 9.1 18 7.2s11.7-8.2 11.7-15.4l0-160c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 102.2L93.7 167.8c-3.7-6.2-11.1-9.1-18-7.2zM224 176l0 64 0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-32 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zm160 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 160c0 8.8 7.2 16 16 16s16-7.2 16-16l0-160z\"]\n};\nconst faArrowUpFromGroundWater = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-ground-water',\n  icon: [576, 512, [], \"e4b5\", \"M288 352c17.7 0 32-14.3 32-32l0-210.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3 256 320c0 17.7 14.3 32 32 32zm-18.5 69.9C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM192 192L48 192c-26.5 0-48 21.5-48 48L0 425c5.3-3.1 11.2-5.4 17.5-6.9c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.1 20.3L192 192zm384 48c0-26.5-21.5-48-48-48l-144 0 0 224.5s0 0 0 0c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c6.3 1.5 12.1 3.8 17.5 6.9l0-185z\"]\n};\nconst faMartiniGlass = {\n  prefix: 'fas',\n  iconName: 'martini-glass',\n  icon: [512, 512, [127864, \"glass-martini-alt\"], \"f57b\", \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3 224 448l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-178.7L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0L32 0zM173.3 128l-64-64 293.5 0-64 64-165.5 0z\"]\n};\nconst faGlassMartiniAlt = faMartiniGlass;\nconst faSquareBinary = {\n  prefix: 'fas',\n  iconName: 'square-binary',\n  icon: [448, 512, [], \"e69b\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm144 4c-24.3 0-44 19.7-44 44l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0zm-4 44c0-2.2 1.8-4 4-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48zm140-44c-11 0-20 9-20 20c0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0zM132 296c0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20zm96 24l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0c-24.3 0-44 19.7-44 44zm44-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48c0-2.2 1.8-4 4-4z\"]\n};\nconst faRotateLeft = {\n  prefix: 'fas',\n  iconName: 'rotate-left',\n  icon: [512, 512, [\"rotate-back\", \"rotate-backward\", \"undo-alt\"], \"f2ea\", \"M48.5 224L40 224c-13.3 0-24-10.7-24-24L16 72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8L48.5 224z\"]\n};\nconst faRotateBack = faRotateLeft;\nconst faRotateBackward = faRotateLeft;\nconst faUndoAlt = faRotateLeft;\nconst faTableColumns = {\n  prefix: 'fas',\n  iconName: 'table-columns',\n  icon: [512, 512, [\"columns\"], \"f0db\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 64l0 256 160 0 0-256L64 160zm384 0l-160 0 0 256 160 0 0-256z\"]\n};\nconst faColumns = faTableColumns;\nconst faLemon = {\n  prefix: 'fas',\n  iconName: 'lemon',\n  icon: [448, 512, [127819], \"f094\", \"M448 96c0-35.3-28.7-64-64-64c-6.6 0-13 1-19 2.9c-22.5 7-48.1 14.9-71 9c-75.2-19.1-156.4 11-213.7 68.3S-7.2 250.8 11.9 326c5.8 22.9-2 48.4-9 71C1 403 0 409.4 0 416c0 35.3 28.7 64 64 64c6.6 0 13-1 19.1-2.9c22.5-7 48.1-14.9 71-9c75.2 19.1 156.4-11 213.7-68.3s87.5-138.5 68.3-213.7c-5.8-22.9 2-48.4 9-71c1.9-6 2.9-12.4 2.9-19.1zM212.5 127.4c-54.6 16-101.1 62.5-117.1 117.1C92.9 253 84 257.8 75.5 255.4S62.2 244 64.6 235.5c19.1-65.1 73.7-119.8 138.9-138.9c8.5-2.5 17.4 2.4 19.9 10.9s-2.4 17.4-10.9 19.9z\"]\n};\nconst faHeadSideMask = {\n  prefix: 'fas',\n  iconName: 'head-side-mask',\n  icon: [576, 512, [], \"e063\", \"M32 224.2c0-22.2 3.2-43.6 9.2-63.9L262.2 321c-4 9.5-6.2 20-6.2 31l0 160-128 0c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C48.6 322.4 32 274.1 32 224.2zm248.3 70.4L53 129.3C88.7 53 166.2 0 256 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c5.4 6.7 8.6 14.8 9.4 23.2L336 272c-21.7 0-41.3 8.6-55.7 22.6zM336 304l198 0s0 0 0 0l10 0-19.7 64L368 368c-8.8 0-16 7.2-16 16s7.2 16 16 16l146.5 0-9.8 32L368 432c-8.8 0-16 7.2-16 16s7.2 16 16 16l126.8 0-.9 2.8c-8.3 26.9-33.1 45.2-61.2 45.2L288 512l0-160c0-14 6-26.7 15.6-35.4c0 0 0 0 0 0c8.5-7.8 19.9-12.6 32.4-12.6zm48-80a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faHandshake = {\n  prefix: 'fas',\n  iconName: 'handshake',\n  icon: [640, 512, [], \"f2b5\", \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8 512 128l-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48 0 224 28.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123zM16 128c-8.8 0-16 7.2-16 16L0 352c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-224-80 0zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128l0 224c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-208c0-8.8-7.2-16-16-16l-80 0zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faGem = {\n  prefix: 'fas',\n  iconName: 'gem',\n  icon: [512, 512, [128142], \"f3a5\", \"M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8l240 0c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z\"]\n};\nconst faDolly = {\n  prefix: 'fas',\n  iconName: 'dolly',\n  icon: [576, 512, [\"dolly-box\"], \"f472\", \"M0 32C0 14.3 14.3 0 32 0l72.9 0c27.5 0 52 17.6 60.7 43.8L257.7 320c30.1 .5 56.8 14.9 74 37l202.1-67.4c16.8-5.6 34.9 3.5 40.5 20.2s-3.5 34.9-20.2 40.5L352 417.7c-.9 52.2-43.5 94.3-96 94.3c-53 0-96-43-96-96c0-30.8 14.5-58.2 37-75.8L104.9 64 32 64C14.3 64 0 49.7 0 32zM244.8 134.5c-5.5-16.8 3.7-34.9 20.5-40.3L311 79.4l19.8 60.9 60.9-19.8L371.8 59.6l45.7-14.8c16.8-5.5 34.9 3.7 40.3 20.5l49.4 152.2c5.5 16.8-3.7 34.9-20.5 40.3L334.5 307.2c-16.8 5.5-34.9-3.7-40.3-20.5L244.8 134.5z\"]\n};\nconst faDollyBox = faDolly;\nconst faSmoking = {\n  prefix: 'fas',\n  iconName: 'smoking',\n  icon: [640, 512, [128684], \"f48d\", \"M448 32l0 11c0 38.2 15.2 74.8 42.2 101.8l21 21c21 21 32.8 49.5 32.8 79.2l0 11c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-11c0-12.7-5.1-24.9-14.1-33.9l-21-21C405.9 151.1 384 98.1 384 43l0-11c0-17.7 14.3-32 32-32s32 14.3 32 32zM576 256l0-11c0-38.2-15.2-74.8-42.2-101.8l-21-21c-21-21-32.8-49.5-32.8-79.2l0-11c0-17.7 14.3-32 32-32s32 14.3 32 32l0 11c0 12.7 5.1 24.9 14.1 33.9l21 21c39 39 60.9 91.9 60.9 147.1l0 11c0 17.7-14.3 32-32 32s-32-14.3-32-32zM0 416c0-35.3 28.7-64 64-64l352 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L64 512c-35.3 0-64-28.7-64-64l0-32zm224 0l0 32 160 0 0-32-160 0zm288-64c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32z\"]\n};\nconst faMinimize = {\n  prefix: 'fas',\n  iconName: 'minimize',\n  icon: [512, 512, [\"compress-arrows-alt\"], \"f78c\", \"M456 224l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l40 40L442.3 5.7C446 2 450.9 0 456 0s10 2 13.7 5.7l36.7 36.7C510 46 512 50.9 512 56s-2 10-5.7 13.7L433 143l40 40c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8zm0 64c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-40 40 73.4 73.4c3.6 3.6 5.7 8.5 5.7 13.7s-2 10-5.7 13.7l-36.7 36.7C466 510 461.1 512 456 512s-10-2-13.7-5.7L369 433l-40 40c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-144c0-13.3 10.7-24 24-24l144 0zm-256 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-40-40L69.7 506.3C66 510 61.1 512 56 512s-10-2-13.7-5.7L5.7 469.7C2 466 0 461.1 0 456s2-10 5.7-13.7L79 369 39 329c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8l144 0zM56 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l40-40L5.7 69.7C2 66 0 61.1 0 56s2-10 5.7-13.7L42.3 5.7C46 2 50.9 0 56 0s10 2 13.7 5.7L143 79l40-40c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 144c0 13.3-10.7 24-24 24L56 224z\"]\n};\nconst faCompressArrowsAlt = faMinimize;\nconst faMonument = {\n  prefix: 'fas',\n  iconName: 'monument',\n  icon: [384, 512, [], \"f5a6\", \"M180.7 4.7c6.2-6.2 16.4-6.2 22.6 0l80 80c2.5 2.5 4.1 5.8 4.6 9.3l40.2 322L55.9 416 96.1 94c.4-3.5 2-6.8 4.6-9.3l80-80zM152 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zM32 448l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faSnowplow = {\n  prefix: 'fas',\n  iconName: 'snowplow',\n  icon: [640, 512, [], \"f7d2\", \"M298.9 64l68.6 160L256 224l-64-64 0-96 106.9 0zM445.1 242.7l-87.4-204C347.6 15.3 324.5 0 298.9 0L176 0c-26.5 0-48 21.5-48 48l0 112-32 0c-17.7 0-32 14.3-32 32l0 106.8C26.2 316.8 0 355.3 0 400c0 61.9 50.1 112 112 112l256 0c61.9 0 112-50.1 112-112c0-17.2-3.9-33.5-10.8-48l42.8 0 0 50.7c0 17 6.7 33.3 18.7 45.3l54.6 54.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L576 402.7l0-82.7 0-84.8L633 164c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5l-57 71.2c-9.1 11.3-14 25.4-14 40l0 52.8-64 0 0-31.3c.1-2.4-.2-4.8-.6-7.1s-1.2-4.7-2.2-6.8zM368 352c26.5 0 48 21.5 48 48s-21.5 48-48 48l-256 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l256 0zM144 400a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm216 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-56-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM200 424a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faAnglesRight = {\n  prefix: 'fas',\n  iconName: 'angles-right',\n  icon: [512, 512, [187, \"angle-double-right\"], \"f101\", \"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"]\n};\nconst faAngleDoubleRight = faAnglesRight;\nconst faCannabis = {\n  prefix: 'fas',\n  iconName: 'cannabis',\n  icon: [512, 512, [], \"f55f\", \"M256 0c5.3 0 10.3 2.7 13.3 7.1c15.8 23.5 36.7 63.7 49.2 109c7.2 26.4 11.8 55.2 10.4 84c11.5-8.8 23.7-16.7 35.8-23.6c41-23.3 84.4-36.9 112.2-42.5c5.2-1 10.7 .6 14.4 4.4s5.4 9.2 4.4 14.5c-5.6 27.7-19.3 70.9-42.7 111.7c-9.1 15.9-19.9 31.7-32.4 46.3c27.8 6.6 52.4 17.3 67.2 25.5c5.1 2.8 8.2 8.2 8.2 14s-3.2 11.2-8.2 14c-15.2 8.4-40.9 19.5-69.8 26.1c-20.2 4.6-42.9 7.2-65.2 4.6l8.3 33.1c1.5 6.1-.6 12.4-5.5 16.4s-11.6 4.6-17.2 1.9L280 417.2l0 70.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-70.8-58.5 29.1c-5.6 2.8-12.3 2.1-17.2-1.9s-7-10.3-5.5-16.4l8.3-33.1c-22.2 2.6-45 0-65.2-4.6c-28.9-6.6-54.6-17.6-69.8-26.1c-5.1-2.8-8.2-8.2-8.2-14s3.2-11.2 8.2-14c14.8-8.2 39.4-18.8 67.2-25.5C78.9 296.3 68.1 280.5 59 264.6c-23.4-40.8-37.1-84-42.7-111.7c-1.1-5.2 .6-10.7 4.4-14.5s9.2-5.4 14.4-4.4c27.9 5.5 71.2 19.2 112.2 42.5c12.1 6.9 24.3 14.7 35.8 23.6c-1.4-28.7 3.1-57.6 10.4-84c12.5-45.3 33.4-85.5 49.2-109c3-4.4 8-7.1 13.3-7.1z\"]\n};\nconst faCirclePlay = {\n  prefix: 'fas',\n  iconName: 'circle-play',\n  icon: [512, 512, [61469, \"play-circle\"], \"f144\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9l0 176c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z\"]\n};\nconst faPlayCircle = faCirclePlay;\nconst faTablets = {\n  prefix: 'fas',\n  iconName: 'tablets',\n  icon: [640, 512, [], \"f490\", \"M614.3 247c-5.2 7.9-16.2 8.5-22.9 1.8L391.2 48.6c-6.7-6.7-6.2-17.8 1.8-22.9C418.1 9.4 447.9 0 480 0c88.4 0 160 71.6 160 160c0 32.1-9.4 61.9-25.7 87zM567 294.3c-25 16.3-54.9 25.7-87 25.7c-88.4 0-160-71.6-160-160c0-32.1 9.4-61.9 25.7-87c5.2-7.9 16.2-8.5 22.9-1.8L568.8 271.4c6.7 6.7 6.2 17.8-1.8 22.9zM301.5 368c9.5 0 16.9 8.2 15 17.5C301.1 457.8 236.9 512 160 512S18.9 457.8 3.5 385.5c-2-9.3 5.5-17.5 15-17.5l283.1 0zm0-32L18.5 336c-9.5 0-16.9-8.2-15-17.5C18.9 246.2 83.1 192 160 192s141.1 54.2 156.5 126.5c2 9.3-5.5 17.5-15 17.5z\"]\n};\nconst faEthernet = {\n  prefix: 'fas',\n  iconName: 'ethernet',\n  icon: [512, 512, [], \"f796\", \"M0 224L0 416c0 17.7 14.3 32 32 32l64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32L160 64c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32z\"]\n};\nconst faEuroSign = {\n  prefix: 'fas',\n  iconName: 'euro-sign',\n  icon: [320, 512, [8364, \"eur\", \"euro\"], \"f153\", \"M48.1 240c-.1 2.7-.1 5.3-.1 8l0 16c0 2.7 0 5.3 .1 8L32 272c-17.7 0-32 14.3-32 32s14.3 32 32 32l28.3 0C89.9 419.9 170 480 264 480l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-24 0c-57.9 0-108.2-32.4-133.9-80L256 336c17.7 0 32-14.3 32-32s-14.3-32-32-32l-143.8 0c-.1-2.6-.2-5.3-.2-8l0-16c0-2.7 .1-5.4 .2-8L256 240c17.7 0 32-14.3 32-32s-14.3-32-32-32l-125.9 0c25.7-47.6 76-80 133.9-80l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-24 0C170 32 89.9 92.1 60.3 176L32 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l16.1 0z\"]\n};\nconst faEur = faEuroSign;\nconst faEuro = faEuroSign;\nconst faChair = {\n  prefix: 'fas',\n  iconName: 'chair',\n  icon: [448, 512, [129681], \"f6c0\", \"M248 48l0 208 48 0 0-197.3c23.9 13.8 40 39.7 40 69.3l0 128 48 0 0-128C384 57.3 326.7 0 256 0L192 0C121.3 0 64 57.3 64 128l0 128 48 0 0-128c0-29.6 16.1-55.5 40-69.3L152 256l48 0 0-208 48 0zM48 288c-12.1 0-23.2 6.8-28.6 17.7l-16 32c-5 9.9-4.4 21.7 1.4 31.1S20.9 384 32 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 256 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c11.1 0 21.4-5.7 27.2-15.2s6.4-21.2 1.4-31.1l-16-32C423.2 294.8 412.1 288 400 288L48 288z\"]\n};\nconst faCircleCheck = {\n  prefix: 'fas',\n  iconName: 'circle-check',\n  icon: [512, 512, [61533, \"check-circle\"], \"f058\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faCheckCircle = faCircleCheck;\nconst faCircleStop = {\n  prefix: 'fas',\n  iconName: 'circle-stop',\n  icon: [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 160l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z\"]\n};\nconst faStopCircle = faCircleStop;\nconst faCompassDrafting = {\n  prefix: 'fas',\n  iconName: 'compass-drafting',\n  icon: [512, 512, [\"drafting-compass\"], \"f568\", \"M352 96c0 14.3-3.1 27.9-8.8 40.2L396 227.4c-23.7 25.3-54.2 44.1-88.5 53.6L256 192c0 0 0 0 0 0s0 0 0 0l-68 117.5c21.5 6.8 44.3 10.5 68.1 10.5c70.7 0 133.8-32.7 174.9-84c11.1-13.8 31.2-16 45-5s16 31.2 5 45C428.1 341.8 347 384 256 384c-35.4 0-69.4-6.4-100.7-18.1L98.7 463.7C94 471.8 87 478.4 78.6 482.6L23.2 510.3c-5 2.5-10.9 2.2-15.6-.7S0 501.5 0 496l0-55.4c0-8.4 2.2-16.7 6.5-24.1l60-103.7C53.7 301.6 41.8 289.3 31.2 276c-11.1-13.8-8.8-33.9 5-45s33.9-8.8 45 5c5.7 7.1 11.8 13.8 18.2 20.1l69.4-119.9c-5.6-12.2-8.8-25.8-8.8-40.2c0-53 43-96 96-96s96 43 96 96zm21 297.9c32.6-12.8 62.5-30.8 88.9-52.9l43.7 75.5c4.2 7.3 6.5 15.6 6.5 24.1l0 55.4c0 5.5-2.9 10.7-7.6 13.6s-10.6 3.2-15.6 .7l-55.4-27.7c-8.4-4.2-15.4-10.8-20.1-18.9L373 393.9zM256 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faDraftingCompass = faCompassDrafting;\nconst faPlateWheat = {\n  prefix: 'fas',\n  iconName: 'plate-wheat',\n  icon: [512, 512, [], \"e55a\", \"M176 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zM56 64l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM24 136l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 48c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16zM400 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zm80 160l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 176c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80zm-96 16l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM3.5 347.6C1.6 332.9 13 320 27.8 320l456.4 0c14.8 0 26.2 12.9 24.4 27.6C502.3 397.8 464.2 437 416 446l0 2c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-2c-48.2-9-86.3-48.2-92.5-98.4z\"]\n};\nconst faIcicles = {\n  prefix: 'fas',\n  iconName: 'icicles',\n  icon: [512, 512, [], \"f7ad\", \"M75.8 304.8L1 35.7c-.7-2.5-1-5-1-7.5C0 12.6 12.6 0 28.2 0H482.4C498.8 0 512 13.2 512 29.6c0 1.6-.1 3.3-.4 4.9L434.6 496.1c-1.5 9.2-9.5 15.9-18.8 15.9c-9.2 0-17.1-6.6-18.7-15.6L336 160 307.2 303.9c-1.9 9.3-10.1 16.1-19.6 16.1c-9.2 0-17.2-6.2-19.4-15.1L240 192 210.6 368.2c-1.5 9.1-9.4 15.8-18.6 15.8s-17.1-6.7-18.6-15.8L144 192 115.9 304.3c-2.3 9.2-10.6 15.7-20.1 15.7c-9.3 0-17.5-6.2-20-15.2z\"]\n};\nconst faPersonShelter = {\n  prefix: 'fas',\n  iconName: 'person-shelter',\n  icon: [512, 512, [], \"e54f\", \"M271.9 4.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128C6.2 137.9 0 148.5 0 160L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.4L256 68.9 448 178.6 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-11.5-6.2-22.1-16.1-27.8l-224-128zM256 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm-8 280l0-88 16 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-174.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-37.9 70.3c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L200 313.5 200 488c0 13.3 10.7 24 24 24s24-10.7 24-24z\"]\n};\nconst faNeuter = {\n  prefix: 'fas',\n  iconName: 'neuter',\n  icon: [384, 512, [9906], \"f22c\", \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1L160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-130.9z\"]\n};\nconst faIdBadge = {\n  prefix: 'fas',\n  iconName: 'id-badge',\n  icon: [384, 512, [], \"f2c1\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zm96 320l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 416c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM144 64l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faMarker = {\n  prefix: 'fas',\n  iconName: 'marker',\n  icon: [512, 512, [], \"f5a1\", \"M481 31C445.1-4.8 386.9-4.8 351 31l-15 15L322.9 33C294.8 4.9 249.2 4.9 221.1 33L135 119c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L255 66.9c9.4-9.4 24.6-9.4 33.9 0L302.1 80 186.3 195.7 316.3 325.7 481 161c35.9-35.9 35.9-94.1 0-129.9zM293.7 348.3L163.7 218.3 99.5 282.5c-48 48-80.8 109.2-94.1 175.8l-5 25c-1.6 7.9 .9 16 6.6 21.7s13.8 8.1 21.7 6.6l25-5c66.6-13.3 127.8-46.1 175.8-94.1l64.2-64.2z\"]\n};\nconst faFaceLaughBeam = {\n  prefix: 'fas',\n  iconName: 'face-laugh-beam',\n  icon: [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM217.6 212.8s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faLaughBeam = faFaceLaughBeam;\nconst faHelicopterSymbol = {\n  prefix: 'fas',\n  iconName: 'helicopter-symbol',\n  icon: [512, 512, [], \"e502\", \"M445.3 224l64.7 0C495.6 108.2 403.8 16.4 288 2l0 64.7C368.4 80.1 431.9 143.6 445.3 224zM510 288l-64.7 0C431.9 368.4 368.4 431.9 288 445.3l0 64.7c115.8-14.4 207.6-106.2 222-222zM2 288C16.4 403.8 108.2 495.6 224 510l0-64.7C143.6 431.9 80.1 368.4 66.7 288L2 288zm0-64l64.7 0C80.1 143.6 143.6 80.1 224 66.7L224 2C108.2 16.4 16.4 108.2 2 224zm206-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 96 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-96 0 0-64z\"]\n};\nconst faUniversalAccess = {\n  prefix: 'fas',\n  iconName: 'universal-access',\n  icon: [512, 512, [], \"f29a\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm161.5-86.1c-12.2-5.2-26.3 .4-31.5 12.6s.4 26.3 12.6 31.5l11.9 5.1c17.3 7.4 35.2 12.9 53.6 16.3l0 50.1c0 4.3-.7 8.6-2.1 12.6l-28.7 86.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l24.4-73.2c1.3-3.8 4.8-6.4 8.8-6.4s7.6 2.6 8.8 6.4l24.4 73.2c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-28.7-86.1c-1.4-4.1-2.1-8.3-2.1-12.6l0-50.1c18.4-3.5 36.3-8.9 53.6-16.3l11.9-5.1c12.2-5.2 17.8-19.3 12.6-31.5s-19.3-17.8-31.5-12.6L338.7 175c-26.1 11.2-54.2 17-82.7 17s-56.5-5.8-82.7-17l-11.9-5.1zM256 160a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faCircleChevronUp = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-up',\n  icon: [512, 512, [\"chevron-circle-up\"], \"f139\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM377 271c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-87-87-87 87c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 167c9.4-9.4 24.6-9.4 33.9 0L377 271z\"]\n};\nconst faChevronCircleUp = faCircleChevronUp;\nconst faLariSign = {\n  prefix: 'fas',\n  iconName: 'lari-sign',\n  icon: [384, 512, [], \"e1c8\", \"M144 32c17.7 0 32 14.3 32 32l0 32.7c5.3-.4 10.6-.7 16-.7s10.7 .2 16 .7L208 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 49.4c54.9 25.2 95.8 75.5 108.2 136.2c3.5 17.3-7.7 34.2-25 37.7s-34.2-7.7-37.7-25c-6.1-29.9-22.5-55.9-45.4-74.3l0 67.9c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-95c-5.2-.7-10.6-1-16-1s-10.8 .3-16 1l0 95c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-67.9C82.7 211.5 64 247.6 64 288c0 70.7 57.3 128 128 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l16.9 0C18.5 382 0 337.2 0 288c0-77.5 45.9-144.3 112-174.6L112 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faVolcano = {\n  prefix: 'fas',\n  iconName: 'volcano',\n  icon: [512, 512, [127755], \"f770\", \"M160 144c-35.3 0-64-28.7-64-64s28.7-64 64-64c15.7 0 30 5.6 41.2 15C212.4 12.4 232.7 0 256 0s43.6 12.4 54.8 31C322 21.6 336.3 16 352 16c35.3 0 64 28.7 64 64s-28.7 64-64 64c-14.7 0-28.3-5-39.1-13.3l-32 48C275.3 187 266 192 256 192s-19.3-5-24.9-13.3l-32-48C188.3 139 174.7 144 160 144zM144 352l48.4-24.2c10.2-5.1 21.6-7.8 33-7.8c19.6 0 38.4 7.8 52.2 21.6l32.5 32.5c6.3 6.3 14.9 9.9 23.8 9.9c11.3 0 21.8-5.6 28-15l9.7-14.6-58.9-66.3c-9.1-10.2-22.2-16.1-35.9-16.1l-41.8 0c-13.7 0-26.8 5.9-35.9 16.1l-59.9 67.4L144 352zm19.4-95.8c18.2-20.5 44.3-32.2 71.8-32.2l41.8 0c27.4 0 53.5 11.7 71.8 32.2l150.2 169c8.5 9.5 13.2 21.9 13.2 34.7c0 28.8-23.4 52.2-52.2 52.2L52.2 512C23.4 512 0 488.6 0 459.8c0-12.8 4.7-25.1 13.2-34.7l150.2-169z\"]\n};\nconst faPersonWalkingDashedLineArrowRight = {\n  prefix: 'fas',\n  iconName: 'person-walking-dashed-line-arrow-right',\n  icon: [640, 512, [], \"e553\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224 384 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l146.7 0-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80zM392 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48c0-13.3-10.7-24-24-24zm24 152c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16zM392 320c-13.3 0-24 10.7-24 24l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16c0-13.3-10.7-24-24-24zm24 120c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48z\"]\n};\nconst faSterlingSign = {\n  prefix: 'fas',\n  iconName: 'sterling-sign',\n  icon: [320, 512, [163, \"gbp\", \"pound-sign\"], \"f154\", \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4L48 224l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 44.5c0 17.4-4.7 34.5-13.7 49.4L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L88.5 416l.7-1.1C104.1 390 112 361.5 112 332.5l0-44.5 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-63.6z\"]\n};\nconst faGbp = faSterlingSign;\nconst faPoundSign = faSterlingSign;\nconst faViruses = {\n  prefix: 'fas',\n  iconName: 'viruses',\n  icon: [640, 512, [], \"e076\", \"M192 0c13.3 0 24 10.7 24 24l0 13.5c0 35.6 43.1 53.5 68.3 28.3l9.5-9.5c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-9.5 9.5C293 124.9 310.9 168 346.5 168l13.5 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-13.5 0c-35.6 0-53.5 43.1-28.3 68.3l9.5 9.5c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-9.5-9.5C259.1 293 216 310.9 216 346.5l0 13.5c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-13.5c0-35.6-43.1-53.5-68.3-28.3l-9.5 9.5c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l9.5-9.5C91 259.1 73.1 216 37.5 216L24 216c-13.3 0-24-10.7-24-24s10.7-24 24-24l13.5 0c35.6 0 53.5-43.1 28.3-68.3l-9.5-9.5c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l9.5 9.5C124.9 91 168 73.1 168 37.5L168 24c0-13.3 10.7-24 24-24zm48 224a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48-64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm320 80c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C574.5 312.1 591 352 624 352c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C551.9 446.5 512 463 512 496c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C417.5 423.9 401 384 368 384c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C440.1 289.5 480 273 480 240c0-8.8 7.2-16 16-16s16 7.2 16 16zm0 112a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faSquarePersonConfined = {\n  prefix: 'fas',\n  iconName: 'square-person-confined',\n  icon: [448, 512, [], \"e577\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm96 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm80 104c0-30.9 25.1-56 56-56s56 25.1 56 56l0 102.1c0 36.4-29.5 65.9-65.9 65.9c-17.5 0-34.3-6.9-46.6-19.3L184.8 342l-28.1 56.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l48-96c4.6-9.2 13.3-15.6 23.5-17.3s20.5 1.7 27.8 9L240 306.7l0-58.7z\"]\n};\nconst faUserTie = {\n  prefix: 'fas',\n  iconName: 'user-tie',\n  icon: [448, 512, [], \"f508\", \"M96 128a128 128 0 1 0 256 0A128 128 0 1 0 96 128zm94.5 200.2l18.6 31L175.8 483.1l-36-146.9c-2-8.1-9.8-13.4-17.9-11.3C51.9 342.4 0 405.8 0 481.3c0 17 13.8 30.7 30.7 30.7l131.7 0c0 0 0 0 .1 0l5.5 0 112 0 5.5 0c0 0 0 0 .1 0l131.7 0c17 0 30.7-13.8 30.7-30.7c0-75.5-51.9-138.9-121.9-156.4c-8.1-2-15.9 3.3-17.9 11.3l-36 146.9L238.9 359.2l18.6-31c6.4-10.7-1.3-24.2-13.7-24.2L224 304l-19.7 0c-12.4 0-20.1 13.6-13.7 24.2z\"]\n};\nconst faArrowDownLong = {\n  prefix: 'fas',\n  iconName: 'arrow-down-long',\n  icon: [384, 512, [\"long-arrow-down\"], \"f175\", \"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7L86.6 329.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128z\"]\n};\nconst faLongArrowDown = faArrowDownLong;\nconst faTentArrowDownToLine = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-down-to-line',\n  icon: [640, 512, [], \"e57e\", \"M241.8 111.9c8.9 9.9 8.1 25-1.8 33.9l-80 72c-9.1 8.2-23 8.2-32.1 0l-80-72c-9.9-8.9-10.7-24-1.8-33.9s24-10.7 33.9-1.8l39.9 36L120 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 122.1 39.9-36c9.9-8.9 25-8.1 33.9 1.8zm122.8 22.6c11.5-8.7 27.3-8.7 38.8 0l168 128c6.6 5 11 12.5 12.3 20.7l24 160 .7 4.7c17.5 .2 31.6 14.4 31.6 32c0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l127.6 0 .7-4.7 24-160c1.2-8.2 5.6-15.7 12.3-20.7l168-128zM384 448l80 0L402.7 325.5c-1.7-3.4-5.1-5.5-8.8-5.5c-5.5 0-9.9 4.4-9.9 9.9L384 448z\"]\n};\nconst faCertificate = {\n  prefix: 'fas',\n  iconName: 'certificate',\n  icon: [512, 512, [], \"f0a3\", \"M211 7.3C205 1 196-1.4 187.6 .8s-14.9 8.9-17.1 17.3L154.7 80.6l-62-17.5c-8.4-2.4-17.4 0-23.5 6.1s-8.5 15.1-6.1 23.5l17.5 62L18.1 170.6c-8.4 2.1-15 8.7-17.3 17.1S1 205 7.3 211l46.2 45L7.3 301C1 307-1.4 316 .8 324.4s8.9 14.9 17.3 17.1l62.5 15.8-17.5 62c-2.4 8.4 0 17.4 6.1 23.5s15.1 8.5 23.5 6.1l62-17.5 15.8 62.5c2.1 8.4 8.7 15 17.1 17.3s17.3-.2 23.4-6.4l45-46.2 45 46.2c6.1 6.2 15 8.7 23.4 6.4s14.9-8.9 17.1-17.3l15.8-62.5 62 17.5c8.4 2.4 17.4 0 23.5-6.1s8.5-15.1 6.1-23.5l-17.5-62 62.5-15.8c8.4-2.1 15-8.7 17.3-17.1s-.2-17.4-6.4-23.4l-46.2-45 46.2-45c6.2-6.1 8.7-15 6.4-23.4s-8.9-14.9-17.3-17.1l-62.5-15.8 17.5-62c2.4-8.4 0-17.4-6.1-23.5s-15.1-8.5-23.5-6.1l-62 17.5L341.4 18.1c-2.1-8.4-8.7-15-17.1-17.3S307 1 301 7.3L256 53.5 211 7.3z\"]\n};\nconst faReplyAll = {\n  prefix: 'fas',\n  iconName: 'reply-all',\n  icon: [576, 512, [\"mail-reply-all\"], \"f122\", \"M209.4 39.5c-9.1-9.6-24.3-10-33.9-.9L33.8 173.2c-19.9 18.9-19.9 50.7 0 69.6L175.5 377.4c9.6 9.1 24.8 8.7 33.9-.9s8.7-24.8-.9-33.9L66.8 208 208.5 73.4c9.6-9.1 10-24.3 .9-33.9zM352 64c0-12.6-7.4-24.1-19-29.2s-25-3-34.4 5.4l-160 144c-6.7 6.1-10.6 14.7-10.6 23.8s3.9 17.7 10.6 23.8l160 144c9.4 8.5 22.9 10.6 34.4 5.4s19-16.6 19-29.2l0-64 32 0c53 0 96 43 96 96c0 30.4-12.8 47.9-22.2 56.7c-5.5 5.1-9.8 12-9.8 19.5c0 10.9 8.8 19.7 19.7 19.7c2.8 0 5.6-.6 8.1-1.9C494.5 467.9 576 417.3 576 304c0-97.2-78.8-176-176-176l-48 0 0-64z\"]\n};\nconst faMailReplyAll = faReplyAll;\nconst faSuitcase = {\n  prefix: 'fas',\n  iconName: 'suitcase',\n  icon: [512, 512, [129523], \"f0f2\", \"M176 56l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 48c-4.4 0-8 3.6-8 8zM128 96l0-40c0-30.9 25.1-56 56-56L328 0c30.9 0 56 25.1 56 56l0 40 0 32 0 352-256 0 0-352 0-32zM64 96l32 0 0 384-32 0c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64zM448 480l-32 0 0-384 32 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64z\"]\n};\nconst faPersonSkating = {\n  prefix: 'fas',\n  iconName: 'person-skating',\n  icon: [448, 512, [\"skating\"], \"f7c5\", \"M352 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM128 128c0-17.7 14.3-32 32-32l159.4 0c43.6 0 64.6 53.4 32.8 83.1l-74.4 69.4 60.2 60.2c9 9 14.1 21.2 14.1 33.9l0 73.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7-77.9-77.8c-26.6-26.6-24.6-70.3 4.3-94.4l20.4-17L160 160c-17.7 0-32-14.3-32-32zM81.4 353.4l86.9-86.9c4.6 10 11 19.3 19.3 27.5l21.8 21.8-82.7 82.7c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3zm322.5 95.1c8.6 2.1 13.8 10.8 11.6 19.4l-.4 1.7c-6.2 24.9-28.6 42.4-54.3 42.4L272 512c-8.8 0-16-7.2-16-16s7.2-16 16-16l88.8 0c11 0 20.6-7.5 23.3-18.2l.4-1.7c2.1-8.6 10.8-13.8 19.4-11.6zM135.2 478.3l-6.2 3.1c-21.6 10.8-47.6 6.6-64.6-10.5L4.7 411.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l59.6 59.6c7.3 7.3 18.5 9.1 27.7 4.5l6.2-3.1c7.9-4 17.5-.7 21.5 7.2s.7 17.5-7.2 21.5z\"]\n};\nconst faSkating = faPersonSkating;\nconst faFilterCircleDollar = {\n  prefix: 'fas',\n  iconName: 'filter-circle-dollar',\n  icon: [576, 512, [\"funnel-dollar\"], \"f662\", \"M3.9 22.9C10.5 8.9 24.5 0 40 0L472 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm120.8-32.6c.6-.9 1.8-2.1 4.2-3.4c5.1-2.7 12.5-4.1 18.7-4c8.2 .1 17.1 1.8 26.4 4.1c8.6 2.1 17.3-3.1 19.4-11.7s-3.1-17.3-11.7-19.4c-5.6-1.4-11.6-2.7-17.9-3.7l0-9.4c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 9.5c-6.1 1.2-12.3 3.2-18 6.3c-11.8 6.3-23 18.4-21.8 37.2c1 16 11.7 25.3 21.6 30.7c8.8 4.7 19.7 7.8 28.6 10.3l1.8 .5c10.3 2.9 17.9 5.2 23.2 8.3c4.5 2.7 4.7 4.2 4.7 5.6c.1 2.4-.5 3.7-1 4.5c-.6 1-1.8 2.2-4 3.3c-4.7 2.5-11.8 3.8-18.5 3.6c-9.5-.3-18.5-3.1-29.9-6.8c-1.9-.6-3.8-1.2-5.8-1.8c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20c1.6 .5 3.3 1 5 1.6c0 0 0 0 0 0s0 0 0 0c7 2.3 15.1 4.8 23.7 6.6l0 11.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-10.8c6.2-1.1 12.5-3.1 18.3-6.2c12.1-6.5 22.3-18.7 21.7-36.9c-.5-16.2-10.3-26.3-20.5-32.3c-9.4-5.6-21.2-8.9-30.5-11.5l-.2 0c-10.4-2.9-18.3-5.2-23.9-8.2c-4.8-2.6-4.8-4-4.8-4.5c0 0 0 0 0-.1c-.1-1.9 .3-2.9 .8-3.6z\"]\n};\nconst faFunnelDollar = faFilterCircleDollar;\nconst faCameraRetro = {\n  prefix: 'fas',\n  iconName: 'camera-retro',\n  icon: [512, 512, [128247], \"f083\", \"M220.6 121.2L271.1 96 448 96l0 96-114.8 0c-21.9-15.1-48.5-24-77.2-24s-55.2 8.9-77.2 24L64 192l0-64 128 0c9.9 0 19.7-2.3 28.6-6.8zM0 128L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L271.1 32c-9.9 0-19.7 2.3-28.6 6.8L192 64l-32 0 0-16c0-8.8-7.2-16-16-16L80 32c-8.8 0-16 7.2-16 16l0 16C28.7 64 0 92.7 0 128zM168 304a88 88 0 1 1 176 0 88 88 0 1 1 -176 0z\"]\n};\nconst faCircleArrowDown = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-down',\n  icon: [512, 512, [\"arrow-circle-down\"], \"f0ab\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM127 297c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l71 71L232 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 214.1 71-71c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 409c-9.4 9.4-24.6 9.4-33.9 0L127 297z\"]\n};\nconst faArrowCircleDown = faCircleArrowDown;\nconst faFileImport = {\n  prefix: 'fas',\n  iconName: 'file-import',\n  icon: [512, 512, [\"arrow-right-to-file\"], \"f56f\", \"M128 64c0-35.3 28.7-64 64-64L352 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64l-256 0c-35.3 0-64-28.7-64-64l0-112 174.1 0-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39L128 288l0-224zm0 224l0 48L24 336c-13.3 0-24-10.7-24-24s10.7-24 24-24l104 0zM512 128l-128 0L384 0 512 128z\"]\n};\nconst faArrowRightToFile = faFileImport;\nconst faSquareArrowUpRight = {\n  prefix: 'fas',\n  iconName: 'square-arrow-up-right',\n  icon: [448, 512, [\"external-link-square\"], \"f14c\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM160 144c-13.3 0-24 10.7-24 24s10.7 24 24 24l94.1 0L119 327c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135L288 328c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24l-152 0z\"]\n};\nconst faExternalLinkSquare = faSquareArrowUpRight;\nconst faBoxOpen = {\n  prefix: 'fas',\n  iconName: 'box-open',\n  icon: [640, 512, [], \"f49e\", \"M58.9 42.1c3-6.1 9.6-9.6 16.3-8.7L320 64 564.8 33.4c6.7-.8 13.3 2.7 16.3 8.7l41.7 83.4c9 17.9-.6 39.6-19.8 45.1L439.6 217.3c-13.9 4-28.8-1.9-36.2-14.3L320 64 236.6 203c-7.4 12.4-22.3 18.3-36.2 14.3L37.1 170.6c-19.3-5.5-28.8-27.2-19.8-45.1L58.9 42.1zM321.1 128l54.9 91.4c14.9 24.8 44.6 36.6 72.5 28.6L576 211.6l0 167c0 22-15 41.2-36.4 46.6l-204.1 51c-10.2 2.6-20.9 2.6-31 0l-204.1-51C79 419.7 64 400.5 64 378.5l0-167L191.6 248c27.8 8 57.6-3.8 72.5-28.6L318.9 128l2.2 0z\"]\n};\nconst faScroll = {\n  prefix: 'fas',\n  iconName: 'scroll',\n  icon: [576, 512, [128220], \"f70e\", \"M0 80l0 48c0 17.7 14.3 32 32 32l16 0 48 0 0-80c0-26.5-21.5-48-48-48S0 53.5 0 80zM112 32c10 13.4 16 30 16 48l0 304c0 35.3 28.7 64 64 64s64-28.7 64-64l0-5.3c0-32.4 26.3-58.7 58.7-58.7L480 320l0-192c0-53-43-96-96-96L112 32zM464 480c61.9 0 112-50.1 112-112c0-8.8-7.2-16-16-16l-245.3 0c-14.7 0-26.7 11.9-26.7 26.7l0 5.3c0 53-43 96-96 96l176 0 96 0z\"]\n};\nconst faSpa = {\n  prefix: 'fas',\n  iconName: 'spa',\n  icon: [576, 512, [], \"f5bb\", \"M183.1 235.3c33.7 20.7 62.9 48.1 85.8 80.5c7 9.9 13.4 20.3 19.1 31c5.7-10.8 12.1-21.1 19.1-31c22.9-32.4 52.1-59.8 85.8-80.5C437.6 207.8 490.1 192 546 192l9.9 0c11.1 0 20.1 9 20.1 20.1C576 360.1 456.1 480 308.1 480L288 480l-20.1 0C119.9 480 0 360.1 0 212.1C0 201 9 192 20.1 192l9.9 0c55.9 0 108.4 15.8 153.1 43.3zM301.5 37.6c15.7 16.9 61.1 71.8 84.4 164.6c-38 21.6-71.4 50.8-97.9 85.6c-26.5-34.8-59.9-63.9-97.9-85.6c23.2-92.8 68.6-147.7 84.4-164.6C278 33.9 282.9 32 288 32s10 1.9 13.5 5.6z\"]\n};\nconst faLocationPinLock = {\n  prefix: 'fas',\n  iconName: 'location-pin-lock',\n  icon: [512, 512, [], \"e51f\", \"M215.7 499.2c11-13.8 25.1-31.7 40.3-52.3l0-94.8c0-23.7 12.9-44.4 32-55.4l0-24.6c0-55.6 40.5-101.7 93.6-110.5C367 70 287.7 0 192 0C86 0 0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faPause = {\n  prefix: 'fas',\n  iconName: 'pause',\n  icon: [320, 512, [9208], \"f04c\", \"M48 64C21.5 64 0 85.5 0 112L0 400c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48L48 64zm192 0c-26.5 0-48 21.5-48 48l0 288c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48l-32 0z\"]\n};\nconst faHillAvalanche = {\n  prefix: 'fas',\n  iconName: 'hill-avalanche',\n  icon: [576, 512, [], \"e507\", \"M439.7 401.9c34.2 23.1 81.1 19.5 111.4-10.8c34.4-34.4 34.4-90.1 0-124.4c-27.8-27.8-69.5-33.1-102.6-16c-11.8 6.1-16.4 20.6-10.3 32.3s20.6 16.4 32.3 10.3c15.1-7.8 34-5.3 46.6 7.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-81.7-81.7C401.2 261.3 416 236.4 416 208c0-33.9-21.1-62.9-50.9-74.5c1.9-6.8 2.9-14 2.9-21.5c0-44.2-35.8-80-80-80c-27.3 0-51.5 13.7-65.9 34.6C216.3 46.6 197.9 32 176 32c-26.5 0-48 21.5-48 48c0 4 .5 7.9 1.4 11.6L439.7 401.9zM480 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM68.3 87C43.1 61.8 0 79.7 0 115.3L0 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.3 87z\"]\n};\nconst faTemperatureEmpty = {\n  prefix: 'fas',\n  iconName: 'temperature-empty',\n  icon: [320, 512, [\"temperature-0\", \"thermometer-0\", \"thermometer-empty\"], \"f2cb\", \"M112 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C233.8 332.6 240 349.5 240 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L112 112zM160 0C98.1 0 48 50.2 48 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C27.2 304.2 16 334.8 16 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L272 112C272 50.2 221.9 0 160 0zm0 416a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faTemperature0 = faTemperatureEmpty;\nconst faThermometer0 = faTemperatureEmpty;\nconst faThermometerEmpty = faTemperatureEmpty;\nconst faBomb = {\n  prefix: 'fas',\n  iconName: 'bomb',\n  icon: [512, 512, [128163], \"f1e2\", \"M459.1 52.4L442.6 6.5C440.7 2.6 436.5 0 432.1 0s-8.5 2.6-10.4 6.5L405.2 52.4l-46 16.8c-4.3 1.6-7.3 5.9-7.2 10.4c0 4.5 3 8.7 7.2 10.2l45.7 16.8 16.8 45.8c1.5 4.4 5.8 7.5 10.4 7.5s8.9-3.1 10.4-7.5l16.5-45.8 45.7-16.8c4.2-1.5 7.2-5.7 7.2-10.2c0-4.6-3-8.9-7.2-10.4L459.1 52.4zm-132.4 53c-12.5-12.5-32.8-12.5-45.3 0l-2.9 2.9C256.5 100.3 232.7 96 208 96C93.1 96 0 189.1 0 304S93.1 512 208 512s208-93.1 208-208c0-24.7-4.3-48.5-12.2-70.5l2.9-2.9c12.5-12.5 12.5-32.8 0-45.3l-80-80zM200 192c-57.4 0-104 46.6-104 104l0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8c0-75.1 60.9-136 136-136l8 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-8 0z\"]\n};\nconst faRegistered = {\n  prefix: 'fas',\n  iconName: 'registered',\n  icon: [512, 512, [174], \"f25d\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152c0-13.3 10.7-24 24-24l88 0c44.2 0 80 35.8 80 80c0 28-14.4 52.7-36.3 67l34.1 75.1c5.5 12.1 .1 26.3-11.9 31.8s-26.3 .1-31.8-11.9L268.9 288 208 288l0 72c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-96 0-112zm48 88l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0 64z\"]\n};\nconst faAddressCard = {\n  prefix: 'fas',\n  iconName: 'address-card',\n  icon: [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm80 256l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L80 384c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm256-32l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faContactCard = faAddressCard;\nconst faVcard = faAddressCard;\nconst faScaleUnbalancedFlip = {\n  prefix: 'fas',\n  iconName: 'scale-unbalanced-flip',\n  icon: [640, 512, [\"balance-scale-right\"], \"f516\", \"M117.9 62.4c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l113 37.7C265 15.8 290.7 0 320 0c44.2 0 80 35.8 80 80c0 3-.2 5.9-.5 8.8l122.6 40.9c16.8 5.6 25.8 23.7 20.2 40.5s-23.7 25.8-40.5 20.2L366.4 145.2c-4.5 3.2-9.3 5.9-14.4 8.2L352 480c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-21-9.2-37.2-27-44.2-49l-125.9-42zM200.4 288L128 163.8 55.6 288l144.9 0zM128 384C65.1 384 12.8 350 2 305.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C243.2 350 190.9 384 128 384zm382.8-92.2L438.4 416l144.9 0L510.8 291.8zm126 141.3C626 478 573.7 512 510.8 512s-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1z\"]\n};\nconst faBalanceScaleRight = faScaleUnbalancedFlip;\nconst faSubscript = {\n  prefix: 'fas',\n  iconName: 'subscript',\n  icon: [512, 512, [], \"f12c\", \"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l15.3 0 89.6 128L47.3 384 32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0L215.1 256l89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64L32 64zM480 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 361.5 404.3 368 416 368l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128z\"]\n};\nconst faDiamondTurnRight = {\n  prefix: 'fas',\n  iconName: 'diamond-turn-right',\n  icon: [512, 512, [\"directions\"], \"f5eb\", \"M227.7 11.7c15.6-15.6 40.9-15.6 56.6 0l216 216c15.6 15.6 15.6 40.9 0 56.6l-216 216c-15.6 15.6-40.9 15.6-56.6 0l-216-216c-15.6-15.6-15.6-40.9 0-56.6l216-216zm87.6 137c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8l0 56-64 0c-35.3 0-64 28.7-64 64l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48c0-8.8 7.2-16 16-16l64 0 0 56c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l80-80c6.2-6.2 6.2-16.4 0-22.6l-80-80z\"]\n};\nconst faDirections = faDiamondTurnRight;\nconst faBurst = {\n  prefix: 'fas',\n  iconName: 'burst',\n  icon: [512, 512, [], \"e4dc\", \"M37.6 4.2C28-2.3 15.2-1.1 7 7s-9.4 21-2.8 30.5l112 163.3L16.6 233.2C6.7 236.4 0 245.6 0 256s6.7 19.6 16.6 22.8l103.1 33.4L66.8 412.8c-4.9 9.3-3.2 20.7 4.3 28.1s18.8 9.2 28.1 4.3l100.6-52.9 33.4 103.1c3.2 9.9 12.4 16.6 22.8 16.6s19.6-6.7 22.8-16.6l33.4-103.1 100.6 52.9c9.3 4.9 20.7 3.2 28.1-4.3s9.2-18.8 4.3-28.1L392.3 312.2l103.1-33.4c9.9-3.2 16.6-12.4 16.6-22.8s-6.7-19.6-16.6-22.8L388.9 198.7l25.7-70.4c3.2-8.8 1-18.6-5.6-25.2s-16.4-8.8-25.2-5.6l-70.4 25.7L278.8 16.6C275.6 6.7 266.4 0 256 0s-19.6 6.7-22.8 16.6l-32.3 99.6L37.6 4.2z\"]\n};\nconst faHouseLaptop = {\n  prefix: 'fas',\n  iconName: 'house-laptop',\n  icon: [640, 512, [\"laptop-house\"], \"e066\", \"M218.3 8.5c12.3-11.3 31.2-11.3 43.4 0l208 192c6.7 6.2 10.3 14.8 10.3 23.5l-144 0c-19.1 0-36.3 8.4-48 21.7l0-37.7c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0 0 128-160 0c-26.5 0-48-21.5-48-48l0-112-32 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8.1-35.2l208-192zM352 304l0 144 192 0 0-144-192 0zm-48-16c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32l0 160 32 0c8.8 0 16 7.2 16 16c0 26.5-21.5 48-48 48l-48 0-192 0-48 0c-26.5 0-48-21.5-48-48c0-8.8 7.2-16 16-16l32 0 0-160z\"]\n};\nconst faLaptopHouse = faHouseLaptop;\nconst faFaceTired = {\n  prefix: 'fas',\n  iconName: 'face-tired',\n  icon: [512, 512, [128555, \"tired\"], \"f5c8\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.7 328.7c22-22 53.9-40.7 91.3-40.7s69.3 18.7 91.3 40.7c11.1 11.1 20.1 23.4 26.4 35.4c6.2 11.7 10.3 24.4 10.3 35.9c0 5.2-2.6 10.2-6.9 13.2s-9.8 3.7-14.7 1.8l-20.5-7.7c-26.9-10.1-55.5-15.3-84.3-15.3l-3.2 0c-28.8 0-57.3 5.2-84.3 15.3L149.6 415c-4.9 1.8-10.4 1.2-14.7-1.8s-6.9-7.9-6.9-13.2c0-11.6 4.2-24.2 10.3-35.9c6.3-12 15.3-24.3 26.4-35.4zm-31.2-182l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faTired = faFaceTired;\nconst faMoneyBills = {\n  prefix: 'fas',\n  iconName: 'money-bills',\n  icon: [640, 512, [], \"e1f3\", \"M96 96l0 224c0 35.3 28.7 64 64 64l416 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32c-35.3 0-64 28.7-64 64zm64 160c35.3 0 64 28.7 64 64l-64 0 0-64zM224 96c0 35.3-28.7 64-64 64l0-64 64 0zM576 256l0 64-64 0c0-35.3 28.7-64 64-64zM512 96l64 0 0 64c-35.3 0-64-28.7-64-64zM288 208a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 360c0 66.3 53.7 120 120 120l400 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-400 0c-39.8 0-72-32.2-72-72l0-240z\"]\n};\nconst faSmog = {\n  prefix: 'fas',\n  iconName: 'smog',\n  icon: [640, 512, [], \"f75f\", \"M32 144c0 79.5 64.5 144 144 144l123.3 0c22.6 19.9 52.2 32 84.7 32s62.1-12.1 84.7-32l27.3 0c61.9 0 112-50.1 112-112s-50.1-112-112-112c-10.7 0-21 1.5-30.8 4.3C443.8 27.7 401.1 0 352 0c-32.6 0-62.4 12.2-85.1 32.3C242.1 12.1 210.5 0 176 0C96.5 0 32 64.5 32 144zM616 368l-336 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-64 96l-112 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-192 0L24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zM224 392c0-13.3-10.7-24-24-24L96 368c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0c13.3 0 24-10.7 24-24z\"]\n};\nconst faCrutch = {\n  prefix: 'fas',\n  iconName: 'crutch',\n  icon: [512, 512, [], \"f7f7\", \"M297.4 9.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0zm-96 144l-34.8 34.8c-12.9 12.9-21.9 29.2-25.8 47.1L116.8 342.9c-1.3 5.9-4.3 11.4-8.6 15.7L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l98.8-98.8c4.3-4.3 9.7-7.3 15.7-8.6l107.6-23.9c17.8-4 34.1-12.9 47.1-25.8l34.7-34.7c0 0 .1-.1 .1-.1s.1-.1 .1-.1l74.6-74.6-45.3-45.3L336 242.7 269.3 176l52.1-52.1L276.1 78.6l-74.7 74.7zM224 221.3L290.7 288l-12.2 12.2c-4.3 4.3-9.7 7.3-15.7 8.6l-76.7 17 17-76.7c1.3-5.9 4.3-11.4 8.6-15.7L224 221.3z\"]\n};\nconst faFontAwesome = {\n  prefix: 'fas',\n  iconName: 'font-awesome',\n  icon: [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 352 0 64 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"]\n};\nconst faFontAwesomeFlag = faFontAwesome;\nconst faFontAwesomeLogoFull = faFontAwesome;\nconst faCloudArrowUp = {\n  prefix: 'fas',\n  iconName: 'cloud-arrow-up',\n  icon: [640, 512, [62338, \"cloud-upload\", \"cloud-upload-alt\"], \"f0ee\", \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L296 392c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z\"]\n};\nconst faCloudUpload = faCloudArrowUp;\nconst faCloudUploadAlt = faCloudArrowUp;\nconst faPalette = {\n  prefix: 'fas',\n  iconName: 'palette',\n  icon: [512, 512, [127912], \"f53f\", \"M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3L344 320c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faArrowsTurnRight = {\n  prefix: 'fas',\n  iconName: 'arrows-turn-right',\n  icon: [448, 512, [], \"e4c0\", \"M297.4 9.4c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L338.7 160 128 160c-35.3 0-64 28.7-64 64l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32C0 153.3 57.3 96 128 96l210.7 0L297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm-96 256c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-53 43-96 96-96l146.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nconst faVest = {\n  prefix: 'fas',\n  iconName: 'vest',\n  icon: [448, 512, [], \"e085\", \"M207.1 237.4L151.2 69.7C168.6 79.7 192.6 88 224 88s55.4-8.3 72.8-18.3L226.5 280.6c-1.6 4.9-2.5 10-2.5 15.2L224 464c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-193.5c0-9.5-2.8-18.7-8.1-26.6l-47.9-71.8c-5.3-7.9-8.1-17.1-8.1-26.6l0-17.5 0-73.7 0-6.3c0-26.5-21.5-48-48-48l-4.5 0c-.2 0-.4 0-.6 0c-.4 0-.8 0-1.2 0C311 0 295.7 9.7 285.7 18.8C276.4 27.2 257.2 40 224 40s-52.4-12.8-61.7-21.2C152.3 9.7 137 0 118.3 0c-.4 0-.8 0-1.2 0c-.2 0-.4 0-.6 0L112 0C85.5 0 64 21.5 64 48l0 6.3L64 128l0 17.5c0 9.5-2.8 18.7-8.1 26.6L8.1 243.9C2.8 251.8 0 261.1 0 270.5L0 464c0 26.5 21.5 48 48 48l128 0c9.9 0 19-3 26.7-8.1C195.9 492.2 192 478.5 192 464l0-168.2c0-8.6 1.4-17.1 4.1-25.3l11-33.1zM347.3 356.7l48 48c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-48-48c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0zm-294.6 48l48-48c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-48 48c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6z\"]\n};\nconst faFerry = {\n  prefix: 'fas',\n  iconName: 'ferry',\n  icon: [576, 512, [], \"e4ea\", \"M224 0L352 0c17.7 0 32 14.3 32 32l75.1 0c20.6 0 31.6 24.3 18.1 39.8L456 96 120 96 98.8 71.8C85.3 56.3 96.3 32 116.9 32L192 32c0-17.7 14.3-32 32-32zM96 128l384 0c17.7 0 32 14.3 32 32l0 123.5c0 13.3-4.2 26.3-11.9 37.2l-51.4 71.9c-1.9 1.1-3.7 2.2-5.5 3.5c-15.5 10.7-34 18-51 19.9l-16.5 0c-17.1-1.8-35-9-50.8-19.9c-22.1-15.5-51.6-15.5-73.7 0c-14.8 10.2-32.5 18-50.6 19.9l-16.6 0c-17-1.8-35.6-9.2-51-19.9c-1.8-1.3-3.7-2.4-5.6-3.5L75.9 320.7C68.2 309.8 64 296.8 64 283.5L64 160c0-17.7 14.3-32 32-32zm32 64l0 96 320 0 0-96-320 0zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.3-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faArrowsDownToPeople = {\n  prefix: 'fas',\n  iconName: 'arrows-down-to-people',\n  icon: [640, 512, [], \"e4b9\", \"M144 0c-13.3 0-24 10.7-24 24l0 118.1L97 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23L168 24c0-13.3-10.7-24-24-24zM360 200a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM184 296a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm312 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 441.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 345.5l0 54.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-54.5 26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 441.5l0 38.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3L18.9 468.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 441.5 88 480c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5zM415 153l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23L520 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 118.1-23-23c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"]\n};\nconst faSeedling = {\n  prefix: 'fas',\n  iconName: 'seedling',\n  icon: [512, 512, [127793, \"sprout\"], \"f4d8\", \"M512 32c0 113.6-84.6 207.5-194.2 222c-7.1-53.4-30.6-101.6-65.3-139.3C290.8 46.3 364 0 448 0l32 0c17.7 0 32 14.3 32 32zM0 96C0 78.3 14.3 64 32 64l32 0c123.7 0 224 100.3 224 224l0 32 0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160C100.3 320 0 219.7 0 96z\"]\n};\nconst faSprout = faSeedling;\nconst faLeftRight = {\n  prefix: 'fas',\n  iconName: 'left-right',\n  icon: [512, 512, [8596, \"arrows-alt-h\"], \"f337\", \"M504.3 273.6c4.9-4.5 7.7-10.9 7.7-17.6s-2.8-13-7.7-17.6l-112-104c-7-6.5-17.2-8.2-25.9-4.4s-14.4 12.5-14.4 22l0 56-192 0 0-56c0-9.5-5.7-18.2-14.4-22s-18.9-2.1-25.9 4.4l-112 104C2.8 243 0 249.3 0 256s2.8 13 7.7 17.6l112 104c7 6.5 17.2 8.2 25.9 4.4s14.4-12.5 14.4-22l0-56 192 0 0 56c0 9.5 5.7 18.2 14.4 22s18.9 2.1 25.9-4.4l112-104z\"]\n};\nconst faArrowsAltH = faLeftRight;\nconst faBoxesPacking = {\n  prefix: 'fas',\n  iconName: 'boxes-packing',\n  icon: [640, 512, [], \"e4c7\", \"M256 48c0-26.5 21.5-48 48-48L592 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48l-210.7 0c1.8-5 2.7-10.4 2.7-16l0-242.7c18.6-6.6 32-24.4 32-45.3l0-32c0-26.5-21.5-48-48-48l-112 0 0-80zM571.3 347.3c6.2-6.2 6.2-16.4 0-22.6l-64-64c-6.2-6.2-16.4-6.2-22.6 0l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L480 310.6 480 432c0 8.8 7.2 16 16 16s16-7.2 16-16l0-121.4 36.7 36.7c6.2 6.2 16.4 6.2 22.6 0zM0 176c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16L16 224c-8.8 0-16-7.2-16-16l0-32zm352 80l0 224c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32l0-224 320 0zM144 320c-8.8 0-16 7.2-16 16s7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0z\"]\n};\nconst faCircleArrowLeft = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-left',\n  icon: [512, 512, [\"arrow-circle-left\"], \"f0a8\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM215 127c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-71 71L392 232c13.3 0 24 10.7 24 24s-10.7 24-24 24l-214.1 0 71 71c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L103 273c-9.4-9.4-9.4-24.6 0-33.9L215 127z\"]\n};\nconst faArrowCircleLeft = faCircleArrowLeft;\nconst faGroupArrowsRotate = {\n  prefix: 'fas',\n  iconName: 'group-arrows-rotate',\n  icon: [512, 512, [], \"e4f6\", \"M201.1 71.9c16.9-5 26.6-22.9 21.5-39.8s-22.9-26.6-39.8-21.5c-21.5 6.4-41.8 15.5-60.6 27C114.3 34 105.4 32 96 32C60.7 32 32 60.7 32 96c0 9.4 2 18.3 5.6 26.3c-11.5 18.7-20.6 39-27 60.6c-5 16.9 4.6 34.8 21.5 39.8s34.8-4.6 39.8-21.5c4.3-14.6 10.4-28.5 17.9-41.4c2 .2 4.1 .3 6.1 .3c35.3 0 64-28.7 64-64c0-2.1-.1-4.1-.3-6.1c12.9-7.5 26.8-13.6 41.4-17.9zm128-61.3c-16.9-5-34.8 4.6-39.8 21.5s4.6 34.8 21.5 39.8c14.6 4.3 28.5 10.4 41.4 17.9c-.2 2-.3 4.1-.3 6.1c0 35.3 28.7 64 64 64c2.1 0 4.1-.1 6.2-.3c7.5 12.9 13.6 26.8 17.9 41.4c5 16.9 22.9 26.6 39.8 21.5s26.6-22.9 21.5-39.8c-6.4-21.5-15.5-41.8-27-60.6c3.6-8 5.6-16.9 5.6-26.3c0-35.3-28.7-64-64-64c-9.4 0-18.3 2-26.3 5.6c-18.7-11.5-39-20.6-60.6-27zM71.9 310.9c-5-16.9-22.9-26.6-39.8-21.5s-26.6 22.9-21.5 39.8c6.4 21.5 15.5 41.8 27 60.6C34 397.7 32 406.6 32 416c0 35.3 28.7 64 64 64c9.4 0 18.3-2 26.3-5.6c18.7 11.5 39 20.6 60.6 27c16.9 5 34.8-4.6 39.8-21.5s-4.6-34.8-21.5-39.8c-14.6-4.3-28.5-10.4-41.4-17.9c.2-2 .3-4.1 .3-6.2c0-35.3-28.7-64-64-64c-2.1 0-4.1 .1-6.2 .3c-7.5-12.9-13.6-26.8-17.9-41.4zm429.4 18.3c5-16.9-4.6-34.8-21.5-39.8s-34.8 4.6-39.8 21.5c-4.3 14.6-10.4 28.5-17.9 41.4c-2-.2-4.1-.3-6.2-.3c-35.3 0-64 28.7-64 64c0 2.1 .1 4.1 .3 6.2c-12.9 7.5-26.8 13.6-41.4 17.9c-16.9 5-26.6 22.9-21.5 39.8s22.9 26.6 39.8 21.5c21.5-6.4 41.8-15.5 60.6-27c8 3.6 16.9 5.6 26.3 5.6c35.3 0 64-28.7 64-64c0-9.4-2-18.3-5.6-26.3c11.5-18.7 20.6-39 27-60.6zM192.8 256.8c0-15.6 5.6-29.9 14.9-41.1L223 231c6.6 6.6 17.8 1.9 17.8-7.4l0-60.5c0-5.7-4.7-10.4-10.4-10.4l-60.5 0c-9.3 0-13.9 11.2-7.4 17.8l11.2 11.2c-17.9 19.8-28.9 46.2-28.9 75.1c0 43.6 24.9 81.3 61.1 99.8c11.8 6 26.3 1.4 32.3-10.4s1.4-26.3-10.4-32.3c-20.8-10.6-34.9-32.2-34.9-57zm93.1-58.6c20.8 10.6 34.9 32.2 34.9 57c0 15.6-5.6 29.9-14.9 41.1L290.6 281c-6.6-6.6-17.8-1.9-17.8 7.4l0 60.5c0 5.7 4.7 10.4 10.4 10.4l60.5 0c9.3 0 13.9-11.2 7.4-17.8l-11.2-11.2c17.9-19.8 28.9-46.2 28.9-75.1c0-43.6-24.9-81.3-61.1-99.8c-11.8-6-26.3-1.4-32.3 10.4s-1.4 26.3 10.4 32.3z\"]\n};\nconst faBowlFood = {\n  prefix: 'fas',\n  iconName: 'bowl-food',\n  icon: [512, 512, [], \"e4c6\", \"M0 192c0-35.3 28.7-64 64-64c.5 0 1.1 0 1.6 0C73 91.5 105.3 64 144 64c15 0 29 4.1 40.9 11.2C198.2 49.6 225.1 32 256 32s57.8 17.6 71.1 43.2C339 68.1 353 64 368 64c38.7 0 71 27.5 78.4 64c.5 0 1.1 0 1.6 0c35.3 0 64 28.7 64 64c0 11.7-3.1 22.6-8.6 32L8.6 224C3.1 214.6 0 203.7 0 192zm0 91.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4z\"]\n};\nconst faCandyCane = {\n  prefix: 'fas',\n  iconName: 'candy-cane',\n  icon: [512, 512, [], \"f786\", \"M348.8 131.5c3.7-2.3 7.9-3.5 12.2-3.5c12.7 0 23 10.3 23 23l0 5.6c0 9.9-5.1 19.1-13.5 24.3L30.1 393.7C.1 412.5-9 451.9 9.7 481.9s58.2 39.1 88.2 20.4L438.4 289.5c45.8-28.6 73.6-78.8 73.6-132.8l0-5.6C512 67.6 444.4 0 361 0c-28.3 0-56 8-80.1 23L254.1 39.7c-30 18.7-39.1 58.2-20.4 88.2s58.2 39.1 88.2 20.4l26.8-16.8zM298.4 49.8c9.2-5.7 19.1-10.1 29.4-13.1L348 97.5c-5.7 1.4-11.2 3.7-16.3 6.8l-12.6 7.9L298.4 49.8zm88.5 52.7l46.2-46.2c8.5 6.5 16.1 14.1 22.6 22.6l-46.2 46.2c-5.1-9.6-13-17.5-22.6-22.6zm28.9 59.3l61.6 20.5c-2.2 10.5-5.8 20.7-10.5 30.2l-62-20.7c6.2-8.8 10.1-19.1 11-30.1zm-86.1 82.5l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zm-107.2 67l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zM119.3 375.7l60.4 37.7-30.2 18.9L89.1 394.6l30.2-18.9z\"]\n};\nconst faArrowDownWideShort = {\n  prefix: 'fas',\n  iconName: 'arrow-down-wide-short',\n  icon: [576, 512, [\"sort-amount-asc\", \"sort-amount-down\"], \"f160\", \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L320 96z\"]\n};\nconst faSortAmountAsc = faArrowDownWideShort;\nconst faSortAmountDown = faArrowDownWideShort;\nconst faCloudBolt = {\n  prefix: 'fas',\n  iconName: 'cloud-bolt',\n  icon: [512, 512, [127785, \"thunderstorm\"], \"f76c\", \"M0 224c0 53 43 96 96 96l47.2 0L290 202.5c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L333.7 320l18.3 0 64 0c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm330.1 3.6c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7l70.1 0L177.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7l-70.1 0 52.4-104.8c3.4-6.7 1.6-14.9-4.2-19.6z\"]\n};\nconst faThunderstorm = faCloudBolt;\nconst faTextSlash = {\n  prefix: 'fas',\n  iconName: 'text-slash',\n  icon: [640, 512, [\"remove-format\"], \"f87d\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L355.7 253.5 400.2 96 503 96 497 120.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l11-44.1C577.6 61.3 554.7 32 523.5 32L376.1 32l-.3 0L204.5 32c-22 0-41.2 15-46.6 36.4l-6.3 25.2L38.8 5.1zm168 131.7c.1-.3 .2-.7 .3-1L217 96l116.7 0L301.3 210.8l-94.5-74.1zM243.3 416L192 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-42.2 0 17.6-62.1L272.9 311 243.3 416z\"]\n};\nconst faRemoveFormat = faTextSlash;\nconst faFaceSmileWink = {\n  prefix: 'fas',\n  iconName: 'face-smile-wink',\n  icon: [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"]\n};\nconst faSmileWink = faFaceSmileWink;\nconst faFileWord = {\n  prefix: 'fas',\n  iconName: 'file-word',\n  icon: [384, 512, [], \"f1c2\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM111 257.1l26.8 89.2 31.6-90.3c3.4-9.6 12.5-16.1 22.7-16.1s19.3 6.4 22.7 16.1l31.6 90.3L273 257.1c3.8-12.7 17.2-19.9 29.9-16.1s19.9 17.2 16.1 29.9l-48 160c-3 10-12 16.9-22.4 17.1s-19.8-6.2-23.2-16.1L192 336.6l-33.3 95.3c-3.4 9.8-12.8 16.3-23.2 16.1s-19.5-7.1-22.4-17.1l-48-160c-3.8-12.7 3.4-26.1 16.1-29.9s26.1 3.4 29.9 16.1z\"]\n};\nconst faFilePowerpoint = {\n  prefix: 'fas',\n  iconName: 'file-powerpoint',\n  icon: [384, 512, [], \"f1c4\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM136 240l68 0c42 0 76 34 76 76s-34 76-76 76l-44 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56 0-104c0-13.3 10.7-24 24-24zm68 104c15.5 0 28-12.5 28-28s-12.5-28-28-28l-44 0 0 56 44 0z\"]\n};\nconst faArrowsLeftRight = {\n  prefix: 'fas',\n  iconName: 'arrows-left-right',\n  icon: [512, 512, [\"arrows-h\"], \"f07e\", \"M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"]\n};\nconst faArrowsH = faArrowsLeftRight;\nconst faHouseLock = {\n  prefix: 'fas',\n  iconName: 'house-lock',\n  icon: [640, 512, [], \"e510\", \"M384 480c0 11.7 3.1 22.6 8.6 32l-.6 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L490.7 166.3C447.2 181.7 416 223.2 416 272l0 24.6c-19.1 11.1-32 31.7-32 55.4l0 128zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faCloudArrowDown = {\n  prefix: 'fas',\n  iconName: 'cloud-arrow-down',\n  icon: [640, 512, [62337, \"cloud-download\", \"cloud-download-alt\"], \"f0ed\", \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-167l80 80c9.4 9.4 24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-39 39L344 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 134.1-39-39c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"]\n};\nconst faCloudDownload = faCloudArrowDown;\nconst faCloudDownloadAlt = faCloudArrowDown;\nconst faChildren = {\n  prefix: 'fas',\n  iconName: 'children',\n  icon: [640, 512, [], \"e4e1\", \"M160 0a64 64 0 1 1 0 128A64 64 0 1 1 160 0zM88 480l0-80-17.8 0c-10.9 0-18.6-10.7-15.2-21.1l31.1-93.4L57.5 323.3c-10.7 14.1-30.8 16.8-44.8 6.2s-16.8-30.7-6.2-44.8L65.4 207c22.4-29.6 57.5-47 94.6-47s72.2 17.4 94.6 47l58.9 77.7c10.7 14.1 7.9 34.2-6.2 44.8s-34.2 7.9-44.8-6.2l-28.6-37.8L265 378.9c3.5 10.4-4.3 21.1-15.2 21.1L232 400l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80-16 0 0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32zM480 0a64 64 0 1 1 0 128A64 64 0 1 1 480 0zm-8 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-179.5L395.1 321c-9.4 15-29.2 19.4-44.1 10s-19.4-29.2-10-44.1l51.7-82.1c17.6-27.9 48.3-44.9 81.2-44.9l12.3 0c33 0 63.7 16.9 81.2 44.9L619.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L552 300.5 552 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0z\"]\n};\nconst faChalkboard = {\n  prefix: 'fas',\n  iconName: 'chalkboard',\n  icon: [576, 512, [\"blackboard\"], \"f51b\", \"M96 32C60.7 32 32 60.7 32 96l0 288 64 0L96 96l384 0 0 288 64 0 0-288c0-35.3-28.7-64-64-64L96 32zM224 384l0 32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-32c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32z\"]\n};\nconst faBlackboard = faChalkboard;\nconst faUserLargeSlash = {\n  prefix: 'fas',\n  iconName: 'user-large-slash',\n  icon: [640, 512, [\"user-alt-slash\"], \"f4fa\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L381.9 274c48.5-23.2 82.1-72.7 82.1-130C464 64.5 399.5 0 320 0C250.4 0 192.4 49.3 178.9 114.9L38.8 5.1zM545.5 512L528 512 284.3 320l-59 0C136.2 320 64 392.2 64 481.3c0 17 13.8 30.7 30.7 30.7l450.6 0 .3 0z\"]\n};\nconst faUserAltSlash = faUserLargeSlash;\nconst faEnvelopeOpen = {\n  prefix: 'fas',\n  iconName: 'envelope-open',\n  icon: [512, 512, [62135], \"f2b6\", \"M64 208.1L256 65.9 448 208.1l0 47.4L289.5 373c-9.7 7.2-21.4 11-33.5 11s-23.8-3.9-33.5-11L64 255.5l0-47.4zM256 0c-12.1 0-23.8 3.9-33.5 11L25.9 156.7C9.6 168.8 0 187.8 0 208.1L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-239.9c0-20.3-9.6-39.4-25.9-51.4L289.5 11C279.8 3.9 268.1 0 256 0z\"]\n};\nconst faHandshakeSimpleSlash = {\n  prefix: 'fas',\n  iconName: 'handshake-simple-slash',\n  icon: [640, 512, [\"handshake-alt-slash\"], \"e05f\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.4-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352l41.8 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-76 0-4 0-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM0 176L0 304c0 26.5 21.5 48 48 48l108.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6L41.2 128.5C17.9 131.8 0 151.8 0 176z\"]\n};\nconst faHandshakeAltSlash = faHandshakeSimpleSlash;\nconst faMattressPillow = {\n  prefix: 'fas',\n  iconName: 'mattress-pillow',\n  icon: [640, 512, [], \"e525\", \"M256 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l192 0 0-384zm32 384l288 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L288 64l0 384zM64 160c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-192z\"]\n};\nconst faGuaraniSign = {\n  prefix: 'fas',\n  iconName: 'guarani-sign',\n  icon: [384, 512, [], \"e19a\", \"M192 0c-17.7 0-32 14.3-32 32l0 34.7C69.2 81.9 0 160.9 0 256s69.2 174.1 160 189.3l0 34.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-34.7c90.8-15.2 160-94.2 160-189.3c0-17.7-14.3-32-32-32l-128 0 0-92c22.1 5.7 41.8 17.1 57.6 32.6c12.6 12.4 32.9 12.2 45.3-.4s12.2-32.9-.5-45.3C299 92 263.5 73.3 224 66.7L224 32c0-17.7-14.3-32-32-32zM160 132L160 380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124zM224 380l0-92 92 0c-11.6 45-47 80.4-92 92z\"]\n};\nconst faArrowsRotate = {\n  prefix: 'fas',\n  iconName: 'arrows-rotate',\n  icon: [512, 512, [128472, \"refresh\", \"sync\"], \"f021\", \"M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160 352 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l111.5 0c0 0 0 0 0 0l.4 0c17.7 0 32-14.3 32-32l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1L16 432c0 17.7 14.3 32 32 32s32-14.3 32-32l0-35.1 17.6 17.5c0 0 0 0 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.8c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352l34.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48.4 288c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z\"]\n};\nconst faRefresh = faArrowsRotate;\nconst faSync = faArrowsRotate;\nconst faFireExtinguisher = {\n  prefix: 'fas',\n  iconName: 'fire-extinguisher',\n  icon: [512, 512, [129519], \"f134\", \"M500.3 7.3C507.7 13.3 512 22.4 512 32l0 96c0 9.6-4.3 18.7-11.7 24.7s-17.2 8.5-26.6 6.6l-160-32C301.5 124.9 292 115.7 289 104l-65 0 0 34.8c37.8 18 64 56.5 64 101.2l0 144L64 384l0-144c0-44.7 26.2-83.2 64-101.2l0-28.8c-36.2 11.1-66 36.9-82.3 70.5c-5.8 11.9-20.2 16.9-32.1 11.1S-3.3 171.4 2.5 159.5C26.7 109.8 72.7 72.6 128 60.4L128 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 24 65 0c3-11.7 12.5-20.9 24.7-23.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM288 416l0 32c0 35.3-28.7 64-64 64l-96 0c-35.3 0-64-28.7-64-64l0-32 224 0zM176 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faCruzeiroSign = {\n  prefix: 'fas',\n  iconName: 'cruzeiro-sign',\n  icon: [448, 512, [], \"e152\", \"M96 256c0-88.4 71.6-160 160-160c41 0 78.3 15.4 106.7 40.7c13.2 11.8 33.4 10.7 45.2-2.5s10.7-33.4-2.5-45.2c-39.6-35.5-92-57-149.3-57C132.3 32 32 132.3 32 256s100.3 224 224 224c57.4 0 109.7-21.6 149.3-57c13.2-11.8 14.3-32 2.5-45.2s-32-14.3-45.2-2.5C334.3 400.6 297 416 256 416l0-96 0-8.7c0-12.8 10.4-23.3 23.3-23.3c4.6 0 9.1 1.4 12.9 3.9l10.1 6.7c14.7 9.8 34.6 5.8 44.4-8.9s5.8-34.6-8.9-44.4l-10.1-6.7c-14.3-9.6-31.2-14.7-48.4-14.7c-12.4 0-24.2 2.6-34.9 7.3c-5.5-4.5-12.6-7.3-20.3-7.3c-17.7 0-32 14.3-32 32l0 55.3 0 8.7 0 82.7C135.5 378 96 321.6 96 256z\"]\n};\nconst faGreaterThanEqual = {\n  prefix: 'fas',\n  iconName: 'greater-than-equal',\n  icon: [448, 512, [], \"f532\", \"M52.1 93.7C35.7 87.1 27.7 68.5 34.3 52.1s25.2-24.4 41.6-17.8l320 128C408 167.1 416 178.9 416 192s-8 24.9-20.1 29.7l-320 128c-16.4 6.6-35-1.4-41.6-17.8s1.4-35 17.8-41.6L297.8 192 52.1 93.7zM416 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0z\"]\n};\nconst faShieldHalved = {\n  prefix: 'fas',\n  iconName: 'shield-halved',\n  icon: [512, 512, [\"shield-alt\"], \"f3ed\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z\"]\n};\nconst faShieldAlt = faShieldHalved;\nconst faBookAtlas = {\n  prefix: 'fas',\n  iconName: 'book-atlas',\n  icon: [448, 512, [\"atlas\"], \"f558\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM247.4 283.8c-3.7 3.7-6.2 4.2-7.4 4.2s-3.7-.5-7.4-4.2c-3.8-3.7-8-10-11.8-18.9c-6.2-14.5-10.8-34.3-12.2-56.9l63 0c-1.5 22.6-6 42.4-12.2 56.9c-3.8 8.9-8 15.2-11.8 18.9zm42.7-9.9c7.3-18.3 12-41.1 13.4-65.9l31.1 0c-4.7 27.9-21.4 51.7-44.5 65.9zm0-163.8c23.2 14.2 39.9 38 44.5 65.9l-31.1 0c-1.4-24.7-6.1-47.5-13.4-65.9zM368 192a128 128 0 1 0 -256 0 128 128 0 1 0 256 0zM145.3 208l31.1 0c1.4 24.7 6.1 47.5 13.4 65.9c-23.2-14.2-39.9-38-44.5-65.9zm31.1-32l-31.1 0c4.7-27.9 21.4-51.7 44.5-65.9c-7.3 18.3-12 41.1-13.4 65.9zm56.1-75.8c3.7-3.7 6.2-4.2 7.4-4.2s3.7 .5 7.4 4.2c3.8 3.7 8 10 11.8 18.9c6.2 14.5 10.8 34.3 12.2 56.9l-63 0c1.5-22.6 6-42.4 12.2-56.9c3.8-8.9 8-15.2 11.8-18.9z\"]\n};\nconst faAtlas = faBookAtlas;\nconst faVirus = {\n  prefix: 'fas',\n  iconName: 'virus',\n  icon: [512, 512, [], \"e074\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11.5c0 49.9-60.3 74.9-95.6 39.6L120.2 75C107.7 62.5 87.5 62.5 75 75s-12.5 32.8 0 45.3l8.2 8.2C118.4 163.7 93.4 224 43.5 224L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l11.5 0c49.9 0 74.9 60.3 39.6 95.6L75 391.8c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6l0 11.5c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11.5c0-49.9 60.3-74.9 95.6-39.6l8.2 8.2c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-8.2-8.2c-35.3-35.3-10.3-95.6 39.6-95.6l11.5 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-11.5 0c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C348.3 118.4 288 93.4 288 43.5L288 32zM176 224a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faEnvelopeCircleCheck = {\n  prefix: 'fas',\n  iconName: 'envelope-circle-check',\n  icon: [640, 512, [], \"e4e8\", \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0l57.4-43c23.9-59.8 79.7-103.3 146.3-109.8l13.9-10.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176 0 384c0 35.3 28.7 64 64 64l296.2 0C335.1 417.6 320 378.5 320 336c0-5.6 .3-11.1 .8-16.6l-26.4 19.8zM640 336a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 353.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faLayerGroup = {\n  prefix: 'fas',\n  iconName: 'layer-group',\n  icon: [576, 512, [], \"f5fd\", \"M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z\"]\n};\nconst faArrowsToDot = {\n  prefix: 'fas',\n  iconName: 'arrows-to-dot',\n  icon: [512, 512, [], \"e4be\", \"M256 0c17.7 0 32 14.3 32 32l0 32 32 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l32 0 0-32c0-17.7 14.3-32 32-32zM169.4 393.4l64-64c12.5-12.5 32.8-12.5 45.3 0l64 64c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9zM32 224l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c12.5 12.5 12.5 32.8 0 45.3l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3l64-64c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 32 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-64-64zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faArchway = {\n  prefix: 'fas',\n  iconName: 'archway',\n  icon: [512, 512, [], \"f557\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 64 0 0-128c0-53 43-96 96-96s96 43 96 96l0 128 64 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-288L32 128l0 288z\"]\n};\nconst faHeartCircleCheck = {\n  prefix: 'fas',\n  iconName: 'heart-circle-check',\n  icon: [576, 512, [], \"e4fd\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faHouseChimneyCrack = {\n  prefix: 'fas',\n  iconName: 'house-chimney-crack',\n  icon: [576, 512, [\"house-damage\"], \"f6f1\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-122.1 0L288 448l80.8-67.3c7.8-6.5 7.6-18.6-.4-24.9L250.6 263.2c-14.6-11.5-33.8 7-22.8 22L288 368l-85.5 71.2c-6.1 5-7.5 13.8-3.5 20.5L230.4 512l-102.3 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24z\"]\n};\nconst faHouseDamage = faHouseChimneyCrack;\nconst faFileZipper = {\n  prefix: 'fas',\n  iconName: 'file-zipper',\n  icon: [384, 512, [\"file-archive\"], \"f1c6\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM96 48c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8l14.8 0c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0z\"]\n};\nconst faFileArchive = faFileZipper;\nconst faSquare = {\n  prefix: 'fas',\n  iconName: 'square',\n  icon: [448, 512, [9632, 9723, 9724, 61590], \"f0c8\", \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z\"]\n};\nconst faMartiniGlassEmpty = {\n  prefix: 'fas',\n  iconName: 'martini-glass-empty',\n  icon: [512, 512, [\"glass-martini\"], \"f000\", \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3 224 448l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-178.7L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0L32 0zM256 210.7L109.3 64l293.5 0L256 210.7z\"]\n};\nconst faGlassMartini = faMartiniGlassEmpty;\nconst faCouch = {\n  prefix: 'fas',\n  iconName: 'couch',\n  icon: [640, 512, [], \"f4b8\", \"M64 160C64 89.3 121.3 32 192 32l256 0c70.7 0 128 57.3 128 128l0 33.6c-36.5 7.4-64 39.7-64 78.4l0 48-384 0 0-48c0-38.7-27.5-71-64-78.4L64 160zM544 272c0-20.9 13.4-38.7 32-45.3c5-1.8 10.4-2.7 16-2.7c26.5 0 48 21.5 48 48l0 176c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32L96 448c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32L0 272c0-26.5 21.5-48 48-48c5.6 0 11 1 16 2.7c18.6 6.6 32 24.4 32 45.3l0 48 0 32 32 0 384 0 32 0 0-32 0-48z\"]\n};\nconst faCediSign = {\n  prefix: 'fas',\n  iconName: 'cedi-sign',\n  icon: [384, 512, [], \"e0df\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 34.7C101.2 81.9 32 160.9 32 256s69.2 174.1 160 189.3l0 34.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-34.7c30.9-5.2 59.2-17.7 83.2-35.8c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-13.2 9.9-28.3 17.3-44.8 21.6L256 132c16.4 4.2 31.6 11.6 44.8 21.6c14.1 10.6 34.2 7.8 44.8-6.4s7.8-34.2-6.4-44.8c-24-18-52.4-30.6-83.2-35.8L256 32zM192 132L192 380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124z\"]\n};\nconst faItalic = {\n  prefix: 'fas',\n  iconName: 'italic',\n  icon: [384, 512, [], \"f033\", \"M128 64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-58.7 0L160 416l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l58.7 0L224 96l-64 0c-17.7 0-32-14.3-32-32z\"]\n};\nconst faTableCellsColumnLock = {\n  prefix: 'fas',\n  iconName: 'table-cells-column-lock',\n  icon: [640, 512, [], \"e678\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zm208 0l0 64 88 0 0-64-88 0zm240 0l-88 0 0 64 88 0 0-64zM208 224l0 64 88 0 0-64-88 0zm0 128l0 64 88 0 0-64-88 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faChurch = {\n  prefix: 'fas',\n  iconName: 'church',\n  icon: [640, 512, [9962], \"f51d\", \"M344 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 46.4L183.3 210c-14.5 8.7-23.3 24.3-23.3 41.2L160 512l96 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 96 0 0-260.8c0-16.9-8.8-32.5-23.3-41.2L344 142.4 344 96l32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-24zM24.9 330.3C9.5 338.8 0 354.9 0 372.4L0 464c0 26.5 21.5 48 48 48l80 0 0-238.4L24.9 330.3zM592 512c26.5 0 48-21.5 48-48l0-91.6c0-17.5-9.5-33.6-24.9-42.1L512 273.6 512 512l80 0z\"]\n};\nconst faCommentsDollar = {\n  prefix: 'fas',\n  iconName: 'comments-dollar',\n  icon: [640, 512, [], \"f653\", \"M416 176c0 97.2-93.1 176-208 176c-38.2 0-73.9-8.7-104.7-23.9c-7.5 4-16 7.9-25.2 11.4C59.8 346.4 37.8 352 16 352c-6.9 0-13.1-4.5-15.2-11.1s.2-13.8 5.8-17.9c0 0 0 0 0 0s0 0 0 0l.2-.2c.2-.2 .6-.4 1.1-.8c1-.8 2.5-2 4.3-3.7c3.6-3.3 8.5-8.1 13.3-14.3c5.5-7 10.7-15.4 14.2-24.7C14.7 250.3 0 214.6 0 176C0 78.8 93.1 0 208 0S416 78.8 416 176zM231.5 383C348.9 372.9 448 288.3 448 176c0-5.2-.2-10.4-.6-15.5C555.1 167.1 640 243.2 640 336c0 38.6-14.7 74.3-39.6 103.4c3.5 9.4 8.7 17.7 14.2 24.7c4.8 6.2 9.7 11 13.3 14.3c1.8 1.6 3.3 2.9 4.3 3.7c.5 .4 .9 .7 1.1 .8l.2 .2s0 0 0 0s0 0 0 0c5.6 4.1 7.9 11.3 5.8 17.9c-2.1 6.6-8.3 11.1-15.2 11.1c-21.8 0-43.8-5.6-62.1-12.5c-9.2-3.5-17.8-7.4-25.2-11.4C505.9 503.3 470.2 512 432 512c-95.6 0-176.2-54.6-200.5-129zM228 72c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7L228 72z\"]\n};\nconst faDemocrat = {\n  prefix: 'fas',\n  iconName: 'democrat',\n  icon: [640, 512, [], \"f747\", \"M64 32c0-8.9 3.8-20.9 6.2-27.3C71.2 1.8 74 0 77 0c1.9 0 3.8 .7 5.2 2.1L128 45.7 173.8 2.1C175.2 .7 177.1 0 179 0c3 0 5.8 1.8 6.8 4.7c2.4 6.5 6.2 18.4 6.2 27.3c0 26.5-21.9 42-29.5 46.6l76.2 72.6c6 5.7 13.9 8.8 22.1 8.8L480 160l32 0c40.3 0 78.2 19 102.4 51.2l19.2 25.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4l-19.2-25.6c-5.3-7-11.8-12.8-19.2-17l0 87.4-352 0-40.4-94.3c-3.9-9.2-15.3-12.6-23.6-7l-42.1 28c-9.1 6.1-19.7 9.3-30.7 9.3l-2 0C23.9 256 0 232.1 0 202.7c0-12.1 4.1-23.8 11.7-33.3L87.6 74.6C78.1 67.4 64 53.2 64 32zM448 352l96 0 0 64 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64-160 0 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64 0-64 96 0 160 0zM260.9 210.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.3-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5zM368.1 208c-2 0-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5c-.9-1.8-2.8-2.9-4.8-2.9zm116.8 2.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5z\"]\n};\nconst faZ = {\n  prefix: 'fas',\n  iconName: 'z',\n  icon: [384, 512, [122], \"5a\", \"M0 64C0 46.3 14.3 32 32 32l320 0c12.4 0 23.7 7.2 29 18.4s3.6 24.5-4.4 34.1L100.3 416 352 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-12.4 0-23.7-7.2-29-18.4s-3.6-24.5 4.4-34.1L283.7 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst faPersonSkiing = {\n  prefix: 'fas',\n  iconName: 'person-skiing',\n  icon: [512, 512, [9975, \"skiing\"], \"f7c9\", \"M380.7 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM2.7 268.9c6.1-11.8 20.6-16.3 32.4-10.2L232.7 361.3l46.2-69.2-75.1-75.1c-14.6-14.6-20.4-33.9-18.4-52.1l108.8 52 39.3 39.3c16.2 16.2 18.7 41.5 6 60.6L289.8 391l128.7 66.8c13.6 7.1 29.8 7.2 43.6 .3l15.2-7.6c11.9-5.9 26.3-1.1 32.2 10.7s1.1 26.3-10.7 32.2l-15.2 7.6c-27.5 13.7-59.9 13.5-87.2-.7L12.9 301.3C1.2 295.2-3.4 280.7 2.7 268.9zM118.9 65.6L137 74.2l8.7-17.4c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-8.5 16.9 54.7 26.2c1.5-.7 3.1-1.4 4.7-2.1l83.4-33.4c34.2-13.7 72.8 4.2 84.5 39.2l17.1 51.2 52.1 26.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-58.1-29c-11.4-5.7-20-15.7-24.1-27.8l-5.8-17.3-27.3 12.1-6.8 3-6.7-3.2L151.5 116.7l-9.2 18.4c-4 7.9-13.6 11.1-21.5 7.2s-11.1-13.6-7.2-21.5l9-18-17.6-8.4c-8-3.8-11.3-13.4-7.5-21.3s13.4-11.3 21.3-7.5z\"]\n};\nconst faSkiing = faPersonSkiing;\nconst faRoadLock = {\n  prefix: 'fas',\n  iconName: 'road-lock',\n  icon: [640, 512, [], \"e567\", \"M288 32l-74.8 0c-27.1 0-51.3 17.1-60.3 42.6L35.1 407.2c-2.1 5.9-3.1 12-3.1 18.2C32 455.5 56.5 480 86.6 480L288 480l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64 32 0 0-128c0-23.7 12.9-44.4 32-55.4l0-24.6c0-58.3 44.6-106.2 101.5-111.5L487.1 74.6C478 49.1 453.9 32 426.8 32L352 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm176 16c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faA = {\n  prefix: 'fas',\n  iconName: 'a',\n  icon: [384, 512, [97], \"41\", \"M221.5 51.7C216.6 39.8 204.9 32 192 32s-24.6 7.8-29.5 19.7l-120 288-40 96c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L93.3 384l197.3 0 31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-40-96-120-288zM264 320l-144 0 72-172.8L264 320z\"]\n};\nconst faTemperatureArrowDown = {\n  prefix: 'fas',\n  iconName: 'temperature-arrow-down',\n  icon: [576, 512, [\"temperature-down\"], \"e03f\", \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L128 112zM176 0C114.1 0 64 50.1 64 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L288 112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3l0-50.7c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 50.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zm336-64l-32 0 0-288c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 288-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c6 6 14.1 9.4 22.6 9.4s16.6-3.4 22.6-9.4l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8z\"]\n};\nconst faTemperatureDown = faTemperatureArrowDown;\nconst faFeatherPointed = {\n  prefix: 'fas',\n  iconName: 'feather-pointed',\n  icon: [512, 512, [\"feather-alt\"], \"f56b\", \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l74.8-74.8c7.4 4.6 15.3 8.2 23.8 10.5C200.3 452.8 270 454.5 338 409.4c12.2-8.1 5.8-25.4-8.8-25.4l-16.1 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l97.7-29.3c3.4-1 6.4-3.1 8.4-6.1c4.4-6.4 8.6-12.9 12.6-19.6c6.2-10.3-1.5-23-13.5-23l-38.6 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l80.9-24.3c4.6-1.4 8.4-4.8 10.2-9.3C494.5 163 507.8 86.1 511.9 36.8c.8-9.9-3-19.6-10-26.6s-16.7-10.8-26.6-10C391.5 7 228.5 40.5 137.4 131.6C57.3 211.7 56.7 302.3 71.3 356.4c2.1 7.9 12 9.6 17.8 3.8L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"]\n};\nconst faFeatherAlt = faFeatherPointed;\nconst faP = {\n  prefix: 'fas',\n  iconName: 'p',\n  icon: [320, 512, [112], \"50\", \"M0 96C0 60.7 28.7 32 64 32l96 0c88.4 0 160 71.6 160 160s-71.6 160-160 160l-96 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 320 0 96zM64 288l96 0c53 0 96-43 96-96s-43-96-96-96L64 96l0 192z\"]\n};\nconst faSnowflake = {\n  prefix: 'fas',\n  iconName: 'snowflake',\n  icon: [448, 512, [10052, 10054], \"f2dc\", \"M224 0c17.7 0 32 14.3 32 32l0 30.1 15-15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-49 49 0 70.3 61.4-35.8 17.7-66.1c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4l-5.2 19.3 23.6-13.8c15.3-8.9 34.9-3.7 43.8 11.5s3.8 34.9-11.5 43.8l-25.3 14.8 21.7 5.8c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-67.7-18.1L287.5 256l60.9 35.5 67.7-18.1c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4l-21.7 5.8 25.3 14.8c15.3 8.9 20.4 28.5 11.5 43.8s-28.5 20.4-43.8 11.5l-23.6-13.8 5.2 19.3c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-17.7-66.1L256 311.7l0 70.3 49 49c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15 0 30.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-30.1-15 15c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l49-49 0-70.3-61.4 35.8-17.7 66.1c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4l5.2-19.3L48.1 395.6c-15.3 8.9-34.9 3.7-43.8-11.5s-3.7-34.9 11.5-43.8l25.3-14.8-21.7-5.8c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l67.7 18.1L160.5 256 99.6 220.5 31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4l21.7-5.8L15.9 171.6C.6 162.7-4.5 143.1 4.4 127.9s28.5-20.4 43.8-11.5l23.6 13.8-5.2-19.3c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l17.7 66.1L192 200.3l0-70.3L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l15 15L192 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faNewspaper = {\n  prefix: 'fas',\n  iconName: 'newspaper',\n  icon: [512, 512, [128240], \"f1ea\", \"M96 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L80 480c-44.2 0-80-35.8-80-80L0 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 272c0 8.8 7.2 16 16 16s16-7.2 16-16L96 96zm64 24l0 80c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24L184 96c-13.3 0-24 10.7-24 24zm208-8c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zM160 304c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faRectangleAd = {\n  prefix: 'fas',\n  iconName: 'rectangle-ad',\n  icon: [576, 512, [\"ad\"], \"f641\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM229.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7L253.2 328l-90.3 0-5.4 10.7c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zM208 237.7L186.8 280l42.3 0L208 237.7zM392 256a24 24 0 1 0 0 48 24 24 0 1 0 0-48zm24-43.9l0-28.1c0-13.3 10.7-24 24-24s24 10.7 24 24l0 96 0 48c0 13.3-10.7 24-24 24c-6.6 0-12.6-2.7-17-7c-9.4 4.5-19.9 7-31 7c-39.8 0-72-32.2-72-72s32.2-72 72-72c8.4 0 16.5 1.4 24 4.1z\"]\n};\nconst faAd = faRectangleAd;\nconst faCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-right',\n  icon: [512, 512, [\"arrow-circle-right\"], \"f0a9\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z\"]\n};\nconst faArrowCircleRight = faCircleArrowRight;\nconst faFilterCircleXmark = {\n  prefix: 'fas',\n  iconName: 'filter-circle-xmark',\n  icon: [576, 512, [], \"e17b\", \"M3.9 22.9C10.5 8.9 24.5 0 40 0L472 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"]\n};\nconst faLocust = {\n  prefix: 'fas',\n  iconName: 'locust',\n  icon: [576, 512, [], \"e520\", \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0c98.7 0 180.6 71.4 197 165.4c-9-3.5-18.8-5.4-29-5.4l-64.2 0-41.8-97.5c-3.4-7.9-10.8-13.4-19.3-14.4s-17 2.7-22.1 9.6l-40.9 55.5-21.7-50.7c-3.3-7.8-10.5-13.2-18.9-14.3s-16.7 2.3-22 8.9l-240 304c-8.2 10.4-6.4 25.5 4 33.7s25.5 6.4 33.7-4l79.4-100.5 43 16.4-40.5 55c-7.9 10.7-5.6 25.7 5.1 33.6s25.7 5.6 33.6-5.1L215.1 400l74.5 0-29.3 42.3c-7.5 10.9-4.8 25.8 6.1 33.4s25.8 4.8 33.4-6.1L348 400l80.4 0 38.8 67.9c6.6 11.5 21.2 15.5 32.7 8.9s15.5-21.2 8.9-32.7L483.6 400l12.4 0c44.1 0 79.8-35.7 80-79.7c0-.1 0-.2 0-.3l0-40C576 143 465 32 328 32l-16 0zm50.5 168l17.1 40L333 240l29.5-40zm-87.7 38.1l-1.4 1.9-48.2 0 32.7-41.5 16.9 39.5zM88.8 240C57.4 240 32 265.4 32 296.8c0 15.5 6.3 30 16.9 40.4L126.7 240l-37.9 0zM496 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faSort = {\n  prefix: 'fas',\n  iconName: 'sort',\n  icon: [320, 512, [\"unsorted\"], \"f0dc\", \"M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8L32 224c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z\"]\n};\nconst faUnsorted = faSort;\nconst faListOl = {\n  prefix: 'fas',\n  iconName: 'list-ol',\n  icon: [512, 512, [\"list-1-2\", \"list-numeric\"], \"f0cb\", \"M24 56c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24l0 120 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-96-8 0C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432l33.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-88 0c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faList12 = faListOl;\nconst faListNumeric = faListOl;\nconst faPersonDressBurst = {\n  prefix: 'fas',\n  iconName: 'person-dress-burst',\n  icon: [640, 512, [], \"e544\", \"M528 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM390.2 384l17.8 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 16 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 17.8 0c10.9 0 18.6-10.7 15.2-21.1L546.7 248.1l33.9 56.3c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-53.6-89.2c-20.2-33.7-56.7-54.3-96-54.3l-11.6 0c-39.3 0-75.7 20.6-96 54.3l-53.6 89.2c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9l33.9-56.3L375 362.9c-3.5 10.4 4.3 21.1 15.2 21.1zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.4-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"]\n};\nconst faMoneyCheckDollar = {\n  prefix: 'fas',\n  iconName: 'money-check-dollar',\n  icon: [576, 512, [\"money-check-alt\"], \"f53d\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zM272 192l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM256 304c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16zM164 152l0 13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9l0 13.8c0 11-9 20-20 20s-20-9-20-20l0-14.6c-10.3-2.2-20-5.5-28.2-8.4c0 0 0 0 0 0s0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5l0-14c0-11 9-20 20-20s20 9 20 20z\"]\n};\nconst faMoneyCheckAlt = faMoneyCheckDollar;\nconst faVectorSquare = {\n  prefix: 'fas',\n  iconName: 'vector-square',\n  icon: [448, 512, [], \"f5cb\", \"M368 80l32 0 0 32-32 0 0-32zM352 32c-17.7 0-32 14.3-32 32L128 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64l0 64c0 17.7 14.3 32 32 32l0 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l192 0c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-192c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zM96 160c17.7 0 32-14.3 32-32l192 0c0 17.7 14.3 32 32 32l0 192c-17.7 0-32 14.3-32 32l-192 0c0-17.7-14.3-32-32-32l0-192zM48 400l32 0 0 32-32 0 0-32zm320 32l0-32 32 0 0 32-32 0zM48 112l0-32 32 0 0 32-32 0z\"]\n};\nconst faBreadSlice = {\n  prefix: 'fas',\n  iconName: 'bread-slice',\n  icon: [512, 512, [], \"f7ec\", \"M256 32C192 32 0 64 0 192c0 35.3 28.7 64 64 64V432c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V256c35.3 0 64-28.7 64-64C512 64 320 32 256 32z\"]\n};\nconst faLanguage = {\n  prefix: 'fas',\n  iconName: 'language',\n  icon: [640, 512, [], \"f1ab\", \"M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z\"]\n};\nconst faFaceKissWinkHeart = {\n  prefix: 'fas',\n  iconName: 'face-kiss-wink-heart',\n  icon: [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M498 339.7c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-22.9-89.3c-10-39 11.8-80.9 51.8-92.1c37.2-10.4 73.8 10.1 87.5 44c12.7-1.6 25.1 .4 36.2 5zM296 332c0 6.9-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C258.7 443.1 241.4 448 224 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.6-.4-.3-.2-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm194.8 57.6c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\"]\n};\nconst faKissWinkHeart = faFaceKissWinkHeart;\nconst faFilter = {\n  prefix: 'fas',\n  iconName: 'filter',\n  icon: [512, 512, [], \"f0b0\", \"M3.9 54.9C10.5 40.9 24.5 32 40 32l432 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9 320 448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z\"]\n};\nconst faQuestion = {\n  prefix: 'fas',\n  iconName: 'question',\n  icon: [320, 512, [10067, 10068, 61736], \"3f\", \"M80 160c0-35.3 28.7-64 64-64l32 0c35.3 0 64 28.7 64 64l0 3.6c0 21.8-11.1 42.1-29.4 53.8l-42.2 27.1c-25.2 16.2-40.4 44.1-40.4 74l0 1.4c0 17.7 14.3 32 32 32s32-14.3 32-32l0-1.4c0-8.2 4.2-15.8 11-20.2l42.2-27.1c36.6-23.6 58.8-64.1 58.8-107.7l0-3.6c0-70.7-57.3-128-128-128l-32 0C73.3 32 16 89.3 16 160c0 17.7 14.3 32 32 32s32-14.3 32-32zm80 320a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faFileSignature = {\n  prefix: 'fas',\n  iconName: 'file-signature',\n  icon: [576, 512, [], \"f573\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-19.3c-2.7 1.1-5.4 2-8.2 2.7l-60.1 15c-3 .7-6 1.2-9 1.4c-.9 .1-1.8 .2-2.7 .2l-64 0c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 381l-9.8 32.8c-6.1 20.3-24.8 34.2-46 34.2L80 448c-8.8 0-16-7.2-16-16s7.2-16 16-16l8.2 0c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.8 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8 8.9 0c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7L384 203.6l0-43.6-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM549.8 139.7c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM311.9 321c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L512.1 262.7l-71-71L311.9 321z\"]\n};\nconst faUpDownLeftRight = {\n  prefix: 'fas',\n  iconName: 'up-down-left-right',\n  icon: [512, 512, [\"arrows-alt\"], \"f0b2\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 96-96 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 96 0 0 96-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-96 96 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-96 0 0-96 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"]\n};\nconst faArrowsAlt = faUpDownLeftRight;\nconst faHouseChimneyUser = {\n  prefix: 'fas',\n  iconName: 'house-chimney-user',\n  icon: [576, 512, [], \"e065\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185l0-121c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l320.4 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0zM288 160a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM176 400c0-44.2 35.8-80 80-80l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faHandHoldingHeart = {\n  prefix: 'fas',\n  iconName: 'hand-holding-heart',\n  icon: [576, 512, [], \"f4be\", \"M163.9 136.9c-29.4-29.8-29.4-78.2 0-108s77-29.8 106.4 0l17.7 18 17.7-18c29.4-29.8 77-29.8 106.4 0s29.4 78.2 0 108L310.5 240.1c-6.2 6.3-14.3 9.4-22.5 9.4s-16.3-3.1-22.5-9.4L163.9 136.9zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faPuzzlePiece = {\n  prefix: 'fas',\n  iconName: 'puzzle-piece',\n  icon: [512, 512, [129513], \"f12e\", \"M192 104.8c0-9.2-5.8-17.3-13.2-22.8C167.2 73.3 160 61.3 160 48c0-26.5 28.7-48 64-48s64 21.5 64 48c0 13.3-7.2 25.3-18.8 34c-7.4 5.5-13.2 13.6-13.2 22.8c0 12.8 10.4 23.2 23.2 23.2l56.8 0c26.5 0 48 21.5 48 48l0 56.8c0 12.8 10.4 23.2 23.2 23.2c9.2 0 17.3-5.8 22.8-13.2c8.7-11.6 20.7-18.8 34-18.8c26.5 0 48 28.7 48 64s-21.5 64-48 64c-13.3 0-25.3-7.2-34-18.8c-5.5-7.4-13.6-13.2-22.8-13.2c-12.8 0-23.2 10.4-23.2 23.2L384 464c0 26.5-21.5 48-48 48l-56.8 0c-12.8 0-23.2-10.4-23.2-23.2c0-9.2 5.8-17.3 13.2-22.8c11.6-8.7 18.8-20.7 18.8-34c0-26.5-28.7-48-64-48s-64 21.5-64 48c0 13.3 7.2 25.3 18.8 34c7.4 5.5 13.2 13.6 13.2 22.8c0 12.8-10.4 23.2-23.2 23.2L48 512c-26.5 0-48-21.5-48-48L0 343.2C0 330.4 10.4 320 23.2 320c9.2 0 17.3 5.8 22.8 13.2C54.7 344.8 66.7 352 80 352c26.5 0 48-28.7 48-64s-21.5-64-48-64c-13.3 0-25.3 7.2-34 18.8C40.5 250.2 32.4 256 23.2 256C10.4 256 0 245.6 0 232.8L0 176c0-26.5 21.5-48 48-48l120.8 0c12.8 0 23.2-10.4 23.2-23.2z\"]\n};\nconst faMoneyCheck = {\n  prefix: 'fas',\n  iconName: 'money-check',\n  icon: [576, 512, [], \"f53c\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm48 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM96 336c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-352 0c-8.8 0-16-7.2-16-16zM376 160l80 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24z\"]\n};\nconst faStarHalfStroke = {\n  prefix: 'fas',\n  iconName: 'star-half-stroke',\n  icon: [576, 512, [\"star-half-alt\"], \"f5c0\", \"M288 376.4l.1-.1 26.4 14.1 85.2 45.5-16.5-97.6-4.8-28.7 20.7-20.5 70.1-69.3-96.1-14.2-29.3-4.3-12.9-26.6L288.1 86.9l-.1 .3 0 289.2zm175.1 98.3c2 12-3 24.2-12.9 31.3s-23 8-33.8 2.3L288.1 439.8 159.8 508.3C149 514 135.9 513.1 126 506s-14.9-19.3-12.9-31.3L137.8 329 33.6 225.9c-8.6-8.5-11.7-21.2-7.9-32.7s13.7-19.9 25.7-21.7L195 150.3 259.4 18c5.4-11 16.5-18 28.8-18s23.4 7 28.8 18l64.3 132.3 143.6 21.2c12 1.8 22 10.2 25.7 21.7s.7 24.2-7.9 32.7L438.5 329l24.6 145.7z\"]\n};\nconst faStarHalfAlt = faStarHalfStroke;\nconst faCode = {\n  prefix: 'fas',\n  iconName: 'code',\n  icon: [640, 512, [], \"f121\", \"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z\"]\n};\nconst faWhiskeyGlass = {\n  prefix: 'fas',\n  iconName: 'whiskey-glass',\n  icon: [512, 512, [129347, \"glass-whiskey\"], \"f7a0\", \"M32 32c-9.3 0-18.1 4-24.2 11.1S-1 59.4 .3 68.6l50 342.9c5.7 39.3 39.4 68.5 79.2 68.5l253 0c39.7 0 73.4-29.1 79.2-68.5l50-342.9c1.3-9.2-1.4-18.5-7.5-25.5S489.3 32 480 32L32 32zM87.7 224L69 96l374 0L424.3 224 87.7 224z\"]\n};\nconst faGlassWhiskey = faWhiskeyGlass;\nconst faBuildingCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'building-circle-exclamation',\n  icon: [640, 512, [], \"e4d3\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faMagnifyingGlassChart = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-chart',\n  icon: [512, 512, [], \"e522\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zm-312 8l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80-96l0 160c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80 64l0 96c0 13.3 10.7 24 24 24s24-10.7 24-24l0-96c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nconst faArrowUpRightFromSquare = {\n  prefix: 'fas',\n  iconName: 'arrow-up-right-from-square',\n  icon: [512, 512, [\"external-link\"], \"f08e\", \"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l82.7 0L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3l0 82.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-17.7-14.3-32-32-32L320 0zM80 32C35.8 32 0 67.8 0 112L0 432c0 44.2 35.8 80 80 80l320 0c44.2 0 80-35.8 80-80l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-320c0-8.8 7.2-16 16-16l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"]\n};\nconst faExternalLink = faArrowUpRightFromSquare;\nconst faCubesStacked = {\n  prefix: 'fas',\n  iconName: 'cubes-stacked',\n  icon: [448, 512, [], \"e4e6\", \"M192 64l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32zM82.7 207c-15.3 8.8-20.5 28.4-11.7 43.7l32 55.4c8.8 15.3 28.4 20.5 43.7 11.7l55.4-32c15.3-8.8 20.5-28.4 11.7-43.7l-32-55.4c-8.8-15.3-28.4-20.5-43.7-11.7L82.7 207zM288 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zm64 160c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zM160 384l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32zM32 352c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0z\"]\n};\nconst faWonSign = {\n  prefix: 'fas',\n  iconName: 'won-sign',\n  icon: [512, 512, [8361, \"krw\", \"won\"], \"f159\", \"M62.4 53.9C56.8 37.1 38.6 28.1 21.9 33.6S-3.9 57.4 1.6 74.1L51.6 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l40.9 0 56.7 170.1c4.5 13.5 17.4 22.4 31.6 21.9s26.4-10.4 29.8-24.2L233 288l46 0L321 455.8c3.4 13.8 15.6 23.7 29.8 24.2s27.1-8.4 31.6-21.9L439.1 288l40.9 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-19.6 0 50-149.9c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2L392.9 224l-64 0L287 56.2C283.5 42 270.7 32 256 32s-27.5 10-31 24.2L183 224l-64 0L62.4 53.9zm78 234.1l26.6 0-11.4 45.6L140.4 288zM249 224l7-28.1 7 28.1-14 0zm96 64l26.6 0-15.2 45.6L345 288z\"]\n};\nconst faKrw = faWonSign;\nconst faWon = faWonSign;\nconst faVirusCovid = {\n  prefix: 'fas',\n  iconName: 'virus-covid',\n  icon: [512, 512, [], \"e4a8\", \"M192 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 33.6c30.7 4.2 58.8 16.3 82.3 34.1L386.1 92 374.8 80.6c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l56.6 56.6c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L420 125.9l-23.8 23.8c17.9 23.5 29.9 51.7 34.1 82.3l33.6 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-33.6 0c-4.2 30.7-16.3 58.8-34.1 82.3L420 386.1l11.3-11.3c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-56.6 56.6c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L386.1 420l-23.8-23.8c-23.5 17.9-51.7 29.9-82.3 34.1l0 33.6 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-33.6c-30.7-4.2-58.8-16.3-82.3-34.1L125.9 420l11.3 11.3c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L46.7 408.7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L92 386.1l23.8-23.8C97.9 338.8 85.8 310.7 81.6 280L48 280l0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 33.6 0c4.2-30.7 16.3-58.8 34.1-82.3L92 125.9 80.6 137.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l56.6-56.6c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L125.9 92l23.8 23.8c23.5-17.9 51.7-29.9 82.3-34.1L232 48l-16 0c-13.3 0-24-10.7-24-24zm48 200a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm64 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faAustralSign = {\n  prefix: 'fas',\n  iconName: 'austral-sign',\n  icon: [448, 512, [], \"e0a9\", \"M253.5 51.7C248.6 39.8 236.9 32 224 32s-24.6 7.8-29.5 19.7L122.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0L82.7 320 32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l24 0L34.5 435.7c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L125.3 384l197.3 0 31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8L392 384l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0L352 288l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-90.7 0L253.5 51.7zM256 224l-64 0 32-76.8L256 224zm-90.7 64l117.3 0L296 320l-144 0 13.3-32z\"]\n};\nconst faF = {\n  prefix: 'fas',\n  iconName: 'f',\n  icon: [320, 512, [102], \"46\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 224 64 96l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32z\"]\n};\nconst faLeaf = {\n  prefix: 'fas',\n  iconName: 'leaf',\n  icon: [512, 512, [], \"f06c\", \"M272 96c-78.6 0-145.1 51.5-167.7 122.5c33.6-17 71.5-26.5 111.7-26.5l88 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0-72 0s0 0 0 0c-16.6 0-32.7 1.9-48.3 5.4c-25.9 5.9-49.9 16.4-71.4 30.7c0 0 0 0 0 0C38.3 298.8 0 364.9 0 440l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16c0-48.7 20.7-92.5 53.8-123.2C121.6 392.3 190.3 448 272 448l1 0c132.1-.7 239-130.9 239-291.4c0-42.6-7.5-83.1-21.1-119.6c-2.6-6.9-12.7-6.6-16.2-.1C455.9 72.1 418.7 96 376 96L272 96z\"]\n};\nconst faRoad = {\n  prefix: 'fas',\n  iconName: 'road',\n  icon: [576, 512, [128739], \"f018\", \"M256 32l-74.8 0c-27.1 0-51.3 17.1-60.3 42.6L3.1 407.2C1.1 413 0 419.2 0 425.4C0 455.5 24.5 480 54.6 480L256 480l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64 201.4 0c30.2 0 54.6-24.5 54.6-54.6c0-6.2-1.1-12.4-3.1-18.2L455.1 74.6C446 49.1 421.9 32 394.8 32L320 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faTaxi = {\n  prefix: 'fas',\n  iconName: 'taxi',\n  icon: [512, 512, [128662, \"cab\"], \"f1ba\", \"M192 0c-17.7 0-32 14.3-32 32l0 32 0 .2c-38.6 2.2-72.3 27.3-85.2 64.1L39.6 228.8C16.4 238.4 0 261.3 0 288L0 432l0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 320 0 0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 0-144c0-26.7-16.4-49.6-39.6-59.2L437.2 128.3c-12.9-36.8-46.6-62-85.2-64.1l0-.2 0-32c0-17.7-14.3-32-32-32L192 0zM165.4 128l181.2 0c13.6 0 25.7 8.6 30.2 21.4L402.9 224l-293.8 0 26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zM96 288a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm288 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faCab = faTaxi;\nconst faPersonCirclePlus = {\n  prefix: 'fas',\n  iconName: 'person-circle-plus',\n  icon: [576, 512, [], \"e541\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"]\n};\nconst faChartPie = {\n  prefix: 'fas',\n  iconName: 'chart-pie',\n  icon: [576, 512, [\"pie-chart\"], \"f200\", \"M304 240l0-223.4c0-9 7-16.6 16-16.6C443.7 0 544 100.3 544 224c0 9-7.6 16-16.6 16L304 240zM32 272C32 150.7 122.1 50.3 239 34.3c9.2-1.3 17 6.1 17 15.4L256 288 412.5 444.5c6.7 6.7 6.2 17.7-1.5 23.1C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272zm526.4 16c9.3 0 16.6 7.8 15.4 17c-7.7 55.9-34.6 105.6-73.9 142.3c-6 5.6-15.4 5.2-21.2-.7L320 288l238.4 0z\"]\n};\nconst faPieChart = faChartPie;\nconst faBoltLightning = {\n  prefix: 'fas',\n  iconName: 'bolt-lightning',\n  icon: [384, 512, [], \"e0b7\", \"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z\"]\n};\nconst faSackXmark = {\n  prefix: 'fas',\n  iconName: 'sack-xmark',\n  icon: [512, 512, [], \"e56a\", \"M192 96l128 0 47.4-71.1C374.5 14.2 366.9 0 354.1 0L157.9 0c-12.8 0-20.4 14.2-13.3 24.9L192 96zm128 32l-128 0c-3.8 2.5-8.1 5.3-13 8.4c0 0 0 0 0 0s0 0 0 0C122.3 172.7 0 250.9 0 416c0 53 43 96 96 96l320 0c53 0 96-43 96-96c0-165.1-122.3-243.3-179-279.6c-4.8-3.1-9.2-5.9-13-8.4zM289.9 336l47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47z\"]\n};\nconst faFileExcel = {\n  prefix: 'fas',\n  iconName: 'file-excel',\n  icon: [384, 512, [], \"f1c3\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM155.7 250.2L192 302.1l36.3-51.9c7.6-10.9 22.6-13.5 33.4-5.9s13.5 22.6 5.9 33.4L221.3 344l46.4 66.2c7.6 10.9 5 25.8-5.9 33.4s-25.8 5-33.4-5.9L192 385.8l-36.3 51.9c-7.6 10.9-22.6 13.5-33.4 5.9s-13.5-22.6-5.9-33.4L162.7 344l-46.4-66.2c-7.6-10.9-5-25.8 5.9-33.4s25.8-5 33.4 5.9z\"]\n};\nconst faFileContract = {\n  prefix: 'fas',\n  iconName: 'file-contract',\n  icon: [384, 512, [], \"f56c\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM80 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm54.2 253.8c-6.1 20.3-24.8 34.2-46 34.2L80 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l8.2 0c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.7 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8 54.1 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 349l-9.8 32.8z\"]\n};\nconst faFishFins = {\n  prefix: 'fas',\n  iconName: 'fish-fins',\n  icon: [576, 512, [], \"e4f2\", \"M275.2 38.4c-10.6-8-25-8.5-36.3-1.5S222 57.3 224.6 70.3l9.7 48.6c-19.4 9-36.9 19.9-52.4 31.5c-15.3 11.5-29 23.9-40.7 36.3L48.1 132.4c-12.5-7.3-28.4-5.3-38.6 4.9S-3 163.3 4.2 175.9L50 256 4.2 336.1c-7.2 12.6-5 28.4 5.3 38.6s26.1 12.2 38.6 4.9l93.1-54.3c11.8 12.3 25.4 24.8 40.7 36.3c15.5 11.6 33 22.5 52.4 31.5l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c54.9-4 101.5-27 137.2-53.8c39.2-29.4 67.2-64.7 81.6-89.5c5.8-9.9 5.8-22.2 0-32.1c-14.4-24.8-42.5-60.1-81.6-89.5c-35.8-26.8-82.3-49.8-137.2-53.8L275.2 38.4zM384 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faBuildingFlag = {\n  prefix: 'fas',\n  iconName: 'building-flag',\n  icon: [640, 512, [], \"e4d5\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM448 0c-17.7 0-32 14.3-32 32l0 480 64 0 0-320 144 0c8.8 0 16-7.2 16-16l0-128c0-8.8-7.2-16-16-16L480 32c0-17.7-14.3-32-32-32z\"]\n};\nconst faFaceGrinBeam = {\n  prefix: 'fas',\n  iconName: 'face-grin-beam',\n  icon: [512, 512, [128516, \"grin-beam\"], \"f582\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-170.5-84s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faGrinBeam = faFaceGrinBeam;\nconst faObjectUngroup = {\n  prefix: 'fas',\n  iconName: 'object-ungroup',\n  icon: [640, 512, [], \"f248\", \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32l209.1 0C339.6 12.9 360.3 0 384 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-113.1zM119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 113.1c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96zm192 384c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-40.6 64 0 0 40.6c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1c-9.7-5.6-17.8-13.7-23.4-23.4l-46 0c-5.4-15.4-14.6-28.9-26.5-39.6l0-24.4 72.6 0c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0z\"]\n};\nconst faPoop = {\n  prefix: 'fas',\n  iconName: 'poop',\n  icon: [512, 512, [], \"f619\", \"M254.4 6.6c3.5-4.3 9-6.5 14.5-5.7C315.8 7.2 352 47.4 352 96c0 11.2-1.9 22-5.5 32l5.5 0c35.3 0 64 28.7 64 64c0 19.1-8.4 36.3-21.7 48l13.7 0c39.8 0 72 32.2 72 72c0 23.2-11 43.8-28 57c34.1 5.7 60 35.3 60 71c0 39.8-32.2 72-72 72L72 512c-39.8 0-72-32.2-72-72c0-35.7 25.9-65.3 60-71c-17-13.2-28-33.8-28-57c0-39.8 32.2-72 72-72l13.7 0C104.4 228.3 96 211.1 96 192c0-35.3 28.7-64 64-64l16.2 0c44.1-.1 79.8-35.9 79.8-80c0-9.2-1.5-17.9-4.3-26.1c-1.8-5.2-.8-11.1 2.8-15.4z\"]\n};\nconst faLocationPin = {\n  prefix: 'fas',\n  iconName: 'location-pin',\n  icon: [384, 512, [\"map-marker\"], \"f041\", \"M384 192c0 87.4-117 243-168.3 307.2c-12.3 15.3-35.1 15.3-47.4 0C117 435 0 279.4 0 192C0 86 86 0 192 0S384 86 384 192z\"]\n};\nconst faMapMarker = faLocationPin;\nconst faKaaba = {\n  prefix: 'fas',\n  iconName: 'kaaba',\n  icon: [576, 512, [128331], \"f66b\", \"M60 120l228 71.2L516 120 288 48.8 60 120zM278.5 1.5c6.2-1.9 12.9-1.9 19.1 0l256 80C566.9 85.6 576 98 576 112l0 16s0 0 0 0l0 21.2L292.8 237.7c-3.1 1-6.4 1-9.5 0L0 149.2 0 128l0-16C0 98 9.1 85.6 22.5 81.5l256-80zm23.9 266.8L576 182.8l0 46.5-52.8 16.5c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5L576 262.8 576 400c0 14-9.1 26.4-22.5 30.5l-256 80c-6.2 1.9-12.9 1.9-19.1 0l-256-80C9.1 426.4 0 414 0 400L0 262.8l43.2 13.5c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20L0 229.2l0-46.5 273.7 85.5c9.3 2.9 19.3 2.9 28.6 0zm-185.5-2.6c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l64 20c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20l-64-20zm352 30.5c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-64 20c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5l64-20zm-224 9.5c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l38.5 12c9.3 2.9 19.3 2.9 28.6 0l38.5-12c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-38.5 12c-3.1 1-6.4 1-9.5 0l-38.5-12z\"]\n};\nconst faToiletPaper = {\n  prefix: 'fas',\n  iconName: 'toilet-paper',\n  icon: [640, 512, [129531], \"f71e\", \"M444.2 0C397.2 49.6 384 126.5 384 192c0 158.8-27.3 247-42.7 283.9c-10 24-33.2 36.1-55.4 36.1L48 512c-11.5 0-22.2-6.2-27.8-16.2s-5.6-22.3 .4-32.2c9.8-17.7 15.4-38.2 20.5-57.7C52.3 362.8 64 293.5 64 192C64 86 107 0 160 0L444.2 0zM512 384c-53 0-96-86-96-192S459 0 512 0s96 86 96 192s-43 192-96 192zm0-128c17.7 0 32-28.7 32-64s-14.3-64-32-64s-32 28.7-32 64s14.3 64 32 64zM144 208a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm64 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm80-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faHelmetSafety = {\n  prefix: 'fas',\n  iconName: 'helmet-safety',\n  icon: [576, 512, [\"hard-hat\", \"hat-hard\"], \"f807\", \"M256 32c-17.7 0-32 14.3-32 32l0 2.3 0 99.6c0 5.6-4.5 10.1-10.1 10.1c-3.6 0-7-1.9-8.8-5.1L157.1 87C83 123.5 32 199.8 32 288l0 64 512 0 0-66.4c-.9-87.2-51.7-162.4-125.1-198.6l-48 83.9c-1.8 3.2-5.2 5.1-8.8 5.1c-5.6 0-10.1-4.5-10.1-10.1l0-99.6 0-2.3c0-17.7-14.3-32-32-32l-64 0zM16.6 384C7.4 384 0 391.4 0 400.6c0 4.7 2 9.2 5.8 11.9C27.5 428.4 111.8 480 288 480s260.5-51.6 282.2-67.5c3.8-2.8 5.8-7.2 5.8-11.9c0-9.2-7.4-16.6-16.6-16.6L16.6 384z\"]\n};\nconst faHardHat = faHelmetSafety;\nconst faHatHard = faHelmetSafety;\nconst faEject = {\n  prefix: 'fas',\n  iconName: 'eject',\n  icon: [448, 512, [9167], \"f052\", \"M224 32c13.5 0 26.3 5.6 35.4 15.6l176 192c12.9 14 16.2 34.3 8.6 51.8S419 320 400 320L48 320c-19 0-36.3-11.2-43.9-28.7s-4.3-37.7 8.6-51.8l176-192C197.7 37.6 210.5 32 224 32zM0 432c0-26.5 21.5-48 48-48l352 0c26.5 0 48 21.5 48 48s-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48z\"]\n};\nconst faCircleRight = {\n  prefix: 'fas',\n  iconName: 'circle-right',\n  icon: [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm395.3 11.3l-112 112c-4.6 4.6-11.5 5.9-17.4 3.5s-9.9-8.3-9.9-14.8l0-64-96 0c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l96 0 0-64c0-6.5 3.9-12.3 9.9-14.8s12.9-1.1 17.4 3.5l112 112c6.2 6.2 6.2 16.4 0 22.6z\"]\n};\nconst faArrowAltCircleRight = faCircleRight;\nconst faPlaneCircleCheck = {\n  prefix: 'fas',\n  iconName: 'plane-circle-check',\n  icon: [640, 512, [], \"e555\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faFaceRollingEyes = {\n  prefix: 'fas',\n  iconName: 'face-rolling-eyes',\n  icon: [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 368l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm32-144c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C208.5 175.6 224 198 224 224zm128 64c-35.3 0-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C400.5 175.6 416 198 416 224c0 35.3-28.7 64-64 64z\"]\n};\nconst faMehRollingEyes = faFaceRollingEyes;\nconst faObjectGroup = {\n  prefix: 'fas',\n  iconName: 'object-group',\n  icon: [576, 512, [], \"f247\", \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32l337.1 0C467.6 12.9 488.3 0 512 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 273.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-337.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-273.1zM456.6 96L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l337.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-273.1c-9.7-5.6-17.8-13.7-23.4-23.4zM128 160c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-96zM256 320l32 0c35.3 0 64-28.7 64-64l0-32 64 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-32z\"]\n};\nconst faChartLine = {\n  prefix: 'fas',\n  iconName: 'chart-line',\n  icon: [512, 512, [\"line-chart\"], \"f201\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z\"]\n};\nconst faLineChart = faChartLine;\nconst faMaskVentilator = {\n  prefix: 'fas',\n  iconName: 'mask-ventilator',\n  icon: [640, 512, [], \"e524\", \"M159.1 176C139.4 219.2 128 264.7 128 300.8c0 15.9 2.2 31.4 6.3 46l-31.8-7.9C70.5 330.9 48 302.1 48 269l0-85c0-4.4 3.6-8 8-8l103.1 0zm26-48L56 128c-30.9 0-56 25.1-56 56l0 85c0 55.1 37.5 103.1 90.9 116.4l71.3 17.8c22.7 30.5 55.4 54.1 93.8 66.6l0-76.6c-19.7-16.4-32-40.3-32-66.9c0-49.5 43-134.4 96-134.4c52.5 0 96 84.9 96 134.4c0 26.7-12.4 50.4-32 66.8l0 76.6c38-12.6 70.6-36 93.5-66.4l71.6-17.9C602.5 372.1 640 324.1 640 269l0-85c0-30.9-25.1-56-56-56l-129.5 0C419.7 73.8 372.1 32 320 32c-52.6 0-100.2 41.8-134.9 96zm295.6 48L584 176c4.4 0 8 3.6 8 8l0 85c0 33-22.5 61.8-54.5 69.9l-31.8 8c4.2-14.7 6.4-30.1 6.4-46.1c0-36.1-11.6-81.6-31.3-124.8zM288 320l0 192 64 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faArrowRight = {\n  prefix: 'fas',\n  iconName: 'arrow-right',\n  icon: [448, 512, [8594], \"f061\", \"M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z\"]\n};\nconst faSignsPost = {\n  prefix: 'fas',\n  iconName: 'signs-post',\n  icon: [512, 512, [\"map-signs\"], \"f277\", \"M224 32L64 32C46.3 32 32 46.3 32 64l0 64c0 17.7 14.3 32 32 32l377.4 0c4.2 0 8.3-1.7 11.3-4.7l48-48c6.2-6.2 6.2-16.4 0-22.6l-48-48c-3-3-7.1-4.7-11.3-4.7L288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32zM480 256c0-17.7-14.3-32-32-32l-160 0 0-32-64 0 0 32L70.6 224c-4.2 0-8.3 1.7-11.3 4.7l-48 48c-6.2 6.2-6.2 16.4 0 22.6l48 48c3 3 7.1 4.7 11.3 4.7L448 352c17.7 0 32-14.3 32-32l0-64zM288 480l0-96-64 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nconst faMapSigns = faSignsPost;\nconst faCashRegister = {\n  prefix: 'fas',\n  iconName: 'cash-register',\n  icon: [512, 512, [], \"f788\", \"M64 0C46.3 0 32 14.3 32 32l0 64c0 17.7 14.3 32 32 32l80 0 0 32-57 0c-31.6 0-58.5 23.1-63.3 54.4L1.1 364.1C.4 368.8 0 373.6 0 378.4L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-69.6c0-4.8-.4-9.6-1.1-14.4L488.2 214.4C483.5 183.1 456.6 160 425 160l-217 0 0-32 80 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L64 0zM96 48l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L96 80c-8.8 0-16-7.2-16-16s7.2-16 16-16zM64 432c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16zm48-168a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm120-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM160 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM328 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM256 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM424 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM352 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48z\"]\n};\nconst faPersonCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'person-circle-question',\n  icon: [576, 512, [], \"e542\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6l0 6.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-6.4c0-5.3 4.3-9.6 9.6-9.6l40.5 0c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2l0 14.8c0 8.8 7.2 16 16 16s16-7.2 16-16l0-5.1 23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9l-40.5 0c-23 0-41.6 18.6-41.6 41.6z\"]\n};\nconst faH = {\n  prefix: 'fas',\n  iconName: 'h',\n  icon: [384, 512, [104], \"48\", \"M320 256l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224 0-160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128L64 192 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0z\"]\n};\nconst faTarp = {\n  prefix: 'fas',\n  iconName: 'tarp',\n  icon: [576, 512, [], \"e57b\", \"M576 128c0-35.3-28.7-64-64-64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l352 0 0-128c0-17.7 14.3-32 32-32l128 0 0-160zM448 448L576 320l-128 0 0 128zM96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faScrewdriverWrench = {\n  prefix: 'fas',\n  iconName: 'screwdriver-wrench',\n  icon: [512, 512, [\"tools\"], \"f7d9\", \"M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4l54.1 0 109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109 0-54.1c0-7.5-3.5-14.5-9.4-19L78.6 5zM19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7L19.9 396.1zM512 144c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7L352 176c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144l0 .8 85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5c49-23 83-72.8 83-130.5zM56 432a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faTools = faScrewdriverWrench;\nconst faArrowsToEye = {\n  prefix: 'fas',\n  iconName: 'arrows-to-eye',\n  icon: [640, 512, [], \"e4bf\", \"M15 15C24.4 5.7 39.6 5.7 49 15l63 63L112 40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 96c0 13.3-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l38.1 0L15 49C5.7 39.6 5.7 24.4 15 15zM133.5 243.9C158.6 193.6 222.7 112 320 112s161.4 81.6 186.5 131.9c3.8 7.6 3.8 16.5 0 24.2C481.4 318.4 417.3 400 320 400s-161.4-81.6-186.5-131.9c-3.8-7.6-3.8-16.5 0-24.2zM320 320a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM591 15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-63 63 38.1 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24l0-96c0-13.3 10.7-24 24-24s24 10.7 24 24l0 38.1 63-63zM15 497c-9.4-9.4-9.4-24.6 0-33.9l63-63L40 400c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0c13.3 0 24 10.7 24 24l0 96c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-38.1L49 497c-9.4 9.4-24.6 9.4-33.9 0zm576 0l-63-63 0 38.1c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-96c0-13.3 10.7-24 24-24l96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-38.1 0 63 63c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"]\n};\nconst faPlugCircleBolt = {\n  prefix: 'fas',\n  iconName: 'plug-circle-bolt',\n  icon: [576, 512, [], \"e55b\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"]\n};\nconst faHeart = {\n  prefix: 'fas',\n  iconName: 'heart',\n  icon: [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 9829, 10084, 61578], \"f004\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z\"]\n};\nconst faMarsAndVenus = {\n  prefix: 'fas',\n  iconName: 'mars-and-venus',\n  icon: [512, 512, [9893], \"f224\", \"M337.8 14.8C341.5 5.8 350.3 0 360 0L472 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-24.7 24.7C407 163.3 416 192.6 416 224c0 80.2-59 146.6-136 158.2l0 25.8 24 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-24 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-25.8C155 370.6 96 304.2 96 224c0-88.4 71.6-160 160-160c39.6 0 75.9 14.4 103.8 38.2L382.1 80 343 41c-6.9-6.9-8.9-17.2-5.2-26.2zM448 48s0 0 0 0s0 0 0 0s0 0 0 0zM352 224a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"]\n};\nconst faHouseUser = {\n  prefix: 'fas',\n  iconName: 'house-user',\n  icon: [576, 512, [\"home-user\"], \"e1b0\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24zM352 224a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm-96 96c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0z\"]\n};\nconst faHomeUser = faHouseUser;\nconst faDumpsterFire = {\n  prefix: 'fas',\n  iconName: 'dumpster-fire',\n  icon: [640, 512, [], \"f794\", \"M49.7 32l90.8 0L114.9 160l-94 0C9.3 160 0 150.7 0 139.1c0-2.1 .3-4.1 .9-6.1L26.8 48.9C29.9 38.9 39.2 32 49.7 32zM272 160l-124.5 0L173.1 32 272 32l0 128zm32 0l0-128 98.9 0 14.4 72.1c-1.7 1.1-3.3 2.4-4.8 3.8c-18.4 16.4-35.4 34-50.5 52.1l-58 0zm209.9-23.7c-1.7 1.6-3.4 3.2-5 4.8C498 129.6 486.7 118.6 475 108c-7.6-6.9-17-10.8-26.6-11.8L435.5 32l90.8 0c10.5 0 19.8 6.9 22.9 16.9L575.1 133c.2 .7 .4 1.4 .5 2.1c-17.8-15-44.3-14.6-61.7 1.2zM325.2 210.7C304.3 244.5 288 282.9 288 318.1c0 49.3 18.6 95.2 49.6 129.9L128 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L44 288l-12 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l4 0-4-32 305.5 0c-4.4 6.2-8.5 12.5-12.3 18.7zm180.6-34.5L518 162.5c5.4-6.1 13.3-8.8 20.9-8.9c7.2 0 14.3 2.6 19.9 7.8c19.7 18.3 39.8 43.2 55 70.6C629 259.2 640 290.2 640 320.2C640 408.8 568.7 480 480 480c-89.6 0-160-71.3-160-159.8c0-37.3 16-73.4 36.8-104.5c20.9-31.3 47.5-59 70.9-80.2c5.7-5.2 13.1-7.7 20.3-7.5c14.1 .3 23.8 11.4 32.7 21.6c0 0 0 0 0 0c2 2.3 4 4.6 6 6.7l19 19.9zM544 368.2c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C453 295.1 416 331.6 416 368.2c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faHouseCrack = {\n  prefix: 'fas',\n  iconName: 'house-crack',\n  icon: [576, 512, [], \"e3b1\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l102.3 0-31.3-52.2c-4.1-6.8-2.6-15.5 3.5-20.5L288 368l-60.2-82.8c-10.9-15 8.2-33.5 22.8-22l117.9 92.6c8 6.3 8.2 18.4 .4 24.9L288 448l38.4 64 122.1 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0z\"]\n};\nconst faMartiniGlassCitrus = {\n  prefix: 'fas',\n  iconName: 'martini-glass-citrus',\n  icon: [576, 512, [\"cocktail\"], \"f561\", \"M432 240c53 0 96-43 96-96s-43-96-96-96c-35.5 0-66.6 19.3-83.2 48l-52.6 0C316 40.1 369.3 0 432 0c79.5 0 144 64.5 144 144s-64.5 144-144 144c-27.7 0-53.5-7.8-75.5-21.3l35.4-35.4c12.2 5.6 25.8 8.7 40.1 8.7zM1.8 142.8C5.5 133.8 14.3 128 24 128l368 0c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-177 177L232 464l64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-88 0-88 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-118.1L7 169c-6.9-6.9-8.9-17.2-5.2-26.2z\"]\n};\nconst faCocktail = faMartiniGlassCitrus;\nconst faFaceSurprise = {\n  prefix: 'fas',\n  iconName: 'face-surprise',\n  icon: [512, 512, [128558, \"surprise\"], \"f5c2\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faSurprise = faFaceSurprise;\nconst faBottleWater = {\n  prefix: 'fas',\n  iconName: 'bottle-water',\n  icon: [320, 512, [], \"e4c5\", \"M120 0l80 0c13.3 0 24 10.7 24 24l0 40L96 64l0-40c0-13.3 10.7-24 24-24zM32 167.5c0-19.5 10-37.6 26.6-47.9l15.8-9.9C88.7 100.7 105.2 96 122.1 96l75.8 0c16.9 0 33.4 4.7 47.7 13.7l15.8 9.9C278 129.9 288 148 288 167.5c0 17-7.5 32.3-19.4 42.6C280.6 221.7 288 238 288 256c0 19.1-8.4 36.3-21.7 48c13.3 11.7 21.7 28.9 21.7 48s-8.4 36.3-21.7 48c13.3 11.7 21.7 28.9 21.7 48c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64c0-19.1 8.4-36.3 21.7-48C40.4 388.3 32 371.1 32 352s8.4-36.3 21.7-48C40.4 292.3 32 275.1 32 256c0-18 7.4-34.3 19.4-45.9C39.5 199.7 32 184.5 32 167.5zM96 240c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0c-8.8 0-16 7.2-16 16zm16 112c-8.8 0-16 7.2-16 16s7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0z\"]\n};\nconst faCirclePause = {\n  prefix: 'fas',\n  iconName: 'circle-pause',\n  icon: [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM224 192l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faPauseCircle = faCirclePause;\nconst faToiletPaperSlash = {\n  prefix: 'fas',\n  iconName: 'toilet-paper-slash',\n  icon: [640, 512, [], \"e072\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-109.7-86C569.9 374 608 291.9 608 192C608 86 565 0 512 0s-96 86-96 192c0 49.1 9.2 93.9 24.4 127.9l-59-46.2c1.6-24.8 2.6-52 2.6-81.6c0-65.5 13.2-142.4 60.2-192L160 0c-24.8 0-47.4 18.8-64.4 49.6L38.8 5.1zM367.3 385.4L66.5 148.4C64.9 162.4 64 177 64 192c0 101.5-11.7 170.8-23 213.9c-5.1 19.4-10.7 39.9-20.5 57.7c-5.9 9.9-6.1 22.1-.4 32.2S36.5 512 48 512l237.9 0c22.3 0 45.4-12.1 55.4-36.1c7.4-17.7 17.5-47.2 26-90.6zM544 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64z\"]\n};\nconst faAppleWhole = {\n  prefix: 'fas',\n  iconName: 'apple-whole',\n  icon: [448, 512, [127822, 127823, \"apple-alt\"], \"f5d1\", \"M224 112c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80l16 0c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80l-16 0zM0 288c0-76.3 35.7-160 112-160c27.3 0 59.7 10.3 82.7 19.3c18.8 7.3 39.9 7.3 58.7 0c22.9-8.9 55.4-19.3 82.7-19.3c76.3 0 112 83.7 112 160c0 128-80 224-160 224c-16.5 0-38.1-6.6-51.5-11.3c-8.1-2.8-16.9-2.8-25 0c-13.4 4.7-35 11.3-51.5 11.3C80 512 0 416 0 288z\"]\n};\nconst faAppleAlt = faAppleWhole;\nconst faKitchenSet = {\n  prefix: 'fas',\n  iconName: 'kitchen-set',\n  icon: [576, 512, [], \"e51a\", \"M240 144A96 96 0 1 0 48 144a96 96 0 1 0 192 0zm44.4 32C269.9 240.1 212.5 288 144 288C64.5 288 0 223.5 0 144S64.5 0 144 0c68.5 0 125.9 47.9 140.4 112l71.8 0c8.8-9.8 21.6-16 35.8-16l104 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-104 0c-14.2 0-27-6.2-35.8-16l-71.8 0zM144 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c13.3 0 24 10.7 24 24l0 8 96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-240 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0 0-8c0-13.3 10.7-24 24-24zM288 464l0-112 224 0 0 112c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48zM48 320l80 0 16 0 32 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-80c0-8.8 7.2-16 16-16zm128 64c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0 32 16 0zM24 464l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faR = {\n  prefix: 'fas',\n  iconName: 'r',\n  icon: [320, 512, [114], \"52\", \"M64 32C28.7 32 0 60.7 0 96L0 288 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 95.3 0L261.8 466.4c10.1 14.5 30.1 18 44.6 7.9s18-30.1 7.9-44.6L230.1 309.5C282.8 288.1 320 236.4 320 176c0-79.5-64.5-144-144-144L64 32zM176 256L64 256 64 96l112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"]\n};\nconst faTemperatureQuarter = {\n  prefix: 'fas',\n  iconName: 'temperature-quarter',\n  icon: [320, 512, [\"temperature-1\", \"thermometer-1\", \"thermometer-quarter\"], \"f2ca\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3l0-50.7c0-8.8 7.2-16 16-16s16 7.2 16 16l0 50.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature1 = faTemperatureQuarter;\nconst faThermometer1 = faTemperatureQuarter;\nconst faThermometerQuarter = faTemperatureQuarter;\nconst faCube = {\n  prefix: 'fas',\n  iconName: 'cube',\n  icon: [512, 512, [], \"f1b2\", \"M234.5 5.7c13.9-5 29.1-5 43.1 0l192 68.6C495 83.4 512 107.5 512 134.6l0 242.9c0 27-17 51.2-42.5 60.3l-192 68.6c-13.9 5-29.1 5-43.1 0l-192-68.6C17 428.6 0 404.5 0 377.4L0 134.6c0-27 17-51.2 42.5-60.3l192-68.6zM256 66L82.3 128 256 190l173.7-62L256 66zm32 368.6l160-57.1 0-188L288 246.6l0 188z\"]\n};\nconst faBitcoinSign = {\n  prefix: 'fas',\n  iconName: 'bitcoin-sign',\n  icon: [320, 512, [], \"e0b4\", \"M48 32C48 14.3 62.3 0 80 0s32 14.3 32 32l0 32 32 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32c0 1.5-.1 3.1-.3 4.5C254.1 82.2 288 125.1 288 176c0 24.2-7.7 46.6-20.7 64.9c31.7 19.8 52.7 55 52.7 95.1c0 61.9-50.1 112-112 112l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-6.3 0C18.7 448 0 429.3 0 406.3L0 288l0-22.3L0 224 0 101.6C0 80.8 16.8 64 37.6 64L48 64l0-32zM64 224l112 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L64 128l0 96zm112 64L64 288l0 96 144 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-32 0z\"]\n};\nconst faShieldDog = {\n  prefix: 'fas',\n  iconName: 'shield-dog',\n  icon: [512, 512, [], \"e573\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160.9 286.2c4.8 1.2 9.9 1.8 15.1 1.8c35.3 0 64-28.7 64-64l0-64 44.2 0c12.1 0 23.2 6.8 28.6 17.7L320 192l64 0c8.8 0 16 7.2 16 16l0 32c0 44.2-35.8 80-80 80l-48 0 0 50.7c0 7.3-5.9 13.3-13.3 13.3c-1.8 0-3.6-.4-5.2-1.1l-98.7-42.3c-6.6-2.8-10.8-9.3-10.8-16.4c0-2.8 .6-5.5 1.9-8l15-30zM160 160l40 0 8 0 0 32 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-8.8 7.2-16 16-16zm128 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faSolarPanel = {\n  prefix: 'fas',\n  iconName: 'solar-panel',\n  icon: [640, 512, [], \"f5ba\", \"M122.2 0C91.7 0 65.5 21.5 59.5 51.4L8.3 307.4C.4 347 30.6 384 71 384l217 0 0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64 217 0c40.4 0 70.7-36.9 62.8-76.6l-51.2-256C574.5 21.5 548.3 0 517.8 0L122.2 0zM260.9 64l118.2 0 10.4 104-139 0L260.9 64zM202.3 168l-100.8 0L122.2 64l90.4 0L202.3 168zM91.8 216l105.6 0L187.1 320 71 320 91.8 216zm153.9 0l148.6 0 10.4 104-169.4 0 10.4-104zm196.8 0l105.6 0L569 320l-116 0L442.5 216zm96-48l-100.8 0L427.3 64l90.4 0 31.4-6.3L517.8 64l20.8 104z\"]\n};\nconst faLockOpen = {\n  prefix: 'fas',\n  iconName: 'lock-open',\n  icon: [576, 512, [], \"f3c1\", \"M352 144c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48C576 64.5 511.5 0 432 0S288 64.5 288 144l0 48L64 192c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-32 0 0-48z\"]\n};\nconst faElevator = {\n  prefix: 'fas',\n  iconName: 'elevator',\n  icon: [512, 512, [], \"e16d\", \"M132.7 4.7l-64 64c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9l128 0c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-64-64c-6.2-6.2-16.4-6.2-22.6 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 128zm96 96a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM80 400c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm192 0c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm32-128a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM356.7 91.3c6.2 6.2 16.4 6.2 22.6 0l64-64c4.6-4.6 5.9-11.5 3.5-17.4S438.5 0 432 0L304 0c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l64 64z\"]\n};\nconst faMoneyBillTransfer = {\n  prefix: 'fas',\n  iconName: 'money-bill-transfer',\n  icon: [640, 512, [], \"e528\", \"M535 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l64 64c4.5 4.5 7 10.6 7 17s-2.5 12.5-7 17l-64 64c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23L384 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l174.1 0L535 41zM105 377l-23 23L256 400c13.3 0 24 10.7 24 24s-10.7 24-24 24L81.9 448l23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 441c-4.5-4.5-7-10.6-7-17s2.5-12.5 7-17l64-64c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM96 64l241.9 0c-3.7 7.2-5.9 15.3-5.9 24c0 28.7 23.3 52 52 52l117.4 0c-4 17 .6 35.5 13.8 48.8c20.3 20.3 53.2 20.3 73.5 0L608 169.5 608 384c0 35.3-28.7 64-64 64l-241.9 0c3.7-7.2 5.9-15.3 5.9-24c0-28.7-23.3-52-52-52l-117.4 0c4-17-.6-35.5-13.8-48.8c-20.3-20.3-53.2-20.3-73.5 0L32 342.5 32 128c0-35.3 28.7-64 64-64zm64 64l-64 0 0 64c35.3 0 64-28.7 64-64zM544 320c-35.3 0-64 28.7-64 64l64 0 0-64zM320 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nconst faMoneyBillTrendUp = {\n  prefix: 'fas',\n  iconName: 'money-bill-trend-up',\n  icon: [512, 512, [], \"e529\", \"M470.7 9.4c3 3.1 5.3 6.6 6.9 10.3s2.4 7.8 2.4 12.2c0 0 0 .1 0 .1c0 0 0 0 0 0l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7L310.6 214.6c-11.8 11.8-30.8 12.6-43.5 1.7L176 138.1 84.8 216.3c-13.4 11.5-33.6 9.9-45.1-3.5s-9.9-33.6 3.5-45.1l112-96c12-10.3 29.7-10.3 41.7 0l89.5 76.7L370.7 64 352 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0s0 0 0 0c8.8 0 16.8 3.6 22.6 9.3l.1 .1zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faHouseFloodWaterCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'house-flood-water-circle-arrow-right',\n  icon: [640, 512, [], \"e50f\", \"M288 144A144 144 0 1 0 0 144a144 144 0 1 0 288 0zM140.7 76.7c6.2-6.2 16.4-6.2 22.6 0l56 56c6.2 6.2 6.2 16.4 0 22.6l-56 56c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L169.4 160 80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16l89.4 0L140.7 99.3c-6.2-6.2-6.2-16.4 0-22.6zM320 144c0 57.3-27.4 108.2-69.8 140.3c11.8-3.6 23-9.4 33-16.2c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c2.1 1.7 4.2 3.3 6.5 4.9l-.3-84.4 16.6 0c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128C407.6-2 392.4-2 381.2 6.1L301 64.4c12.1 23.9 19 50.9 19 79.6zm18.5 165.9c-11.1-7.9-25.9-7.9-37 0C279 325.4 251.5 336 224 336c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 389.7 191 400 224 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C471.4 325.2 442.9 336 416 336c-27.5 0-55-10.6-77.5-26.1zm0 112c-11.1-7.9-25.9-7.9-37 0C279 437.4 251.5 448 224 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 501.7 191 512 224 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C471.4 437.2 442.9 448 416 448c-27.5 0-55-10.6-77.5-26.1z\"]\n};\nconst faSquarePollHorizontal = {\n  prefix: 'fas',\n  iconName: 'square-poll-horizontal',\n  icon: [448, 512, [\"poll-h\"], \"f682\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM256 160c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32zm64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0zM192 352c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faPollH = faSquarePollHorizontal;\nconst faCircle = {\n  prefix: 'fas',\n  iconName: 'circle',\n  icon: [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9679, 9898, 9899, 11044, 61708, 61915], \"f111\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512z\"]\n};\nconst faBackwardFast = {\n  prefix: 'fas',\n  iconName: 'backward-fast',\n  icon: [512, 512, [9198, \"fast-backward\"], \"f049\", \"M493.6 445c-11.2 5.3-24.5 3.6-34.1-4.4L288 297.7 288 416c0 12.4-7.2 23.7-18.4 29s-24.5 3.6-34.1-4.4L64 297.7 64 416c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64s32 14.3 32 32l0 118.3L235.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S288 83.6 288 96l0 118.3L459.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S512 83.6 512 96l0 320c0 12.4-7.2 23.7-18.4 29z\"]\n};\nconst faFastBackward = faBackwardFast;\nconst faRecycle = {\n  prefix: 'fas',\n  iconName: 'recycle',\n  icon: [512, 512, [9842, 9850, 9851], \"f1b8\", \"M174.7 45.1C192.2 17 223 0 256 0s63.8 17 81.3 45.1l38.6 61.7 27-15.6c8.4-4.9 18.9-4.2 26.6 1.7s11.1 15.9 8.6 25.3l-23.4 87.4c-3.4 12.8-16.6 20.4-29.4 17l-87.4-23.4c-9.4-2.5-16.3-10.4-17.6-20s3.4-19.1 11.8-23.9l28.4-16.4L283 79c-5.8-9.3-16-15-27-15s-21.2 5.7-27 15l-17.5 28c-9.2 14.8-28.6 19.5-43.6 10.5c-15.3-9.2-20.2-29.2-10.7-44.4l17.5-28zM429.5 251.9c15-9 34.4-4.3 43.6 10.5l24.4 39.1c9.4 15.1 14.4 32.4 14.6 50.2c.3 53.1-42.7 96.4-95.8 96.4L320 448l0 32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 32 96.2 0c17.6 0 31.9-14.4 31.8-32c0-5.9-1.7-11.7-4.8-16.7l-24.4-39.1c-9.5-15.2-4.7-35.2 10.7-44.4zm-364.6-31L36 204.2c-8.4-4.9-13.1-14.3-11.8-23.9s8.2-17.5 17.6-20l87.4-23.4c12.8-3.4 26 4.2 29.4 17L182 241.2c2.5 9.4-.9 19.3-8.6 25.3s-18.2 6.6-26.6 1.7l-26.5-15.3L68.8 335.3c-3.1 5-4.8 10.8-4.8 16.7c-.1 17.6 14.2 32 31.8 32l32.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32.2 0C42.7 448-.3 404.8 0 351.6c.1-17.8 5.1-35.1 14.6-50.2l50.3-80.5z\"]\n};\nconst faUserAstronaut = {\n  prefix: 'fas',\n  iconName: 'user-astronaut',\n  icon: [448, 512, [], \"f4fb\", \"M370.7 96.1C346.1 39.5 289.7 0 224 0S101.9 39.5 77.3 96.1C60.9 97.5 48 111.2 48 128l0 64c0 16.8 12.9 30.5 29.3 31.9C101.9 280.5 158.3 320 224 320s122.1-39.5 146.7-96.1c16.4-1.4 29.3-15.1 29.3-31.9l0-64c0-16.8-12.9-30.5-29.3-31.9zM336 144l0 16c0 53-43 96-96 96l-32 0c-53 0-96-43-96-96l0-16c0-26.5 21.5-48 48-48l128 0c26.5 0 48 21.5 48 48zM189.3 162.7l-6-21.2c-.9-3.3-3.9-5.5-7.3-5.5s-6.4 2.2-7.3 5.5l-6 21.2-21.2 6c-3.3 .9-5.5 3.9-5.5 7.3s2.2 6.4 5.5 7.3l21.2 6 6 21.2c.9 3.3 3.9 5.5 7.3 5.5s6.4-2.2 7.3-5.5l6-21.2 21.2-6c3.3-.9 5.5-3.9 5.5-7.3s-2.2-6.4-5.5-7.3l-21.2-6zM112.7 316.5C46.7 342.6 0 407 0 482.3C0 498.7 13.3 512 29.7 512l98.3 0 0-64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 64 98.3 0c16.4 0 29.7-13.3 29.7-29.7c0-75.3-46.7-139.7-112.7-165.8C303.9 338.8 265.5 352 224 352s-79.9-13.2-111.3-35.5zM176 448c-8.8 0-16 7.2-16 16l0 48 32 0 0-48c0-8.8-7.2-16-16-16zm96 32a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faPlaneSlash = {\n  prefix: 'fas',\n  iconName: 'plane-slash',\n  icon: [640, 512, [], \"e069\", \"M514.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-73.8 0L630.8 469.1c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L238.1 161.3 197.8 20.4C194.9 10.2 202.6 0 213.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L397.7 192l116.6 0zM41.5 128.7l321 252.9L297.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L144 320l-43.2 57.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L64 256 32.5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-6.2 4-11.4 9.5-13.3z\"]\n};\nconst faTrademark = {\n  prefix: 'fas',\n  iconName: 'trademark',\n  icon: [640, 512, [8482], \"f25c\", \"M345.6 108.8c-8.3-11-22.7-15.5-35.7-11.2S288 114.2 288 128l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 86.4 115.2c6 8.1 15.5 12.8 25.6 12.8s19.6-4.7 25.6-12.8L576 224l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256c0-13.8-8.8-26-21.9-30.4s-27.5 .1-35.7 11.2L464 266.7 345.6 108.8zM0 128c0 17.7 14.3 32 32 32l64 0 0 224c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 96C14.3 96 0 110.3 0 128z\"]\n};\nconst faBasketball = {\n  prefix: 'fas',\n  iconName: 'basketball',\n  icon: [512, 512, [127936, \"basketball-ball\"], \"f434\", \"M86.6 64l85.2 85.2C194.5 121.7 208 86.4 208 48c0-14.7-2-28.9-5.7-42.4C158.6 15 119 35.5 86.6 64zM64 86.6C35.5 119 15 158.6 5.6 202.3C19.1 206 33.3 208 48 208c38.4 0 73.7-13.5 101.3-36.1L64 86.6zM256 0c-7.3 0-14.6 .3-21.8 .9C238 16 240 31.8 240 48c0 47.3-17.1 90.5-45.4 124L256 233.4 425.4 64C380.2 24.2 320.9 0 256 0zM48 240c-16.2 0-32-2-47.1-5.8C.3 241.4 0 248.7 0 256c0 64.9 24.2 124.2 64 169.4L233.4 256 172 194.6C138.5 222.9 95.3 240 48 240zm463.1 37.8c.6-7.2 .9-14.5 .9-21.8c0-64.9-24.2-124.2-64-169.4L278.6 256 340 317.4c33.4-28.3 76.7-45.4 124-45.4c16.2 0 32 2 47.1 5.8zm-4.7 31.9C492.9 306 478.7 304 464 304c-38.4 0-73.7 13.5-101.3 36.1L448 425.4c28.5-32.3 49.1-71.9 58.4-115.7zM340.1 362.7C317.5 390.3 304 425.6 304 464c0 14.7 2 28.9 5.7 42.4C353.4 497 393 476.5 425.4 448l-85.2-85.2zM317.4 340L256 278.6 86.6 448c45.1 39.8 104.4 64 169.4 64c7.3 0 14.6-.3 21.8-.9C274 496 272 480.2 272 464c0-47.3 17.1-90.5 45.4-124z\"]\n};\nconst faBasketballBall = faBasketball;\nconst faSatelliteDish = {\n  prefix: 'fas',\n  iconName: 'satellite-dish',\n  icon: [512, 512, [128225], \"f7c0\", \"M192 32c0-17.7 14.3-32 32-32C383.1 0 512 128.9 512 288c0 17.7-14.3 32-32 32s-32-14.3-32-32C448 164.3 347.7 64 224 64c-17.7 0-32-14.3-32-32zM60.6 220.6L164.7 324.7l28.4-28.4c-.7-2.6-1.1-5.4-1.1-8.3c0-17.7 14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32c-2.9 0-5.6-.4-8.3-1.1l-28.4 28.4L291.4 451.4c14.5 14.5 11.8 38.8-7.3 46.3C260.5 506.9 234.9 512 208 512C93.1 512 0 418.9 0 304c0-26.9 5.1-52.5 14.4-76.1c7.5-19 31.8-21.8 46.3-7.3zM224 96c106 0 192 86 192 192c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-70.7-57.3-128-128-128c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faCircleUp = {\n  prefix: 'fas',\n  iconName: 'circle-up',\n  icon: [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm11.3-395.3l112 112c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9l-64 0 0 96c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-96-64 0c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l112-112c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faArrowAltCircleUp = faCircleUp;\nconst faMobileScreenButton = {\n  prefix: 'fas',\n  iconName: 'mobile-screen-button',\n  icon: [384, 512, [\"mobile-alt\"], \"f3cd\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zM224 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM304 64L80 64l0 320 224 0 0-320z\"]\n};\nconst faMobileAlt = faMobileScreenButton;\nconst faVolumeHigh = {\n  prefix: 'fas',\n  iconName: 'volume-high',\n  icon: [640, 512, [128266, \"volume-up\"], \"f028\", \"M533.6 32.5C598.5 85.2 640 165.8 640 256s-41.5 170.7-106.4 223.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C557.5 398.2 592 331.2 592 256s-34.5-142.2-88.7-186.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM473.1 107c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C475.3 341.3 496 301.1 496 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3z\"]\n};\nconst faVolumeUp = faVolumeHigh;\nconst faUsersRays = {\n  prefix: 'fas',\n  iconName: 'users-rays',\n  icon: [640, 512, [], \"e593\", \"M41 7C31.6-2.3 16.4-2.3 7 7S-2.3 31.6 7 41l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L41 7zM599 7L527 79c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0zM7 505c9.4 9.4 24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 471c-9.4 9.4-9.4 24.6 0 33.9zm592 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM212.1 336c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-.5-1.4-1-2.7-1.6-4c-9.4-22.3-29.8-38.9-54.3-43c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-.8 .1-1.7 .3-2.5 .5c-24.9 5.1-45.1 23-53.4 46.5zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6l56.1 0zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faWallet = {\n  prefix: 'fas',\n  iconName: 'wallet',\n  icon: [512, 512, [], \"f555\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L80 128c-8.8 0-16-7.2-16-16s7.2-16 16-16l368 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM416 272a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faClipboardCheck = {\n  prefix: 'fas',\n  iconName: 'clipboard-check',\n  icon: [384, 512, [], \"f46c\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM305 273L177 401c-9.4 9.4-24.6 9.4-33.9 0L79 337c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L271 239c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faFileAudio = {\n  prefix: 'fas',\n  iconName: 'file-audio',\n  icon: [384, 512, [], \"f1c7\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zm2 226.3c37.1 22.4 62 63.1 62 109.7s-24.9 87.3-62 109.7c-7.6 4.6-17.4 2.1-22-5.4s-2.1-17.4 5.4-22C269.4 401.5 288 370.9 288 336s-18.6-65.5-46.5-82.3c-7.6-4.6-10-14.4-5.4-22s14.4-10 22-5.4zm-91.9 30.9c6 2.5 9.9 8.3 9.9 14.8l0 128c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L113.4 376 80 376c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16l33.4 0 35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5zm51 34.9c6.6-5.9 16.7-5.3 22.6 1.3C249.8 304.6 256 319.6 256 336s-6.2 31.4-16.3 42.7c-5.9 6.6-16 7.1-22.6 1.3s-7.1-16-1.3-22.6c5.1-5.7 8.1-13.1 8.1-21.3s-3.1-15.7-8.1-21.3c-5.9-6.6-5.3-16.7 1.3-22.6z\"]\n};\nconst faBurger = {\n  prefix: 'fas',\n  iconName: 'burger',\n  icon: [512, 512, [\"hamburger\"], \"f805\", \"M61.1 224C45 224 32 211 32 194.9c0-1.9 .2-3.7 .6-5.6C37.9 168.3 78.8 32 256 32s218.1 136.3 223.4 157.3c.5 1.9 .6 3.7 .6 5.6c0 16.1-13 29.1-29.1 29.1L61.1 224zM144 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm240 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zM272 96a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM16 304c0-26.5 21.5-48 48-48l384 0c26.5 0 48 21.5 48 48s-21.5 48-48 48L64 352c-26.5 0-48-21.5-48-48zm16 96c0-8.8 7.2-16 16-16l416 0c8.8 0 16 7.2 16 16l0 16c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-16z\"]\n};\nconst faHamburger = faBurger;\nconst faWrench = {\n  prefix: 'fas',\n  iconName: 'wrench',\n  icon: [512, 512, [128295], \"f0ad\", \"M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7L336 192c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faBugs = {\n  prefix: 'fas',\n  iconName: 'bugs',\n  icon: [576, 512, [], \"e4d0\", \"M164.5 107.4l33.4-73.5c5.5-12.1 .1-26.3-11.9-31.8s-26.3-.1-31.8 11.9L128 71.7 101.9 14.1C96.4 2 82.1-3.3 70.1 2.1S52.7 21.9 58.1 33.9l33.4 73.5c-10.2 7.1-18.2 17-22.9 28.6l-17 0-4.1-20.7c-2.6-13-15.2-21.4-28.2-18.8S-2.1 111.7 .5 124.7l8 40C10.7 175.9 20.6 184 32 184l32 0 0 23.3-37.8 9.5c-9.5 2.4-16.6 10.2-17.9 19.9l-8 56c-1.9 13.1 7.2 25.3 20.4 27.2s25.3-7.2 27.2-20.4l5.7-40 18.4-4.6C82.7 274.6 103.8 288 128 288s45.3-13.4 56.1-33.2l18.4 4.6 5.7 40c1.9 13.1 14 22.2 27.2 20.4s22.2-14 20.4-27.2l-8-56c-1.4-9.7-8.5-17.5-17.9-19.9L192 207.3l0-23.3 32 0c11.4 0 21.3-8.1 23.5-19.3l8-40c2.6-13-5.8-25.6-18.8-28.2s-25.6 5.8-28.2 18.8L204.3 136l-17 0c-4.7-11.6-12.7-21.5-22.9-28.6zM496 286.5l65.6-47c10.8-7.7 13.3-22.7 5.6-33.5s-22.7-13.3-33.5-5.6l-51.4 36.8 6.1-62.9c1.3-13.2-8.4-24.9-21.6-26.2s-24.9 8.4-26.2 21.6L432.8 250c-12.3 1-24.2 5.6-34.1 13.3L384 254.8l6.8-20c4.2-12.6-2.5-26.2-15-30.4s-26.2 2.5-30.4 15l-13.1 38.6c-3.7 10.8 .8 22.8 10.7 28.5l27.7 16L359 322.7 321.5 312c-9.4-2.7-19.5 .6-25.5 8.3l-34.9 44.5c-8.2 10.4-6.4 25.5 4.1 33.7s25.5 6.4 33.7-4.1l25-31.8 18.2 5.2c-.5 22.6 11 44.7 32 56.8s45.9 11 65.2-.7l13.6 13.2-15.1 37.5c-4.9 12.3 1 26.3 13.3 31.2s26.3-1 31.2-13.3L503.5 440c3.6-9.1 1.4-19.4-5.6-26.2l-28-27.1 11.6-20.1 27.7 16c9.9 5.7 22.5 3.7 30-4.9L566.2 347c8.7-10 7.8-25.1-2.2-33.9s-25.1-7.8-33.9 2.2l-13.9 15.9-14.7-8.5c1.7-12.4-.2-25-5.5-36.2z\"]\n};\nconst faRupeeSign = {\n  prefix: 'fas',\n  iconName: 'rupee-sign',\n  icon: [448, 512, [8360, \"rupee\"], \"f156\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160zm256.5 16.4c-.9 6 0 8.7 .4 9.8c.4 1.1 1.4 2.6 4.2 4.9c7.2 5.7 18.7 10 37.9 16.8l1.3 .5c16 5.6 38.7 13.6 55.7 28.1c9.5 8.1 17.9 18.6 23.1 32.3c5.1 13.7 6.1 28.5 3.8 44c-4.2 28.1-20.5 49.3-43.8 60.9c-22.1 11-48.1 12.5-73.2 8l-.2 0s0 0 0 0c-9.3-1.8-20.5-5.7-29.3-9c-6-2.3-12.6-4.9-17.7-6.9c0 0 0 0 0 0c-2.5-1-4.6-1.8-6.3-2.5c-16.5-6.4-24.6-25-18.2-41.4s24.9-24.6 41.4-18.2c2.6 1 5.2 2 7.9 3.1c0 0 0 0 0 0c4.8 1.9 9.8 3.9 15.4 6c8.8 3.3 15.3 5.4 18.7 6c15.7 2.8 26.7 .8 32.9-2.3c5-2.5 8-6 9.1-13c1-6.9 .2-10.5-.5-12.3c-.6-1.7-1.8-3.6-4.5-5.9c-6.9-5.8-18.2-10.4-36.9-17l-3-1.1c-15.5-5.4-37-13-53.3-25.9c-9.5-7.5-18.3-17.6-23.7-31c-5.5-13.4-6.6-28-4.4-43.2c8.4-57.1 67-78 116.9-68.9c6.9 1.3 27.3 5.8 35.4 8.4c16.9 5.2 26.3 23.2 21.1 40.1s-23.2 26.3-40.1 21.1c-4.7-1.4-22.3-5.5-27.9-6.5c-14.6-2.7-25.8-.4-32.6 3.2c-6.3 3.3-8.9 7.6-9.5 12z\"]\n};\nconst faRupee = faRupeeSign;\nconst faFileImage = {\n  prefix: 'fas',\n  iconName: 'file-image',\n  icon: [384, 512, [128443], \"f1c5\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm152 32c5.3 0 10.2 2.6 13.2 6.9l88 128c3.4 4.9 3.7 11.3 1 16.5s-8.2 8.6-14.2 8.6l-88 0-40 0-48 0-48 0c-5.8 0-11.1-3.1-13.9-8.1s-2.8-11.2 .2-16.1l48-80c2.9-4.8 8.1-7.8 13.7-7.8s10.8 2.9 13.7 7.8l12.8 21.4 48.3-70.2c3-4.3 7.9-6.9 13.2-6.9z\"]\n};\nconst faCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'circle-question',\n  icon: [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faQuestionCircle = faCircleQuestion;\nconst faPlaneDeparture = {\n  prefix: 'fas',\n  iconName: 'plane-departure',\n  icon: [640, 512, [128747], \"f5b0\", \"M381 114.9L186.1 41.8c-16.7-6.2-35.2-5.3-51.1 2.7L89.1 67.4C78 73 77.2 88.5 87.6 95.2l146.9 94.5L136 240 77.8 214.1c-8.7-3.9-18.8-3.7-27.3 .6L18.3 230.8c-9.3 4.7-11.8 16.8-5 24.7l73.1 85.3c6.1 7.1 15 11.2 24.3 11.2l137.7 0c5 0 9.9-1.2 14.3-3.4L535.6 212.2c46.5-23.3 82.5-63.3 100.8-112C645.9 75 627.2 48 600.2 48l-57.4 0c-20.2 0-40.2 4.8-58.2 14L381 114.9zM0 480c0 17.7 14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448c-17.7 0-32 14.3-32 32z\"]\n};\nconst faHandshakeSlash = {\n  prefix: 'fas',\n  iconName: 'handshake-slash',\n  icon: [640, 512, [], \"e060\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.4-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8 512 128l-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM96 171.6L40.6 128 0 128 0 352c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-180.4zM413.6 421.9L128 196.9 128 352l28.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128l0 224c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-224-96 0zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faBookBookmark = {\n  prefix: 'fas',\n  iconName: 'book-bookmark',\n  icon: [448, 512, [], \"e0bb\", \"M0 96C0 43 43 0 96 0l96 0 0 190.7c0 13.4 15.5 20.9 26 12.5L272 160l54 43.2c10.5 8.4 26 .9 26-12.5L352 0l32 0 32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32z\"]\n};\nconst faCodeBranch = {\n  prefix: 'fas',\n  iconName: 'code-branch',\n  icon: [448, 512, [], \"f126\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 87.8c18.8-10.9 40.7-17.1 64-17.1l96 0c35.3 0 64-28.7 64-64l0-6.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 6.7c0 70.7-57.3 128-128 128l-96 0c-35.3 0-64 28.7-64 64l0 6.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-6.7 0-198.7C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm232 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM80 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faHatCowboy = {\n  prefix: 'fas',\n  iconName: 'hat-cowboy',\n  icon: [640, 512, [], \"f8c0\", \"M320 64c14.4 0 22.3-7 30.8-14.4C360.4 41.1 370.7 32 392 32c49.3 0 84.4 152.2 97.9 221.9C447.8 272.1 390.9 288 320 288s-127.8-15.9-169.9-34.1C163.6 184.2 198.7 32 248 32c21.3 0 31.6 9.1 41.2 17.6C297.7 57 305.6 64 320 64zM111.1 270.7c47.2 24.5 117.5 49.3 209 49.3s161.8-24.8 208.9-49.3c24.8-12.9 49.8-28.3 70.1-47.7c7.9-7.9 20.2-9.2 29.6-3.3c9.5 5.9 13.5 17.9 9.9 28.5c-13.5 37.7-38.4 72.3-66.1 100.6C523.7 398.9 443.6 448 320 448s-203.6-49.1-252.5-99.2C39.8 320.4 14.9 285.8 1.4 248.1c-3.6-10.6 .4-22.6 9.9-28.5c9.5-5.9 21.7-4.5 29.6 3.3c20.4 19.4 45.3 34.8 70.1 47.7z\"]\n};\nconst faBridge = {\n  prefix: 'fas',\n  iconName: 'bridge',\n  icon: [576, 512, [], \"e4c8\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l40 0 0 64L0 160 0 288c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96s96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96l0-128-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM456 96l0 64-80 0 0-64 80 0zM328 96l0 64-80 0 0-64 80 0zM200 96l0 64-80 0 0-64 80 0z\"]\n};\nconst faPhoneFlip = {\n  prefix: 'fas',\n  iconName: 'phone-flip',\n  icon: [512, 512, [128381, \"phone-alt\"], \"f879\", \"M347.1 24.6c7.7-18.6 28-28.5 47.4-23.2l88 24C499.9 30.2 512 46 512 64c0 247.4-200.6 448-448 448c-18 0-33.8-12.1-38.6-29.5l-24-88c-5.3-19.4 4.6-39.7 23.2-47.4l96-40c16.3-6.8 35.2-2.1 46.3 11.6L207.3 368c70.4-33.3 127.4-90.3 160.7-160.7L318.7 167c-13.7-11.2-18.4-30-11.6-46.3l40-96z\"]\n};\nconst faPhoneAlt = faPhoneFlip;\nconst faTruckFront = {\n  prefix: 'fas',\n  iconName: 'truck-front',\n  icon: [512, 512, [], \"e2b7\", \"M0 80C0 35.8 35.8 0 80 0L432 0c44.2 0 80 35.8 80 80l0 288c0 26.2-12.6 49.4-32 64l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-256 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48C12.6 417.4 0 394.2 0 368L0 80zm129.9 72.2L112 224l288 0-17.9-71.8C378.5 138 365.7 128 351 128l-190 0c-14.7 0-27.5 10-31 24.2zM128 320a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faCat = {\n  prefix: 'fas',\n  iconName: 'cat',\n  icon: [576, 512, [128008], \"f6be\", \"M320 192l17.1 0c22.1 38.3 63.5 64 110.9 64c11 0 21.8-1.4 32-4l0 4 0 32 0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-140.8L280 448l56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-144 0c-53 0-96-43-96-96l0-223.5c0-16.1-12-29.8-28-31.8l-7.9-1c-17.5-2.2-30-18.2-27.8-35.7s18.2-30 35.7-27.8l7.9 1c48 6 84.1 46.8 84.1 95.3l0 85.3c34.4-51.7 93.2-85.8 160-85.8zm160 26.5s0 0 0 0c-10 3.5-20.8 5.5-32 5.5c-28.4 0-54-12.4-71.6-32c0 0 0 0 0 0c-3.7-4.1-7-8.5-9.9-13.2C357.3 164 352 146.6 352 128c0 0 0 0 0 0l0-96 0-20 0-1.3C352 4.8 356.7 .1 362.6 0l.2 0c3.3 0 6.4 1.6 8.4 4.2c0 0 0 0 0 .1L384 21.3l27.2 36.3L416 64l64 0 4.8-6.4L512 21.3 524.8 4.3c0 0 0 0 0-.1c2-2.6 5.1-4.2 8.4-4.2l.2 0C539.3 .1 544 4.8 544 10.7l0 1.3 0 20 0 96c0 17.3-4.6 33.6-12.6 47.6c-11.3 19.8-29.6 35.2-51.4 42.9zM432 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faAnchorCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-exclamation',\n  icon: [640, 512, [], \"e4ab\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faTruckField = {\n  prefix: 'fas',\n  iconName: 'truck-field',\n  icon: [640, 512, [], \"e58d\", \"M32 96c0-35.3 28.7-64 64-64l224 0c23.7 0 44.4 12.9 55.4 32l51.8 0c25.3 0 48.2 14.9 58.5 38l52.8 118.8c.5 1.1 .9 2.1 1.3 3.2l4.2 0c35.3 0 64 28.7 64 64l0 32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-32c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l0-32zM384 224l85.9 0-42.7-96L384 128l0 96zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faRoute = {\n  prefix: 'fas',\n  iconName: 'route',\n  icon: [512, 512, [], \"f4d7\", \"M512 96c0 50.2-59.1 125.1-84.6 155c-3.8 4.4-9.4 6.1-14.5 5L320 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96 43 96 96s-43 96-96 96l-276.4 0c8.7-9.9 19.3-22.6 30-36.8c6.3-8.4 12.8-17.6 19-27.2L416 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-53 0-96-43-96-96s43-96 96-96l39.8 0c-21-31.5-39.8-67.7-39.8-96c0-53 43-96 96-96s96 43 96 96zM117.1 489.1c-3.8 4.3-7.2 8.1-10.1 11.3l-1.8 2-.2-.2c-6 4.6-14.6 4-20-1.8C59.8 473 0 402.5 0 352c0-53 43-96 96-96s96 43 96 96c0 30-21.1 67-43.5 97.9c-10.7 14.7-21.7 28-30.8 38.5l-.6 .7zM128 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faClipboardQuestion = {\n  prefix: 'fas',\n  iconName: 'clipboard-question',\n  icon: [384, 512, [], \"e4e3\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM105.8 229.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L216 328.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM160 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faPanorama = {\n  prefix: 'fas',\n  iconName: 'panorama',\n  icon: [640, 512, [], \"e209\", \"M45.6 32C20.4 32 0 52.4 0 77.6L0 434.4C0 459.6 20.4 480 45.6 480c5.1 0 10-.8 14.7-2.4C74.6 472.8 177.6 440 320 440s245.4 32.8 259.6 37.6c4.7 1.6 9.7 2.4 14.7 2.4c25.2 0 45.6-20.4 45.6-45.6l0-356.7C640 52.4 619.6 32 594.4 32c-5 0-10 .8-14.7 2.4C565.4 39.2 462.4 72 320 72S74.6 39.2 60.4 34.4C55.6 32.8 50.7 32 45.6 32zM96 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm272 0c7.9 0 15.4 3.9 19.8 10.5L512.3 353c5.4 8 5.6 18.4 .4 26.5s-14.7 12.3-24.2 10.7C442.7 382.4 385.2 376 320 376c-65.6 0-123.4 6.5-169.3 14.4c-9.8 1.7-19.7-2.9-24.7-11.5s-4.3-19.4 1.9-27.2L197.3 265c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l26.4 33.1 87-127.6c4.5-6.6 11.9-10.5 19.8-10.5z\"]\n};\nconst faCommentMedical = {\n  prefix: 'fas',\n  iconName: 'comment-medical',\n  icon: [512, 512, [], \"f7f5\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM224 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faTeethOpen = {\n  prefix: 'fas',\n  iconName: 'teeth-open',\n  icon: [576, 512, [], \"f62f\", \"M96 32C43 32 0 75 0 128l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-53-43-96-96-96L96 32zM224 96c26.5 0 48 21.5 48 48l0 56c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-56c0-26.5 21.5-48 48-48zm80 48c0-26.5 21.5-48 48-48s48 21.5 48 48l0 56c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-56zM96 128c26.5 0 48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24c0-26.5 21.5-48 48-48zm336 48c0-26.5 21.5-48 48-48s48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24zM96 480l384 0c53 0 96-43 96-96l0-32c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 32c0 53 43 96 96 96zm0-64c-26.5 0-48-21.5-48-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48zm80-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48s-48-21.5-48-48zm176 48c-26.5 0-48-21.5-48-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48zm80-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48s-48-21.5-48-48z\"]\n};\nconst faFileCircleMinus = {\n  prefix: 'fas',\n  iconName: 'file-circle-minus',\n  icon: [576, 512, [], \"e4ed\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"]\n};\nconst faTags = {\n  prefix: 'fas',\n  iconName: 'tags',\n  icon: [512, 512, [], \"f02c\", \"M345 39.1L472.8 168.4c52.4 53 52.4 138.2 0 191.2L360.8 472.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L438.6 325.9c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM0 229.5L0 80C0 53.5 21.5 32 48 32l149.5 0c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5zM144 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faWineGlass = {\n  prefix: 'fas',\n  iconName: 'wine-glass',\n  icon: [320, 512, [127863], \"f4e3\", \"M32.1 29.3C33.5 12.8 47.4 0 64 0L256 0c16.6 0 30.5 12.8 31.9 29.3l14 168.4c6 72-42.5 135.2-109.9 150.6l0 99.6 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-80 0-80 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0 0-99.6C60.6 333 12.1 269.8 18.1 197.8l14-168.4zm56 98.7l143.8 0-5.3-64L93.4 64l-5.3 64z\"]\n};\nconst faForwardFast = {\n  prefix: 'fas',\n  iconName: 'forward-fast',\n  icon: [512, 512, [9197, \"fast-forward\"], \"f050\", \"M18.4 445c11.2 5.3 24.5 3.6 34.1-4.4L224 297.7 224 416c0 12.4 7.2 23.7 18.4 29s24.5 3.6 34.1-4.4L448 297.7 448 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 118.3L276.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S224 83.6 224 96l0 118.3L52.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S0 83.6 0 96L0 416c0 12.4 7.2 23.7 18.4 29z\"]\n};\nconst faFastForward = faForwardFast;\nconst faFaceMehBlank = {\n  prefix: 'fas',\n  iconName: 'face-meh-blank',\n  icon: [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm208.4-48a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faMehBlank = faFaceMehBlank;\nconst faSquareParking = {\n  prefix: 'fas',\n  iconName: 'square-parking',\n  icon: [448, 512, [127359, \"parking\"], \"f540\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM192 256l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0 0 64zm48 64l-48 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64 0-120c0-22.1 17.9-40 40-40l72 0c53 0 96 43 96 96s-43 96-96 96z\"]\n};\nconst faParking = faSquareParking;\nconst faHouseSignal = {\n  prefix: 'fas',\n  iconName: 'house-signal',\n  icon: [576, 512, [], \"e012\", \"M357.7 8.5c-12.3-11.3-31.2-11.3-43.4 0l-208 192c-9.4 8.6-12.7 22-8.5 34c87.1 25.3 155.6 94.2 180.3 181.6L464 416c26.5 0 48-21.5 48-48l0-112 32 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8.1-35.2l-208-192zM288 208c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16l0-64zM24 256c-13.3 0-24 10.7-24 24s10.7 24 24 24c101.6 0 184 82.4 184 184c0 13.3 10.7 24 24 24s24-10.7 24-24c0-128.1-103.9-232-232-232zm8 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM0 376c0 13.3 10.7 24 24 24c48.6 0 88 39.4 88 88c0 13.3 10.7 24 24 24s24-10.7 24-24c0-75.1-60.9-136-136-136c-13.3 0-24 10.7-24 24z\"]\n};\nconst faBarsProgress = {\n  prefix: 'fas',\n  iconName: 'bars-progress',\n  icon: [512, 512, [\"tasks-alt\"], \"f828\", \"M448 160l-128 0 0-32 128 0 0 32zM48 64C21.5 64 0 85.5 0 112l0 64c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48L48 64zM448 352l0 32-256 0 0-32 256 0zM48 288c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48L48 288z\"]\n};\nconst faTasksAlt = faBarsProgress;\nconst faFaucetDrip = {\n  prefix: 'fas',\n  iconName: 'faucet-drip',\n  icon: [512, 512, [128688], \"e006\", \"M224 0c17.7 0 32 14.3 32 32l0 12 96-12c17.7 0 32 14.3 32 32s-14.3 32-32 32L256 84l-31-3.9-1-.1-1 .1L192 84 96 96C78.3 96 64 81.7 64 64s14.3-32 32-32l96 12 0-12c0-17.7 14.3-32 32-32zM0 224c0-17.7 14.3-32 32-32l96 0 22.6-22.6c6-6 14.1-9.4 22.6-9.4l18.7 0 0-43.8 32-4 32 4 0 43.8 18.7 0c8.5 0 16.6 3.4 22.6 9.4L320 192l32 0c88.4 0 160 71.6 160 160c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s-14.3-32-32-32l-36.1 0c-20.2 29-53.9 48-91.9 48s-71.7-19-91.9-48L32 320c-17.7 0-32-14.3-32-32l0-64zM436.8 423.4c1.9-4.5 6.3-7.4 11.2-7.4s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1l18.2-42.4z\"]\n};\nconst faCartFlatbed = {\n  prefix: 'fas',\n  iconName: 'cart-flatbed',\n  icon: [640, 512, [\"dolly-flatbed\"], \"f474\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l16 0c8.8 0 16 7.2 16 16l0 288c0 44.2 35.8 80 80 80l18.7 0c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l197.5 0c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l66.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-464 0c-8.8 0-16-7.2-16-16l0-288C128 35.8 92.2 0 48 0L32 0zM192 80l0 192c0 26.5 21.5 48 48 48l320 0c26.5 0 48-21.5 48-48l0-192c0-26.5-21.5-48-48-48l-96 0 0 144c0 5.9-3.2 11.3-8.5 14.1s-11.5 2.5-16.4-.8L400 163.2l-39.1 26.1c-4.9 3.3-11.2 3.6-16.4 .8s-8.5-8.2-8.5-14.1l0-144-96 0c-26.5 0-48 21.5-48 48z\"]\n};\nconst faDollyFlatbed = faCartFlatbed;\nconst faBanSmoking = {\n  prefix: 'fas',\n  iconName: 'ban-smoking',\n  icon: [512, 512, [128685, \"smoking-ban\"], \"f54d\", \"M99.5 144.8L178.7 224l96 96 92.5 92.5C335.9 434.9 297.5 448 256 448C150 448 64 362 64 256c0-41.5 13.1-79.9 35.5-111.2zM333.3 288l-32-32 82.7 0 0 32-50.7 0zm32 32l34.7 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-130.7 0L144.8 99.5C176.1 77.1 214.5 64 256 64c106 0 192 86 192 192c0 41.5-13.1 79.9-35.5 111.2L365.3 320zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM272 96c-8.8 0-16 7.2-16 16c0 26.5 21.5 48 48 48l32 0c8.8 0 16 7.2 16 16s7.2 16 16 16s16-7.2 16-16c0-26.5-21.5-48-48-48l-32 0c-8.8 0-16-7.2-16-16s-7.2-16-16-16zM229.5 320l-96-96L112 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l117.5 0z\"]\n};\nconst faSmokingBan = faBanSmoking;\nconst faTerminal = {\n  prefix: 'fas',\n  iconName: 'terminal',\n  icon: [576, 512, [], \"f120\", \"M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416l288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faMobileButton = {\n  prefix: 'fas',\n  iconName: 'mobile-button',\n  icon: [384, 512, [], \"f10b\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zM192 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faHouseMedicalFlag = {\n  prefix: 'fas',\n  iconName: 'house-medical-flag',\n  icon: [640, 512, [], \"e514\", \"M480 0c17.7 0 32 14.3 32 32l112 0c8.8 0 16 7.2 16 16l0 128c0 8.8-7.2 16-16 16l-112 0 0 320-64 0 0-320 0-160c0-17.7 14.3-32 32-32zM276.8 39.7L416 159l0 353 1 0-.2 0L96 512c-17.7 0-32-14.3-32-32l0-192-32 0c-13.4 0-25.4-8.3-30-20.9s-1-26.7 9.2-35.4l224-192c12-10.3 29.7-10.3 41.7 0zM224 208l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faBasketShopping = {\n  prefix: 'fas',\n  iconName: 'basket-shopping',\n  icon: [576, 512, [\"shopping-basket\"], \"f291\", \"M253.3 35.1c6.1-11.8 1.5-26.3-10.2-32.4s-26.3-1.5-32.4 10.2L117.6 192 32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32L83.9 463.5C91 492 116.6 512 146 512L430 512c29.4 0 55-20 62.1-48.5L544 256c17.7 0 32-14.3 32-32s-14.3-32-32-32l-85.6 0L365.3 12.9C359.2 1.2 344.7-3.4 332.9 2.7s-16.3 20.6-10.2 32.4L404.3 192l-232.6 0L253.3 35.1zM192 304l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm96-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zm128 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faShoppingBasket = faBasketShopping;\nconst faTape = {\n  prefix: 'fas',\n  iconName: 'tape',\n  icon: [576, 512, [], \"f4db\", \"M380.8 416c41.5-40.7 67.2-97.3 67.2-160C448 132.3 347.7 32 224 32S0 132.3 0 256S100.3 480 224 480l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-163.2 0zM224 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm64 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faBusSimple = {\n  prefix: 'fas',\n  iconName: 'bus-simple',\n  icon: [448, 512, [\"bus-alt\"], \"f55e\", \"M224 0C348.8 0 448 35.2 448 80l0 16 0 320c0 17.7-14.3 32-32 32l0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-192 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32L0 96 0 80C0 35.2 99.2 0 224 0zM64 128l0 128c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L96 96c-17.7 0-32 14.3-32 32zM80 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faBusAlt = faBusSimple;\nconst faEye = {\n  prefix: 'fas',\n  iconName: 'eye',\n  icon: [576, 512, [128065], \"f06e\", \"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\"]\n};\nconst faFaceSadCry = {\n  prefix: 'fas',\n  iconName: 'face-sad-cry',\n  icon: [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M352 493.4c-29.6 12-62.1 18.6-96 18.6s-66.4-6.6-96-18.6L160 288c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 189.8C51.5 433.5 0 350.8 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 94.8-51.5 177.5-128 221.8L384 288c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 205.4zM195.2 233.6c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zm121.6 0c17.6-23.5 52.8-23.5 70.4 0c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2zM208 336l0 32c0 26.5 21.5 48 48 48s48-21.5 48-48l0-32c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"]\n};\nconst faSadCry = faFaceSadCry;\nconst faAudioDescription = {\n  prefix: 'fas',\n  iconName: 'audio-description',\n  icon: [576, 512, [], \"f29e\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM213.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7l-9.4-18.9-82.2 0-9.4 18.9c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zm-.4 106.6L192 237.7l-21.1 42.2 42.2 0zM304 184c0-13.3 10.7-24 24-24l56 0c53 0 96 43 96 96s-43 96-96 96l-56 0c-13.3 0-24-10.7-24-24l0-144zm48 24l0 96 32 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-32 0z\"]\n};\nconst faPersonMilitaryToPerson = {\n  prefix: 'fas',\n  iconName: 'person-military-to-person',\n  icon: [512, 512, [], \"e54c\", \"M71 12.5c-8.6 1-15 8.2-15 16.8c0 9.3 7.5 16.8 16.7 16.9l111.4 0c8.8-.1 15.9-7.2 15.9-16L200 16c0-9.5-8.3-17-17.8-15.9L71 12.5zM189.5 78.1l-122.9 0C64.9 83.8 64 89.8 64 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-6.2-.9-12.2-2.5-17.9zM32 256l0 32c0 17.7 14.3 32 32 32l128 0c1.8 0 3.5-.1 5.2-.4L53 208.6C40.1 220.3 32 237.2 32 256zm190.2 42.5c1.1-3.3 1.8-6.8 1.8-10.5l0-32c0-35.3-28.7-64-64-64l-64 0c-3.7 0-7.4 .3-10.9 .9L222.2 298.5zM384 160a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-35.3 0-64 28.7-64 64l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-35.3-28.7-64-64-64l-64 0zM215.8 450.1c5.2-4.6 8.2-11.1 8.2-18.1s-3-13.5-8.2-18.1l-64-56c-7.1-6.2-17.1-7.7-25.7-3.8S112 366.6 112 376l0 32-88 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l88 0 0 32c0 9.4 5.5 18 14.1 21.9s18.6 2.4 25.7-3.8l64-56zM288 431.9c0 6.9 2.9 13.5 8.1 18.1l64 56.4c7.1 6.2 17.1 7.8 25.7 3.9s14.1-12.4 14.1-21.9l0-32.4 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-32c0-9.4-5.5-18-14.1-21.9s-18.6-2.4-25.7 3.8l-64 56c-5.2 4.5-8.2 11.1-8.2 18z\"]\n};\nconst faFileShield = {\n  prefix: 'fas',\n  iconName: 'file-shield',\n  icon: [576, 512, [], \"e4f0\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 47-92.8 37.1c-21.3 8.5-35.2 29.1-35.2 52c0 56.6 18.9 148 94.2 208.3c-9 4.8-19.3 7.6-30.2 7.6L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm39.1 97.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8l0 187.8c68.2-33 91.5-99 95.4-149.7z\"]\n};\nconst faUserSlash = {\n  prefix: 'fas',\n  iconName: 'user-slash',\n  icon: [640, 512, [], \"f506\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L353.3 251.6C407.9 237 448 187.2 448 128C448 57.3 390.7 0 320 0C250.2 0 193.5 55.8 192 125.2L38.8 5.1zM264.3 304.3C170.5 309.4 96 387.2 96 482.3c0 16.4 13.3 29.7 29.7 29.7l388.6 0c3.9 0 7.6-.7 11-2.1l-261-205.6z\"]\n};\nconst faPen = {\n  prefix: 'fas',\n  iconName: 'pen',\n  icon: [512, 512, [128394], \"f304\", \"M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z\"]\n};\nconst faTowerObservation = {\n  prefix: 'fas',\n  iconName: 'tower-observation',\n  icon: [512, 512, [], \"e586\", \"M241.7 3.4c9-4.5 19.6-4.5 28.6 0l160 80c15.8 7.9 22.2 27.1 14.3 42.9C439 137.5 427.7 144 416 144l0 80c0 17.7-14.3 32-32 32l-4.9 0 32 192 68.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-95.5 0c-.4 0-.8 0-1.1 0l-254.8 0c-.4 0-.8 0-1.1 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 32-192-4.9 0c-17.7 0-32-14.3-32-32l0-80c-11.7 0-23-6.5-28.6-17.7c-7.9-15.8-1.5-35 14.3-42.9l160-80zM314.5 448L256 399.2 197.5 448l117 0zM197.8 256l-4.7 28.3L256 336.8l62.9-52.5L314.2 256l-116.5 0zm-13.9 83.2l-11.2 67L218.5 368l-34.6-28.8zM293.5 368l45.8 38.1-11.2-67L293.5 368zM176 128c-8.8 0-16 7.2-16 16s7.2 16 16 16l160 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-160 0z\"]\n};\nconst faFileCode = {\n  prefix: 'fas',\n  iconName: 'file-code',\n  icon: [384, 512, [], \"f1c9\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM153 289l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L71 337c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM265 255l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nconst faSignal = {\n  prefix: 'fas',\n  iconName: 'signal',\n  icon: [640, 512, [128246, \"signal-5\", \"signal-perfect\"], \"f012\", \"M576 0c17.7 0 32 14.3 32 32l0 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM448 96c17.7 0 32 14.3 32 32l0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352c0-17.7 14.3-32 32-32zM352 224l0 256c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32s32 14.3 32 32zM192 288c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32zM96 416l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faSignal5 = faSignal;\nconst faSignalPerfect = faSignal;\nconst faBus = {\n  prefix: 'fas',\n  iconName: 'bus',\n  icon: [576, 512, [128653], \"f207\", \"M288 0C422.4 0 512 35.2 512 80l0 16 0 32c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l0 160c0 17.7-14.3 32-32 32l0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-192 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32l0-160c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32c0 0 0 0 0 0l0-32s0 0 0 0l0-16C64 35.2 153.6 0 288 0zM128 160l0 96c0 17.7 14.3 32 32 32l112 0 0-160-112 0c-17.7 0-32 14.3-32 32zM304 288l112 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-112 0 0 160zM144 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM384 80c0-8.8-7.2-16-16-16L208 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l160 0c8.8 0 16-7.2 16-16z\"]\n};\nconst faHeartCircleXmark = {\n  prefix: 'fas',\n  iconName: 'heart-circle-xmark',\n  icon: [576, 512, [], \"e501\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faHouseChimney = {\n  prefix: 'fas',\n  iconName: 'house-chimney',\n  icon: [576, 512, [63499, \"home-lg\"], \"e3af\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185l0-121c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 64 0 24c0 22.1 17.9 40 40 40l24 0 32.5 0c1.4 0 2.8 0 4.2-.1c1.1 .1 2.2 .1 3.3 .1l16 0c22.1 0 40-17.9 40-40l0-16.2c.3-2.6 .5-5.3 .5-8.1l-.7-160.2 32 0z\"]\n};\nconst faHomeLg = faHouseChimney;\nconst faWindowMaximize = {\n  prefix: 'fas',\n  iconName: 'window-maximize',\n  icon: [512, 512, [128470], \"f2d0\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 96l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faFaceFrown = {\n  prefix: 'fas',\n  iconName: 'face-frown',\n  icon: [512, 512, [9785, \"frown\"], \"f119\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.3 388.7c-2.6 8.4-11.6 13.2-20 10.5s-13.2-11.6-10.5-20C145.2 326.1 196.3 288 256 288s110.8 38.1 127.3 91.3c2.6 8.4-2.1 17.4-10.5 20s-17.4-2.1-20-10.5C340.5 349.4 302.1 320 256 320s-84.5 29.4-96.7 68.7zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faFrown = faFaceFrown;\nconst faPrescription = {\n  prefix: 'fas',\n  iconName: 'prescription',\n  icon: [448, 512, [], \"f5b1\", \"M32 0C14.3 0 0 14.3 0 32L0 192l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 50.7 0 128 128L137.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 397.3 393.4 502.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L333.3 352 438.6 246.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 306.7l-85.8-85.8C251.4 209.1 288 164.8 288 112C288 50.1 237.9 0 176 0L32 0zM176 160L64 160l0-96 112 0c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nconst faShop = {\n  prefix: 'fas',\n  iconName: 'shop',\n  icon: [640, 512, [\"store-alt\"], \"f54f\", \"M36.8 192l566.3 0c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM64 224l0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-80 0-160-64 0 0 160-192 0 0-160-64 0zm448 0l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256-64 0z\"]\n};\nconst faStoreAlt = faShop;\nconst faFloppyDisk = {\n  prefix: 'fas',\n  iconName: 'floppy-disk',\n  icon: [448, 512, [128190, 128426, \"save\"], \"f0c7\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-242.7c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32L64 32zm0 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 224c-17.7 0-32-14.3-32-32l0-64zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faSave = faFloppyDisk;\nconst faVihara = {\n  prefix: 'fas',\n  iconName: 'vihara',\n  icon: [640, 512, [], \"f6a7\", \"M281 22L305.8 4.7c1.3-.9 2.7-1.8 4.1-2.4C313.1 .7 316.6 0 320 0s6.9 .7 10.1 2.2c1.4 .7 2.8 1.5 4.1 2.4L359 22C393 45.8 430.8 63.5 470.8 74.4l23 6.3c1.8 .5 3.6 1.1 5.2 2c3.2 1.7 5.9 4 8.1 6.8c3.8 4.9 5.6 11.3 4.7 17.8c-.4 2.8-1.2 5.4-2.5 7.8c-1.7 3.2-4 5.9-6.8 8.1c-4.3 3.2-9.6 5.1-15.1 4.9l-7.5 0 0 56.1 6.4 5.1 5.2 4.1c21.1 16.7 45 29.6 70.5 38.1l28.9 9.6c1.6 .5 3.2 1.2 4.6 2c3.1 1.7 5.8 4.1 7.8 6.9s3.5 6.1 4.1 9.6c.5 2.7 .6 5.5 .1 8.3s-1.4 5.4-2.7 7.8c-1.7 3.1-4.1 5.8-6.9 7.8s-6.1 3.5-9.6 4.1c-1.6 .3-3.3 .4-5 .4L544 288l0 65.9c20.5 22.8 47.4 39.2 77.4 46.7C632 403 640 412.6 640 424c0 13.3-10.7 24-24 24l-40 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-160 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-160 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-40 0c-13.3 0-24-10.7-24-24c0-11.4 8-21 18.6-23.4c30-7.6 56.9-23.9 77.4-46.7L96 288l-39.4 0c-1.7 0-3.4-.1-5-.4c-3.5-.7-6.8-2.1-9.6-4.1s-5.2-4.7-7-7.8c-1.3-2.4-2.3-5-2.7-7.8s-.4-5.6 .1-8.3c.7-3.5 2.1-6.8 4.1-9.6s4.7-5.2 7.8-6.9c1.4-.8 3-1.5 4.6-2l28.9-9.6c25.5-8.5 49.4-21.4 70.5-38.1l5.2-4.1 6.4-5.1 0-8.1 0-48-7.5 0c-5.5 .1-10.8-1.7-15.1-4.9c-2.8-2.1-5.1-4.8-6.8-8.1c-1.2-2.4-2.1-5-2.5-7.8c-.9-6.5 .9-12.8 4.7-17.8c2.1-2.8 4.8-5.1 8.1-6.8c1.6-.8 3.4-1.5 5.2-2l23-6.3C209.2 63.5 247 45.8 281 22zM416 128l-96 0-96 0 0 64 72 0 48 0 72 0 0-64zM160 288l0 64 136 0 24 0 24 0 136 0 0-64-136 0-24 0s0 0 0 0l-24 0-136 0z\"]\n};\nconst faScaleUnbalanced = {\n  prefix: 'fas',\n  iconName: 'scale-unbalanced',\n  icon: [640, 512, [\"balance-scale-left\"], \"f515\", \"M522.1 62.4c16.8-5.6 25.8-23.7 20.2-40.5S518.6-3.9 501.9 1.6l-113 37.7C375 15.8 349.3 0 320 0c-44.2 0-80 35.8-80 80c0 3 .2 5.9 .5 8.8L117.9 129.6c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l135.5-45.2c4.5 3.2 9.3 5.9 14.4 8.2L288 480c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-294.7c21-9.2 37.2-27 44.2-49l125.9-42zM439.6 288L512 163.8 584.4 288l-144.9 0zM512 384c62.9 0 115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L536.1 109.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L392.7 273.1c-5.7 9.8-9.3 21.1-6.7 32.1C396.8 350 449.1 384 512 384zM129.2 291.8L201.6 416 56.7 416l72.4-124.2zM3.2 433.1C14 478 66.3 512 129.2 512s115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L153.2 237.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L9.9 401.1c-5.7 9.8-9.3 21.1-6.7 32.1z\"]\n};\nconst faBalanceScaleLeft = faScaleUnbalanced;\nconst faSortUp = {\n  prefix: 'fas',\n  iconName: 'sort-up',\n  icon: [320, 512, [\"sort-asc\"], \"f0de\", \"M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"]\n};\nconst faSortAsc = faSortUp;\nconst faCommentDots = {\n  prefix: 'fas',\n  iconName: 'comment-dots',\n  icon: [512, 512, [128172, 62075, \"commenting\"], \"f4ad\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM128 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faCommenting = faCommentDots;\nconst faPlantWilt = {\n  prefix: 'fas',\n  iconName: 'plant-wilt',\n  icon: [512, 512, [], \"e5aa\", \"M288 120c0-30.9 25.1-56 56-56s56 25.1 56 56l0 13c-29.3 10-48 34.5-48 70.1c0 27.9 25.3 74.8 66 111.6c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1l0-13C464 53.7 410.3 0 344 0S224 53.7 224 120l0 21.8C207.3 133 188.2 128 168 128c-66.3 0-120 53.7-120 120l0 13c-29.3 10-48 34.5-48 70.1C0 359 25.3 405.9 66 442.7c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1l0-13c0-30.9 25.1-56 56-56s56 25.1 56 56l0 32 0 200c0 17.7 14.3 32 32 32s32-14.3 32-32l0-200 0-32 0-128z\"]\n};\nconst faDiamond = {\n  prefix: 'fas',\n  iconName: 'diamond',\n  icon: [512, 512, [9830], \"f219\", \"M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z\"]\n};\nconst faFaceGrinSquint = {\n  prefix: 'fas',\n  iconName: 'face-grin-squint',\n  icon: [512, 512, [128518, \"grin-squint\"], \"f585\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM133.5 146.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faGrinSquint = faFaceGrinSquint;\nconst faHandHoldingDollar = {\n  prefix: 'fas',\n  iconName: 'hand-holding-dollar',\n  icon: [576, 512, [\"hand-holding-usd\"], \"f4c0\", \"M312 24l0 10.5c6.4 1.2 12.6 2.7 18.2 4.2c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17c-10.9-2.9-21.1-4.9-30.2-5c-7.3-.1-14.7 1.7-19.4 4.4c-2.1 1.3-3.1 2.4-3.5 3c-.3 .5-.7 1.2-.7 2.8c0 .3 0 .5 0 .6c.2 .2 .9 1.2 3.3 2.6c5.8 3.5 14.4 6.2 27.4 10.1l.9 .3s0 0 0 0c11.1 3.3 25.9 7.8 37.9 15.3c13.7 8.6 26.1 22.9 26.4 44.9c.3 22.5-11.4 38.9-26.7 48.5c-6.7 4.1-13.9 7-21.3 8.8l0 10.6c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-11.4c-9.5-2.3-18.2-5.3-25.6-7.8c-2.1-.7-4.1-1.4-6-2c-12.6-4.2-19.4-17.8-15.2-30.4s17.8-19.4 30.4-15.2c2.6 .9 5 1.7 7.3 2.5c13.6 4.6 23.4 7.9 33.9 8.3c8 .3 15.1-1.6 19.2-4.1c1.9-1.2 2.8-2.2 3.2-2.9c.4-.6 .9-1.8 .8-4.1l0-.2c0-1 0-2.1-4-4.6c-5.7-3.6-14.3-6.4-27.1-10.3l-1.9-.6c-10.8-3.2-25-7.5-36.4-14.4c-13.5-8.1-26.5-22-26.6-44.1c-.1-22.9 12.9-38.6 27.7-47.4c6.4-3.8 13.3-6.4 20.2-8.2L264 24c0-13.3 10.7-24 24-24s24 10.7 24 24zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faHandHoldingUsd = faHandHoldingDollar;\nconst faChartDiagram = {\n  prefix: 'fas',\n  iconName: 'chart-diagram',\n  icon: [512, 512, [], \"e695\", \"M80 32C53.5 32 32 53.5 32 80s21.5 48 48 48l152 0 0 40-48 48-56 0c-48.6 0-88 39.4-88 88l0 48-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-48c0-22.1 17.9-40 40-40l56 0 48 48 0 40-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-40 48-48 56 0c22.1 0 40 17.9 40 40l0 48-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-48c0-48.6-39.4-88-88-88l-56 0-48-48 0-40 152 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L80 32z\"]\n};\nconst faBacterium = {\n  prefix: 'fas',\n  iconName: 'bacterium',\n  icon: [512, 512, [], \"e05a\", \"M423.1 30.6c3.6-12.7-3.7-26-16.5-29.7s-26 3.7-29.7 16.5l-4.2 14.7c-9.8-.4-19.9 .5-29.9 2.8c-12.1 2.8-23.7 5.9-34.9 9.4l-5.9-13.7c-5.2-12.2-19.3-17.8-31.5-12.6s-17.8 19.3-12.6 31.5l4.9 11.3c-22 9.4-42 20.1-60.2 31.8L196 82.7c-7.4-11-22.3-14-33.3-6.7s-14 22.3-6.7 33.3l7.8 11.6c-18 15-33.7 30.8-47.3 47.1L103 157.3c-10.4-8.3-25.5-6.6-33.7 3.7s-6.6 25.5 3.7 33.7l15 12c-2.1 3.2-4.1 6.5-6 9.7c-9.4 15.7-17 31-23.2 45.3l-9.9-3.9c-12.3-4.9-26.3 1.1-31.2 13.4s1.1 26.3 13.4 31.2l11.6 4.6c-.3 1.1-.6 2.1-.9 3.1c-3.5 12.5-5.7 23.2-7.1 31.3c-.7 4.1-1.2 7.5-1.6 10.3c-.2 1.4-.3 2.6-.4 3.6l-.1 1.4-.1 .6 0 .3 0 .1c0 0 0 .1 39.2 3.7c0 0 0 0 0 0l-39.2-3.6c-.5 5-.6 10-.4 14.9l-14.7 4.2C4.7 380.6-2.7 393.8 .9 406.6s16.9 20.1 29.7 16.5l13.8-3.9c10.6 20.7 27.6 37.8 48.5 48.5l-3.9 13.7c-3.6 12.7 3.7 26 16.5 29.7s26-3.7 29.7-16.5l4.2-14.7c23.8 1 46.3-5.5 65.1-17.6L215 473c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c9.1-14.1 15.1-30.5 17-48.3l.1-.8c.3-1.7 1-5.1 2.3-9.8l.2-.8 12.6 5.4c12.2 5.2 26.3-.4 31.5-12.6s-.4-26.3-12.6-31.5l-11.3-4.8c9.9-14.9 24.9-31.6 48.6-46l2.1 7.5c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7L371 259.2c6.9-2.2 14.3-4.3 22.2-6.1c12.9-3 24.7-8 35.2-14.8L439 249c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c12.2-19 18.6-41.6 17.6-65.1l14.7-4.2c12.7-3.6 20.1-16.9 16.5-29.7s-16.9-20.1-29.7-16.5l-13.7 3.9c-10.8-21.2-28-38-48.5-48.5l3.9-13.8zM92.1 363.3s0 0 0 0L144 368l-51.9-4.7zM112 320a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM240 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faHandPointer = {\n  prefix: 'fas',\n  iconName: 'hand-pointer',\n  icon: [448, 512, [], \"f25a\", \"M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40l0 148.2c8.5-7.6 19.7-12.2 32-12.2c20.6 0 38.2 13 45 31.2c8.8-9.3 21.2-15.2 35-15.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48l0 48 0 16 0 48c0 70.7-57.3 128-128 128l-16 0-64 0-.1 0-5.2 0c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7L128 40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96zm48-16c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96z\"]\n};\nconst faDrumSteelpan = {\n  prefix: 'fas',\n  iconName: 'drum-steelpan',\n  icon: [576, 512, [], \"f56a\", \"M288 32c159.1 0 288 48 288 128l0 192c0 80-128.9 128-288 128S0 432 0 352L0 160C0 80 128.9 32 288 32zM528 160c0-9.9-8-29.9-55-49.8c-18.6-7.9-40.9-14.4-66-19.4l-27.8 43.6c-7.3 11.5-11.2 24.8-11.2 38.4c0 17.5 6.4 34.4 18.1 47.5l9.8 11c29.8-5.2 55.9-12.5 77.2-21.5c47.1-19.9 55-39.9 55-49.8zM349.2 237.3c-8-26.2-32.4-45.3-61.2-45.3s-53.3 19.1-61.2 45.3c19.4 1.7 39.9 2.7 61.2 2.7s41.8-.9 61.2-2.7zM169 90.8c-25.2 5-47.4 11.6-66 19.4C56 130.1 48 150.1 48 160s8 29.9 55 49.8c21.3 9 47.4 16.3 77.2 21.5l9.8-11c11.6-13.1 18.1-30 18.1-47.5c0-13.6-3.9-26.9-11.2-38.4L169 90.8zm56.3-8C224.5 87 224 91.5 224 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-4.5-.5-9-1.4-13.2C330.8 81 309.8 80 288 80s-42.8 1-62.6 2.8z\"]\n};\nconst faHandScissors = {\n  prefix: 'fas',\n  iconName: 'hand-scissors',\n  icon: [512, 512, [], \"f257\", \"M40 208c-22.1 0-40 17.9-40 40s17.9 40 40 40l180.2 0c-7.6 8.5-12.2 19.7-12.2 32c0 25.3 19.5 46 44.3 47.9c-7.7 8.5-12.3 19.8-12.3 32.1c0 26.5 21.5 48 48 48l32 0 64 0c70.7 0 128-57.3 128-128l0-113.1c0-40.2-16-78.8-44.4-107.3C444.8 76.8 413.9 64 381.7 64L336 64c-21.3 0-39.3 13.9-45.6 33.1l74.5 23.7c8.4 2.7 13.1 11.7 10.4 20.1s-11.7 13.1-20.1 10.4L288 129.9c0 0 0 .1 0 .1L84 65.8C62.9 59.2 40.5 70.9 33.8 92s5.1 43.5 26.2 50.2L269.5 208 40 208z\"]\n};\nconst faHandsPraying = {\n  prefix: 'fas',\n  iconName: 'hands-praying',\n  icon: [640, 512, [\"praying-hands\"], \"f684\", \"M351.2 4.8c3.2-2 6.6-3.3 10-4.1c4.7-1 9.6-.9 14.1 .1c7.7 1.8 14.8 6.5 19.4 13.6L514.6 194.2c8.8 13.1 13.4 28.6 13.4 44.4l0 73.5c0 6.9 4.4 13 10.9 15.2l79.2 26.4C631.2 358 640 370.2 640 384l0 96c0 9.9-4.6 19.3-12.5 25.4s-18.1 8.1-27.7 5.5L431 465.9c-56-14.9-95-65.7-95-123.7L336 224c0-17.7 14.3-32 32-32s32 14.3 32 32l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-84.9c0-7-1.8-13.8-5.3-19.8L340.3 48.1c-1.7-3-2.9-6.1-3.6-9.3c-1-4.7-1-9.6 .1-14.1c1.9-8 6.8-15.2 14.3-19.9zm-62.4 0c7.5 4.6 12.4 11.9 14.3 19.9c1.1 4.6 1.2 9.4 .1 14.1c-.7 3.2-1.9 6.3-3.6 9.3L213.3 199.3c-3.5 6-5.3 12.9-5.3 19.8l0 84.9c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-17.7 14.3-32 32-32s32 14.3 32 32l0 118.2c0 58-39 108.7-95 123.7l-168.7 45c-9.6 2.6-19.9 .5-27.7-5.5S0 490 0 480l0-96c0-13.8 8.8-26 21.9-30.4l79.2-26.4c6.5-2.2 10.9-8.3 10.9-15.2l0-73.5c0-15.8 4.7-31.2 13.4-44.4L245.2 14.5c4.6-7.1 11.7-11.8 19.4-13.6c4.6-1.1 9.4-1.2 14.1-.1c3.5 .8 6.9 2.1 10 4.1z\"]\n};\nconst faPrayingHands = faHandsPraying;\nconst faArrowRotateRight = {\n  prefix: 'fas',\n  iconName: 'arrow-rotate-right',\n  icon: [512, 512, [8635, \"arrow-right-rotate\", \"arrow-rotate-forward\", \"redo\"], \"f01e\", \"M386.3 160L336 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z\"]\n};\nconst faArrowRightRotate = faArrowRotateRight;\nconst faArrowRotateForward = faArrowRotateRight;\nconst faRedo = faArrowRotateRight;\nconst faWebAwesome = {\n  prefix: 'fas',\n  iconName: 'web-awesome',\n  icon: [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192l104.4-20.9c-5.3-7.7-8.4-17.1-8.4-27.1c0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144c0-26.5 21.5-48 48-48s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1c0-28.7 23.3-52 52-52s52 23.3 52 52z\"]\n};\nconst faBiohazard = {\n  prefix: 'fas',\n  iconName: 'biohazard',\n  icon: [576, 512, [9763], \"f780\", \"M173.2 0c-1.8 0-3.5 .7-4.8 2C138.5 32.3 120 74 120 120c0 26.2 6 50.9 16.6 73c-22 2.4-43.8 9.1-64.2 20.5C37.9 232.8 13.3 262.4 .4 296c-.7 1.7-.5 3.7 .5 5.2c2.2 3.7 7.4 4.3 10.6 1.3C64.2 254.3 158 245.1 205 324s-8.1 153.1-77.6 173.2c-4.2 1.2-6.3 5.9-4.1 9.6c1 1.6 2.6 2.7 4.5 3c36.5 5.9 75.2 .1 109.7-19.2c20.4-11.4 37.4-26.5 50.5-43.8c13.1 17.3 30.1 32.4 50.5 43.8c34.5 19.3 73.3 25.2 109.7 19.2c1.9-.3 3.5-1.4 4.5-3c2.2-3.7 .1-8.4-4.1-9.6C379.1 477.1 324 403 371 324s140.7-69.8 193.5-21.4c3.2 2.9 8.4 2.3 10.6-1.3c1-1.6 1.1-3.5 .5-5.2c-12.9-33.6-37.5-63.2-72.1-82.5c-20.4-11.4-42.2-18.1-64.2-20.5C450 170.9 456 146.2 456 120c0-46-18.5-87.7-48.4-118c-1.3-1.3-3-2-4.8-2c-5 0-8.4 5.2-6.7 9.9C421.7 80.5 385.6 176 288 176S154.3 80.5 179.9 9.9c1.7-4.7-1.6-9.9-6.7-9.9zM240 272a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM181.7 417.6c6.3-11.8 9.8-25.1 8.6-39.8c-19.5-18-34-41.4-41.2-67.8c-12.5-8.1-26.2-11.8-40-12.4c-9-.4-18.1 .6-27.1 2.7c7.8 57.1 38.7 106.8 82.9 139.4c6.8-6.7 12.6-14.1 16.8-22.1zM288 64c-28.8 0-56.3 5.9-81.2 16.5c2 8.3 5 16.2 9 23.5c6.8 12.4 16.7 23.1 30.1 30.3c13.3-4.1 27.5-6.3 42.2-6.3s28.8 2.2 42.2 6.3c13.4-7.2 23.3-17.9 30.1-30.3c4-7.3 7-15.2 9-23.5C344.3 69.9 316.8 64 288 64zM426.9 310c-7.2 26.4-21.7 49.7-41.2 67.8c-1.2 14.7 2.2 28.1 8.6 39.8c4.3 8 10 15.4 16.8 22.1c44.3-32.6 75.2-82.3 82.9-139.4c-9-2.2-18.1-3.1-27.1-2.7c-13.8 .6-27.5 4.4-40 12.4z\"]\n};\nconst faLocationCrosshairs = {\n  prefix: 'fas',\n  iconName: 'location-crosshairs',\n  icon: [512, 512, [\"location\"], \"f601\", \"M256 0c17.7 0 32 14.3 32 32l0 34.7C368.4 80.1 431.9 143.6 445.3 224l34.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-34.7 0C431.9 368.4 368.4 431.9 288 445.3l0 34.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.7C143.6 431.9 80.1 368.4 66.7 288L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l34.7 0C80.1 143.6 143.6 80.1 224 66.7L224 32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faLocation = faLocationCrosshairs;\nconst faMarsDouble = {\n  prefix: 'fas',\n  iconName: 'mars-double',\n  icon: [640, 512, [9891], \"f227\", \"M312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L275.8 159c-28.4-19.5-62.7-31-99.8-31C78.8 128 0 206.8 0 304s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L407 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L312 32zm88 48s0 0 0 0s0 0 0 0s0 0 0 0zM64 304a112 112 0 1 1 224 0A112 112 0 1 1 64 304zM368 480c97.2 0 176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L599 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L504 32c-9.7 0-18.5 5.8-22.2 14.8c-1.2 2.9-1.8 6-1.8 9l0 .2 0 .2c0 6.2 2.5 12.2 7 16.8l33.4 33.4L480 146.7l0 21.3c0 22.6-13.6 43.1-34.6 51.7c-.8 .3-1.7 .7-2.5 1C465.7 241.2 480 270.9 480 304c0 61.9-50.1 112-112 112c-5.4 0-10.8-.4-16-1.1c-12.9 20.4-29.1 38.3-48.1 53.1c19.8 7.8 41.4 12 64 12z\"]\n};\nconst faChildDress = {\n  prefix: 'fas',\n  iconName: 'child-dress',\n  icon: [320, 512, [], \"e59c\", \"M224 64A64 64 0 1 0 96 64a64 64 0 1 0 128 0zM88 400l0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 16 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 17.8 0c10.9 0 18.6-10.7 15.2-21.1l-31.1-93.4 28.6 37.8c10.7 14.1 30.8 16.8 44.8 6.2s16.8-30.7 6.2-44.8L254.6 207c-22.4-29.6-57.5-47-94.6-47s-72.2 17.4-94.6 47L6.5 284.7c-10.7 14.1-7.9 34.2 6.2 44.8s34.2 7.9 44.8-6.2l28.7-37.8L55 378.9C51.6 389.3 59.3 400 70.2 400L88 400z\"]\n};\nconst faUsersBetweenLines = {\n  prefix: 'fas',\n  iconName: 'users-between-lines',\n  icon: [640, 512, [], \"e591\", \"M0 24C0 10.7 10.7 0 24 0L616 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 48C10.7 48 0 37.3 0 24zM0 488c0-13.3 10.7-24 24-24l592 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24zM83.2 160a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 320c0-35.3 28.7-64 64-64l96 0c12.2 0 23.7 3.4 33.4 9.4c-37.2 15.1-65.6 47.2-75.8 86.6L64 352c-17.7 0-32-14.3-32-32zm461.6 32c-10.3-40.1-39.6-72.6-77.7-87.4c9.4-5.5 20.4-8.6 32.1-8.6l96 0c35.3 0 64 28.7 64 64c0 17.7-14.3 32-32 32l-82.4 0zM391.2 290.4c32.1 7.4 58.1 30.9 68.9 61.6c3.5 10 5.5 20.8 5.5 32c0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32c0-11.2 1.9-22 5.5-32c10.5-29.7 35.3-52.8 66.1-60.9c7.8-2.1 16-3.1 24.5-3.1l96 0c7.4 0 14.7 .8 21.6 2.4zm44-130.4a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM321.6 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faLungsVirus = {\n  prefix: 'fas',\n  iconName: 'lungs-virus',\n  icon: [640, 512, [], \"e067\", \"M320 0c17.7 0 32 14.3 32 32l0 124.2c-8.5-7.6-19.7-12.2-32-12.2s-23.5 4.6-32 12.2L288 32c0-17.7 14.3-32 32-32zM444.5 195.5c-16.4-16.4-41.8-18.5-60.5-6.1l0-24.1C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4l0 7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2c-20.9-5.2-38.7-17.1-51.5-32.9c14 1.5 28.5-3 39.2-13.8l-22.6-22.6 22.6 22.6c18.7-18.7 18.7-49.1 0-67.9c-1.1-1.1-1.4-2-1.5-2.5c-.1-.8-.1-1.8 .4-2.9s1.2-1.9 1.8-2.3c.5-.3 1.3-.8 2.9-.8c26.5 0 48-21.5 48-48s-21.5-48-48-48c-1.6 0-2.4-.4-2.9-.8c-.6-.4-1.3-1.2-1.8-2.3s-.5-2.2-.4-2.9c.1-.6 .4-1.4 1.5-2.5c18.7-18.7 18.7-49.1 0-67.9zM421.8 421.8c-6.2 6.2-16.4 6.2-22.6 0C375.9 398.5 336 415 336 448c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C241.5 375.9 225 336 192 336c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C264.1 241.5 304 225 304 192c0-8.8 7.2-16 16-16s16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C398.5 264.1 415 304 448 304c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6zM183.3 491.2l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89l0-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3l0 24.1c-18.6-12.4-44-10.3-60.5 6.1c-18.7 18.7-18.7 49.1 0 67.9c1.1 1.1 1.4 2 1.5 2.5c.1 .8 .1 1.8-.4 2.9s-1.2 1.9-1.8 2.3c-.5 .3-1.3 .8-2.9 .8c-26.5 0-48 21.5-48 48s21.5 48 48 48c1.6 0 2.4 .4 2.9 .8c.6 .4 1.3 1.2 1.8 2.3s.5 2.2 .4 2.9c-.1 .6-.4 1.4-1.5 2.5c-18.7 18.7-18.7 49.1 0 67.9c10.7 10.7 25.3 15.3 39.2 13.8c-12.8 15.9-30.6 27.7-51.5 32.9zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faFaceGrinTears = {\n  prefix: 'fas',\n  iconName: 'face-grin-tears',\n  icon: [640, 512, [128514, \"grin-tears\"], \"f588\", \"M548.6 371.4C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c3.6-8.8 6.5-18.4 8.8-27.5c4.6-18.2 7.7-37 9.3-48.2c3.9-26.5-18.8-49.2-45.2-45.4c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-26.5-3.9-49.2 18.8-45.2 45.4c1.6 11.3 4.6 30 9.3 48.2c2.3 9.1 5.2 18.8 8.8 27.5c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3zM107 254.1c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9zm454.5 87.1c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zm-90.1-9.7c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM281.6 228.8s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C190.7 188.4 184 206.1 184 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C350.7 188.4 344 206.1 344 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0z\"]\n};\nconst faGrinTears = faFaceGrinTears;\nconst faPhone = {\n  prefix: 'fas',\n  iconName: 'phone',\n  icon: [512, 512, [128222, 128379], \"f095\", \"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"]\n};\nconst faCalendarXmark = {\n  prefix: 'fas',\n  iconName: 'calendar-xmark',\n  icon: [448, 512, [\"calendar-times\"], \"f273\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM305 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47z\"]\n};\nconst faCalendarTimes = faCalendarXmark;\nconst faChildReaching = {\n  prefix: 'fas',\n  iconName: 'child-reaching',\n  icon: [384, 512, [], \"e59d\", \"M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z\"]\n};\nconst faHeadSideVirus = {\n  prefix: 'fas',\n  iconName: 'head-side-virus',\n  icon: [512, 512, [], \"e064\", \"M0 224.2C0 100.6 100.2 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320l0 64c0 35.3-28.7 64-64 64l-64 0 0 32c0 17.7-14.3 32-32 32L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM224 64c-8.8 0-16 7.2-16 16c0 33-39.9 49.5-63.2 26.2c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6C145.5 152.1 129 192 96 192c-8.8 0-16 7.2-16 16s7.2 16 16 16c33 0 49.5 39.9 26.2 63.2c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0C168.1 286.5 208 303 208 336c0 8.8 7.2 16 16 16s16-7.2 16-16c0-33 39.9-49.5 63.2-26.2c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6C302.5 263.9 319 224 352 224c8.8 0 16-7.2 16-16s-7.2-16-16-16c-33 0-49.5-39.9-26.2-63.2c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0C279.9 129.5 240 113 240 80c0-8.8-7.2-16-16-16zm-24 96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 80a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faUserGear = {\n  prefix: 'fas',\n  iconName: 'user-gear',\n  icon: [640, 512, [\"user-cog\"], \"f4fe\", \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304l91.4 0c11.8 0 23.4 1.2 34.5 3.3c-2.1 18.5 7.4 35.6 21.8 44.8c-16.6 10.6-26.7 31.6-20 53.3c4 12.9 9.4 25.5 16.4 37.6s15.2 23.1 24.4 33c15.7 16.9 39.6 18.4 57.2 8.7l0 .9c0 9.2 2.7 18.5 7.9 26.3L29.7 512C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM436 218.2c0-7 4.5-13.3 11.3-14.8c10.5-2.4 21.5-3.7 32.7-3.7s22.2 1.3 32.7 3.7c6.8 1.5 11.3 7.8 11.3 14.8l0 30.6c7.9 3.4 15.4 7.7 22.3 12.8l24.9-14.3c6.1-3.5 13.7-2.7 18.5 2.4c7.6 8.1 14.3 17.2 20.1 27.2s10.3 20.4 13.5 31c2.1 6.7-1.1 13.7-7.2 17.2l-25 14.4c.4 4 .7 8.1 .7 12.3s-.2 8.2-.7 12.3l25 14.4c6.1 3.5 9.2 10.5 7.2 17.2c-3.3 10.6-7.8 21-13.5 31s-12.5 19.1-20.1 27.2c-4.8 5.1-12.5 5.9-18.5 2.4l-24.9-14.3c-6.9 5.1-14.3 9.4-22.3 12.8l0 30.6c0 7-4.5 13.3-11.3 14.8c-10.5 2.4-21.5 3.7-32.7 3.7s-22.2-1.3-32.7-3.7c-6.8-1.5-11.3-7.8-11.3-14.8l0-30.5c-8-3.4-15.6-7.7-22.5-12.9l-24.7 14.3c-6.1 3.5-13.7 2.7-18.5-2.4c-7.6-8.1-14.3-17.2-20.1-27.2s-10.3-20.4-13.5-31c-2.1-6.7 1.1-13.7 7.2-17.2l24.8-14.3c-.4-4.1-.7-8.2-.7-12.4s.2-8.3 .7-12.4L343.8 325c-6.1-3.5-9.2-10.5-7.2-17.2c3.3-10.6 7.7-21 13.5-31s12.5-19.1 20.1-27.2c4.8-5.1 12.4-5.9 18.5-2.4l24.8 14.3c6.9-5.1 14.5-9.4 22.5-12.9l0-30.5zm92.1 133.5a48.1 48.1 0 1 0 -96.1 0 48.1 48.1 0 1 0 96.1 0z\"]\n};\nconst faUserCog = faUserGear;\nconst faArrowUp19 = {\n  prefix: 'fas',\n  iconName: 'arrow-up-1-9',\n  icon: [576, 512, [\"sort-numeric-up\"], \"f163\", \"M450.7 38c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zM160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3 192 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-301.7L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM445.7 364.9A32 32 0 1 0 418.3 307a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 408.4 344 375.2 344 336c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 467c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"]\n};\nconst faSortNumericUp = faArrowUp19;\nconst faDoorClosed = {\n  prefix: 'fas',\n  iconName: 'door-closed',\n  icon: [576, 512, [128682], \"f52a\", \"M96 64c0-35.3 28.7-64 64-64L416 0c35.3 0 64 28.7 64 64l0 384 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-112 0-288 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0L96 64zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faShieldVirus = {\n  prefix: 'fas',\n  iconName: 'shield-virus',\n  icon: [512, 512, [], \"e06c\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM256 112c8.8 0 16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C334.5 200.1 351 240 384 240c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C311.9 334.5 272 351 272 384c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C177.5 311.9 161 272 128 272c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C200.1 177.5 240 161 240 128c0-8.8 7.2-16 16-16zM232 256a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faDiceSix = {\n  prefix: 'fas',\n  iconName: 'dice-six',\n  icon: [448, 512, [9861], \"f526\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faMosquitoNet = {\n  prefix: 'fas',\n  iconName: 'mosquito-net',\n  icon: [640, 512, [], \"e52c\", \"M168.8 462.3c-7.9-4-11.1-13.6-7.2-21.5L192 380.2l0-44.2c0-4.2 1.7-8.3 4.7-11.3L256 265.4l0-23.1L139.2 344C87.8 395.3 0 358.9 0 286.3c0-41.1 30.6-75.8 71.4-80.9l159.9-23.9-49.6-41.3c-5.1-4.2-7-11.1-4.9-17.4l13.9-41.7-29-58.1c-4-7.9-.7-17.5 7.2-21.5s17.5-.7 21.5 7.2l32 64c1.9 3.8 2.2 8.2 .9 12.2l-12.5 37.6L256 160.5l0-22.6c0-14.9 10.1-27.3 23.8-31l0-43.3c0-4.5 3.7-8.2 8.2-8.2s8.2 3.7 8.2 8.2l0 43.3c13.7 3.6 23.8 16.1 23.8 31l0 22.6 45.4-37.8L352.8 85.1c-1.3-4-1-8.4 .9-12.2l32-64c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-29 58.1 13.9 41.7c2.1 6.2 .1 13.1-4.9 17.4l-49.6 41.3 159.9 23.9c22.5 2.8 41.8 14.6 54.7 31.4c-2.7 2.6-5.2 5.4-7.3 8.6c-8.6-12.9-23.3-21.5-40-21.5s-31.4 8.5-40 21.5c-8.6-12.9-23.3-21.5-40-21.5c-21.7 0-40 14.3-45.9 34.1c-10.7 3.2-19.8 10.1-25.9 19.2l-40.2-35 0 23.1 32.4 32.4c-.3 2-.4 4.1-.4 6.2c0 16.7 8.5 31.4 21.5 40c-4 2.6-7.5 5.9-10.6 9.5L320 310.6l0 50c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-50-32 32 0 41.4c0 2.5-.6 4.9-1.7 7.2l-32 64c-4 7.9-13.6 11.1-21.5 7.2zM512 256c8.8 0 16 7.2 16 16l0 16 48 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 16 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 48 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 48 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-48 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-48 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-48-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-48-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 16 48 0 0-16c0-8.8 7.2-16 16-16zm16 112l48 0 0-48-48 0 0 48zm0 80l48 0 0-48-48 0 0 48zM448 320l0 48 48 0 0-48-48 0zm0 80l0 48 48 0 0-48-48 0z\"]\n};\nconst faFileFragment = {\n  prefix: 'fas',\n  iconName: 'file-fragment',\n  icon: [384, 512, [], \"e697\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64l-128 0 0-128c0-35.3-28.7-64-64-64L0 320 0 64zm384 64l-128 0L256 0 384 128zM32 352l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32z\"]\n};\nconst faBridgeWater = {\n  prefix: 'fas',\n  iconName: 'bridge-water',\n  icon: [576, 512, [], \"e4ce\", \"M0 96C0 78.3 14.3 64 32 64l512 0c17.7 0 32 14.3 32 32l0 35.6c0 15.7-12.7 28.4-28.4 28.4c-37.3 0-67.6 30.2-67.6 67.6l0 124.9c-12.9 0-25.8 3.9-36.8 11.7c-18 12.4-40.1 20.3-59.2 20.3c0 0 0 0 0 0l0-.5 0-128c0-53-43-96-96-96s-96 43-96 96l0 128 0 .5c-19 0-41.2-7.9-59.1-20.3c-11.1-7.8-24-11.7-36.9-11.7l0-124.9C96 190.2 65.8 160 28.4 160C12.7 160 0 147.3 0 131.6L0 96zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faPersonBooth = {\n  prefix: 'fas',\n  iconName: 'person-booth',\n  icon: [576, 512, [], \"f756\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160 64 0 0-160zm320 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-448zM224 512c17.7 0 32-14.3 32-32l0-160-64 0 0 160c0 17.7 14.3 32 32 32zM320 0c-9.3 0-18.1 4-24.2 11s-8.8 16.3-7.5 25.5l31.2 218.6L288.6 409.7c-3.5 17.3 7.8 34.2 25.1 37.7s34.2-7.8 37.7-25.1l.7-3.6c1.3 16.4 15.1 29.4 31.9 29.4c17.7 0 32-14.3 32-32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32L320 0zM112 80A48 48 0 1 0 16 80a48 48 0 1 0 96 0zm0 261.3l0-72.1 4.7 4.7c9 9 21.2 14.1 33.9 14.1l73.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-66.7 0-41.6-41.6c-14.3-14.3-33.8-22.4-54-22.4C27.6 160 0 187.6 0 221.6l0 55.7 0 .9L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 42.7L96 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-58.7c0-10.4-3.4-20.5-9.6-28.8L112 341.3z\"]\n};\nconst faTextWidth = {\n  prefix: 'fas',\n  iconName: 'text-width',\n  icon: [448, 512, [], \"f035\", \"M64 128l0-32 128 0 0 128-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-128 128 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48c0-26.5-21.5-48-48-48L224 32 48 32C21.5 32 0 53.5 0 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32zM9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 192 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-192 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64z\"]\n};\nconst faHatWizard = {\n  prefix: 'fas',\n  iconName: 'hat-wizard',\n  icon: [512, 512, [], \"f6e8\", \"M64 416L168.6 180.7c15.3-34.4 40.3-63.5 72-83.7l146.9-94c3-1.9 6.5-2.9 10-2.9C407.7 0 416 8.3 416 18.6l0 1.6c0 2.6-.5 5.1-1.4 7.5L354.8 176.9c-1.9 4.7-2.8 9.7-2.8 14.7c0 5.5 1.2 11 3.4 16.1L448 416l-207.1 0 11.8-35.4 40.4-13.5c6.5-2.2 10.9-8.3 10.9-15.2s-4.4-13-10.9-15.2l-40.4-13.5-13.5-40.4C237 276.4 230.9 272 224 272s-13 4.4-15.2 10.9l-13.5 40.4-40.4 13.5C148.4 339 144 345.1 144 352s4.4 13 10.9 15.2l40.4 13.5L207.1 416 64 416zM279.6 141.5c-1.1-3.3-4.1-5.5-7.6-5.5s-6.5 2.2-7.6 5.5l-6.7 20.2-20.2 6.7c-3.3 1.1-5.5 4.1-5.5 7.6s2.2 6.5 5.5 7.6l20.2 6.7 6.7 20.2c1.1 3.3 4.1 5.5 7.6 5.5s6.5-2.2 7.6-5.5l6.7-20.2 20.2-6.7c3.3-1.1 5.5-4.1 5.5-7.6s-2.2-6.5-5.5-7.6l-20.2-6.7-6.7-20.2zM32 448l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faPenFancy = {\n  prefix: 'fas',\n  iconName: 'pen-fancy',\n  icon: [512, 512, [128395, 10002], \"f5ac\", \"M373.5 27.1C388.5 9.9 410.2 0 433 0c43.6 0 79 35.4 79 79c0 22.8-9.9 44.6-27.1 59.6L277.7 319l-10.3-10.3-64-64L193 234.3 373.5 27.1zM170.3 256.9l10.4 10.4 64 64 10.4 10.4-19.2 83.4c-3.9 17.1-16.9 30.7-33.8 35.4L24.3 510.3l95.4-95.4c2.6 .7 5.4 1.1 8.3 1.1c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3-32 32c0 2.9 .4 5.6 1.1 8.3L1.7 487.6 51.5 310c4.7-16.9 18.3-29.9 35.4-33.8l83.4-19.2z\"]\n};\nconst faPersonDigging = {\n  prefix: 'fas',\n  iconName: 'person-digging',\n  icon: [576, 512, [\"digging\"], \"f85e\", \"M208 64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM9.8 214.8c5.1-12.2 19.1-18 31.4-12.9L60.7 210l22.9-38.1C99.9 144.6 129.3 128 161 128c51.4 0 97 32.9 113.3 81.7l34.6 103.7 79.3 33.1 34.2-45.6c6.4-8.5 16.6-13.3 27.2-12.8s20.3 6.4 25.8 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2s-16.3 16.2-27.8 16.2l-256 0c-11.1 0-21.4-5.7-27.2-15.2s-6.4-21.2-1.4-31.1l16-32c5.4-10.8 16.5-17.7 28.6-17.7l32 0 22.5-30L22.8 246.2c-12.2-5.1-18-19.1-12.9-31.4zm82.8 91.8l112 48c11.8 5 19.4 16.6 19.4 29.4l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-74.9-60.6-26-37 111c-5.6 16.8-23.7 25.8-40.5 20.2S-3.9 486.6 1.6 469.9l48-144 11-33 32 13.7z\"]\n};\nconst faDigging = faPersonDigging;\nconst faTrash = {\n  prefix: 'fas',\n  iconName: 'trash',\n  icon: [448, 512, [], \"f1f8\", \"M135.2 17.7L128 32 32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0-7.2-14.3C307.4 6.8 296.3 0 284.2 0L163.8 0c-12.1 0-23.2 6.8-28.6 17.7zM416 128L32 128 53.2 467c1.6 25.3 22.6 45 47.9 45l245.8 0c25.3 0 46.3-19.7 47.9-45L416 128z\"]\n};\nconst faGaugeSimple = {\n  prefix: 'fas',\n  iconName: 'gauge-simple',\n  icon: [512, 512, [\"gauge-simple-med\", \"tachometer-average\"], \"f629\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3L280 88c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 204.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGaugeSimpleMed = faGaugeSimple;\nconst faTachometerAverage = faGaugeSimple;\nconst faBookMedical = {\n  prefix: 'fas',\n  iconName: 'book-medical',\n  icon: [448, 512, [], \"f7e6\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM208 112l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faPoo = {\n  prefix: 'fas',\n  iconName: 'poo',\n  icon: [512, 512, [128169], \"f2fe\", \"M268.9 .9c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.4c2.8 8.2 4.3 16.9 4.3 26.1c0 44.1-35.7 79.9-79.8 80L160 128c-35.3 0-64 28.7-64 64c0 19.1 8.4 36.3 21.7 48L104 240c-39.8 0-72 32.2-72 72c0 23.2 11 43.8 28 57c-34.1 5.7-60 35.3-60 71c0 39.8 32.2 72 72 72l368 0c39.8 0 72-32.2 72-72c0-35.7-25.9-65.3-60-71c17-13.2 28-33.8 28-57c0-39.8-32.2-72-72-72l-13.7 0c13.3-11.7 21.7-28.9 21.7-48c0-35.3-28.7-64-64-64l-5.5 0c3.5-10 5.5-20.8 5.5-32c0-48.6-36.2-88.8-83.1-95.1zM192 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm64 108.3c0 2.4-.7 4.8-2.2 6.7c-8.2 10.5-39.5 45-93.8 45s-85.6-34.6-93.8-45c-1.5-1.9-2.2-4.3-2.2-6.7c0-6.8 5.5-12.3 12.3-12.3l167.4 0c6.8 0 12.3 5.5 12.3 12.3z\"]\n};\nconst faQuoteRight = {\n  prefix: 'fas',\n  iconName: 'quote-right',\n  icon: [448, 512, [8221, \"quote-right-alt\"], \"f10e\", \"M448 296c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72zm-256 0c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72z\"]\n};\nconst faQuoteRightAlt = faQuoteRight;\nconst faShirt = {\n  prefix: 'fas',\n  iconName: 'shirt',\n  icon: [640, 512, [128085, \"t-shirt\", \"tshirt\"], \"f553\", \"M211.8 0c7.8 0 14.3 5.7 16.7 13.2C240.8 51.9 277.1 80 320 80s79.2-28.1 91.5-66.8C413.9 5.7 420.4 0 428.2 0l12.6 0c22.5 0 44.2 7.9 61.5 22.3L628.5 127.4c6.6 5.5 10.7 13.5 11.4 22.1s-2.1 17.1-7.8 23.6l-56 64c-11.4 13.1-31.2 14.6-44.6 3.5L480 197.7 480 448c0 35.3-28.7 64-64 64l-192 0c-35.3 0-64-28.7-64-64l0-250.3-51.5 42.9c-13.3 11.1-33.1 9.6-44.6-3.5l-56-64c-5.7-6.5-8.5-15-7.8-23.6s4.8-16.6 11.4-22.1L137.7 22.3C155 7.9 176.7 0 199.2 0l12.6 0z\"]\n};\nconst faTShirt = faShirt;\nconst faTshirt = faShirt;\nconst faCubes = {\n  prefix: 'fas',\n  iconName: 'cubes',\n  icon: [576, 512, [], \"f1b3\", \"M290.8 48.6l78.4 29.7L288 109.5 206.8 78.3l78.4-29.7c1.8-.7 3.8-.7 5.7 0zM136 92.5l0 112.2c-1.3 .4-2.6 .8-3.9 1.3l-96 36.4C14.4 250.6 0 271.5 0 294.7L0 413.9c0 22.2 13.1 42.3 33.5 51.3l96 42.2c14.4 6.3 30.7 6.3 45.1 0L288 457.5l113.5 49.9c14.4 6.3 30.7 6.3 45.1 0l96-42.2c20.3-8.9 33.5-29.1 33.5-51.3l0-119.1c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-1.3-.5-2.6-.9-3.9-1.3l0-112.2c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-12.8-4.8-26.9-4.8-39.7 0l-96 36.4C150.4 48.4 136 69.3 136 92.5zM392 210.6l-82.4 31.2 0-89.2L392 121l0 89.6zM154.8 250.9l78.4 29.7L152 311.7 70.8 280.6l78.4-29.7c1.8-.7 3.8-.7 5.7 0zm18.8 204.4l0-100.5L256 323.2l0 95.9-82.4 36.2zM421.2 250.9c1.8-.7 3.8-.7 5.7 0l78.4 29.7L424 311.7l-81.2-31.1 78.4-29.7zM523.2 421.2l-77.6 34.1 0-100.5L528 323.2l0 90.7c0 3.2-1.9 6-4.8 7.3z\"]\n};\nconst faDivide = {\n  prefix: 'fas',\n  iconName: 'divide',\n  icon: [448, 512, [10135, 247], \"f529\", \"M272 96a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 320a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 288c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0z\"]\n};\nconst faTengeSign = {\n  prefix: 'fas',\n  iconName: 'tenge-sign',\n  icon: [384, 512, [8376, \"tenge\"], \"f7d7\", \"M0 64C0 46.3 14.3 32 32 32l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM0 192c0-17.7 14.3-32 32-32l160 0 160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0 0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224L32 224c-17.7 0-32-14.3-32-32z\"]\n};\nconst faTenge = faTengeSign;\nconst faHeadphones = {\n  prefix: 'fas',\n  iconName: 'headphones',\n  icon: [512, 512, [127911], \"f025\", \"M256 80C149.9 80 62.4 159.4 49.6 262c9.4-3.8 19.6-6 30.4-6c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48c-44.2 0-80-35.8-80-80l0-16 0-48 0-48C0 146.6 114.6 32 256 32s256 114.6 256 256l0 48 0 48 0 16c0 44.2-35.8 80-80 80c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48c10.8 0 21 2.1 30.4 6C449.6 159.4 362.1 80 256 80z\"]\n};\nconst faHandsHolding = {\n  prefix: 'fas',\n  iconName: 'hands-holding',\n  icon: [640, 512, [], \"f4c2\", \"M80 104c0-22.1-17.9-40-40-40S0 81.9 0 104l0 56 0 64L0 325.5c0 25.5 10.1 49.9 28.1 67.9L128 493.3c12 12 28.3 18.7 45.3 18.7l66.7 0c26.5 0 48-21.5 48-48l0-78.9c0-29.7-11.8-58.2-32.8-79.2l-25.3-25.3c0 0 0 0 0 0l-15.2-15.2-32-32c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l32 32 15.2 15.2c11 11 9.2 29.2-3.7 37.8c-9.7 6.5-22.7 5.2-31-3.1L98.7 309.5c-12-12-18.7-28.3-18.7-45.3L80 224l0-80 0-40zm480 0l0 40 0 80 0 40.2c0 17-6.7 33.3-18.7 45.3l-51.1 51.1c-8.3 8.3-21.3 9.6-31 3.1c-12.9-8.6-14.7-26.9-3.7-37.8l15.2-15.2 32-32c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-32 32-15.2 15.2c0 0 0 0 0 0l-25.3 25.3c-21 21-32.8 49.5-32.8 79.2l0 78.9c0 26.5 21.5 48 48 48l66.7 0c17 0 33.3-6.7 45.3-18.7l99.9-99.9c18-18 28.1-42.4 28.1-67.9L640 224l0-64 0-56c0-22.1-17.9-40-40-40s-40 17.9-40 40z\"]\n};\nconst faHandsClapping = {\n  prefix: 'fas',\n  iconName: 'hands-clapping',\n  icon: [512, 512, [], \"e1a8\", \"M336 16l0 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16zm-98.7 7.1l32 48c4.9 7.4 2.9 17.3-4.4 22.2s-17.3 2.9-22.2-4.4l-32-48c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4zM135 119c9.4-9.4 24.6-9.4 33.9 0L292.7 242.7c10.1 10.1 27.3 2.9 27.3-11.3l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4c-64 38.4-145.8 28.3-198.5-24.4L7 361c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l53 53c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L23 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l93 93c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L55 185c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l117 117c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1l-93-93c-9.4-9.4-9.4-24.6 0-33.9zM433.1 484.9c-24.2 14.5-50.9 22.1-77.7 23.1c48.1-39.6 76.6-99 76.6-162.4l0-98.1c8.2-.1 16-6.4 16-16l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4zM424.9 18.7c7.4 4.9 9.3 14.8 4.4 22.2l-32 48c-4.9 7.4-14.8 9.3-22.2 4.4s-9.3-14.8-4.4-22.2l32-48c4.9-7.4 14.8-9.3 22.2-4.4z\"]\n};\nconst faRepublican = {\n  prefix: 'fas',\n  iconName: 'republican',\n  icon: [640, 512, [], \"f75e\", \"M0 192C0 103.6 71.6 32 160 32l224 0c88.4 0 160 71.6 160 160l0 64L0 256l0-64zm415.9-64c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L466 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm-138.3 3.4c-1.1-2.1-3.3-3.4-5.7-3.4s-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L322 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6zM127.9 128c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L178 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm.1 160l192 0 96 0 32 0 64 0 32 0 0 32 0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 44.2-35.8 80-80 80s-80-35.8-80-80l0-48-32 0 0 32 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64-192 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64 0-96 128 0z\"]\n};\nconst faArrowLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-left',\n  icon: [448, 512, [8592], \"f060\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"]\n};\nconst faPersonCircleXmark = {\n  prefix: 'fas',\n  iconName: 'person-circle-xmark',\n  icon: [576, 512, [], \"e543\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"]\n};\nconst faRuler = {\n  prefix: 'fas',\n  iconName: 'ruler',\n  icon: [512, 512, [128207], \"f545\", \"M177.9 494.1c-18.7 18.7-49.1 18.7-67.9 0L17.9 401.9c-18.7-18.7-18.7-49.1 0-67.9l50.7-50.7 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 50.7-50.7c18.7-18.7 49.1-18.7 67.9 0l92.1 92.1c18.7 18.7 18.7 49.1 0 67.9L177.9 494.1z\"]\n};\nconst faAlignLeft = {\n  prefix: 'fas',\n  iconName: 'align-left',\n  icon: [448, 512, [], \"f036\", \"M288 64c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32L32 352c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faDiceD6 = {\n  prefix: 'fas',\n  iconName: 'dice-d6',\n  icon: [448, 512, [], \"f6d1\", \"M201 10.3c14.3-7.8 31.6-7.8 46 0L422.3 106c5.1 2.8 8.3 8.2 8.3 14s-3.2 11.2-8.3 14L231.7 238c-4.8 2.6-10.5 2.6-15.3 0L25.7 134c-5.1-2.8-8.3-8.2-8.3-14s3.2-11.2 8.3-14L201 10.3zM23.7 170l176 96c5.1 2.8 8.3 8.2 8.3 14l0 216c0 5.6-3 10.9-7.8 13.8s-10.9 3-15.8 .3L25 423.1C9.6 414.7 0 398.6 0 381L0 184c0-5.6 3-10.9 7.8-13.8s10.9-3 15.8-.3zm400.7 0c5-2.7 11-2.6 15.8 .3s7.8 8.1 7.8 13.8l0 197c0 17.6-9.6 33.7-25 42.1L263.7 510c-5 2.7-11 2.6-15.8-.3s-7.8-8.1-7.8-13.8l0-216c0-5.9 3.2-11.2 8.3-14l176-96z\"]\n};\nconst faRestroom = {\n  prefix: 'fas',\n  iconName: 'restroom',\n  icon: [640, 512, [], \"f7bd\", \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-154.8c-8.1 9.2-21.1 13.2-33.5 9.4c-16.9-5.3-26.3-23.2-21-40.1l30.9-99.1C44.9 155.3 82 128 124 128l8 0c42 0 79.1 27.3 91.6 67.4l30.9 99.1c5.3 16.9-4.1 34.8-21 40.1c-12.4 3.9-25.4-.2-33.5-9.4L200 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM320 0c13.3 0 24 10.7 24 24l0 464c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-464c0-13.3 10.7-24 24-24zM464 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM440 480l0-96-17.8 0c-10.9 0-18.6-10.7-15.2-21.1l9-26.9c-3.2 0-6.4-.5-9.5-1.5c-16.9-5.3-26.3-23.2-21-40.1l29.7-95.2C428.4 156.9 467.6 128 512 128s83.6 28.9 96.8 71.2l29.7 95.2c5.3 16.9-4.1 34.8-21 40.1c-3.2 1-6.4 1.5-9.5 1.5l9 26.9c3.5 10.4-4.3 21.1-15.2 21.1L584 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"]\n};\nconst faJ = {\n  prefix: 'fas',\n  iconName: 'j',\n  icon: [320, 512, [106], \"4a\", \"M288 32c17.7 0 32 14.3 32 32l0 256c0 88.4-71.6 160-160 160S0 408.4 0 320l0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32c0 53 43 96 96 96s96-43 96-96l0-256c0-17.7 14.3-32 32-32z\"]\n};\nconst faUsersViewfinder = {\n  prefix: 'fas',\n  iconName: 'users-viewfinder',\n  icon: [640, 512, [], \"e595\", \"M48 48l88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L32 0C14.3 0 0 14.3 0 32L0 136c0 13.3 10.7 24 24 24s24-10.7 24-24l0-88zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6l56.1 0zm-89.4 0c-8.6-24.3-29.9-42.6-55.9-47c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80-32a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM504 48l88 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104c0-17.7-14.3-32-32-32L504 0c-13.3 0-24 10.7-24 24s10.7 24 24 24zM48 464l0-88c0-13.3-10.7-24-24-24s-24 10.7-24 24L0 480c0 17.7 14.3 32 32 32l104 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0zm456 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0c17.7 0 32-14.3 32-32l0-104c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 88-88 0z\"]\n};\nconst faFileVideo = {\n  prefix: 'fas',\n  iconName: 'file-video',\n  icon: [384, 512, [], \"f1c8\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 288c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96zM300.9 397.9L256 368l0-64 44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3l0 103.4c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1z\"]\n};\nconst faUpRightFromSquare = {\n  prefix: 'fas',\n  iconName: 'up-right-from-square',\n  icon: [512, 512, [\"external-link-alt\"], \"f35d\", \"M352 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9L370.7 96 201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 141.3l41.4 41.4c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-128c0-17.7-14.3-32-32-32L352 0zM80 32C35.8 32 0 67.8 0 112L0 432c0 44.2 35.8 80 80 80l320 0c44.2 0 80-35.8 80-80l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-320c0-8.8 7.2-16 16-16l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"]\n};\nconst faExternalLinkAlt = faUpRightFromSquare;\nconst faTableCells = {\n  prefix: 'fas',\n  iconName: 'table-cells',\n  icon: [512, 512, [\"th\"], \"f00a\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 64l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0zM64 224l88 0 0 64-88 0 0-64zm232 0l0 64-88 0 0-64 88 0zm64 0l88 0 0 64-88 0 0-64zM152 352l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0z\"]\n};\nconst faTh = faTableCells;\nconst faFilePdf = {\n  prefix: 'fas',\n  iconName: 'file-pdf',\n  icon: [512, 512, [], \"f1c1\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 144-208 0c-35.3 0-64 28.7-64 64l0 144-48 0c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM176 352l32 0c30.9 0 56 25.1 56 56s-25.1 56-56 56l-16 0 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-80c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0 48 16 0zm96-80l32 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16l0-128c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-16 0 0 96 16 0zm80-112c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64 0-64z\"]\n};\nconst faBookBible = {\n  prefix: 'fas',\n  iconName: 'book-bible',\n  icon: [448, 512, [\"bible\"], \"f647\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zM208 80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 112c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-112-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faBible = faBookBible;\nconst faO = {\n  prefix: 'fas',\n  iconName: 'o',\n  icon: [448, 512, [111], \"4f\", \"M224 96a160 160 0 1 0 0 320 160 160 0 1 0 0-320zM448 256A224 224 0 1 1 0 256a224 224 0 1 1 448 0z\"]\n};\nconst faSuitcaseMedical = {\n  prefix: 'fas',\n  iconName: 'suitcase-medical',\n  icon: [512, 512, [\"medkit\"], \"f0fa\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40 0 32 0 352 256 0 0-352 0-32 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM96 96L64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l32 0L96 96zM416 480l32 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-32 0 0 384zM224 208c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faMedkit = faSuitcaseMedical;\nconst faUserSecret = {\n  prefix: 'fas',\n  iconName: 'user-secret',\n  icon: [448, 512, [128373], \"f21b\", \"M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48l-59.9 0C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4l-59.9 0c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208l-12.4 0c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2L168 224c-22.1 0-40-17.9-40-40l0-14.4c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4l0 14.4c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z\"]\n};\nconst faOtter = {\n  prefix: 'fas',\n  iconName: 'otter',\n  icon: [640, 512, [129446], \"f700\", \"M181.5 197.1l12.9 6.4c5.9 3 12.4 4.5 19.1 4.5c23.5 0 42.6-19.1 42.6-42.6l0-21.4c0-35.3-28.7-64-64-64l-64 0c-35.3 0-64 28.7-64 64l0 21.4c0 23.5 19.1 42.6 42.6 42.6c6.6 0 13.1-1.5 19.1-4.5l12.9-6.4 8.4-4.2L135.1 185c-4.5-3-7.1-8-7.1-13.3l0-3.7c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24l0 3.7c0 5.3-2.7 10.3-7.1 13.3l-11.8 7.9 8.4 4.2zm-8.6 49.4L160 240l-12.9 6.4c-12.6 6.3-26.5 9.6-40.5 9.6c-3.6 0-7.1-.2-10.6-.6l0 .6c0 35.3 28.7 64 64 64l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l160 0 0-48 0-16c0-23.7 12.9-44.4 32-55.4c9.4-5.4 20.3-8.6 32-8.6l0-16c0-26.5 21.5-48 48-48c8.8 0 16 7.2 16 16l0 32 0 16 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-99.7c0-48.2-30.8-91-76.6-106.3l-8.5-2.8c-8-2.7-12.6-11.1-10.4-19.3s10.3-13.2 18.6-11.6l19.9 4C576 86.1 640 164.2 640 254.9l0 1.1s0 0 0 0c0 123.7-100.3 224-224 224l-1.1 0L256 480l-.6 0C132 480 32 380 32 256.6l0-.6 0-39.2c-10.1-14.6-16-32.3-16-51.4L16 144l0-1.4C6.7 139.3 0 130.5 0 120c0-13.3 10.7-24 24-24l2.8 0C44.8 58.2 83.3 32 128 32l64 0c44.7 0 83.2 26.2 101.2 64l2.8 0c13.3 0 24 10.7 24 24c0 10.5-6.7 19.3-16 22.6l0 1.4 0 21.4c0 1.4 0 2.8-.1 4.3c12-6.2 25.7-9.6 40.1-9.6l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-13.3 0-24 10.7-24 24l0 8 56.4 0c-15.2 17-24.4 39.4-24.4 64l-32 0c-42.3 0-78.2-27.4-91-65.3c-5.1 .9-10.3 1.3-15.6 1.3c-14.1 0-27.9-3.3-40.5-9.6zM96 128a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm112 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faPersonDress = {\n  prefix: 'fas',\n  iconName: 'person-dress',\n  icon: [320, 512, [\"female\"], \"f182\", \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM88 384l-17.8 0c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2c20.3-33.7 56.7-54.3 96-54.3l11.6 0c39.3 0 75.7 20.6 96 54.3l53.6 89.2c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9l-33.9-56.3L265 362.9c3.5 10.4-4.3 21.1-15.2 21.1L232 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96z\"]\n};\nconst faFemale = faPersonDress;\nconst faCommentDollar = {\n  prefix: 'fas',\n  iconName: 'comment-dollar',\n  icon: [512, 512, [], \"f651\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm20-312l0 13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9l0 13.8c0 11-9 20-20 20s-20-9-20-20l0-14.6c-10.3-2.2-20-5.5-28.2-8.4c0 0 0 0 0 0s0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c0 0 0 0 0 0c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5l0-14c0-11 9-20 20-20s20 9 20 20z\"]\n};\nconst faBusinessTime = {\n  prefix: 'fas',\n  iconName: 'business-time',\n  icon: [640, 512, [\"briefcase-clock\"], \"f64a\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160l0 96 192 0 160 0 8.2 0c32.3-39.1 81.1-64 135.8-64c5.4 0 10.7 .2 16 .7l0-32.7c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM320 352l-96 0c-17.7 0-32-14.3-32-32l0-32L0 288 0 416c0 35.3 28.7 64 64 64l296.2 0C335.1 449.6 320 410.5 320 368c0-5.4 .2-10.7 .7-16l-.7 0zm320 16a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM496 288c8.8 0 16 7.2 16 16l0 48 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16z\"]\n};\nconst faBriefcaseClock = faBusinessTime;\nconst faTableCellsLarge = {\n  prefix: 'fas',\n  iconName: 'table-cells-large',\n  icon: [512, 512, [\"th-large\"], \"f009\", \"M448 96l0 128-160 0 0-128 160 0zm0 192l0 128-160 0 0-128 160 0zM224 224L64 224 64 96l160 0 0 128zM64 288l160 0 0 128L64 416l0-128zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nconst faThLarge = faTableCellsLarge;\nconst faBookTanakh = {\n  prefix: 'fas',\n  iconName: 'book-tanakh',\n  icon: [448, 512, [\"tanakh\"], \"f827\", \"M352 0c53 0 96 43 96 96l0 320c0 53-43 96-96 96L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0L64 0 352 0zm0 384L96 384l0 64 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zM138.7 208l13.9 24-27.7 0 13.9-24zm-13.9-24L97.1 232c-6.2 10.7 1.5 24 13.9 24l55.4 0 27.7 48c6.2 10.7 21.6 10.7 27.7 0l27.7-48 55.4 0c12.3 0 20-13.3 13.9-24l-27.7-48 27.7-48c6.2-10.7-1.5-24-13.9-24l-55.4 0L221.9 64c-6.2-10.7-21.6-10.7-27.7 0l-27.7 48L111 112c-12.3 0-20 13.3-13.9 24l27.7 48zm27.7 0l27.7-48 55.4 0 27.7 48-27.7 48-55.4 0-27.7-48zm0-48l-13.9 24-13.9-24 27.7 0zm41.6-24L208 88l13.9 24-27.7 0zm69.3 24l27.7 0-13.9 24-13.9-24zm13.9 72l13.9 24-27.7 0 13.9-24zm-55.4 48L208 280l-13.9-24 27.7 0z\"]\n};\nconst faTanakh = faBookTanakh;\nconst faPhoneVolume = {\n  prefix: 'fas',\n  iconName: 'phone-volume',\n  icon: [512, 512, [\"volume-control-phone\"], \"f2a0\", \"M280 0C408.1 0 512 103.9 512 232c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-101.6-82.4-184-184-184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32-72c0-13.3 10.7-24 24-24c75.1 0 136 60.9 136 136c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6-39.4-88-88-88c-13.3 0-24-10.7-24-24zM117.5 1.4c19.4-5.3 39.7 4.6 47.4 23.2l40 96c6.8 16.3 2.1 35.2-11.6 46.3L144 207.3c33.3 70.4 90.3 127.4 160.7 160.7L345 318.7c11.2-13.7 30-18.4 46.3-11.6l96 40c18.6 7.7 28.5 28 23.2 47.4l-24 88C481.8 499.9 466 512 448 512C200.6 512 0 311.4 0 64C0 46 12.1 30.2 29.5 25.4l88-24z\"]\n};\nconst faVolumeControlPhone = faPhoneVolume;\nconst faHatCowboySide = {\n  prefix: 'fas',\n  iconName: 'hat-cowboy-side',\n  icon: [640, 512, [], \"f8c1\", \"M152.7 135.9l-10.4 57.2c6.8-.7 13.6-1.1 20.5-1.1l10.7 0c39.4 0 77.8 12.1 110.1 34.7L562.4 421.8l35.1 24.6c24.4-6 42.5-28.1 42.5-54.4c0-75.8-94.7-126.6-134.6-144.7L474 83.9C468.2 53.8 441.8 32 411.1 32l-2.7 0c-5.6 0-11.1 .7-16.5 2.2L199.2 85.5c-23.9 6.4-42 26-46.5 50.4zM0 384c0 35.3 28.7 64 64 64l480 0L265.3 252.9c-26.9-18.8-58.9-28.9-91.8-28.9l-10.7 0c-60.6 0-116 34.2-143.1 88.4L13.5 325C4.6 342.7 0 362.3 0 382.2L0 384z\"]\n};\nconst faClipboardUser = {\n  prefix: 'fas',\n  iconName: 'clipboard-user',\n  icon: [384, 512, [], \"f7f3\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM128 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 432c0-44.2 35.8-80 80-80l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 448c-8.8 0-16-7.2-16-16z\"]\n};\nconst faChild = {\n  prefix: 'fas',\n  iconName: 'child',\n  icon: [320, 512, [], \"f1ae\", \"M96 64a64 64 0 1 1 128 0A64 64 0 1 1 96 64zm48 320l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192.2L59.1 321c-9.4 15-29.2 19.4-44.1 10S-4.5 301.9 4.9 287l39.9-63.3C69.7 184 113.2 160 160 160s90.3 24 115.2 63.6L315.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L240 287.8 240 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-32 0z\"]\n};\nconst faLiraSign = {\n  prefix: 'fas',\n  iconName: 'lira-sign',\n  icon: [320, 512, [8356], \"f195\", \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4L48 192l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 32-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l14 0c-2.2 10.5-6.1 20.6-11.7 29.9L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L88.5 416l.7-1.1c11.6-19.3 18.9-40.7 21.6-62.9L224 352c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-32 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-31.6z\"]\n};\nconst faSatellite = {\n  prefix: 'fas',\n  iconName: 'satellite',\n  icon: [512, 512, [128752], \"f7bf\", \"M233 7c-9.4-9.4-24.6-9.4-33.9 0l-96 96c-9.4 9.4-9.4 24.6 0 33.9l89.4 89.4-15.5 15.5C152.3 230.4 124.9 224 96 224c-31.7 0-61.5 7.7-87.8 21.2c-9 4.7-10.3 16.7-3.1 23.8L112.7 376.7 96.3 393.1c-2.6-.7-5.4-1.1-8.3-1.1c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32c0-2.9-.4-5.6-1.1-8.3l16.4-16.4L242.9 506.9c7.2 7.2 19.2 5.9 23.8-3.1C280.3 477.5 288 447.7 288 416c0-28.9-6.4-56.3-17.8-80.9l15.5-15.5L375 409c9.4 9.4 24.6 9.4 33.9 0l96-96c9.4-9.4 9.4-24.6 0-33.9l-89.4-89.4 55-55c12.5-12.5 12.5-32.8 0-45.3l-48-48c-12.5-12.5-32.8-12.5-45.3 0l-55 55L233 7zm159 351l-72.4-72.4 62.1-62.1L454.1 296 392 358.1zM226.3 192.4L153.9 120 216 57.9l72.4 72.4-62.1 62.1z\"]\n};\nconst faPlaneLock = {\n  prefix: 'fas',\n  iconName: 'plane-lock',\n  icon: [640, 512, [], \"e558\", \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 84.6 101.8 58.2C418 247.6 416 259.6 416 272l0 24.6c-17.9 10.4-30.3 29.1-31.8 50.9L320 329.1l0 70.9 57.6 43.2c4 3 6.4 7.8 6.4 12.8l0 24 0 18c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14l0-42c0-5 2.4-9.8 6.4-12.8L192 400l0-70.9-171.6 49C10.2 381.1 0 373.4 0 362.8l0-65.5c0-5.7 3.1-11 8.1-13.9L192 178.3l0-84.6zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faTag = {\n  prefix: 'fas',\n  iconName: 'tag',\n  icon: [448, 512, [127991], \"f02b\", \"M0 80L0 229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7L48 32C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faComment = {\n  prefix: 'fas',\n  iconName: 'comment',\n  icon: [512, 512, [128489, 61669], \"f075\", \"M512 240c0 114.9-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6C73.6 471.1 44.7 480 16 480c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.3-.3c.3-.3 .7-.7 1.3-1.4c1.1-1.2 2.8-3.1 4.9-5.7c4.1-5 9.6-12.4 15.2-21.6c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208z\"]\n};\nconst faCakeCandles = {\n  prefix: 'fas',\n  iconName: 'cake-candles',\n  icon: [448, 512, [127874, \"birthday-cake\", \"cake\"], \"f1fd\", \"M86.4 5.5L61.8 47.6C58 54.1 56 61.6 56 69.2L56 72c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L105.6 5.5C103.6 2.1 100 0 96 0s-7.6 2.1-9.6 5.5zm128 0L189.8 47.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L233.6 5.5C231.6 2.1 228 0 224 0s-7.6 2.1-9.6 5.5zM317.8 47.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L361.6 5.5C359.6 2.1 356 0 352 0s-7.6 2.1-9.6 5.5L317.8 47.6zM128 176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c-35.3 0-64 28.7-64 64l0 71c8.3 5.2 18.1 9 28.8 9c13.5 0 27.2-6.1 38.4-13.4c5.4-3.5 9.9-7.1 13-9.7c1.5-1.3 2.7-2.4 3.5-3.1c.4-.4 .7-.6 .8-.8l.1-.1s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c3.1-3.2 7.4-4.9 11.9-4.8s8.6 2.1 11.6 5.4c0 0 0 0 0 0s0 0 0 0l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c3-3.5 7.4-5.4 12-5.4s9 2 12 5.4l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c2.9-3.4 7.1-5.3 11.6-5.4s8.7 1.6 11.9 4.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0l.1 .1c.2 .2 .4 .4 .8 .8c.8 .7 1.9 1.8 3.5 3.1c3.1 2.6 7.5 6.2 13 9.7c11.2 7.3 24.9 13.4 38.4 13.4c10.7 0 20.5-3.9 28.8-9l0-71c0-35.3-28.7-64-64-64l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48zM448 394.6c-8.5 3.3-18.2 5.4-28.8 5.4c-22.5 0-42.4-9.9-55.8-18.6c-4.1-2.7-7.8-5.4-10.9-7.8c-2.8 2.4-6.1 5-9.8 7.5C329.8 390 310.6 400 288 400s-41.8-10-54.6-18.9c-3.5-2.4-6.7-4.9-9.4-7.2c-2.7 2.3-5.9 4.7-9.4 7.2C201.8 390 182.6 400 160 400s-41.8-10-54.6-18.9c-3.7-2.6-7-5.2-9.8-7.5c-3.1 2.4-6.8 5.1-10.9 7.8C71.2 390.1 51.3 400 28.8 400c-10.6 0-20.3-2.2-28.8-5.4L0 480c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32l0-85.4z\"]\n};\nconst faBirthdayCake = faCakeCandles;\nconst faCake = faCakeCandles;\nconst faEnvelope = {\n  prefix: 'fas',\n  iconName: 'envelope',\n  icon: [512, 512, [128386, 9993, 61443], \"f0e0\", \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"]\n};\nconst faAnglesUp = {\n  prefix: 'fas',\n  iconName: 'angles-up',\n  icon: [448, 512, [\"angle-double-up\"], \"f102\", \"M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"]\n};\nconst faAngleDoubleUp = faAnglesUp;\nconst faPaperclip = {\n  prefix: 'fas',\n  iconName: 'paperclip',\n  icon: [448, 512, [128206], \"f0c6\", \"M364.2 83.8c-24.4-24.4-64-24.4-88.4 0l-184 184c-42.1 42.1-42.1 110.3 0 152.4s110.3 42.1 152.4 0l152-152c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-152 152c-64 64-167.6 64-231.6 0s-64-167.6 0-231.6l184-184c46.3-46.3 121.3-46.3 167.6 0s46.3 121.3 0 167.6l-176 176c-28.6 28.6-75 28.6-103.6 0s-28.6-75 0-103.6l144-144c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-144 144c-6.7 6.7-6.7 17.7 0 24.4s17.7 6.7 24.4 0l176-176c24.4-24.4 24.4-64 0-88.4z\"]\n};\nconst faArrowRightToCity = {\n  prefix: 'fas',\n  iconName: 'arrow-right-to-city',\n  icon: [640, 512, [], \"e4b3\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 144 40 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 24 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48l-160 0-96 0c-26.5 0-48-21.5-48-48l0-416zm64 32l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 272l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM166.6 153.4l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L146.7 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l114.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z\"]\n};\nconst faRibbon = {\n  prefix: 'fas',\n  iconName: 'ribbon',\n  icon: [448, 512, [127895], \"f4d6\", \"M333.2 322.8s0 0 0 0l-133.9-146s0 0 0 0L146 118.6c7.8-5.1 37-22.6 78-22.6s70.2 17.4 78 22.6L245.7 180l85.6 93.4 27.4-29.8c16.3-17.7 25.3-40.9 25.3-65l0-29.5c0-19-5.6-37.5-16.1-53.3L327.8 35.6C312.9 13.4 287.9 0 261.2 0l-76 0c-25.8 0-50.1 12.5-65.1 33.5L81.9 87C70.3 103.2 64 122.8 64 142.8L64 164c0 23.2 8.4 45.6 23.6 63.1l56 64.2s0 0 0 0l83.3 95.6s0 0 0 0l91.8 105.3c10 11.5 26.8 14.3 40 6.8l54.5-31.1c17.8-10.2 21.6-34.3 7.7-49.4l-87.7-95.7zM205.2 410.6l-83.3-95.6L27.1 418.5c-13.9 15.1-10.1 39.2 7.7 49.4l55.1 31.5c13 7.4 29.3 4.9 39.4-6.1l75.9-82.6z\"]\n};\nconst faLungs = {\n  prefix: 'fas',\n  iconName: 'lungs',\n  icon: [640, 512, [129729], \"f604\", \"M320 0c17.7 0 32 14.3 32 32l0 132.1c0 16.4 8.4 31.7 22.2 40.5l9.8 6.2 0-45.5C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4l0 7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2C414 480.5 384 442.1 384 398l0-73 90.5 57.6c7.5 4.7 17.3 2.5 22.1-4.9s2.5-17.3-4.9-22.1L384 287.1l0-.4-44.1-28.1c-7.3-4.6-13.9-10.1-19.9-16.1c-5.9 6-12.6 11.5-19.9 16.1L256 286.7 161.2 347l-13.5 8.6c0 0 0 0-.1 0c-7.4 4.8-9.6 14.6-4.8 22.1c4.7 7.5 14.6 9.7 22.1 4.9l91.1-58 0 73.4c0 44.1-30 82.5-72.7 93.1l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89l0-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3l0 45.5 9.8-6.2c13.8-8.8 22.2-24.1 22.2-40.5L288 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faArrowUp91 = {\n  prefix: 'fas',\n  iconName: 'arrow-up-9-1',\n  icon: [576, 512, [\"sort-numeric-up-alt\"], \"f887\", \"M160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3 192 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-301.7L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM450.7 294c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zm-5-145.1A32 32 0 1 0 418.3 91a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 192.4 344 159.2 344 120c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 251c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"]\n};\nconst faSortNumericUpAlt = faArrowUp91;\nconst faLitecoinSign = {\n  prefix: 'fas',\n  iconName: 'litecoin-sign',\n  icon: [384, 512, [], \"e1d3\", \"M128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 149.6L23.2 225.2c-17 4.9-26.8 22.6-22 39.6s22.6 26.8 39.6 22L64 280.1 64 448c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0 0-154.1 136.8-39.1c17-4.9 26.8-22.6 22-39.6s-22.6-26.8-39.6-22L128 195.3 128 64z\"]\n};\nconst faBorderNone = {\n  prefix: 'fas',\n  iconName: 'border-none',\n  icon: [448, 512, [], \"f850\", \"M32 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm96-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM320 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-320a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0-448a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 96a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 288a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm192 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 320a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM416 192a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"]\n};\nconst faCircleNodes = {\n  prefix: 'fas',\n  iconName: 'circle-nodes',\n  icon: [512, 512, [], \"e4e2\", \"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z\"]\n};\nconst faParachuteBox = {\n  prefix: 'fas',\n  iconName: 'parachute-box',\n  icon: [512, 512, [], \"f4cd\", \"M383.5 192c.3-5.3 .5-10.6 .5-16c0-51-15.9-96-40.2-127.6C319.5 16.9 288.2 0 256 0s-63.5 16.9-87.8 48.4C143.9 80 128 125 128 176c0 5.4 .2 10.7 .5 16L240 192l0 128-32 0c-7 0-13.7 1.5-19.7 4.2L68.2 192l28.3 0c-.3-5.3-.5-10.6-.5-16c0-64 22.2-121.2 57.1-159.3C62 49.3 18.6 122.6 4.2 173.6C1.5 183.1 9 192 18.9 192l6 0L165.2 346.3c-3.3 6.5-5.2 13.9-5.2 21.7l0 96c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-96c0-7.8-1.9-15.2-5.2-21.7L487.1 192l6 0c9.9 0 17.4-8.9 14.7-18.4C493.4 122.6 450 49.3 358.9 16.7C393.8 54.8 416 112.1 416 176c0 5.4-.2 10.7-.5 16l28.3 0L323.7 324.2c-6-2.7-12.7-4.2-19.7-4.2l-32 0 0-128 111.5 0z\"]\n};\nconst faIndent = {\n  prefix: 'fas',\n  iconName: 'indent',\n  icon: [448, 512, [], \"f03c\", \"M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3L0 176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z\"]\n};\nconst faTruckFieldUn = {\n  prefix: 'fas',\n  iconName: 'truck-field-un',\n  icon: [640, 512, [], \"e58e\", \"M96 32C60.7 32 32 60.7 32 96l0 32c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-32c0-35.3-28.7-64-64-64l-4.2 0c-.4-1.1-.9-2.1-1.3-3.2L485.7 102c-10.3-23.1-33.2-38-58.5-38l-51.8 0C364.4 44.9 343.7 32 320 32L96 32zm288 96l43.2 0 42.7 96L384 224l0-96zM112 384a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM253.3 135.1l34.7 52 0-43.2c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM128 144l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faHourglass = {\n  prefix: 'fas',\n  iconName: 'hourglass',\n  icon: [384, 512, [9203, 62032, \"hourglass-empty\"], \"f254\", \"M0 32C0 14.3 14.3 0 32 0L64 0 320 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 11c0 42.4-16.9 83.1-46.9 113.1L237.3 256l67.9 67.9c30 30 46.9 70.7 46.9 113.1l0 11c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-11c0-42.4 16.9-83.1 46.9-113.1L146.7 256 78.9 188.1C48.9 158.1 32 117.4 32 75l0-11C14.3 64 0 49.7 0 32zM96 64l0 11c0 25.5 10.1 49.9 28.1 67.9L192 210.7l67.9-67.9c18-18 28.1-42.4 28.1-67.9l0-11L96 64zm0 384l192 0 0-11c0-25.5-10.1-49.9-28.1-67.9L192 301.3l-67.9 67.9c-18 18-28.1 42.4-28.1 67.9l0 11z\"]\n};\nconst faHourglassEmpty = faHourglass;\nconst faMountain = {\n  prefix: 'fas',\n  iconName: 'mountain',\n  icon: [512, 512, [127956], \"f6fc\", \"M256 32c12.5 0 24.1 6.4 30.8 17L503.4 394.4c5.6 8.9 8.6 19.2 8.6 29.7c0 30.9-25 55.9-55.9 55.9L55.9 480C25 480 0 455 0 424.1c0-10.5 3-20.8 8.6-29.7L225.2 49c6.6-10.6 18.3-17 30.8-17zm65 192L256 120.4 176.9 246.5l18.3 24.4c6.4 8.5 19.2 8.5 25.6 0l25.6-34.1c6-8.1 15.5-12.8 25.6-12.8l49 0z\"]\n};\nconst faUserDoctor = {\n  prefix: 'fas',\n  iconName: 'user-doctor',\n  icon: [448, 512, [\"user-md\"], \"f0f0\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-96 55.2C54 332.9 0 401.3 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7c0-81-54-149.4-128-171.1l0 50.8c27.6 7.1 48 32.2 48 62l0 40c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l0-24c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 24c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-40c0-29.8 20.4-54.9 48-62l0-57.1c-6-.6-12.1-.9-18.3-.9l-91.4 0c-6.2 0-12.3 .3-18.3 .9l0 65.4c23.1 6.9 40 28.3 40 53.7c0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.4 16.9-46.8 40-53.7l0-59.1zM144 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faUserMd = faUserDoctor;\nconst faCircleInfo = {\n  prefix: 'fas',\n  iconName: 'circle-info',\n  icon: [512, 512, [\"info-circle\"], \"f05a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faInfoCircle = faCircleInfo;\nconst faCloudMeatball = {\n  prefix: 'fas',\n  iconName: 'cloud-meatball',\n  icon: [512, 512, [], \"f73b\", \"M0 224c0 53 43 96 96 96l44.7 0c9.5-23.5 32.5-40 59.3-40c2 0 3.9 .1 5.8 .3C217.6 265.5 235.7 256 256 256s38.4 9.5 50.2 24.3c1.9-.2 3.9-.3 5.8-.3c26.9 0 49.9 16.5 59.3 40l44.7 0c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm288 96c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 1 .1 2.1 .1 3.1c-.7-.8-1.4-1.6-2.1-2.3c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3c.7 .7 1.5 1.4 2.3 2.1c-1-.1-2.1-.1-3.1-.1c-17.7 0-32 14.3-32 32s14.3 32 32 32c1 0 2.1-.1 3.1-.1c-.8 .7-1.6 1.3-2.3 2.1c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0c.7-.7 1.4-1.5 2.1-2.3c-.1 1-.1 2.1-.1 3.1c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1-.1-2.1-.1-3.1c.7 .8 1.3 1.6 2.1 2.3c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3c-.7-.7-1.5-1.4-2.3-2.1c1 .1 2.1 .1 3.1 .1c17.7 0 32-14.3 32-32s-14.3-32-32-32c-1 0-2.1 .1-3.1 .1c.8-.7 1.6-1.3 2.3-2.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-.7 .7-1.4 1.5-2.1 2.3c.1-1 .1-2.1 .1-3.1zM48 448a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm416 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faCamera = {\n  prefix: 'fas',\n  iconName: 'camera',\n  icon: [512, 512, [62258, \"camera-alt\"], \"f030\", \"M149.1 64.8L138.7 96 64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0L362.9 64.8C356.4 45.2 338.1 32 317.4 32L194.6 32c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faCameraAlt = faCamera;\nconst faSquareVirus = {\n  prefix: 'fas',\n  iconName: 'square-virus',\n  icon: [448, 512, [], \"e578\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM223.8 93.7c13.3 0 24 10.7 24 24c0 29.3 35.4 43.9 56.1 23.2c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-20.7 20.7-6 56.1 23.2 56.1c13.3 0 24 10.7 24 24s-10.7 24-24 24c-29.3 0-43.9 35.4-23.2 56.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-20.7-20.7-56.1-6-56.1 23.2c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-29.3-35.4-43.9-56.1-23.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c20.7-20.7 6-56.1-23.2-56.1c-13.3 0-24-10.7-24-24s10.7-24 24-24c29.3 0 43.9-35.4 23.2-56.1c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c20.7 20.7 56.1 6 56.1-23.2c0-13.3 10.7-24 24-24zM192 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm88 32a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faMeteor = {\n  prefix: 'fas',\n  iconName: 'meteor',\n  icon: [512, 512, [9732], \"f753\", \"M493.7 .9L299.4 75.6l2.3-29.3c1-12.8-12.8-21.5-24-15.1L101.3 133.4C38.6 169.7 0 236.6 0 309C0 421.1 90.9 512 203 512c72.4 0 139.4-38.6 175.7-101.3L480.8 234.3c6.5-11.1-2.2-25-15.1-24l-29.3 2.3L511.1 18.3c.6-1.5 .9-3.2 .9-4.8C512 6 506 0 498.5 0c-1.7 0-3.3 .3-4.8 .9zM192 192a128 128 0 1 1 0 256 128 128 0 1 1 0-256zm0 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm16 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faCarOn = {\n  prefix: 'fas',\n  iconName: 'car-on',\n  icon: [512, 512, [], \"e4dd\", \"M280 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80zM185.8 224l140.3 0c6.8 0 12.8 4.3 15.1 10.6L360.3 288l-208.6 0 19.1-53.4c2.3-6.4 8.3-10.6 15.1-10.6zm-75.3-10.9L82.2 292.4C62.1 300.9 48 320.8 48 344l0 40 0 64 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 256 0 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 0-64 0-40c0-23.2-14.1-43.1-34.2-51.6l-28.3-79.3C390.1 181.3 360 160 326.2 160l-140.3 0c-33.8 0-64 21.3-75.3 53.1zM128 344a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm232 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM39 39c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L73 39c-9.4-9.4-24.6-9.4-33.9 0zm400 0L391 87c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0z\"]\n};\nconst faSleigh = {\n  prefix: 'fas',\n  iconName: 'sleigh',\n  icon: [640, 512, [], \"f7cc\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l0 160c0 53 43 96 96 96l0 32 64 0 0-32 192 0 0 32 64 0 0-32c53 0 96-43 96-96l0-96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0-32 0c-17.7 0-32 14.3-32 32l0 41.3c0 30.2-24.5 54.7-54.7 54.7c-75.5 0-145.6-38.9-185.6-102.9l-4.3-6.9C174.2 67.6 125 37.6 70.7 32.7c-2.2-.5-4.4-.7-6.7-.7l-9 0L32 32zM640 384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 8c0 13.3-10.7 24-24 24L64 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l488 0c48.6 0 88-39.4 88-88l0-8z\"]\n};\nconst faArrowDown19 = {\n  prefix: 'fas',\n  iconName: 'arrow-down-1-9',\n  icon: [576, 512, [\"sort-numeric-asc\", \"sort-numeric-down\"], \"f162\", \"M450.7 38c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l48 0 48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26zM160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7 192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 301.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM418.3 307a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 307zM405.1 419.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"]\n};\nconst faSortNumericAsc = faArrowDown19;\nconst faSortNumericDown = faArrowDown19;\nconst faHandHoldingDroplet = {\n  prefix: 'fas',\n  iconName: 'hand-holding-droplet',\n  icon: [576, 512, [\"hand-holding-water\"], \"f4c1\", \"M275.5 6.6C278.3 2.5 283 0 288 0s9.7 2.5 12.5 6.6L366.8 103C378 119.3 384 138.6 384 158.3l0 1.7c0 53-43 96-96 96s-96-43-96-96l0-1.7c0-19.8 6-39 17.2-55.3L275.5 6.6zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faHandHoldingWater = faHandHoldingDroplet;\nconst faWater = {\n  prefix: 'fas',\n  iconName: 'water',\n  icon: [576, 512, [], \"f773\", \"M269.5 69.9c11.1-7.9 25.9-7.9 37 0C329 85.4 356.5 96 384 96c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 149.7 417 160 384 160c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4C42.8 92.6 61 83.5 75.3 71.6c11.1-9.5 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 85.2 165.1 96 192 96c27.5 0 55-10.6 77.5-26.1zm37 288C329 373.4 356.5 384 384 384c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 437.7 417 448 384 448c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 373.2 165.1 384 192 384c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0zm0-144C329 229.4 356.5 240 384 240c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 293.7 417 304 384 304c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.5 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 229.2 165.1 240 192 240c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faCalendarCheck = {\n  prefix: 'fas',\n  iconName: 'calendar-check',\n  icon: [448, 512, [], \"f274\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM329 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-95 95-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L329 305z\"]\n};\nconst faBraille = {\n  prefix: 'fas',\n  iconName: 'braille',\n  icon: [640, 512, [], \"f2a1\", \"M0 96a64 64 0 1 1 128 0A64 64 0 1 1 0 96zM224 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM80 416a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM224 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM352 96a64 64 0 1 1 128 0A64 64 0 1 1 352 96zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0A64 64 0 1 1 512 96zm64 176a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM416 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nconst faPrescriptionBottleMedical = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle-medical',\n  icon: [384, 512, [\"prescription-bottle-alt\"], \"f486\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zm32 96l320 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zM160 240l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faPrescriptionBottleAlt = faPrescriptionBottleMedical;\nconst faLandmark = {\n  prefix: 'fas',\n  iconName: 'landmark',\n  icon: [512, 512, [127963], \"f66f\", \"M240.1 4.2c9.8-5.6 21.9-5.6 31.8 0l171.8 98.1L448 104l0 .9 47.9 27.4c12.6 7.2 18.8 22 15.1 36s-16.4 23.8-30.9 23.8L32 192c-14.5 0-27.2-9.8-30.9-23.8s2.5-28.8 15.1-36L64 104.9l0-.9 4.4-1.6L240.1 4.2zM64 224l64 0 0 192 40 0 0-192 64 0 0 192 48 0 0-192 64 0 0 192 40 0 0-192 64 0 0 196.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 224z\"]\n};\nconst faTruck = {\n  prefix: 'fas',\n  iconName: 'truck',\n  icon: [640, 512, [128666, 9951], \"f0d1\", \"M48 0C21.5 0 0 21.5 0 48L0 368c0 26.5 21.5 48 48 48l16 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L48 0zM416 160l50.7 0L544 237.3l0 18.7-128 0 0-96zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faCrosshairs = {\n  prefix: 'fas',\n  iconName: 'crosshairs',\n  icon: [512, 512, [], \"f05b\", \"M256 0c17.7 0 32 14.3 32 32l0 10.4c93.7 13.9 167.7 88 181.6 181.6l10.4 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-10.4 0c-13.9 93.7-88 167.7-181.6 181.6l0 10.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-10.4C130.3 455.7 56.3 381.7 42.4 288L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l10.4 0C56.3 130.3 130.3 56.3 224 42.4L224 32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6l0-20.6c0-17.7 14.3-32 32-32s32 14.3 32 32l0 20.6c58.3-12.5 104.1-58.4 116.6-116.6L384 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l20.6 0C392.1 165.7 346.3 119.9 288 107.4l0 20.6c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-20.6C165.7 119.9 119.9 165.7 107.4 224l20.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-20.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faPersonCane = {\n  prefix: 'fas',\n  iconName: 'person-cane',\n  icon: [448, 512, [], \"e53c\", \"M272 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-8 187.3l47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7l-35.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-244.7zM352 376c0-4.4 3.6-8 8-8s8 3.6 8 8l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-30.9-25.1-56-56-56s-56 25.1-56 56l0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8z\"]\n};\nconst faTent = {\n  prefix: 'fas',\n  iconName: 'tent',\n  icon: [576, 512, [], \"e57d\", \"M269.4 6C280.5-2 295.5-2 306.6 6l224 160c7.4 5.3 12.2 13.5 13.2 22.5l32 288c1 9-1.9 18.1-8 24.9s-14.7 10.7-23.8 10.7l-80 0-28.2 0c-12.1 0-23.2-6.8-28.6-17.7L306.7 293.5c-1.7-3.4-5.1-5.5-8.8-5.5c-5.5 0-9.9 4.4-9.9 9.9L288 480c0 17.7-14.3 32-32 32l-16 0L32 512c-9.1 0-17.8-3.9-23.8-10.7s-9-15.8-8-24.9l32-288c1-9 5.8-17.2 13.2-22.5L269.4 6z\"]\n};\nconst faVestPatches = {\n  prefix: 'fas',\n  iconName: 'vest-patches',\n  icon: [448, 512, [], \"e086\", \"M151.2 69.7l55.9 167.7-11 33.1c-2.7 8.2-4.1 16.7-4.1 25.3L192 464c0 14.5 3.9 28.2 10.7 39.9C195 509 185.9 512 176 512L48 512c-26.5 0-48-21.5-48-48L0 270.5c0-9.5 2.8-18.7 8.1-26.6l47.9-71.8c5.3-7.9 8.1-17.1 8.1-26.6L64 128l0-73.7L64 48C64 21.5 85.5 0 112 0l4.5 0c.2 0 .4 0 .6 0c.4 0 .8 0 1.2 0c18.8 0 34.1 9.7 44.1 18.8C171.6 27.2 190.8 40 224 40s52.4-12.8 61.7-21.2C295.7 9.7 311 0 329.7 0c.4 0 .8 0 1.2 0c.2 0 .4 0 .6 0L336 0c26.5 0 48 21.5 48 48l0 6.3 0 73.7 0 17.5c0 9.5 2.8 18.7 8.1 26.6l47.9 71.8c5.3 7.9 8.1 17.1 8.1 26.6L448 464c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-168.2c0-5.2 .8-10.3 2.5-15.2L296.8 69.7C279.4 79.7 255.4 88 224 88s-55.4-8.3-72.8-18.3zM96 456a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM63.5 255.5c-4.7 4.7-4.7 12.3 0 17L79 288 63.5 303.5c-4.7 4.7-4.7 12.3 0 17s12.3 4.7 17 0L96 305l15.5 15.5c4.7 4.7 12.3 4.7 17 0s4.7-12.3 0-17L113 288l15.5-15.5c4.7-4.7 4.7-12.3 0-17s-12.3-4.7-17 0L96 271 80.5 255.5c-4.7-4.7-12.3-4.7-17 0zM304 280l0 8 0 32c0 8.8 7.2 16 16 16l32 0 8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nconst faCheckDouble = {\n  prefix: 'fas',\n  iconName: 'check-double',\n  icon: [448, 512, [], \"f560\", \"M342.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 178.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l160-160zm96 128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 54.6 297.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l256-256z\"]\n};\nconst faArrowDownAZ = {\n  prefix: 'fas',\n  iconName: 'arrow-down-a-z',\n  icon: [576, 512, [\"sort-alpha-asc\", \"sort-alpha-down\"], \"f15d\", \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7 128 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 320c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 416l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 352 352 352c-17.7 0-32-14.3-32-32zM416 32c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 224l-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128C392.8 38.8 403.9 32 416 32zM395.8 176l40.4 0L416 135.6 395.8 176z\"]\n};\nconst faSortAlphaAsc = faArrowDownAZ;\nconst faSortAlphaDown = faArrowDownAZ;\nconst faMoneyBillWheat = {\n  prefix: 'fas',\n  iconName: 'money-bill-wheat',\n  icon: [512, 512, [], \"e52a\", \"M176 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zM56 16l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L56 64C42.7 64 32 53.3 32 40s10.7-24 24-24zM24 88l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 136c-13.3 0-24-10.7-24-24S10.7 88 24 88zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 16c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80zM400 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zm80 144c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 128c8.8 0 16 7.2 16 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-96 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faCookie = {\n  prefix: 'fas',\n  iconName: 'cookie',\n  icon: [512, 512, [127850], \"f563\", \"M247.2 17c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9l-14.6-82.8c-3.9-22.1-14.6-42.3-30.7-57.9L388.9 57.5c-16.1-15.6-36.6-25.6-58.7-28.7L247.2 17zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faArrowRotateLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-rotate-left',\n  icon: [512, 512, [8634, \"arrow-left-rotate\", \"arrow-rotate-back\", \"arrow-rotate-backward\", \"undo\"], \"f0e2\", \"M125.7 160l50.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L48 224c-17.7 0-32-14.3-32-32L16 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z\"]\n};\nconst faArrowLeftRotate = faArrowRotateLeft;\nconst faArrowRotateBack = faArrowRotateLeft;\nconst faArrowRotateBackward = faArrowRotateLeft;\nconst faUndo = faArrowRotateLeft;\nconst faHardDrive = {\n  prefix: 'fas',\n  iconName: 'hard-drive',\n  icon: [512, 512, [128436, \"hdd\"], \"f0a0\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 184.4c-17-15.2-39.4-24.4-64-24.4L64 256c-24.6 0-47 9.2-64 24.4L0 96zM64 288l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64zM320 416a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm128-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faHdd = faHardDrive;\nconst faFaceGrinSquintTears = {\n  prefix: 'fas',\n  iconName: 'face-grin-squint-tears',\n  icon: [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-6.8 6.8-21.4 12.4-37.4 16.7c-16.3 4.4-34.1 7.5-46.3 9.3c-1.6 .2-3.1 .5-4.6 .6c-4.9 .8-9.1-2.8-9.5-7.4c-.1-.7 0-1.4 .1-2.1c1.6-11.2 4.6-29.6 9-47c.3-1.3 .7-2.6 1-3.9c4.3-15.9 9.8-30.5 16.7-37.4zm-44.7 19c-1.5 4.8-2.9 9.6-4.1 14.3c-4.8 18.9-8 38.5-9.7 50.3c-4 26.8 18.9 49.7 45.7 45.8c11.9-1.6 31.5-4.8 50.4-9.7c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c4.8-18.9 8-38.5 9.7-50.3c4-26.8-18.9-49.7-45.7-45.8c-11.9 1.6-31.5 4.8-50.4 9.7c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75C158.2-8.3 284.5-22.2 382.2 33.2zM51.5 410.1c18.5-5 38.8-8.3 50.9-10c.4-.1 .7-.1 1-.1c5.1-.2 9.2 4.3 8.4 9.6c-1.7 12.1-5 32.4-10 50.9C97.6 476.4 92 491 85.2 497.8C66 517 34.5 516.6 14.9 497.1s-20-51-.7-70.3c6.8-6.8 21.4-12.4 37.4-16.7zM416.9 209c-4.7-11.9-20.8-11-26.8 .3c-19 35.5-45 70.8-77.5 103.3S244.8 371.1 209.3 390c-11.3 6-12.2 22.1-.3 26.8c57.6 22.9 125.8 11 172.3-35.5s58.4-114.8 35.5-172.3zM87.1 285.1c2 2 4.6 3.2 7.3 3.4l56.1 5.1 5.1 56.1c.3 2.8 1.5 5.4 3.4 7.3c6.3 6.3 17.2 3.6 19.8-4.9l29.7-97.4c3.5-11.6-7.3-22.5-19-19L92 265.3c-8.6 2.6-11.3 13.4-4.9 19.8zM265.3 92l-29.7 97.4c-3.5 11.6 7.3 22.5 19 19l97.4-29.7c8.6-2.6 11.3-13.4 4.9-19.8c-2-2-4.6-3.2-7.3-3.4l-56.1-5.1-5.1-56.1c-.3-2.8-1.5-5.4-3.4-7.3c-6.3-6.3-17.2-3.6-19.8 4.9z\"]\n};\nconst faGrinSquintTears = faFaceGrinSquintTears;\nconst faDumbbell = {\n  prefix: 'fas',\n  iconName: 'dumbbell',\n  icon: [640, 512, [], \"f44b\", \"M96 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 160 0 64 0 160c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64-32 0c-17.7 0-32-14.3-32-32l0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l32 0 0-64zm448 0l0 64 32 0c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 64c0 17.7-14.3 32-32 32l-32 0 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-160 0-64 0-160c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32zM416 224l0 64-192 0 0-64 192 0z\"]\n};\nconst faRectangleList = {\n  prefix: 'fas',\n  iconName: 'rectangle-list',\n  icon: [576, 512, [\"list-alt\"], \"f022\", \"M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32-128a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96-248c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0z\"]\n};\nconst faListAlt = faRectangleList;\nconst faTarpDroplet = {\n  prefix: 'fas',\n  iconName: 'tarp-droplet',\n  icon: [576, 512, [], \"e57c\", \"M288 160c-35.3 0-64-26.9-64-60c0-24 33.7-70.1 52.2-93.5c6.1-7.7 17.5-7.7 23.6 0C318.3 29.9 352 76 352 100c0 33.1-28.7 60-64 60zM64 128l133.5 0c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64L512 128c35.3 0 64 28.7 64 64l0 160-128 0c-17.7 0-32 14.3-32 32l0 128L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64zM448 512l0-128 128 0L448 512zM96 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faHouseMedicalCircleCheck = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-check',\n  icon: [640, 512, [], \"e511\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zm32 0a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faPersonSkiingNordic = {\n  prefix: 'fas',\n  iconName: 'person-skiing-nordic',\n  icon: [576, 512, [\"skiing-nordic\"], \"f7ca\", \"M336 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM227.2 160c1.9 0 3.8 .1 5.6 .3L201.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9L291.3 464l-88.5 0 41.1-88.1-32.4-20.3c-7.8-4.9-14.7-10.7-20.6-17.3L132.2 464l-32.4 0 54.2-257.6c4.6-1.5 9-4.1 12.7-7.8l23.1-23.1c9.9-9.9 23.4-15.5 37.5-15.5zM121.4 198.6c.4 .4 .8 .8 1.3 1.2L67 464l-43 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l135.3 0c.5 0 .9 0 1.4 0l158.6 0c.5 0 1 0 1.4 0L504 512c39.8 0 72-32.2 72-72l0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8c0 13.3-10.7 24-24 24l-69.4 0 27.6-179.3c10.5-5.2 17.8-16.1 17.8-28.7c0-17.7-14.3-32-32-32l-21.3 0c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3l-23.1 23.1c-12.5 12.5-12.5 32.8 0 45.3zm308 89.4L402.3 464l-44.4 0 21.6-75.6c5.9-20.6-2.6-42.6-20.7-53.9L302 299l30.9-82.4 5.1 12.3C353 264.7 387.9 288 426.7 288l2.7 0z\"]\n};\nconst faSkiingNordic = faPersonSkiingNordic;\nconst faCalendarPlus = {\n  prefix: 'fas',\n  iconName: 'calendar-plus',\n  icon: [448, 512, [], \"f271\", \"M96 32l0 32L48 64C21.5 64 0 85.5 0 112l0 48 448 0 0-48c0-26.5-21.5-48-48-48l-48 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L160 64l0-32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192L0 192 0 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-272zM224 248c13.3 0 24 10.7 24 24l0 56 56 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-56 0 0 56c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56-56 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l56 0 0-56c0-13.3 10.7-24 24-24z\"]\n};\nconst faPlaneArrival = {\n  prefix: 'fas',\n  iconName: 'plane-arrival',\n  icon: [640, 512, [128748], \"f5af\", \"M.3 166.9L0 68C0 57.7 9.5 50.1 19.5 52.3l35.6 7.9c10.6 2.3 19.2 9.9 23 20L96 128l127.3 37.6L181.8 20.4C178.9 10.2 186.6 0 197.2 0l40.1 0c11.6 0 22.2 6.2 27.9 16.3l109 193.8 107.2 31.7c15.9 4.7 30.8 12.5 43.7 22.8l34.4 27.6c24 19.2 18.1 57.3-10.7 68.2c-41.2 15.6-86.2 18.1-128.8 7L121.7 289.8c-11.1-2.9-21.2-8.7-29.3-16.9L9.5 189.4c-5.9-6-9.3-14.1-9.3-22.5zM32 448l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32zm96-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128-16a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faCircleLeft = {\n  prefix: 'fas',\n  iconName: 'circle-left',\n  icon: [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM116.7 244.7l112-112c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8l0 64 96 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32l-96 0 0 64c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-112-112c-6.2-6.2-6.2-16.4 0-22.6z\"]\n};\nconst faArrowAltCircleLeft = faCircleLeft;\nconst faTrainSubway = {\n  prefix: 'fas',\n  iconName: 'train-subway',\n  icon: [448, 512, [\"subway\"], \"f239\", \"M96 0C43 0 0 43 0 96L0 352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512l39.7 0c8.5 0 16.6-3.4 22.6-9.4L160 448l128 0 54.6 54.6c6 6 14.1 9.4 22.6 9.4l39.7 0c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9l0-256c0-53-43-96-96-96L96 0zM64 128c0-17.7 14.3-32 32-32l80 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32-14.3-32-32l0-96zM272 96l80 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zM64 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm288-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSubway = faTrainSubway;\nconst faChartGantt = {\n  prefix: 'fas',\n  iconName: 'chart-gantt',\n  icon: [512, 512, [], \"e0e4\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32zm96 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm160 96l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faIndianRupeeSign = {\n  prefix: 'fas',\n  iconName: 'indian-rupee-sign',\n  icon: [320, 512, [\"indian-rupee\", \"inr\"], \"e1bc\", \"M0 64C0 46.3 14.3 32 32 32l64 0 16 0 176 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-56.2 0c9.6 14.4 16.7 30.6 20.7 48l35.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-35.6 0c-13.2 58.3-61.9 103.2-122.2 110.9L274.6 422c14.4 10.3 17.7 30.3 7.4 44.6s-30.3 17.7-44.6 7.4L13.4 314C2.1 306-2.7 291.5 1.5 278.2S18.1 256 32 256l80 0c32.8 0 61-19.7 73.3-48L32 208c-17.7 0-32-14.3-32-32s14.3-32 32-32l153.3 0C173 115.7 144.8 96 112 96L96 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst faIndianRupee = faIndianRupeeSign;\nconst faInr = faIndianRupeeSign;\nconst faCropSimple = {\n  prefix: 'fas',\n  iconName: 'crop-simple',\n  icon: [512, 512, [\"crop-alt\"], \"f565\", \"M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l224 0 0-64-224 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64L160 64l0 64 224 0 0 352z\"]\n};\nconst faCropAlt = faCropSimple;\nconst faMoneyBill1 = {\n  prefix: 'fas',\n  iconName: 'money-bill-1',\n  icon: [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm64 320l-64 0 0-64c35.3 0 64 28.7 64 64zM64 192l0-64 64 0c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm76-48c0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l24 0 24 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20z\"]\n};\nconst faMoneyBillAlt = faMoneyBill1;\nconst faLeftLong = {\n  prefix: 'fas',\n  iconName: 'left-long',\n  icon: [512, 512, [\"long-arrow-alt-left\"], \"f30a\", \"M177.5 414c-8.8 3.8-19 2-26-4.6l-144-136C2.7 268.9 0 262.6 0 256s2.7-12.9 7.5-17.4l144-136c7-6.6 17.2-8.4 26-4.6s14.5 12.5 14.5 22l0 72 288 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-288 0 0 72c0 9.6-5.7 18.2-14.5 22z\"]\n};\nconst faLongArrowAltLeft = faLeftLong;\nconst faDna = {\n  prefix: 'fas',\n  iconName: 'dna',\n  icon: [448, 512, [129516], \"f471\", \"M416 0c17.7 0 32 14.3 32 32c0 59.8-30.3 107.5-69.4 146.6c-28 28-62.5 53.5-97.3 77.4l-2.5 1.7c-11.9 8.1-23.8 16.1-35.5 23.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0l-1.6 1c-6 4-11.9 7.9-17.8 11.9c-20.9 14-40.8 27.7-59.3 41.5l118.5 0c-9.8-7.4-20.1-14.7-30.7-22.1l7-4.7 3-2c15.1-10.1 30.9-20.6 46.7-31.6c25 18.1 48.9 37.3 69.4 57.7C417.7 372.5 448 420.2 448 480c0 17.7-14.3 32-32 32s-32-14.3-32-32L64 480c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-59.8 30.3-107.5 69.4-146.6c28-28 62.5-53.5 97.3-77.4c-34.8-23.9-69.3-49.3-97.3-77.4C30.3 139.5 0 91.8 0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l320 0c0-17.7 14.3-32 32-32zM338.6 384l-229.2 0c-10.1 10.6-18.6 21.3-25.5 32l280.2 0c-6.8-10.7-15.3-21.4-25.5-32zM109.4 128l229.2 0c10.1-10.7 18.6-21.3 25.5-32L83.9 96c6.8 10.7 15.3 21.3 25.5 32zm55.4 48c18.4 13.8 38.4 27.5 59.3 41.5c20.9-14 40.8-27.7 59.3-41.5l-118.5 0z\"]\n};\nconst faVirusSlash = {\n  prefix: 'fas',\n  iconName: 'virus-slash',\n  icon: [640, 512, [], \"e075\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-154.3-121c-2-30.1 20.8-60.1 56-60.1l11.5 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-11.5 0c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C412.3 118.4 352 93.4 352 43.5L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11.5c0 49.9-60.3 74.9-95.6 39.6L184.2 75c-12.5-12.5-32.8-12.5-45.3 0c-1.6 1.6-3.1 3.4-4.3 5.3L38.8 5.1zm225.8 177c6.9-3.9 14.9-6.1 23.4-6.1c26.5 0 48 21.5 48 48c0 4.4-.6 8.7-1.7 12.7l-69.7-54.6zM402 412.7L144.7 210c-9.5 8.5-22.2 14-37.2 14L96 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l11.5 0c49.9 0 74.9 60.3 39.6 95.6l-8.2 8.2c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6l0 11.5c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11.5c0-31.2 23.6-52.7 50-55.7z\"]\n};\nconst faMinus = {\n  prefix: 'fas',\n  iconName: 'minus',\n  icon: [448, 512, [8211, 8722, 10134, \"subtract\"], \"f068\", \"M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faSubtract = faMinus;\nconst faChess = {\n  prefix: 'fas',\n  iconName: 'chess',\n  icon: [512, 512, [], \"f439\", \"M144 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 16L96 32c-8.8 0-16 7.2-16 16s7.2 16 16 16l16 0 0 32L60.2 96C49.1 96 40 105.1 40 116.2c0 2.5 .5 4.9 1.3 7.3L73.8 208 72 208c-13.3 0-24 10.7-24 24s10.7 24 24 24l4 0L60 384l136 0L180 256l4 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-1.8 0 32.5-84.5c.9-2.3 1.3-4.8 1.3-7.3c0-11.2-9.1-20.2-20.2-20.2L144 96l0-32 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16zM48 416L4.8 473.6C1.7 477.8 0 482.8 0 488c0 13.3 10.7 24 24 24l208 0c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L208 416 48 416zm288 0l-43.2 57.6c-3.1 4.2-4.8 9.2-4.8 14.4c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L464 416l-128 0zM304 208l0 51.9c0 7.8 2.8 15.3 8 21.1L339.2 312 337 384l125.5 0-3.3-72 28.3-30.8c5.4-5.9 8.5-13.6 8.5-21.7l0-51.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 16-24 0 0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 16-24 0 0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16zm80 96c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32-32 0 0-32z\"]\n};\nconst faArrowLeftLong = {\n  prefix: 'fas',\n  iconName: 'arrow-left-long',\n  icon: [512, 512, [\"long-arrow-left\"], \"f177\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 73.4-73.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-128 128z\"]\n};\nconst faLongArrowLeft = faArrowLeftLong;\nconst faPlugCircleCheck = {\n  prefix: 'fas',\n  iconName: 'plug-circle-check',\n  icon: [576, 512, [], \"e55c\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faStreetView = {\n  prefix: 'fas',\n  iconName: 'street-view',\n  icon: [512, 512, [], \"f21d\", \"M320 64A64 64 0 1 0 192 64a64 64 0 1 0 128 0zm-96 96c-35.3 0-64 28.7-64 64l0 48c0 17.7 14.3 32 32 32l1.8 0 11.1 99.5c1.8 16.2 15.5 28.5 31.8 28.5l38.7 0c16.3 0 30-12.3 31.8-28.5L318.2 304l1.8 0c17.7 0 32-14.3 32-32l0-48c0-35.3-28.7-64-64-64l-64 0zM132.3 394.2c13-2.4 21.7-14.9 19.3-27.9s-14.9-21.7-27.9-19.3c-32.4 5.9-60.9 14.2-82 24.8c-10.5 5.3-20.3 11.7-27.8 19.6C6.4 399.5 0 410.5 0 424c0 21.4 15.5 36.1 29.1 45c14.7 9.6 34.3 17.3 56.4 23.4C130.2 504.7 190.4 512 256 512s125.8-7.3 170.4-19.6c22.1-6.1 41.8-13.8 56.4-23.4c13.7-8.9 29.1-23.6 29.1-45c0-13.5-6.4-24.5-14-32.6c-7.5-7.9-17.3-14.3-27.8-19.6c-21-10.6-49.5-18.9-82-24.8c-13-2.4-25.5 6.3-27.9 19.3s6.3 25.5 19.3 27.9c30.2 5.5 53.7 12.8 69 20.5c3.2 1.6 5.8 3.1 7.9 4.5c3.6 2.4 3.6 7.2 0 9.6c-8.8 5.7-23.1 11.8-43 17.3C374.3 457 318.5 464 256 464s-118.3-7-157.7-17.9c-19.9-5.5-34.2-11.6-43-17.3c-3.6-2.4-3.6-7.2 0-9.6c2.1-1.4 4.8-2.9 7.9-4.5c15.3-7.7 38.8-14.9 69-20.5z\"]\n};\nconst faFrancSign = {\n  prefix: 'fas',\n  iconName: 'franc-sign',\n  icon: [320, 512, [], \"e18f\", \"M80 32C62.3 32 48 46.3 48 64l0 160 0 96-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-64 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-96 176 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"]\n};\nconst faVolumeOff = {\n  prefix: 'fas',\n  iconName: 'volume-off',\n  icon: [320, 512, [], \"f026\", \"M320 64c0-12.6-7.4-24-18.9-29.2s-25-3.1-34.4 5.3L131.8 160 64 160c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l67.8 0L266.7 471.9c9.4 8.4 22.9 10.4 34.4 5.3S320 460.6 320 448l0-384z\"]\n};\nconst faHandsAslInterpreting = {\n  prefix: 'fas',\n  iconName: 'hands-asl-interpreting',\n  icon: [640, 512, [\"american-sign-language-interpreting\", \"asl-interpreting\", \"hands-american-sign-language-interpreting\"], \"f2a3\", \"M156.6 46.3c7.9-15.8 1.5-35-14.3-42.9s-35-1.5-42.9 14.3L13.5 189.4C4.6 207.2 0 226.8 0 246.7L0 256c0 70.7 57.3 128 128 128l72 0 8 0 0-.3c35.2-2.7 65.4-22.8 82.1-51.7c8.8-15.3 3.6-34.9-11.7-43.7s-34.9-3.6-43.7 11.7c-7 12-19.9 20-34.7 20c-22.1 0-40-17.9-40-40s17.9-40 40-40c14.8 0 27.7 8 34.7 20c8.8 15.3 28.4 20.5 43.7 11.7s20.5-28.4 11.7-43.7c-12.8-22.1-33.6-39.1-58.4-47.1l80.8-22c17-4.6 27.1-22.2 22.5-39.3s-22.2-27.1-39.3-22.5L194.9 124.6l81.6-68c13.6-11.3 15.4-31.5 4.1-45.1S249.1-3.9 235.5 7.4L133.6 92.3l23-46zM483.4 465.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l85.9-171.7c8.9-17.8 13.5-37.4 13.5-57.2l0-9.3c0-70.7-57.3-128-128-128l-72 0-8 0 0 .3c-35.2 2.7-65.4 22.8-82.1 51.7c-8.9 15.3-3.6 34.9 11.7 43.7s34.9 3.6 43.7-11.7c7-12 19.9-20 34.7-20c22.1 0 40 17.9 40 40s-17.9 40-40 40c-14.8 0-27.7-8-34.7-20c-8.9-15.3-28.4-20.5-43.7-11.7s-20.5 28.4-11.7 43.7c12.8 22.1 33.6 39.1 58.4 47.1l-80.8 22c-17.1 4.7-27.1 22.2-22.5 39.3s22.2 27.1 39.3 22.5l100.7-27.5-81.6 68c-13.6 11.3-15.4 31.5-4.1 45.1s31.5 15.4 45.1 4.1l101.9-84.9-23 46z\"]\n};\nconst faAmericanSignLanguageInterpreting = faHandsAslInterpreting;\nconst faAslInterpreting = faHandsAslInterpreting;\nconst faHandsAmericanSignLanguageInterpreting = faHandsAslInterpreting;\nconst faGear = {\n  prefix: 'fas',\n  iconName: 'gear',\n  icon: [512, 512, [9881, \"cog\"], \"f013\", \"M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"]\n};\nconst faCog = faGear;\nconst faDropletSlash = {\n  prefix: 'fas',\n  iconName: 'droplet-slash',\n  icon: [640, 512, [\"tint-slash\"], \"f5c7\", \"M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.2 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0l-1.8 0c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faTintSlash = faDropletSlash;\nconst faMosque = {\n  prefix: 'fas',\n  iconName: 'mosque',\n  icon: [640, 512, [128332], \"f678\", \"M400 0c5 0 9.8 2.4 12.8 6.4c34.7 46.3 78.1 74.9 133.5 111.5c0 0 0 0 0 0s0 0 0 0c5.2 3.4 10.5 7 16 10.6c28.9 19.2 45.7 51.7 45.7 86.1c0 28.6-11.3 54.5-29.8 73.4l-356.4 0c-18.4-19-29.8-44.9-29.8-73.4c0-34.4 16.7-66.9 45.7-86.1c5.4-3.6 10.8-7.1 16-10.6c0 0 0 0 0 0s0 0 0 0C309.1 81.3 352.5 52.7 387.2 6.4c3-4 7.8-6.4 12.8-6.4zM288 512l0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-48 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l416 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-48 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-64 0 0-58c0-19-8.4-37-23-49.2L400 384l-25 20.8C360.4 417 352 435 352 454l0 58-64 0zM70.4 5.2c5.7-4.3 13.5-4.3 19.2 0l16 12C139.8 42.9 160 83.2 160 126l0 2L0 128l0-2C0 83.2 20.2 42.9 54.4 17.2l16-12zM0 160l160 0 0 136.6c-19.1 11.1-32 31.7-32 55.4l0 128c0 9.6 2.1 18.6 5.8 26.8c-6.6 3.4-14 5.2-21.8 5.2l-64 0c-26.5 0-48-21.5-48-48L0 176l0-16z\"]\n};\nconst faMosquito = {\n  prefix: 'fas',\n  iconName: 'mosquito',\n  icon: [640, 512, [], \"e52b\", \"M463.7 505.9c9.8-8.9 10.7-24.3 2.1-34.3l-42.1-49 0-54.7c0-5.5-1.8-10.8-5.1-15.1L352 266.3l0-.3L485.4 387.8C542.4 447.6 640 405.2 640 320.6c0-47.9-34-88.3-79.4-94.2l-153-23.9 40.8-40.9c7.8-7.8 9.4-20.1 3.9-29.8L428.5 90.1l38.2-50.9c8-10.6 6.1-25.9-4.3-34.1s-25.2-6.3-33.2 4.4l-48 63.9c-5.9 7.9-6.6 18.6-1.7 27.2L402.2 140 352 190.3l0-38.2c0-14.9-10.2-27.4-24-31l0-57.2c0-4.4-3.6-8-8-8s-8 3.6-8 8l0 57.2c-13.8 3.6-24 16.1-24 31l0 38.1L237.8 140l22.6-39.5c4.9-8.6 4.2-19.3-1.7-27.2l-48-63.9c-8-10.6-22.8-12.6-33.2-4.4s-12.2 23.5-4.3 34.1l38.2 50.9-23.9 41.7c-5.5 9.7-3.9 22 3.9 29.8l40.8 40.9-153 23.9C34 232.3 0 272.7 0 320.6c0 84.6 97.6 127 154.6 67.1L288 266l0 .3-66.5 86.4c-3.3 4.3-5.1 9.6-5.1 15.1l0 54.7-42.1 49c-8.6 10.1-7.7 25.5 2.1 34.3s24.7 7.9 33.4-2.1l48-55.9c3.8-4.4 5.9-10.2 5.9-16.1l0-55.4L288 344.7l0 63.1c0 17.7 14.3 32 32 32s32-14.3 32-32l0-63.1 24.3 31.6 0 55.4c0 5.9 2.1 11.7 5.9 16.1l48 55.9c8.6 10.1 23.6 11 33.4 2.1z\"]\n};\nconst faStarOfDavid = {\n  prefix: 'fas',\n  iconName: 'star-of-david',\n  icon: [512, 512, [10017], \"f69a\", \"M404.2 309.5L383.1 344l42.3 0-21.1-34.5zM371.4 256l-54-88-122.8 0-54 88 54 88 122.8 0 54-88zm65.7 0l53.4 87c3.6 5.9 5.5 12.7 5.5 19.6c0 20.7-16.8 37.4-37.4 37.4l-109.8 0-56.2 91.5C284.8 504.3 270.9 512 256 512s-28.8-7.7-36.6-20.5L163.3 400 53.4 400C32.8 400 16 383.2 16 362.6c0-6.9 1.9-13.7 5.5-19.6l53.4-87L21.5 169c-3.6-5.9-5.5-12.7-5.5-19.6C16 128.8 32.8 112 53.4 112l109.8 0 56.2-91.5C227.2 7.7 241.1 0 256 0s28.8 7.7 36.6 20.5L348.7 112l109.8 0c20.7 0 37.4 16.8 37.4 37.4c0 6.9-1.9 13.7-5.5 19.6l-53.4 87zm-54-88l21.1 34.5L425.4 168l-42.3 0zM283 112L256 68l-27 44 54 0zM128.9 168l-42.3 0 21.1 34.5L128.9 168zM107.8 309.5L86.6 344l42.3 0-21.1-34.5zM229 400l27 44 27-44-54 0z\"]\n};\nconst faPersonMilitaryRifle = {\n  prefix: 'fas',\n  iconName: 'person-military-rifle',\n  icon: [512, 512, [], \"e54b\", \"M160 39c0-13 10-23.8 22.9-24.9L334.7 1.4C344 .7 352 8 352 17.4L352 48c0 8.8-7.2 16-16 16L185 64c-13.8 0-25-11.2-25-25zm17.6 57l156.8 0c1 5.2 1.6 10.5 1.6 16c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-5.5 .6-10.8 1.6-16zm228 364.3L352 369.7 352 480c0 1.3-.1 2.5-.2 3.8L177.5 234.9c16.6-7.1 34.6-10.9 53.3-10.9l50.4 0c15.9 0 31.3 2.8 45.8 7.9L421.9 67.7c-7.7-4.4-10.3-14.2-5.9-21.9s14.2-10.3 21.9-5.9l13.9 8 13.9 8c7.7 4.4 10.3 14.2 5.9 21.9L416 173.9l1.6 .9c15.3 8.8 20.6 28.4 11.7 43.7L392.6 282c2 2.8 3.9 5.8 5.7 8.8l76.1 128.8c11.2 19 4.9 43.5-14.1 54.8s-43.5 4.9-54.8-14.1zM320 512l-128 0c-17.7 0-32-14.3-32-32l0-110.3-53.6 90.6c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8l76.1-128.8c9.4-15.8 21.7-29.3 36-40L331.1 510c-3.5 1.3-7.2 2-11.1 2zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faCartShopping = {\n  prefix: 'fas',\n  iconName: 'cart-shopping',\n  icon: [576, 512, [128722, \"shopping-cart\"], \"f07a\", \"M0 24C0 10.7 10.7 0 24 0L69.5 0c22 0 41.5 12.8 50.6 32l411 0c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3l-288.5 0 5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5L488 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-288.3 0c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5L24 48C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faShoppingCart = faCartShopping;\nconst faVials = {\n  prefix: 'fas',\n  iconName: 'vials',\n  icon: [512, 512, [], \"f493\", \"M0 64C0 46.3 14.3 32 32 32l56 0 48 0 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 304c0 44.2-35.8 80-80 80s-80-35.8-80-80L32 96C14.3 96 0 81.7 0 64zM136 96L88 96l0 160 48 0 0-160zM288 64c0-17.7 14.3-32 32-32l56 0 48 0 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 304c0 44.2-35.8 80-80 80s-80-35.8-80-80l0-304c-17.7 0-32-14.3-32-32zM424 96l-48 0 0 160 48 0 0-160z\"]\n};\nconst faPlugCirclePlus = {\n  prefix: 'fas',\n  iconName: 'plug-circle-plus',\n  icon: [576, 512, [], \"e55f\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faPlaceOfWorship = {\n  prefix: 'fas',\n  iconName: 'place-of-worship',\n  icon: [640, 512, [], \"f67f\", \"M224 109.3l0 108.3L183.3 242c-14.5 8.7-23.3 24.3-23.3 41.2L160 512l96 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 96 0 0-228.8c0-16.9-8.8-32.5-23.3-41.2L416 217.6l0-108.3c0-8.5-3.4-16.6-9.4-22.6L331.3 11.3c-6.2-6.2-16.4-6.2-22.6 0L233.4 86.6c-6 6-9.4 14.1-9.4 22.6zM24.9 330.3C9.5 338.8 0 354.9 0 372.4L0 464c0 26.5 21.5 48 48 48l80 0 0-238.4L24.9 330.3zM592 512c26.5 0 48-21.5 48-48l0-91.6c0-17.5-9.5-33.6-24.9-42.1L512 273.6 512 512l80 0z\"]\n};\nconst faGripVertical = {\n  prefix: 'fas',\n  iconName: 'grip-vertical',\n  icon: [320, 512, [], \"f58e\", \"M40 352l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zm192 0l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 320c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 192l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 160c-22.1 0-40-17.9-40-40L0 72C0 49.9 17.9 32 40 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40z\"]\n};\nconst faHexagonNodes = {\n  prefix: 'fas',\n  iconName: 'hexagon-nodes',\n  icon: [448, 512, [], \"e699\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56s56-25.1 56-56c0-22.3-13.1-41.6-32-50.6l0-98.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-1.6 20.8 8.6 41.6 27.8 52.8c26.8 15.5 61 6.3 76.5-20.5s6.3-61-20.5-76.5c-1.3-.8-2.7-1.5-4-2.1l0-90.8c1.4-.6 2.7-1.3 4-2.1c26.8-15.5 36-49.7 20.5-76.5S390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c2.6 1.8 5.2 3.3 8 4.7l0 90.8c-2.8 1.3-5.5 2.9-8 4.6l-80.1-45.8c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8z\"]\n};\nconst faArrowTurnUp = {\n  prefix: 'fas',\n  iconName: 'arrow-turn-up',\n  icon: [384, 512, [\"level-up\"], \"f148\", \"M32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96-43 96-96l0-306.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 416c0 17.7-14.3 32-32 32l-96 0z\"]\n};\nconst faLevelUp = faArrowTurnUp;\nconst faU = {\n  prefix: 'fas',\n  iconName: 'u',\n  icon: [384, 512, [117], \"55\", \"M32 32c17.7 0 32 14.3 32 32l0 224c0 70.7 57.3 128 128 128s128-57.3 128-128l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32l0 224c0 106-86 192-192 192S0 394 0 288L0 64C0 46.3 14.3 32 32 32z\"]\n};\nconst faSquareRootVariable = {\n  prefix: 'fas',\n  iconName: 'square-root-variable',\n  icon: [576, 512, [\"square-root-alt\"], \"f698\", \"M282.6 78.1c8-27.3 33-46.1 61.4-46.1l200 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L344 96 238.7 457c-3.6 12.3-14.1 21.2-26.8 22.8s-25.1-4.6-31.5-15.6L77.6 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l45.6 0c22.8 0 43.8 12.1 55.3 31.8l65.2 111.8L282.6 78.1zM393.4 233.4c12.5-12.5 32.8-12.5 45.3 0L480 274.7l41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 320l41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 365.3l-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 320l-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nconst faSquareRootAlt = faSquareRootVariable;\nconst faClock = {\n  prefix: 'fas',\n  iconName: 'clock',\n  icon: [512, 512, [128339, \"clock-four\"], \"f017\", \"M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nconst faClockFour = faClock;\nconst faBackwardStep = {\n  prefix: 'fas',\n  iconName: 'backward-step',\n  icon: [320, 512, [\"step-backward\"], \"f048\", \"M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-320c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241 64 96c0-17.7-14.3-32-32-32S0 78.3 0 96L0 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-145 11.5 9.6 192 160z\"]\n};\nconst faStepBackward = faBackwardStep;\nconst faPallet = {\n  prefix: 'fas',\n  iconName: 'pallet',\n  icon: [640, 512, [], \"f482\", \"M32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 64-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 224 0 224 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-64 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-224 0L96 320l-64 0zm96 64l160 0 0 64-160 0 0-64zm224 0l160 0 0 64-160 0 0-64z\"]\n};\nconst faFaucet = {\n  prefix: 'fas',\n  iconName: 'faucet',\n  icon: [512, 512, [], \"e005\", \"M192 96l0 12L96 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l96-12 31-3.9 1-.1 1 .1 31 3.9 96 12c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 12 0-12c0-17.7-14.3-32-32-32s-32 14.3-32 32zM32 256c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l100.1 0c20.2 29 53.9 48 91.9 48s71.7-19 91.9-48l36.1 0c17.7 0 32 14.3 32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32c0-88.4-71.6-160-160-160l-32 0-22.6-22.6c-6-6-14.1-9.4-22.6-9.4L256 224l0-43.8-32-4-32 4 0 43.8-18.7 0c-8.5 0-16.6 3.4-22.6 9.4L128 256l-96 0z\"]\n};\nconst faBaseballBatBall = {\n  prefix: 'fas',\n  iconName: 'baseball-bat-ball',\n  icon: [512, 512, [], \"f432\", \"M424 0c-12.4 0-24.2 4.9-33 13.7L233.5 171.2c-10.5 10.5-19.8 22.1-27.7 34.6L132.7 321.6c-7.3 11.5-15.8 22.2-25.5 31.9L69.9 390.7l51.3 51.3 37.3-37.3c9.6-9.6 20.3-18.2 31.9-25.5l115.8-73.1c12.5-7.9 24.1-17.2 34.6-27.7L498.3 121c8.7-8.7 13.7-20.6 13.7-33s-4.9-24.2-13.7-33L457 13.7C448.2 4.9 436.4 0 424 0zm88 432a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM15 399c-9.4 9.4-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L49 399c-9.4-9.4-24.6-9.4-33.9 0z\"]\n};\nconst faS = {\n  prefix: 'fas',\n  iconName: 's',\n  icon: [320, 512, [115], \"53\", \"M99.1 105.4C79 114 68.2 127.2 65.2 144.8c-2.4 14.1-.7 23.2 2 29.4c2.8 6.3 7.9 12.4 16.7 18.6c19.2 13.4 48.3 22.1 84.9 32.5c1 .3 1.9 .6 2.9 .8c32.7 9.3 72 20.6 100.9 40.7c15.7 10.9 29.9 25.5 38.6 45.1c8.8 19.8 10.8 42 6.6 66.3c-7.3 42.5-35.3 71.7-71.8 87.3c-35.4 15.2-79.1 17.9-123.7 10.9l-.2 0s0 0 0 0c-24-3.9-62.7-17.1-87.6-25.6c-4.8-1.7-9.2-3.1-12.8-4.3C5.1 440.8-3.9 422.7 1.6 405.9s23.7-25.8 40.5-20.3c4.9 1.6 10.2 3.4 15.9 5.4c25.4 8.6 56.4 19.2 74.4 22.1c36.8 5.7 67.5 2.5 88.5-6.5c20.1-8.6 30.8-21.8 33.9-39.4c2.4-14.1 .7-23.2-2-29.4c-2.8-6.3-7.9-12.4-16.7-18.6c-19.2-13.4-48.3-22.1-84.9-32.5c-1-.3-1.9-.6-2.9-.8c-32.7-9.3-72-20.6-100.9-40.7c-15.7-10.9-29.9-25.5-38.6-45.1c-8.8-19.8-10.8-42-6.6-66.3l31.5 5.5L2.1 133.9C9.4 91.4 37.4 62.2 73.9 46.6c35.4-15.2 79.1-17.9 123.7-10.9c13 2 52.4 9.6 66.6 13.4c17.1 4.5 27.2 22.1 22.7 39.2s-22.1 27.2-39.2 22.7c-11.2-3-48.1-10.2-60.1-12l4.9-31.5-4.9 31.5c-36.9-5.8-67.5-2.5-88.6 6.5z\"]\n};\nconst faTimeline = {\n  prefix: 'fas',\n  iconName: 'timeline',\n  icon: [640, 512, [], \"e29c\", \"M128 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32 97.3c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80S48 51.8 48 96c0 32.8 19.7 61 48 73.3L96 224l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0 0 54.7c-28.3 12.3-48 40.5-48 73.3c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-54.7 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-54.7c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 32.8 19.7 61 48 73.3l0 54.7-320 0 0-54.7zM488 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM320 392a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faKeyboard = {\n  prefix: 'fas',\n  iconName: 'keyboard',\n  icon: [576, 512, [9000], \"f11c\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm16 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80-176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM160 336c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-32zM272 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM256 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM368 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM352 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM464 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM448 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"]\n};\nconst faCaretDown = {\n  prefix: 'fas',\n  iconName: 'caret-down',\n  icon: [320, 512, [], \"f0d7\", \"M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\"]\n};\nconst faHouseChimneyMedical = {\n  prefix: 'fas',\n  iconName: 'house-chimney-medical',\n  icon: [576, 512, [\"clinic-medical\"], \"f7f2\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24zM272 192c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0z\"]\n};\nconst faClinicMedical = faHouseChimneyMedical;\nconst faTemperatureThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'temperature-three-quarters',\n  icon: [320, 512, [\"temperature-3\", \"thermometer-3\", \"thermometer-three-quarters\"], \"f2c8\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 144c0-8.8 7.2-16 16-16s16 7.2 16 16l0 178.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature3 = faTemperatureThreeQuarters;\nconst faThermometer3 = faTemperatureThreeQuarters;\nconst faThermometerThreeQuarters = faTemperatureThreeQuarters;\nconst faMobileScreen = {\n  prefix: 'fas',\n  iconName: 'mobile-screen',\n  icon: [384, 512, [\"mobile-android-alt\"], \"f3cf\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zM144 448c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zM304 64L80 64l0 320 224 0 0-320z\"]\n};\nconst faMobileAndroidAlt = faMobileScreen;\nconst faPlaneUp = {\n  prefix: 'fas',\n  iconName: 'plane-up',\n  icon: [512, 512, [], \"e22d\", \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 66.3L497.8 278.5c8.9 5.9 14.2 15.9 14.2 26.6l0 56.7c0 10.9-10.7 18.6-21.1 15.2L320 320l0 80 57.6 43.2c4 3 6.4 7.8 6.4 12.8l0 42c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14l0-42c0-5 2.4-9.8 6.4-12.8L192 400l0-80L21.1 377C10.7 380.4 0 372.7 0 361.8l0-56.7c0-10.7 5.3-20.7 14.2-26.6L192 160l0-66.3z\"]\n};\nconst faPiggyBank = {\n  prefix: 'fas',\n  iconName: 'piggy-bank',\n  icon: [576, 512, [], \"f4d3\", \"M400 96l0 .7c-5.3-.4-10.6-.7-16-.7L256 96c-16.5 0-32.5 2.1-47.8 6c-.1-2-.2-4-.2-6c0-53 43-96 96-96s96 43 96 96zm-16 32c3.5 0 7 .1 10.4 .3c4.2 .3 8.4 .7 12.6 1.3C424.6 109.1 450.8 96 480 96l11.5 0c10.4 0 18 9.8 15.5 19.9l-13.8 55.2c15.8 14.8 28.7 32.8 37.5 52.9l13.3 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-32 0c-9.1 12.1-19.9 22.9-32 32l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-128 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c-34.9-26.2-58.7-66.3-63.2-112L68 304c-37.6 0-68-30.4-68-68s30.4-68 68-68l4 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-4 0c-11 0-20 9-20 20s9 20 20 20l31.2 0c12.1-59.8 57.7-107.5 116.3-122.8c12.9-3.4 26.5-5.2 40.5-5.2l128 0zm64 136a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faBatteryHalf = {\n  prefix: 'fas',\n  iconName: 'battery-half',\n  icon: [576, 512, [\"battery-3\"], \"f242\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm208 96L96 192l0 128 192 0 0-128z\"]\n};\nconst faBattery3 = faBatteryHalf;\nconst faMountainCity = {\n  prefix: 'fas',\n  iconName: 'mountain-city',\n  icon: [640, 512, [], \"e52e\", \"M336 0c-26.5 0-48 21.5-48 48l0 92.1 71.4 118.4c2.5-1.6 5.4-2.5 8.6-2.5l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-3.5 0 73.8 122.4c12.4 20.6 12.9 46.3 1.2 67.3c-.4 .8-.9 1.6-1.4 2.3L592 512c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48l-24 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-40 0 0-144c0-26.5-21.5-48-48-48L336 0zm32 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM352 176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm160 96c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM224 188.9L283.8 288 223 288l-48 64-24.6-41.2L224 188.9zm29.4-44.2C247.1 134.3 236 128 224 128s-23.1 6.3-29.4 16.7L5.1 458.9c-6.5 10.8-6.7 24.3-.7 35.3S22 512 34.5 512l379.1 0c12.5 0 24-6.8 30.1-17.8s5.8-24.5-.7-35.3L253.4 144.7z\"]\n};\nconst faCoins = {\n  prefix: 'fas',\n  iconName: 'coins',\n  icon: [512, 512, [], \"f51e\", \"M512 80c0 18-14.3 34.6-38.4 48c-29.1 16.1-72.5 27.5-122.3 30.9c-3.7-1.8-7.4-3.5-11.3-5C300.6 137.4 248.2 128 192 128c-8.3 0-16.4 .2-24.5 .6l-1.1-.6C142.3 114.6 128 98 128 80c0-44.2 86-80 192-80S512 35.8 512 80zM160.7 161.1c10.2-.7 20.7-1.1 31.3-1.1c62.2 0 117.4 12.3 152.5 31.4C369.3 204.9 384 221.7 384 240c0 4-.7 7.9-2.1 11.7c-4.6 13.2-17 25.3-35 35.5c0 0 0 0 0 0c-.1 .1-.3 .1-.4 .2c0 0 0 0 0 0s0 0 0 0c-.3 .2-.6 .3-.9 .5c-35 19.4-90.8 32-153.6 32c-59.6 0-112.9-11.3-148.2-29.1c-1.9-.9-3.7-1.9-5.5-2.9C14.3 274.6 0 258 0 240c0-34.8 53.4-64.5 128-75.4c10.5-1.5 21.4-2.7 32.7-3.5zM416 240c0-21.9-10.6-39.9-24.1-53.4c28.3-4.4 54.2-11.4 76.2-20.5c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 19.3-16.5 37.1-43.8 50.9c-14.6 7.4-32.4 13.7-52.4 18.5c.1-1.8 .2-3.5 .2-5.3zm-32 96c0 18-14.3 34.6-38.4 48c-1.8 1-3.6 1.9-5.5 2.9C304.9 404.7 251.6 416 192 416c-62.8 0-118.6-12.6-153.6-32C14.3 370.6 0 354 0 336l0-35.4c12.5 10.3 27.6 18.7 43.9 25.5C83.4 342.6 135.8 352 192 352s108.6-9.4 148.1-25.9c7.8-3.2 15.3-6.9 22.4-10.9c6.1-3.4 11.8-7.2 17.2-11.2c1.5-1.1 2.9-2.3 4.3-3.4l0 3.4 0 5.7 0 26.3zm32 0l0-32 0-25.9c19-4.2 36.5-9.5 52.1-16c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 10.5-5 21-14.9 30.9c-16.3 16.3-45 29.7-81.3 38.4c.1-1.7 .2-3.5 .2-5.3zM192 448c56.2 0 108.6-9.4 148.1-25.9c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 44.2-86 80-192 80S0 476.2 0 432l0-35.4c12.5 10.3 27.6 18.7 43.9 25.5C83.4 438.6 135.8 448 192 448z\"]\n};\nconst faKhanda = {\n  prefix: 'fas',\n  iconName: 'khanda',\n  icon: [512, 512, [9772], \"f66d\", \"M245.8 3.7c5.9-4.9 14.6-4.9 20.5 0l48 40c5.9 4.9 7.5 13.2 3.8 19.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0l-.1 .1-.3 .6c-.3 .5-.7 1.3-1.2 2.3c-1 2-2.6 5-4.4 8.6c-.5 .9-.9 1.9-1.4 2.9C344.9 97.4 368 134 368 176s-23.1 78.6-57.3 97.8c.5 1 1 2 1.4 2.9c1.8 3.7 3.3 6.6 4.4 8.6c.5 1 .9 1.8 1.2 2.3l.3 .6 .1 .1s0 0 0 0s0 0 0 0c3.6 6.7 2 15-3.8 19.9L272 343.5l0 19.8 35.6-24.5 41.1-28.2c42.8-29.4 68.4-78 68.4-130c0-31.1-9.2-61.6-26.5-87.5l-2.8-4.2c-4-6-3.5-14 1.3-19.5s12.7-7 19.2-3.7L401.1 80c7.2-14.3 7.2-14.3 7.2-14.3s0 0 0 0s0 0 0 0l.1 0 .3 .2 1 .5c.8 .4 2 1.1 3.5 1.9c2.9 1.7 7 4.1 11.8 7.3c9.6 6.4 22.5 16.1 35.4 29c25.7 25.7 52.7 65.6 52.7 119.3c0 53.1-26.4 100.5-51.2 133.6c-12.6 16.7-25.1 30.3-34.5 39.7c-4.7 4.7-8.7 8.4-11.5 10.9c-1.4 1.3-2.5 2.2-3.3 2.9l-.9 .8-.3 .2-.1 .1c0 0 0 0 0 0s0 0 0 0L401.1 400l10.2 12.3c-5.1 4.3-12.4 4.9-18.2 1.6l-75.6-43-32.7 22.5 45.5 31.3c1.8-.4 3.7-.7 5.7-.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-12.2 0-22.3-9.1-23.8-21L272 423.4l0 28.9c9.6 5.5 16 15.9 16 27.7c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-11.8 6.4-22.2 16-27.7l0-28.1-40.3 27.7C197.8 463.3 187.9 472 176 472c-13.3 0-24-10.7-24-24s10.7-24 24-24c2.2 0 4.4 .3 6.5 .9l45.8-31.5-32.7-22.5-75.6 43c-5.8 3.3-13 2.7-18.2-1.6L112 400c-10.2 12.3-10.2 12.3-10.3 12.3s0 0 0 0s0 0 0 0l-.1-.1-.3-.2-.9-.8c-.8-.7-1.9-1.7-3.3-2.9c-2.8-2.5-6.7-6.2-11.5-10.9c-9.4-9.4-21.9-23-34.5-39.7C26.4 324.5 0 277.1 0 224c0-53.7 26.9-93.6 52.7-119.3c12.9-12.9 25.8-22.6 35.4-29C93 72.5 97 70 99.9 68.4c1.5-.8 2.6-1.5 3.5-1.9l1-.5 .3-.2 .1 0c0 0 0 0 0 0s0 0 0 0L112 80l-7.2-14.3c6.5-3.2 14.3-1.7 19.2 3.7s5.3 13.4 1.3 19.5l-2.8 4.2C105.2 119 96 149.5 96 180.6c0 51.9 25.6 100.6 68.4 130l41.1 28.2L240 362.6l0-19.1-42.2-35.2c-5.9-4.9-7.5-13.2-3.8-19.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0l.1-.1 .3-.6c.3-.5 .7-1.3 1.2-2.3c1-2 2.6-5 4.4-8.6c.5-.9 .9-1.9 1.4-2.9C167.1 254.6 144 218 144 176s23.1-78.6 57.3-97.8c-.5-1-1-2-1.4-2.9c-1.8-3.7-3.3-6.6-4.4-8.6c-.5-1-.9-1.8-1.2-2.3l-.3-.6-.1-.1s0 0 0 0s0 0 0 0s0 0 0 0c-3.6-6.7-2-15 3.8-19.9l48-40zM220.2 122.9c-17 11.5-28.2 31-28.2 53.1s11.2 41.6 28.2 53.1C227 210.2 232 190.9 232 176s-5-34.2-11.8-53.1zm71.5 106.2c17-11.5 28.2-31 28.2-53.1s-11.2-41.6-28.2-53.1C285 141.8 280 161.1 280 176s5 34.2 11.8 53.1z\"]\n};\nconst faSliders = {\n  prefix: 'fas',\n  iconName: 'sliders',\n  icon: [512, 512, [\"sliders-h\"], \"f1de\", \"M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z\"]\n};\nconst faSlidersH = faSliders;\nconst faFolderTree = {\n  prefix: 'fas',\n  iconName: 'folder-tree',\n  icon: [576, 512, [], \"f802\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32l0 96L0 384c0 35.3 28.7 64 64 64l192 0 0-64L64 384l0-224 192 0 0-64L64 96l0-64zM288 192c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l-98.7 0c-8.5 0-16.6-3.4-22.6-9.4L409.4 9.4c-6-6-14.1-9.4-22.6-9.4L320 0c-17.7 0-32 14.3-32 32l0 160zm0 288c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l-98.7 0c-8.5 0-16.6-3.4-22.6-9.4l-13.3-13.3c-6-6-14.1-9.4-22.6-9.4L320 288c-17.7 0-32 14.3-32 32l0 160z\"]\n};\nconst faNetworkWired = {\n  prefix: 'fas',\n  iconName: 'network-wired',\n  icon: [640, 512, [], \"f6ff\", \"M256 64l128 0 0 64-128 0 0-64zM240 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l48 0 0 32L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 32-48 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l160 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0-32 256 0 0 32-48 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l160 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0-32 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-256 0 0-32 48 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48L240 0zM96 448l0-64 128 0 0 64L96 448zm320-64l128 0 0 64-128 0 0-64z\"]\n};\nconst faMapPin = {\n  prefix: 'fas',\n  iconName: 'map-pin',\n  icon: [320, 512, [128205], \"f276\", \"M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480l0-162.9c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9L192 480c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"]\n};\nconst faHamsa = {\n  prefix: 'fas',\n  iconName: 'hamsa',\n  icon: [512, 512, [], \"f665\", \"M34.6 288L80 288c8.8 0 16-7.2 16-16L96 72c0-22.1 17.9-40 40-40s40 17.9 40 40l0 132c0 11 9 20 20 20s20-9 20-20l0-164c0-22.1 17.9-40 40-40s40 17.9 40 40l0 164c0 11 9 20 20 20s20-9 20-20l0-132c0-22.1 17.9-40 40-40s40 17.9 40 40l0 200c0 8.8 7.2 16 16 16l45.4 0c19.1 0 34.6 15.5 34.6 34.6c0 8.6-3.2 16.9-9 23.3L416.6 441c-41.1 45.2-99.4 71-160.6 71s-119.4-25.8-160.6-71L9 345.9c-5.8-6.4-9-14.7-9-23.3C0 303.5 15.5 288 34.6 288zM256 288c-38.4 0-76.8 35.8-90.6 50.2c-3.6 3.7-5.4 8.7-5.4 13.8s1.8 10.1 5.4 13.8C179.2 380.2 217.6 416 256 416s76.8-35.8 90.6-50.2c3.6-3.7 5.4-8.7 5.4-13.8s-1.8-10.1-5.4-13.8C332.8 323.8 294.4 288 256 288zm0 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faCentSign = {\n  prefix: 'fas',\n  iconName: 'cent-sign',\n  icon: [384, 512, [], \"e3f5\", \"M224 0c17.7 0 32 14.3 32 32l0 34.7c30.9 5.2 59.2 17.7 83.2 35.8c14.1 10.6 17 30.7 6.4 44.8s-30.7 17-44.8 6.4C279.4 137.5 252.9 128 224 128c-70.7 0-128 57.3-128 128s57.3 128 128 128c28.9 0 55.4-9.5 76.8-25.6c14.1-10.6 34.2-7.8 44.8 6.4s7.8 34.2-6.4 44.8c-24 18-52.4 30.6-83.2 35.8l0 34.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.7C101.2 430.1 32 351.1 32 256s69.2-174.1 160-189.3L192 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faFlask = {\n  prefix: 'fas',\n  iconName: 'flask',\n  icon: [448, 512, [], \"f0c3\", \"M288 0L160 0 128 0C110.3 0 96 14.3 96 32s14.3 32 32 32l0 132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512l309.2 0c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5L320 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L288 0zM192 196.8L192 64l64 0 0 132.8c0 23.7 6.6 46.9 19 67.1L309.5 320l-171 0L173 263.9c12.4-20.2 19-43.4 19-67.1z\"]\n};\nconst faPersonPregnant = {\n  prefix: 'fas',\n  iconName: 'person-pregnant',\n  icon: [384, 512, [], \"e31e\", \"M192 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM120 383c-13.8-3.6-24-16.1-24-31l0-55.1-4.6 7.6c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c15-24.9 40.3-41.5 68.7-45.6c4.1-.6 8.2-1 12.5-1l1.1 0 12.5 0 2.4 0c1.4 0 2.8 .1 4.1 .3c35.7 2.9 65.4 29.3 72.1 65l6.1 32.5c44.3 8.6 77.7 47.5 77.7 94.3l0 32c0 17.7-14.3 32-32 32l-16 0-40 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-8 0-8 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-97z\"]\n};\nconst faWandSparkles = {\n  prefix: 'fas',\n  iconName: 'wand-sparkles',\n  icon: [512, 512, [], \"f72b\", \"M464 6.1c9.5-8.5 24-8.1 33 .9l8 8c9 9 9.4 23.5 .9 33l-85.8 95.9c-2.6 2.9-4.1 6.7-4.1 10.7l0 21.4c0 8.8-7.2 16-16 16l-15.8 0c-4.6 0-8.9 1.9-11.9 5.3L100.7 500.9C94.3 508 85.3 512 75.8 512c-8.8 0-17.3-3.5-23.5-9.8L9.7 459.7C3.5 453.4 0 445 0 436.2c0-9.5 4-18.5 11.1-24.8l111.6-99.8c3.4-3 5.3-7.4 5.3-11.9l0-27.6c0-8.8 7.2-16 16-16l34.6 0c3.9 0 7.7-1.5 10.7-4.1L464 6.1zM432 288c3.6 0 6.7 2.4 7.7 5.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8-14.8 51.7c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8l-14.8-51.7-51.7-14.8c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8 14.8-51.7c1-3.4 4.1-5.8 7.7-5.8zM87.7 69.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8L87.7 218.2c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8L57.5 166.5 5.8 151.7c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8L72.3 69.8c1-3.4 4.1-5.8 7.7-5.8s6.7 2.4 7.7 5.8zM208 0c3.7 0 6.9 2.5 7.8 6.1l6.8 27.3 27.3 6.8c3.6 .9 6.1 4.1 6.1 7.8s-2.5 6.9-6.1 7.8l-27.3 6.8-6.8 27.3c-.9 3.6-4.1 6.1-7.8 6.1s-6.9-2.5-7.8-6.1l-6.8-27.3-27.3-6.8c-3.6-.9-6.1-4.1-6.1-7.8s2.5-6.9 6.1-7.8l27.3-6.8 6.8-27.3c.9-3.6 4.1-6.1 7.8-6.1z\"]\n};\nconst faEllipsisVertical = {\n  prefix: 'fas',\n  iconName: 'ellipsis-vertical',\n  icon: [128, 512, [\"ellipsis-v\"], \"f142\", \"M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z\"]\n};\nconst faEllipsisV = faEllipsisVertical;\nconst faTicket = {\n  prefix: 'fas',\n  iconName: 'ticket',\n  icon: [576, 512, [127903], \"f145\", \"M64 64C28.7 64 0 92.7 0 128l0 64c0 8.8 7.4 15.7 15.7 18.6C34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-8.8-7.4-15.7-15.7-18.6C541.5 294.9 528 277 528 256s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6l0-64c0-35.3-28.7-64-64-64L64 64zm64 112l0 160c0 8.8 7.2 16 16 16l288 0c8.8 0 16-7.2 16-16l0-160c0-8.8-7.2-16-16-16l-288 0c-8.8 0-16 7.2-16 16zM96 160c0-17.7 14.3-32 32-32l320 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-320 0c-17.7 0-32-14.3-32-32l0-192z\"]\n};\nconst faPowerOff = {\n  prefix: 'fas',\n  iconName: 'power-off',\n  icon: [512, 512, [9211], \"f011\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 224c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224zM143.5 120.6c13.6-11.3 15.4-31.5 4.1-45.1s-31.5-15.4-45.1-4.1C49.7 115.4 16 181.8 16 256c0 132.5 107.5 240 240 240s240-107.5 240-240c0-74.2-33.8-140.6-86.6-184.6c-13.6-11.3-33.8-9.4-45.1 4.1s-9.4 33.8 4.1 45.1c38.9 32.3 63.5 81 63.5 135.4c0 97.2-78.8 176-176 176s-176-78.8-176-176c0-54.4 24.7-103.1 63.5-135.4z\"]\n};\nconst faRightLong = {\n  prefix: 'fas',\n  iconName: 'right-long',\n  icon: [512, 512, [\"long-arrow-alt-right\"], \"f30b\", \"M334.5 414c8.8 3.8 19 2 26-4.6l144-136c4.8-4.5 7.5-10.8 7.5-17.4s-2.7-12.9-7.5-17.4l-144-136c-7-6.6-17.2-8.4-26-4.6s-14.5 12.5-14.5 22l0 72L32 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l288 0 0 72c0 9.6 5.7 18.2 14.5 22z\"]\n};\nconst faLongArrowAltRight = faRightLong;\nconst faFlagUsa = {\n  prefix: 'fas',\n  iconName: 'flag-usa',\n  icon: [448, 512, [], \"f74d\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 36.1-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-20.3-9-41.8-14.7-63.6-16.9l0 32.2c17.4 2.1 34.4 6.7 50.6 13.9l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 136.3l0 62-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 203.1l0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 232.3l0 62-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 299.1l0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 328.3l0 33.5c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 400l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64 0-70.5 0-32.7 0-63.3 0-32.7 0-63.3 0-32.7L0 64 0 32C0 14.3 14.3 0 32 0zm80 96A16 16 0 1 0 80 96a16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-32 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faLaptopFile = {\n  prefix: 'fas',\n  iconName: 'laptop-file',\n  icon: [640, 512, [], \"e51d\", \"M128 0C92.7 0 64 28.7 64 64l0 224-44.8 0C8.6 288 0 296.6 0 307.2C0 349.6 34.4 384 76.8 384L320 384l0-96-192 0 0-224 320 0 0 32 64 0 0-32c0-35.3-28.7-64-64-64L128 0zM512 128l-112 0c-26.5 0-48 21.5-48 48l0 288c0 26.5 21.5 48 48 48l192 0c26.5 0 48-21.5 48-48l0-208-96 0c-17.7 0-32-14.3-32-32l0-96zm32 0l0 96 96 0-96-96z\"]\n};\nconst faTty = {\n  prefix: 'fas',\n  iconName: 'tty',\n  icon: [512, 512, [\"teletype\"], \"f1e4\", \"M38.3 241.3L15.1 200.6c-9.2-16.2-8.4-36.5 4.5-50C61.4 106.8 144.7 48 256 48s194.6 58.8 236.4 102.6c12.9 13.5 13.7 33.8 4.5 50l-23.1 40.7c-7.5 13.2-23.3 19.3-37.8 14.6l-81.1-26.6c-13.1-4.3-22-16.6-22-30.4l0-54.8c-49.6-18.1-104-18.1-153.6 0l0 54.8c0 13.8-8.9 26.1-22 30.4L76.1 255.8c-14.5 4.7-30.3-1.4-37.8-14.6zM32 336c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm0 96c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM144 320l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 432c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-32z\"]\n};\nconst faTeletype = faTty;\nconst faDiagramNext = {\n  prefix: 'fas',\n  iconName: 'diagram-next',\n  icon: [512, 512, [], \"e476\", \"M512 160c0 35.3-28.7 64-64 64l-168 0 0 64 46.1 0c21.4 0 32.1 25.9 17 41L273 399c-9.4 9.4-24.6 9.4-33.9 0L169 329c-15.1-15.1-4.4-41 17-41l46.1 0 0-64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 64zM448 416l0-64-82.7 0 .4-.4c18.4-18.4 20.4-43.7 11-63.6l71.3 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l71.3 0c-9.4 19.9-7.4 45.2 11 63.6l.4 .4L64 352l0 64 146.7 0 5.7 5.7c21.9 21.9 57.3 21.9 79.2 0l5.7-5.7L448 416z\"]\n};\nconst faPersonRifle = {\n  prefix: 'fas',\n  iconName: 'person-rifle',\n  icon: [576, 512, [], \"e54e\", \"M265.2 192c25.4 0 49.8 7.1 70.8 19.9L336 512l-192 0 0-174.3L90.4 428.3c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8L97.7 258.8c24.5-41.4 69-66.8 117.1-66.8l50.4 0zM160 80a80 80 0 1 1 160 0A80 80 0 1 1 160 80zM448 0c8.8 0 16 7.2 16 16l0 116.3c9.6 5.5 16 15.9 16 27.7l0 109.3 16-5.3 0-56c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 84.5c0 6.9-4.4 13-10.9 15.2L480 325.3l0 26.7 48 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-44 0 23 92.1c2.5 10.1-5.1 19.9-15.5 19.9L432 512c-8.8 0-16-7.2-16-16l0-96-16 0c-17.7 0-32-14.3-32-32l0-144c0-17.7 14.3-32 32-32l0-32c0-11.8 6.4-22.2 16-27.7L416 32c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 16 0z\"]\n};\nconst faHouseMedicalCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-exclamation',\n  icon: [640, 512, [], \"e512\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faClosedCaptioning = {\n  prefix: 'fas',\n  iconName: 'closed-captioning',\n  icon: [576, 512, [], \"f20a\", \"M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\"]\n};\nconst faPersonHiking = {\n  prefix: 'fas',\n  iconName: 'person-hiking',\n  icon: [384, 512, [\"hiking\"], \"f6ec\", \"M192 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm51.3 182.7L224.2 307l49.7 49.7c9 9 14.1 21.2 14.1 33.9l0 89.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.7-73.9-73.9c-15.8-15.8-22.2-38.6-16.9-60.3l20.4-84c8.3-34.1 42.7-54.9 76.7-46.4c19 4.8 35.6 16.4 46.4 32.7L305.1 208l30.9 0 0-24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 55.8c0 .1 0 .2 0 .2s0 .2 0 .2L384 488c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-216-39.4 0c-16 0-31-8-39.9-21.4l-13.3-20zM81.1 471.9L117.3 334c3 4.2 6.4 8.2 10.1 11.9l41.9 41.9L142.9 488.1c-4.5 17.1-22 27.3-39.1 22.8s-27.3-22-22.8-39.1zm55.5-346L101.4 266.5c-3 12.1-14.9 19.9-27.2 17.9l-47.9-8c-14-2.3-22.9-16.3-19.2-30L31.9 155c9.5-34.8 41.1-59 77.2-59l4.2 0c15.6 0 27.1 14.7 23.3 29.8z\"]\n};\nconst faHiking = faPersonHiking;\nconst faVenusDouble = {\n  prefix: 'fas',\n  iconName: 'venus-double',\n  icon: [640, 512, [9890], \"f226\", \"M192 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM368 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9C78.1 334.1 16 262.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176zM344 318c14.6-15.6 26.8-33.4 36-53c18.8 14.4 42.4 23 68 23c61.9 0 112-50.1 112-112s-50.1-112-112-112c-25.6 0-49.1 8.6-68 23c-9.3-19.5-21.5-37.4-36-53C373.1 12.6 409.1 0 448 0c97.2 0 176 78.8 176 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9c-26.6-4.9-51.1-15.7-72-31.1z\"]\n};\nconst faImages = {\n  prefix: 'fas',\n  iconName: 'images',\n  icon: [576, 512, [], \"f302\", \"M160 32c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l352 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32zM396 138.7l96 144c4.9 7.4 5.4 16.8 1.2 24.6S480.9 320 472 320l-144 0-48 0-80 0c-9.2 0-17.6-5.3-21.6-13.6s-2.9-18.2 2.9-25.4l64-80c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l17.3 21.6 56-84C360.5 132 368 128 376 128s15.5 4 20 10.7zM192 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 344c0 75.1 60.9 136 136 136l320 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-320 0c-48.6 0-88-39.4-88-88l0-224z\"]\n};\nconst faCalculator = {\n  prefix: 'fas',\n  iconName: 'calculator',\n  icon: [384, 512, [128425], \"f1ec\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM96 64l192 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32zm32 160a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM96 352a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM64 416c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32zM192 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm64-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM288 448a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"]\n};\nconst faPeoplePulling = {\n  prefix: 'fas',\n  iconName: 'people-pulling',\n  icon: [576, 512, [], \"e535\", \"M80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zM64 128c-35.3 0-64 28.7-64 64L0 320c0 17.7 14.3 32 32 32c9.8 0 18.5-4.4 24.4-11.2L80.4 485.3c2.9 17.4 19.4 29.2 36.8 26.3s29.2-19.4 26.3-36.8L123.1 352l15.7 0 30 134.9c3.8 17.3 20.9 28.1 38.2 24.3s28.1-20.9 24.3-38.2l-57.3-258 116.3 53.8c.5 .3 1.1 .5 1.6 .7c8.6 3.6 18 3.1 25.9-.7c3.4-1.6 6.6-3.9 9.3-6.7c3.1-3.2 5.5-7 7.1-11.4c.1-.3 .2-.7 .3-1l2.5-7.5c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L537 232.7l-15.3-36.8C504.5 154.8 464.3 128 419.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-24.4 10.9-44.6 29-58.1 51.6L157.3 136.9C144.7 131 130.9 128 117 128l-53 0zM464 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM349.7 335.6l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L372.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6z\"]\n};\nconst faN = {\n  prefix: 'fas',\n  iconName: 'n',\n  icon: [384, 512, [110], \"4e\", \"M21.1 33.9c12.7-4.6 26.9-.7 35.5 9.6L320 359.6 320 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 384c0 13.5-8.4 25.5-21.1 30.1s-26.9 .7-35.5-9.6L64 152.4 64 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 50.5 8.4 38.5 21.1 33.9z\"]\n};\nconst faCableCar = {\n  prefix: 'fas',\n  iconName: 'cable-car',\n  icon: [512, 512, [128673, 57551, \"tram\"], \"f7da\", \"M288 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM160 56a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM32 288c0-35.3 28.7-64 64-64l136 0 0-66.5-203.1 42c-13 2.7-25.7-5.7-28.4-18.6s5.7-25.7 18.6-28.4l232-48 232-48c13-2.7 25.7 5.7 28.4 18.6s-5.7 25.7-18.6 28.4L280 147.5l0 76.5 136 0c35.3 0 64 28.7 64 64l0 160c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-160zm64 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0zm112 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0z\"]\n};\nconst faTram = faCableCar;\nconst faCloudRain = {\n  prefix: 'fas',\n  iconName: 'cloud-rain',\n  icon: [512, 512, [127783, 9926], \"f73d\", \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96L96 320zm-6.8 52c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3L89.2 372zm160 0c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3L249.2 372zm124.9 64.6L409.2 372c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3z\"]\n};\nconst faBuildingCircleXmark = {\n  prefix: 'fas',\n  iconName: 'building-circle-xmark',\n  icon: [640, 512, [], \"e4d4\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faShip = {\n  prefix: 'fas',\n  iconName: 'ship',\n  icon: [576, 512, [128674], \"f21a\", \"M192 32c0-17.7 14.3-32 32-32L352 0c17.7 0 32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 128 44.4 14.8c23.1 7.7 29.5 37.5 11.5 53.9l-101 92.6c-16.2 9.4-34.7 15.1-50.9 15.1c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-16.2 0-34.7-5.7-50.9-15.1l-101-92.6c-18-16.5-11.6-46.2 11.5-53.9L96 240l0-128c0-26.5 21.5-48 48-48l48 0 0-32zM160 218.7l107.8-35.9c13.1-4.4 27.3-4.4 40.5 0L416 218.7l0-90.7-256 0 0 90.7zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faArrowsDownToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-down-to-line',\n  icon: [576, 512, [], \"e4b8\", \"M544 416L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zm22.6-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L480 274.7 480 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96zm-320-45.3c-12.5-12.5-32.8-12.5-45.3 0L160 274.7 160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7L54.6 233.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3z\"]\n};\nconst faDownload = {\n  prefix: 'fas',\n  iconName: 'download',\n  icon: [512, 512, [], \"f019\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 242.7-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7 288 32zM64 352c-35.3 0-64 28.7-64 64l0 32c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-32c0-35.3-28.7-64-64-64l-101.5 0-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352 64 352zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faFaceGrin = {\n  prefix: 'fas',\n  iconName: 'face-grin',\n  icon: [512, 512, [128512, \"grin\"], \"f580\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrin = faFaceGrin;\nconst faDeleteLeft = {\n  prefix: 'fas',\n  iconName: 'delete-left',\n  icon: [576, 512, [9003, \"backspace\"], \"f55a\", \"M576 128c0-35.3-28.7-64-64-64L205.3 64c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7L512 448c35.3 0 64-28.7 64-64l0-256zM271 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faBackspace = faDeleteLeft;\nconst faEyeDropper = {\n  prefix: 'fas',\n  iconName: 'eye-dropper',\n  icon: [512, 512, [\"eye-dropper-empty\", \"eyedropper\"], \"f1fb\", \"M341.6 29.2L240.1 130.8l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L482.8 170.4c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6l0 42.4L5.4 462.2c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4L89.7 480l42.4 0c21.2 0 41.6-8.4 56.6-23.4L309.4 335.9l-45.3-45.3L143.4 411.3c-3 3-7.1 4.7-11.3 4.7L96 416l0-36.1c0-4.2 1.7-8.3 4.7-11.3L221.4 247.9l-45.3-45.3L55.4 323.3z\"]\n};\nconst faEyeDropperEmpty = faEyeDropper;\nconst faEyedropper = faEyeDropper;\nconst faFileCircleCheck = {\n  prefix: 'fas',\n  iconName: 'file-circle-check',\n  icon: [576, 512, [], \"e5a0\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faForward = {\n  prefix: 'fas',\n  iconName: 'forward',\n  icon: [512, 512, [9193], \"f04e\", \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416L0 96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4L224 214.3l0 41.7 0 41.7L52.5 440.6zM256 352l0-96 0-128 0-32c0-12.4 7.2-23.7 18.4-29s24.5-3.6 34.1 4.4l192 160c7.3 6.1 11.5 15.1 11.5 24.6s-4.2 18.5-11.5 24.6l-192 160c-9.5 7.9-22.8 9.7-34.1 4.4s-18.4-16.6-18.4-29l0-64z\"]\n};\nconst faMobile = {\n  prefix: 'fas',\n  iconName: 'mobile',\n  icon: [384, 512, [128241, \"mobile-android\", \"mobile-phone\"], \"f3ce\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zm80 432l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faMobileAndroid = faMobile;\nconst faMobilePhone = faMobile;\nconst faFaceMeh = {\n  prefix: 'fas',\n  iconName: 'face-meh',\n  icon: [512, 512, [128528, \"meh\"], \"f11a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM160 336l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faMeh = faFaceMeh;\nconst faAlignCenter = {\n  prefix: 'fas',\n  iconName: 'align-center',\n  icon: [448, 512, [], \"f037\", \"M352 64c0-17.7-14.3-32-32-32L128 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32zm96 128c0-17.7-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 448c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32zM352 320c0-17.7-14.3-32-32-32l-192 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32z\"]\n};\nconst faBookSkull = {\n  prefix: 'fas',\n  iconName: 'book-skull',\n  icon: [448, 512, [\"book-dead\"], \"f6b7\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM320 112c0-35.3-35.8-64-80-64s-80 28.7-80 64c0 20.9 12.6 39.5 32 51.2l0 12.8c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-12.8c19.4-11.7 32-30.3 32-51.2zM208 96a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM134.3 209.3c-8.1-3.5-17.5 .3-21 8.4s.3 17.5 8.4 21L199.4 272l-77.7 33.3c-8.1 3.5-11.9 12.9-8.4 21s12.9 11.9 21 8.4L240 289.4l105.7 45.3c8.1 3.5 17.5-.3 21-8.4s-.3-17.5-8.4-21L280.6 272l77.7-33.3c8.1-3.5 11.9-12.9 8.4-21s-12.9-11.9-21-8.4L240 254.6 134.3 209.3z\"]\n};\nconst faBookDead = faBookSkull;\nconst faIdCard = {\n  prefix: 'fas',\n  iconName: 'id-card',\n  icon: [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M0 96l576 0c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96zm0 32L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-288L0 128zM64 405.3c0-29.5 23.9-53.3 53.3-53.3l117.3 0c29.5 0 53.3 23.9 53.3 53.3c0 5.9-4.8 10.7-10.7 10.7L74.7 416c-5.9 0-10.7-4.8-10.7-10.7zM176 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm176 16c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faDriversLicense = faIdCard;\nconst faOutdent = {\n  prefix: 'fas',\n  iconName: 'outdent',\n  icon: [448, 512, [\"dedent\"], \"f03b\", \"M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM.2 268.6c-8.2-6.4-8.2-18.9 0-25.3l101.9-79.3c10.5-8.2 25.8-.7 25.8 12.6l0 158.6c0 13.3-15.3 20.8-25.8 12.6L.2 268.6z\"]\n};\nconst faDedent = faOutdent;\nconst faHeartCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'heart-circle-exclamation',\n  icon: [576, 512, [], \"e4fe\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faHouse = {\n  prefix: 'fas',\n  iconName: 'house',\n  icon: [576, 512, [127968, 63498, 63500, \"home\", \"home-alt\", \"home-lg-alt\"], \"f015\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z\"]\n};\nconst faHome = faHouse;\nconst faHomeAlt = faHouse;\nconst faHomeLgAlt = faHouse;\nconst faCalendarWeek = {\n  prefix: 'fas',\n  iconName: 'calendar-week',\n  icon: [448, 512, [], \"f784\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm80 64c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l288 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16L80 256z\"]\n};\nconst faLaptopMedical = {\n  prefix: 'fas',\n  iconName: 'laptop-medical',\n  icon: [640, 512, [], \"f812\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 256-64 0 0-256L128 96l0 256-64 0L64 96zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM288 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faB = {\n  prefix: 'fas',\n  iconName: 'b',\n  icon: [320, 512, [98], \"42\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 416c0 35.3 28.7 64 64 64l128 0c70.7 0 128-57.3 128-128c0-46.5-24.8-87.3-62-109.7c18.7-22.3 30-51 30-82.3c0-70.7-57.3-128-128-128L64 32zm96 192l-96 0L64 96l96 0c35.3 0 64 28.7 64 64s-28.7 64-64 64zM64 288l96 0 32 0c35.3 0 64 28.7 64 64s-28.7 64-64 64L64 416l0-128z\"]\n};\nconst faFileMedical = {\n  prefix: 'fas',\n  iconName: 'file-medical',\n  icon: [384, 512, [], \"f477\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM160 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faDiceOne = {\n  prefix: 'fas',\n  iconName: 'dice-one',\n  icon: [448, 512, [9856], \"f525\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faKiwiBird = {\n  prefix: 'fas',\n  iconName: 'kiwi-bird',\n  icon: [576, 512, [], \"f535\", \"M291.2 388.4c31.2-18.8 64.7-36.4 101.1-36.4l55.7 0c4.6 0 9.1-.2 13.6-.7l85.3 121.9c4 5.7 11.3 8.2 17.9 6.1s11.2-8.3 11.2-15.3l0-240c0-70.7-57.3-128-128-128l-55.7 0c-36.4 0-69.9-17.6-101.1-36.4C262.3 42.1 228.3 32 192 32C86 32 0 118 0 224c0 71.1 38.6 133.1 96 166.3L96 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-46c15.3 3.9 31.4 6 48 6c5.4 0 10.7-.2 16-.7l0 40.7c0 13.3 10.7 24 24 24s24-10.7 24-24l0-50.9c12.4-4.4 24.2-10 35.2-16.7zM448 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faArrowRightArrowLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-right-arrow-left',\n  icon: [448, 512, [8644, \"exchange\"], \"f0ec\", \"M438.6 150.6c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.7 96 32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l306.7 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96zm-333.3 352c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 416 416 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96z\"]\n};\nconst faExchange = faArrowRightArrowLeft;\nconst faRotateRight = {\n  prefix: 'fas',\n  iconName: 'rotate-right',\n  icon: [512, 512, [\"redo-alt\", \"rotate-forward\"], \"f2f9\", \"M463.5 224l8.5 0c13.3 0 24-10.7 24-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l119.5 0z\"]\n};\nconst faRedoAlt = faRotateRight;\nconst faRotateForward = faRotateRight;\nconst faUtensils = {\n  prefix: 'fas',\n  iconName: 'utensils',\n  icon: [448, 512, [127860, 61685, \"cutlery\"], \"f2e7\", \"M416 0C400 0 288 32 288 176l0 112c0 35.3 28.7 64 64 64l32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 0-112 0-208c0-17.7-14.3-32-32-32zM64 16C64 7.8 57.9 1 49.7 .1S34.2 4.6 32.4 12.5L2.1 148.8C.7 155.1 0 161.5 0 167.9c0 45.9 35.1 83.6 80 87.7L80 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224.4c44.9-4.1 80-41.8 80-87.7c0-6.4-.7-12.8-2.1-19.1L191.6 12.5c-1.8-8-9.3-13.3-17.4-12.4S160 7.8 160 16l0 134.2c0 5.4-4.4 9.8-9.8 9.8c-5.1 0-9.3-3.9-9.8-9L127.9 14.6C127.2 6.3 120.3 0 112 0s-15.2 6.3-15.9 14.6L83.7 151c-.5 5.1-4.7 9-9.8 9c-5.4 0-9.8-4.4-9.8-9.8L64 16zm48.3 152l-.3 0-.3 0 .3-.7 .3 .7z\"]\n};\nconst faCutlery = faUtensils;\nconst faArrowUpWideShort = {\n  prefix: 'fas',\n  iconName: 'arrow-up-wide-short',\n  icon: [576, 512, [\"sort-amount-up\"], \"f161\", \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 480l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nconst faSortAmountUp = faArrowUpWideShort;\nconst faMillSign = {\n  prefix: 'fas',\n  iconName: 'mill-sign',\n  icon: [384, 512, [], \"e1ed\", \"M302.1 42.8c5.9-16.6-2.7-35-19.4-40.9s-35 2.7-40.9 19.4L208 116.1c-5.7 4-11.1 8.5-16 13.5C171.7 108.9 143.3 96 112 96c-19.5 0-37.8 5-53.7 13.7C52.5 101.4 42.9 96 32 96C14.3 96 0 110.3 0 128l0 80L0 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208c0-26.5 21.5-48 48-48s48 21.5 48 48l0 42.5L81.9 469.2c-5.9 16.6 2.7 35 19.4 40.9s35-2.7 40.9-19.4l21.4-60C168.9 441 179.6 448 192 448c17.7 0 32-14.3 32-32l0-154.5 35.7-100c3.9-1 8.1-1.6 12.3-1.6c26.5 0 48 21.5 48 48l0 208c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208c0-58.2-44.3-106-101.1-111.5l19.2-53.8z\"]\n};\nconst faBowlRice = {\n  prefix: 'fas',\n  iconName: 'bowl-rice',\n  icon: [512, 512, [], \"e2eb\", \"M176 56c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm24 48l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM56 176l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM0 283.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4zM224 200c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-96 0c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm216 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm120 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM296 32l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faSkull = {\n  prefix: 'fas',\n  iconName: 'skull',\n  icon: [512, 512, [128128], \"f54c\", \"M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1l0 64c0 26.5 21.5 48 48 48l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 64 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 48 0c26.5 0 48-21.5 48-48l0-64c0-.4 0-.7 0-1.1zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faTowerBroadcast = {\n  prefix: 'fas',\n  iconName: 'tower-broadcast',\n  icon: [576, 512, [\"broadcast-tower\"], \"f519\", \"M80.3 44C69.8 69.9 64 98.2 64 128s5.8 58.1 16.3 84c6.6 16.4-1.3 35-17.7 41.7s-35-1.3-41.7-17.7C7.4 202.6 0 166.1 0 128S7.4 53.4 20.9 20C27.6 3.6 46.2-4.3 62.6 2.3S86.9 27.6 80.3 44zM555.1 20C568.6 53.4 576 89.9 576 128s-7.4 74.6-20.9 108c-6.6 16.4-25.3 24.3-41.7 17.7S489.1 228.4 495.7 212c10.5-25.9 16.3-54.2 16.3-84s-5.8-58.1-16.3-84C489.1 27.6 497 9 513.4 2.3s35 1.3 41.7 17.7zM352 128c0 23.7-12.9 44.4-32 55.4L320 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-296.6c-19.1-11.1-32-31.7-32-55.4c0-35.3 28.7-64 64-64s64 28.7 64 64zM170.6 76.8C163.8 92.4 160 109.7 160 128s3.8 35.6 10.6 51.2c7.1 16.2-.3 35.1-16.5 42.1s-35.1-.3-42.1-16.5c-10.3-23.6-16-49.6-16-76.8s5.7-53.2 16-76.8c7.1-16.2 25.9-23.6 42.1-16.5s23.6 25.9 16.5 42.1zM464 51.2c10.3 23.6 16 49.6 16 76.8s-5.7 53.2-16 76.8c-7.1 16.2-25.9 23.6-42.1 16.5s-23.6-25.9-16.5-42.1c6.8-15.6 10.6-32.9 10.6-51.2s-3.8-35.6-10.6-51.2c-7.1-16.2 .3-35.1 16.5-42.1s35.1 .3 42.1 16.5z\"]\n};\nconst faBroadcastTower = faTowerBroadcast;\nconst faTruckPickup = {\n  prefix: 'fas',\n  iconName: 'truck-pickup',\n  icon: [640, 512, [128763], \"f63c\", \"M368.6 96l76.8 96L288 192l0-96 80.6 0zM224 80l0 112L64 192c-17.7 0-32 14.3-32 32l0 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l33.1 0c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16l66.3 0c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16l33.1 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c0-17.7-14.3-32-32-32l-48.6 0L418.6 56c-12.1-15.2-30.5-24-50-24L272 32c-26.5 0-48 21.5-48 48zm0 288a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm288 0a48 48 0 1 1 -96 0 48 48 0 1 1 96 0z\"]\n};\nconst faUpLong = {\n  prefix: 'fas',\n  iconName: 'up-long',\n  icon: [320, 512, [\"long-arrow-alt-up\"], \"f30c\", \"M318 177.5c3.8-8.8 2-19-4.6-26l-136-144C172.9 2.7 166.6 0 160 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26S14.4 192 24 192l72 0 0 288c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-288 72 0c9.6 0 18.2-5.7 22-14.5z\"]\n};\nconst faLongArrowAltUp = faUpLong;\nconst faStop = {\n  prefix: 'fas',\n  iconName: 'stop',\n  icon: [384, 512, [9209], \"f04d\", \"M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z\"]\n};\nconst faCodeMerge = {\n  prefix: 'fas',\n  iconName: 'code-merge',\n  icon: [448, 512, [], \"f387\", \"M80 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32.4 97.2c28-12.4 47.6-40.5 47.6-73.2c0-44.2-35.8-80-80-80S0 35.8 0 80c0 32.8 19.7 61 48 73.3l0 205.3C19.7 371 0 399.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-86.6c26.7 20.1 60 32 96 32l86.7 0c12.3 28.3 40.5 48 73.3 48c44.2 0 80-35.8 80-80s-35.8-80-80-80c-32.8 0-61 19.7-73.3 48L208 240c-49.9 0-91-38.1-95.6-86.8zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM344 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faUpload = {\n  prefix: 'fas',\n  iconName: 'upload',\n  icon: [512, 512, [], \"f093\", \"M288 109.3L288 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-242.7-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352l128 0c0 35.3 28.7 64 64 64s64-28.7 64-64l128 0c35.3 0 64 28.7 64 64l0 32c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64l0-32c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faHurricane = {\n  prefix: 'fas',\n  iconName: 'hurricane',\n  icon: [384, 512, [], \"f751\", \"M0 208C0 104.4 75.7 18.5 174.9 2.6C184 1.2 192 8.6 192 17.9l0 63.3c0 8.4 6.5 15.3 14.7 16.5C307 112.5 384 199 384 303.4c0 103.6-75.7 189.5-174.9 205.4c-9.2 1.5-17.1-5.9-17.1-15.2l0-63.3c0-8.4-6.5-15.3-14.7-16.5C77 398.9 0 312.4 0 208zm288 48A96 96 0 1 0 96 256a96 96 0 1 0 192 0zm-96-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faMound = {\n  prefix: 'fas',\n  iconName: 'mound',\n  icon: [576, 512, [], \"e52d\", \"M144.1 179.2C173.8 127.7 228.6 96 288 96s114.2 31.7 143.9 83.2L540.4 368c12.3 21.3-3.1 48-27.7 48H63.3c-24.6 0-40-26.6-27.7-48L144.1 179.2z\"]\n};\nconst faToiletPortable = {\n  prefix: 'fas',\n  iconName: 'toilet-portable',\n  icon: [320, 512, [], \"e583\", \"M0 32L0 64l320 0 0-32c0-17.7-14.3-32-32-32L32 0C14.3 0 0 14.3 0 32zM24 96L0 96l0 24L0 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 224 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-368 0-24-24 0L24 96zM256 240l0 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faCompactDisc = {\n  prefix: 'fas',\n  iconName: 'compact-disc',\n  icon: [512, 512, [128191, 128192, 128440], \"f51f\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm-96-32a96 96 0 1 0 192 0 96 96 0 1 0 -192 0zM96 240c0-35 17.5-71.1 45.2-98.8S205 96 240 96c8.8 0 16-7.2 16-16s-7.2-16-16-16c-45.4 0-89.2 22.3-121.5 54.5S64 194.6 64 240c0 8.8 7.2 16 16 16s16-7.2 16-16z\"]\n};\nconst faFileArrowDown = {\n  prefix: 'fas',\n  iconName: 'file-arrow-down',\n  icon: [384, 512, [\"file-download\"], \"f56d\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM216 232l0 102.1 31-31c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0l-72-72c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l31 31L168 232c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faFileDownload = faFileArrowDown;\nconst faCaravan = {\n  prefix: 'fas',\n  iconName: 'caravan',\n  icon: [640, 512, [], \"f8ff\", \"M0 112C0 67.8 35.8 32 80 32l336 0c88.4 0 160 71.6 160 160l0 160 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0-288 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-44.2 0-80-35.8-80-80L0 112zM320 352l128 0 0-96-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 192zM96 128c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128zm96 336a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faShieldCat = {\n  prefix: 'fas',\n  iconName: 'shield-cat',\n  icon: [512, 512, [], \"e572\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160 154.4c0-5.8 4.7-10.4 10.4-10.4l.2 0c3.4 0 6.5 1.6 8.5 4.3l40 53.3c3 4 7.8 6.4 12.8 6.4l48 0c5 0 9.8-2.4 12.8-6.4l40-53.3c2-2.7 5.2-4.3 8.5-4.3l.2 0c5.8 0 10.4 4.7 10.4 10.4L352 272c0 53-43 96-96 96s-96-43-96-96l0-117.6zM216 288a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm96-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faBolt = {\n  prefix: 'fas',\n  iconName: 'bolt',\n  icon: [448, 512, [9889, \"zap\"], \"f0e7\", \"M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288l111.5 0L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7l-111.5 0L349.4 44.6z\"]\n};\nconst faZap = faBolt;\nconst faGlassWater = {\n  prefix: 'fas',\n  iconName: 'glass-water',\n  icon: [384, 512, [], \"e4f4\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM73 156.5L66.4 64l251.3 0L311 156.5l-24.2 12.1c-19.4 9.7-42.2 9.7-61.6 0c-20.9-10.4-45.5-10.4-66.4 0c-19.4 9.7-42.2 9.7-61.6 0L73 156.5z\"]\n};\nconst faOilWell = {\n  prefix: 'fas',\n  iconName: 'oil-well',\n  icon: [576, 512, [], \"e532\", \"M528.3 61.3c-11.4-42.7-55.3-68-98-56.6L414.9 8.8C397.8 13.4 387.7 31 392.3 48l24.5 91.4L308.5 167.5l-6.3-18.1C297.7 136.6 285.6 128 272 128s-25.7 8.6-30.2 21.4l-13.6 39L96 222.6 96 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 264-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-137.3 0L340 257.5l-62.2 16.1L305.3 352l-66.6 0L265 277l-74.6 19.3L137.3 448 96 448l0-159.2 337.4-87.5 25.2 94c4.6 17.1 22.1 27.2 39.2 22.6l15.5-4.1c42.7-11.4 68-55.3 56.6-98L528.3 61.3zM205.1 448l11.2-32 111.4 0 11.2 32-133.8 0z\"]\n};\nconst faVault = {\n  prefix: 'fas',\n  iconName: 'vault',\n  icon: [576, 512, [], \"e2c5\", \"M64 0C28.7 0 0 28.7 0 64L0 416c0 35.3 28.7 64 64 64l16 0 16 32 64 0 16-32 224 0 16 32 64 0 16-32 16 0c35.3 0 64-28.7 64-64l0-352c0-35.3-28.7-64-64-64L64 0zM224 320a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-240a160 160 0 1 1 0 320 160 160 0 1 1 0-320zM480 221.3L480 336c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-114.7c-18.6-6.6-32-24.4-32-45.3c0-26.5 21.5-48 48-48s48 21.5 48 48c0 20.9-13.4 38.7-32 45.3z\"]\n};\nconst faMars = {\n  prefix: 'fas',\n  iconName: 'mars',\n  icon: [448, 512, [9794], \"f222\", \"M289.8 46.8c3.7-9 12.5-14.8 22.2-14.8l112 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L321 204.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176S0 401.2 0 304s78.8-176 176-176c37 0 71.4 11.4 99.8 31l52.6-52.6L295 73c-6.9-6.9-8.9-17.2-5.2-26.2zM400 80s0 0 0 0s0 0 0 0s0 0 0 0zM176 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\"]\n};\nconst faToilet = {\n  prefix: 'fas',\n  iconName: 'toilet',\n  icon: [448, 512, [128701], \"f7d8\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l8 0 0 148.9c-1.9 1.4-3.8 2.9-5.6 4.4C10.9 214.5 0 232.9 0 256c0 46.9 14.3 84.1 37 112.5c14.2 17.7 31.1 31.3 48.5 41.8L65.6 469.9c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l256 0c10.3 0 19.9-4.9 26-13.3s7.7-19.1 4.4-28.8l-19.8-59.5c17.4-10.5 34.3-24.1 48.5-41.8c22.7-28.4 37-65.5 37-112.5c0-23.1-10.9-41.5-26.4-54.6c-1.8-1.5-3.7-3-5.6-4.4L416 48l8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 0zM384 256.3c0 1-.3 2.6-3.8 5.6c-4.8 4.1-14 9-29.3 13.4C320.5 284 276.1 288 224 288s-96.5-4-126.9-12.8c-15.3-4.4-24.5-9.3-29.3-13.4c-3.5-3-3.8-4.6-3.8-5.6l0-.3c0 0 0-.1 0-.1c0-1 0-2.5 3.8-5.8c4.8-4.1 14-9 29.3-13.4C127.5 228 171.9 224 224 224s96.5 4 126.9 12.8c15.3 4.4 24.5 9.3 29.3 13.4c3.8 3.2 3.8 4.8 3.8 5.8c0 0 0 .1 0 .1l0 .3zM328.2 384l-.2 .5 0-.5 .2 0zM112 64l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faPlaneCircleXmark = {\n  prefix: 'fas',\n  iconName: 'plane-circle-xmark',\n  icon: [640, 512, [], \"e557\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faYenSign = {\n  prefix: 'fas',\n  iconName: 'yen-sign',\n  icon: [320, 512, [165, \"cny\", \"jpy\", \"rmb\", \"yen\"], \"f157\", \"M58.6 46.3C48.8 31.5 29 27.6 14.2 37.4S-4.4 67 5.4 81.8L100.2 224 48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 0 32-80 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-32 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.2 0L314.6 81.8c9.8-14.7 5.8-34.6-8.9-44.4s-34.6-5.8-44.4 8.9L160 198.3 58.6 46.3z\"]\n};\nconst faCny = faYenSign;\nconst faJpy = faYenSign;\nconst faRmb = faYenSign;\nconst faYen = faYenSign;\nconst faRubleSign = {\n  prefix: 'fas',\n  iconName: 'ruble-sign',\n  icon: [384, 512, [8381, \"rouble\", \"rub\", \"ruble\"], \"f158\", \"M96 32C78.3 32 64 46.3 64 64l0 192-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-32 112 0c79.5 0 144-64.5 144-144s-64.5-144-144-144L96 32zM240 256l-112 0 0-160 112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"]\n};\nconst faRouble = faRubleSign;\nconst faRub = faRubleSign;\nconst faRuble = faRubleSign;\nconst faSun = {\n  prefix: 'fas',\n  iconName: 'sun',\n  icon: [512, 512, [9728], \"f185\", \"M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"]\n};\nconst faGuitar = {\n  prefix: 'fas',\n  iconName: 'guitar',\n  icon: [512, 512, [], \"f7a6\", \"M465 7c-9.4-9.4-24.6-9.4-33.9 0L383 55c-2.4 2.4-4.3 5.3-5.5 8.5l-15.4 41-77.5 77.6c-45.1-29.4-99.3-30.2-131 1.6c-11 11-18 24.6-21.4 39.6c-3.7 16.6-19.1 30.7-36.1 31.6c-25.6 1.3-49.3 10.7-67.3 28.6C-16 328.4-7.6 409.4 47.5 464.5s136.1 63.5 180.9 18.7c17.9-17.9 27.4-41.7 28.6-67.3c.9-17 15-32.3 31.6-36.1c15-3.4 28.6-10.5 39.6-21.4c31.8-31.8 31-85.9 1.6-131l77.6-77.6 41-15.4c3.2-1.2 6.1-3.1 8.5-5.5l48-48c9.4-9.4 9.4-24.6 0-33.9L465 7zM208 256a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faFaceLaughWink = {\n  prefix: 'fas',\n  iconName: 'face-laugh-wink',\n  icon: [512, 512, [\"laugh-wink\"], \"f59c\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"]\n};\nconst faLaughWink = faFaceLaughWink;\nconst faHorseHead = {\n  prefix: 'fas',\n  iconName: 'horse-head',\n  icon: [640, 512, [], \"f7ab\", \"M64 464l0-147.1c0-108.4 68.3-205.1 170.5-241.3L404.2 15.5C425.6 7.9 448 23.8 448 46.4c0 11-5.5 21.2-14.6 27.3L400 96c48.1 0 91.2 29.8 108.1 74.9l48.6 129.5c11.8 31.4 4.1 66.8-19.6 90.5c-16 16-37.8 25.1-60.5 25.1l-3.4 0c-26.1 0-50.9-11.6-67.6-31.7l-32.3-38.7c-11.7 4.1-24.2 6.4-37.3 6.4c0 0 0 0-.1 0c0 0 0 0 0 0c-6.3 0-12.5-.5-18.6-1.5c-3.6-.6-7.2-1.4-10.7-2.3c0 0 0 0 0 0c-28.9-7.8-53.1-26.8-67.8-52.2c-4.4-7.6-14.2-10.3-21.9-5.8s-10.3 14.2-5.8 21.9c24 41.5 68.3 70 119.3 71.9l47.2 70.8c4 6.1 6.2 13.2 6.2 20.4c0 20.3-16.5 36.8-36.8 36.8L112 512c-26.5 0-48-21.5-48-48zM392 224a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faBoreHole = {\n  prefix: 'fas',\n  iconName: 'bore-hole',\n  icon: [512, 512, [], \"e4c3\", \"M256 0c-17.7 0-32 14.3-32 32l0 264.6c-19.1 11.1-32 31.7-32 55.4c0 35.3 28.7 64 64 64s64-28.7 64-64c0-23.7-12.9-44.4-32-55.4L288 32c0-17.7-14.3-32-32-32zM48 128c-26.5 0-48 21.5-48 48L0 464c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48l-80 0c-17.7 0-32 14.3-32 32l0 192c0 53-43 96-96 96s-96-43-96-96l0-192c0-17.7-14.3-32-32-32l-80 0z\"]\n};\nconst faIndustry = {\n  prefix: 'fas',\n  iconName: 'industry',\n  icon: [576, 512, [], \"f275\", \"M64 32C46.3 32 32 46.3 32 64l0 240 0 48 0 80c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-128 0-151.8c0-18.2-19.4-29.7-35.4-21.1L352 215.4l0-63.2c0-18.2-19.4-29.7-35.4-21.1L160 215.4 160 64c0-17.7-14.3-32-32-32L64 32z\"]\n};\nconst faCircleDown = {\n  prefix: 'fas',\n  iconName: 'circle-down',\n  icon: [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM244.7 395.3l-112-112c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9l64 0 0-96c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96 64 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-112 112c-6.2 6.2-16.4 6.2-22.6 0z\"]\n};\nconst faArrowAltCircleDown = faCircleDown;\nconst faArrowsTurnToDots = {\n  prefix: 'fas',\n  iconName: 'arrows-turn-to-dots',\n  icon: [512, 512, [], \"e4c1\", \"M249.4 25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L269.3 96 416 96c53 0 96 43 96 96l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7-14.3-32-32-32l-146.7 0 25.4 25.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3l80-80zm13.3 256l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-53 43-96 96-96l146.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0zM384 384a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192A64 64 0 1 1 64 64a64 64 0 1 1 0 128z\"]\n};\nconst faFlorinSign = {\n  prefix: 'fas',\n  iconName: 'florin-sign',\n  icon: [384, 512, [], \"e184\", \"M314.7 32c-38.8 0-73.7 23.3-88.6 59.1L170.7 224 64 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0L98.9 396.3c-5 11.9-16.6 19.7-29.5 19.7L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l37.3 0c38.8 0 73.7-23.3 88.6-59.1L213.3 288 320 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 45.1-108.3c5-11.9 16.6-19.7 29.5-19.7L352 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-37.3 0z\"]\n};\nconst faArrowDownShortWide = {\n  prefix: 'fas',\n  iconName: 'arrow-down-short-wide',\n  icon: [576, 512, [\"sort-amount-desc\", \"sort-amount-down-alt\"], \"f884\", \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faSortAmountDesc = faArrowDownShortWide;\nconst faSortAmountDownAlt = faArrowDownShortWide;\nconst faLessThan = {\n  prefix: 'fas',\n  iconName: 'less-than',\n  icon: [384, 512, [62774], \"3c\", \"M380.6 81.7c7.9 15.8 1.5 35-14.3 42.9L103.6 256 366.3 387.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-320-160C6.8 279.2 0 268.1 0 256s6.8-23.2 17.7-28.6l320-160c15.8-7.9 35-1.5 42.9 14.3z\"]\n};\nconst faAngleDown = {\n  prefix: 'fas',\n  iconName: 'angle-down',\n  icon: [448, 512, [8964], \"f107\", \"M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"]\n};\nconst faCarTunnel = {\n  prefix: 'fas',\n  iconName: 'car-tunnel',\n  icon: [512, 512, [], \"e4de\", \"M256 0C114.6 0 0 114.6 0 256L0 448c0 35.3 28.7 64 64 64l42.8 0c-6.6-5.9-10.8-14.4-10.8-24l0-112c0-20.8 11.3-38.9 28.1-48.6l21-64.7c7.5-23.1 29-38.7 53.3-38.7l115.2 0c24.3 0 45.8 15.6 53.3 38.7l21 64.7c16.8 9.7 28.2 27.8 28.2 48.6l0 112c0 9.6-4.2 18.1-10.8 24l42.8 0c35.3 0 64-28.7 64-64l0-192C512 114.6 397.4 0 256 0zM362.8 512c-6.6-5.9-10.8-14.4-10.8-24l0-40-192 0 0 40c0 9.6-4.2 18.1-10.8 24l213.7 0zM190.8 277.5L177 320l158 0-13.8-42.5c-1.1-3.3-4.1-5.5-7.6-5.5l-115.2 0c-3.5 0-6.5 2.2-7.6 5.5zM168 408a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm200-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faHeadSideCough = {\n  prefix: 'fas',\n  iconName: 'head-side-cough',\n  icon: [640, 512, [], \"e061\", \"M0 224.2C0 100.6 100.2 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320s0 0 0 0l0 32L339.2 365.6c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9L448 416l0 16c0 26.5-21.5 48-48 48l-80 0 0 8c0 13.3-10.7 24-24 24l-40 0s0 0 0 0L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zm352-.2a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM464 384a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm152-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM592 480a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 312a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faGripLines = {\n  prefix: 'fas',\n  iconName: 'grip-lines',\n  icon: [448, 512, [], \"f7a4\", \"M32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 288zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"]\n};\nconst faThumbsDown = {\n  prefix: 'fas',\n  iconName: 'thumbs-down',\n  icon: [512, 512, [128078, 61576], \"f165\", \"M313.4 479.1c26-5.2 42.9-30.5 37.7-56.5l-2.3-11.4c-5.3-26.7-15.1-52.1-28.8-75.2l144 0c26.5 0 48-21.5 48-48c0-18.5-10.5-34.6-25.9-42.6C497 236.6 504 223.1 504 208c0-23.4-16.8-42.9-38.9-47.1c4.4-7.3 6.9-15.8 6.9-24.9c0-21.3-13.9-39.4-33.1-45.6c.7-3.3 1.1-6.8 1.1-10.4c0-26.5-21.5-48-48-48l-97.5 0c-19 0-37.5 5.6-53.3 16.1L202.7 73.8C176 91.6 160 121.6 160 153.7l0 38.3 0 48 0 24.9c0 29.2 13.3 56.7 36 75l7.4 5.9c26.5 21.2 44.6 51 51.2 84.2l2.3 11.4c5.2 26 30.5 42.9 56.5 37.7zM32 384l64 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32L32 96C14.3 96 0 110.3 0 128L0 352c0 17.7 14.3 32 32 32z\"]\n};\nconst faUserLock = {\n  prefix: 'fas',\n  iconName: 'user-lock',\n  icon: [640, 512, [], \"f502\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l362.8 0c-5.4-9.4-8.6-20.3-8.6-32l0-128c0-2.1 .1-4.2 .3-6.3c-31-26-71-41.7-114.6-41.7l-91.4 0zM528 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faArrowRightLong = {\n  prefix: 'fas',\n  iconName: 'arrow-right-long',\n  icon: [512, 512, [\"long-arrow-right\"], \"f178\", \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"]\n};\nconst faLongArrowRight = faArrowRightLong;\nconst faAnchorCircleXmark = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-xmark',\n  icon: [640, 512, [], \"e4ac\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faEllipsis = {\n  prefix: 'fas',\n  iconName: 'ellipsis',\n  icon: [448, 512, [\"ellipsis-h\"], \"f141\", \"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"]\n};\nconst faEllipsisH = faEllipsis;\nconst faChessPawn = {\n  prefix: 'fas',\n  iconName: 'chess-pawn',\n  icon: [320, 512, [9823], \"f443\", \"M215.5 224c29.2-18.4 48.5-50.9 48.5-88c0-57.4-46.6-104-104-104S56 78.6 56 136c0 37.1 19.4 69.6 48.5 88L96 224c-17.7 0-32 14.3-32 32c0 16.5 12.5 30 28.5 31.8L80 400l160 0L227.5 287.8c16-1.8 28.5-15.3 28.5-31.8c0-17.7-14.3-32-32-32l-8.5 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512l242.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L256 432 64 432 22.6 473.4z\"]\n};\nconst faKitMedical = {\n  prefix: 'fas',\n  iconName: 'kit-medical',\n  icon: [576, 512, [\"first-aid\"], \"f479\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l32 0L96 32 64 32zm64 0l0 448 320 0 0-448L128 32zM512 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-32 0 0 448 32 0zM256 176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faFirstAid = faKitMedical;\nconst faPersonThroughWindow = {\n  prefix: 'fas',\n  iconName: 'person-through-window',\n  icon: [640, 512, [], \"e5a9\", \"M64 64l224 0 0 9.8c0 39-23.7 74-59.9 88.4C167.6 186.5 128 245 128 310.2l0 73.8s0 0 0 0l-64 0L64 64zm288 0l224 0 0 320-67.7 0-3.7-4.5-75.2-90.2c-9.1-10.9-22.6-17.3-36.9-17.3l-71.1 0-41-63.1c-.3-.5-.6-1-1-1.4c44.7-29 72.5-79 72.5-133.6l0-9.8zm73 320l-45.8 0 42.7 64L592 448c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 400c0 26.5 21.5 48 48 48l260.2 0 33.2 49.8c9.8 14.7 29.7 18.7 44.4 8.9s18.7-29.7 8.9-44.4L310.5 336l74.6 0 40 48zm-159.5 0L192 384s0 0 0 0l0-73.8c0-10.2 1.6-20.1 4.7-29.5L265.5 384zM192 128a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faToolbox = {\n  prefix: 'fas',\n  iconName: 'toolbox',\n  icon: [512, 512, [129520], \"f552\", \"M176 88l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 80c-4.4 0-8 3.6-8 8zm-48 40l0-40c0-30.9 25.1-56 56-56l144 0c30.9 0 56 25.1 56 56l0 40 28.1 0c12.7 0 24.9 5.1 33.9 14.1l51.9 51.9c9 9 14.1 21.2 14.1 33.9l0 92.1-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L0 320l0-92.1c0-12.7 5.1-24.9 14.1-33.9l51.9-51.9c9-9 21.2-14.1 33.9-14.1l28.1 0zM0 416l0-64 128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0 0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64z\"]\n};\nconst faHandsHoldingCircle = {\n  prefix: 'fas',\n  iconName: 'hands-holding-circle',\n  icon: [640, 512, [], \"e4fb\", \"M320 0a128 128 0 1 1 0 256A128 128 0 1 1 320 0zM40 64c22.1 0 40 17.9 40 40l0 40 0 80 0 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2c0 0 0 0 0 0l25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 224l0-64 0-56C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 56 0 64 0 101.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3c0 0 0 0 0 0l15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3l0-40.2 0-80 0-40c0-22.1 17.9-40 40-40z\"]\n};\nconst faBug = {\n  prefix: 'fas',\n  iconName: 'bug',\n  icon: [512, 512, [], \"f188\", \"M256 0c53 0 96 43 96 96l0 3.6c0 15.7-12.7 28.4-28.4 28.4l-135.1 0c-15.7 0-28.4-12.7-28.4-28.4l0-3.6c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4l112 0c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5l64.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6L272 240c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 239.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64.3 0c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nconst faCreditCard = {\n  prefix: 'fas',\n  iconName: 'credit-card',\n  icon: [576, 512, [128179, 62083, \"credit-card-alt\"], \"f09d\", \"M64 32C28.7 32 0 60.7 0 96l0 32 576 0 0-32c0-35.3-28.7-64-64-64L64 32zM576 224L0 224 0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-192zM112 352l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm112 16c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faCreditCardAlt = faCreditCard;\nconst faCar = {\n  prefix: 'fas',\n  iconName: 'car',\n  icon: [512, 512, [128664, \"automobile\"], \"f1b9\", \"M135.2 117.4L109.1 192l293.8 0-26.1-74.6C372.3 104.6 360.2 96 346.6 96L165.4 96c-13.6 0-25.7 8.6-30.2 21.4zM39.6 196.8L74.8 96.3C88.3 57.8 124.6 32 165.4 32l181.2 0c40.8 0 77.1 25.8 90.6 64.3l35.2 100.5c23.2 9.6 39.6 32.5 39.6 59.2l0 144 0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L96 400l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L0 256c0-26.7 16.4-49.6 39.6-59.2zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faAutomobile = faCar;\nconst faHandHoldingHand = {\n  prefix: 'fas',\n  iconName: 'hand-holding-hand',\n  icon: [576, 512, [], \"e4f7\", \"M7.8 207.7c-13.1-17.8-9.3-42.8 8.5-55.9L142.9 58.5C166.2 41.3 194.5 32 223.5 32L384 32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-36.8 0-44.9 36c-22.7 18.2-50.9 28-80 28L304 224l-16 0-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-120.6 0L63.7 216.2c-17.8 13.1-42.8 9.3-55.9-8.5zM382.4 160c0 0 0 0 0 0l.9 0c-.3 0-.6 0-.9 0zM568.2 304.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 453.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 480 32 480c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 352c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faBookOpenReader = {\n  prefix: 'fas',\n  iconName: 'book-open-reader',\n  icon: [512, 512, [\"book-reader\"], \"f5da\", \"M160 96a96 96 0 1 1 192 0A96 96 0 1 1 160 96zm80 152l0 264-48.4-24.2c-20.9-10.4-43.5-17-66.8-19.3l-96-9.6C12.5 457.2 0 443.5 0 427L0 224c0-17.7 14.3-32 32-32l30.3 0c63.6 0 125.6 19.6 177.7 56zm32 264l0-264c52.1-36.4 114.1-56 177.7-56l30.3 0c17.7 0 32 14.3 32 32l0 203c0 16.4-12.5 30.2-28.8 31.8l-96 9.6c-23.2 2.3-45.9 8.9-66.8 19.3L272 512z\"]\n};\nconst faBookReader = faBookOpenReader;\nconst faMountainSun = {\n  prefix: 'fas',\n  iconName: 'mountain-sun',\n  icon: [640, 512, [], \"e52f\", \"M560 160A80 80 0 1 0 560 0a80 80 0 1 0 0 160zM55.9 512l325.2 0 75 0 122.8 0c33.8 0 61.1-27.4 61.1-61.1c0-11.2-3.1-22.2-8.9-31.8l-132-216.3C495 196.1 487.8 192 480 192s-15 4.1-19.1 10.7l-48.2 79L286.8 81c-6.6-10.6-18.3-17-30.8-17s-24.1 6.4-30.8 17L8.6 426.4C3 435.3 0 445.6 0 456.1C0 487 25 512 55.9 512z\"]\n};\nconst faArrowsLeftRightToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-left-right-to-line',\n  icon: [640, 512, [], \"e4ba\", \"M32 64c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64zm214.6 73.4c12.5 12.5 12.5 32.8 0 45.3L205.3 224l229.5 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 288l-229.5 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0zM640 96l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-320c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faDiceD20 = {\n  prefix: 'fas',\n  iconName: 'dice-d20',\n  icon: [512, 512, [], \"f6cf\", \"M48.7 125.8l53.2 31.9c7.8 4.7 17.8 2 22.2-5.9L201.6 12.1c3-5.4-.9-12.1-7.1-12.1c-1.6 0-3.2 .5-4.6 1.4L47.9 98.8c-9.6 6.6-9.2 20.9 .8 26.9zM16 171.7l0 123.5c0 8 10.4 11 14.7 4.4l60-92c5-7.6 2.6-17.8-5.2-22.5L40.2 158C29.6 151.6 16 159.3 16 171.7zM310.4 12.1l77.6 139.6c4.4 7.9 14.5 10.6 22.2 5.9l53.2-31.9c10-6 10.4-20.3 .8-26.9L322.1 1.4c-1.4-.9-3-1.4-4.6-1.4c-6.2 0-10.1 6.7-7.1 12.1zM496 171.7c0-12.4-13.6-20.1-24.2-13.7l-45.3 27.2c-7.8 4.7-10.1 14.9-5.2 22.5l60 92c4.3 6.7 14.7 3.6 14.7-4.4l0-123.5zm-49.3 246L286.1 436.6c-8.1 .9-14.1 7.8-14.1 15.9l0 52.8c0 3.7 3 6.8 6.8 6.8c.8 0 1.6-.1 2.4-.4l172.7-64c6.1-2.2 10.1-8 10.1-14.5c0-9.3-8.1-16.5-17.3-15.4zM233.2 512c3.7 0 6.8-3 6.8-6.8l0-52.6c0-8.1-6.1-14.9-14.1-15.9l-160.6-19c-9.2-1.1-17.3 6.1-17.3 15.4c0 6.5 4 12.3 10.1 14.5l172.7 64c.8 .3 1.6 .4 2.4 .4zM41.7 382.9l170.9 20.2c7.8 .9 13.4-7.5 9.5-14.3l-85.7-150c-5.9-10.4-20.7-10.8-27.3-.8L30.2 358.2c-6.5 9.9-.3 23.3 11.5 24.7zm439.6-24.8L402.9 238.1c-6.5-10-21.4-9.6-27.3 .8L290.2 388.5c-3.9 6.8 1.6 15.2 9.5 14.3l170.1-20c11.8-1.4 18-14.7 11.5-24.6zm-216.9 11l78.4-137.2c6.1-10.7-1.6-23.9-13.9-23.9l-145.7 0c-12.3 0-20 13.3-13.9 23.9l78.4 137.2c3.7 6.4 13 6.4 16.7 0zM174.4 176l163.2 0c12.2 0 19.9-13.1 14-23.8l-80-144c-2.8-5.1-8.2-8.2-14-8.2l-3.2 0c-5.8 0-11.2 3.2-14 8.2l-80 144c-5.9 10.7 1.8 23.8 14 23.8z\"]\n};\nconst faTruckDroplet = {\n  prefix: 'fas',\n  iconName: 'truck-droplet',\n  icon: [640, 512, [], \"e58c\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM208 272c39.8 0 72-29.6 72-66c0-27-39.4-82.9-59.9-110.3c-6.1-8.2-18.1-8.2-24.2 0C175.4 123 136 179 136 206c0 36.5 32.2 66 72 66z\"]\n};\nconst faFileCircleXmark = {\n  prefix: 'fas',\n  iconName: 'file-circle-xmark',\n  icon: [576, 512, [], \"e5a1\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"]\n};\nconst faTemperatureArrowUp = {\n  prefix: 'fas',\n  iconName: 'temperature-arrow-up',\n  icon: [576, 512, [\"temperature-up\"], \"e040\", \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L128 112zM176 0C114.1 0 64 50.1 64 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L288 112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3L192 112c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 210.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zM480 160l32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 288c0 17.7 14.3 32 32 32s32-14.3 32-32l0-288z\"]\n};\nconst faTemperatureUp = faTemperatureArrowUp;\nconst faMedal = {\n  prefix: 'fas',\n  iconName: 'medal',\n  icon: [512, 512, [127941], \"f5a2\", \"M4.1 38.2C1.4 34.2 0 29.4 0 24.6C0 11 11 0 24.6 0L133.9 0c11.2 0 21.7 5.9 27.4 15.5l68.5 114.1c-48.2 6.1-91.3 28.6-123.4 61.9L4.1 38.2zm503.7 0L405.6 191.5c-32.1-33.3-75.2-55.8-123.4-61.9L350.7 15.5C356.5 5.9 366.9 0 378.1 0L487.4 0C501 0 512 11 512 24.6c0 4.8-1.4 9.6-4.1 13.6zM80 336a176 176 0 1 1 352 0A176 176 0 1 1 80 336zm184.4-94.9c-3.4-7-13.3-7-16.8 0l-22.4 45.4c-1.4 2.8-4 4.7-7 5.1L168 298.9c-7.7 1.1-10.7 10.5-5.2 16l36.3 35.4c2.2 2.2 3.2 5.2 2.7 8.3l-8.6 49.9c-1.3 7.6 6.7 13.5 13.6 9.9l44.8-23.6c2.7-1.4 6-1.4 8.7 0l44.8 23.6c6.9 3.6 14.9-2.2 13.6-9.9l-8.6-49.9c-.5-3 .5-6.1 2.7-8.3l36.3-35.4c5.6-5.4 2.5-14.8-5.2-16l-50.1-7.3c-3-.4-5.7-2.4-7-5.1l-22.4-45.4z\"]\n};\nconst faBed = {\n  prefix: 'fas',\n  iconName: 'bed',\n  icon: [640, 512, [128716], \"f236\", \"M32 32c17.7 0 32 14.3 32 32l0 256 224 0 0-160c0-17.7 14.3-32 32-32l224 0c53 0 96 43 96 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-224 0-32 0L64 416l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 46.3 14.3 32 32 32zm144 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faSquareH = {\n  prefix: 'fas',\n  iconName: 'square-h',\n  icon: [448, 512, [\"h-square\"], \"f0fd\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM336 152l0 104 0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80-128 0 0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80 128 0 0-80c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faHSquare = faSquareH;\nconst faPodcast = {\n  prefix: 'fas',\n  iconName: 'podcast',\n  icon: [448, 512, [], \"f2ce\", \"M319.4 372c48.5-31.3 80.6-85.9 80.6-148c0-97.2-78.8-176-176-176S48 126.8 48 224c0 62.1 32.1 116.6 80.6 148c1.2 17.3 4 38 7.2 57.1l.2 1C56 395.8 0 316.5 0 224C0 100.3 100.3 0 224 0S448 100.3 448 224c0 92.5-56 171.9-136 206.1l.2-1.1c3.1-19.2 6-39.8 7.2-57zm-2.3-38.1c-1.6-5.7-3.9-11.1-7-16.2c-5.8-9.7-13.5-17-21.9-22.4c19.5-17.6 31.8-43 31.8-71.3c0-53-43-96-96-96s-96 43-96 96c0 28.3 12.3 53.8 31.8 71.3c-8.4 5.4-16.1 12.7-21.9 22.4c-3.1 5.1-5.4 10.5-7 16.2C99.8 307.5 80 268 80 224c0-79.5 64.5-144 144-144s144 64.5 144 144c0 44-19.8 83.5-50.9 109.9zM224 312c32.9 0 64 8.6 64 43.8c0 33-12.9 104.1-20.6 132.9c-5.1 19-24.5 23.4-43.4 23.4s-38.2-4.4-43.4-23.4c-7.8-28.5-20.6-99.7-20.6-132.8c0-35.1 31.1-43.8 64-43.8zm0-144a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"]\n};\nconst faTemperatureFull = {\n  prefix: 'fas',\n  iconName: 'temperature-full',\n  icon: [320, 512, [\"temperature-4\", \"thermometer-4\", \"thermometer-full\"], \"f2c7\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 210.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature4 = faTemperatureFull;\nconst faThermometer4 = faTemperatureFull;\nconst faThermometerFull = faTemperatureFull;\nconst faBell = {\n  prefix: 'fas',\n  iconName: 'bell',\n  icon: [448, 512, [128276, 61602], \"f0f3\", \"M224 0c-17.7 0-32 14.3-32 32l0 19.2C119 66 64 130.6 64 208l0 18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416l384 0c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8l0-18.8c0-77.4-55-142-128-156.8L256 32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\"]\n};\nconst faSuperscript = {\n  prefix: 'fas',\n  iconName: 'superscript',\n  icon: [512, 512, [], \"f12b\", \"M480 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 73.5 404.3 80 416 80l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l15.3 0 89.6 128L47.3 384 32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0L215.1 256l89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64L32 64z\"]\n};\nconst faPlugCircleXmark = {\n  prefix: 'fas',\n  iconName: 'plug-circle-xmark',\n  icon: [576, 512, [], \"e560\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faStarOfLife = {\n  prefix: 'fas',\n  iconName: 'star-of-life',\n  icon: [512, 512, [], \"f621\", \"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4L208 32z\"]\n};\nconst faPhoneSlash = {\n  prefix: 'fas',\n  iconName: 'phone-slash',\n  icon: [640, 512, [], \"f3dd\", \"M228.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C76.1 30.2 64 46 64 64c0 107.4 37.8 206 100.8 283.1L9.2 469.1c-10.4 8.2-12.3 23.3-4.1 33.7s23.3 12.3 33.7 4.1l592-464c10.4-8.2 12.3-23.3 4.1-33.7s-23.3-12.3-33.7-4.1L253 278c-17.8-21.5-32.9-45.2-45-70.7L257.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96zm96.8 319l-91.3 72C310.7 476 407.1 512 512 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L368.7 368c-15-7.1-29.3-15.2-43-24.3z\"]\n};\nconst faPaintRoller = {\n  prefix: 'fas',\n  iconName: 'paint-roller',\n  icon: [512, 512, [], \"f5aa\", \"M0 64C0 28.7 28.7 0 64 0L352 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 192c-35.3 0-64-28.7-64-64L0 64zM160 352c0-17.7 14.3-32 32-32l0-16c0-44.2 35.8-80 80-80l144 0c17.7 0 32-14.3 32-32l0-32 0-90.5c37.3 13.2 64 48.7 64 90.5l0 32c0 53-43 96-96 96l-144 0c-8.8 0-16 7.2-16 16l0 16c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-128z\"]\n};\nconst faHandshakeAngle = {\n  prefix: 'fas',\n  iconName: 'handshake-angle',\n  icon: [640, 512, [\"hands-helping\"], \"f4c4\", \"M544 248l0 3.3 69.7-69.7c21.9-21.9 21.9-57.3 0-79.2L535.6 24.4c-21.9-21.9-57.3-21.9-79.2 0L416.3 64.5c-2.7-.3-5.5-.5-8.3-.5L296 64c-37.1 0-67.6 28-71.6 64l-.4 0 0 120c0 22.1 17.9 40 40 40s40-17.9 40-40l0-72c0 0 0-.1 0-.1l0-15.9 16 0 136 0c0 0 0 0 .1 0l7.9 0c44.2 0 80 35.8 80 80l0 8zM336 192l0 56c0 39.8-32.2 72-72 72s-72-32.2-72-72l0-118.6c-35.9 6.2-65.8 32.3-76 68.2L99.5 255.2 26.3 328.4c-21.9 21.9-21.9 57.3 0 79.2l78.1 78.1c21.9 21.9 57.3 21.9 79.2 0l37.7-37.7c.9 0 1.8 .1 2.7 .1l160 0c26.5 0 48-21.5 48-48c0-5.6-1-11-2.7-16l2.7 0c26.5 0 48-21.5 48-48c0-12.8-5-24.4-13.2-33c25.7-5 45.1-27.6 45.2-54.8l0-.4c-.1-30.8-25.1-55.8-56-55.8c0 0 0 0 0 0l-120 0z\"]\n};\nconst faHandsHelping = faHandshakeAngle;\nconst faLocationDot = {\n  prefix: 'fas',\n  iconName: 'location-dot',\n  icon: [384, 512, [\"map-marker-alt\"], \"f3c5\", \"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faMapMarkerAlt = faLocationDot;\nconst faFile = {\n  prefix: 'fas',\n  iconName: 'file',\n  icon: [384, 512, [128196, 128459, 61462], \"f15b\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128z\"]\n};\nconst faGreaterThan = {\n  prefix: 'fas',\n  iconName: 'greater-than',\n  icon: [384, 512, [62769], \"3e\", \"M3.4 81.7c-7.9 15.8-1.5 35 14.3 42.9L280.5 256 17.7 387.4C1.9 395.3-4.5 414.5 3.4 430.3s27.1 22.2 42.9 14.3l320-160c10.8-5.4 17.7-16.5 17.7-28.6s-6.8-23.2-17.7-28.6l-320-160c-15.8-7.9-35-1.5-42.9 14.3z\"]\n};\nconst faPersonSwimming = {\n  prefix: 'fas',\n  iconName: 'person-swimming',\n  icon: [576, 512, [127946, \"swimmer\"], \"f5c4\", \"M309.5 178.4L447.9 297.1c-1.6 .9-3.2 2-4.8 3c-18 12.4-40.1 20.3-59.2 20.3c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-10.1 0-21.1-2.2-31.9-6.2C163.1 193.2 262.2 96 384 96l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-26.9 0-52.3 6.6-74.5 18.4zM160 160A64 64 0 1 1 32 160a64 64 0 1 1 128 0zM306.5 325.9C329 341.4 356.5 352 384 352c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 405.7 417 416 384 416c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 341.2 165.1 352 192 352c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faSwimmer = faPersonSwimming;\nconst faArrowDown = {\n  prefix: 'fas',\n  iconName: 'arrow-down',\n  icon: [384, 512, [8595], \"f063\", \"M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"]\n};\nconst faDroplet = {\n  prefix: 'fas',\n  iconName: 'droplet',\n  icon: [384, 512, [128167, \"tint\"], \"f043\", \"M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0l1.8 0c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z\"]\n};\nconst faTint = faDroplet;\nconst faEraser = {\n  prefix: 'fas',\n  iconName: 'eraser',\n  icon: [576, 512, [], \"f12d\", \"M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7L288 480l9.4 0L512 480c17.7 0 32-14.3 32-32s-14.3-32-32-32l-124.1 0L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416l-9.4 0-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z\"]\n};\nconst faEarthAmericas = {\n  prefix: 'fas',\n  iconName: 'earth-americas',\n  icon: [512, 512, [127758, \"earth\", \"earth-america\", \"globe-americas\"], \"f57d\", \"M57.7 193l9.4 16.4c8.3 14.5 21.9 25.2 38 29.8L163 255.7c17.2 4.9 29 20.6 29 38.5l0 39.9c0 11 6.2 21 16 25.9s16 14.9 16 25.9l0 39c0 15.6 14.9 26.9 29.9 22.6c16.1-4.6 28.6-17.5 32.7-33.8l2.8-11.2c4.2-16.9 15.2-31.4 30.3-40l8.1-4.6c15-8.5 24.2-24.5 24.2-41.7l0-8.3c0-12.7-5.1-24.9-14.1-33.9l-3.9-3.9c-9-9-21.2-14.1-33.9-14.1L257 256c-11.1 0-22.1-2.9-31.8-8.4l-34.5-19.7c-4.3-2.5-7.6-6.5-9.2-11.2c-3.2-9.6 1.1-20 10.2-24.5l5.9-3c6.6-3.3 14.3-3.9 21.3-1.5l23.2 7.7c8.2 2.7 17.2-.4 21.9-7.5c4.7-7 4.2-16.3-1.2-22.8l-13.6-16.3c-10-12-9.9-29.5 .3-41.3l15.7-18.3c8.8-10.3 10.2-25 3.5-36.7l-2.4-4.2c-3.5-.2-6.9-.3-10.4-.3C163.1 48 84.4 108.9 57.7 193zM464 256c0-36.8-9.6-71.4-26.4-101.5L412 164.8c-15.7 6.3-23.8 23.8-18.5 39.8l16.9 50.7c3.5 10.4 12 18.3 22.6 20.9l29.1 7.3c1.2-9 1.8-18.2 1.8-27.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faEarth = faEarthAmericas;\nconst faEarthAmerica = faEarthAmericas;\nconst faGlobeAmericas = faEarthAmericas;\nconst faPersonBurst = {\n  prefix: 'fas',\n  iconName: 'person-burst',\n  icon: [640, 512, [], \"e53b\", \"M480 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-223.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L408 256.9 408 480c0 17.7 14.3 32 32 32s32-14.3 32-32zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.3-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"]\n};\nconst faDove = {\n  prefix: 'fas',\n  iconName: 'dove',\n  icon: [512, 512, [128330], \"f4ba\", \"M160.8 96.5c14 17 31 30.9 49.5 42.2c25.9 15.8 53.7 25.9 77.7 31.6l0-31.5C265.8 108.5 250 71.5 248.6 28c-.4-11.3-7.5-21.5-18.4-24.4c-7.6-2-15.8-.2-21 5.8c-13.3 15.4-32.7 44.6-48.4 87.2zM320 144l0 30.6s0 0 0 0l0 1.3s0 0 0 0l0 32.1c-60.8-5.1-185-43.8-219.3-157.2C97.4 40 87.9 32 76.6 32c-7.9 0-15.3 3.9-18.8 11C46.8 65.9 32 112.1 32 176c0 116.9 80.1 180.5 118.4 202.8L11.8 416.6C6.7 418 2.6 421.8 .9 426.8s-.8 10.6 2.3 14.8C21.7 466.2 77.3 512 160 512c3.6 0 7.2-1.2 10-3.5L245.6 448l74.4 0c88.4 0 160-71.6 160-160l0-160 29.9-44.9c1.3-2 2.1-4.4 2.1-6.8c0-6.8-5.5-12.3-12.3-12.3L400 64c-44.2 0-80 35.8-80 80zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faBatteryEmpty = {\n  prefix: 'fas',\n  iconName: 'battery-empty',\n  icon: [576, 512, [\"battery-0\"], \"f244\", \"M80 160c-8.8 0-16 7.2-16 16l0 160c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-160c0-8.8-7.2-16-16-16L80 160zM0 176c0-44.2 35.8-80 80-80l384 0c44.2 0 80 35.8 80 80l0 16c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l0 16c0 44.2-35.8 80-80 80L80 416c-44.2 0-80-35.8-80-80L0 176z\"]\n};\nconst faBattery0 = faBatteryEmpty;\nconst faSocks = {\n  prefix: 'fas',\n  iconName: 'socks',\n  icon: [512, 512, [129510], \"f696\", \"M175.2 476.6c-9.7-18-15.2-38.7-15.2-60.6c0-40.3 19-78.2 51.2-102.4l64-48c8.1-6 12.8-15.5 12.8-25.6l0-144L128 96l0 144c0 20.1-9.5 39.1-25.6 51.2l-64 48C14.2 357.3 0 385.8 0 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l21.6-16.2zM128 64l160 0 0-16c0-14.5 3.9-28.2 10.7-39.9C291 3 281.9 0 272 0L176 0c-26.5 0-48 21.5-48 48l0 16zM320 96l0 144c0 20.1-9.5 39.1-25.6 51.2l-64 48C206.2 357.3 192 385.8 192 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l115.2-86.4C493 382.2 512 344.3 512 304l0-208L320 96zM512 64l0-16c0-26.5-21.5-48-48-48L368 0c-26.5 0-48 21.5-48 48l0 16 192 0z\"]\n};\nconst faInbox = {\n  prefix: 'fas',\n  iconName: 'inbox',\n  icon: [512, 512, [], \"f01c\", \"M121 32C91.6 32 66 52 58.9 80.5L1.9 308.4C.6 313.5 0 318.7 0 323.9L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-92.1c0-5.2-.6-10.4-1.9-15.5l-57-227.9C446 52 420.4 32 391 32L121 32zm0 64l270 0 48 192-51.2 0c-12.1 0-23.2 6.8-28.6 17.7l-14.3 28.6c-5.4 10.8-16.5 17.7-28.6 17.7l-120.4 0c-12.1 0-23.2-6.8-28.6-17.7l-14.3-28.6c-5.4-10.8-16.5-17.7-28.6-17.7L73 288 121 96z\"]\n};\nconst faSection = {\n  prefix: 'fas',\n  iconName: 'section',\n  icon: [256, 512, [], \"e447\", \"M64.9 96C67.1 84.4 73.7 76.2 86 70.6c13.8-6.2 34.8-8.9 61.2-4.5c8.8 1.4 36.1 7.1 44.1 9.3c17 4.8 34.7-5.1 39.5-22.2s-5.1-34.7-22.2-39.5c-11.1-3.1-41-9.2-50.9-10.8C123-2.7 88.3-.6 59.7 12.3C29.9 25.8 7.5 50.9 1.6 86.5c-.1 .5-.2 1.1-.2 1.6c-2.2 19.7 .3 37.9 8.1 54.1c7.7 16.1 19.4 28 32 36.9c.6 .5 1.3 .9 2 1.4C22.3 194.2 6.5 215.1 1.7 243c-.1 .6-.2 1.1-.2 1.7c-2.3 19.3 .4 37.1 8.4 53c7.9 15.6 19.8 27 32.3 35.5c22.4 15.2 51.9 24 75.4 31c0 0 0 0 0 0l3.7 1.1c27.2 8.2 46.9 14.6 59.4 23.8c5.5 4 8.2 7.6 9.5 10.9c1.3 3.2 2.6 8.6 .9 18.1c-1.7 10.1-7.7 18-20.7 23.5c-14 6-35.4 8.5-62 4.4c-12.8-2.1-35.1-9.7-54.1-16.2c0 0 0 0 0 0c-4.3-1.5-8.5-2.9-12.3-4.2C25.3 420 7.2 429.1 1.6 445.8s3.5 34.9 20.3 40.5c2.6 .8 5.7 1.9 9.2 3.1c18.6 6.3 48.5 16.6 67.3 19.6c0 0 0 0 0 0l.2 0c34.5 5.4 68.8 3.4 97.2-8.7c29.4-12.6 52.5-36.5 58.5-71.5c3.3-19.3 1.9-37.4-5-53.9c-6.3-15-16.4-26.4-27.6-35.2c16.5-13.9 28.5-33.2 32.6-58.2c3.2-19.8 1.9-38.3-4.8-55.1c-6.7-16.8-17.8-29.4-30.2-39c-22.8-17.6-53.6-27.4-77.7-35l-1.4-.5c-27.4-8.7-47.8-15.3-61.5-25c-6.1-4.4-9.5-8.5-11.4-12.4c-1.8-3.7-3.2-9.3-2.3-18.5zm76.7 208.5l-.6-.2-1.4-.4c-27.4-8.2-47.9-14.5-61.7-23.8c-6.2-4.2-9.3-7.9-11-11.3c-1.5-3-2.9-7.7-2.1-15.7c1.9-9.7 7.9-17.3 20.5-22.7c14-6 35.4-8.5 62.1-4.3l16.4 2.6c6.3 2.9 11.7 6 16.2 9.5c5.5 4.2 8.4 8.2 10 12.2c1.6 4 2.8 10.4 1.1 20.9c-2.4 14.7-12.8 26.4-37.1 31l-12.4 2.3z\"]\n};\nconst faGaugeHigh = {\n  prefix: 'fas',\n  iconName: 'gauge-high',\n  icon: [512, 512, [62461, \"tachometer-alt\", \"tachometer-alt-fast\"], \"f625\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faTachometerAlt = faGaugeHigh;\nconst faTachometerAltFast = faGaugeHigh;\nconst faEnvelopeOpenText = {\n  prefix: 'fas',\n  iconName: 'envelope-open-text',\n  icon: [512, 512, [], \"f658\", \"M215.4 96L144 96l-36.2 0L96 96l0 8.8L96 144l0 40.4 0 89L.2 202.5c1.6-18.1 10.9-34.9 25.7-45.8L48 140.3 48 96c0-26.5 21.5-48 48-48l76.6 0 49.9-36.9C232.2 3.9 243.9 0 256 0s23.8 3.9 33.5 11L339.4 48 416 48c26.5 0 48 21.5 48 48l0 44.3 22.1 16.4c14.8 10.9 24.1 27.7 25.7 45.8L416 273.4l0-89 0-40.4 0-39.2 0-8.8-11.8 0L368 96l-71.4 0-81.3 0zM0 448L0 242.1 217.6 403.3c11.1 8.2 24.6 12.7 38.4 12.7s27.3-4.4 38.4-12.7L512 242.1 512 448s0 0 0 0c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64c0 0 0 0 0 0zM176 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faHospital = {\n  prefix: 'fas',\n  iconName: 'hospital',\n  icon: [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M192 48c0-26.5 21.5-48 48-48L400 0c26.5 0 48 21.5 48 48l0 464-80 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-80 0 0-464zM48 96l112 0 0 416L48 512c-26.5 0-48-21.5-48-48L0 320l80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L0 288l0-64 80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L0 192l0-48c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 144c0 26.5-21.5 48-48 48l-112 0 0-416 112 0zM312 64c-8.8 0-16 7.2-16 16l0 24-24 0c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l24 0 0 24c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-24 24 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-24 0 0-24c0-8.8-7.2-16-16-16l-16 0z\"]\n};\nconst faHospitalAlt = faHospital;\nconst faHospitalWide = faHospital;\nconst faWineBottle = {\n  prefix: 'fas',\n  iconName: 'wine-bottle',\n  icon: [512, 512, [], \"f72f\", \"M393.4 9.4c12.5-12.5 32.8-12.5 45.3 0l64 64c12.5 12.5 12.5 32.8 0 45.3c-11.8 11.8-30.7 12.5-43.2 1.9l-9.5 9.5-48.8 48.8c-9.2 9.2-11.5 22.9-8.6 35.6c9.4 40.9-1.9 85.6-33.8 117.5L197.3 493.3c-25 25-65.5 25-90.5 0l-88-88c-25-25-25-65.5 0-90.5L180.2 153.3c31.9-31.9 76.6-43.1 117.5-33.8c12.6 2.9 26.4 .5 35.5-8.6l48.8-48.8 9.5-9.5c-10.6-12.6-10-31.4 1.9-43.2zM99.3 347.3l65.4 65.4c6.2 6.2 16.4 6.2 22.6 0l97.4-97.4c6.2-6.2 6.2-16.4 0-22.6l-65.4-65.4c-6.2-6.2-16.4-6.2-22.6 0L99.3 324.7c-6.2 6.2-6.2 16.4 0 22.6z\"]\n};\nconst faChessRook = {\n  prefix: 'fas',\n  iconName: 'chess-rook',\n  icon: [448, 512, [9820], \"f447\", \"M32 192L32 48c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 40c0 4.4 3.6 8 8 8l32 0c4.4 0 8-3.6 8-8l0-40c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 40c0 4.4 3.6 8 8 8l32 0c4.4 0 8-3.6 8-8l0-40c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 144c0 10.1-4.7 19.6-12.8 25.6L352 256l16 144L80 400 96 256 44.8 217.6C36.7 211.6 32 202.1 32 192zm176 96l32 0c8.8 0 16-7.2 16-16l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 8.8 7.2 16 16 16zM22.6 473.4L64 432l320 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L38.6 512C26.1 512 16 501.9 16 489.4c0-6 2.4-11.8 6.6-16z\"]\n};\nconst faBarsStaggered = {\n  prefix: 'fas',\n  iconName: 'bars-staggered',\n  icon: [512, 512, [\"reorder\", \"stream\"], \"f550\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM64 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faReorder = faBarsStaggered;\nconst faStream = faBarsStaggered;\nconst faDharmachakra = {\n  prefix: 'fas',\n  iconName: 'dharmachakra',\n  icon: [512, 512, [9784], \"f655\", \"M337.8 205.7l48.6-42.5c13.8 19.3 23.4 41.9 27.4 66.2l-64.4 4.3c-2.4-10.1-6.4-19.5-11.6-28zm140.1 19.5c-5.3-38.8-20.6-74.5-43.2-104.3l.8-.7C449 108.4 449.7 87.6 437 75s-33.4-12-45.2 1.5l-.7 .8c-29.8-22.6-65.5-37.9-104.3-43.2l.1-1.1c1.2-17.9-13-33-30.9-33s-32.1 15.2-30.9 33l.1 1.1c-38.8 5.3-74.5 20.6-104.3 43.2l-.7-.8C108.4 63 87.6 62.3 75 75s-12 33.4 1.5 45.2l.8 .7c-22.6 29.8-37.9 65.5-43.2 104.3l-1.1-.1c-17.9-1.2-33 13-33 30.9s15.2 32.1 33 30.9l1.1-.1c5.3 38.8 20.6 74.5 43.2 104.3l-.8 .7C63 403.6 62.3 424.4 75 437s33.4 12 45.2-1.5l.7-.8c29.8 22.6 65.5 37.9 104.3 43.2l-.1 1.1c-1.2 17.9 13 33 30.9 33s32.1-15.2 30.9-33l-.1-1.1c38.8-5.3 74.5-20.6 104.3-43.2l.7 .8c11.8 13.5 32.5 14.2 45.2 1.5s12-33.4-1.5-45.2l-.8-.7c22.6-29.8 37.9-65.5 43.2-104.3l1.1 .1c17.9 1.2 33-13 33-30.9s-15.2-32.1-33-30.9l-1.1 .1zM163.2 125.6c19.3-13.8 41.9-23.4 66.2-27.5l4.3 64.4c-10 2.4-19.5 6.4-28 11.6l-42.5-48.6zm-65 103.8c4.1-24.4 13.7-46.9 27.5-66.2l48.6 42.5c-5.3 8.5-9.2 18-11.6 28l-64.4-4.3zm27.5 119.4c-13.8-19.3-23.4-41.9-27.5-66.2l64.4-4.3c2.4 10 6.4 19.5 11.6 28l-48.6 42.5zm103.8 65c-24.4-4.1-46.9-13.7-66.2-27.4l42.5-48.6c8.5 5.3 18 9.2 28 11.6l-4.3 64.4zm119.4-27.4c-19.3 13.8-41.9 23.4-66.2 27.4l-4.3-64.4c10-2.4 19.5-6.4 28-11.6l42.5 48.6zm65-103.8c-4.1 24.4-13.7 46.9-27.4 66.2l-48.6-42.5c5.3-8.5 9.2-18 11.6-28l64.4 4.3zm-65-156.9l-42.5 48.6c-8.5-5.3-18-9.2-28-11.6l4.3-64.4c24.4 4.1 46.9 13.7 66.2 27.5zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faHotdog = {\n  prefix: 'fas',\n  iconName: 'hotdog',\n  icon: [512, 512, [127789], \"f80f\", \"M488.6 23.4c31.2 31.2 31.2 81.9 0 113.1l-352 352c-31.2 31.2-81.9 31.2-113.1 0s-31.2-81.9 0-113.1l352-352c31.2-31.2 81.9-31.2 113.1 0zM443.3 92.7c-6.2-6.2-16.4-6.2-22.6 0c-12.5 12.5-23.8 15.1-37.5 17.6l-2.5 .4c-13.8 2.5-31.6 5.6-48 22c-16.7 16.7-20.9 36-24.1 50.9c0 0 0 0 0 0s0 0 0 0l-.2 1c-3.4 15.6-6 26.4-15.7 36.1s-20.5 12.3-36.1 15.7l-1 .2c-14.9 3.2-34.2 7.4-50.9 24.1s-20.9 36-24.1 50.9l-.2 1c-3.4 15.6-6 26.4-15.7 36.1c-9.2 9.2-18 10.8-32.7 13.4c0 0 0 0 0 0l-.9 .2c-15.6 2.8-34.9 6.9-54.4 26.4c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0c12.5-12.5 23.8-15.1 37.5-17.6l2.5-.4c13.8-2.5 31.6-5.6 48-22c16.7-16.7 20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1s20.5-12.3 36.1-15.7l1-.2c14.9-3.2 34.2-7.4 50.9-24.1s20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1c9.2-9.2 18-10.8 32.7-13.4l.9-.2c15.6-2.8 34.9-6.9 54.4-26.4c6.2-6.2 6.2-16.4 0-22.6zM191.2 479.2l288-288L495 207c10.9 10.9 17 25.6 17 41s-6.1 30.1-17 41L289 495c-10.9 10.9-25.6 17-41 17s-30.1-6.1-41-17l-15.8-15.8zM17 305C6.1 294.1 0 279.4 0 264s6.1-30.1 17-41L223 17C233.9 6.1 248.6 0 264 0s30.1 6.1 41 17l15.8 15.8-288 288L17 305z\"]\n};\nconst faPersonWalkingWithCane = {\n  prefix: 'fas',\n  iconName: 'person-walking-with-cane',\n  icon: [512, 512, [\"blind\"], \"f29d\", \"M176 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8.4 32c-36.4 0-69.6 20.5-85.9 53.1L35.4 273.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L128 231.6l0 43.2c0 17 6.7 33.3 18.7 45.3L224 397.3l0 82.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-89.4c0-12.7-5.1-24.9-14.1-33.9L224 306.7l0-93.4 70.4 93.9c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8L268.8 166.4C250.7 142.2 222.2 128 192 128l-24.4 0zM128.3 346.8L97 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l22-88.2-52.8-52.8zM450.8 505.1c5 7.3 15 9.1 22.3 4s9.1-15 4-22.3L358.9 316.1c-2.8 3.8-6.1 7.3-10.1 10.3c-5 3.8-10.5 6.4-16.2 7.9L450.8 505.1z\"]\n};\nconst faBlind = faPersonWalkingWithCane;\nconst faDrum = {\n  prefix: 'fas',\n  iconName: 'drum',\n  icon: [512, 512, [129345], \"f569\", \"M501.2 76.1c11.1-7.3 14.2-22.1 6.9-33.2s-22.1-14.2-33.2-6.9L370.2 104.5C335.8 98.7 297 96 256 96C114.6 96 0 128 0 208L0 368c0 31.3 27.4 58.8 72 78.7L72 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 119.4c33 8.9 71.1 14.5 112 16.1L232 376c0-13.3 10.7-24 24-24s24 10.7 24 24l0 103.5c40.9-1.6 79-7.2 112-16.1L392 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 102.7c44.6-19.9 72-47.4 72-78.7l0-160c0-41.1-30.2-69.5-78.8-87.4l67.9-44.5zM307.4 145.6l-64.6 42.3c-11.1 7.3-14.2 22.1-6.9 33.2s22.1 14.2 33.2 6.9l111.1-72.8c14.7 3.2 27.9 7 39.4 11.5C458.4 181.8 464 197.4 464 208c0 .8-2.7 17.2-46 35.9C379.1 260.7 322 272 256 272s-123.1-11.3-162-28.1C50.7 225.2 48 208.8 48 208c0-10.6 5.6-26.2 44.4-41.3C130.6 151.9 187.8 144 256 144c18 0 35.1 .5 51.4 1.6z\"]\n};\nconst faIceCream = {\n  prefix: 'fas',\n  iconName: 'ice-cream',\n  icon: [448, 512, [127848], \"f810\", \"M367.1 160c.6-5.3 .9-10.6 .9-16C368 64.5 303.5 0 224 0S80 64.5 80 144c0 5.4 .3 10.7 .9 16l-.9 0c-26.5 0-48 21.5-48 48s21.5 48 48 48l53.5 0 181 0 53.5 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-.9 0zM96 288L200.8 497.7c4.4 8.8 13.3 14.3 23.2 14.3s18.8-5.5 23.2-14.3L352 288 96 288z\"]\n};\nconst faHeartCircleBolt = {\n  prefix: 'fas',\n  iconName: 'heart-circle-bolt',\n  icon: [576, 512, [], \"e4fc\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"]\n};\nconst faFax = {\n  prefix: 'fas',\n  iconName: 'fax',\n  icon: [512, 512, [128224, 128439], \"f1ac\", \"M128 64l0 96 64 0 0-96 194.7 0L416 93.3l0 66.7 64 0 0-66.7c0-17-6.7-33.3-18.7-45.3L432 18.7C420 6.7 403.7 0 386.7 0L192 0c-35.3 0-64 28.7-64 64zM0 160L0 480c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32zm480 32l-352 0 0 288c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32zM256 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faParagraph = {\n  prefix: 'fas',\n  iconName: 'paragraph',\n  icon: [448, 512, [182], \"f1dd\", \"M192 32l64 0 160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352-32 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-32 0c-88.4 0-160-71.6-160-160s71.6-160 160-160z\"]\n};\nconst faCheckToSlot = {\n  prefix: 'fas',\n  iconName: 'check-to-slot',\n  icon: [576, 512, [\"vote-yea\"], \"f772\", \"M96 80c0-26.5 21.5-48 48-48l288 0c26.5 0 48 21.5 48 48l0 304L96 384 96 80zm313 47c-9.4-9.4-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L409 161c9.4-9.4 9.4-24.6 0-33.9zM0 336c0-26.5 21.5-48 48-48l16 0 0 128 448 0 0-128 16 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nconst faVoteYea = faCheckToSlot;\nconst faStarHalf = {\n  prefix: 'fas',\n  iconName: 'star-half',\n  icon: [576, 512, [61731], \"f089\", \"M288 0c-12.2 .1-23.3 7-28.6 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3L288 439.8 288 0zM429.9 512c1.1 .1 2.1 .1 3.2 0l-3.2 0z\"]\n};\nconst faBoxesStacked = {\n  prefix: 'fas',\n  iconName: 'boxes-stacked',\n  icon: [576, 512, [62625, \"boxes\", \"boxes-alt\"], \"f468\", \"M248 0L208 0c-26.5 0-48 21.5-48 48l0 112c0 35.3 28.7 64 64 64l128 0c35.3 0 64-28.7 64-64l0-112c0-26.5-21.5-48-48-48L328 0l0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80zM64 256c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-40 0 0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80-40 0zM352 512l160 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-40 0 0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80-40 0c-15 0-28.8 5.1-39.7 13.8c4.9 10.4 7.7 22 7.7 34.2l0 160c0 12.2-2.8 23.8-7.7 34.2C323.2 506.9 337 512 352 512z\"]\n};\nconst faBoxes = faBoxesStacked;\nconst faBoxesAlt = faBoxesStacked;\nconst faLink = {\n  prefix: 'fas',\n  iconName: 'link',\n  icon: [640, 512, [128279, \"chain\"], \"f0c1\", \"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z\"]\n};\nconst faChain = faLink;\nconst faEarListen = {\n  prefix: 'fas',\n  iconName: 'ear-listen',\n  icon: [512, 512, [\"assistive-listening-systems\"], \"f2a2\", \"M398.3 3.4c-15.8-7.9-35-1.5-42.9 14.3c-7.9 15.8-1.5 34.9 14.2 42.9l.4 .2c.4 .2 1.1 .6 2.1 1.2c2 1.2 5 3 8.7 5.6c7.5 5.2 17.6 13.2 27.7 24.2C428.5 113.4 448 146 448 192c0 17.7 14.3 32 32 32s32-14.3 32-32c0-66-28.5-113.4-56.5-143.7C441.6 33.2 427.7 22.2 417.3 15c-5.3-3.7-9.7-6.4-13-8.3c-1.6-1-3-1.7-4-2.2c-.5-.3-.9-.5-1.2-.7l-.4-.2-.2-.1c0 0 0 0-.1 0c0 0 0 0 0 0L384 32 398.3 3.4zM128.7 227.5c6.2-56 53.7-99.5 111.3-99.5c61.9 0 112 50.1 112 112c0 29.3-11.2 55.9-29.6 75.9c-17 18.4-34.4 45.1-34.4 78l0 6.1c0 26.5-21.5 48-48 48c-17.7 0-32 14.3-32 32s14.3 32 32 32c61.9 0 112-50.1 112-112l0-6.1c0-9.8 5.4-21.7 17.4-34.7C398.3 327.9 416 286 416 240c0-97.2-78.8-176-176-176C149.4 64 74.8 132.5 65.1 220.5c-1.9 17.6 10.7 33.4 28.3 35.3s33.4-10.7 35.3-28.3zM32 512a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM192 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0zM208 240c0-17.7 14.3-32 32-32s32 14.3 32 32c0 13.3 10.7 24 24 24s24-10.7 24-24c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 13.3 10.7 24 24 24s24-10.7 24-24z\"]\n};\nconst faAssistiveListeningSystems = faEarListen;\nconst faTreeCity = {\n  prefix: 'fas',\n  iconName: 'tree-city',\n  icon: [640, 512, [], \"e587\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 144 40 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 24 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48l-160 0-96 0c-26.5 0-48-21.5-48-48l0-416zm64 32l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 272l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM224 160c0 6-1 11-2 16c20 14 34 38 34 64c0 45-36 80-80 80l-16 0 0 160c0 18-15 32-32 32c-18 0-32-14-32-32l0-160-16 0c-45 0-80-35-80-80c0-26 13-50 33-64c-1-5-1-10-1-16c0-53 42-96 96-96c53 0 96 43 96 96z\"]\n};\nconst faPlay = {\n  prefix: 'fas',\n  iconName: 'play',\n  icon: [384, 512, [9654], \"f04b\", \"M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80L0 432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z\"]\n};\nconst faFont = {\n  prefix: 'fas',\n  iconName: 'font',\n  icon: [448, 512, [], \"f031\", \"M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416 32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-1.8 0 18-48 159.6 0 18 48-1.8 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-25.8 0L254 52.8zM279.8 304l-111.6 0L224 155.1 279.8 304z\"]\n};\nconst faTableCellsRowLock = {\n  prefix: 'fas',\n  iconName: 'table-cells-row-lock',\n  icon: [640, 512, [], \"e67a\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 224l0 64 88 0 0-64-88 0zm232 0l-88 0 0 64 88 0 0-64zM152 352l-88 0 0 64 88 0 0-64zm56 0l0 64 88 0 0-64-88 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faRupiahSign = {\n  prefix: 'fas',\n  iconName: 'rupiah-sign',\n  icon: [512, 512, [], \"e23d\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160zm256-96l80 0c61.9 0 112 50.1 112 112s-50.1 112-112 112l-48 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128 0-160c0-17.7 14.3-32 32-32zm80 160c26.5 0 48-21.5 48-48s-21.5-48-48-48l-48 0 0 96 48 0z\"]\n};\nconst faMagnifyingGlass = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass',\n  icon: [512, 512, [128269, \"search\"], \"f002\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\"]\n};\nconst faSearch = faMagnifyingGlass;\nconst faTableTennisPaddleBall = {\n  prefix: 'fas',\n  iconName: 'table-tennis-paddle-ball',\n  icon: [512, 512, [127955, \"ping-pong-paddle-ball\", \"table-tennis\"], \"f45d\", \"M416 288c-50.1 0-93.6 28.8-114.6 70.8L68.9 126.3l.6-.6 60.1-60.1c87.5-87.5 229.3-87.5 316.8 0c67.1 67.1 82.7 166.3 46.8 248.3C471.8 297.6 445 288 416 288zM49.3 151.9L290.1 392.7c-1.4 7.5-2.1 15.3-2.1 23.3c0 23.2 6.2 44.9 16.9 63.7c-3 .2-6.1 .3-9.2 .3l-2.7 0c-33.9 0-66.5-13.5-90.5-37.5l-9.8-9.8c-13.1-13.1-34.6-12.4-46.8 1.7L88.2 501c-5.8 6.7-14.2 10.7-23 11s-17.5-3.1-23.8-9.4l-32-32C3.1 464.3-.3 455.7 0 446.9s4.3-17.2 11-23l66.6-57.7c14-12.2 14.8-33.7 1.7-46.8l-9.8-9.8C45.5 285.5 32 252.9 32 219l0-2.7c0-22.8 6.1-44.9 17.3-64.3zM416 320a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faPingPongPaddleBall = faTableTennisPaddleBall;\nconst faTableTennis = faTableTennisPaddleBall;\nconst faPersonDotsFromLine = {\n  prefix: 'fas',\n  iconName: 'person-dots-from-line',\n  icon: [576, 512, [\"diagnoses\"], \"f470\", \"M288 176A88 88 0 1 0 288 0a88 88 0 1 0 0 176zM78.7 372.9c15-12.5 50-34.4 97.3-50.1L176 432l224 0 0-109.3c47.3 15.8 82.3 37.7 97.3 50.1c20.4 17 50.6 14.2 67.6-6.1s14.2-50.6-6.1-67.6c-12-10-30.1-22.5-53.2-35C497.2 278.4 481.7 288 464 288c-26.5 0-48-21.5-48-48c0-4.3 .6-8.4 1.6-12.4C379.1 215.9 335.3 208 288 208c-60.2 0-114.9 12.9-160 29.9c0 .7 0 1.4 0 2.1c0 26.5-21.5 48-48 48c-11.8 0-22.7-4.3-31-11.4c-13.1 8.1-23.7 15.9-31.7 22.5c-20.4 17-23.1 47.2-6.1 67.6s47.2 23.1 67.6 6.1zM24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l528 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 464zM224 280a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM96 240a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm368 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faDiagnoses = faPersonDotsFromLine;\nconst faTrashCanArrowUp = {\n  prefix: 'fas',\n  iconName: 'trash-can-arrow-up',\n  icon: [448, 512, [\"trash-restore-alt\"], \"f82a\", \"M163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128l384 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L200 408c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"]\n};\nconst faTrashRestoreAlt = faTrashCanArrowUp;\nconst faNairaSign = {\n  prefix: 'fas',\n  iconName: 'naira-sign',\n  icon: [448, 512, [], \"e1f6\", \"M122.6 46.3c-7.8-11.7-22.4-17-35.9-12.9S64 49.9 64 64l0 192-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 100.2 0 97.2 145.8c7.8 11.7 22.4 17 35.9 12.9s22.7-16.5 22.7-30.6l0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192-57.5 0L122.6 46.3zM305.1 320l14.9 0 0 22.3L305.1 320zM185.5 256L128 256l0-86.3L185.5 256z\"]\n};\nconst faCartArrowDown = {\n  prefix: 'fas',\n  iconName: 'cart-arrow-down',\n  icon: [576, 512, [], \"f218\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l45.5 0c3.8 0 7.1 2.7 7.9 6.5l51.6 271c6.5 34 36.2 58.5 70.7 58.5L488 384c13.3 0 24-10.7 24-24s-10.7-24-24-24l-288.3 0c-11.5 0-21.4-8.2-23.6-19.5L170.7 288l288.5 0c32.6 0 61.1-21.8 69.5-53.3l41-152.3C576.6 57 557.4 32 531.1 32L360 32l0 102.1 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-64 64c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23L312 32 120.1 32C111 12.8 91.6 0 69.5 0L24 0zM176 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm336-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faWalkieTalkie = {\n  prefix: 'fas',\n  iconName: 'walkie-talkie',\n  icon: [384, 512, [], \"f8ef\", \"M112 24c0-13.3-10.7-24-24-24S64 10.7 64 24l0 72L48 96C21.5 96 0 117.5 0 144L0 300.1c0 12.7 5.1 24.9 14.1 33.9l3.9 3.9c9 9 14.1 21.2 14.1 33.9L32 464c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-92.1c0-12.7 5.1-24.9 14.1-33.9l3.9-3.9c9-9 14.1-21.2 14.1-33.9L384 144c0-26.5-21.5-48-48-48l-16 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l-32 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l-48 0 0-72zm0 136l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faFilePen = {\n  prefix: 'fas',\n  iconName: 'file-pen',\n  icon: [576, 512, [128221, \"file-edit\"], \"f31c\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"]\n};\nconst faFileEdit = faFilePen;\nconst faReceipt = {\n  prefix: 'fas',\n  iconName: 'receipt',\n  icon: [384, 512, [129534], \"f543\", \"M14 2.2C22.5-1.7 32.5-.3 39.6 5.8L80 40.4 120.4 5.8c9-7.7 22.3-7.7 31.2 0L192 40.4 232.4 5.8c9-7.7 22.3-7.7 31.2 0L304 40.4 344.4 5.8c7.1-6.1 17.1-7.5 25.6-3.6s14 12.4 14 21.8l0 464c0 9.4-5.5 17.9-14 21.8s-18.5 2.5-25.6-3.6L304 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L192 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L80 471.6 39.6 506.2c-7.1 6.1-17.1 7.5-25.6 3.6S0 497.4 0 488L0 24C0 14.6 5.5 6.1 14 2.2zM96 144c-8.8 0-16 7.2-16 16s7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 144zM80 352c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 336c-8.8 0-16 7.2-16 16zM96 240c-8.8 0-16 7.2-16 16s7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 240z\"]\n};\nconst faSquarePen = {\n  prefix: 'fas',\n  iconName: 'square-pen',\n  icon: [448, 512, [\"pen-square\", \"pencil-square\"], \"f14b\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM325.8 139.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-21.4 21.4-71-71 21.4-21.4c15.6-15.6 40.9-15.6 56.6 0zM119.9 289L225.1 183.8l71 71L190.9 359.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"]\n};\nconst faPenSquare = faSquarePen;\nconst faPencilSquare = faSquarePen;\nconst faSuitcaseRolling = {\n  prefix: 'fas',\n  iconName: 'suitcase-rolling',\n  icon: [384, 512, [], \"f5c1\", \"M144 56c0-4.4 3.6-8 8-8l80 0c4.4 0 8 3.6 8 8l0 72-96 0 0-72zm176 72l-32 0 0-72c0-30.9-25.1-56-56-56L152 0C121.1 0 96 25.1 96 56l0 72-32 0c-35.3 0-64 28.7-64 64L0 416c0 35.3 28.7 64 64 64c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64zM112 224l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 128l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faPersonCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'person-circle-exclamation',\n  icon: [576, 512, [], \"e53f\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faChevronDown = {\n  prefix: 'fas',\n  iconName: 'chevron-down',\n  icon: [512, 512, [], \"f078\", \"M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\"]\n};\nconst faBatteryFull = {\n  prefix: 'fas',\n  iconName: 'battery-full',\n  icon: [576, 512, [128267, \"battery\", \"battery-5\"], \"f240\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm368 96L96 192l0 128 352 0 0-128z\"]\n};\nconst faBattery = faBatteryFull;\nconst faBattery5 = faBatteryFull;\nconst faSkullCrossbones = {\n  prefix: 'fas',\n  iconName: 'skull-crossbones',\n  icon: [448, 512, [128369, 9760], \"f714\", \"M368 128c0 44.4-25.4 83.5-64 106.4l0 21.6c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-21.6c-38.6-23-64-62.1-64-106.4C80 57.3 144.5 0 224 0s144 57.3 144 128zM168 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM3.4 273.7c7.9-15.8 27.1-22.2 42.9-14.3L224 348.2l177.7-88.8c15.8-7.9 35-1.5 42.9 14.3s1.5 35-14.3 42.9L295.6 384l134.8 67.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L224 419.8 46.3 508.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9L152.4 384 17.7 316.6C1.9 308.7-4.5 289.5 3.4 273.7z\"]\n};\nconst faCodeCompare = {\n  prefix: 'fas',\n  iconName: 'code-compare',\n  icon: [512, 512, [], \"e13a\", \"M320 488c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1s14.2 12.4 14.2 21.9l0 40 16 0c35.3 0 64-28.7 64-64l0-166.7C371.7 141 352 112.8 352 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3L464 320c0 70.7-57.3 128-128 128l-16 0 0 40zM456 80a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 24c0-9.5 5.6-18.1 14.2-21.9s18.8-2.3 25.8 4.1l80 72c5.1 4.6 7.9 11 7.9 17.8s-2.9 13.3-7.9 17.8l-80 72c-7 6.3-17.2 7.9-25.8 4.1s-14.2-12.4-14.2-21.9l0-40-16 0c-35.3 0-64 28.7-64 64l0 166.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3L48 192c0-70.7 57.3-128 128-128l16 0 0-40zM56 432a24 24 0 1 0 48 0 24 24 0 1 0 -48 0z\"]\n};\nconst faListUl = {\n  prefix: 'fas',\n  iconName: 'list-ul',\n  icon: [512, 512, [\"list-dots\"], \"f0ca\", \"M64 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM64 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48-208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faListDots = faListUl;\nconst faSchoolLock = {\n  prefix: 'fas',\n  iconName: 'school-lock',\n  icon: [640, 512, [], \"e56f\", \"M302.2 5.4c10.7-7.2 24.8-7.2 35.5 0L473.7 96 592 96c26.5 0 48 21.5 48 48l0 128c0-61.9-50.1-112-112-112s-112 50.1-112 112l0 24.6c-19.1 11.1-32 31.7-32 55.4l-63.7 0-.3 0c-35.3 0-64 28.7-64 64l0 96 64 0s0 0 0 0L48 512c-26.5 0-48-21.5-48-48L0 144c0-26.5 21.5-48 48-48l118.3 0L302.2 5.4zM80 208l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm0 128l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm240-72a88 88 0 1 0 0-176 88 88 0 1 0 0 176zm16-120l0 16 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16s16 7.2 16 16zm192 96c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faTowerCell = {\n  prefix: 'fas',\n  iconName: 'tower-cell',\n  icon: [576, 512, [], \"e585\", \"M62.6 2.3C46.2-4.3 27.6 3.6 20.9 20C7.4 53.4 0 89.9 0 128s7.4 74.6 20.9 108c6.6 16.4 25.3 24.3 41.7 17.7S86.9 228.4 80.3 212C69.8 186.1 64 157.8 64 128s5.8-58.1 16.3-84C86.9 27.6 79 9 62.6 2.3zm450.8 0C497 9 489.1 27.6 495.7 44C506.2 69.9 512 98.2 512 128s-5.8 58.1-16.3 84c-6.6 16.4 1.3 35 17.7 41.7s35-1.3 41.7-17.7c13.5-33.4 20.9-69.9 20.9-108s-7.4-74.6-20.9-108C548.4 3.6 529.8-4.3 513.4 2.3zM340.1 165.2c7.5-10.5 11.9-23.3 11.9-37.2c0-35.3-28.7-64-64-64s-64 28.7-64 64c0 13.9 4.4 26.7 11.9 37.2L98.9 466.8c-7.3 16.1-.2 35.1 15.9 42.4s35.1 .2 42.4-15.9L177.7 448l220.6 0 20.6 45.2c7.3 16.1 26.3 23.2 42.4 15.9s23.2-26.3 15.9-42.4L340.1 165.2zM369.2 384l-162.4 0 14.5-32 133.3 0 14.5 32zM288 205.3L325.6 288l-75.2 0L288 205.3zM163.3 73.6c5.3-12.1-.2-26.3-12.4-31.6s-26.3 .2-31.6 12.4C109.5 77 104 101.9 104 128s5.5 51 15.3 73.6c5.3 12.1 19.5 17.7 31.6 12.4s17.7-19.5 12.4-31.6C156 165.8 152 147.4 152 128s4-37.8 11.3-54.4zM456.7 54.4c-5.3-12.1-19.5-17.7-31.6-12.4s-17.7 19.5-12.4 31.6C420 90.2 424 108.6 424 128s-4 37.8-11.3 54.4c-5.3 12.1 .2 26.3 12.4 31.6s26.3-.2 31.6-12.4C466.5 179 472 154.1 472 128s-5.5-51-15.3-73.6z\"]\n};\nconst faDownLong = {\n  prefix: 'fas',\n  iconName: 'down-long',\n  icon: [320, 512, [\"long-arrow-alt-down\"], \"f309\", \"M2 334.5c-3.8 8.8-2 19 4.6 26l136 144c4.5 4.8 10.8 7.5 17.4 7.5s12.9-2.7 17.4-7.5l136-144c6.6-7 8.4-17.2 4.6-26s-12.5-14.5-22-14.5l-72 0 0-288c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32l0 288-72 0c-9.6 0-18.2 5.7-22 14.5z\"]\n};\nconst faLongArrowAltDown = faDownLong;\nconst faRankingStar = {\n  prefix: 'fas',\n  iconName: 'ranking-star',\n  icon: [640, 512, [], \"e561\", \"M353.8 54.1L330.2 6.3c-3.9-8.3-16.1-8.6-20.4 0L286.2 54.1l-52.3 7.5c-9.3 1.4-13.3 12.9-6.4 19.8l38 37-9 52.1c-1.4 9.3 8.2 16.5 16.8 12.2l46.9-24.8 46.6 24.4c8.6 4.3 18.3-2.9 16.8-12.2l-9-52.1 38-36.6c6.8-6.8 2.9-18.3-6.4-19.8l-52.3-7.5zM256 256c-17.7 0-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-128 0zM32 320c-17.7 0-32 14.3-32 32L0 480c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L32 320zm416 96l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32z\"]\n};\nconst faChessKing = {\n  prefix: 'fas',\n  iconName: 'chess-king',\n  icon: [448, 512, [9818], \"f43f\", \"M224 0c17.7 0 32 14.3 32 32l0 16 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 48 152 0c22.1 0 40 17.9 40 40c0 5.3-1 10.5-3.1 15.4L368 400 80 400 3.1 215.4C1 210.5 0 205.3 0 200c0-22.1 17.9-40 40-40l152 0 0-48-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-16c0-17.7 14.3-32 32-32zM38.6 473.4L80 432l288 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L54.6 512C42.1 512 32 501.9 32 489.4c0-6 2.4-11.8 6.6-16z\"]\n};\nconst faPersonHarassing = {\n  prefix: 'fas',\n  iconName: 'person-harassing',\n  icon: [576, 512, [], \"e549\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM59.4 304.5L88 256.9 88 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-244.7 47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7l-35.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9zM480 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM464 344l0 58.7-41.4-41.4c-7.3-7.3-17.6-10.6-27.8-9s-18.9 8.1-23.5 17.3l-48 96c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L408.8 438l54.7 54.7c12.4 12.4 29.1 19.3 46.6 19.3c36.4 0 65.9-29.5 65.9-65.9L576 344c0-30.9-25.1-56-56-56s-56 25.1-56 56zM288 48c0 8.8 7.2 16 16 16l56 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-56 0c-8.8 0-16 7.2-16 16zm-.8 49.7c-7.9-4-17.5-.7-21.5 7.2s-.7 17.5 7.2 21.5l48 24c7.9 4 17.5 .7 21.5-7.2s.7-17.5-7.2-21.5l-48-24z\"]\n};\nconst faBrazilianRealSign = {\n  prefix: 'fas',\n  iconName: 'brazilian-real-sign',\n  icon: [512, 512, [], \"e46c\", \"M400 0c17.7 0 32 14.3 32 32l0 18.2c12.5 2.3 24.7 6.4 36.2 12.1l10.1 5.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-10.2-5.1c-9.9-5-20.9-7.5-32-7.5l-1.7 0c-29.8 0-53.9 24.1-53.9 53.9c0 22 13.4 41.8 33.9 50l52 20.8c44.7 17.9 74.1 61.2 74.1 109.4l0 3.4c0 51.2-33.6 94.6-80 109.2l0 21.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-19.4c-15-3.5-29.4-9.7-42.3-18.3l-23.4-15.6c-14.7-9.8-18.7-29.7-8.9-44.4s29.7-18.7 44.4-8.9L361.2 389c10.8 7.2 23.4 11 36.3 11c27.9 0 50.5-22.6 50.5-50.5l0-3.4c0-22-13.4-41.8-33.9-50l-52-20.8C317.3 257.4 288 214.1 288 165.9C288 114 321.5 70 368 54.2L368 32c0-17.7 14.3-32 32-32zM0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160z\"]\n};\nconst faLandmarkDome = {\n  prefix: 'fas',\n  iconName: 'landmark-dome',\n  icon: [512, 512, [\"landmark-alt\"], \"f752\", \"M248 0l16 0c13.3 0 24 10.7 24 24l0 10.7C368.4 48.1 431.9 111.6 445.3 192l2.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 256c-17.7 0-32-14.3-32-32s14.3-32 32-32l2.7 0C80.1 111.6 143.6 48.1 224 34.7L224 24c0-13.3 10.7-24 24-24zM64 288l64 0 0 128 40 0 0-128 64 0 0 128 48 0 0-128 64 0 0 128 40 0 0-128 64 0 0 132.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 288z\"]\n};\nconst faLandmarkAlt = faLandmarkDome;\nconst faArrowUp = {\n  prefix: 'fas',\n  iconName: 'arrow-up',\n  icon: [384, 512, [8593], \"f062\", \"M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z\"]\n};\nconst faTv = {\n  prefix: 'fas',\n  iconName: 'tv',\n  icon: [640, 512, [63717, \"television\", \"tv-alt\"], \"f26c\", \"M64 64l0 288 512 0 0-288L64 64zM0 64C0 28.7 28.7 0 64 0L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 416c-35.3 0-64-28.7-64-64L0 64zM128 448l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faTelevision = faTv;\nconst faTvAlt = faTv;\nconst faShrimp = {\n  prefix: 'fas',\n  iconName: 'shrimp',\n  icon: [512, 512, [129424], \"e448\", \"M64 32C28.7 32 0 60.7 0 96s28.7 64 64 64l1 0c3.7 88.9 77 160 167 160l56 0 0-192-24 0L88.8 128 64 128c-17.7 0-32-14.3-32-32s14.3-32 32-32l400 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L64 32zM224 456c0 13.3 10.7 24 24 24l72 0 0-72.2-64.1-22.4c-12.5-4.4-26.2 2.2-30.6 14.7s2.2 26.2 14.7 30.6l4.5 1.6C233 433.9 224 443.9 224 456zm128 23.3c36.4-3.3 69.5-17.6 96.1-39.6l-86.5-34.6c-3 1.8-6.2 3.2-9.6 4.3l0 69.9zM472.6 415c24.6-30.3 39.4-68.9 39.4-111c0-12.3-1.3-24.3-3.7-35.9L382.8 355.1c.8 3.4 1.2 7 1.2 10.6c0 4.6-.7 9-1.9 13.1L472.6 415zM336 128l-16 0 0 192 18.3 0c9.9 0 19.1 3.2 26.6 8.5l133.5-92.4C471.8 172.6 409.1 128 336 128zM168 192a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faListCheck = {\n  prefix: 'fas',\n  iconName: 'list-check',\n  icon: [512, 512, [\"tasks\"], \"f0ae\", \"M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faTasks = faListCheck;\nconst faJugDetergent = {\n  prefix: 'fas',\n  iconName: 'jug-detergent',\n  icon: [384, 512, [], \"e519\", \"M96 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24l0 24 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 96C74.7 96 64 85.3 64 72s10.7-24 24-24l8 0 0-24zM0 256c0-70.7 57.3-128 128-128l128 0c70.7 0 128 57.3 128 128l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256zm256 0l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faCircleUser = {\n  prefix: 'fas',\n  iconName: 'circle-user',\n  icon: [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M399 384.2C376.9 345.8 335.4 320 288 320l-64 0c-47.4 0-88.9 25.8-111 64.2c35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z\"]\n};\nconst faUserCircle = faCircleUser;\nconst faUserShield = {\n  prefix: 'fas',\n  iconName: 'user-shield',\n  icon: [640, 512, [], \"f505\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c1.8 0 3.5-.2 5.3-.5c-76.3-55.1-99.8-141-103.1-200.2c-16.1-4.8-33.1-7.3-50.7-7.3l-91.4 0zm308.8-78.3l-120 48C358 277.4 352 286.2 352 296c0 63.3 25.9 168.8 134.8 214.2c5.9 2.5 12.6 2.5 18.5 0C614.1 464.8 640 359.3 640 296c0-9.8-6-18.6-15.1-22.3l-120-48c-5.7-2.3-12.1-2.3-17.8 0zM591.4 312c-3.9 50.7-27.2 116.7-95.4 149.7l0-187.8L591.4 312z\"]\n};\nconst faWind = {\n  prefix: 'fas',\n  iconName: 'wind',\n  icon: [512, 512, [], \"f72e\", \"M288 32c0 17.7 14.3 32 32 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c53 0 96-43 96-96s-43-96-96-96L320 0c-17.7 0-32 14.3-32 32zm64 352c0 17.7 14.3 32 32 32l32 0c53 0 96-43 96-96s-43-96-96-96L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32 14.3-32 32zM128 512l32 0c53 0 96-43 96-96s-43-96-96-96L32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nconst faCarBurst = {\n  prefix: 'fas',\n  iconName: 'car-burst',\n  icon: [640, 512, [\"car-crash\"], \"f5e1\", \"M176 8c-6.6 0-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6l35.3-32.5 9.5-35.4 10.4-38.6c8-29.9 30.5-52.1 57.9-60.9l41-59.2c11.3-16.3 26.4-28.9 43.5-37.2c-.4-.6-.8-1.2-1.3-1.8c-4.1-5.1-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74C188.4 12 182.6 8 176 8zM367.7 161.5l135.6 36.3c6.5 1.8 11.3 7.4 11.8 14.2l4.6 56.5-201.5-54 32.2-46.6c3.8-5.6 10.8-8.1 17.3-6.4zm-69.9-30l-47.9 69.3c-21.6 3-40.3 18.6-46.3 41l-10.4 38.6-16.6 61.8-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9 247.3 66.3-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9L595 388l10.4-38.6c6-22.4-2.5-45.2-19.6-58.7l-6.8-84c-2.7-33.7-26.4-62-59-70.8L384.2 99.7c-32.7-8.8-67.3 4-86.5 31.8zm-17 131a24 24 0 1 1 -12.4 46.4 24 24 0 1 1 12.4-46.4zm217.9 83.2A24 24 0 1 1 545 358.1a24 24 0 1 1 -46.4-12.4z\"]\n};\nconst faCarCrash = faCarBurst;\nconst faY = {\n  prefix: 'fas',\n  iconName: 'y',\n  icon: [384, 512, [121], \"59\", \"M58 45.4C47.8 31 27.8 27.7 13.4 38S-4.3 68.2 6 82.6L160 298.3 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-149.7L378 82.6c10.3-14.4 6.9-34.4-7.4-44.6S336.2 31 326 45.4L192 232.9 58 45.4z\"]\n};\nconst faPersonSnowboarding = {\n  prefix: 'fas',\n  iconName: 'person-snowboarding',\n  icon: [512, 512, [127938, \"snowboarding\"], \"f7ce\", \"M209.7 3.4c15.8-7.9 35-1.5 42.9 14.3l25 50 42.4 8.5c19.5 3.9 37.8 12.3 53.5 24.5l126.1 98.1c14 10.9 16.5 31 5.6 44.9s-31 16.5-44.9 5.6l-72.1-56.1-71.5 31.8 33.1 27.6c23.2 19.3 33.5 50 26.7 79.4l-17.4 75.2c-2.2 9.4-8.2 16.8-16.1 21l86.5 33.1c4.6 1.8 9.4 2.6 14.3 2.6l28.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-28.2 0c-10.8 0-21.4-2-31.5-5.8L60.1 371.3c-11.5-4.4-22-11.2-30.8-20L7 329c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.4 22.4c4 4 8.7 7.1 14 9.1l22.4 8.6c-.8-1.6-1.5-3.2-2.1-4.9c-5.6-16.8 3.5-34.9 20.2-40.5L192 264.9l0-53.2c0-24.2 13.7-46.4 35.4-57.2l45.2-22.6-7.5-1.5c-19.4-3.9-35.9-16.5-44.7-34.1l-25-50c-7.9-15.8-1.5-35 14.3-42.9zM139 350.1l159 60.9c-2.1-5.6-2.6-11.9-1.1-18.2l17.4-75.2c1.4-5.9-.7-12-5.3-15.9l-52.8-44 0 18.8c0 20.7-13.2 39-32.8 45.5L139 350.1zM432 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faSnowboarding = faPersonSnowboarding;\nconst faTruckFast = {\n  prefix: 'fas',\n  iconName: 'truck-fast',\n  icon: [640, 512, [\"shipping-fast\"], \"f48b\", \"M112 0C85.5 0 64 21.5 64 48l0 48L16 96c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 208 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 160l-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l16 0 176 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 224l-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 288l0 128c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L112 0zM544 237.3l0 18.7-128 0 0-96 50.7 0L544 237.3zM160 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm272 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nconst faShippingFast = faTruckFast;\nconst faFish = {\n  prefix: 'fas',\n  iconName: 'fish',\n  icon: [576, 512, [128031], \"f578\", \"M180.5 141.5C219.7 108.5 272.6 80 336 80s116.3 28.5 155.5 61.5c39.1 33 66.9 72.4 81 99.8c4.7 9.2 4.7 20.1 0 29.3c-14.1 27.4-41.9 66.8-81 99.8C452.3 403.5 399.4 432 336 432s-116.3-28.5-155.5-61.5c-16.2-13.7-30.5-28.5-42.7-43.1L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9S-3 348.7 4.2 336.1L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l89.7 52.3c12.2-14.6 26.5-29.4 42.7-43.1zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faUserGraduate = {\n  prefix: 'fas',\n  iconName: 'user-graduate',\n  icon: [448, 512, [], \"f501\", \"M219.3 .5c3.1-.6 6.3-.6 9.4 0l200 40C439.9 42.7 448 52.6 448 64s-8.1 21.3-19.3 23.5L352 102.9l0 57.1c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-57.1L48 93.3l0 65.1 15.7 78.4c.9 4.7-.3 9.6-3.3 13.3s-7.6 5.9-12.4 5.9l-32 0c-4.8 0-9.3-2.1-12.4-5.9s-4.3-8.6-3.3-13.3L16 158.4l0-71.8C6.5 83.3 0 74.3 0 64C0 52.6 8.1 42.7 19.3 40.5l200-40zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7L30.7 512C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6z\"]\n};\nconst faCircleHalfStroke = {\n  prefix: 'fas',\n  iconName: 'circle-half-stroke',\n  icon: [512, 512, [9680, \"adjust\"], \"f042\", \"M448 256c0-106-86-192-192-192l0 384c106 0 192-86 192-192zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faAdjust = faCircleHalfStroke;\nconst faClapperboard = {\n  prefix: 'fas',\n  iconName: 'clapperboard',\n  icon: [512, 512, [], \"e131\", \"M448 32l-86.1 0-1 1-127 127 92.1 0 1-1L453.8 32.3c-1.9-.2-3.8-.3-5.8-.3zm64 128l0-64c0-15.1-5.3-29.1-14-40l-104 104L512 160zM294.1 32l-92.1 0-1 1L73.9 160l92.1 0 1-1 127-127zM64 32C28.7 32 0 60.7 0 96l0 64 6.1 0 1-1 127-127L64 32zM512 192L0 192 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-224z\"]\n};\nconst faCircleRadiation = {\n  prefix: 'fas',\n  iconName: 'circle-radiation',\n  icon: [512, 512, [9762, \"radiation-alt\"], \"f7ba\", \"M256 64a192 192 0 1 1 0 384 192 192 0 1 1 0-384zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM200 256c0-20.7 11.3-38.8 28-48.5l-36-62.3c-8.8-15.3-28.7-20.8-42-9c-25.6 22.6-43.9 53.3-50.9 88.1C95.7 241.5 110.3 256 128 256l72 0zm28 48.5l-36 62.4c-8.8 15.3-3.6 35.2 13.1 40.8c16 5.4 33.1 8.3 50.9 8.3s34.9-2.9 50.9-8.3c16.7-5.6 21.9-25.5 13.1-40.8l-36-62.4c-8.2 4.8-17.8 7.5-28 7.5s-19.8-2.7-28-7.5zM312 256l72 0c17.7 0 32.3-14.5 28.8-31.8c-7-34.8-25.3-65.5-50.9-88.1c-13.2-11.7-33.1-6.3-42 9l-36 62.3c16.7 9.7 28 27.8 28 48.5zm-56 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faRadiationAlt = faCircleRadiation;\nconst faBaseball = {\n  prefix: 'fas',\n  iconName: 'baseball',\n  icon: [512, 512, [129358, 9918, \"baseball-ball\"], \"f433\", \"M62.7 223.4c-4.8 .4-9.7 .6-14.7 .6c-15.6 0-30.8-2-45.2-5.9C19.2 107.1 107.1 19.2 218.1 2.8C222 17.2 224 32.4 224 48c0 4.9-.2 9.8-.6 14.7c-.7 8.8 5.8 16.5 14.6 17.3s16.5-5.8 17.3-14.6c.5-5.7 .7-11.5 .7-17.3c0-16.5-1.9-32.6-5.6-47.9c1.8 0 3.7-.1 5.6-.1C397.4 0 512 114.6 512 256c0 1.9 0 3.7-.1 5.6c-15.4-3.6-31.4-5.6-47.9-5.6c-5.8 0-11.6 .2-17.3 .7c-8.8 .7-15.4 8.5-14.6 17.3s8.5 15.4 17.3 14.6c4.8-.4 9.7-.6 14.7-.6c15.6 0 30.8 2 45.2 5.9C492.8 404.9 404.9 492.8 293.9 509.2C290 494.8 288 479.6 288 464c0-4.9 .2-9.8 .6-14.7c.7-8.8-5.8-16.5-14.6-17.3s-16.5 5.8-17.3 14.6c-.5 5.7-.7 11.5-.7 17.3c0 16.5 1.9 32.6 5.6 47.9c-1.8 0-3.7 .1-5.6 .1C114.6 512 0 397.4 0 256c0-1.9 0-3.7 .1-5.6C15.4 254.1 31.5 256 48 256c5.8 0 11.6-.2 17.3-.7c8.8-.7 15.4-8.5 14.6-17.3s-8.5-15.4-17.3-14.6zM121.3 208c-8 3.7-11.6 13.2-7.9 21.2s13.2 11.6 21.2 7.9c45.2-20.8 81.7-57.2 102.5-102.5c3.7-8 .2-17.5-7.9-21.2s-17.5-.2-21.2 7.9c-17.6 38.3-48.5 69.2-86.7 86.7zm277.2 74.7c-3.7-8-13.2-11.6-21.2-7.9c-45.2 20.8-81.7 57.2-102.5 102.5c-3.7 8-.2 17.5 7.9 21.2s17.5 .2 21.2-7.9c17.6-38.3 48.5-69.2 86.7-86.7c8-3.7 11.6-13.2 7.9-21.2z\"]\n};\nconst faBaseballBall = faBaseball;\nconst faJetFighterUp = {\n  prefix: 'fas',\n  iconName: 'jet-fighter-up',\n  icon: [512, 512, [], \"e518\", \"M270.7 9.7C268.2 3.8 262.4 0 256 0s-12.2 3.8-14.7 9.7L197.2 112.6c-3.4 8-5.2 16.5-5.2 25.2l0 77-144 84L48 280c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 56 0 32 0 24c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 144 0 0 32.7L133.5 468c-3.5 3-5.5 7.4-5.5 12l0 16c0 8.8 7.2 16 16 16l96 0 0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64 96 0c8.8 0 16-7.2 16-16l0-16c0-4.6-2-9-5.5-12L320 416.7l0-32.7 144 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-24 0-32 0-56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 18.8-144-84 0-77c0-8.7-1.8-17.2-5.2-25.2L270.7 9.7z\"]\n};\nconst faDiagramProject = {\n  prefix: 'fas',\n  iconName: 'diagram-project',\n  icon: [576, 512, [\"project-diagram\"], \"f542\", \"M0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 16 192 0 0-16c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-16-192 0 0 16c0 1.7-.1 3.4-.3 5L272 288l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-1.7 .1-3.4 .3-5L144 224l-96 0c-26.5 0-48-21.5-48-48L0 80z\"]\n};\nconst faProjectDiagram = faDiagramProject;\nconst faCopy = {\n  prefix: 'fas',\n  iconName: 'copy',\n  icon: [448, 512, [], \"f0c5\", \"M208 0L332.1 0c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9L448 336c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48zM48 128l80 0 0 64-64 0 0 256 192 0 0-32 64 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 176c0-26.5 21.5-48 48-48z\"]\n};\nconst faVolumeXmark = {\n  prefix: 'fas',\n  iconName: 'volume-xmark',\n  icon: [576, 512, [\"volume-mute\", \"volume-times\"], \"f6a9\", \"M301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM425 167l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nconst faVolumeMute = faVolumeXmark;\nconst faVolumeTimes = faVolumeXmark;\nconst faHandSparkles = {\n  prefix: 'fas',\n  iconName: 'hand-sparkles',\n  icon: [640, 512, [], \"e05d\", \"M320 0c17.7 0 32 14.3 32 32l0 208c0 8.8 7.2 16 16 16s16-7.2 16-16l0-176c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-112c0-17.7 14.3-32 32-32s32 14.3 32 32l0 195.1c-11.9 4.8-21.3 14.9-25 27.8l-8.9 31.2L478.9 391C460.6 396.3 448 413 448 432c0 18.9 12.5 35.6 30.6 40.9C448.4 497.4 409.9 512 368 512l-19.2 0c-59.6 0-116.9-22.9-160-64L76.4 341c-16-15.2-16.6-40.6-1.4-56.6s40.6-16.6 56.6-1.4l60.5 57.6c0-1.5-.1-3.1-.1-4.6l0-272c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-208c0-17.7 14.3-32 32-32zm-7.3 326.6c-1.1-3.9-4.7-6.6-8.7-6.6s-7.6 2.7-8.7 6.6L288 352l-25.4 7.3c-3.9 1.1-6.6 4.7-6.6 8.7s2.7 7.6 6.6 8.7L288 384l7.3 25.4c1.1 3.9 4.7 6.6 8.7 6.6s7.6-2.7 8.7-6.6L320 384l25.4-7.3c3.9-1.1 6.6-4.7 6.6-8.7s-2.7-7.6-6.6-8.7L320 352l-7.3-25.4zM104 120l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L104 168 90.2 216.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L56 168 7.7 154.2C3.1 152.9 0 148.7 0 144s3.1-8.9 7.7-10.2L56 120 69.8 71.7C71.1 67.1 75.3 64 80 64s8.9 3.1 10.2 7.7L104 120zM584 408l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L584 456l-13.8 48.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L536 456l-48.3-13.8c-4.6-1.3-7.7-5.5-7.7-10.2s3.1-8.9 7.7-10.2L536 408l13.8-48.3c1.3-4.6 5.5-7.7 10.2-7.7s8.9 3.1 10.2 7.7L584 408z\"]\n};\nconst faGrip = {\n  prefix: 'fas',\n  iconName: 'grip',\n  icon: [448, 512, [\"grip-horizontal\"], \"f58d\", \"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm32-192l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm32-192l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48z\"]\n};\nconst faGripHorizontal = faGrip;\nconst faShareFromSquare = {\n  prefix: 'fas',\n  iconName: 'share-from-square',\n  icon: [576, 512, [61509, \"share-square\"], \"f14d\", \"M352 224l-46.5 0c-45 0-81.5 36.5-81.5 81.5c0 22.3 10.3 34.3 19.2 40.5c6.8 4.7 12.8 12 12.8 20.3c0 9.8-8 17.8-17.8 17.8l-2.5 0c-2.4 0-4.8-.4-7.1-1.4C210.8 374.8 128 333.4 128 240c0-79.5 64.5-144 144-144l80 0 0-61.3C352 15.5 367.5 0 386.7 0c8.6 0 16.8 3.2 23.2 8.9L548.1 133.3c7.6 6.8 11.9 16.5 11.9 26.7s-4.3 19.9-11.9 26.7l-139 125.1c-5.9 5.3-13.5 8.2-21.4 8.2l-3.7 0c-17.7 0-32-14.3-32-32l0-64zM80 96c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 44.2-35.8 80-80 80L80 512c-44.2 0-80-35.8-80-80L0 112C0 67.8 35.8 32 80 32l48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 96z\"]\n};\nconst faShareSquare = faShareFromSquare;\nconst faChildCombatant = {\n  prefix: 'fas',\n  iconName: 'child-combatant',\n  icon: [576, 512, [\"child-rifle\"], \"e4e0\", \"M176 128A64 64 0 1 0 176 0a64 64 0 1 0 0 128zm-8 352l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-179.5L260.9 321c9.4 15 29.2 19.4 44.1 10s19.4-29.2 10-44.1l-51.7-82.1c-17.6-27.9-48.3-44.9-81.2-44.9l-12.3 0c-33 0-63.7 16.9-81.2 44.9L36.9 287c-9.4 15-4.9 34.7 10 44.1s34.7 4.9 44.1-10L104 300.5 104 480c0 17.7 14.3 32 32 32s32-14.3 32-32zM448 0L432 0 416 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l0 100.3c-9.6 5.5-16 15.9-16 27.7l0 32c-17.7 0-32 14.3-32 32l0 144c0 17.7 14.3 32 32 32l16 0 0 96c0 8.8 7.2 16 16 16l59.5 0c10.4 0 18-9.8 15.5-19.9L484 400l44 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-48 0 0-26.7 53.1-17.7c6.5-2.2 10.9-8.3 10.9-15.2l0-84.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 56-16 5.3L480 160c0-11.8-6.4-22.2-16-27.7L464 16c0-8.8-7.2-16-16-16z\"]\n};\nconst faChildRifle = faChildCombatant;\nconst faGun = {\n  prefix: 'fas',\n  iconName: 'gun',\n  icon: [576, 512, [], \"e19b\", \"M528 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8L32 64C14.3 64 0 78.3 0 96L0 208c0 17.7 14.3 32 32 32l10 0c20.8 0 36.1 19.6 31 39.8L33 440.2c-2.4 9.6-.2 19.7 5.8 27.5S54.1 480 64 480l96 0c14.7 0 27.5-10 31-24.2L217 352l104.5 0c23.7 0 44.8-14.9 52.7-37.2L400.9 240l31.1 0c8.5 0 16.6-3.4 22.6-9.4L477.3 208l66.7 0c17.7 0 32-14.3 32-32l0-80c0-17.7-14.3-32-32-32l-16 0 0-8zM321.4 304L229 304l16-64 105 0-21 58.7c-1.1 3.2-4.2 5.3-7.5 5.3zM80 128l384 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faSquarePhone = {\n  prefix: 'fas',\n  iconName: 'square-phone',\n  icon: [448, 512, [\"phone-square\"], \"f098\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm90.7 96.7c9.7-2.6 19.9 2.3 23.7 11.6l20 48c3.4 8.2 1 17.6-5.8 23.2L168 231.7c16.6 35.2 45.1 63.7 80.3 80.3l20.2-24.7c5.6-6.8 15-9.2 23.2-5.8l48 20c9.3 3.9 14.2 14 11.6 23.7l-12 44C336.9 378 329 384 320 384C196.3 384 96 283.7 96 160c0-9 6-16.9 14.7-19.3l44-12z\"]\n};\nconst faPhoneSquare = faSquarePhone;\nconst faPlus = {\n  prefix: 'fas',\n  iconName: 'plus',\n  icon: [448, 512, [10133, 61543, \"add\"], \"2b\", \"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z\"]\n};\nconst faAdd = faPlus;\nconst faExpand = {\n  prefix: 'fas',\n  iconName: 'expand',\n  icon: [448, 512, [], \"f065\", \"M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z\"]\n};\nconst faComputer = {\n  prefix: 'fas',\n  iconName: 'computer',\n  icon: [640, 512, [], \"e4e5\", \"M384 96l0 224L64 320 64 96l320 0zM64 32C28.7 32 0 60.7 0 96L0 320c0 35.3 28.7 64 64 64l117.3 0-10.7 32L96 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-74.7 0-10.7-32L384 384c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L64 32zm464 0c-26.5 0-48 21.5-48 48l0 352c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48l-64 0zm16 64l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-16 80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faXmark = {\n  prefix: 'fas',\n  iconName: 'xmark',\n  icon: [384, 512, [128473, 10005, 10006, 10060, 215, \"close\", \"multiply\", \"remove\", \"times\"], \"f00d\", \"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"]\n};\nconst faClose = faXmark;\nconst faMultiply = faXmark;\nconst faRemove = faXmark;\nconst faTimes = faXmark;\nconst faArrowsUpDownLeftRight = {\n  prefix: 'fas',\n  iconName: 'arrows-up-down-left-right',\n  icon: [512, 512, [\"arrows\"], \"f047\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4L224 224l-114.7 0 9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L224 288l0 114.7-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4L288 288l114.7 0-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L288 224l0-114.7 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\"]\n};\nconst faArrows = faArrowsUpDownLeftRight;\nconst faChalkboardUser = {\n  prefix: 'fas',\n  iconName: 'chalkboard-user',\n  icon: [640, 512, [\"chalkboard-teacher\"], \"f51c\", \"M160 64c0-35.3 28.7-64 64-64L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64l-239.2 0c-11.8-25.5-29.9-47.5-52.4-64l99.6 0 0-32c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 32 64 0 0-288L224 64l0 49.1C205.2 102.2 183.3 96 160 96l0-32zm0 64a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM133.3 352l53.3 0C260.3 352 320 411.7 320 485.3c0 14.7-11.9 26.7-26.7 26.7L26.7 512C11.9 512 0 500.1 0 485.3C0 411.7 59.7 352 133.3 352z\"]\n};\nconst faChalkboardTeacher = faChalkboardUser;\nconst faPesoSign = {\n  prefix: 'fas',\n  iconName: 'peso-sign',\n  icon: [384, 512, [], \"e222\", \"M64 32C46.3 32 32 46.3 32 64l0 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 64 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c68.4 0 127.7-39 156.8-96l19.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-.7 0c.5-5.3 .7-10.6 .7-16s-.2-10.7-.7-16l.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-19.2 0C303.7 71 244.4 32 176 32L64 32zm190.4 96L96 128l0-32 80 0c30.5 0 58.2 12.2 78.4 32zM96 192l190.9 0c.7 5.2 1.1 10.6 1.1 16s-.4 10.8-1.1 16L96 224l0-32zm158.4 96c-20.2 19.8-47.9 32-78.4 32l-80 0 0-32 158.4 0z\"]\n};\nconst faBuildingShield = {\n  prefix: 'fas',\n  iconName: 'building-shield',\n  icon: [576, 512, [], \"e4d8\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 159-42.4 17L304 224l-32 0c-8.8 0-16 7.2-16 16l0 32 0 24.2 0 7.8c0 .9 .1 1.7 .2 2.6c2.3 58.1 24.1 144.8 98.7 201.5c-5.8 2.5-12.2 3.9-18.9 3.9l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM423.1 225.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8l0 187.8c68.2-33 91.5-99 95.4-149.7z\"]\n};\nconst faBaby = {\n  prefix: 'fas',\n  iconName: 'baby',\n  icon: [448, 512, [], \"f77c\", \"M152 88a72 72 0 1 1 144 0A72 72 0 1 1 152 88zM39.7 144.5c13-17.9 38-21.8 55.9-8.8L131.8 162c26.8 19.5 59.1 30 92.2 30s65.4-10.5 92.2-30l36.2-26.4c17.9-13 42.9-9 55.9 8.8s9 42.9-8.8 55.9l-36.2 26.4c-13.6 9.9-28.1 18.2-43.3 25l0 36.3-192 0 0-36.3c-15.2-6.7-29.7-15.1-43.3-25L48.5 200.3c-17.9-13-21.8-38-8.8-55.9zm89.8 184.8l60.6 53-26 37.2 24.3 24.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-48-48C70 438.6 68.1 417 79.2 401.1l50.2-71.8zm128.5 53l60.6-53 50.2 71.8c11.1 15.9 9.2 37.5-4.5 51.2l-48 48c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6L284 419.4l-26-37.2z\"]\n};\nconst faUsersLine = {\n  prefix: 'fas',\n  iconName: 'users-line',\n  icon: [640, 512, [], \"e592\", \"M211.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM32 256c0 17.7 14.3 32 32 32l85.6 0c10.1-39.4 38.6-71.5 75.8-86.6c-9.7-6-21.2-9.4-33.4-9.4l-96 0c-35.3 0-64 28.7-64 64zm461.6 32l82.4 0c17.7 0 32-14.3 32-32c0-35.3-28.7-64-64-64l-96 0c-11.7 0-22.7 3.1-32.1 8.6c38.1 14.8 67.4 47.3 77.7 87.4zM391.2 226.4c-6.9-1.6-14.2-2.4-21.6-2.4l-96 0c-8.5 0-16.7 1.1-24.5 3.1c-30.8 8.1-55.6 31.1-66.1 60.9c-3.5 10-5.5 20.8-5.5 32c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32c0-11.2-1.9-22-5.5-32c-10.8-30.7-36.8-54.2-68.9-61.6zM563.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM321.6 192a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"]\n};\nconst faQuoteLeft = {\n  prefix: 'fas',\n  iconName: 'quote-left',\n  icon: [448, 512, [8220, \"quote-left-alt\"], \"f10d\", \"M0 216C0 149.7 53.7 96 120 96l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-32 0-32 0-72zm256 0c0-66.3 53.7-120 120-120l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-32 0-32 0-72z\"]\n};\nconst faQuoteLeftAlt = faQuoteLeft;\nconst faTractor = {\n  prefix: 'fas',\n  iconName: 'tractor',\n  icon: [640, 512, [128668], \"f722\", \"M96 64c0-35.3 28.7-64 64-64L266.3 0c26.2 0 49.7 15.9 59.4 40.2L373.7 160 480 160l0-33.8c0-24.8 5.8-49.3 16.9-71.6l2.5-5c7.9-15.8 27.1-22.2 42.9-14.3s22.2 27.1 14.3 42.9l-2.5 5c-6.7 13.3-10.1 28-10.1 42.9l0 33.8 56 0c22.1 0 40 17.9 40 40l0 45.4c0 16.5-8.5 31.9-22.6 40.7l-43.3 27.1c-14.2-5.9-29.8-9.2-46.1-9.2c-39.3 0-74.1 18.9-96 48l-80 0c0 17.7-14.3 32-32 32l-8.2 0c-1.7 4.8-3.7 9.5-5.8 14.1l5.8 5.8c12.5 12.5 12.5 32.8 0 45.3l-22.6 22.6c-12.5 12.5-32.8 12.5-45.3 0l-5.8-5.8c-4.6 2.2-9.3 4.1-14.1 5.8l0 8.2c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-8.2c-4.8-1.7-9.5-3.7-14.1-5.8l-5.8 5.8c-12.5 12.5-32.8 12.5-45.3 0L40.2 449.1c-12.5-12.5-12.5-32.8 0-45.3l5.8-5.8c-2.2-4.6-4.1-9.3-5.8-14.1L32 384c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l8.2 0c1.7-4.8 3.7-9.5 5.8-14.1l-5.8-5.8c-12.5-12.5-12.5-32.8 0-45.3l22.6-22.6c9-9 21.9-11.5 33.1-7.6l0-.6 0-32 0-96zm170.3 0L160 64l0 96 32 0 112.7 0L266.3 64zM176 256a80 80 0 1 0 0 160 80 80 0 1 0 0-160zM528 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0 64c-48.6 0-88-39.4-88-88c0-29.8 14.8-56.1 37.4-72c14.3-10.1 31.8-16 50.6-16c2.7 0 5.3 .1 7.9 .3c44.9 4 80.1 41.7 80.1 87.7c0 48.6-39.4 88-88 88z\"]\n};\nconst faTrashArrowUp = {\n  prefix: 'fas',\n  iconName: 'trash-arrow-up',\n  icon: [448, 512, [\"trash-restore\"], \"f829\", \"M163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128l384 0L394.8 467c-1.6 25.3-22.6 45-47.9 45l-245.8 0c-25.3 0-46.3-19.7-47.9-45L32 128zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L200 408c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"]\n};\nconst faTrashRestore = faTrashArrowUp;\nconst faArrowDownUpLock = {\n  prefix: 'fas',\n  iconName: 'arrow-down-up-lock',\n  icon: [640, 512, [], \"e4b0\", \"M150.6 502.6l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 160 288l256 0 0-16c0-17.2 3.9-33.5 10.8-48L352 224l0-114.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-6-6-14.1-9.4-22.6-9.4s-16.6 3.4-22.6 9.4l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 109.3 288 224l-128 0-64 0-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 114.7L54.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0zM160 192l0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128 64 0zM288 320l0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128-64 0zm240-80c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faLinesLeaning = {\n  prefix: 'fas',\n  iconName: 'lines-leaning',\n  icon: [384, 512, [], \"e51e\", \"M190.4 74.1c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2l-128 384c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l128-384zm70.9-41.7c-17.4-2.9-33.9 8.9-36.8 26.3l-64 384c-2.9 17.4 8.9 33.9 26.3 36.8s33.9-8.9 36.8-26.3l64-384c2.9-17.4-8.9-33.9-26.3-36.8zM352 32c-17.7 0-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32z\"]\n};\nconst faRulerCombined = {\n  prefix: 'fas',\n  iconName: 'ruler-combined',\n  icon: [512, 512, [], \"f546\", \"M.2 468.9C2.7 493.1 23.1 512 48 512l96 0 320 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-48c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 368l0 96c0 1.7 .1 3.3 .2 4.9z\"]\n};\nconst faCopyright = {\n  prefix: 'fas',\n  iconName: 'copyright',\n  icon: [512, 512, [169], \"f1f9\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c31.2 31.2 81.9 31.2 113.1 0c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-50 50-131 50-181 0s-50-131 0-181s131-50 181 0c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-31.2-31.2-81.9-31.2-113.1 0s-31.2 81.9 0 113.1z\"]\n};\nconst faEquals = {\n  prefix: 'fas',\n  iconName: 'equals',\n  icon: [448, 512, [62764], \"3d\", \"M48 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 128zm0 192c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 320z\"]\n};\nconst faBlender = {\n  prefix: 'fas',\n  iconName: 'blender',\n  icon: [512, 512, [], \"f517\", \"M0 64C0 28.7 28.7 0 64 0l64 0 32 0L470.1 0c21.1 0 36.4 20.1 30.9 40.4L494.5 64 336 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l149.8 0-17.5 64L336 160c-8.8 0-16 7.2-16 16s7.2 16 16 16l123.6 0-17.5 64L336 256c-8.8 0-16 7.2-16 16s7.2 16 16 16l97.5 0L416 352l-256 0-8.7-96L64 256c-35.3 0-64-28.7-64-64L0 64zM145.5 192L133.8 64 64 64l0 128 81.5 0zM144 384l288 0c26.5 0 48 21.5 48 48l0 32c0 26.5-21.5 48-48 48l-288 0c-26.5 0-48-21.5-48-48l0-32c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faTeeth = {\n  prefix: 'fas',\n  iconName: 'teeth',\n  icon: [576, 512, [], \"f62e\", \"M0 128C0 75 43 32 96 32l384 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96L96 480c-53 0-96-43-96-96L0 128zm176 48l0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56c0-26.5-21.5-48-48-48s-48 21.5-48 48zm176-48c-26.5 0-48 21.5-48 48l0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56c0-26.5-21.5-48-48-48zM48 208l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zM96 384c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48zm80-48c0 26.5 21.5 48 48 48s48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24zm176 48c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48zm80-176l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zm48 176c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48z\"]\n};\nconst faShekelSign = {\n  prefix: 'fas',\n  iconName: 'shekel-sign',\n  icon: [448, 512, [8362, \"ils\", \"shekel\", \"sheqel\", \"sheqel-sign\"], \"f20b\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 96l128 0c35.3 0 64 28.7 64 64l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-70.7-57.3-128-128-128L32 32zM320 480c70.7 0 128-57.3 128-128l0-288c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 288c0 35.3-28.7 64-64 64l-128 0 0-224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l160 0z\"]\n};\nconst faIls = faShekelSign;\nconst faShekel = faShekelSign;\nconst faSheqel = faShekelSign;\nconst faSheqelSign = faShekelSign;\nconst faMap = {\n  prefix: 'fas',\n  iconName: 'map',\n  icon: [576, 512, [128506, 62072], \"f279\", \"M384 476.1L192 421.2l0-385.3L384 90.8l0 385.3zm32-1.2l0-386.5L543.1 37.5c15.8-6.3 32.9 5.3 32.9 22.3l0 334.8c0 9.8-6 18.6-15.1 22.3L416 474.8zM15.1 95.1L160 37.2l0 386.5L32.9 474.5C17.1 480.8 0 469.2 0 452.2L0 117.4c0-9.8 6-18.6 15.1-22.3z\"]\n};\nconst faRocket = {\n  prefix: 'fas',\n  iconName: 'rocket',\n  icon: [512, 512, [], \"f135\", \"M156.6 384.9L125.7 354c-8.5-8.5-11.5-20.8-7.7-32.2c3-8.9 7-20.5 11.8-33.8L24 288c-8.6 0-16.6-4.6-20.9-12.1s-4.2-16.7 .2-24.1l52.5-88.5c13-21.9 36.5-35.3 61.9-35.3l82.3 0c2.4-4 4.8-7.7 7.2-11.3C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-3.5 2.4-7.3 4.8-11.3 7.2l0 82.3c0 25.4-13.4 49-35.3 61.9l-88.5 52.5c-7.4 4.4-16.6 4.5-24.1 .2s-12.1-12.2-12.1-20.9l0-107.2c-14.1 4.9-26.4 8.9-35.7 11.9c-11.2 3.6-23.4 .5-31.8-7.8zM384 168a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faPhotoFilm = {\n  prefix: 'fas',\n  iconName: 'photo-film',\n  icon: [640, 512, [\"photo-video\"], \"f87c\", \"M256 0L576 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64l0-224c0-35.3 28.7-64 64-64zM476 106.7C471.5 100 464 96 456 96s-15.5 4-20 10.7l-56 84L362.7 169c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l80 0 48 0 144 0c8.9 0 17-4.9 21.2-12.7s3.7-17.3-1.2-24.6l-96-144zM336 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM64 128l96 0 0 256 0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32 160 0 0 64c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64zm8 64c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm0 104c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm0 104c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm336 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faPhotoVideo = faPhotoFilm;\nconst faFolderMinus = {\n  prefix: 'fas',\n  iconName: 'folder-minus',\n  icon: [512, 512, [], \"f65d\", \"M448 480L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64zM184 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nconst faHexagonNodesBolt = {\n  prefix: 'fas',\n  iconName: 'hexagon-nodes-bolt',\n  icon: [576, 512, [], \"e69a\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56c30.7 0 55.6-24.7 56-55.2c-7.5-12.9-13.5-26.8-17.6-41.5c-4.2-4-9.1-7.3-14.4-9.9l0-98.8c2.8-1.3 5.5-2.9 8-4.7l10.5 6c5.5-15.3 13.1-29.5 22.4-42.5l-9.1-5.2c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8zM440.5 132C425 105.2 390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c.4 .3 .8 .6 1.3 .9c21.7-9.5 45.6-14.8 70.8-14.8c2 0 4 0 5.9 .1c12.1-17.3 13.8-40.6 2.6-60.1zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"]\n};\nconst faStore = {\n  prefix: 'fas',\n  iconName: 'store',\n  icon: [576, 512, [], \"f54e\", \"M547.6 103.8L490.3 13.1C485.2 5 476.1 0 466.4 0L109.6 0C99.9 0 90.8 5 85.7 13.1L28.3 103.8c-29.6 46.8-3.4 111.9 51.9 119.4c4 .5 8.1 .8 12.1 .8c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4zM499.7 254.9c0 0 0 0-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3L448 384l-320 0 0-133.4c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3L64 384l0 64c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-64 0-131.4c-4 1-8 1.8-12.3 2.3z\"]\n};\nconst faArrowTrendUp = {\n  prefix: 'fas',\n  iconName: 'arrow-trend-up',\n  icon: [576, 512, [], \"e098\", \"M384 160c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.7L342.6 374.6c-12.5 12.5-32.8 12.5-45.3 0L192 269.3 54.6 406.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160c12.5-12.5 32.8-12.5 45.3 0L320 306.7 466.7 160 384 160z\"]\n};\nconst faPlugCircleMinus = {\n  prefix: 'fas',\n  iconName: 'plug-circle-minus',\n  icon: [576, 512, [], \"e55e\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"]\n};\nconst faSignHanging = {\n  prefix: 'fas',\n  iconName: 'sign-hanging',\n  icon: [512, 512, [\"sign\"], \"f4d9\", \"M96 0c17.7 0 32 14.3 32 32l0 32 352 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-352 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352-32 0C14.3 128 0 113.7 0 96S14.3 64 32 64l32 0 0-32C64 14.3 78.3 0 96 0zm96 160l256 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32z\"]\n};\nconst faSign = faSignHanging;\nconst faBezierCurve = {\n  prefix: 'fas',\n  iconName: 'bezier-curve',\n  icon: [640, 512, [], \"f55b\", \"M296 136l0-48 48 0 0 48-48 0zM288 32c-26.5 0-48 21.5-48 48l0 4L121.6 84C111.2 62.7 89.3 48 64 48C28.7 48 0 76.7 0 112s28.7 64 64 64c25.3 0 47.2-14.7 57.6-36l66.9 0c-58.9 39.6-98.9 105-104 180L80 320c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-3.3 0c5.9-67 48.5-123.4 107.5-149.1c8.6 12.7 23.2 21.1 39.8 21.1l64 0c16.6 0 31.1-8.4 39.8-21.1c59 25.7 101.6 82.1 107.5 149.1l-3.3 0c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-4.5 0c-5-75-45.1-140.4-104-180l66.9 0c10.4 21.3 32.3 36 57.6 36c35.3 0 64-28.7 64-64s-28.7-64-64-64c-25.3 0-47.2 14.7-57.6 36L400 84l0-4c0-26.5-21.5-48-48-48l-64 0zM88 376l48 0 0 48-48 0 0-48zm416 48l0-48 48 0 0 48-48 0z\"]\n};\nconst faBellSlash = {\n  prefix: 'fas',\n  iconName: 'bell-slash',\n  icon: [640, 512, [128277, 61943], \"f1f6\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-90.2-70.7c.2-.4 .4-.9 .6-1.3c5.2-11.5 3.1-25-5.3-34.4l-7.4-8.3C497.3 319.2 480 273.9 480 226.8l0-18.8c0-77.4-55-142-128-156.8L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 19.2c-42.6 8.6-79 34.2-102 69.3L38.8 5.1zM406.2 416L160 222.1l0 4.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S115.4 416 128 416l278.2 0zm-40.9 77.3c12-12 18.7-28.3 18.7-45.3l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\"]\n};\nconst faTablet = {\n  prefix: 'fas',\n  iconName: 'tablet',\n  icon: [448, 512, [\"tablet-android\"], \"f3fb\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM176 432l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faTabletAndroid = faTablet;\nconst faSchoolFlag = {\n  prefix: 'fas',\n  iconName: 'school-flag',\n  icon: [576, 512, [], \"e56e\", \"M288 0L400 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-79.3 0 89.6 64L512 160c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-176 0 0-112c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 112L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64l101.7 0L256 95.5 256 32c0-17.7 14.3-32 32-32zm48 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM80 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0zm368 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM80 352c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0zm384 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0z\"]\n};\nconst faFill = {\n  prefix: 'fas',\n  iconName: 'fill',\n  icon: [512, 512, [], \"f575\", \"M86.6 9.4C74.1-3.1 53.9-3.1 41.4 9.4s-12.5 32.8 0 45.3L122.7 136 30.6 228.1c-37.5 37.5-37.5 98.3 0 135.8L148.1 481.4c37.5 37.5 98.3 37.5 135.8 0L474.3 290.9c28.1-28.1 28.1-73.7 0-101.8L322.9 37.7c-28.1-28.1-73.7-28.1-101.8 0L168 90.7 86.6 9.4zM168 181.3l49.4 49.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L213.3 136l53.1-53.1c3.1-3.1 8.2-3.1 11.3 0L429.1 234.3c3.1 3.1 3.1 8.2 0 11.3L386.7 288 67.5 288c1.4-5.4 4.2-10.4 8.4-14.6L168 181.3z\"]\n};\nconst faAngleUp = {\n  prefix: 'fas',\n  iconName: 'angle-up',\n  icon: [448, 512, [8963], \"f106\", \"M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z\"]\n};\nconst faDrumstickBite = {\n  prefix: 'fas',\n  iconName: 'drumstick-bite',\n  icon: [512, 512, [], \"f6d7\", \"M160 265.2c0 8.5-3.4 16.6-9.4 22.6l-26.8 26.8c-12.3 12.3-32.5 11.4-49.4 7.2C69.8 320.6 65 320 60 320c-33.1 0-60 26.9-60 60s26.9 60 60 60c6.3 0 12 5.7 12 12c0 33.1 26.9 60 60 60s60-26.9 60-60c0-5-.6-9.8-1.8-14.5c-4.2-16.9-5.2-37.1 7.2-49.4l26.8-26.8c6-6 14.1-9.4 22.6-9.4l89.2 0c6.3 0 12.4-.3 18.5-1c11.9-1.2 16.4-15.5 10.8-26c-8.5-15.8-13.3-33.8-13.3-53c0-61.9 50.1-112 112-112c8 0 15.7 .8 23.2 2.4c11.7 2.5 24.1-5.9 22-17.6C494.5 62.5 422.5 0 336 0C238.8 0 160 78.8 160 176l0 89.2z\"]\n};\nconst faHollyBerry = {\n  prefix: 'fas',\n  iconName: 'holly-berry',\n  icon: [512, 512, [], \"f7aa\", \"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM276.8 383.8c1 .1 2.1 .2 3.2 .2c39.8 0 72 32.2 72 72l0 22.7c0 16.4 16 27.9 31.6 22.8l12.8-4.3c18-6 37.3-6.5 55.6-1.5l19.4 5.3c17.9 4.9 34.4-11.6 29.5-29.5L495.6 452c-5-18.3-4.4-37.6 1.5-55.6l4.3-12.8c5.2-15.5-6.4-31.6-22.8-31.6c-34.6 0-62.7-28.1-62.7-62.7l0-32c0-16.4-16-27.9-31.6-22.8l-12.8 4.3c-18 6-37.3 6.5-55.6 1.5l-29.6-8.1c-2.9-.8-5.9-1-8.7-.7c4.2 9.7 5.8 20.8 3.7 32.3L275 298.7c-1.5 8.4-1.4 17 .5 25.3l5.3 23.9c2.8 12.7 1.1 25.2-4 35.9zM127.6 234.5c-15.5-5.2-31.6 6.4-31.6 22.8l0 32C96 323.9 67.9 352 33.3 352c-16.4 0-27.9 16-22.8 31.6l4.3 12.8c6 18 6.5 37.3 1.5 55.6l-5.3 19.4C6.2 489.4 22.6 505.8 40.5 501L60 495.6c18.3-5 37.6-4.5 55.6 1.5l12.8 4.3c15.5 5.2 31.6-6.4 31.6-22.8l0-32c0-34.6 28.1-62.7 62.7-62.7c16.4 0 27.9-16 22.8-31.6l-4.3-12.8c-6-18-6.5-37.3-1.5-55.6l5.3-19.4c4.9-17.9-11.6-34.4-29.5-29.5L196 240.4c-18.3 5-37.6 4.4-55.6-1.5l-12.8-4.3zM384 144a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faChevronLeft = {\n  prefix: 'fas',\n  iconName: 'chevron-left',\n  icon: [320, 512, [9001], \"f053\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\"]\n};\nconst faBacteria = {\n  prefix: 'fas',\n  iconName: 'bacteria',\n  icon: [640, 512, [], \"e059\", \"M304.9 .7c-9.6-2.7-19.5 2.8-22.3 12.4l-4.3 15.2c-8.3-.6-16.8 0-25.2 1.9c-7.3 1.7-14.3 3.5-21.1 5.5l-5.5-12.7c-3.9-9.1-14.5-13.4-23.6-9.5s-13.4 14.5-9.5 23.6l4.4 10.4c-16.6 6.7-31.7 14.4-45.4 22.8L147 62c-5.5-8.3-16.7-10.5-25-5s-10.5 16.7-5 25l6 9c-13.7 11-25.5 22.8-35.8 34.9l-10-8c-7.8-6.2-19.1-5-25.3 2.8s-5 19.1 2.8 25.3L65.9 155c-1.8 2.8-3.5 5.7-5.1 8.5c-6.6 11.4-11.8 22.6-16 33l-8-3.2c-9.2-3.7-19.7 .8-23.4 10s.8 19.7 10 23.4l10.4 4.2c-.2 .8-.4 1.5-.5 2.3c-2.2 9.3-3.4 17.3-4.1 23.4c-.4 3.1-.6 5.7-.8 7.8c-.1 1.1-.1 2-.2 2.8l-.1 1.1 0 .5 0 .2 0 .1c0 0 0 .1 29.1 1c0 0 0 0-.1 0L28 269.3c-.1 3.1 0 6.1 .2 9.1l-15.2 4.3C3.5 285.4-2 295.4 .7 304.9s12.7 15.1 22.3 12.4l15.6-4.5c7.6 13.6 18.9 25 32.6 32.6L66.7 361c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.3-12.4l4.3-15.2c1.2 .1 2.4 .2 3.6 .2c15.6 .5 30.3-3.3 43-10.2l9 9c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-7.2-7.2c9.3-12.6 15.2-27.8 16.3-44.5l7.1 3c9.1 3.9 19.7-.3 23.6-9.5s-.3-19.7-9.5-23.6l-8.6-3.7c6.4-9.9 17.3-22.4 36.9-33.3l1.3 4.4c2.7 9.6 12.7 15.1 22.3 12.4s15.1-12.7 12.4-22.3l-2.3-8.1c3.8-1.1 7.7-2.1 11.9-3.1c11.6-2.7 22.1-7.7 31.1-14.4l7.2 7.2c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-9-9c7.6-13.9 11.3-30.1 10.1-46.6l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3S370.6 64 361 66.7l-15.6 4.5c-7.7-13.9-19.1-25.1-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3zM112 272l-48-1.5c0 0 0 0 0 0c11.7 .4 27.3 .9 48 1.6zm16-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-48a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM322.7 489c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.2-12.4l4.3-15.2c8.3 .6 16.8 0 25.2-1.9c7.3-1.7 14.3-3.5 21.1-5.5l5.5 12.7c3.9 9.1 14.5 13.4 23.6 9.5s13.4-14.5 9.5-23.6l-4.4-10.4c16.6-6.7 31.7-14.4 45.4-22.8L493 450c5.5 8.3 16.7 10.5 25 5s10.5-16.7 5-25l-6-9c13.7-11 25.5-22.8 35.8-34.9l10 8c7.8 6.2 19.1 5 25.3-2.8s5-19.1-2.8-25.3L574.1 357c1.8-2.8 3.5-5.7 5.1-8.5c6.6-11.4 11.8-22.6 16-33l8 3.2c9.2 3.7 19.7-.8 23.4-10s-.8-19.7-10-23.4l-10.4-4.2c.2-.8 .4-1.5 .5-2.3c2.2-9.3 3.4-17.3 4.1-23.4c.4-3.1 .6-5.7 .8-7.8c.1-1.1 .1-2 .2-2.8l.1-1.1 0-.5 0-.2 0-.1c0 0 0-.1-29.1-1c0 0 0 0 .1 0l29.1 .9c.1-3.1 0-6.1-.2-9.1l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3s-12.7-15.1-22.3-12.4l-15.6 4.5c-7.6-13.6-18.9-25-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3s-19.5 2.8-22.3 12.4l-4.3 15.2c-1.2-.1-2.4-.2-3.6-.2c-15.6-.5-30.3 3.3-43 10.2l-9-9c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l7.2 7.2c-9.3 12.6-15.2 27.8-16.3 44.5l-7.1-3c-9.1-3.9-19.7 .3-23.6 9.5s.3 19.7 9.5 23.6l8.6 3.7c-6.4 9.9-17.3 22.4-36.9 33.3l-1.3-4.4c-2.7-9.6-12.7-15.1-22.3-12.4s-15.1 12.7-12.4 22.3l2.3 8.1c-3.8 1.1-7.7 2.1-11.9 3.1c-11.6 2.7-22.1 7.7-31.1 14.4l-7.2-7.2c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l9 9c-7.6 13.9-11.3 30.1-10.1 46.6l-15.2 4.3c-9.6 2.7-15.1 12.7-12.4 22.2s12.7 15.1 22.3 12.4l15.6-4.5c7.7 13.9 19.1 25.1 32.6 32.6L322.7 489zM576 241.5c0 0 0 0 0 0c-11.7-.4-27.3-.9-48-1.6l48 1.5zM448 384a32 32 0 1 1 -64 0 32 32 0 1 1 64 0z\"]\n};\nconst faHandLizard = {\n  prefix: 'fas',\n  iconName: 'hand-lizard',\n  icon: [512, 512, [], \"f258\", \"M0 112C0 85.5 21.5 64 48 64l112 0 80 0 46.5 0c36.8 0 71.2 18 92.1 48.2l113.5 164c13 18.7 19.9 41 19.9 63.8l0 12 0 16 0 48c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-13.8L273.9 352 240 352l-80 0-48 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l48 0 80 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-80 0L48 160c-26.5 0-48-21.5-48-48z\"]\n};\nconst faNotdef = {\n  prefix: 'fas',\n  iconName: 'notdef',\n  icon: [384, 512, [], \"e1fe\", \"M64 390.3L153.5 256 64 121.7l0 268.6zM102.5 448l179.1 0L192 313.7 102.5 448zm128-192L320 390.3l0-268.6L230.5 256zM281.5 64L102.5 64 192 198.3 281.5 64zM0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z\"]\n};\nconst faDisease = {\n  prefix: 'fas',\n  iconName: 'disease',\n  icon: [512, 512, [], \"f7fa\", \"M236.4 61.4L227 75.5c-21.3 32-59.4 48.5-97.3 42.1l-59.6-9.9C33.4 101.6 0 129.9 .1 167.1c0 15.9 6.4 31.2 17.6 42.5l29.2 29.2c11 11 17.2 25.9 17.2 41.5c0 15.8-6.4 30.9-17.7 42L33.3 335.1C22.2 345.9 16 360.7 16 376.2c0 36.8 34.1 64.2 70.1 56.2l62.3-13.8c7.7-1.7 15.7-2.6 23.6-2.6l10 0c27.2 0 53.7 9.3 75 26.3L287.8 467c10.5 8.4 23.6 13 37 13c32.7 0 59.3-26.5 59.3-59.3l0-25.2c0-34.9 21.4-66.2 53.9-78.8l36.9-14.3c22.4-8.7 37.2-30.3 37.2-54.3c0-28.1-20.1-52.3-47.8-57.3l-28-5.1c-36.5-6.7-65.4-34.5-73.6-70.7l-7.1-31.5C348.9 53.4 322.1 32 291.3 32c-22 0-42.6 11-54.9 29.4zM160 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm0 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBriefcaseMedical = {\n  prefix: 'fas',\n  iconName: 'briefcase-medical',\n  icon: [512, 512, [], \"f469\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zm96 152c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faGenderless = {\n  prefix: 'fas',\n  iconName: 'genderless',\n  icon: [384, 512, [], \"f22d\", \"M192 144a112 112 0 1 1 0 224 112 112 0 1 1 0-224zm0 288a176 176 0 1 0 0-352 176 176 0 1 0 0 352z\"]\n};\nconst faChevronRight = {\n  prefix: 'fas',\n  iconName: 'chevron-right',\n  icon: [320, 512, [9002], \"f054\", \"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"]\n};\nconst faRetweet = {\n  prefix: 'fas',\n  iconName: 'retweet',\n  icon: [576, 512, [], \"f079\", \"M272 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0c-17.7 0-32-14.3-32-32l0-128 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 128c0 53 43 96 96 96l112 0zM304 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0c17.7 0 32 14.3 32 32l0 128-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-128c0-53-43-96-96-96L304 96z\"]\n};\nconst faCarRear = {\n  prefix: 'fas',\n  iconName: 'car-rear',\n  icon: [512, 512, [\"car-alt\"], \"f5de\", \"M165.4 96l181.2 0c13.6 0 25.7 8.6 30.2 21.4L402.9 192l-293.8 0 26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zm-90.6 .3L39.6 196.8C16.4 206.4 0 229.3 0 256l0 80c0 23.7 12.9 44.4 32 55.4L32 448c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 256 0 0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-56.6c19.1-11.1 32-31.7 32-55.4l0-80c0-26.7-16.4-49.6-39.6-59.2L437.2 96.3C423.7 57.8 387.4 32 346.6 32L165.4 32c-40.8 0-77.1 25.8-90.6 64.3zM208 272l96 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM48 280c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24zm360-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faCarAlt = faCarRear;\nconst faPumpSoap = {\n  prefix: 'fas',\n  iconName: 'pump-soap',\n  icon: [448, 512, [], \"e06b\", \"M128 32l0 96 128 0 0-32 60.1 0c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4L256 32c0-17.7-14.3-32-32-32L160 0c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512l186.4 0c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7l-149.1 0zM256 360c0 35.3-28.7 56-64 56s-64-20.7-64-56c0-32.5 37-80.9 50.9-97.9c3.2-3.9 8.1-6.1 13.1-6.1s9.9 2.2 13.1 6.1C219 279.1 256 327.5 256 360z\"]\n};\nconst faVideoSlash = {\n  prefix: 'fas',\n  iconName: 'video-slash',\n  icon: [640, 512, [], \"f4e2\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.4-67.7 13.8 9.2c9.8 6.5 22.4 7.2 32.9 1.6s16.9-16.4 16.9-28.2l0-256c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.9 1.6l-96 64L448 174.9l0 17.1 0 128 0 5.8-32-25.1L416 128c0-35.3-28.7-64-64-64L113.9 64 38.8 5.1zM407 416.7L32.3 121.5c-.2 2.1-.3 4.3-.3 6.5l0 256c0 35.3 28.7 64 64 64l256 0c23.4 0 43.9-12.6 55-31.3z\"]\n};\nconst faBatteryQuarter = {\n  prefix: 'fas',\n  iconName: 'battery-quarter',\n  icon: [576, 512, [\"battery-2\"], \"f243\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm112 96l-96 0 0 128 96 0 0-128z\"]\n};\nconst faBattery2 = faBatteryQuarter;\nconst faRadio = {\n  prefix: 'fas',\n  iconName: 'radio',\n  icon: [512, 512, [128251], \"f8d7\", \"M494.8 47c12.7-3.7 20-17.1 16.3-29.8S494-2.8 481.2 1L51.7 126.9c-9.4 2.7-17.9 7.3-25.1 13.2C10.5 151.7 0 170.6 0 192l0 4L0 304 0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-229.5 0L494.8 47zM368 240a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM80 256c0-8.8 7.2-16 16-16l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16zM64 320c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 336c-8.8 0-16-7.2-16-16zm16 64c0-8.8 7.2-16 16-16l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faBabyCarriage = {\n  prefix: 'fas',\n  iconName: 'baby-carriage',\n  icon: [512, 512, [\"carriage-baby\"], \"f77d\", \"M256 192L.1 192C2.7 117.9 41.3 52.9 99 14.1c13.3-8.9 30.8-4.3 39.9 8.8L256 192zm128-32c0-35.3 28.7-64 64-64l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 64c0 25.2-5.8 50.2-17 73.5s-27.8 44.5-48.6 62.3s-45.5 32-72.7 41.6S253.4 416 224 416s-58.5-5-85.7-14.6s-51.9-23.8-72.7-41.6s-37.3-39-48.6-62.3S0 249.2 0 224l224 0 160 0 0-64zM80 416a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm240 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nconst faCarriageBaby = faBabyCarriage;\nconst faTrafficLight = {\n  prefix: 'fas',\n  iconName: 'traffic-light',\n  icon: [320, 512, [128678], \"f637\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 88.4 71.6 160 160 160s160-71.6 160-160l0-288c0-35.3-28.7-64-64-64L64 0zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z\"]\n};\nconst faThermometer = {\n  prefix: 'fas',\n  iconName: 'thermometer',\n  icon: [512, 512, [], \"f491\", \"M96 382.1l0-88.8c0-14.9 5.9-29.1 16.4-39.6l27.3-27.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 45.5-45.5C355.2 10.9 381.4 0 408.8 0C465.8 0 512 46.2 512 103.2c0 27.4-10.9 53.6-30.2 73L258.3 399.6c-10.5 10.5-24.7 16.4-39.6 16.4l-88.8 0L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l89-89z\"]\n};\nconst faVrCardboard = {\n  prefix: 'fas',\n  iconName: 'vr-cardboard',\n  icon: [640, 512, [], \"f729\", \"M576 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l120.4 0c24.2 0 46.4-13.7 57.2-35.4l32-64c8.8-17.5 26.7-28.6 46.3-28.6s37.5 11.1 46.3 28.6l32 64c10.8 21.7 33 35.4 57.2 35.4L576 448c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64zM96 240a64 64 0 1 1 128 0A64 64 0 1 1 96 240zm384-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faHandMiddleFinger = {\n  prefix: 'fas',\n  iconName: 'hand-middle-finger',\n  icon: [448, 512, [128405], \"f806\", \"M232 0c-22.1 0-40 17.9-40 40l0 164.2c-8.5-7.6-19.7-12.2-32-12.2c-26.5 0-48 21.5-48 48l0 7 0 73c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-55.7c-2 1.4-3.9 3-5.8 4.5L55 284.8C40.4 297 32 315 32 334L32 372c0 38 16.9 74 46.1 98.3l5.4 4.5c28.8 24 65 37.1 102.4 37.1L304 512c70.7 0 128-57.3 128-128l0-64 0-32c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 227.5 329.3 208 304 208c-12.3 0-23.5 4.6-32 12.2L272 40c0-22.1-17.9-40-40-40z\"]\n};\nconst faPercent = {\n  prefix: 'fas',\n  iconName: 'percent',\n  icon: [384, 512, [62101, 62785, \"percentage\"], \"25\", \"M374.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-320 320c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l320-320zM128 128A64 64 0 1 0 0 128a64 64 0 1 0 128 0zM384 384a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faPercentage = faPercent;\nconst faTruckMoving = {\n  prefix: 'fas',\n  iconName: 'truck-moving',\n  icon: [640, 512, [], \"f4df\", \"M64 32C28.7 32 0 60.7 0 96L0 304l0 80 0 16c0 44.2 35.8 80 80 80c26.2 0 49.4-12.6 64-32c14.6 19.4 37.8 32 64 32c44.2 0 80-35.8 80-80c0-5.5-.6-10.8-1.6-16L416 384l33.6 0c-1 5.2-1.6 10.5-1.6 16c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16l1.6 0c17.7 0 32-14.3 32-32l0-64 0-16 0-10.3c0-9.2-3.2-18.2-9-25.3l-58.8-71.8c-10.6-13-26.5-20.5-43.3-20.5L480 144l0-48c0-35.3-28.7-64-64-64L64 32zM585 256l-105 0 0-64 48.8 0c2.4 0 4.7 1.1 6.2 2.9L585 256zM528 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM176 400a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM80 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGlassWaterDroplet = {\n  prefix: 'fas',\n  iconName: 'glass-water-droplet',\n  icon: [384, 512, [], \"e4f5\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM83 297.5L66.4 64l251.3 0L301 297.5 288 304c-20.1 10.1-43.9 10.1-64 0s-43.9-10.1-64 0s-43.9 10.1-64 0l-13-6.5zM256 196c0-24-33.7-70.1-52.2-93.5c-6.1-7.7-17.5-7.7-23.6 0C161.7 125.9 128 172 128 196c0 33.1 28.7 60 64 60s64-26.9 64-60z\"]\n};\nconst faDisplay = {\n  prefix: 'fas',\n  iconName: 'display',\n  icon: [576, 512, [], \"e163\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l176 0-10.7 32L160 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-69.3 0L336 416l176 0c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0zM512 64l0 288L64 352 64 64l448 0z\"]\n};\nconst faFaceSmile = {\n  prefix: 'fas',\n  iconName: 'face-smile',\n  icon: [512, 512, [128578, \"smile\"], \"f118\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSmile = faFaceSmile;\nconst faThumbtack = {\n  prefix: 'fas',\n  iconName: 'thumbtack',\n  icon: [384, 512, [128204, 128392, \"thumb-tack\"], \"f08d\", \"M32 32C32 14.3 46.3 0 64 0L320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-29.5 0 11.4 148.2c36.7 19.9 65.7 53.2 79.5 94.7l1 3c3.3 9.8 1.6 20.5-4.4 28.8s-15.7 13.3-26 13.3L32 352c-10.3 0-19.9-4.9-26-13.3s-7.7-19.1-4.4-28.8l1-3c13.8-41.5 42.8-74.8 79.5-94.7L93.5 64 64 64C46.3 64 32 49.7 32 32zM160 384l64 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96z\"]\n};\nconst faThumbTack = faThumbtack;\nconst faTrophy = {\n  prefix: 'fas',\n  iconName: 'trophy',\n  icon: [576, 512, [127942], \"f091\", \"M400 0L176 0c-26.5 0-48.1 21.8-47.1 48.2c.2 5.3 .4 10.6 .7 15.8L24 64C10.7 64 0 74.7 0 88c0 92.6 33.5 157 78.5 200.7c44.3 43.1 98.3 64.8 138.1 75.8c23.4 6.5 39.4 26 39.4 45.6c0 20.9-17 37.9-37.9 37.9L192 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-26.1 0C337 448 320 431 320 410.1c0-19.6 15.9-39.2 39.4-45.6c39.9-11 93.9-32.7 138.2-75.8C542.5 245 576 180.6 576 88c0-13.3-10.7-24-24-24L446.4 64c.3-5.2 .5-10.4 .7-15.8C448.1 21.8 426.5 0 400 0zM48.9 112l84.4 0c9.1 90.1 29.2 150.3 51.9 190.6c-24.9-11-50.8-26.5-73.2-48.3c-32-31.1-58-76-63-142.3zM464.1 254.3c-22.4 21.8-48.3 37.3-73.2 48.3c22.7-40.3 42.8-100.5 51.9-190.6l84.4 0c-5.1 66.3-31.1 111.2-63 142.3z\"]\n};\nconst faPersonPraying = {\n  prefix: 'fas',\n  iconName: 'person-praying',\n  icon: [448, 512, [128720, \"pray\"], \"f683\", \"M352 64A64 64 0 1 0 224 64a64 64 0 1 0 128 0zM232.7 264l22.9 31.5c6.5 8.9 16.3 14.7 27.2 16.1s21.9-1.7 30.4-8.7l88-72c17.1-14 19.6-39.2 5.6-56.3s-39.2-19.6-56.3-5.6l-55.2 45.2-26.2-36C253.6 156.7 228.6 144 202 144c-30.9 0-59.2 17.1-73.6 44.4L79.8 280.9c-20.2 38.5-9.4 85.9 25.6 111.8L158.6 432 72 432c-22.1 0-40 17.9-40 40s17.9 40 40 40l208 0c17.3 0 32.6-11.1 38-27.5s-.3-34.4-14.2-44.7L187.7 354l45-90z\"]\n};\nconst faPray = faPersonPraying;\nconst faHammer = {\n  prefix: 'fas',\n  iconName: 'hammer',\n  icon: [576, 512, [128296], \"f6e3\", \"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6l0-12.1L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0l18.1 0c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z\"]\n};\nconst faHandPeace = {\n  prefix: 'fas',\n  iconName: 'hand-peace',\n  icon: [512, 512, [9996], \"f25b\", \"M224 0c17.7 0 32 14.3 32 32l0 208-64 0 0-208c0-17.7 14.3-32 32-32zm96 160c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm64 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zM93.3 51.2L175.9 240l-69.9 0L34.7 76.8C27.6 60.6 35 41.8 51.2 34.7s35.1 .3 42.1 16.5zm27 221.3l-.2-.5 69.9 0 26.1 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9l-11.6-11.6C77.5 429.5 64 396.9 64 363l0-27c0-32.7 24.6-59.7 56.3-63.5z\"]\n};\nconst faRotate = {\n  prefix: 'fas',\n  iconName: 'rotate',\n  icon: [512, 512, [128260, \"sync-alt\"], \"f2f1\", \"M142.9 142.9c-17.5 17.5-30.1 38-37.8 59.8c-5.9 16.7-24.2 25.4-40.8 19.5s-25.4-24.2-19.5-40.8C55.6 150.7 73.2 122 97.6 97.6c87.2-87.2 228.3-87.5 315.8-1L455 55c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 128c0 13.3-10.7 24-24 24l-8.4 0c0 0 0 0 0 0L344 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l41.1-41.1c-62.6-61.5-163.1-61.2-225.3 1zM16 312c0-13.3 10.7-24 24-24l7.6 0 .7 0L168 288c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-41.1 41.1c62.6 61.5 163.1 61.2 225.3-1c17.5-17.5 30.1-38 37.8-59.8c5.9-16.7 24.2-25.4 40.8-19.5s25.4 24.2 19.5 40.8c-10.8 30.6-28.4 59.3-52.9 83.8c-87.2 87.2-228.3 87.5-315.8 1L57 457c-6.9 6.9-17.2 8.9-26.2 5.2S16 449.7 16 440l0-119.6 0-.7 0-7.6z\"]\n};\nconst faSyncAlt = faRotate;\nconst faSpinner = {\n  prefix: 'fas',\n  iconName: 'spinner',\n  icon: [512, 512, [], \"f110\", \"M304 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 416a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM48 304a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm464-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM142.9 437A48 48 0 1 0 75 369.1 48 48 0 1 0 142.9 437zm0-294.2A48 48 0 1 0 75 75a48 48 0 1 0 67.9 67.9zM369.1 437A48 48 0 1 0 437 369.1 48 48 0 1 0 369.1 437z\"]\n};\nconst faRobot = {\n  prefix: 'fas',\n  iconName: 'robot',\n  icon: [640, 512, [129302], \"f544\", \"M320 0c17.7 0 32 14.3 32 32l0 64 120 0c39.8 0 72 32.2 72 72l0 272c0 39.8-32.2 72-72 72l-304 0c-39.8 0-72-32.2-72-72l0-272c0-39.8 32.2-72 72-72l120 0 0-64c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224l16 0 0 192-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0 0-192 16 0z\"]\n};\nconst faPeace = {\n  prefix: 'fas',\n  iconName: 'peace',\n  icon: [512, 512, [9774], \"f67c\", \"M224 445.3l0-121.8-94.3 77.1c26.1 22.8 58.5 38.7 94.3 44.7zM89.2 351.1L224 240.8l0-174.2C133.2 81.9 64 160.9 64 256c0 34.6 9.2 67.1 25.2 95.1zm293.1 49.5L288 323.5l0 121.8c35.7-6 68.1-21.9 94.3-44.7zm40.6-49.5c16-28 25.2-60.5 25.2-95.1c0-95.1-69.2-174.1-160-189.3l0 174.2L422.8 351.1zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faGears = {\n  prefix: 'fas',\n  iconName: 'gears',\n  icon: [640, 512, [\"cogs\"], \"f085\", \"M308.5 135.3c7.1-6.3 9.9-16.2 6.2-25c-2.3-5.3-4.8-10.5-7.6-15.5L304 89.4c-3-5-6.3-9.9-9.8-14.6c-5.7-7.6-15.7-10.1-24.7-7.1l-28.2 9.3c-10.7-8.8-23-16-36.2-20.9L199 27.1c-1.9-9.3-9.1-16.7-18.5-17.8C173.9 8.4 167.2 8 160.4 8l-.7 0c-6.8 0-13.5 .4-20.1 1.2c-9.4 1.1-16.6 8.6-18.5 17.8L115 56.1c-13.3 5-25.5 12.1-36.2 20.9L50.5 67.8c-9-3-19-.5-24.7 7.1c-3.5 4.7-6.8 9.6-9.9 14.6l-3 5.3c-2.8 5-5.3 10.2-7.6 15.6c-3.7 8.7-.9 18.6 6.2 25l22.2 19.8C32.6 161.9 32 168.9 32 176s.6 14.1 1.7 20.9L11.5 216.7c-7.1 6.3-9.9 16.2-6.2 25c2.3 5.3 4.8 10.5 7.6 15.6l3 5.2c3 5.1 6.3 9.9 9.9 14.6c5.7 7.6 15.7 10.1 24.7 7.1l28.2-9.3c10.7 8.8 23 16 36.2 20.9l6.1 29.1c1.9 9.3 9.1 16.7 18.5 17.8c6.7 .8 13.5 1.2 20.4 1.2s13.7-.4 20.4-1.2c9.4-1.1 16.6-8.6 18.5-17.8l6.1-29.1c13.3-5 25.5-12.1 36.2-20.9l28.2 9.3c9 3 19 .5 24.7-7.1c3.5-4.7 6.8-9.5 9.8-14.6l3.1-5.4c2.8-5 5.3-10.2 7.6-15.5c3.7-8.7 .9-18.6-6.2-25l-22.2-19.8c1.1-6.8 1.7-13.8 1.7-20.9s-.6-14.1-1.7-20.9l22.2-19.8zM112 176a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM504.7 500.5c6.3 7.1 16.2 9.9 25 6.2c5.3-2.3 10.5-4.8 15.5-7.6l5.4-3.1c5-3 9.9-6.3 14.6-9.8c7.6-5.7 10.1-15.7 7.1-24.7l-9.3-28.2c8.8-10.7 16-23 20.9-36.2l29.1-6.1c9.3-1.9 16.7-9.1 17.8-18.5c.8-6.7 1.2-13.5 1.2-20.4s-.4-13.7-1.2-20.4c-1.1-9.4-8.6-16.6-17.8-18.5L583.9 307c-5-13.3-12.1-25.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faCogs = faGears;\nconst faWarehouse = {\n  prefix: 'fas',\n  iconName: 'warehouse',\n  icon: [640, 512, [], \"f494\", \"M0 488L0 171.3c0-26.2 15.9-49.7 40.2-59.4L308.1 4.8c7.6-3.1 16.1-3.1 23.8 0L599.8 111.9c24.3 9.7 40.2 33.3 40.2 59.4L640 488c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-264c0-17.7-14.3-32-32-32l-384 0c-17.7 0-32 14.3-32 32l0 264c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zm488 24l-336 0c-13.3 0-24-10.7-24-24l0-56 384 0 0 56c0 13.3-10.7 24-24 24zM128 400l0-64 384 0 0 64-384 0zm0-96l0-80 384 0 0 80-384 0z\"]\n};\nconst faArrowUpRightDots = {\n  prefix: 'fas',\n  iconName: 'arrow-up-right-dots',\n  icon: [576, 512, [], \"e4b7\", \"M160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l50.7 0L9.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3l0 50.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L160 0zM576 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM448 208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm128 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM272 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM144 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM576 336a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-48-80a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faSplotch = {\n  prefix: 'fas',\n  iconName: 'splotch',\n  icon: [512, 512, [], \"f5bc\", \"M208.5 62.3l28.1-36.9C248.8 9.4 267.8 0 288 0c28.5 0 53.6 18.7 61.8 46l17.8 59.4c10.3 34.4 36.1 62 69.8 74.6l39.8 14.9c20.9 7.9 34.8 27.9 34.8 50.2c0 16.9-7.9 32.8-21.5 42.9l-67.3 50.5c-24.3 18.2-37.2 47.9-33.8 78.1l2.5 22.7c4.3 38.7-26 72.6-65 72.6c-14.8 0-29.3-5.1-40.8-14.3l-55.4-44.3c-4.5-3.6-9.3-6.7-14.5-9.2c-15.8-7.9-33.7-10.4-51-7.3L82.4 451.9C47.8 458.2 16 431.6 16 396.5c0-13.2 4.7-26 13.1-36.2l11.2-13.4c14.6-17.4 22.6-39.4 22.6-62.1c0-18.8-5.5-37.2-15.8-53L8.8 173.5C3.1 164.7 0 154.4 0 143.9c0-33.4 30.1-58.8 63-53.2l51.3 8.7c35.9 6.1 72.2-8.2 94.2-37.1z\"]\n};\nconst faFaceGrinHearts = {\n  prefix: 'fas',\n  iconName: 'face-grin-hearts',\n  icon: [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM199.3 129.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm154.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\"]\n};\nconst faGrinHearts = faFaceGrinHearts;\nconst faDiceFour = {\n  prefix: 'fas',\n  iconName: 'dice-four',\n  icon: [448, 512, [9859], \"f524\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM352 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faSimCard = {\n  prefix: 'fas',\n  iconName: 'sim-card',\n  icon: [384, 512, [], \"f7c4\", \"M64 0L242.7 0c17 0 33.3 6.7 45.3 18.7L365.3 96c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64C0 28.7 28.7 0 64 0zM96 192c-17.7 0-32 14.3-32 32l0 32 64 0 0-64-32 0zM64 352l80 0 96 0 80 0 0-64-80 0-96 0-80 0 0 64zM320 224c0-17.7-14.3-32-32-32l-32 0 0 64 64 0 0-32zM160 192l0 64 64 0 0-64-64 0zM288 448c17.7 0 32-14.3 32-32l0-32-64 0 0 64 32 0zM160 384l0 64 64 0 0-64-64 0zM64 416c0 17.7 14.3 32 32 32l32 0 0-64-64 0 0 32z\"]\n};\nconst faTransgender = {\n  prefix: 'fas',\n  iconName: 'transgender',\n  icon: [512, 512, [9895, \"transgender-alt\"], \"f225\", \"M112 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-31 31L112 78.1l7-7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-7 7 15.2 15.2C187.7 107.6 220.5 96 256 96s68.3 11.6 94.9 31.2l68.8-68.8-31-31c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9l96 0c8.8 0 16 7.2 16 16l0 96c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-31-31-68.8 68.8C404.4 187.7 416 220.5 416 256c0 80.2-59 146.6-136 158.2l0 17.8 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-17.8C155 402.6 96 336.2 96 256c0-35.5 11.6-68.3 31.2-94.9L112 145.9l-7 7c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l7-7L58.3 92.3l-31 31c-4.6 4.6-11.5 5.9-17.4 3.5S0 118.5 0 112L0 16C0 7.2 7.2 0 16 0l96 0zM352 256a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"]\n};\nconst faTransgenderAlt = faTransgender;\nconst faMercury = {\n  prefix: 'fas',\n  iconName: 'mercury',\n  icon: [384, 512, [9791], \"f223\", \"M72.1 7C85.8-4 106-1.8 117 12c17.6 22 44.7 36 75 36s57.3-14 75-36c11.1-13.8 31.2-16 45-5s16 31.2 5 45c-7.8 9.7-16.6 18.4-26.4 26.1C337.3 109.7 368 163.3 368 224c0 89.1-66.2 162.7-152 174.4l0 25.6 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-25.6C82.2 386.7 16 313.1 16 224c0-60.7 30.7-114.3 77.5-145.9C83.7 70.5 74.9 61.7 67.1 52c-11.1-13.8-8.8-33.9 5-45zM80 224a112 112 0 1 0 224 0A112 112 0 1 0 80 224z\"]\n};\nconst faArrowTurnDown = {\n  prefix: 'fas',\n  iconName: 'arrow-turn-down',\n  icon: [384, 512, [\"level-down\"], \"f149\", \"M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z\"]\n};\nconst faLevelDown = faArrowTurnDown;\nconst faPersonFallingBurst = {\n  prefix: 'fas',\n  iconName: 'person-falling-burst',\n  icon: [640, 512, [], \"e547\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 9.8c0 39-23.7 74-59.9 88.4C71.6 154.5 32 213 32 278.2L32 352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-73.8c0-10 1.6-19.8 4.5-29L261.1 497.4c9.6 14.8 29.4 19.1 44.3 9.5s19.1-29.4 9.5-44.3L222.6 320l1.4 0 80 0 38.4 51.2c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8l-43.2-57.6C341.3 263.1 327.1 256 312 256l-71.5 0-56.8-80.2-.2-.3c44.7-29 72.5-79 72.5-133.6l0-9.8zM96 80A48 48 0 1 0 0 80a48 48 0 1 0 96 0zM464 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 78.7-12.2c6.5-1 11.7-5.9 13.1-12.2s-1.1-13-6.5-16.7l-65.6-45.1L603 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L508.3 92.1l-29.4-74C476.4 12 470.6 8 464 8s-12.4 4-14.9 10.1l-29.4 74L343.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1-65.6 45.1c-5.4 3.7-8 10.3-6.5 16.7c.1 .3 .1 .6 .2 .8l19.4 0c20.1 0 39.2 7.5 53.8 20.8l18.4 2.9L383 265.3l36.2 48.3c2.1 2.8 3.9 5.7 5.5 8.6L464 286.1z\"]\n};\nconst faAward = {\n  prefix: 'fas',\n  iconName: 'award',\n  icon: [384, 512, [], \"f559\", \"M173.8 5.5c11-7.3 25.4-7.3 36.4 0L228 17.2c6 3.9 13 5.8 20.1 5.4l21.3-1.3c13.2-.8 25.6 6.4 31.5 18.2l9.6 19.1c3.2 6.4 8.4 11.5 14.7 14.7L344.5 83c11.8 5.9 19 18.3 18.2 31.5l-1.3 21.3c-.4 7.1 1.5 14.2 5.4 20.1l11.8 17.8c7.3 11 7.3 25.4 0 36.4L366.8 228c-3.9 6-5.8 13-5.4 20.1l1.3 21.3c.8 13.2-6.4 25.6-18.2 31.5l-19.1 9.6c-6.4 3.2-11.5 8.4-14.7 14.7L301 344.5c-5.9 11.8-18.3 19-31.5 18.2l-21.3-1.3c-7.1-.4-14.2 1.5-20.1 5.4l-17.8 11.8c-11 7.3-25.4 7.3-36.4 0L156 366.8c-6-3.9-13-5.8-20.1-5.4l-21.3 1.3c-13.2 .8-25.6-6.4-31.5-18.2l-9.6-19.1c-3.2-6.4-8.4-11.5-14.7-14.7L39.5 301c-11.8-5.9-19-18.3-18.2-31.5l1.3-21.3c.4-7.1-1.5-14.2-5.4-20.1L5.5 210.2c-7.3-11-7.3-25.4 0-36.4L17.2 156c3.9-6 5.8-13 5.4-20.1l-1.3-21.3c-.8-13.2 6.4-25.6 18.2-31.5l19.1-9.6C65 70.2 70.2 65 73.4 58.6L83 39.5c5.9-11.8 18.3-19 31.5-18.2l21.3 1.3c7.1 .4 14.2-1.5 20.1-5.4L173.8 5.5zM272 192a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM1.3 441.8L44.4 339.3c.2 .1 .3 .2 .4 .4l9.6 19.1c11.7 23.2 36 37.3 62 35.8l21.3-1.3c.2 0 .5 0 .7 .2l17.8 11.8c5.1 3.3 10.5 5.9 16.1 7.7l-37.6 89.3c-2.3 5.5-7.4 9.2-13.3 9.7s-11.6-2.2-14.8-7.2L74.4 455.5l-56.1 8.3c-5.7 .8-11.4-1.5-15-6s-4.3-10.7-2.1-16zm248 60.4L211.7 413c5.6-1.8 11-4.3 16.1-7.7l17.8-11.8c.2-.1 .4-.2 .7-.2l21.3 1.3c26 1.5 50.3-12.6 62-35.8l9.6-19.1c.1-.2 .2-.3 .4-.4l43.2 102.5c2.2 5.3 1.4 11.4-2.1 16s-9.3 6.9-15 6l-56.1-8.3-32.2 49.2c-3.2 5-8.9 7.7-14.8 7.2s-11-4.3-13.3-9.7z\"]\n};\nconst faTicketSimple = {\n  prefix: 'fas',\n  iconName: 'ticket-simple',\n  icon: [576, 512, [\"ticket-alt\"], \"f3ff\", \"M0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 64c0 8.8-7.4 15.7-15.7 18.6C541.5 217.1 528 235 528 256s13.5 38.9 32.3 45.4c8.3 2.9 15.7 9.8 15.7 18.6l0 64c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64l0-64c0-8.8 7.4-15.7 15.7-18.6C34.5 294.9 48 277 48 256s-13.5-38.9-32.3-45.4C7.4 207.7 0 200.8 0 192l0-64z\"]\n};\nconst faTicketAlt = faTicketSimple;\nconst faBuilding = {\n  prefix: 'fas',\n  iconName: 'building',\n  icon: [384, 512, [127970, 61687], \"f1ad\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"]\n};\nconst faAnglesLeft = {\n  prefix: 'fas',\n  iconName: 'angles-left',\n  icon: [512, 512, [171, \"angle-double-left\"], \"f100\", \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\"]\n};\nconst faAngleDoubleLeft = faAnglesLeft;\nconst faQrcode = {\n  prefix: 'fas',\n  iconName: 'qrcode',\n  icon: [448, 512, [], \"f029\", \"M0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48L0 80zM64 96l0 64 64 0 0-64L64 96zM0 336c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96zm64 16l0 64 64 0 0-64-64 0zM304 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm80 64l-64 0 0 64 64 0 0-64zM256 304c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s7.2-16 16-16s16 7.2 16 16l0 96c0 8.8-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-160zM368 480a16 16 0 1 1 0-32 16 16 0 1 1 0 32zm64 0a16 16 0 1 1 0-32 16 16 0 1 1 0 32z\"]\n};\nconst faClockRotateLeft = {\n  prefix: 'fas',\n  iconName: 'clock-rotate-left',\n  icon: [512, 512, [\"history\"], \"f1da\", \"M75 75L41 41C25.9 25.9 0 36.6 0 57.9L0 168c0 13.3 10.7 24 24 24l110.1 0c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24l0 104c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65 0-94.1c0-13.3-10.7-24-24-24z\"]\n};\nconst faHistory = faClockRotateLeft;\nconst faFaceGrinBeamSweat = {\n  prefix: 'fas',\n  iconName: 'face-grin-beam-sweat',\n  icon: [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M476.8 126.3c-4.1 1.1-8.4 1.7-12.8 1.7c-26.5 0-48-21-48-47c0-5 1.8-11.3 4.6-18.1c.3-.7 .6-1.4 .9-2.1c9-20.2 26.5-44.9 36-57.5c3.2-4.4 9.6-4.4 12.8 0C483.4 20.6 512 61 512 81c0 21.7-14.9 39.8-35.2 45.3zM256 0c51.4 0 99.3 15.2 139.4 41.2c-1.5 3.1-3 6.2-4.3 9.3c-3.4 8-7.1 19-7.1 30.5c0 44.3 36.6 79 80 79c9.6 0 18.8-1.7 27.4-4.8c13.3 30.9 20.6 65 20.6 100.8c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0zM383.8 317.8C345.3 329.4 301.9 336 256 336s-89.3-6.6-127.8-18.2c-12.3-3.7-24.3 7-19.2 18.7c24.5 56.9 81.1 96.7 147 96.7s122.5-39.8 147-96.7c5.1-11.8-6.9-22.4-19.2-18.7zm-166.2-89s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0z\"]\n};\nconst faGrinBeamSweat = faFaceGrinBeamSweat;\nconst faFileExport = {\n  prefix: 'fas',\n  iconName: 'file-export',\n  icon: [576, 512, [\"arrow-right-from-file\"], \"f56e\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 128-168 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l168 0 0 112c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM384 336l0-48 110.1 0-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39L384 336zm0-208l-128 0L256 0 384 128z\"]\n};\nconst faArrowRightFromFile = faFileExport;\nconst faShield = {\n  prefix: 'fas',\n  iconName: 'shield',\n  icon: [512, 512, [128737, \"shield-blank\"], \"f132\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0z\"]\n};\nconst faShieldBlank = faShield;\nconst faArrowUpShortWide = {\n  prefix: 'fas',\n  iconName: 'arrow-up-short-wide',\n  icon: [576, 512, [\"sort-amount-up-alt\"], \"f885\", \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0z\"]\n};\nconst faSortAmountUpAlt = faArrowUpShortWide;\nconst faCommentNodes = {\n  prefix: 'fas',\n  iconName: 'comment-nodes',\n  icon: [640, 512, [], \"e696\", \"M256 448c10.8 0 21.5-.5 32-1.6c.3-15.8 4.4-31.7 12.9-46.4c16-27.7 43.7-44.4 73.2-47.5l16.7-29.2c-4.3-11-6.7-22.9-6.7-35.4c0-53 43-96 96-96c9.1 0 17.8 1.3 26.2 3.6C481.1 102.1 378.6 32 256 32C114.6 32 0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.2 .3-.4 .5-.6 .7c-.3 .3-.5 .5-.6 .7l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm72.6-32c-17.7 30.6-7.2 69.7 23.4 87.4s69.7 7.2 87.4-23.4c1.5-2.6 2.8-5.3 3.9-8l73.3 0c1.1 2.7 2.4 5.4 3.9 8c17.7 30.6 56.8 41.1 87.4 23.4s41.1-56.8 23.4-87.4c-13.4-23.2-39.1-34.8-64-31.4l-17.6-30.7c-11 11.7-25 20.6-40.6 25.6l16.5 28.9c-3.8 4.8-6.8 10-9 15.6l-73.4 0c-2.2-5.6-5.3-10.8-9-15.6l33-57.7c4.1 .8 8.4 1.3 12.8 1.3c35.3 0 64-28.7 64-64s-28.7-64-64-64s-64 28.7-64 64c0 13.4 4.1 25.8 11.2 36.1l-34.6 60.5c-25-3.4-50.6 8.3-64 31.4z\"]\n};\nconst faHouseMedical = {\n  prefix: 'fas',\n  iconName: 'house-medical',\n  icon: [576, 512, [], \"e3b2\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l320.4 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0zM256 208c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faGolfBallTee = {\n  prefix: 'fas',\n  iconName: 'golf-ball-tee',\n  icon: [384, 512, [\"golf-ball\"], \"f450\", \"M384 192c0 66.8-34.1 125.6-85.8 160L85.8 352C34.1 317.6 0 258.8 0 192C0 86 86 0 192 0S384 86 384 192zM242.1 256.6c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zm-52.3-49.3c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4c0 18.5-15 33.5-33.5 33.5zm113.5-17.5c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zM96 416c0-17.7 14.3-32 32-32l64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0c-8.8 0-16 7.2-16 16l0 16c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-16c0-8.8-7.2-16-16-16l-16 0c-17.7 0-32-14.3-32-32z\"]\n};\nconst faGolfBall = faGolfBallTee;\nconst faCircleChevronLeft = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-left',\n  icon: [512, 512, [\"chevron-circle-left\"], \"f137\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM271 135c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-87 87 87 87c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L167 273c-9.4-9.4-9.4-24.6 0-33.9L271 135z\"]\n};\nconst faChevronCircleLeft = faCircleChevronLeft;\nconst faHouseChimneyWindow = {\n  prefix: 'fas',\n  iconName: 'house-chimney-window',\n  icon: [576, 512, [], \"e00d\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24zM248 192c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24l-80 0z\"]\n};\nconst faPenNib = {\n  prefix: 'fas',\n  iconName: 'pen-nib',\n  icon: [512, 512, [10001], \"f5ad\", \"M368.4 18.3L312.7 74.1 437.9 199.3l55.7-55.7c21.9-21.9 21.9-57.3 0-79.2L447.6 18.3c-21.9-21.9-57.3-21.9-79.2 0zM288 94.6l-9.2 2.8L134.7 140.6c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-3.8 11.3-1 23.9 7.3 32.4L164.7 324.7c-3-6.3-4.7-13.3-4.7-20.7c0-26.5 21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48c-7.4 0-14.4-1.7-20.7-4.7L33.7 500.9c8.6 8.3 21.1 11.2 32.4 7.3l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 2.7-9.2L288 94.6z\"]\n};\nconst faTentArrowTurnLeft = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-turn-left',\n  icon: [576, 512, [], \"e580\", \"M120.1 41.8c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120 456 120c39.8 0 72 32.2 72 72l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-66.3-53.7-120-120-120L86.5 72l33.5-30.2zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faTents = {\n  prefix: 'fas',\n  iconName: 'tents',\n  icon: [640, 512, [], \"e582\", \"M396.6 6.5L235.8 129.1c9.6 1.8 18.9 5.8 27 12l168 128c13.2 10.1 22 24.9 24.5 41.4l6.2 41.5L608 352c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128c-11.5-8.7-27.3-8.7-38.8 0zm-153.2 160c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S22.7 512 32 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faWandMagic = {\n  prefix: 'fas',\n  iconName: 'wand-magic',\n  icon: [512, 512, [\"magic\"], \"f0d0\", \"M14.1 463.3c-18.7-18.7-18.7-49.1 0-67.9L395.4 14.1c18.7-18.7 49.1-18.7 67.9 0l34.6 34.6c18.7 18.7 18.7 49.1 0 67.9L116.5 497.9c-18.7 18.7-49.1 18.7-67.9 0L14.1 463.3zM347.6 187.6l105-105L429.4 59.3l-105 105 23.3 23.3z\"]\n};\nconst faMagic = faWandMagic;\nconst faDog = {\n  prefix: 'fas',\n  iconName: 'dog',\n  icon: [576, 512, [128021], \"f6d3\", \"M309.6 158.5L332.7 19.8C334.6 8.4 344.5 0 356.1 0c7.5 0 14.5 3.5 19 9.5L392 32l52.1 0c12.7 0 24.9 5.1 33.9 14.1L496 64l56 0c13.3 0 24 10.7 24 24l0 24c0 44.2-35.8 80-80 80l-32 0-16 0-21.3 0-5.1 30.5-112-64zM416 256.1L416 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-115.2c-24 12.3-51.2 19.2-80 19.2s-56-6.9-80-19.2L160 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-230.2c-28.8-10.9-51.4-35.3-59.2-66.5L1 167.8c-4.3-17.1 6.1-34.5 23.3-38.8s34.5 6.1 38.8 23.3l3.9 15.5C70.5 182 83.3 192 98 192l30 0 16 0 159.8 0L416 256.1zM464 80a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faCarrot = {\n  prefix: 'fas',\n  iconName: 'carrot',\n  icon: [512, 512, [129365], \"f787\", \"M346.7 6C337.6 17 320 42.3 320 72c0 40 15.3 55.3 40 80s40 40 80 40c29.7 0 55-17.6 66-26.7c4-3.3 6-8.2 6-13.3s-2-10-6-13.2c-11.4-9.1-38.3-26.8-74-26.8c-32 0-40 8-40 8s8-8 8-40c0-35.7-17.7-62.6-26.8-74C370 2 365.1 0 360 0s-10 2-13.3 6zM244.6 136c-40 0-77.1 18.1-101.7 48.2l60.5 60.5c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-55.3-55.3 0 .1L2.2 477.9C-2 487-.1 497.8 7 505s17.9 9 27.1 4.8l134.7-62.4-52.1-52.1c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L199.7 433l100.2-46.4c46.4-21.5 76.2-68 76.2-119.2C376 194.8 317.2 136 244.6 136z\"]\n};\nconst faMoon = {\n  prefix: 'fas',\n  iconName: 'moon',\n  icon: [384, 512, [127769, 9214], \"f186\", \"M223.5 32C100 32 0 132.3 0 256S100 480 223.5 480c60.6 0 115.5-24.2 155.8-63.4c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6c-96.9 0-175.5-78.8-175.5-176c0-65.8 36-123.1 89.3-153.3c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z\"]\n};\nconst faWineGlassEmpty = {\n  prefix: 'fas',\n  iconName: 'wine-glass-empty',\n  icon: [320, 512, [\"wine-glass-alt\"], \"f5ce\", \"M64 0C47.4 0 33.5 12.8 32.1 29.3l-14 168.4c-6 72 42.5 135.2 109.9 150.6l0 99.6-48 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0 0-99.6c67.4-15.4 115.9-78.6 109.9-150.6l-14-168.4C286.5 12.8 272.6 0 256 0L64 0zM81.9 203.1L93.4 64l133.1 0 11.6 139.1C242 248.8 205.9 288 160 288s-82-39.2-78.1-84.9z\"]\n};\nconst faWineGlassAlt = faWineGlassEmpty;\nconst faCheese = {\n  prefix: 'fas',\n  iconName: 'cheese',\n  icon: [512, 512, [], \"f7ef\", \"M512 240.2l0 15.8L0 256c0-20 10-38.7 26.6-49.8L274.9 40.7c8.6-5.7 18.6-8.7 28.9-8.7C418.8 32 512 125.2 512 240.2zm0 47.8l0 128c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 288l512 0z\"]\n};\nconst faYinYang = {\n  prefix: 'fas',\n  iconName: 'yin-yang',\n  icon: [512, 512, [9775], \"f6ad\", \"M256 64c53 0 96 43 96 96s-43 96-96 96s-96 43-96 96s43 96 96 96C150 448 64 362 64 256S150 64 256 64zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm32-352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faMusic = {\n  prefix: 'fas',\n  iconName: 'music',\n  icon: [512, 512, [127925], \"f001\", \"M499.1 6.3c8.1 6 12.9 15.6 12.9 25.7l0 72 0 264c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6L448 147 192 223.8 192 432c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6L128 200l0-72c0-14.1 9.3-26.6 22.8-30.7l320-96c9.7-2.9 20.2-1.1 28.3 5z\"]\n};\nconst faCodeCommit = {\n  prefix: 'fas',\n  iconName: 'code-commit',\n  icon: [640, 512, [], \"f386\", \"M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l131.2 0C178 151 242.6 96 320 96s142 55 156.8 128L608 224c17.7 0 32 14.3 32 32s-14.3 32-32 32l-131.2 0z\"]\n};\nconst faTemperatureLow = {\n  prefix: 'fas',\n  iconName: 'temperature-low',\n  icon: [512, 512, [], \"f76b\", \"M448 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 96a96 96 0 1 1 192 0A96 96 0 1 1 320 96zM144 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C70.2 332.6 64 349.5 64 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L192 112c0-26.5-21.5-48-48-48zM32 112C32 50.2 82.1 0 144 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S0 447.5 0 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L32 112zM192 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3l0-50.7c0-8.8 7.2-16 16-16s16 7.2 16 16l0 50.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faPersonBiking = {\n  prefix: 'fas',\n  iconName: 'person-biking',\n  icon: [640, 512, [128692, \"biking\"], \"f84a\", \"M400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm27.2 64l-61.8-48.8c-17.3-13.6-41.7-13.8-59.1-.3l-83.1 64.2c-30.7 23.8-28.5 70.8 4.3 91.6L288 305.1 288 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-10.7-5.3-20.7-14.2-26.6L295 232.9l60.3-48.5L396 217c5.7 4.5 12.7 7 20 7l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.8 0zM56 384a72 72 0 1 1 144 0A72 72 0 1 1 56 384zm200 0A128 128 0 1 0 0 384a128 128 0 1 0 256 0zm184 0a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zm200 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"]\n};\nconst faBiking = faPersonBiking;\nconst faBroom = {\n  prefix: 'fas',\n  iconName: 'broom',\n  icon: [576, 512, [129529], \"f51a\", \"M566.6 54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192-34.7-34.7c-4.2-4.2-10-6.6-16-6.6c-12.5 0-22.6 10.1-22.6 22.6l0 29.1L364.3 320l29.1 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16l-34.7-34.7 192-192zM341.1 353.4L222.6 234.9c-42.7-3.7-85.2 11.7-115.8 42.3l-8 8C76.5 307.5 64 337.7 64 369.2c0 6.8 7.1 11.2 13.2 8.2l51.1-25.5c5-2.5 9.5 4.1 5.4 7.9L7.3 473.4C2.7 477.6 0 483.6 0 489.9C0 502.1 9.9 512 22.1 512l173.3 0c38.8 0 75.9-15.4 103.4-42.8c30.6-30.6 45.9-73.1 42.3-115.8z\"]\n};\nconst faShieldHeart = {\n  prefix: 'fas',\n  iconName: 'shield-heart',\n  icon: [512, 512, [], \"e574\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM144 221.3c0-33.8 27.4-61.3 61.3-61.3c16.2 0 31.8 6.5 43.3 17.9l7.4 7.4 7.4-7.4c11.5-11.5 27.1-17.9 43.3-17.9c33.8 0 61.3 27.4 61.3 61.3c0 16.2-6.5 31.8-17.9 43.3l-82.7 82.7c-6.2 6.2-16.4 6.2-22.6 0l-82.7-82.7c-11.5-11.5-17.9-27.1-17.9-43.3z\"]\n};\nconst faGopuram = {\n  prefix: 'fas',\n  iconName: 'gopuram',\n  icon: [512, 512, [], \"f664\", \"M120 0c13.3 0 24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 48 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 0 32 0 64c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32l0 96c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-64 0 0-160-32 0 0-128-32 0 0-96-32 0 0 96 32 0 0 128 32 0 0 160-80 0 0-48c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 48-80 0 0-160 32 0 0-128 32 0 0-96-32 0 0 96-32 0 0 128-32 0 0 160-64 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l0-96c0-17.7 14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l0-64 0-32 0-8c0-13.3 10.7-24 24-24zM256 272c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-32-80l0 32 64 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faEarthOceania = {\n  prefix: 'fas',\n  iconName: 'earth-oceania',\n  icon: [512, 512, [\"globe-oceania\"], \"e47b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM208.6 357.3l-39-13.5c-6.5-2.2-13.6-2.3-20.1-.3l-15.3 4.9c-18.5 5.9-38.5-2.4-47.5-19.5l-3.3-6.2c-10.6-20.1-2.3-45 18.2-54.7l35.3-16.8c2.3-1.1 4.4-2.8 5.9-4.8l5.3-7c7.2-9.6 18.6-15.3 30.6-15.3s23.4 5.7 30.6 15.3l4.6 6.1c2 2.6 4.9 4.5 8.1 5.1c7.8 1.6 15.7-1.5 20.4-7.9l10.4-14.2c2-2.8 5.3-4.4 8.7-4.4c4.4 0 8.4 2.7 10 6.8l10.1 25.9c2.8 7.2 6.7 14 11.5 20.2L311 299.8c5.8 7.4 9 16.6 9 26s-3.2 18.6-9 26L299 367.2c-8.3 10.6-21 16.8-34.4 16.8c-8.4 0-16.6-2.4-23.7-7l-25.4-16.4c-2.2-1.4-4.5-2.5-6.9-3.4zm65.2-214.8L296 164.7c10.1 10.1 2.9 27.3-11.3 27.3l-29.9 0c-5.6 0-11.1-1.2-16.2-3.4l-42.8-19c-14.3-6.3-11.9-27.3 3.4-30.3l38.5-7.7c13.1-2.6 26.7 1.5 36.1 10.9zM248 432c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16zM431.2 298.9l8 24c2.8 8.4-1.7 17.4-10.1 20.2s-17.4-1.7-20.2-10.1l-8-24c-2.8-8.4 1.7-17.4 10.1-20.2s17.4 1.7 20.2 10.1zm-19.9 80.4l-32 32c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l32-32c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faGlobeOceania = faEarthOceania;\nconst faSquareXmark = {\n  prefix: 'fas',\n  iconName: 'square-xmark',\n  icon: [448, 512, [10062, \"times-square\", \"xmark-square\"], \"f2d3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm79 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faTimesSquare = faSquareXmark;\nconst faXmarkSquare = faSquareXmark;\nconst faHashtag = {\n  prefix: 'fas',\n  iconName: 'hashtag',\n  icon: [448, 512, [62098], \"23\", \"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\"]\n};\nconst faUpRightAndDownLeftFromCenter = {\n  prefix: 'fas',\n  iconName: 'up-right-and-down-left-from-center',\n  icon: [512, 512, [\"expand-alt\"], \"f424\", \"M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87L327 41c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8z\"]\n};\nconst faExpandAlt = faUpRightAndDownLeftFromCenter;\nconst faOilCan = {\n  prefix: 'fas',\n  iconName: 'oil-can',\n  icon: [640, 512, [], \"f613\", \"M320 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32-80 0-48 0-48 0c-26.5 0-48 21.5-48 48l0 64.8c0 19 11.2 36.2 28.5 43.9l67.5 30L96 368c0 26.5 21.5 48 48 48l259.1 0c18.4 0 35.8-7.9 48-21.7L633.5 187.7c12.3-13.9-.3-35.4-18.4-31.5L448 192l-50.5-25.2c-8.9-4.4-18.7-6.8-28.6-6.8L288 160l0-32 32 0zM96 208l0 86.1L48 272.8 48 208l48 0z\"]\n};\nconst faT = {\n  prefix: 'fas',\n  iconName: 't',\n  icon: [384, 512, [116], \"54\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l128 0 0 352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-352 128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 32 32 32z\"]\n};\nconst faHippo = {\n  prefix: 'fas',\n  iconName: 'hippo',\n  icon: [640, 512, [129435], \"f6ed\", \"M407 47c9.4-9.4 24.6-9.4 33.9 0l17.2 17.2c1.9-.1 3.9-.2 5.8-.2l32 0c11.2 0 21.9 2.3 31.6 6.5L543 55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L564 101.9c7.6 12.2 12 26.7 12 42.1c0 10.2 7.4 18.8 16.7 23c27.9 12.5 47.3 40.5 47.3 73c0 26.2-12.6 49.4-32 64l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-16-64 0 0 16c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-17.6c-11.8-2.4-22.7-7.4-32-14.4c-1.5-1.1-2.9-2.3-4.3-3.5c-17-14.7-27.7-36.4-27.7-60.5c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 44.7 26.2 83.2 64 101.2l0 10.8c0 17.7 14.3 32 32 32l32 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-76c-19.8 7.7-41.4 12-64 12s-44.2-4.3-64-12l0 76c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-118.9L45.9 369.7c-5.4 12.1-19.6 17.6-31.7 12.2S-3.3 362.4 2.1 350.3L24 300.9c5.3-11.9 8-24.7 8-37.7C32 155.7 117.2 68 223.8 64.1l.2-.1 7.2 0L256 64l32 0c41.7 0 83.4 12.1 117.2 25.7c1.7-1.8 3.5-3.6 5.3-5.2L407 81c-9.4-9.4-9.4-24.6 0-33.9zm73 185a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm88 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM480 144a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faChartColumn = {\n  prefix: 'fas',\n  iconName: 'chart-column',\n  icon: [512, 512, [], \"e0e3\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zM160 224c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm128-64l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32s32 14.3 32 32zm64 32c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zM480 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faInfinity = {\n  prefix: 'fas',\n  iconName: 'infinity',\n  icon: [640, 512, [8734, 9854], \"f534\", \"M0 241.1C0 161 65 96 145.1 96c38.5 0 75.4 15.3 102.6 42.5L320 210.7l72.2-72.2C419.5 111.3 456.4 96 494.9 96C575 96 640 161 640 241.1l0 29.7C640 351 575 416 494.9 416c-38.5 0-75.4-15.3-102.6-42.5L320 301.3l-72.2 72.2C220.5 400.7 183.6 416 145.1 416C65 416 0 351 0 270.9l0-29.7zM274.7 256l-72.2-72.2c-15.2-15.2-35.9-23.8-57.4-23.8C100.3 160 64 196.3 64 241.1l0 29.7c0 44.8 36.3 81.1 81.1 81.1c21.5 0 42.2-8.5 57.4-23.8L274.7 256zm90.5 0l72.2 72.2c15.2 15.2 35.9 23.8 57.4 23.8c44.8 0 81.1-36.3 81.1-81.1l0-29.7c0-44.8-36.3-81.1-81.1-81.1c-21.5 0-42.2 8.5-57.4 23.8L365.3 256z\"]\n};\nconst faVialCircleCheck = {\n  prefix: 'fas',\n  iconName: 'vial-circle-check',\n  icon: [512, 512, [], \"e596\", \"M0 64C0 46.3 14.3 32 32 32l64 0 64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 170.8c-20.2 28.6-32 63.5-32 101.2c0 25.2 5.3 49.1 14.8 70.8C189.5 463.7 160.6 480 128 480c-53 0-96-43-96-96L32 96C14.3 96 0 81.7 0 64zM96 96l0 96 64 0 0-96L96 96zM224 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L352 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faPersonArrowDownToLine = {\n  prefix: 'fas',\n  iconName: 'person-arrow-down-to-line',\n  icon: [640, 512, [], \"e538\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352l0-96 16 0 0 96-16 0zm-64 0l-88 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l120 0 80 0 376 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-344 0 0-191.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 448zM464 64l0 242.7-25.4-25.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L528 306.7 528 64c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faVoicemail = {\n  prefix: 'fas',\n  iconName: 'voicemail',\n  icon: [640, 512, [], \"f897\", \"M144 320a80 80 0 1 1 0-160 80 80 0 1 1 0 160zm119.8 0c15.3-22.9 24.2-50.4 24.2-80c0-79.5-64.5-144-144-144S0 160.5 0 240s64.5 144 144 144l352 0c79.5 0 144-64.5 144-144s-64.5-144-144-144s-144 64.5-144 144c0 29.6 8.9 57.1 24.2 80l-112.5 0zM496 160a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faFan = {\n  prefix: 'fas',\n  iconName: 'fan',\n  icon: [512, 512, [], \"f863\", \"M258.6 0c-1.7 0-3.4 .1-5.1 .5C168 17 115.6 102.3 130.5 189.3c2.9 17 8.4 32.9 15.9 47.4L32 224l-2.6 0C13.2 224 0 237.2 0 253.4c0 1.7 .1 3.4 .5 5.1C17 344 102.3 396.4 189.3 381.5c17-2.9 32.9-8.4 47.4-15.9L224 480l0 2.6c0 16.2 13.2 29.4 29.4 29.4c1.7 0 3.4-.1 5.1-.5C344 495 396.4 409.7 381.5 322.7c-2.9-17-8.4-32.9-15.9-47.4L480 288l2.6 0c16.2 0 29.4-13.2 29.4-29.4c0-1.7-.1-3.4-.5-5.1C495 168 409.7 115.6 322.7 130.5c-17 2.9-32.9 8.4-47.4 15.9L288 32l0-2.6C288 13.2 274.8 0 258.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faPersonWalkingLuggage = {\n  prefix: 'fas',\n  iconName: 'person-walking-luggage',\n  icon: [576, 512, [], \"e554\", \"M432 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM347.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L505 232.7l-15.3-36.8C472.5 154.8 432.3 128 387.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L340.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM256 274.1c-7.7-4.4-17.4-1.8-21.9 5.9l-32 55.4L147.7 304c-15.3-8.8-34.9-3.6-43.7 11.7L40 426.6c-8.8 15.3-3.6 34.9 11.7 43.7l55.4 32c15.3 8.8 34.9 3.6 43.7-11.7l64-110.9c1.5-2.6 2.6-5.2 3.3-8L261.9 296c4.4-7.7 1.8-17.4-5.9-21.9z\"]\n};\nconst faUpDown = {\n  prefix: 'fas',\n  iconName: 'up-down',\n  icon: [256, 512, [8597, 11021, \"arrows-alt-v\"], \"f338\", \"M145.6 7.7C141 2.8 134.7 0 128 0s-13 2.8-17.6 7.7l-104 112c-6.5 7-8.2 17.2-4.4 25.9S14.5 160 24 160l56 0 0 192-56 0c-9.5 0-18.2 5.7-22 14.4s-2.1 18.9 4.4 25.9l104 112c4.5 4.9 10.9 7.7 17.6 7.7s13-2.8 17.6-7.7l104-112c6.5-7 8.2-17.2 4.4-25.9s-12.5-14.4-22-14.4l-56 0 0-192 56 0c9.5 0 18.2-5.7 22-14.4s2.1-18.9-4.4-25.9l-104-112z\"]\n};\nconst faArrowsAltV = faUpDown;\nconst faCloudMoonRain = {\n  prefix: 'fas',\n  iconName: 'cloud-moon-rain',\n  icon: [576, 512, [], \"f73c\", \"M481.2 0C417 0 363.5 46.5 353.7 107.6c35.4 17.6 60.2 53.3 62.1 95.1c23.2 11 42 29.7 53.1 52.7c4 .4 8.1 .6 12.3 .6c34.9 0 66.7-13.8 89.9-36.1c5.1-4.9 6.4-12.5 3.2-18.7s-10.1-9.7-17-8.6c-4.9 .8-10 1.3-15.2 1.3c-49 0-88.4-39.3-88.4-87.4c0-32.6 18-61.1 44.9-76.1c6.1-3.4 9.3-10.5 7.8-17.4s-7.3-12-14.3-12.6c-3.6-.3-7.3-.5-10.9-.5zM367.9 383.9c44.2 0 80-35.8 80-80c0-39.3-28.4-72.1-65.8-78.7c1.2-5.6 1.9-11.3 1.9-17.2c0-44.2-35.8-80-80-80c-17 0-32.8 5.3-45.8 14.4C241.3 114.6 210.8 96 176 96c-53 0-96 43-96 96l0 1.3c-45.4 7.6-80 47.1-80 94.6c0 53 43 96 96 96l271.9 0zM85.4 420.1c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3z\"]\n};\nconst faCalendar = {\n  prefix: 'fas',\n  iconName: 'calendar',\n  icon: [448, 512, [128197, 128198], \"f133\", \"M96 32l0 32L48 64C21.5 64 0 85.5 0 112l0 48 448 0 0-48c0-26.5-21.5-48-48-48l-48 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L160 64l0-32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192L0 192 0 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-272z\"]\n};\nconst faTrailer = {\n  prefix: 'fas',\n  iconName: 'trailer',\n  icon: [640, 512, [], \"e041\", \"M48 32C21.5 32 0 53.5 0 80L0 336c0 26.5 21.5 48 48 48l17.1 0c7.8-54.3 54.4-96 110.9-96s103.1 41.7 110.9 96L488 384l8 0 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-240c0-26.5-21.5-48-48-48L48 32zM80 96c8.8 0 16 7.2 16 16l0 131.2c-11.4 5.9-22.2 12.9-32 21L64 112c0-8.8 7.2-16 16-16zm96 128c-5.4 0-10.7 .2-16 .7L160 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112.7c-5.3-.5-10.6-.7-16-.7zm80 19.2L256 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 152.2c-9.8-8.1-20.6-15.2-32-21zM368 96c8.8 0 16 7.2 16 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16zm112 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16s16 7.2 16 16zM176 480a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-112a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBahai = {\n  prefix: 'fas',\n  iconName: 'bahai',\n  icon: [576, 512, [\"haykal\"], \"f666\", \"M288 0c14.5 0 27.2 9.7 30.9 23.8l23.9 89.6 75.9-53.3c11.9-8.3 27.8-7.6 39 1.7s14.6 24.9 8.4 38.1l-39.3 84 92.4 8c14.4 1.2 26.2 12 28.8 26.3s-4.9 28.5-18 34.6l-84.1 39.1 65.7 65.5c10.3 10.2 12.4 26.1 5.1 38.7s-22 18.7-36 14.9L391 386.8l8.2 92.4c1.3 14.4-7.3 27.9-20.9 32.9s-28.9 .1-37.2-11.7l-53.1-76-53.1 76c-8.3 11.9-23.6 16.7-37.2 11.7s-22.2-18.5-20.9-32.9l8.2-92.4L95.4 410.9c-14 3.8-28.8-2.3-36-14.9s-5.2-28.4 5.1-38.7l65.7-65.5L46 252.7c-13.1-6.1-20.5-20.3-18-34.6s14.3-25.1 28.8-26.3l92.4-8-39.3-84c-6.1-13.1-2.7-28.8 8.4-38.1s27.1-10 39-1.7l75.9 53.3 23.9-89.6C260.8 9.7 273.5 0 288 0zm0 156.2l-4.8 18c-2.7 10.1-10.2 18.2-20 21.8s-20.8 2.1-29.3-3.9l-15.2-10.7 7.9 16.8c4.4 9.5 4 20.5-1.3 29.6s-14.5 15-25 15.9l-18.5 1.6 16.8 7.8c9.5 4.4 16.2 13.2 18 23.5s-1.5 20.8-8.9 28.2l-13.2 13.1 17.9-4.8c10.1-2.7 20.9-.3 28.9 6.4s12.2 16.9 11.3 27.3l-1.6 18.5 10.6-15.2c6-8.6 15.8-13.7 26.2-13.7s20.2 5.1 26.2 13.7l10.6 15.2-1.6-18.5c-.9-10.4 3.3-20.6 11.3-27.3s18.8-9.1 28.9-6.4l17.9 4.8-13.2-13.1c-7.4-7.4-10.7-17.9-8.9-28.2s8.5-19.1 18-23.5l16.8-7.8-18.5-1.6c-10.4-.9-19.7-6.8-25-15.9s-5.7-20.1-1.3-29.6l7.9-16.8-15.2 10.7c-8.6 6-19.5 7.5-29.3 3.9s-17.3-11.7-20-21.8l-4.8-18z\"]\n};\nconst faHaykal = faBahai;\nconst faSdCard = {\n  prefix: 'fas',\n  iconName: 'sd-card',\n  icon: [384, 512, [], \"f7c2\", \"M320 0L141.3 0C124.3 0 108 6.7 96 18.7L18.7 96C6.7 108 0 124.3 0 141.3L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64zM160 88l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faDragon = {\n  prefix: 'fas',\n  iconName: 'dragon',\n  icon: [640, 512, [128009], \"f6d5\", \"M352 124.5l-51.9-13c-6.5-1.6-11.3-7.1-12-13.8s2.8-13.1 8.7-16.1l40.8-20.4L294.4 28.8c-5.5-4.1-7.8-11.3-5.6-17.9S297.1 0 304 0L416 0l32 0 16 0c30.2 0 58.7 14.2 76.8 38.4l57.6 76.8c6.2 8.3 9.6 18.4 9.6 28.8c0 26.5-21.5 48-48 48l-21.5 0c-17 0-33.3-6.7-45.3-18.7L480 160l-32 0 0 21.5c0 24.8 12.8 47.9 33.8 61.1l106.6 66.6c32.1 20.1 51.6 55.2 51.6 93.1C640 462.9 590.9 512 530.2 512L496 512l-64 0L32.3 512c-3.3 0-6.6-.4-9.6-1.4C13.5 507.8 6 501 2.4 492.1C1 488.7 .2 485.2 0 481.4c-.2-3.7 .3-7.3 1.3-10.7c2.8-9.2 9.6-16.7 18.6-20.4c3-1.2 6.2-2 9.5-2.2L433.3 412c8.3-.7 14.7-7.7 14.7-16.1c0-4.3-1.7-8.4-4.7-11.4l-44.4-44.4c-30-30-46.9-70.7-46.9-113.1l0-45.5 0-57zM512 72.3c0-.1 0-.2 0-.3s0-.2 0-.3l0 .6zm-1.3 7.4L464.3 68.1c-.2 1.3-.3 2.6-.3 3.9c0 13.3 10.7 24 24 24c10.6 0 19.5-6.8 22.7-16.3zM130.9 116.5c16.3-14.5 40.4-16.2 58.5-4.1l130.6 87 0 27.5c0 32.8 8.4 64.8 24 93l-232 0c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7L171 232.3 18.4 255.8c-7 1.1-13.9-2.6-16.9-9s-1.5-14.1 3.8-18.8L130.9 116.5z\"]\n};\nconst faShoePrints = {\n  prefix: 'fas',\n  iconName: 'shoe-prints',\n  icon: [640, 512, [], \"f54b\", \"M416 0C352.3 0 256 32 256 32l0 128c48 0 76 16 104 32s56 32 104 32c56.4 0 176-16 176-96S512 0 416 0zM128 96c0 35.3 28.7 64 64 64l32 0 0-128-32 0c-35.3 0-64 28.7-64 64zM288 512c96 0 224-48 224-128s-119.6-96-176-96c-48 0-76 16-104 32s-56 32-104 32l0 128s96.3 32 160 32zM0 416c0 35.3 28.7 64 64 64l32 0 0-128-32 0c-35.3 0-64 28.7-64 64z\"]\n};\nconst faCirclePlus = {\n  prefix: 'fas',\n  iconName: 'circle-plus',\n  icon: [512, 512, [\"plus-circle\"], \"f055\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nconst faPlusCircle = faCirclePlus;\nconst faFaceGrinTongueWink = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue-wink',\n  icon: [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M174.5 498.8C73.1 464.7 0 368.9 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 112.9-73.1 208.7-174.5 242.8C346.7 484 352 466.6 352 448l0-46.9c24.3-17.5 43.6-41.6 55.4-69.6c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c11.7 27.8 30.8 51.7 54.8 69.2l0 47.3c0 18.6 5.3 36 14.5 50.8zm20.7-265.2c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zM336 272a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM320 402.6l0 45.4c0 35.3-28.7 64-64 64s-64-28.7-64-64l0-45.4c0-14.7 11.9-26.6 26.6-26.6l2 0c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9l2 0c14.7 0 26.6 11.9 26.6 26.6zM336 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faGrinTongueWink = faFaceGrinTongueWink;\nconst faHandHolding = {\n  prefix: 'fas',\n  iconName: 'hand-holding',\n  icon: [576, 512, [], \"f4bd\", \"M559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 272 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-16 0-78.3 0c-29.1 0-57.3 9.9-80 28L68.8 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 160.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2c.3 0 .6 0 .9 0c0 0 0 0 0 0c-.3 0-.6 0-.9 0z\"]\n};\nconst faPlugCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'plug-circle-exclamation',\n  icon: [576, 512, [], \"e55d\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faLinkSlash = {\n  prefix: 'fas',\n  iconName: 'link-slash',\n  icon: [640, 512, [\"chain-broken\", \"chain-slash\", \"unlink\"], \"f127\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L489.3 358.2l90.5-90.5c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114l-96 96-31.9-25C430.9 239.6 420.1 175.1 377 132c-52.2-52.3-134.5-56.2-191.3-11.7L38.8 5.1zM239 162c30.1-14.9 67.7-9.9 92.8 15.3c20 20 27.5 48.3 21.7 74.5L239 162zM406.6 416.4L220.9 270c-2.1 39.8 12.2 80.1 42.2 110c38.9 38.9 94.4 51 143.6 36.3zm-290-228.5L60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5l61.8-61.8-50.6-39.9z\"]\n};\nconst faChainBroken = faLinkSlash;\nconst faChainSlash = faLinkSlash;\nconst faUnlink = faLinkSlash;\nconst faClone = {\n  prefix: 'fas',\n  iconName: 'clone',\n  icon: [512, 512, [], \"f24d\", \"M288 448L64 448l0-224 64 0 0-64-64 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-64-64 0 0 64zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z\"]\n};\nconst faPersonWalkingArrowLoopLeft = {\n  prefix: 'fas',\n  iconName: 'person-walking-arrow-loop-left',\n  icon: [640, 512, [], \"e551\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zm347.7 119c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L461.3 384l18.7 0c88.4 0 160-71.6 160-160s-71.6-160-160-160L352 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c53 0 96 43 96 96s-43 96-96 96l-18.7 0 25.4-25.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3l80 80z\"]\n};\nconst faArrowUpZA = {\n  prefix: 'fas',\n  iconName: 'arrow-up-z-a',\n  icon: [576, 512, [\"sort-alpha-up-alt\"], \"f882\", \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3 128 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 64c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L352 32c-17.7 0-32 14.3-32 32zm96 192c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 262.8 428.1 256 416 256zM395.8 400L416 359.6 436.2 400l-40.4 0z\"]\n};\nconst faSortAlphaUpAlt = faArrowUpZA;\nconst faFireFlameCurved = {\n  prefix: 'fas',\n  iconName: 'fire-flame-curved',\n  icon: [384, 512, [\"fire-alt\"], \"f7e4\", \"M153.6 29.9l16-21.3C173.6 3.2 180 0 186.7 0C198.4 0 208 9.6 208 21.3V43.5c0 13.1 5.4 25.7 14.9 34.7L307.6 159C356.4 205.6 384 270.2 384 337.7C384 434 306 512 209.7 512H192C86 512 0 426 0 320v-3.8c0-48.8 19.4-95.6 53.9-130.1l3.5-3.5c4.2-4.2 10-6.6 16-6.6C85.9 176 96 186.1 96 198.6V288c0 35.3 28.7 64 64 64s64-28.7 64-64v-3.9c0-18-7.2-35.3-19.9-48l-38.6-38.6c-24-24-37.5-56.7-37.5-90.7c0-27.7 9-54.8 25.6-76.9z\"]\n};\nconst faFireAlt = faFireFlameCurved;\nconst faTornado = {\n  prefix: 'fas',\n  iconName: 'tornado',\n  icon: [448, 512, [127786], \"f76f\", \"M0 32L0 45.6C0 62.7 1.7 79.6 5 96l352.8 0c3.2-6.9 7.5-13.3 13-18.8l38.6-38.6c4.2-4.2 6.6-10 6.6-16C416 10.1 405.9 0 393.4 0L32 0C14.3 0 0 14.3 0 32zm352.2 96L13.6 128c12.2 35.9 32.3 68.7 58.8 96L412 224l-47.2-62.9c-7.3-9.7-11.6-21.2-12.6-33.1zm-226 138.2l116.4 68.5c8.2 4.8 15.8 10.7 22.5 17.3L445 352c2-9.8 3-19.9 3-30.1c0-23-5.3-45.5-15.3-65.9l-322.5 0c5.2 3.6 10.5 7 16 10.2zM288 384c10.3 21.4 13.8 45.5 9.9 69l-5.9 35.7c-2 12.2 7.4 23.4 19.8 23.4c5.3 0 10.4-2.1 14.2-5.9l78.2-78.2c12.8-12.8 23.1-27.7 30.4-43.9L288 384z\"]\n};\nconst faFileCirclePlus = {\n  prefix: 'fas',\n  iconName: 'file-circle-plus',\n  icon: [576, 512, [58606], \"e494\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"]\n};\nconst faBookQuran = {\n  prefix: 'fas',\n  iconName: 'book-quran',\n  icon: [448, 512, [\"quran\"], \"f687\", \"M352 0c53 0 96 43 96 96l0 320c0 53-43 96-96 96L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0L64 0 352 0zm0 384L96 384l0 64 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zM274.1 150.2l-8.9 21.4-23.1 1.9c-5.7 .5-8 7.5-3.7 11.2L256 199.8l-5.4 22.6c-1.3 5.5 4.7 9.9 9.6 6.9L280 217.2l19.8 12.1c4.9 3 10.9-1.4 9.6-6.9L304 199.8l17.6-15.1c4.3-3.7 2-10.8-3.7-11.2l-23.1-1.9-8.9-21.4c-2.2-5.3-9.6-5.3-11.8 0zM96 192c0 70.7 57.3 128 128 128c25.6 0 49.5-7.5 69.5-20.5c3.2-2.1 4.5-6.2 3.1-9.7s-5.2-5.6-9-4.8c-6.1 1.2-12.5 1.9-19 1.9c-52.4 0-94.9-42.5-94.9-94.9s42.5-94.9 94.9-94.9c6.5 0 12.8 .7 19 1.9c3.8 .8 7.5-1.3 9-4.8s.2-7.6-3.1-9.7C273.5 71.5 249.6 64 224 64C153.3 64 96 121.3 96 192z\"]\n};\nconst faQuran = faBookQuran;\nconst faAnchor = {\n  prefix: 'fas',\n  iconName: 'anchor',\n  icon: [576, 512, [9875], \"f13d\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c88.4 0 160-71.6 160-160l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-56-56c-9.4-9.4-24.6-9.4-33.9 0l-56 56c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 53-43 96-96 96l-48 0 0-208 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0z\"]\n};\nconst faBorderAll = {\n  prefix: 'fas',\n  iconName: 'border-all',\n  icon: [448, 512, [], \"f84c\", \"M384 96l0 128-128 0 0-128 128 0zm0 192l0 128-128 0 0-128 128 0zM192 224L64 224 64 96l128 0 0 128zM64 288l128 0 0 128L64 416l0-128zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nconst faFaceAngry = {\n  prefix: 'fas',\n  iconName: 'face-angry',\n  icon: [512, 512, [128544, \"angry\"], \"f556\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM338.7 395.9c6.6-5.9 7.1-16 1.2-22.6C323.8 355.4 295.7 336 256 336s-67.8 19.4-83.9 37.3c-5.9 6.6-5.4 16.7 1.2 22.6s16.7 5.4 22.6-1.2c11.7-13 31.6-26.7 60.1-26.7s48.4 13.7 60.1 26.7c5.9 6.6 16 7.1 22.6 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nconst faAngry = faFaceAngry;\nconst faCookieBite = {\n  prefix: 'fas',\n  iconName: 'cookie-bite',\n  icon: [512, 512, [], \"f564\", \"M257.5 27.6c-.8-5.4-4.9-9.8-10.3-10.6c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9c-.9-5.3-5.3-9.3-10.6-10.1c-51.5-8.2-92.8-47.1-104.5-97.4c-1.8-7.6-8-13.4-15.7-14.6c-54.6-8.7-97.7-52-106.2-106.8zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faArrowTrendDown = {\n  prefix: 'fas',\n  iconName: 'arrow-trend-down',\n  icon: [576, 512, [], \"e097\", \"M384 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 82.7L342.6 137.4c-12.5-12.5-32.8-12.5-45.3 0L192 242.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0L320 205.3 466.7 352 384 352z\"]\n};\nconst faRss = {\n  prefix: 'fas',\n  iconName: 'rss',\n  icon: [448, 512, [\"feed\"], \"f09e\", \"M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faFeed = faRss;\nconst faDrawPolygon = {\n  prefix: 'fas',\n  iconName: 'draw-polygon',\n  icon: [448, 512, [], \"f5ee\", \"M96 151.4l0 209.1c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c0-.1 .1-.2 .1-.3l-4.5-7.9-32-56s0 0 0 0c-1.4 .1-2.8 .1-4.2 .1c-35.3 0-64-28.7-64-64s28.7-64 64-64c1.4 0 2.8 0 4.2 .1c0 0 0 0 0 0l32-56 4.5-7.9-.1-.3-209.1 0c-5.6 9.7-13.7 17.8-23.4 23.4zM384.3 352c35.2 .2 63.7 28.7 63.7 64c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-209.1C12.9 140.4 0 119.7 0 96C0 60.7 28.7 32 64 32c23.7 0 44.4 12.9 55.4 32l209.1 0c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 35.3-28.5 63.8-63.7 64l-4.5 7.9-32 56-2.3 4c4.2 8.5 6.5 18 6.5 28.1s-2.3 19.6-6.5 28.1l2.3 4 32 56 4.5 7.9z\"]\n};\nconst faScaleBalanced = {\n  prefix: 'fas',\n  iconName: 'scale-balanced',\n  icon: [640, 512, [9878, \"balance-scale\"], \"f24e\", \"M384 32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L398.4 96c-5.2 25.8-22.9 47.1-46.4 57.3L352 448l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-23.5-10.3-41.2-31.6-46.4-57.3L128 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0c14.6-19.4 37.8-32 64-32s49.4 12.6 64 32zm55.6 288l144.9 0L512 195.8 439.6 320zM512 416c-62.9 0-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C627.2 382 574.9 416 512 416zM126.8 195.8L54.4 320l144.9 0L126.8 195.8zM.9 337.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C242 382 189.7 416 126.8 416S11.7 382 .9 337.1z\"]\n};\nconst faBalanceScale = faScaleBalanced;\nconst faGaugeSimpleHigh = {\n  prefix: 'fas',\n  iconName: 'gauge-simple-high',\n  icon: [512, 512, [61668, \"tachometer\", \"tachometer-fast\"], \"f62a\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-15.9-5.8-30.4-15.3-41.6l76.6-147.4c6.1-11.8 1.5-26.3-10.2-32.4s-26.2-1.5-32.4 10.2L262.1 288.3c-2-.2-4-.3-6.1-.3c-35.3 0-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faTachometer = faGaugeSimpleHigh;\nconst faTachometerFast = faGaugeSimpleHigh;\nconst faShower = {\n  prefix: 'fas',\n  iconName: 'shower',\n  icon: [512, 512, [128703], \"f2cc\", \"M64 131.9C64 112.1 80.1 96 99.9 96c9.5 0 18.6 3.8 25.4 10.5l16.2 16.2c-21 38.9-17.4 87.5 10.9 123L151 247c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L345 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-1.3 1.3c-35.5-28.3-84.2-31.9-123-10.9L170.5 61.3C151.8 42.5 126.4 32 99.9 32C44.7 32 0 76.7 0 131.9L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-316.1zM256 352a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm32-32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faDesktop = {\n  prefix: 'fas',\n  iconName: 'desktop',\n  icon: [576, 512, [128421, 61704, \"desktop-alt\"], \"f390\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l176 0-10.7 32L160 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-69.3 0L336 416l176 0c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0zM512 64l0 224L64 288 64 64l448 0z\"]\n};\nconst faDesktopAlt = faDesktop;\nconst faM = {\n  prefix: 'fas',\n  iconName: 'm',\n  icon: [448, 512, [109], \"4d\", \"M22.7 33.4c13.5-4.1 28.1 1.1 35.9 12.9L224 294.3 389.4 46.3c7.8-11.7 22.4-17 35.9-12.9S448 49.9 448 64l0 384c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-278.3L250.6 369.8c-5.9 8.9-15.9 14.2-26.6 14.2s-20.7-5.3-26.6-14.2L64 169.7 64 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 49.9 9.2 37.5 22.7 33.4z\"]\n};\nconst faTableList = {\n  prefix: 'fas',\n  iconName: 'table-list',\n  icon: [512, 512, [\"th-list\"], \"f00b\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 0l0 64 64 0 0-64L64 96zm384 0L192 96l0 64 256 0 0-64zM64 224l0 64 64 0 0-64-64 0zm384 0l-256 0 0 64 256 0 0-64zM64 352l0 64 64 0 0-64-64 0zm384 0l-256 0 0 64 256 0 0-64z\"]\n};\nconst faThList = faTableList;\nconst faCommentSms = {\n  prefix: 'fas',\n  iconName: 'comment-sms',\n  icon: [512, 512, [\"sms\"], \"f7cd\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM96 212.8c0-20.3 16.5-36.8 36.8-36.8l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-2.7 0-4.8 2.2-4.8 4.8c0 1.6 .8 3.1 2.2 4l29.4 19.6c10.3 6.8 16.4 18.3 16.4 30.7c0 20.3-16.5 36.8-36.8 36.8L112 304c-8.8 0-16-7.2-16-16s7.2-16 16-16l27.2 0c2.7 0 4.8-2.2 4.8-4.8c0-1.6-.8-3.1-2.2-4l-29.4-19.6C102.2 236.7 96 225.2 96 212.8zM372.8 176l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-2.7 0-4.8 2.2-4.8 4.8c0 1.6 .8 3.1 2.2 4l29.4 19.6c10.2 6.8 16.4 18.3 16.4 30.7c0 20.3-16.5 36.8-36.8 36.8L352 304c-8.8 0-16-7.2-16-16s7.2-16 16-16l27.2 0c2.7 0 4.8-2.2 4.8-4.8c0-1.6-.8-3.1-2.2-4l-29.4-19.6c-10.2-6.8-16.4-18.3-16.4-30.7c0-20.3 16.5-36.8 36.8-36.8zm-152 6.4L256 229.3l35.2-46.9c4.1-5.5 11.3-7.8 17.9-5.6s10.9 8.3 10.9 15.2l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-19.2 25.6c-3 4-7.8 6.4-12.8 6.4s-9.8-2.4-12.8-6.4L224 240l0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-6.9 4.4-13 10.9-15.2s13.7 .1 17.9 5.6z\"]\n};\nconst faSms = faCommentSms;\nconst faBook = {\n  prefix: 'fas',\n  iconName: 'book',\n  icon: [448, 512, [128212], \"f02d\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16zm16 48l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faUserPlus = {\n  prefix: 'fas',\n  iconName: 'user-plus',\n  icon: [640, 512, [], \"f234\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM504 312l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nconst faCheck = {\n  prefix: 'fas',\n  iconName: 'check',\n  icon: [448, 512, [10003, 10004], \"f00c\", \"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\"]\n};\nconst faBatteryThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'battery-three-quarters',\n  icon: [576, 512, [\"battery-4\"], \"f241\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm272 96L96 192l0 128 256 0 0-128z\"]\n};\nconst faBattery4 = faBatteryThreeQuarters;\nconst faHouseCircleCheck = {\n  prefix: 'fas',\n  iconName: 'house-circle-check',\n  icon: [640, 512, [], \"e509\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faAngleLeft = {\n  prefix: 'fas',\n  iconName: 'angle-left',\n  icon: [320, 512, [8249], \"f104\", \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"]\n};\nconst faDiagramSuccessor = {\n  prefix: 'fas',\n  iconName: 'diagram-successor',\n  icon: [512, 512, [], \"e47a\", \"M512 416l0-64c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64zM64 160l0-64 144 0 16 0 0 64L64 160zm224 0l0-64 80 0c8.8 0 16 7.2 16 16l0 16-38.1 0c-21.4 0-32.1 25.9-17 41L399 239c9.4 9.4 24.6 9.4 33.9 0L503 169c15.1-15.1 4.4-41-17-41L448 128l0-16c0-44.2-35.8-80-80-80L224 32l-16 0L64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64z\"]\n};\nconst faTruckArrowRight = {\n  prefix: 'fas',\n  iconName: 'truck-arrow-right',\n  icon: [640, 512, [], \"e58b\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM257 95c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39L96 168c-13.3 0-24 10.7-24 24s10.7 24 24 24l166.1 0-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9L257 95z\"]\n};\nconst faArrowsSplitUpAndLeft = {\n  prefix: 'fas',\n  iconName: 'arrows-split-up-and-left',\n  icon: [512, 512, [], \"e4bc\", \"M246.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L352 109.3 352 384c0 35.3 28.7 64 64 64l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-70.7 0-128-57.3-128-128c0-35.3-28.7-64-64-64l-114.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 256 224 256c23.3 0 45.2 6.2 64 17.1l0-163.9-41.4 41.4z\"]\n};\nconst faHandFist = {\n  prefix: 'fas',\n  iconName: 'hand-fist',\n  icon: [448, 512, [9994, \"fist-raised\"], \"f6de\", \"M192 0c17.7 0 32 14.3 32 32l0 112-64 0 0-112c0-17.7 14.3-32 32-32zM64 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 80-64 0 0-80zm192 0c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96zm96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 52.3-25.1 98.8-64 128l0 96c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-78.4c-17.3-7.9-33.2-18.8-46.9-32.5L69.5 357.5C45.5 333.5 32 300.9 32 267l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"]\n};\nconst faFistRaised = faHandFist;\nconst faCloudMoon = {\n  prefix: 'fas',\n  iconName: 'cloud-moon',\n  icon: [640, 512, [], \"f6c3\", \"M495.8 0c5.5 0 10.9 .2 16.3 .7c7 .6 12.8 5.7 14.3 12.5s-1.6 13.9-7.7 17.3c-44.4 25.2-74.4 73-74.4 127.8c0 81 65.5 146.6 146.2 146.6c8.6 0 17-.7 25.1-2.1c6.9-1.2 13.8 2.2 17 8.5s1.9 13.8-3.1 18.7c-34.5 33.6-81.7 54.4-133.6 54.4c-9.3 0-18.4-.7-27.4-1.9c-11.2-22.6-29.8-40.9-52.6-51.7c-2.7-58.5-50.3-105.3-109.2-106.7c-1.7-10.4-2.6-21-2.6-31.8C304 86.1 389.8 0 495.8 0zM447.9 431.9c0 44.2-35.8 80-80 80L96 511.9c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"]\n};\nconst faBriefcase = {\n  prefix: 'fas',\n  iconName: 'briefcase',\n  icon: [512, 512, [128188], \"f0b1\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160l0 96 192 0 128 0 192 0 0-96c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM512 288l-192 0 0 32c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-32L0 288 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-128z\"]\n};\nconst faPersonFalling = {\n  prefix: 'fas',\n  iconName: 'person-falling',\n  icon: [512, 512, [], \"e546\", \"M288 0c17.7 0 32 14.3 32 32l0 9.8c0 54.6-27.9 104.6-72.5 133.6l.2 .3L304.5 256l87.5 0c15.1 0 29.3 7.1 38.4 19.2l43.2 57.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4L384 320l-96 0-1.4 0 92.3 142.6c9.6 14.8 5.4 34.6-9.5 44.3s-34.6 5.4-44.3-9.5L164.5 249.2c-2.9 9.2-4.5 19-4.5 29l0 73.8c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-73.8c0-65.1 39.6-123.7 100.1-147.9C232.3 115.8 256 80.8 256 41.8l0-9.8c0-17.7 14.3-32 32-32zM112 32a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faImagePortrait = {\n  prefix: 'fas',\n  iconName: 'image-portrait',\n  icon: [384, 512, [\"portrait\"], \"f3e0\", \"M384 64c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384zM128 192a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 356.6c0-37.9 30.7-68.6 68.6-68.6l86.9 0c37.9 0 68.6 30.7 68.6 68.6c0 15.1-12.3 27.4-27.4 27.4l-169.1 0C92.3 384 80 371.7 80 356.6z\"]\n};\nconst faPortrait = faImagePortrait;\nconst faUserTag = {\n  prefix: 'fas',\n  iconName: 'user-tag',\n  icon: [640, 512, [], \"f507\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c10 0 18.8-4.9 24.2-12.5l-99.2-99.2c-14.9-14.9-23.3-35.1-23.3-56.1l0-33c-15.9-4.7-32.8-7.2-50.3-7.2l-91.4 0zM384 224c-17.7 0-32 14.3-32 32l0 82.7c0 17 6.7 33.3 18.7 45.3L478.1 491.3c18.7 18.7 49.1 18.7 67.9 0l73.4-73.4c18.7-18.7 18.7-49.1 0-67.9L512 242.7c-12-12-28.3-18.7-45.3-18.7L384 224zm24 80a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faRug = {\n  prefix: 'fas',\n  iconName: 'rug',\n  icon: [640, 512, [], \"e569\", \"M24 64l32 0 24 0 0 24 0 88 0 80 0 80 0 88 0 24-24 0-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0C10.7 112 0 101.3 0 88S10.7 64 24 64zm88 0l416 0 0 384-416 0 0-384zM640 88c0 13.3-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0-24 0 0-24 0-88 0-80 0-80 0-88 0-24 24 0 32 0c13.3 0 24 10.7 24 24z\"]\n};\nconst faEarthEurope = {\n  prefix: 'fas',\n  iconName: 'earth-europe',\n  icon: [512, 512, [\"globe-europe\"], \"f7a2\", \"M266.3 48.3L232.5 73.6c-5.4 4-8.5 10.4-8.5 17.1l0 9.1c0 6.8 5.5 12.3 12.3 12.3c2.4 0 4.8-.7 6.8-2.1l41.8-27.9c2-1.3 4.4-2.1 6.8-2.1l1 0c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8l-19.9 19.9c-5.8 5.8-12.9 10.2-20.7 12.8l-26.5 8.8c-5.8 1.9-9.6 7.3-9.6 13.4c0 3.7-1.5 7.3-4.1 10l-17.9 17.9c-6.4 6.4-9.9 15-9.9 24l0 4.3c0 16.4 13.6 29.7 29.9 29.7c11 0 21.2-6.2 26.1-16l4-8.1c2.4-4.8 7.4-7.9 12.8-7.9c4.5 0 8.7 2.1 11.4 5.7l16.3 21.7c2.1 2.9 5.5 4.5 9.1 4.5c8.4 0 13.9-8.9 10.1-16.4l-1.1-2.3c-3.5-7 0-15.5 7.5-18l21.2-7.1c7.6-2.5 12.7-9.6 12.7-17.6c0-10.3 8.3-18.6 18.6-18.6l29.4 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-20.7 0c-7.2 0-14.2 2.9-19.3 8l-4.7 4.7c-2.1 2.1-3.3 5-3.3 8c0 6.2 5.1 11.3 11.3 11.3l11.3 0c6 0 11.8 2.4 16 6.6l6.5 6.5c1.8 1.8 2.8 4.3 2.8 6.8s-1 5-2.8 6.8l-7.5 7.5C386 262 384 266.9 384 272s2 10 5.7 13.7L408 304c10.2 10.2 24.1 16 38.6 16l7.3 0c6.5-20.2 10-41.7 10-64c0-111.4-87.6-202.4-197.7-207.7zm172 307.9c-3.7-2.6-8.2-4.1-13-4.1c-6 0-11.8-2.4-16-6.6L396 332c-7.7-7.7-18-12-28.9-12c-9.7 0-19.2-3.5-26.6-9.8L314 287.4c-11.6-9.9-26.4-15.4-41.7-15.4l-20.9 0c-12.6 0-25 3.7-35.5 10.7L188.5 301c-17.8 11.9-28.5 31.9-28.5 53.3l0 3.2c0 17 6.7 33.3 18.7 45.3l16 16c8.5 8.5 20 13.3 32 13.3l21.3 0c13.3 0 24 10.7 24 24c0 2.5 .4 5 1.1 7.3c71.3-5.8 132.5-47.6 165.2-107.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM187.3 100.7c-6.2-6.2-16.4-6.2-22.6 0l-32 32c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l32-32c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faGlobeEurope = faEarthEurope;\nconst faCartFlatbedSuitcase = {\n  prefix: 'fas',\n  iconName: 'cart-flatbed-suitcase',\n  icon: [640, 512, [\"luggage-cart\"], \"f59d\", \"M0 32C0 14.3 14.3 0 32 0L48 0c44.2 0 80 35.8 80 80l0 288c0 8.8 7.2 16 16 16l464 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-66.7 0c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16l-197.5 0c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16L144 448c-44.2 0-80-35.8-80-80L64 80c0-8.8-7.2-16-16-16L32 64C14.3 64 0 49.7 0 32zM432 96l0-40c0-4.4-3.6-8-8-8l-80 0c-4.4 0-8 3.6-8 8l0 40 96 0zM288 96l0-40c0-30.9 25.1-56 56-56l80 0c30.9 0 56 25.1 56 56l0 40 0 224-192 0 0-224zM512 320l0-224 16 0c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48l-16 0zM240 96l16 0 0 224-16 0c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48z\"]\n};\nconst faLuggageCart = faCartFlatbedSuitcase;\nconst faRectangleXmark = {\n  prefix: 'fas',\n  iconName: 'rectangle-xmark',\n  icon: [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faRectangleTimes = faRectangleXmark;\nconst faTimesRectangle = faRectangleXmark;\nconst faWindowClose = faRectangleXmark;\nconst faBahtSign = {\n  prefix: 'fas',\n  iconName: 'baht-sign',\n  icon: [320, 512, [], \"e0ac\", \"M144 0c-17.7 0-32 14.3-32 32l0 32L37.6 64C16.8 64 0 80.8 0 101.6L0 224l0 41.7L0 288 0 406.3c0 23 18.7 41.7 41.7 41.7l70.3 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c61.9 0 112-50.1 112-112c0-40.1-21.1-75.3-52.7-95.1C280.3 222.6 288 200.2 288 176c0-61.9-50.1-112-112-112l0-32c0-17.7-14.3-32-32-32zM112 128l0 96-48 0 0-96 48 0zm64 96l0-96c26.5 0 48 21.5 48 48s-21.5 48-48 48zm-64 64l0 96-48 0 0-96 48 0zm64 96l0-96 32 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-32 0z\"]\n};\nconst faBookOpen = {\n  prefix: 'fas',\n  iconName: 'book-open',\n  icon: [576, 512, [128214, 128366], \"f518\", \"M249.6 471.5c10.8 3.8 22.4-4.1 22.4-15.5l0-377.4c0-4.2-1.6-8.4-5-11C247.4 52 202.4 32 144 32C93.5 32 46.3 45.3 18.1 56.1C6.8 60.5 0 71.7 0 83.8L0 454.1c0 11.9 12.8 20.2 24.1 16.5C55.6 460.1 105.5 448 144 448c33.9 0 79 14 105.6 23.5zm76.8 0C353 462 398.1 448 432 448c38.5 0 88.4 12.1 119.9 22.6c11.3 3.8 24.1-4.6 24.1-16.5l0-370.3c0-12.1-6.8-23.3-18.1-27.6C529.7 45.3 482.5 32 432 32c-58.4 0-103.4 20-123 35.6c-3.3 2.6-5 6.8-5 11L304 456c0 11.4 11.7 19.3 22.4 15.5z\"]\n};\nconst faBookJournalWhills = {\n  prefix: 'fas',\n  iconName: 'book-journal-whills',\n  icon: [448, 512, [\"journal-whills\"], \"f66a\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zm90.4-234.4l-21.2-21.2c-3 10.1-5.1 20.6-5.1 31.6c0 .2 0 .5 .1 .8s.1 .5 .1 .8L165.2 226c2.5 2.1 3.4 5.8 2.3 8.9c-1.3 3-4.1 5.1-7.5 5.1c-1.9-.1-3.8-.8-5.2-2l-23.6-20.6C142.8 267 186.9 304 240 304s97.3-37 108.9-86.6L325.3 238c-1.4 1.2-3.3 2-5.3 2c-2.2-.1-4.4-1.1-6-2.8c-1.2-1.5-1.9-3.4-2-5.2c.1-2.2 1.1-4.4 2.8-6l37.1-32.5c0-.3 0-.5 .1-.8s.1-.5 .1-.8c0-11-2.1-21.5-5.1-31.6l-21.2 21.2c-3.1 3.1-8.1 3.1-11.3 0s-3.1-8.1 0-11.2l26.4-26.5c-8.2-17-20.5-31.7-35.9-42.6c-2.7-1.9-6.2 1.4-5 4.5c8.5 22.4 3.6 48-13 65.6c-3.2 3.4-3.6 8.9-.9 12.7c9.8 14 12.7 31.9 7.5 48.5c-5.9 19.4-22 34.1-41.9 38.3l-1.4-34.3 12.6 8.6c.6 .4 1.5 .6 2.3 .6c1.5 0 2.7-.8 3.5-2s.6-2.8-.1-4L260 225.4l18-3.6c1.8-.4 3.1-2.1 3.1-4s-1.4-3.5-3.1-3.9l-18-3.7 8.5-14.3c.8-1.2 .9-2.9 .1-4.1s-2-2-3.5-2l-.1 0c-.7 .1-1.5 .3-2.1 .7l-14.1 9.6L244 87.9c-.1-2.2-1.9-3.9-4-3.9s-3.9 1.6-4 3.9l-4.6 110.8-12-8.1c-1.5-1.1-3.6-.9-5 .4s-1.6 3.4-.8 5l8.6 14.3-18 3.7c-1.8 .4-3.1 2-3.1 3.9s1.4 3.6 3.1 4l18 3.8-8.6 14.2c-.2 .6-.5 1.4-.5 2c0 1.1 .5 2.1 1.2 3c.8 .6 1.8 1 2.8 1c.7 0 1.6-.2 2.2-.6l10.4-7.1-1.4 32.8c-19.9-4.1-36-18.9-41.9-38.3c-5.1-16.6-2.2-34.4 7.6-48.5c2.7-3.9 2.3-9.3-.9-12.7c-16.6-17.5-21.6-43.1-13.1-65.5c1.2-3.1-2.3-6.4-5-4.5c-15.3 10.9-27.6 25.6-35.8 42.6l26.4 26.5c3.1 3.1 3.1 8.1 0 11.2s-8.1 3.1-11.2 0z\"]\n};\nconst faJournalWhills = faBookJournalWhills;\nconst faHandcuffs = {\n  prefix: 'fas',\n  iconName: 'handcuffs',\n  icon: [640, 512, [], \"e4f8\", \"M240 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM192 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32 80c17.7 0 32 14.3 32 32l8 0c13.3 0 24 10.7 24 24l0 16c0 1.7-.2 3.4-.5 5.1C280.3 229.6 320 286.2 320 352c0 88.4-71.6 160-160 160S0 440.4 0 352c0-65.8 39.7-122.4 96.5-146.9c-.4-1.6-.5-3.3-.5-5.1l0-16c0-13.3 10.7-24 24-24l8 0c0-17.7 14.3-32 32-32zm0 320a96 96 0 1 0 0-192 96 96 0 1 0 0 192zm192-96c0-25.9-5.1-50.5-14.4-73.1c16.9-32.9 44.8-59.1 78.9-73.9c-.4-1.6-.5-3.3-.5-5.1l0-16c0-13.3 10.7-24 24-24l8 0c0-17.7 14.3-32 32-32s32 14.3 32 32l8 0c13.3 0 24 10.7 24 24l0 16c0 1.7-.2 3.4-.5 5.1C600.3 229.6 640 286.2 640 352c0 88.4-71.6 160-160 160c-62 0-115.8-35.3-142.4-86.9c9.3-22.5 14.4-47.2 14.4-73.1zm224 0a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zM368 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm80 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faTriangleExclamation = {\n  prefix: 'fas',\n  iconName: 'triangle-exclamation',\n  icon: [512, 512, [9888, \"exclamation-triangle\", \"warning\"], \"f071\", \"M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faExclamationTriangle = faTriangleExclamation;\nconst faWarning = faTriangleExclamation;\nconst faDatabase = {\n  prefix: 'fas',\n  iconName: 'database',\n  icon: [448, 512, [], \"f1c0\", \"M448 80l0 48c0 44.2-100.3 80-224 80S0 172.2 0 128L0 80C0 35.8 100.3 0 224 0S448 35.8 448 80zM393.2 214.7c20.8-7.4 39.9-16.9 54.8-28.6L448 288c0 44.2-100.3 80-224 80S0 332.2 0 288L0 186.1c14.9 11.8 34 21.2 54.8 28.6C99.7 230.7 159.5 240 224 240s124.3-9.3 169.2-25.3zM0 346.1c14.9 11.8 34 21.2 54.8 28.6C99.7 390.7 159.5 400 224 400s124.3-9.3 169.2-25.3c20.8-7.4 39.9-16.9 54.8-28.6l0 85.9c0 44.2-100.3 80-224 80S0 476.2 0 432l0-85.9z\"]\n};\nconst faShare = {\n  prefix: 'fas',\n  iconName: 'share',\n  icon: [512, 512, [\"mail-forward\"], \"f064\", \"M307 34.8c-11.5 5.1-19 16.6-19 29.2l0 64-112 0C78.8 128 0 206.8 0 304C0 417.3 81.5 467.9 100.2 478.1c2.5 1.4 5.3 1.9 8.1 1.9c10.9 0 19.7-8.9 19.7-19.7c0-7.5-4.3-14.4-9.8-19.5C108.8 431.9 96 414.4 96 384c0-53 43-96 96-96l96 0 0 64c0 12.6 7.4 24.1 19 29.2s25 3 34.4-5.4l160-144c6.7-6.1 10.6-14.7 10.6-23.8s-3.8-17.7-10.6-23.8l-160-144c-9.4-8.5-22.9-10.6-34.4-5.4z\"]\n};\nconst faMailForward = faShare;\nconst faBottleDroplet = {\n  prefix: 'fas',\n  iconName: 'bottle-droplet',\n  icon: [320, 512, [], \"e4c4\", \"M96 0C82.7 0 72 10.7 72 24s10.7 24 24 24c4.4 0 8 3.6 8 8l0 64.9c0 12.2-7.2 23.1-17.2 30.1C53.7 174.1 32 212.5 32 256l0 192c0 35.3 28.7 64 64 64l128 0c35.3 0 64-28.7 64-64l0-192c0-43.5-21.7-81.9-54.8-105c-10-7-17.2-17.9-17.2-30.1L216 56c0-4.4 3.6-8 8-8c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0s0 0 0 0s0 0 0 0L104 0s0 0 0 0s0 0 0 0L96 0zm64 382c-26.5 0-48-20.1-48-45c0-16.8 22.1-48.1 36.3-66.4c6-7.8 17.5-7.8 23.5 0C185.9 288.9 208 320.2 208 337c0 24.9-21.5 45-48 45z\"]\n};\nconst faMaskFace = {\n  prefix: 'fas',\n  iconName: 'mask-face',\n  icon: [640, 512, [], \"e1d7\", \"M320 64c-27.2 0-53.8 8-76.4 23.1l-37.1 24.8c-15.8 10.5-34.3 16.1-53.3 16.1l-9.2 0-16 0-72 0c-30.9 0-56 25.1-56 56l0 85c0 55.1 37.5 103.1 90.9 116.4l108 27C233.8 435 275.4 448 320 448s86.2-13 121.1-35.5l108-27C602.5 372.1 640 324.1 640 269l0-85c0-30.9-25.1-56-56-56l-72 0-16 0-9.2 0c-19 0-37.5-5.6-53.3-16.1L396.4 87.1C373.8 72 347.2 64 320 64zM132.3 346.3l-29.8-7.4C70.5 330.9 48 302.1 48 269l0-85c0-4.4 3.6-8 8-8l40 0 0 48c0 45.1 13.4 87.2 36.3 122.3zm405.1-7.4l-29.8 7.4c23-35.2 36.3-77.2 36.3-122.3l0-48 40 0c4.4 0 8 3.6 8 8l0 85c0 33-22.5 61.8-54.5 69.9zM192 208c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16zm16 48l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 80c0-8.8 7.2-16 16-16l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faHillRockslide = {\n  prefix: 'fas',\n  iconName: 'hill-rockslide',\n  icon: [576, 512, [], \"e508\", \"M252.4 103.8l27 48c2.8 5 8.2 8.2 13.9 8.2l53.3 0c5.8 0 11.1-3.1 13.9-8.2l27-48c2.7-4.9 2.7-10.8 0-15.7l-27-48c-2.8-5-8.2-8.2-13.9-8.2l-53.3 0c-5.8 0-11.1 3.1-13.9 8.2l-27 48c-2.7 4.9-2.7 10.8 0 15.7zM68.3 87C43.1 61.8 0 79.7 0 115.3L0 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.3 87zM504.2 403.6c4.9 2.7 10.8 2.7 15.7 0l48-27c5-2.8 8.2-8.2 8.2-13.9l0-53.3c0-5.8-3.1-11.1-8.2-13.9l-48-27c-4.9-2.7-10.8-2.7-15.7 0l-48 27c-5 2.8-8.2 8.2-8.2 13.9l0 53.3c0 5.8 3.1 11.1 8.2 13.9l48 27zM192 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faRightLeft = {\n  prefix: 'fas',\n  iconName: 'right-left',\n  icon: [512, 512, [\"exchange-alt\"], \"f362\", \"M32 96l320 0 0-64c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-64L32 160c-17.7 0-32-14.3-32-32s14.3-32 32-32zM480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-320 0 0 64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-96-96c-6-6-9.4-14.1-9.4-22.6s3.4-16.6 9.4-22.6l96-96c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 64 320 0z\"]\n};\nconst faExchangeAlt = faRightLeft;\nconst faPaperPlane = {\n  prefix: 'fas',\n  iconName: 'paper-plane',\n  icon: [512, 512, [61913], \"f1d8\", \"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480l0-83.6c0-4 1.5-7.8 4.2-10.8L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"]\n};\nconst faRoadCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'road-circle-exclamation',\n  icon: [640, 512, [], \"e565\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faDungeon = {\n  prefix: 'fas',\n  iconName: 'dungeon',\n  icon: [512, 512, [], \"f6d9\", \"M336.6 156.5c1.3 1.1 2.7 2.2 3.9 3.3c9.3 8.2 23 10.5 33.4 3.6l67.6-45.1c11.4-7.6 14.2-23.2 5.1-33.4C430 66.6 410.9 50.6 389.7 37.6c-11.9-7.3-26.9-1.4-32.1 11.6l-30.5 76.2c-4.5 11.1 .2 23.6 9.5 31.2zM328 36.8c5.1-12.8-1.6-27.4-15-30.5C294.7 2.2 275.6 0 256 0s-38.7 2.2-57 6.4C185.5 9.4 178.8 24 184 36.8l30.3 75.8c4.5 11.3 16.8 17.2 29 16c4.2-.4 8.4-.6 12.7-.6s8.6 .2 12.7 .6c12.1 1.2 24.4-4.7 29-16L328 36.8zM65.5 85c-9.1 10.2-6.3 25.8 5.1 33.4l67.6 45.1c10.3 6.9 24.1 4.6 33.4-3.6c1.3-1.1 2.6-2.3 4-3.3c9.3-7.5 13.9-20.1 9.5-31.2L154.4 49.2c-5.2-12.9-20.3-18.8-32.1-11.6C101.1 50.6 82 66.6 65.5 85zm314 137.1c.9 3.3 1.7 6.6 2.3 10c2.5 13 13 23.9 26.2 23.9l80 0c13.3 0 24.1-10.8 22.9-24c-2.5-27.2-9.3-53.2-19.7-77.3c-5.5-12.9-21.4-16.6-33.1-8.9l-68.6 45.7c-9.8 6.5-13.2 19.2-10 30.5zM53.9 145.8c-11.6-7.8-27.6-4-33.1 8.9C10.4 178.8 3.6 204.8 1.1 232c-1.2 13.2 9.6 24 22.9 24l80 0c13.3 0 23.8-10.8 26.2-23.9c.6-3.4 1.4-6.7 2.3-10c3.1-11.4-.2-24-10-30.5L53.9 145.8zM104 288l-80 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24zm304 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zM24 416c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zm384 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zM272 192c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 272c0 8.8 7.2 16 16 16s16-7.2 16-16l0-272zm-64 32c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 240c0 8.8 7.2 16 16 16s16-7.2 16-16l0-240zm128 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 240c0 8.8 7.2 16 16 16s16-7.2 16-16l0-240z\"]\n};\nconst faAlignRight = {\n  prefix: 'fas',\n  iconName: 'align-right',\n  icon: [448, 512, [], \"f038\", \"M448 64c0 17.7-14.3 32-32 32L192 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faMoneyBill1Wave = {\n  prefix: 'fas',\n  iconName: 'money-bill-1-wave',\n  icon: [576, 512, [\"money-bill-wave-alt\"], \"f53b\", \"M0 112.5L0 422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4l0-309.9c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM128 416l-64 0 0-64c35.3 0 64 28.7 64 64zM64 224l0-64 64 0c0 35.3-28.7 64-64 64zM448 352c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM384 256c0 61.9-43 112-96 112s-96-50.1-96-112s43-112 96-112s96 50.1 96 112zM252 208c0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l24 0 24 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20z\"]\n};\nconst faMoneyBillWaveAlt = faMoneyBill1Wave;\nconst faLifeRing = {\n  prefix: 'fas',\n  iconName: 'life-ring',\n  icon: [512, 512, [], \"f1cd\", \"M367.2 412.5C335.9 434.9 297.5 448 256 448s-79.9-13.1-111.2-35.5l58-58c15.8 8.6 34 13.5 53.3 13.5s37.4-4.9 53.3-13.5l58 58zm90.7 .8c33.8-43.4 54-98 54-157.3s-20.2-113.9-54-157.3c9-12.5 7.9-30.1-3.4-41.3S425.8 45 413.3 54C369.9 20.2 315.3 0 256 0S142.1 20.2 98.7 54c-12.5-9-30.1-7.9-41.3 3.4S45 86.2 54 98.7C20.2 142.1 0 196.7 0 256s20.2 113.9 54 157.3c-9 12.5-7.9 30.1 3.4 41.3S86.2 467 98.7 458c43.4 33.8 98 54 157.3 54s113.9-20.2 157.3-54c12.5 9 30.1 7.9 41.3-3.4s12.4-28.8 3.4-41.3zm-45.5-46.1l-58-58c8.6-15.8 13.5-34 13.5-53.3s-4.9-37.4-13.5-53.3l58-58C434.9 176.1 448 214.5 448 256s-13.1 79.9-35.5 111.2zM367.2 99.5l-58 58c-15.8-8.6-34-13.5-53.3-13.5s-37.4 4.9-53.3 13.5l-58-58C176.1 77.1 214.5 64 256 64s79.9 13.1 111.2 35.5zM157.5 309.3l-58 58C77.1 335.9 64 297.5 64 256s13.1-79.9 35.5-111.2l58 58c-8.6 15.8-13.5 34-13.5 53.3s4.9 37.4 13.5 53.3zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nconst faHands = {\n  prefix: 'fas',\n  iconName: 'hands',\n  icon: [576, 512, [\"sign-language\", \"signing\"], \"f2a7\", \"M544 160l-.1 72.6c-.1 52.2-24 101-64 133.1c.1-1.9 .1-3.8 .1-5.7l0-8c0-71.8-37-138.6-97.9-176.7l-60.2-37.6c-8.6-5.4-17.9-8.4-27.3-9.4L248.7 48.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8l78 135.1c3.3 5.7 10.7 7.7 16.4 4.4s7.7-10.7 4.4-16.4l-62-107.4c-6.6-11.5-2.7-26.2 8.8-32.8S362 5 368.6 16.5l68 117.8s0 0 0 0s0 0 0 0l43.3 75L480 160c0-17.7 14.4-32 32-32s32 14.4 32 32zM243.9 88.5L268.5 131c-13.9 4.5-26.4 13.7-34.7 27c-.9 1.4-1.7 2.9-2.5 4.4l-28.9-50c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zm-46.4 63.7l26.8 46.4c.6 6 2.1 11.8 4.3 17.4l-4.7 0-13.3 0s0 0 0 0L179 216l-23-39.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zM260.9 175c9.4-15 29.1-19.5 44.1-10.2l60.2 37.6C416.7 234.7 448 291.2 448 352l0 8c0 83.9-68.1 152-152 152l-176 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l92 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L88 440c-13.3 0-24-10.7-24-24s10.7-24 24-24l124 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L56 368c-13.3 0-24-10.7-24-24s10.7-24 24-24l156 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L88 296c-13.3 0-24-10.7-24-24s10.7-24 24-24l136 0s0 0 0 0s0 0 0 0l93.2 0L271 219.1c-15-9.4-19.5-29.1-10.2-44.1z\"]\n};\nconst faSignLanguage = faHands;\nconst faSigning = faHands;\nconst faCalendarDay = {\n  prefix: 'fas',\n  iconName: 'calendar-day',\n  icon: [448, 512, [], \"f783\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm80 64c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16l-96 0z\"]\n};\nconst faWaterLadder = {\n  prefix: 'fas',\n  iconName: 'water-ladder',\n  icon: [576, 512, [\"ladder-water\", \"swimming-pool\"], \"f5c5\", \"M128 127.7C128 74.9 170.9 32 223.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7l0 96.3 192 0 0-96.3C384 74.9 426.9 32 479.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7L448 361c-1.6 1-3.3 2-4.8 3.1c-18 12.4-40.1 20.3-59.2 20.3c0 0 0 0 0 0l0-96.5-192 0 0 96.5c-19 0-41.2-7.9-59.1-20.3c-1.6-1.1-3.2-2.2-4.9-3.1l0-233.3zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faLadderWater = faWaterLadder;\nconst faSwimmingPool = faWaterLadder;\nconst faArrowsUpDown = {\n  prefix: 'fas',\n  iconName: 'arrows-up-down',\n  icon: [320, 512, [\"arrows-v\"], \"f07d\", \"M182.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L128 109.3l0 293.5L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7l0-293.5 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\"]\n};\nconst faArrowsV = faArrowsUpDown;\nconst faFaceGrimace = {\n  prefix: 'fas',\n  iconName: 'face-grimace',\n  icon: [512, 512, [128556, \"grimace\"], \"f57f\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm96-112l-8 0 0-40 55.3 0c-3.8 22.7-23.6 40-47.3 40zm47.3-56L344 344l0-40 8 0c23.8 0 43.5 17.3 47.3 40zM328 344l-64 0 0-40 64 0 0 40zm0 56l-64 0 0-40 64 0 0 40zm-80-96l0 40-64 0 0-40 64 0zm0 56l0 40-64 0 0-40 64 0zm-80-16l-55.3 0c3.8-22.7 23.6-40 47.3-40l8 0 0 40zm0 56l-8 0c-23.8 0-43.5-17.3-47.3-40l55.3 0 0 40zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrimace = faFaceGrimace;\nconst faWheelchairMove = {\n  prefix: 'fas',\n  iconName: 'wheelchair-move',\n  icon: [448, 512, [\"wheelchair-alt\"], \"e2ce\", \"M320 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM204.5 121.3c-5.4-2.5-11.7-1.9-16.4 1.7l-40.9 30.7c-14.1 10.6-34.2 7.7-44.8-6.4s-7.7-34.2 6.4-44.8l40.9-30.7c23.7-17.8 55.3-21 82.1-8.4l90.4 42.5c29.1 13.7 36.8 51.6 15.2 75.5L299.1 224l97.4 0c30.3 0 53 27.7 47.1 57.4L415.4 422.3c-3.5 17.3-20.3 28.6-37.7 25.1s-28.6-20.3-25.1-37.7L377 288l-70.3 0c8.6 19.6 13.3 41.2 13.3 64c0 88.4-71.6 160-160 160S0 440.4 0 352s71.6-160 160-160c11.1 0 22 1.1 32.4 3.3l54.2-54.2-42.1-19.8zM160 448a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nconst faWheelchairAlt = faWheelchairMove;\nconst faTurnDown = {\n  prefix: 'fas',\n  iconName: 'turn-down',\n  icon: [384, 512, [10549, \"level-down-alt\"], \"f3be\", \"M350 334.5c3.8 8.8 2 19-4.6 26l-136 144c-4.5 4.8-10.8 7.5-17.4 7.5s-12.9-2.7-17.4-7.5l-136-144c-6.6-7-8.4-17.2-4.6-26s12.5-14.5 22-14.5l88 0 0-192c0-17.7-14.3-32-32-32L32 96C14.3 96 0 81.7 0 64L0 32C0 14.3 14.3 0 32 0l80 0c70.7 0 128 57.3 128 128l0 192 88 0c9.6 0 18.2 5.7 22 14.5z\"]\n};\nconst faLevelDownAlt = faTurnDown;\nconst faPersonWalkingArrowRight = {\n  prefix: 'fas',\n  iconName: 'person-walking-arrow-right',\n  icon: [640, 512, [], \"e552\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224 384 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l146.7 0-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80z\"]\n};\nconst faSquareEnvelope = {\n  prefix: 'fas',\n  iconName: 'square-envelope',\n  icon: [448, 512, [\"envelope-square\"], \"f199\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM218 271.7L64.2 172.4C66 156.4 79.5 144 96 144l256 0c16.5 0 30 12.4 31.8 28.4L230 271.7c-1.8 1.2-3.9 1.8-6 1.8s-4.2-.6-6-1.8zm29.4 26.9L384 210.4 384 336c0 17.7-14.3 32-32 32L96 368c-17.7 0-32-14.3-32-32l0-125.6 136.6 88.2c7 4.5 15.1 6.9 23.4 6.9s16.4-2.4 23.4-6.9z\"]\n};\nconst faEnvelopeSquare = faSquareEnvelope;\nconst faDice = {\n  prefix: 'fas',\n  iconName: 'dice',\n  icon: [640, 512, [127922], \"f522\", \"M274.9 34.3c-28.1-28.1-73.7-28.1-101.8 0L34.3 173.1c-28.1 28.1-28.1 73.7 0 101.8L173.1 413.7c28.1 28.1 73.7 28.1 101.8 0L413.7 274.9c28.1-28.1 28.1-73.7 0-101.8L274.9 34.3zM200 224a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM96 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 376a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM352 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 120a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm96 328c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-114.3 0c11.6 36 3.1 77-25.4 105.5L320 413.8l0 34.2zM480 328a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faBowlingBall = {\n  prefix: 'fas',\n  iconName: 'bowling-ball',\n  icon: [512, 512, [], \"f436\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM240 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM208 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-64-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBrain = {\n  prefix: 'fas',\n  iconName: 'brain',\n  icon: [512, 512, [129504], \"f5dc\", \"M184 0c30.9 0 56 25.1 56 56l0 400c0 30.9-25.1 56-56 56c-28.9 0-52.7-21.9-55.7-50.1c-5.2 1.4-10.7 2.1-16.3 2.1c-35.3 0-64-28.7-64-64c0-7.4 1.3-14.6 3.6-21.2C21.4 367.4 0 338.2 0 304c0-31.9 18.7-59.5 45.8-72.3C37.1 220.8 32 207 32 192c0-30.7 21.6-56.3 50.4-62.6C80.8 123.9 80 118 80 112c0-29.9 20.6-55.1 48.3-62.1C131.3 21.9 155.1 0 184 0zM328 0c28.9 0 52.6 21.9 55.7 49.9c27.8 7 48.3 32.1 48.3 62.1c0 6-.8 11.9-2.4 17.4c28.8 6.2 50.4 31.9 50.4 62.6c0 15-5.1 28.8-13.8 39.7C493.3 244.5 512 272.1 512 304c0 34.2-21.4 63.4-51.6 74.8c2.3 6.6 3.6 13.8 3.6 21.2c0 35.3-28.7 64-64 64c-5.6 0-11.1-.7-16.3-2.1c-3 28.2-26.8 50.1-55.7 50.1c-30.9 0-56-25.1-56-56l0-400c0-30.9 25.1-56 56-56z\"]\n};\nconst faBandage = {\n  prefix: 'fas',\n  iconName: 'bandage',\n  icon: [640, 512, [129657, \"band-aid\"], \"f462\", \"M480 416l96 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-96 0 0 320zM448 96L192 96l0 320 256 0 0-320zM64 96C28.7 96 0 124.7 0 160L0 352c0 35.3 28.7 64 64 64l96 0 0-320L64 96zM248 208a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM248 304a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faBandAid = faBandage;\nconst faCalendarMinus = {\n  prefix: 'fas',\n  iconName: 'calendar-minus',\n  icon: [448, 512, [], \"f272\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM312 376c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0z\"]\n};\nconst faCircleXmark = {\n  prefix: 'fas',\n  iconName: 'circle-xmark',\n  icon: [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faTimesCircle = faCircleXmark;\nconst faXmarkCircle = faCircleXmark;\nconst faGifts = {\n  prefix: 'fas',\n  iconName: 'gifts',\n  icon: [640, 512, [], \"f79c\", \"M200.6 32C205 19.5 198.5 5.8 186 1.4S159.8 3.5 155.4 16L144.7 46.2l-9.9-29.8C130.6 3.8 117-3 104.4 1.2S85 19 89.2 31.6l8.3 25-27.4-20c-10.7-7.8-25.7-5.4-33.5 5.3s-5.4 25.7 5.3 33.5L70.2 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l152.6 0c-5.4-9.4-8.6-20.3-8.6-32l0-224c0-29.9 20.5-55 48.2-62c1.8-31 17.1-58.2 40.1-76.1C271.7 104.7 256.9 96 240 96l-22.2 0 28.3-20.6c10.7-7.8 13.1-22.8 5.3-33.5s-22.8-13.1-33.5-5.3L192.5 55.1 200.6 32zM363.5 185.5L393.1 224 344 224c-13.3 0-24-10.7-24-24c0-13.1 10.8-24 24.2-24c7.6 0 14.7 3.5 19.3 9.5zM272 200c0 8.4 1.4 16.5 4.1 24l-4.1 0c-26.5 0-48 21.5-48 48l0 80 192 0 0-96 32 0 0 96 192 0 0-80c0-26.5-21.5-48-48-48l-4.1 0c2.7-7.5 4.1-15.6 4.1-24c0-39.9-32.5-72-72.2-72c-22.4 0-43.6 10.4-57.3 28.2L432 195.8l-30.5-39.6c-13.7-17.8-35-28.2-57.3-28.2c-39.7 0-72.2 32.1-72.2 72zM224 464c0 26.5 21.5 48 48 48l144 0 0-128-192 0 0 80zm224 48l144 0c26.5 0 48-21.5 48-48l0-80-192 0 0 128zm96-312c0 13.3-10.7 24-24 24l-49.1 0 29.6-38.5c4.6-5.9 11.7-9.5 19.3-9.5c13.4 0 24.2 10.9 24.2 24z\"]\n};\nconst faHotel = {\n  prefix: 'fas',\n  iconName: 'hotel',\n  icon: [512, 512, [127976], \"f594\", \"M0 32C0 14.3 14.3 0 32 0L480 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-176 0 0-48c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 48L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64C14.3 64 0 49.7 0 32zm96 80l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM240 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM112 192c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM328 384c13.3 0 24.3-10.9 21-23.8c-10.6-41.5-48.2-72.2-93-72.2s-82.5 30.7-93 72.2c-3.3 12.8 7.8 23.8 21 23.8l144 0z\"]\n};\nconst faEarthAsia = {\n  prefix: 'fas',\n  iconName: 'earth-asia',\n  icon: [512, 512, [127759, \"globe-asia\"], \"f57e\", \"M51.7 295.1l31.7 6.3c7.9 1.6 16-.9 21.7-6.6l15.4-15.4c11.6-11.6 31.1-8.4 38.4 6.2l9.3 18.5c4.8 9.6 14.6 15.7 25.4 15.7c15.2 0 26.1-14.6 21.7-29.2l-6-19.9c-4.6-15.4 6.9-30.9 23-30.9l2.3 0c13.4 0 25.9-6.7 33.3-17.8l10.7-16.1c5.6-8.5 5.3-19.6-.8-27.7l-16.1-21.5c-10.3-13.7-3.3-33.5 13.4-37.7l17-4.3c7.5-1.9 13.6-7.2 16.5-14.4l16.4-40.9C303.4 52.1 280.2 48 256 48C141.1 48 48 141.1 48 256c0 13.4 1.3 26.5 3.7 39.1zm407.7 4.6c-3-.3-6-.1-9 .8l-15.8 4.4c-6.7 1.9-13.8-.9-17.5-6.7l-2-3.1c-6-9.4-16.4-15.1-27.6-15.1s-21.6 5.7-27.6 15.1l-6.1 9.5c-1.4 2.2-3.4 4.1-5.7 5.3L312 330.1c-18.1 10.1-25.5 32.4-17 51.3l5.5 12.4c8.6 19.2 30.7 28.5 50.5 21.1l2.6-1c10-3.7 21.3-2.2 29.9 4.1l1.5 1.1c37.2-29.5 64.1-71.4 74.4-119.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm144.5 92.1c-2.1 8.6 3.1 17.3 11.6 19.4l32 8c8.6 2.1 17.3-3.1 19.4-11.6s-3.1-17.3-11.6-19.4l-32-8c-8.6-2.1-17.3 3.1-19.4 11.6zm92-20c-2.1 8.6 3.1 17.3 11.6 19.4s17.3-3.1 19.4-11.6l8-32c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-8 32zM343.2 113.7c-7.9-4-17.5-.7-21.5 7.2l-16 32c-4 7.9-.7 17.5 7.2 21.5s17.5 .7 21.5-7.2l16-32c4-7.9 .7-17.5-7.2-21.5z\"]\n};\nconst faGlobeAsia = faEarthAsia;\nconst faIdCardClip = {\n  prefix: 'fas',\n  iconName: 'id-card-clip',\n  icon: [576, 512, [\"id-card-alt\"], \"f47f\", \"M256 0l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zM64 64l128 0 0 48c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-48 128 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64zM176 437.3c0 5.9 4.8 10.7 10.7 10.7l202.7 0c5.9 0 10.7-4.8 10.7-10.7c0-29.5-23.9-53.3-53.3-53.3l-117.3 0c-29.5 0-53.3 23.9-53.3 53.3zM288 352a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"]\n};\nconst faIdCardAlt = faIdCardClip;\nconst faMagnifyingGlassPlus = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-plus',\n  icon: [512, 512, [\"search-plus\"], \"f00e\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 64z\"]\n};\nconst faSearchPlus = faMagnifyingGlassPlus;\nconst faThumbsUp = {\n  prefix: 'fas',\n  iconName: 'thumbs-up',\n  icon: [512, 512, [128077, 61575], \"f164\", \"M313.4 32.9c26 5.2 42.9 30.5 37.7 56.5l-2.3 11.4c-5.3 26.7-15.1 52.1-28.8 75.2l144 0c26.5 0 48 21.5 48 48c0 18.5-10.5 34.6-25.9 42.6C497 275.4 504 288.9 504 304c0 23.4-16.8 42.9-38.9 47.1c4.4 7.3 6.9 15.8 6.9 24.9c0 21.3-13.9 39.4-33.1 45.6c.7 3.3 1.1 6.8 1.1 10.4c0 26.5-21.5 48-48 48l-97.5 0c-19 0-37.5-5.6-53.3-16.1l-38.5-25.7C176 420.4 160 390.4 160 358.3l0-38.3 0-48 0-24.9c0-29.2 13.3-56.7 36-75l7.4-5.9c26.5-21.2 44.6-51 51.2-84.2l2.3-11.4c5.2-26 30.5-42.9 56.5-37.7zM32 192l64 0c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32L0 224c0-17.7 14.3-32 32-32z\"]\n};\nconst faUserClock = {\n  prefix: 'fas',\n  iconName: 'user-clock',\n  icon: [640, 512, [], \"f4fd\", \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304l91.4 0c20.6 0 40.4 3.5 58.8 9.9C323 331 320 349.1 320 368c0 59.5 29.5 112.1 74.8 144L29.7 512C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-80c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0-48c0-8.8-7.2-16-16-16z\"]\n};\nconst faHandDots = {\n  prefix: 'fas',\n  iconName: 'hand-dots',\n  icon: [512, 512, [\"allergies\"], \"f461\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208zM240 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80 16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48-16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-16 80a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM240 432a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-48-48a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faAllergies = faHandDots;\nconst faFileInvoice = {\n  prefix: 'fas',\n  iconName: 'file-invoice',\n  icon: [384, 512, [], \"f570\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM80 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 96l192 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 352c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm0 32l0 64 192 0 0-64L96 256zM240 416l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faWindowMinimize = {\n  prefix: 'fas',\n  iconName: 'window-minimize',\n  icon: [512, 512, [128469], \"f2d1\", \"M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"]\n};\nconst faMugSaucer = {\n  prefix: 'fas',\n  iconName: 'mug-saucer',\n  icon: [640, 512, [\"coffee\"], \"f0f4\", \"M96 64c0-17.7 14.3-32 32-32l320 0 64 0c70.7 0 128 57.3 128 128s-57.3 128-128 128l-32 0c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96L96 64zM480 224l32 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0 0 128zM32 416l512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faCoffee = faMugSaucer;\nconst faBrush = {\n  prefix: 'fas',\n  iconName: 'brush',\n  icon: [384, 512, [], \"f55d\", \"M162.4 6c-1.5-3.6-5-6-8.9-6l-19 0c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6L48 0C21.5 0 0 21.5 0 48L0 224l0 22.4L0 256l9.6 0 364.8 0 9.6 0 0-9.6 0-22.4 0-176c0-26.5-21.5-48-48-48L230.5 0c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288l0 32c0 35.3 28.7 64 64 64l64 0 0 64c0 35.3 28.7 64 64 64s64-28.7 64-64l0-64 64 0c35.3 0 64-28.7 64-64l0-32L0 288zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faFileHalfDashed = {\n  prefix: 'fas',\n  iconName: 'file-half-dashed',\n  icon: [384, 512, [], \"e698\", \"M64 0C28.7 0 0 28.7 0 64L0 320l384 0 0-160-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM0 416l64 0 0-64L0 352l0 64zm288 32l-80 0 0 64 80 0 0-64zm-112 0l-80 0 0 64 80 0 0-64zM64 448L0 448c0 35.3 28.7 64 64 64l0-64zm256 0l0 64c35.3 0 64-28.7 64-64l-64 0zm64-32l0-64-64 0 0 64 64 0z\"]\n};\nconst faMask = {\n  prefix: 'fas',\n  iconName: 'mask',\n  icon: [576, 512, [], \"f6fa\", \"M288 64C64 64 0 160 0 272S80 448 176 448l8.4 0c24.2 0 46.4-13.7 57.2-35.4l23.2-46.3c4.4-8.8 13.3-14.3 23.2-14.3s18.8 5.5 23.2 14.3l23.2 46.3c10.8 21.7 33 35.4 57.2 35.4l8.4 0c96 0 176-64 176-176s-64-208-288-208zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm320-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faMagnifyingGlassMinus = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-minus',\n  icon: [512, 512, [\"search-minus\"], \"f010\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nconst faSearchMinus = faMagnifyingGlassMinus;\nconst faRulerVertical = {\n  prefix: 'fas',\n  iconName: 'ruler-vertical',\n  icon: [256, 512, [], \"f548\", \"M0 48C0 21.5 21.5 0 48 0L208 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z\"]\n};\nconst faUserLarge = {\n  prefix: 'fas',\n  iconName: 'user-large',\n  icon: [512, 512, [\"user-alt\"], \"f406\", \"M256 288A144 144 0 1 0 256 0a144 144 0 1 0 0 288zm-94.7 32C72.2 320 0 392.2 0 481.3c0 17 13.8 30.7 30.7 30.7l450.6 0c17 0 30.7-13.8 30.7-30.7C512 392.2 439.8 320 350.7 320l-189.4 0z\"]\n};\nconst faUserAlt = faUserLarge;\nconst faTrainTram = {\n  prefix: 'fas',\n  iconName: 'train-tram',\n  icon: [448, 512, [128650], \"e5b4\", \"M86.8 48c-12.2 0-23.6 5.5-31.2 15L42.7 79C34.5 89.3 19.4 91 9 82.7S-3 59.4 5.3 49L18 33C34.7 12.2 60 0 86.8 0L361.2 0c26.7 0 52 12.2 68.7 33l12.8 16c8.3 10.4 6.6 25.5-3.8 33.7s-25.5 6.6-33.7-3.7L392.5 63c-7.6-9.5-19.1-15-31.2-15L248 48l0 48 40 0c53 0 96 43 96 96l0 160c0 30.6-14.3 57.8-36.6 75.4l65.5 65.5c7.1 7.1 2.1 19.1-7.9 19.1l-39.7 0c-8.5 0-16.6-3.4-22.6-9.4L288 448l-128 0-54.6 54.6c-6 6-14.1 9.4-22.6 9.4L43 512c-10 0-15-12.1-7.9-19.1l65.5-65.5C78.3 409.8 64 382.6 64 352l0-160c0-53 43-96 96-96l40 0 0-48L86.8 48zM160 160c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-128 0zm32 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faUserNurse = {\n  prefix: 'fas',\n  iconName: 'user-nurse',\n  icon: [448, 512, [], \"f82f\", \"M96 128l0-57.8c0-13.3 8.3-25.3 20.8-30l96-36c7.2-2.7 15.2-2.7 22.5 0l96 36c12.5 4.7 20.8 16.6 20.8 30l0 57.8-.3 0c.2 2.6 .3 5.3 .3 8l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40c0-2.7 .1-5.4 .3-8l-.3 0zm48 48c0 44.2 35.8 80 80 80s80-35.8 80-80l0-16-160 0 0 16zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7L30.7 512C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6zM208 48l0 16-16 0c-4.4 0-8 3.6-8 8l0 16c0 4.4 3.6 8 8 8l16 0 0 16c0 4.4 3.6 8 8 8l16 0c4.4 0 8-3.6 8-8l0-16 16 0c4.4 0 8-3.6 8-8l0-16c0-4.4-3.6-8-8-8l-16 0 0-16c0-4.4-3.6-8-8-8l-16 0c-4.4 0-8 3.6-8 8z\"]\n};\nconst faSyringe = {\n  prefix: 'fas',\n  iconName: 'syringe',\n  icon: [512, 512, [128137], \"f48e\", \"M441 7l32 32 32 32c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15L417.9 128l55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-72-72L295 73c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l55 55L422.1 56 407 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0zM210.3 155.7l61.1-61.1c.3 .3 .6 .7 1 1l16 16 56 56 56 56 16 16c.3 .3 .6 .6 1 1l-191 191c-10.5 10.5-24.7 16.4-39.6 16.4l-88.8 0L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57 0-88.8c0-14.9 5.9-29.1 16.4-39.6l43.3-43.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57z\"]\n};\nconst faCloudSun = {\n  prefix: 'fas',\n  iconName: 'cloud-sun',\n  icon: [640, 512, [9925], \"f6c4\", \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l14.1 84.7 84.7 14.1c5.4 .9 10 4.5 12.1 9.6s1.5 10.9-1.6 15.4l-38.5 55c-2.2-.1-4.4-.2-6.7-.2c-23.3 0-45.1 6.2-64 17.1l0-1.1c0-53-43-96-96-96s-96 43-96 96s43 96 96 96c8.1 0 15.9-1 23.4-2.9c-36.6 18.1-63.3 53.1-69.8 94.9l-24.4 17c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM144 208a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM639.9 431.9c0 44.2-35.8 80-80 80l-271.9 0c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"]\n};\nconst faStopwatch20 = {\n  prefix: 'fas',\n  iconName: 'stopwatch-20',\n  icon: [448, 512, [], \"e06f\", \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 34.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6L256 64l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L176 0zM288 204c28.7 0 52 23.3 52 52l0 96c0 28.7-23.3 52-52 52s-52-23.3-52-52l0-96c0-28.7 23.3-52 52-52zm-12 52l0 96c0 6.6 5.4 12 12 12s12-5.4 12-12l0-96c0-6.6-5.4-12-12-12s-12 5.4-12 12zM159.5 244c-5.4 0-10.2 3.5-11.9 8.6l-.6 1.7c-3.5 10.5-14.8 16.1-25.3 12.6s-16.1-14.8-12.6-25.3l.6-1.7c7.2-21.5 27.2-35.9 49.8-35.9c29 0 52.5 23.5 52.5 52.5l0 2.2c0 13.4-4.9 26.4-13.8 36.4l-39 43.9c-6.2 7-10 15.7-10.9 24.9l43.8 0c11 0 20 9 20 20s-9 20-20 20l-64 0c-11 0-20-9-20-20l0-15.7c0-20.6 7.5-40.4 21.2-55.8l39-43.9c2.4-2.7 3.7-6.2 3.7-9.8l0-2.2c0-6.9-5.6-12.5-12.5-12.5z\"]\n};\nconst faSquareFull = {\n  prefix: 'fas',\n  iconName: 'square-full',\n  icon: [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11035, 11036], \"f45c\", \"M0 0H512V512H0V0z\"]\n};\nconst faMagnet = {\n  prefix: 'fas',\n  iconName: 'magnet',\n  icon: [448, 512, [129522], \"f076\", \"M0 160l0 96C0 379.7 100.3 480 224 480s224-100.3 224-224l0-96-128 0 0 96c0 53-43 96-96 96s-96-43-96-96l0-96L0 160zm0-32l128 0 0-64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64l0 64zm320 0l128 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64z\"]\n};\nconst faJar = {\n  prefix: 'fas',\n  iconName: 'jar',\n  icon: [320, 512, [], \"e516\", \"M32 32C32 14.3 46.3 0 64 0L256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64l192 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 160zm96 64c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32L96 224z\"]\n};\nconst faNoteSticky = {\n  prefix: 'fas',\n  iconName: 'note-sticky',\n  icon: [448, 512, [62026, \"sticky-note\"], \"f249\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l224 0 0-112c0-26.5 21.5-48 48-48l112 0 0-224c0-35.3-28.7-64-64-64L64 32zM448 352l-45.3 0L336 352c-8.8 0-16 7.2-16 16l0 66.7 0 45.3 32-32 64-64 32-32z\"]\n};\nconst faStickyNote = faNoteSticky;\nconst faBugSlash = {\n  prefix: 'fas',\n  iconName: 'bug-slash',\n  icon: [640, 512, [], \"e490\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L477.4 348.9c1.7-9.4 2.6-19 2.6-28.9l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64.3 0c-1.1-14.1-5-27.5-11.1-39.5c.7-.6 1.4-1.2 2.1-1.9l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-.7 .7-1.3 1.4-1.9 2.1C409.2 164.1 393.1 160 376 160l-112 0c-8.3 0-16.3 1-24 2.8L38.8 5.1zM320 0c-53 0-96 43-96 96l0 3.6c0 15.7 12.7 28.4 28.4 28.4l135.1 0c15.7 0 28.4-12.7 28.4-28.4l0-3.6c0-53-43-96-96-96zM160.3 256L96 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c0 24.6 5.5 47.8 15.4 68.6c-2.2 1.3-4.2 2.9-6 4.8l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l63.1-63.1c24.5 21.8 55.8 36.2 90.3 39.6l0-143.7L166.7 227.3c-3.4 9-5.6 18.7-6.4 28.7zM336 479.2c36.6-3.6 69.7-19.6 94.8-43.8L336 360.7l0 118.5z\"]\n};\nconst faArrowUpFromWaterPump = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-water-pump',\n  icon: [576, 512, [], \"e4b6\", \"M112 0C85.5 0 64 21.5 64 48l0 208-16 0c-26.5 0-48 21.5-48 48l0 96c0 8 2 15.6 5.4 22.2c3.8-1.7 7.8-3.1 12-4.1c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c4.2 1 8.2 2.4 12 4.1C574 415.6 576 408 576 400l0-96c0-26.5-21.5-48-48-48l-48 0 0-146.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 109.3 416 256l-128 0 0-208c0-26.5-21.5-48-48-48L112 0zM306.5 421.9c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1z\"]\n};\nconst faBone = {\n  prefix: 'fas',\n  iconName: 'bone',\n  icon: [576, 512, [129460], \"f5d7\", \"M153.7 144.8c6.9 16.3 20.6 31.2 38.3 31.2l192 0c17.7 0 31.4-14.9 38.3-31.2C434.4 116.1 462.9 96 496 96c44.2 0 80 35.8 80 80c0 30.4-17 56.9-42 70.4c-3.6 1.9-6 5.5-6 9.6s2.4 7.7 6 9.6c25 13.5 42 40 42 70.4c0 44.2-35.8 80-80 80c-33.1 0-61.6-20.1-73.7-48.8C415.4 350.9 401.7 336 384 336l-192 0c-17.7 0-31.4 14.9-38.3 31.2C141.6 395.9 113.1 416 80 416c-44.2 0-80-35.8-80-80c0-30.4 17-56.9 42-70.4c3.6-1.9 6-5.5 6-9.6s-2.4-7.7-6-9.6C17 232.9 0 206.4 0 176c0-44.2 35.8-80 80-80c33.1 0 61.6 20.1 73.7 48.8z\"]\n};\nconst faTableCellsRowUnlock = {\n  prefix: 'fas',\n  iconName: 'table-cells-row-unlock',\n  icon: [640, 512, [], \"e691\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 224l0 64 88 0 0-64-88 0zm232 0l-88 0 0 64 88 0 0-64zM152 352l-88 0 0 64 88 0 0-64zm56 0l0 64 88 0 0-64-88 0zm288-80l0 48 32 0 32 0 48 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48c0-44.2 35.8-80 80-80s80 35.8 80 80l-48 0c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faUserInjured = {\n  prefix: 'fas',\n  iconName: 'user-injured',\n  icon: [448, 512, [], \"f728\", \"M240 80l102.7 0c-7.9-19.5-20.4-36.5-36.2-49.9L240 80zm37.7-68.2C261.3 4.2 243.2 0 224 0c-53.7 0-99.7 33.1-118.7 80l81.4 0 91-68.2zM224 256c70.7 0 128-57.3 128-128c0-5.4-.3-10.8-1-16L97 112c-.7 5.2-1 10.6-1 16c0 70.7 57.3 128 128 128zM124 312.4c-9.7 3.1-19.1 7-28 11.7L96 512l147.7 0L181.5 408.2 124 312.4zm33-7.2L204.3 384l67.7 0c44.2 0 80 35.8 80 80c0 18-6 34.6-16 48l82.3 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0c-7.2 0-14.3 .4-21.3 1.3zM0 482.3C0 498.7 13.3 512 29.7 512L64 512l0-166.6C24.9 378.1 0 427.3 0 482.3zM320 464c0-26.5-21.5-48-48-48l-48.5 0 57.1 95.2C303 507.2 320 487.6 320 464z\"]\n};\nconst faFaceSadTear = {\n  prefix: 'fas',\n  iconName: 'face-sad-tear',\n  icon: [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm240 80c0-8.8 7.2-16 16-16c45 0 85.6 20.5 115.7 53.1c6 6.5 5.6 16.6-.9 22.6s-16.6 5.6-22.6-.9c-25-27.1-57.4-42.9-92.3-42.9c-8.8 0-16-7.2-16-16zm-80 80c-26.5 0-48-21-48-47c0-20 28.6-60.4 41.6-77.7c3.2-4.4 9.6-4.4 12.8 0C179.6 308.6 208 349 208 369c0 26-21.5 47-48 47zM367.6 208a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSadTear = faFaceSadTear;\nconst faPlane = {\n  prefix: 'fas',\n  iconName: 'plane',\n  icon: [576, 512, [], \"f072\", \"M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L112 320 68.8 377.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L32 256 .5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-7.8 6.3-14 14-14l42 0c5 0 9.8 2.4 12.8 6.4L112 192l102.9 0-49-171.6C162.9 10.2 170.6 0 181.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L365.7 192l116.6 0z\"]\n};\nconst faTentArrowsDown = {\n  prefix: 'fas',\n  iconName: 'tent-arrows-down',\n  icon: [576, 512, [], \"e581\", \"M209.8 111.9c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L136 24c0-13.3-10.7-24-24-24S88 10.7 88 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zm352 0c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L488 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faExclamation = {\n  prefix: 'fas',\n  iconName: 'exclamation',\n  icon: [128, 512, [10069, 10071, 61738], \"21\", \"M96 64c0-17.7-14.3-32-32-32S32 46.3 32 64l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32L96 64zM64 480a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faArrowsSpin = {\n  prefix: 'fas',\n  iconName: 'arrows-spin',\n  icon: [512, 512, [], \"e4bb\", \"M256 96c38.4 0 73.7 13.5 101.3 36.1l-32.6 32.6c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9l112 0c8.8 0 16-7.2 16-16l0-112c0-6.5-3.9-12.3-9.9-14.8s-12.9-1.1-17.4 3.5l-34 34C363.4 52.6 312.1 32 256 32c-10.9 0-21.5 .8-32 2.3l0 64.9c10.3-2.1 21-3.2 32-3.2zM132.1 154.7l32.6 32.6c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8l0-112c0-8.8-7.2-16-16-16L64 48c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l34 34C52.6 148.6 32 199.9 32 256c0 10.9 .8 21.5 2.3 32l64.9 0c-2.1-10.3-3.2-21-3.2-32c0-38.4 13.5-73.7 36.1-101.3zM477.7 224l-64.9 0c2.1 10.3 3.2 21 3.2 32c0 38.4-13.5 73.7-36.1 101.3l-32.6-32.6c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8l0 112c0 8.8 7.2 16 16 16l112 0c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-34-34C459.4 363.4 480 312.1 480 256c0-10.9-.8-21.5-2.3-32zM256 416c-38.4 0-73.7-13.5-101.3-36.1l32.6-32.6c4.6-4.6 5.9-11.5 3.5-17.4s-8.3-9.9-14.8-9.9L64 320c-8.8 0-16 7.2-16 16l0 112c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l34-34C148.6 459.4 199.9 480 256 480c10.9 0 21.5-.8 32-2.3l0-64.9c-10.3 2.1-21 3.2-32 3.2z\"]\n};\nconst faPrint = {\n  prefix: 'fas',\n  iconName: 'print',\n  icon: [512, 512, [128424, 128438, 9113], \"f02f\", \"M128 0C92.7 0 64 28.7 64 64l0 96 64 0 0-96 226.7 0L384 93.3l0 66.7 64 0 0-66.7c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0L128 0zM384 352l0 32 0 64-256 0 0-64 0-16 0-16 256 0zm64 32l32 0c17.7 0 32-14.3 32-32l0-96c0-35.3-28.7-64-64-64L64 192c-35.3 0-64 28.7-64 64l0 96c0 17.7 14.3 32 32 32l32 0 0 64c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-64zM432 248a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faTurkishLiraSign = {\n  prefix: 'fas',\n  iconName: 'turkish-lira-sign',\n  icon: [384, 512, [\"try\", \"turkish-lira\"], \"e2bb\", \"M96 32c17.7 0 32 14.3 32 32l0 35.3L247.2 65.2c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 165.9l0 29.4 119.2-34.1c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 261.9 128 416l63.8 0c68.2 0 124.4-53.5 127.8-121.6l.4-8c.9-17.7 15.9-31.2 33.6-30.4s31.2 15.9 30.4 33.6l-.4 8C378.5 399.8 294.1 480 191.8 480L96 480c-17.7 0-32-14.3-32-32l0-167.9-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 213.6l0-29.4-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 117.6 64 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faTry = faTurkishLiraSign;\nconst faTurkishLira = faTurkishLiraSign;\nconst faDollarSign = {\n  prefix: 'fas',\n  iconName: 'dollar-sign',\n  icon: [320, 512, [128178, 61781, \"dollar\", \"usd\"], \"24\", \"M160 0c17.7 0 32 14.3 32 32l0 35.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11l0 33.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.9c-.4-.1-.9-.1-1.3-.2l-.2 0s0 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7s0 0 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11L128 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faDollar = faDollarSign;\nconst faUsd = faDollarSign;\nconst faX = {\n  prefix: 'fas',\n  iconName: 'x',\n  icon: [384, 512, [120], \"58\", \"M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z\"]\n};\nconst faMagnifyingGlassDollar = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-dollar',\n  icon: [512, 512, [\"search-dollar\"], \"f688\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM228 104c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7l0-13.9z\"]\n};\nconst faSearchDollar = faMagnifyingGlassDollar;\nconst faUsersGear = {\n  prefix: 'fas',\n  iconName: 'users-gear',\n  icon: [640, 512, [\"users-cog\"], \"f509\", \"M144 160A80 80 0 1 0 144 0a80 80 0 1 0 0 160zm368 0A80 80 0 1 0 512 0a80 80 0 1 0 0 160zM0 298.7C0 310.4 9.6 320 21.3 320l213.3 0c.2 0 .4 0 .7 0c-26.6-23.5-43.3-57.8-43.3-96c0-7.6 .7-15 1.9-22.3c-13.6-6.3-28.7-9.7-44.6-9.7l-42.7 0C47.8 192 0 239.8 0 298.7zM320 320c24 0 45.9-8.8 62.7-23.3c2.5-3.7 5.2-7.3 8-10.7c2.7-3.3 5.7-6.1 9-8.3C410 262.3 416 243.9 416 224c0-53-43-96-96-96s-96 43-96 96s43 96 96 96zm65.4 60.2c-10.3-5.9-18.1-16.2-20.8-28.2l-103.2 0C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7l300.6 0c-2.1-5.2-3.2-10.9-3.2-16.4l0-3c-1.3-.7-2.7-1.5-4-2.3l-2.6 1.5c-16.8 9.7-40.5 8-54.7-9.7c-4.5-5.6-8.6-11.5-12.4-17.6l-.1-.2-.1-.2-2.4-4.1-.1-.2-.1-.2c-3.4-6.2-6.4-12.6-9-19.3c-8.2-21.2 2.2-42.6 19-52.3l2.7-1.5c0-.8 0-1.5 0-2.3s0-1.5 0-2.3l-2.7-1.5zM533.3 192l-42.7 0c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 17.4-3.5 33.9-9.7 49c2.5 .9 4.9 2 7.1 3.3l2.6 1.5c1.3-.8 2.6-1.6 4-2.3l0-3c0-19.4 13.3-39.1 35.8-42.6c7.9-1.2 16-1.9 24.2-1.9s16.3 .6 24.2 1.9c22.5 3.5 35.8 23.2 35.8 42.6l0 3c1.3 .7 2.7 1.5 4 2.3l2.6-1.5c16.8-9.7 40.5-8 54.7 9.7c2.3 2.8 4.5 5.8 6.6 8.7c-2.1-57.1-49-102.7-106.6-102.7zm91.3 163.9c6.3-3.6 9.5-11.1 6.8-18c-2.1-5.5-4.6-10.8-7.4-15.9l-2.3-4c-3.1-5.1-6.5-9.9-10.2-14.5c-4.6-5.7-12.7-6.7-19-3l-2.9 1.7c-9.2 5.3-20.4 4-29.6-1.3s-16.1-14.5-16.1-25.1l0-3.4c0-7.3-4.9-13.8-12.1-14.9c-6.5-1-13.1-1.5-19.9-1.5s-13.4 .5-19.9 1.5c-7.2 1.1-12.1 7.6-12.1 14.9l0 3.4c0 10.6-6.9 19.8-16.1 25.1s-20.4 6.6-29.6 1.3l-2.9-1.7c-6.3-3.6-14.4-2.6-19 3c-3.7 4.6-7.1 9.5-10.2 14.6l-2.3 3.9c-2.8 5.1-5.3 10.4-7.4 15.9c-2.6 6.8 .5 14.3 6.8 17.9l2.9 1.7c9.2 5.3 13.7 15.8 13.7 26.4s-4.5 21.1-13.7 26.4l-3 1.7c-6.3 3.6-9.5 11.1-6.8 17.9c2.1 5.5 4.6 10.7 7.4 15.8l2.4 4.1c3 5.1 6.4 9.9 10.1 14.5c4.6 5.7 12.7 6.7 19 3l2.9-1.7c9.2-5.3 20.4-4 29.6 1.3s16.1 14.5 16.1 25.1l0 3.4c0 7.3 4.9 13.8 12.1 14.9c6.5 1 13.1 1.5 19.9 1.5s13.4-.5 19.9-1.5c7.2-1.1 12.1-7.6 12.1-14.9l0-3.4c0-10.6 6.9-19.8 16.1-25.1s20.4-6.6 29.6-1.3l2.9 1.7c6.3 3.6 14.4 2.6 19-3c3.7-4.6 7.1-9.4 10.1-14.5l2.4-4.2c2.8-5.1 5.3-10.3 7.4-15.8c2.6-6.8-.5-14.3-6.8-17.9l-3-1.7c-9.2-5.3-13.7-15.8-13.7-26.4s4.5-21.1 13.7-26.4l3-1.7zM472 384a40 40 0 1 1 80 0 40 40 0 1 1 -80 0z\"]\n};\nconst faUsersCog = faUsersGear;\nconst faPersonMilitaryPointing = {\n  prefix: 'fas',\n  iconName: 'person-military-pointing',\n  icon: [576, 512, [], \"e54a\", \"M246.9 14.1C234 15.2 224 26 224 39c0 13.8 11.2 25 25 25l151 0c8.8 0 16-7.2 16-16l0-30.6C416 8 408 .7 398.7 1.4L246.9 14.1zM240 112c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16L241.6 96c-1 5.2-1.6 10.5-1.6 16zM72 224c-22.1 0-40 17.9-40 40s17.9 40 40 40l152 0 0 89.4L386.8 230.5c-13.3-4.3-27.3-6.5-41.6-6.5L240 224 72 224zm345.7 20.9L246.6 416 416 416l0-46.3 53.6 90.6c11.2 19 35.8 25.3 54.8 14.1s25.3-35.8 14.1-54.8L462.3 290.8c-11.2-18.9-26.6-34.5-44.6-45.9zM224 448l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32-192 0z\"]\n};\nconst faBuildingColumns = {\n  prefix: 'fas',\n  iconName: 'building-columns',\n  icon: [512, 512, [\"bank\", \"institution\", \"museum\", \"university\"], \"f19c\", \"M243.4 2.6l-224 96c-14 6-21.8 21-18.7 35.8S16.8 160 32 160l0 8c0 13.3 10.7 24 24 24l400 0c13.3 0 24-10.7 24-24l0-8c15.2 0 28.3-10.7 31.3-25.6s-4.8-29.9-18.7-35.8l-224-96c-8-3.4-17.2-3.4-25.2 0zM128 224l-64 0 0 196.3c-.6 .3-1.2 .7-1.8 1.1l-48 32c-11.7 7.8-17 22.4-12.9 35.9S17.9 512 32 512l448 0c14.1 0 26.5-9.2 30.6-22.7s-1.1-28.1-12.9-35.9l-48-32c-.6-.4-1.2-.7-1.8-1.1L448 224l-64 0 0 192-40 0 0-192-64 0 0 192-48 0 0-192-64 0 0 192-40 0 0-192zM256 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBank = faBuildingColumns;\nconst faInstitution = faBuildingColumns;\nconst faMuseum = faBuildingColumns;\nconst faUniversity = faBuildingColumns;\nconst faUmbrella = {\n  prefix: 'fas',\n  iconName: 'umbrella',\n  icon: [576, 512, [], \"f0e9\", \"M288 0c17.7 0 32 14.3 32 32l0 17.7C451.8 63.4 557.7 161 573.9 285.9c2 15.6-17.3 24.4-27.8 12.7C532.1 283 504.8 272 480 272c-38.7 0-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C359 299.5 326.7 272 288 272s-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C167 299.5 134.7 272 96 272c-24.8 0-52.1 11-66.1 26.7C19.4 310.4 .1 301.5 2.1 285.9C18.3 161 124.2 63.4 256 49.7L256 32c0-17.7 14.3-32 32-32zm0 304c12.3 0 23.5 4.6 32 12.2l0 114.3c0 45-36.5 81.4-81.4 81.4c-30.8 0-59-17.4-72.8-45l-2.3-4.7c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l2.3 4.7c3 5.9 9 9.6 15.6 9.6c9.6 0 17.4-7.8 17.4-17.4l0-114.3c8.5-7.6 19.7-12.2 32-12.2z\"]\n};\nconst faTrowel = {\n  prefix: 'fas',\n  iconName: 'trowel',\n  icon: [512, 512, [], \"e589\", \"M343.9 213.4L245.3 312l65.4 65.4c7.9 7.9 11.1 19.4 8.4 30.3s-10.8 19.6-21.5 22.9l-256 80c-11.4 3.5-23.8 .5-32.2-7.9S-2.1 481.8 1.5 470.5l80-256c3.3-10.7 12-18.9 22.9-21.5s22.4 .5 30.3 8.4L200 266.7l98.6-98.6c-14.3-14.6-14.2-38 .3-52.5l95.4-95.4c26.9-26.9 70.5-26.9 97.5 0s26.9 70.5 0 97.5l-95.4 95.4c-14.5 14.5-37.9 14.6-52.5 .3z\"]\n};\nconst faD = {\n  prefix: 'fas',\n  iconName: 'd',\n  icon: [384, 512, [100], \"44\", \"M0 96C0 60.7 28.7 32 64 32l96 0c123.7 0 224 100.3 224 224s-100.3 224-224 224l-96 0c-35.3 0-64-28.7-64-64L0 96zm160 0L64 96l0 320 96 0c88.4 0 160-71.6 160-160s-71.6-160-160-160z\"]\n};\nconst faStapler = {\n  prefix: 'fas',\n  iconName: 'stapler',\n  icon: [640, 512, [], \"e5af\", \"M640 299.3l0 4.7 0 128c0 26.5-21.5 48-48 48l-80 0-64 0L64 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0 0-48L96 368c-17.7 0-32-14.3-32-32l0-116.6L33.8 214C14.2 210.5 0 193.5 0 173.7c0-8.9 2.9-17.5 8.2-24.6l35.6-47.5C76.7 57.8 128.2 32 182.9 32c27 0 53.6 6.3 77.8 18.4L586.9 213.5C619.5 229.7 640 263 640 299.3zM448 304l0-16L128 230.9l0 73.1 320 0z\"]\n};\nconst faMasksTheater = {\n  prefix: 'fas',\n  iconName: 'masks-theater',\n  icon: [640, 512, [127917, \"theater-masks\"], \"f630\", \"M74.6 373.2c41.7 36.1 108 82.5 166.1 73.7c6.1-.9 12.1-2.5 18-4.5c-9.2-12.3-17.3-24.4-24.2-35.4c-21.9-35-28.8-75.2-25.9-113.6c-20.6 4.1-39.2 13-54.7 25.4c-6.5 5.2-16.3 1.3-14.8-7c6.4-33.5 33-60.9 68.2-66.3c2.6-.4 5.3-.7 7.9-.8l19.4-131.3c2-13.8 8-32.7 25-45.9C278.2 53.2 310.5 37 363.2 32.2c-.8-.7-1.6-1.4-2.4-2.1C340.6 14.5 288.4-11.5 175.7 5.6S20.5 63 5.7 83.9C0 91.9-.8 102 .6 111.8L24.8 276.1c5.5 37.3 21.5 72.6 49.8 97.2zm87.7-219.6c4.4-3.1 10.8-2 11.8 3.3c.1 .5 .2 1.1 .3 1.6c3.2 21.8-11.6 42-33.1 45.3s-41.5-11.8-44.7-33.5c-.1-.5-.1-1.1-.2-1.6c-.6-5.4 5.2-8.4 10.3-6.7c9 3 18.8 3.9 28.7 2.4s19.1-5.3 26.8-10.8zM261.6 390c29.4 46.9 79.5 110.9 137.6 119.7s124.5-37.5 166.1-73.7c28.3-24.5 44.3-59.8 49.8-97.2l24.2-164.3c1.4-9.8 .6-19.9-5.1-27.9c-14.8-20.9-57.3-61.2-170-78.3S299.4 77.2 279.2 92.8c-7.8 6-11.5 15.4-12.9 25.2L242.1 282.3c-5.5 37.3-.4 75.8 19.6 107.7zM404.5 235.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6c-1 5.3-7.4 6.4-11.8 3.3zm136.2 15.5c-1 5.3-7.4 6.4-11.8 3.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6zM530 350.2c-19.6 44.7-66.8 72.5-116.8 64.9s-87.1-48.2-93-96.7c-1-8.3 8.9-12.1 15.2-6.7c23.9 20.8 53.6 35.3 87 40.3s66.1 .1 94.9-12.8c7.6-3.4 16 3.2 12.6 10.9z\"]\n};\nconst faTheaterMasks = faMasksTheater;\nconst faKipSign = {\n  prefix: 'fas',\n  iconName: 'kip-sign',\n  icon: [384, 512, [], \"e1c4\", \"M340.8 88.3c13.4-11.5 15-31.7 3.5-45.1s-31.7-15-45.1-3.5L128 186.4 128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 160-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-122.4L299.2 472.3c13.4 11.5 33.6 9.9 45.1-3.5s9.9-33.6-3.5-45.1L182.5 288 352 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-169.5 0L340.8 88.3z\"]\n};\nconst faHandPointLeft = {\n  prefix: 'fas',\n  iconName: 'hand-point-left',\n  icon: [512, 512, [], \"f0a5\", \"M32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l208 0 0-64L32 96zM192 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm-64-64c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0c-17.7 0-32 14.3-32 32zm96 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm88-96l-.6 0c5.4 9.4 8.6 20.3 8.6 32c0 13.2-4 25.4-10.8 35.6c24.9 8.7 42.8 32.5 42.8 60.4c0 11.7-3.1 22.6-8.6 32l8.6 0c88.4 0 160-71.6 160-160l0-61.7c0-42.4-16.9-83.1-46.9-113.1l-11.6-11.6C429.5 77.5 396.9 64 363 64l-27 0c-35.3 0-64 28.7-64 64l0 88c0 22.1 17.9 40 40 40s40-17.9 40-40l0-56c0-8.8 7.2-16 16-16s16 7.2 16 16l0 56c0 39.8-32.2 72-72 72z\"]\n};\nconst faHandshakeSimple = {\n  prefix: 'fas',\n  iconName: 'handshake-simple',\n  icon: [640, 512, [129309, \"handshake-alt\"], \"f4c6\", \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352l41.8 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-76 0-4 0-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48-80 0c-26.5 0-48 21.5-48 48L0 304c0 26.5 21.5 48 48 48l108.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123z\"]\n};\nconst faHandshakeAlt = faHandshakeSimple;\nconst faJetFighter = {\n  prefix: 'fas',\n  iconName: 'jet-fighter',\n  icon: [640, 512, [\"fighter-jet\"], \"f0fb\", \"M160 24c0-13.3 10.7-24 24-24L296 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0L384 192l116.4 0c7.7 0 15.3 1.4 22.5 4.1L625 234.4c9 3.4 15 12 15 21.6s-6 18.2-15 21.6L522.9 315.9c-7.2 2.7-14.8 4.1-22.5 4.1L384 320 280 464l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-112 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-144-32 0-54.6 54.6c-6 6-14.1 9.4-22.6 9.4L64 384c-17.7 0-32-14.3-32-32l0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l18.7 0c8.5 0 16.6 3.4 22.6 9.4L160 192l32 0 0-144-8 0c-13.3 0-24-10.7-24-24zM80 240c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0z\"]\n};\nconst faFighterJet = faJetFighter;\nconst faSquareShareNodes = {\n  prefix: 'fas',\n  iconName: 'square-share-nodes',\n  icon: [448, 512, [\"share-alt-square\"], \"f1e1\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM384 160c0 35.3-28.7 64-64 64c-15.4 0-29.5-5.4-40.6-14.5L194.1 256l85.3 46.5c11-9.1 25.2-14.5 40.6-14.5c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-2.5 .1-4.9 .4-7.3L174.5 300c-11.7 12.3-28.2 20-46.5 20c-35.3 0-64-28.7-64-64s28.7-64 64-64c18.3 0 34.8 7.7 46.5 20l81.9-44.7c-.3-2.4-.4-4.9-.4-7.3c0-35.3 28.7-64 64-64s64 28.7 64 64z\"]\n};\nconst faShareAltSquare = faSquareShareNodes;\nconst faBarcode = {\n  prefix: 'fas',\n  iconName: 'barcode',\n  icon: [512, 512, [], \"f02a\", \"M24 32C10.7 32 0 42.7 0 56L0 456c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24L64 56c0-13.3-10.7-24-24-24L24 32zm88 0c-8.8 0-16 7.2-16 16l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16zm72 0c-13.3 0-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0zm96 0c-13.3 0-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0zM448 56l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0c-13.3 0-24 10.7-24 24zm-64-8l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"]\n};\nconst faPlusMinus = {\n  prefix: 'fas',\n  iconName: 'plus-minus',\n  icon: [384, 512, [], \"e43c\", \"M224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112L48 144c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0 0 112c0 17.7 14.3 32 32 32s32-14.3 32-32l0-112 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-112zM0 480c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448c-17.7 0-32 14.3-32 32z\"]\n};\nconst faVideo = {\n  prefix: 'fas',\n  iconName: 'video',\n  icon: [576, 512, [\"video-camera\"], \"f03d\", \"M0 128C0 92.7 28.7 64 64 64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM559.1 99.8c10.4 5.6 16.9 16.4 16.9 28.2l0 256c0 11.8-6.5 22.6-16.9 28.2s-23 5-32.9-1.6l-96-64L416 337.1l0-17.1 0-128 0-17.1 14.2-9.5 96-64c9.8-6.5 22.4-7.2 32.9-1.6z\"]\n};\nconst faVideoCamera = faVideo;\nconst faGraduationCap = {\n  prefix: 'fas',\n  iconName: 'graduation-cap',\n  icon: [640, 512, [127891, \"mortar-board\"], \"f19d\", \"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9l0 28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5l0-24.6c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"]\n};\nconst faMortarBoard = faGraduationCap;\nconst faHandHoldingMedical = {\n  prefix: 'fas',\n  iconName: 'hand-holding-medical',\n  icon: [576, 512, [], \"e05c\", \"M224 24l0 56-56 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l56 0 0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56 56 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-56 0 0-56c0-13.3-10.7-24-24-24L248 0c-13.3 0-24 10.7-24 24zM559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 272 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-16 0-78.3 0c-29.1 0-57.3 9.9-80 28L68.8 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 160.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2l.9 0c0 0 0 0 0 0c-.3 0-.6 0-.9 0z\"]\n};\nconst faPersonCircleCheck = {\n  prefix: 'fas',\n  iconName: 'person-circle-check',\n  icon: [576, 512, [], \"e53e\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faTurnUp = {\n  prefix: 'fas',\n  iconName: 'turn-up',\n  icon: [384, 512, [10548, \"level-up-alt\"], \"f3bf\", \"M350 177.5c3.8-8.8 2-19-4.6-26l-136-144C204.9 2.7 198.6 0 192 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26s12.5 14.5 22 14.5l88 0 0 192c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l80 0c70.7 0 128-57.3 128-128l0-192 88 0c9.6 0 18.2-5.7 22-14.5z\"]\n};\nconst faLevelUpAlt = faTurnUp;\nvar icons = {\n  fa0,\n  fa1,\n  fa2,\n  fa3,\n  fa4,\n  fa5,\n  fa6,\n  fa7,\n  fa8,\n  fa9,\n  faFillDrip,\n  faArrowsToCircle,\n  faCircleChevronRight,\n  faChevronCircleRight,\n  faAt,\n  faTrashCan,\n  faTrashAlt,\n  faTextHeight,\n  faUserXmark,\n  faUserTimes,\n  faStethoscope,\n  faMessage,\n  faCommentAlt,\n  faInfo,\n  faDownLeftAndUpRightToCenter,\n  faCompressAlt,\n  faExplosion,\n  faFileLines,\n  faFileAlt,\n  faFileText,\n  faWaveSquare,\n  faRing,\n  faBuildingUn,\n  faDiceThree,\n  faCalendarDays,\n  faCalendarAlt,\n  faAnchorCircleCheck,\n  faBuildingCircleArrowRight,\n  faVolleyball,\n  faVolleyballBall,\n  faArrowsUpToLine,\n  faSortDown,\n  faSortDesc,\n  faCircleMinus,\n  faMinusCircle,\n  faDoorOpen,\n  faRightFromBracket,\n  faSignOutAlt,\n  faAtom,\n  faSoap,\n  faIcons,\n  faHeartMusicCameraBolt,\n  faMicrophoneLinesSlash,\n  faMicrophoneAltSlash,\n  faBridgeCircleCheck,\n  faPumpMedical,\n  faFingerprint,\n  faHandPointRight,\n  faMagnifyingGlassLocation,\n  faSearchLocation,\n  faForwardStep,\n  faStepForward,\n  faFaceSmileBeam,\n  faSmileBeam,\n  faFlagCheckered,\n  faFootball,\n  faFootballBall,\n  faSchoolCircleExclamation,\n  faCrop,\n  faAnglesDown,\n  faAngleDoubleDown,\n  faUsersRectangle,\n  faPeopleRoof,\n  faPeopleLine,\n  faBeerMugEmpty,\n  faBeer,\n  faDiagramPredecessor,\n  faArrowUpLong,\n  faLongArrowUp,\n  faFireFlameSimple,\n  faBurn,\n  faPerson,\n  faMale,\n  faLaptop,\n  faFileCsv,\n  faMenorah,\n  faTruckPlane,\n  faRecordVinyl,\n  faFaceGrinStars,\n  faGrinStars,\n  faBong,\n  faSpaghettiMonsterFlying,\n  faPastafarianism,\n  faArrowDownUpAcrossLine,\n  faSpoon,\n  faUtensilSpoon,\n  faJarWheat,\n  faEnvelopesBulk,\n  faMailBulk,\n  faFileCircleExclamation,\n  faCircleH,\n  faHospitalSymbol,\n  faPager,\n  faAddressBook,\n  faContactBook,\n  faStrikethrough,\n  faK,\n  faLandmarkFlag,\n  faPencil,\n  faPencilAlt,\n  faBackward,\n  faCaretRight,\n  faComments,\n  faPaste,\n  faFileClipboard,\n  faCodePullRequest,\n  faClipboardList,\n  faTruckRampBox,\n  faTruckLoading,\n  faUserCheck,\n  faVialVirus,\n  faSheetPlastic,\n  faBlog,\n  faUserNinja,\n  faPersonArrowUpFromLine,\n  faScrollTorah,\n  faTorah,\n  faBroomBall,\n  faQuidditch,\n  faQuidditchBroomBall,\n  faToggleOff,\n  faBoxArchive,\n  faArchive,\n  faPersonDrowning,\n  faArrowDown91,\n  faSortNumericDesc,\n  faSortNumericDownAlt,\n  faFaceGrinTongueSquint,\n  faGrinTongueSquint,\n  faSprayCan,\n  faTruckMonster,\n  faW,\n  faEarthAfrica,\n  faGlobeAfrica,\n  faRainbow,\n  faCircleNotch,\n  faTabletScreenButton,\n  faTabletAlt,\n  faPaw,\n  faCloud,\n  faTrowelBricks,\n  faFaceFlushed,\n  faFlushed,\n  faHospitalUser,\n  faTentArrowLeftRight,\n  faGavel,\n  faLegal,\n  faBinoculars,\n  faMicrophoneSlash,\n  faBoxTissue,\n  faMotorcycle,\n  faBellConcierge,\n  faConciergeBell,\n  faPenRuler,\n  faPencilRuler,\n  faPeopleArrows,\n  faPeopleArrowsLeftRight,\n  faMarsAndVenusBurst,\n  faSquareCaretRight,\n  faCaretSquareRight,\n  faScissors,\n  faCut,\n  faSunPlantWilt,\n  faToiletsPortable,\n  faHockeyPuck,\n  faTable,\n  faMagnifyingGlassArrowRight,\n  faTachographDigital,\n  faDigitalTachograph,\n  faUsersSlash,\n  faClover,\n  faReply,\n  faMailReply,\n  faStarAndCrescent,\n  faHouseFire,\n  faSquareMinus,\n  faMinusSquare,\n  faHelicopter,\n  faCompass,\n  faSquareCaretDown,\n  faCaretSquareDown,\n  faFileCircleQuestion,\n  faLaptopCode,\n  faSwatchbook,\n  faPrescriptionBottle,\n  faBars,\n  faNavicon,\n  faPeopleGroup,\n  faHourglassEnd,\n  faHourglass3,\n  faHeartCrack,\n  faHeartBroken,\n  faSquareUpRight,\n  faExternalLinkSquareAlt,\n  faFaceKissBeam,\n  faKissBeam,\n  faFilm,\n  faRulerHorizontal,\n  faPeopleRobbery,\n  faLightbulb,\n  faCaretLeft,\n  faCircleExclamation,\n  faExclamationCircle,\n  faSchoolCircleXmark,\n  faArrowRightFromBracket,\n  faSignOut,\n  faCircleChevronDown,\n  faChevronCircleDown,\n  faUnlockKeyhole,\n  faUnlockAlt,\n  faCloudShowersHeavy,\n  faHeadphonesSimple,\n  faHeadphonesAlt,\n  faSitemap,\n  faCircleDollarToSlot,\n  faDonate,\n  faMemory,\n  faRoadSpikes,\n  faFireBurner,\n  faFlag,\n  faHanukiah,\n  faFeather,\n  faVolumeLow,\n  faVolumeDown,\n  faCommentSlash,\n  faCloudSunRain,\n  faCompress,\n  faWheatAwn,\n  faWheatAlt,\n  faAnkh,\n  faHandsHoldingChild,\n  faAsterisk,\n  faSquareCheck,\n  faCheckSquare,\n  faPesetaSign,\n  faHeading,\n  faHeader,\n  faGhost,\n  faList,\n  faListSquares,\n  faSquarePhoneFlip,\n  faPhoneSquareAlt,\n  faCartPlus,\n  faGamepad,\n  faCircleDot,\n  faDotCircle,\n  faFaceDizzy,\n  faDizzy,\n  faEgg,\n  faHouseMedicalCircleXmark,\n  faCampground,\n  faFolderPlus,\n  faFutbol,\n  faFutbolBall,\n  faSoccerBall,\n  faPaintbrush,\n  faPaintBrush,\n  faLock,\n  faGasPump,\n  faHotTubPerson,\n  faHotTub,\n  faMapLocation,\n  faMapMarked,\n  faHouseFloodWater,\n  faTree,\n  faBridgeLock,\n  faSackDollar,\n  faPenToSquare,\n  faEdit,\n  faCarSide,\n  faShareNodes,\n  faShareAlt,\n  faHeartCircleMinus,\n  faHourglassHalf,\n  faHourglass2,\n  faMicroscope,\n  faSink,\n  faBagShopping,\n  faShoppingBag,\n  faArrowDownZA,\n  faSortAlphaDesc,\n  faSortAlphaDownAlt,\n  faMitten,\n  faPersonRays,\n  faUsers,\n  faEyeSlash,\n  faFlaskVial,\n  faHand,\n  faHandPaper,\n  faOm,\n  faWorm,\n  faHouseCircleXmark,\n  faPlug,\n  faChevronUp,\n  faHandSpock,\n  faStopwatch,\n  faFaceKiss,\n  faKiss,\n  faBridgeCircleXmark,\n  faFaceGrinTongue,\n  faGrinTongue,\n  faChessBishop,\n  faFaceGrinWink,\n  faGrinWink,\n  faEarDeaf,\n  faDeaf,\n  faDeafness,\n  faHardOfHearing,\n  faRoadCircleCheck,\n  faDiceFive,\n  faSquareRss,\n  faRssSquare,\n  faLandMineOn,\n  faICursor,\n  faStamp,\n  faStairs,\n  faI,\n  faHryvniaSign,\n  faHryvnia,\n  faPills,\n  faFaceGrinWide,\n  faGrinAlt,\n  faTooth,\n  faV,\n  faBangladeshiTakaSign,\n  faBicycle,\n  faStaffSnake,\n  faRodAsclepius,\n  faRodSnake,\n  faStaffAesculapius,\n  faHeadSideCoughSlash,\n  faTruckMedical,\n  faAmbulance,\n  faWheatAwnCircleExclamation,\n  faSnowman,\n  faMortarPestle,\n  faRoadBarrier,\n  faSchool,\n  faIgloo,\n  faJoint,\n  faAngleRight,\n  faHorse,\n  faQ,\n  faG,\n  faNotesMedical,\n  faTemperatureHalf,\n  faTemperature2,\n  faThermometer2,\n  faThermometerHalf,\n  faDongSign,\n  faCapsules,\n  faPooStorm,\n  faPooBolt,\n  faFaceFrownOpen,\n  faFrownOpen,\n  faHandPointUp,\n  faMoneyBill,\n  faBookmark,\n  faAlignJustify,\n  faUmbrellaBeach,\n  faHelmetUn,\n  faBullseye,\n  faBacon,\n  faHandPointDown,\n  faArrowUpFromBracket,\n  faFolder,\n  faFolderBlank,\n  faFileWaveform,\n  faFileMedicalAlt,\n  faRadiation,\n  faChartSimple,\n  faMarsStroke,\n  faVial,\n  faGauge,\n  faDashboard,\n  faGaugeMed,\n  faTachometerAltAverage,\n  faWandMagicSparkles,\n  faMagicWandSparkles,\n  faE,\n  faPenClip,\n  faPenAlt,\n  faBridgeCircleExclamation,\n  faUser,\n  faSchoolCircleCheck,\n  faDumpster,\n  faVanShuttle,\n  faShuttleVan,\n  faBuildingUser,\n  faSquareCaretLeft,\n  faCaretSquareLeft,\n  faHighlighter,\n  faKey,\n  faBullhorn,\n  faGlobe,\n  faSynagogue,\n  faPersonHalfDress,\n  faRoadBridge,\n  faLocationArrow,\n  faC,\n  faTabletButton,\n  faBuildingLock,\n  faPizzaSlice,\n  faMoneyBillWave,\n  faChartArea,\n  faAreaChart,\n  faHouseFlag,\n  faPersonCircleMinus,\n  faBan,\n  faCancel,\n  faCameraRotate,\n  faSprayCanSparkles,\n  faAirFreshener,\n  faStar,\n  faRepeat,\n  faCross,\n  faBox,\n  faVenusMars,\n  faArrowPointer,\n  faMousePointer,\n  faMaximize,\n  faExpandArrowsAlt,\n  faChargingStation,\n  faShapes,\n  faTriangleCircleSquare,\n  faShuffle,\n  faRandom,\n  faPersonRunning,\n  faRunning,\n  faMobileRetro,\n  faGripLinesVertical,\n  faSpider,\n  faHandsBound,\n  faFileInvoiceDollar,\n  faPlaneCircleExclamation,\n  faXRay,\n  faSpellCheck,\n  faSlash,\n  faComputerMouse,\n  faMouse,\n  faArrowRightToBracket,\n  faSignIn,\n  faShopSlash,\n  faStoreAltSlash,\n  faServer,\n  faVirusCovidSlash,\n  faShopLock,\n  faHourglassStart,\n  faHourglass1,\n  faBlenderPhone,\n  faBuildingWheat,\n  faPersonBreastfeeding,\n  faRightToBracket,\n  faSignInAlt,\n  faVenus,\n  faPassport,\n  faThumbtackSlash,\n  faThumbTackSlash,\n  faHeartPulse,\n  faHeartbeat,\n  faPeopleCarryBox,\n  faPeopleCarry,\n  faTemperatureHigh,\n  faMicrochip,\n  faCrown,\n  faWeightHanging,\n  faXmarksLines,\n  faFilePrescription,\n  faWeightScale,\n  faWeight,\n  faUserGroup,\n  faUserFriends,\n  faArrowUpAZ,\n  faSortAlphaUp,\n  faChessKnight,\n  faFaceLaughSquint,\n  faLaughSquint,\n  faWheelchair,\n  faCircleArrowUp,\n  faArrowCircleUp,\n  faToggleOn,\n  faPersonWalking,\n  faWalking,\n  faL,\n  faFire,\n  faBedPulse,\n  faProcedures,\n  faShuttleSpace,\n  faSpaceShuttle,\n  faFaceLaugh,\n  faLaugh,\n  faFolderOpen,\n  faHeartCirclePlus,\n  faCodeFork,\n  faCity,\n  faMicrophoneLines,\n  faMicrophoneAlt,\n  faPepperHot,\n  faUnlock,\n  faColonSign,\n  faHeadset,\n  faStoreSlash,\n  faRoadCircleXmark,\n  faUserMinus,\n  faMarsStrokeUp,\n  faMarsStrokeV,\n  faChampagneGlasses,\n  faGlassCheers,\n  faClipboard,\n  faHouseCircleExclamation,\n  faFileArrowUp,\n  faFileUpload,\n  faWifi,\n  faWifi3,\n  faWifiStrong,\n  faBath,\n  faBathtub,\n  faUnderline,\n  faUserPen,\n  faUserEdit,\n  faSignature,\n  faStroopwafel,\n  faBold,\n  faAnchorLock,\n  faBuildingNgo,\n  faManatSign,\n  faNotEqual,\n  faBorderTopLeft,\n  faBorderStyle,\n  faMapLocationDot,\n  faMapMarkedAlt,\n  faJedi,\n  faSquarePollVertical,\n  faPoll,\n  faMugHot,\n  faCarBattery,\n  faBatteryCar,\n  faGift,\n  faDiceTwo,\n  faChessQueen,\n  faGlasses,\n  faChessBoard,\n  faBuildingCircleCheck,\n  faPersonChalkboard,\n  faMarsStrokeRight,\n  faMarsStrokeH,\n  faHandBackFist,\n  faHandRock,\n  faSquareCaretUp,\n  faCaretSquareUp,\n  faCloudShowersWater,\n  faChartBar,\n  faBarChart,\n  faHandsBubbles,\n  faHandsWash,\n  faLessThanEqual,\n  faTrain,\n  faEyeLowVision,\n  faLowVision,\n  faCrow,\n  faSailboat,\n  faWindowRestore,\n  faSquarePlus,\n  faPlusSquare,\n  faToriiGate,\n  faFrog,\n  faBucket,\n  faImage,\n  faMicrophone,\n  faCow,\n  faCaretUp,\n  faScrewdriver,\n  faFolderClosed,\n  faHouseTsunami,\n  faSquareNfi,\n  faArrowUpFromGroundWater,\n  faMartiniGlass,\n  faGlassMartiniAlt,\n  faSquareBinary,\n  faRotateLeft,\n  faRotateBack,\n  faRotateBackward,\n  faUndoAlt,\n  faTableColumns,\n  faColumns,\n  faLemon,\n  faHeadSideMask,\n  faHandshake,\n  faGem,\n  faDolly,\n  faDollyBox,\n  faSmoking,\n  faMinimize,\n  faCompressArrowsAlt,\n  faMonument,\n  faSnowplow,\n  faAnglesRight,\n  faAngleDoubleRight,\n  faCannabis,\n  faCirclePlay,\n  faPlayCircle,\n  faTablets,\n  faEthernet,\n  faEuroSign,\n  faEur,\n  faEuro,\n  faChair,\n  faCircleCheck,\n  faCheckCircle,\n  faCircleStop,\n  faStopCircle,\n  faCompassDrafting,\n  faDraftingCompass,\n  faPlateWheat,\n  faIcicles,\n  faPersonShelter,\n  faNeuter,\n  faIdBadge,\n  faMarker,\n  faFaceLaughBeam,\n  faLaughBeam,\n  faHelicopterSymbol,\n  faUniversalAccess,\n  faCircleChevronUp,\n  faChevronCircleUp,\n  faLariSign,\n  faVolcano,\n  faPersonWalkingDashedLineArrowRight,\n  faSterlingSign,\n  faGbp,\n  faPoundSign,\n  faViruses,\n  faSquarePersonConfined,\n  faUserTie,\n  faArrowDownLong,\n  faLongArrowDown,\n  faTentArrowDownToLine,\n  faCertificate,\n  faReplyAll,\n  faMailReplyAll,\n  faSuitcase,\n  faPersonSkating,\n  faSkating,\n  faFilterCircleDollar,\n  faFunnelDollar,\n  faCameraRetro,\n  faCircleArrowDown,\n  faArrowCircleDown,\n  faFileImport,\n  faArrowRightToFile,\n  faSquareArrowUpRight,\n  faExternalLinkSquare,\n  faBoxOpen,\n  faScroll,\n  faSpa,\n  faLocationPinLock,\n  faPause,\n  faHillAvalanche,\n  faTemperatureEmpty,\n  faTemperature0,\n  faThermometer0,\n  faThermometerEmpty,\n  faBomb,\n  faRegistered,\n  faAddressCard,\n  faContactCard,\n  faVcard,\n  faScaleUnbalancedFlip,\n  faBalanceScaleRight,\n  faSubscript,\n  faDiamondTurnRight,\n  faDirections,\n  faBurst,\n  faHouseLaptop,\n  faLaptopHouse,\n  faFaceTired,\n  faTired,\n  faMoneyBills,\n  faSmog,\n  faCrutch,\n  faFontAwesome,\n  faFontAwesomeFlag,\n  faFontAwesomeLogoFull,\n  faCloudArrowUp,\n  faCloudUpload,\n  faCloudUploadAlt,\n  faPalette,\n  faArrowsTurnRight,\n  faVest,\n  faFerry,\n  faArrowsDownToPeople,\n  faSeedling,\n  faSprout,\n  faLeftRight,\n  faArrowsAltH,\n  faBoxesPacking,\n  faCircleArrowLeft,\n  faArrowCircleLeft,\n  faGroupArrowsRotate,\n  faBowlFood,\n  faCandyCane,\n  faArrowDownWideShort,\n  faSortAmountAsc,\n  faSortAmountDown,\n  faCloudBolt,\n  faThunderstorm,\n  faTextSlash,\n  faRemoveFormat,\n  faFaceSmileWink,\n  faSmileWink,\n  faFileWord,\n  faFilePowerpoint,\n  faArrowsLeftRight,\n  faArrowsH,\n  faHouseLock,\n  faCloudArrowDown,\n  faCloudDownload,\n  faCloudDownloadAlt,\n  faChildren,\n  faChalkboard,\n  faBlackboard,\n  faUserLargeSlash,\n  faUserAltSlash,\n  faEnvelopeOpen,\n  faHandshakeSimpleSlash,\n  faHandshakeAltSlash,\n  faMattressPillow,\n  faGuaraniSign,\n  faArrowsRotate,\n  faRefresh,\n  faSync,\n  faFireExtinguisher,\n  faCruzeiroSign,\n  faGreaterThanEqual,\n  faShieldHalved,\n  faShieldAlt,\n  faBookAtlas,\n  faAtlas,\n  faVirus,\n  faEnvelopeCircleCheck,\n  faLayerGroup,\n  faArrowsToDot,\n  faArchway,\n  faHeartCircleCheck,\n  faHouseChimneyCrack,\n  faHouseDamage,\n  faFileZipper,\n  faFileArchive,\n  faSquare,\n  faMartiniGlassEmpty,\n  faGlassMartini,\n  faCouch,\n  faCediSign,\n  faItalic,\n  faTableCellsColumnLock,\n  faChurch,\n  faCommentsDollar,\n  faDemocrat,\n  faZ,\n  faPersonSkiing,\n  faSkiing,\n  faRoadLock,\n  faA,\n  faTemperatureArrowDown,\n  faTemperatureDown,\n  faFeatherPointed,\n  faFeatherAlt,\n  faP,\n  faSnowflake,\n  faNewspaper,\n  faRectangleAd,\n  faAd,\n  faCircleArrowRight,\n  faArrowCircleRight,\n  faFilterCircleXmark,\n  faLocust,\n  faSort,\n  faUnsorted,\n  faListOl,\n  faList12,\n  faListNumeric,\n  faPersonDressBurst,\n  faMoneyCheckDollar,\n  faMoneyCheckAlt,\n  faVectorSquare,\n  faBreadSlice,\n  faLanguage,\n  faFaceKissWinkHeart,\n  faKissWinkHeart,\n  faFilter,\n  faQuestion,\n  faFileSignature,\n  faUpDownLeftRight,\n  faArrowsAlt,\n  faHouseChimneyUser,\n  faHandHoldingHeart,\n  faPuzzlePiece,\n  faMoneyCheck,\n  faStarHalfStroke,\n  faStarHalfAlt,\n  faCode,\n  faWhiskeyGlass,\n  faGlassWhiskey,\n  faBuildingCircleExclamation,\n  faMagnifyingGlassChart,\n  faArrowUpRightFromSquare,\n  faExternalLink,\n  faCubesStacked,\n  faWonSign,\n  faKrw,\n  faWon,\n  faVirusCovid,\n  faAustralSign,\n  faF,\n  faLeaf,\n  faRoad,\n  faTaxi,\n  faCab,\n  faPersonCirclePlus,\n  faChartPie,\n  faPieChart,\n  faBoltLightning,\n  faSackXmark,\n  faFileExcel,\n  faFileContract,\n  faFishFins,\n  faBuildingFlag,\n  faFaceGrinBeam,\n  faGrinBeam,\n  faObjectUngroup,\n  faPoop,\n  faLocationPin,\n  faMapMarker,\n  faKaaba,\n  faToiletPaper,\n  faHelmetSafety,\n  faHardHat,\n  faHatHard,\n  faEject,\n  faCircleRight,\n  faArrowAltCircleRight,\n  faPlaneCircleCheck,\n  faFaceRollingEyes,\n  faMehRollingEyes,\n  faObjectGroup,\n  faChartLine,\n  faLineChart,\n  faMaskVentilator,\n  faArrowRight,\n  faSignsPost,\n  faMapSigns,\n  faCashRegister,\n  faPersonCircleQuestion,\n  faH,\n  faTarp,\n  faScrewdriverWrench,\n  faTools,\n  faArrowsToEye,\n  faPlugCircleBolt,\n  faHeart,\n  faMarsAndVenus,\n  faHouseUser,\n  faHomeUser,\n  faDumpsterFire,\n  faHouseCrack,\n  faMartiniGlassCitrus,\n  faCocktail,\n  faFaceSurprise,\n  faSurprise,\n  faBottleWater,\n  faCirclePause,\n  faPauseCircle,\n  faToiletPaperSlash,\n  faAppleWhole,\n  faAppleAlt,\n  faKitchenSet,\n  faR,\n  faTemperatureQuarter,\n  faTemperature1,\n  faThermometer1,\n  faThermometerQuarter,\n  faCube,\n  faBitcoinSign,\n  faShieldDog,\n  faSolarPanel,\n  faLockOpen,\n  faElevator,\n  faMoneyBillTransfer,\n  faMoneyBillTrendUp,\n  faHouseFloodWaterCircleArrowRight,\n  faSquarePollHorizontal,\n  faPollH,\n  faCircle,\n  faBackwardFast,\n  faFastBackward,\n  faRecycle,\n  faUserAstronaut,\n  faPlaneSlash,\n  faTrademark,\n  faBasketball,\n  faBasketballBall,\n  faSatelliteDish,\n  faCircleUp,\n  faArrowAltCircleUp,\n  faMobileScreenButton,\n  faMobileAlt,\n  faVolumeHigh,\n  faVolumeUp,\n  faUsersRays,\n  faWallet,\n  faClipboardCheck,\n  faFileAudio,\n  faBurger,\n  faHamburger,\n  faWrench,\n  faBugs,\n  faRupeeSign,\n  faRupee,\n  faFileImage,\n  faCircleQuestion,\n  faQuestionCircle,\n  faPlaneDeparture,\n  faHandshakeSlash,\n  faBookBookmark,\n  faCodeBranch,\n  faHatCowboy,\n  faBridge,\n  faPhoneFlip,\n  faPhoneAlt,\n  faTruckFront,\n  faCat,\n  faAnchorCircleExclamation,\n  faTruckField,\n  faRoute,\n  faClipboardQuestion,\n  faPanorama,\n  faCommentMedical,\n  faTeethOpen,\n  faFileCircleMinus,\n  faTags,\n  faWineGlass,\n  faForwardFast,\n  faFastForward,\n  faFaceMehBlank,\n  faMehBlank,\n  faSquareParking,\n  faParking,\n  faHouseSignal,\n  faBarsProgress,\n  faTasksAlt,\n  faFaucetDrip,\n  faCartFlatbed,\n  faDollyFlatbed,\n  faBanSmoking,\n  faSmokingBan,\n  faTerminal,\n  faMobileButton,\n  faHouseMedicalFlag,\n  faBasketShopping,\n  faShoppingBasket,\n  faTape,\n  faBusSimple,\n  faBusAlt,\n  faEye,\n  faFaceSadCry,\n  faSadCry,\n  faAudioDescription,\n  faPersonMilitaryToPerson,\n  faFileShield,\n  faUserSlash,\n  faPen,\n  faTowerObservation,\n  faFileCode,\n  faSignal,\n  faSignal5,\n  faSignalPerfect,\n  faBus,\n  faHeartCircleXmark,\n  faHouseChimney,\n  faHomeLg,\n  faWindowMaximize,\n  faFaceFrown,\n  faFrown,\n  faPrescription,\n  faShop,\n  faStoreAlt,\n  faFloppyDisk,\n  faSave,\n  faVihara,\n  faScaleUnbalanced,\n  faBalanceScaleLeft,\n  faSortUp,\n  faSortAsc,\n  faCommentDots,\n  faCommenting,\n  faPlantWilt,\n  faDiamond,\n  faFaceGrinSquint,\n  faGrinSquint,\n  faHandHoldingDollar,\n  faHandHoldingUsd,\n  faChartDiagram,\n  faBacterium,\n  faHandPointer,\n  faDrumSteelpan,\n  faHandScissors,\n  faHandsPraying,\n  faPrayingHands,\n  faArrowRotateRight,\n  faArrowRightRotate,\n  faArrowRotateForward,\n  faRedo,\n  faWebAwesome,\n  faBiohazard,\n  faLocationCrosshairs,\n  faLocation,\n  faMarsDouble,\n  faChildDress,\n  faUsersBetweenLines,\n  faLungsVirus,\n  faFaceGrinTears,\n  faGrinTears,\n  faPhone,\n  faCalendarXmark,\n  faCalendarTimes,\n  faChildReaching,\n  faHeadSideVirus,\n  faUserGear,\n  faUserCog,\n  faArrowUp19,\n  faSortNumericUp,\n  faDoorClosed,\n  faShieldVirus,\n  faDiceSix,\n  faMosquitoNet,\n  faFileFragment,\n  faBridgeWater,\n  faPersonBooth,\n  faTextWidth,\n  faHatWizard,\n  faPenFancy,\n  faPersonDigging,\n  faDigging,\n  faTrash,\n  faGaugeSimple,\n  faGaugeSimpleMed,\n  faTachometerAverage,\n  faBookMedical,\n  faPoo,\n  faQuoteRight,\n  faQuoteRightAlt,\n  faShirt,\n  faTShirt,\n  faTshirt,\n  faCubes,\n  faDivide,\n  faTengeSign,\n  faTenge,\n  faHeadphones,\n  faHandsHolding,\n  faHandsClapping,\n  faRepublican,\n  faArrowLeft,\n  faPersonCircleXmark,\n  faRuler,\n  faAlignLeft,\n  faDiceD6,\n  faRestroom,\n  faJ,\n  faUsersViewfinder,\n  faFileVideo,\n  faUpRightFromSquare,\n  faExternalLinkAlt,\n  faTableCells,\n  faTh,\n  faFilePdf,\n  faBookBible,\n  faBible,\n  faO,\n  faSuitcaseMedical,\n  faMedkit,\n  faUserSecret,\n  faOtter,\n  faPersonDress,\n  faFemale,\n  faCommentDollar,\n  faBusinessTime,\n  faBriefcaseClock,\n  faTableCellsLarge,\n  faThLarge,\n  faBookTanakh,\n  faTanakh,\n  faPhoneVolume,\n  faVolumeControlPhone,\n  faHatCowboySide,\n  faClipboardUser,\n  faChild,\n  faLiraSign,\n  faSatellite,\n  faPlaneLock,\n  faTag,\n  faComment,\n  faCakeCandles,\n  faBirthdayCake,\n  faCake,\n  faEnvelope,\n  faAnglesUp,\n  faAngleDoubleUp,\n  faPaperclip,\n  faArrowRightToCity,\n  faRibbon,\n  faLungs,\n  faArrowUp91,\n  faSortNumericUpAlt,\n  faLitecoinSign,\n  faBorderNone,\n  faCircleNodes,\n  faParachuteBox,\n  faIndent,\n  faTruckFieldUn,\n  faHourglass,\n  faHourglassEmpty,\n  faMountain,\n  faUserDoctor,\n  faUserMd,\n  faCircleInfo,\n  faInfoCircle,\n  faCloudMeatball,\n  faCamera,\n  faCameraAlt,\n  faSquareVirus,\n  faMeteor,\n  faCarOn,\n  faSleigh,\n  faArrowDown19,\n  faSortNumericAsc,\n  faSortNumericDown,\n  faHandHoldingDroplet,\n  faHandHoldingWater,\n  faWater,\n  faCalendarCheck,\n  faBraille,\n  faPrescriptionBottleMedical,\n  faPrescriptionBottleAlt,\n  faLandmark,\n  faTruck,\n  faCrosshairs,\n  faPersonCane,\n  faTent,\n  faVestPatches,\n  faCheckDouble,\n  faArrowDownAZ,\n  faSortAlphaAsc,\n  faSortAlphaDown,\n  faMoneyBillWheat,\n  faCookie,\n  faArrowRotateLeft,\n  faArrowLeftRotate,\n  faArrowRotateBack,\n  faArrowRotateBackward,\n  faUndo,\n  faHardDrive,\n  faHdd,\n  faFaceGrinSquintTears,\n  faGrinSquintTears,\n  faDumbbell,\n  faRectangleList,\n  faListAlt,\n  faTarpDroplet,\n  faHouseMedicalCircleCheck,\n  faPersonSkiingNordic,\n  faSkiingNordic,\n  faCalendarPlus,\n  faPlaneArrival,\n  faCircleLeft,\n  faArrowAltCircleLeft,\n  faTrainSubway,\n  faSubway,\n  faChartGantt,\n  faIndianRupeeSign,\n  faIndianRupee,\n  faInr,\n  faCropSimple,\n  faCropAlt,\n  faMoneyBill1,\n  faMoneyBillAlt,\n  faLeftLong,\n  faLongArrowAltLeft,\n  faDna,\n  faVirusSlash,\n  faMinus,\n  faSubtract,\n  faChess,\n  faArrowLeftLong,\n  faLongArrowLeft,\n  faPlugCircleCheck,\n  faStreetView,\n  faFrancSign,\n  faVolumeOff,\n  faHandsAslInterpreting,\n  faAmericanSignLanguageInterpreting,\n  faAslInterpreting,\n  faHandsAmericanSignLanguageInterpreting,\n  faGear,\n  faCog,\n  faDropletSlash,\n  faTintSlash,\n  faMosque,\n  faMosquito,\n  faStarOfDavid,\n  faPersonMilitaryRifle,\n  faCartShopping,\n  faShoppingCart,\n  faVials,\n  faPlugCirclePlus,\n  faPlaceOfWorship,\n  faGripVertical,\n  faHexagonNodes,\n  faArrowTurnUp,\n  faLevelUp,\n  faU,\n  faSquareRootVariable,\n  faSquareRootAlt,\n  faClock,\n  faClockFour,\n  faBackwardStep,\n  faStepBackward,\n  faPallet,\n  faFaucet,\n  faBaseballBatBall,\n  faS,\n  faTimeline,\n  faKeyboard,\n  faCaretDown,\n  faHouseChimneyMedical,\n  faClinicMedical,\n  faTemperatureThreeQuarters,\n  faTemperature3,\n  faThermometer3,\n  faThermometerThreeQuarters,\n  faMobileScreen,\n  faMobileAndroidAlt,\n  faPlaneUp,\n  faPiggyBank,\n  faBatteryHalf,\n  faBattery3,\n  faMountainCity,\n  faCoins,\n  faKhanda,\n  faSliders,\n  faSlidersH,\n  faFolderTree,\n  faNetworkWired,\n  faMapPin,\n  faHamsa,\n  faCentSign,\n  faFlask,\n  faPersonPregnant,\n  faWandSparkles,\n  faEllipsisVertical,\n  faEllipsisV,\n  faTicket,\n  faPowerOff,\n  faRightLong,\n  faLongArrowAltRight,\n  faFlagUsa,\n  faLaptopFile,\n  faTty,\n  faTeletype,\n  faDiagramNext,\n  faPersonRifle,\n  faHouseMedicalCircleExclamation,\n  faClosedCaptioning,\n  faPersonHiking,\n  faHiking,\n  faVenusDouble,\n  faImages,\n  faCalculator,\n  faPeoplePulling,\n  faN,\n  faCableCar,\n  faTram,\n  faCloudRain,\n  faBuildingCircleXmark,\n  faShip,\n  faArrowsDownToLine,\n  faDownload,\n  faFaceGrin,\n  faGrin,\n  faDeleteLeft,\n  faBackspace,\n  faEyeDropper,\n  faEyeDropperEmpty,\n  faEyedropper,\n  faFileCircleCheck,\n  faForward,\n  faMobile,\n  faMobileAndroid,\n  faMobilePhone,\n  faFaceMeh,\n  faMeh,\n  faAlignCenter,\n  faBookSkull,\n  faBookDead,\n  faIdCard,\n  faDriversLicense,\n  faOutdent,\n  faDedent,\n  faHeartCircleExclamation,\n  faHouse,\n  faHome,\n  faHomeAlt,\n  faHomeLgAlt,\n  faCalendarWeek,\n  faLaptopMedical,\n  faB,\n  faFileMedical,\n  faDiceOne,\n  faKiwiBird,\n  faArrowRightArrowLeft,\n  faExchange,\n  faRotateRight,\n  faRedoAlt,\n  faRotateForward,\n  faUtensils,\n  faCutlery,\n  faArrowUpWideShort,\n  faSortAmountUp,\n  faMillSign,\n  faBowlRice,\n  faSkull,\n  faTowerBroadcast,\n  faBroadcastTower,\n  faTruckPickup,\n  faUpLong,\n  faLongArrowAltUp,\n  faStop,\n  faCodeMerge,\n  faUpload,\n  faHurricane,\n  faMound,\n  faToiletPortable,\n  faCompactDisc,\n  faFileArrowDown,\n  faFileDownload,\n  faCaravan,\n  faShieldCat,\n  faBolt,\n  faZap,\n  faGlassWater,\n  faOilWell,\n  faVault,\n  faMars,\n  faToilet,\n  faPlaneCircleXmark,\n  faYenSign,\n  faCny,\n  faJpy,\n  faRmb,\n  faYen,\n  faRubleSign,\n  faRouble,\n  faRub,\n  faRuble,\n  faSun,\n  faGuitar,\n  faFaceLaughWink,\n  faLaughWink,\n  faHorseHead,\n  faBoreHole,\n  faIndustry,\n  faCircleDown,\n  faArrowAltCircleDown,\n  faArrowsTurnToDots,\n  faFlorinSign,\n  faArrowDownShortWide,\n  faSortAmountDesc,\n  faSortAmountDownAlt,\n  faLessThan,\n  faAngleDown,\n  faCarTunnel,\n  faHeadSideCough,\n  faGripLines,\n  faThumbsDown,\n  faUserLock,\n  faArrowRightLong,\n  faLongArrowRight,\n  faAnchorCircleXmark,\n  faEllipsis,\n  faEllipsisH,\n  faChessPawn,\n  faKitMedical,\n  faFirstAid,\n  faPersonThroughWindow,\n  faToolbox,\n  faHandsHoldingCircle,\n  faBug,\n  faCreditCard,\n  faCreditCardAlt,\n  faCar,\n  faAutomobile,\n  faHandHoldingHand,\n  faBookOpenReader,\n  faBookReader,\n  faMountainSun,\n  faArrowsLeftRightToLine,\n  faDiceD20,\n  faTruckDroplet,\n  faFileCircleXmark,\n  faTemperatureArrowUp,\n  faTemperatureUp,\n  faMedal,\n  faBed,\n  faSquareH,\n  faHSquare,\n  faPodcast,\n  faTemperatureFull,\n  faTemperature4,\n  faThermometer4,\n  faThermometerFull,\n  faBell,\n  faSuperscript,\n  faPlugCircleXmark,\n  faStarOfLife,\n  faPhoneSlash,\n  faPaintRoller,\n  faHandshakeAngle,\n  faHandsHelping,\n  faLocationDot,\n  faMapMarkerAlt,\n  faFile,\n  faGreaterThan,\n  faPersonSwimming,\n  faSwimmer,\n  faArrowDown,\n  faDroplet,\n  faTint,\n  faEraser,\n  faEarthAmericas,\n  faEarth,\n  faEarthAmerica,\n  faGlobeAmericas,\n  faPersonBurst,\n  faDove,\n  faBatteryEmpty,\n  faBattery0,\n  faSocks,\n  faInbox,\n  faSection,\n  faGaugeHigh,\n  faTachometerAlt,\n  faTachometerAltFast,\n  faEnvelopeOpenText,\n  faHospital,\n  faHospitalAlt,\n  faHospitalWide,\n  faWineBottle,\n  faChessRook,\n  faBarsStaggered,\n  faReorder,\n  faStream,\n  faDharmachakra,\n  faHotdog,\n  faPersonWalkingWithCane,\n  faBlind,\n  faDrum,\n  faIceCream,\n  faHeartCircleBolt,\n  faFax,\n  faParagraph,\n  faCheckToSlot,\n  faVoteYea,\n  faStarHalf,\n  faBoxesStacked,\n  faBoxes,\n  faBoxesAlt,\n  faLink,\n  faChain,\n  faEarListen,\n  faAssistiveListeningSystems,\n  faTreeCity,\n  faPlay,\n  faFont,\n  faTableCellsRowLock,\n  faRupiahSign,\n  faMagnifyingGlass,\n  faSearch,\n  faTableTennisPaddleBall,\n  faPingPongPaddleBall,\n  faTableTennis,\n  faPersonDotsFromLine,\n  faDiagnoses,\n  faTrashCanArrowUp,\n  faTrashRestoreAlt,\n  faNairaSign,\n  faCartArrowDown,\n  faWalkieTalkie,\n  faFilePen,\n  faFileEdit,\n  faReceipt,\n  faSquarePen,\n  faPenSquare,\n  faPencilSquare,\n  faSuitcaseRolling,\n  faPersonCircleExclamation,\n  faChevronDown,\n  faBatteryFull,\n  faBattery,\n  faBattery5,\n  faSkullCrossbones,\n  faCodeCompare,\n  faListUl,\n  faListDots,\n  faSchoolLock,\n  faTowerCell,\n  faDownLong,\n  faLongArrowAltDown,\n  faRankingStar,\n  faChessKing,\n  faPersonHarassing,\n  faBrazilianRealSign,\n  faLandmarkDome,\n  faLandmarkAlt,\n  faArrowUp,\n  faTv,\n  faTelevision,\n  faTvAlt,\n  faShrimp,\n  faListCheck,\n  faTasks,\n  faJugDetergent,\n  faCircleUser,\n  faUserCircle,\n  faUserShield,\n  faWind,\n  faCarBurst,\n  faCarCrash,\n  faY,\n  faPersonSnowboarding,\n  faSnowboarding,\n  faTruckFast,\n  faShippingFast,\n  faFish,\n  faUserGraduate,\n  faCircleHalfStroke,\n  faAdjust,\n  faClapperboard,\n  faCircleRadiation,\n  faRadiationAlt,\n  faBaseball,\n  faBaseballBall,\n  faJetFighterUp,\n  faDiagramProject,\n  faProjectDiagram,\n  faCopy,\n  faVolumeXmark,\n  faVolumeMute,\n  faVolumeTimes,\n  faHandSparkles,\n  faGrip,\n  faGripHorizontal,\n  faShareFromSquare,\n  faShareSquare,\n  faChildCombatant,\n  faChildRifle,\n  faGun,\n  faSquarePhone,\n  faPhoneSquare,\n  faPlus,\n  faAdd,\n  faExpand,\n  faComputer,\n  faXmark,\n  faClose,\n  faMultiply,\n  faRemove,\n  faTimes,\n  faArrowsUpDownLeftRight,\n  faArrows,\n  faChalkboardUser,\n  faChalkboardTeacher,\n  faPesoSign,\n  faBuildingShield,\n  faBaby,\n  faUsersLine,\n  faQuoteLeft,\n  faQuoteLeftAlt,\n  faTractor,\n  faTrashArrowUp,\n  faTrashRestore,\n  faArrowDownUpLock,\n  faLinesLeaning,\n  faRulerCombined,\n  faCopyright,\n  faEquals,\n  faBlender,\n  faTeeth,\n  faShekelSign,\n  faIls,\n  faShekel,\n  faSheqel,\n  faSheqelSign,\n  faMap,\n  faRocket,\n  faPhotoFilm,\n  faPhotoVideo,\n  faFolderMinus,\n  faHexagonNodesBolt,\n  faStore,\n  faArrowTrendUp,\n  faPlugCircleMinus,\n  faSignHanging,\n  faSign,\n  faBezierCurve,\n  faBellSlash,\n  faTablet,\n  faTabletAndroid,\n  faSchoolFlag,\n  faFill,\n  faAngleUp,\n  faDrumstickBite,\n  faHollyBerry,\n  faChevronLeft,\n  faBacteria,\n  faHandLizard,\n  faNotdef,\n  faDisease,\n  faBriefcaseMedical,\n  faGenderless,\n  faChevronRight,\n  faRetweet,\n  faCarRear,\n  faCarAlt,\n  faPumpSoap,\n  faVideoSlash,\n  faBatteryQuarter,\n  faBattery2,\n  faRadio,\n  faBabyCarriage,\n  faCarriageBaby,\n  faTrafficLight,\n  faThermometer,\n  faVrCardboard,\n  faHandMiddleFinger,\n  faPercent,\n  faPercentage,\n  faTruckMoving,\n  faGlassWaterDroplet,\n  faDisplay,\n  faFaceSmile,\n  faSmile,\n  faThumbtack,\n  faThumbTack,\n  faTrophy,\n  faPersonPraying,\n  faPray,\n  faHammer,\n  faHandPeace,\n  faRotate,\n  faSyncAlt,\n  faSpinner,\n  faRobot,\n  faPeace,\n  faGears,\n  faCogs,\n  faWarehouse,\n  faArrowUpRightDots,\n  faSplotch,\n  faFaceGrinHearts,\n  faGrinHearts,\n  faDiceFour,\n  faSimCard,\n  faTransgender,\n  faTransgenderAlt,\n  faMercury,\n  faArrowTurnDown,\n  faLevelDown,\n  faPersonFallingBurst,\n  faAward,\n  faTicketSimple,\n  faTicketAlt,\n  faBuilding,\n  faAnglesLeft,\n  faAngleDoubleLeft,\n  faQrcode,\n  faClockRotateLeft,\n  faHistory,\n  faFaceGrinBeamSweat,\n  faGrinBeamSweat,\n  faFileExport,\n  faArrowRightFromFile,\n  faShield,\n  faShieldBlank,\n  faArrowUpShortWide,\n  faSortAmountUpAlt,\n  faCommentNodes,\n  faHouseMedical,\n  faGolfBallTee,\n  faGolfBall,\n  faCircleChevronLeft,\n  faChevronCircleLeft,\n  faHouseChimneyWindow,\n  faPenNib,\n  faTentArrowTurnLeft,\n  faTents,\n  faWandMagic,\n  faMagic,\n  faDog,\n  faCarrot,\n  faMoon,\n  faWineGlassEmpty,\n  faWineGlassAlt,\n  faCheese,\n  faYinYang,\n  faMusic,\n  faCodeCommit,\n  faTemperatureLow,\n  faPersonBiking,\n  faBiking,\n  faBroom,\n  faShieldHeart,\n  faGopuram,\n  faEarthOceania,\n  faGlobeOceania,\n  faSquareXmark,\n  faTimesSquare,\n  faXmarkSquare,\n  faHashtag,\n  faUpRightAndDownLeftFromCenter,\n  faExpandAlt,\n  faOilCan,\n  faT,\n  faHippo,\n  faChartColumn,\n  faInfinity,\n  faVialCircleCheck,\n  faPersonArrowDownToLine,\n  faVoicemail,\n  faFan,\n  faPersonWalkingLuggage,\n  faUpDown,\n  faArrowsAltV,\n  faCloudMoonRain,\n  faCalendar,\n  faTrailer,\n  faBahai,\n  faHaykal,\n  faSdCard,\n  faDragon,\n  faShoePrints,\n  faCirclePlus,\n  faPlusCircle,\n  faFaceGrinTongueWink,\n  faGrinTongueWink,\n  faHandHolding,\n  faPlugCircleExclamation,\n  faLinkSlash,\n  faChainBroken,\n  faChainSlash,\n  faUnlink,\n  faClone,\n  faPersonWalkingArrowLoopLeft,\n  faArrowUpZA,\n  faSortAlphaUpAlt,\n  faFireFlameCurved,\n  faFireAlt,\n  faTornado,\n  faFileCirclePlus,\n  faBookQuran,\n  faQuran,\n  faAnchor,\n  faBorderAll,\n  faFaceAngry,\n  faAngry,\n  faCookieBite,\n  faArrowTrendDown,\n  faRss,\n  faFeed,\n  faDrawPolygon,\n  faScaleBalanced,\n  faBalanceScale,\n  faGaugeSimpleHigh,\n  faTachometer,\n  faTachometerFast,\n  faShower,\n  faDesktop,\n  faDesktopAlt,\n  faM,\n  faTableList,\n  faThList,\n  faCommentSms,\n  faSms,\n  faBook,\n  faUserPlus,\n  faCheck,\n  faBatteryThreeQuarters,\n  faBattery4,\n  faHouseCircleCheck,\n  faAngleLeft,\n  faDiagramSuccessor,\n  faTruckArrowRight,\n  faArrowsSplitUpAndLeft,\n  faHandFist,\n  faFistRaised,\n  faCloudMoon,\n  faBriefcase,\n  faPersonFalling,\n  faImagePortrait,\n  faPortrait,\n  faUserTag,\n  faRug,\n  faEarthEurope,\n  faGlobeEurope,\n  faCartFlatbedSuitcase,\n  faLuggageCart,\n  faRectangleXmark,\n  faRectangleTimes,\n  faTimesRectangle,\n  faWindowClose,\n  faBahtSign,\n  faBookOpen,\n  faBookJournalWhills,\n  faJournalWhills,\n  faHandcuffs,\n  faTriangleExclamation,\n  faExclamationTriangle,\n  faWarning,\n  faDatabase,\n  faShare,\n  faMailForward,\n  faBottleDroplet,\n  faMaskFace,\n  faHillRockslide,\n  faRightLeft,\n  faExchangeAlt,\n  faPaperPlane,\n  faRoadCircleExclamation,\n  faDungeon,\n  faAlignRight,\n  faMoneyBill1Wave,\n  faMoneyBillWaveAlt,\n  faLifeRing,\n  faHands,\n  faSignLanguage,\n  faSigning,\n  faCalendarDay,\n  faWaterLadder,\n  faLadderWater,\n  faSwimmingPool,\n  faArrowsUpDown,\n  faArrowsV,\n  faFaceGrimace,\n  faGrimace,\n  faWheelchairMove,\n  faWheelchairAlt,\n  faTurnDown,\n  faLevelDownAlt,\n  faPersonWalkingArrowRight,\n  faSquareEnvelope,\n  faEnvelopeSquare,\n  faDice,\n  faBowlingBall,\n  faBrain,\n  faBandage,\n  faBandAid,\n  faCalendarMinus,\n  faCircleXmark,\n  faTimesCircle,\n  faXmarkCircle,\n  faGifts,\n  faHotel,\n  faEarthAsia,\n  faGlobeAsia,\n  faIdCardClip,\n  faIdCardAlt,\n  faMagnifyingGlassPlus,\n  faSearchPlus,\n  faThumbsUp,\n  faUserClock,\n  faHandDots,\n  faAllergies,\n  faFileInvoice,\n  faWindowMinimize,\n  faMugSaucer,\n  faCoffee,\n  faBrush,\n  faFileHalfDashed,\n  faMask,\n  faMagnifyingGlassMinus,\n  faSearchMinus,\n  faRulerVertical,\n  faUserLarge,\n  faUserAlt,\n  faTrainTram,\n  faUserNurse,\n  faSyringe,\n  faCloudSun,\n  faStopwatch20,\n  faSquareFull,\n  faMagnet,\n  faJar,\n  faNoteSticky,\n  faStickyNote,\n  faBugSlash,\n  faArrowUpFromWaterPump,\n  faBone,\n  faTableCellsRowUnlock,\n  faUserInjured,\n  faFaceSadTear,\n  faSadTear,\n  faPlane,\n  faTentArrowsDown,\n  faExclamation,\n  faArrowsSpin,\n  faPrint,\n  faTurkishLiraSign,\n  faTry,\n  faTurkishLira,\n  faDollarSign,\n  faDollar,\n  faUsd,\n  faX,\n  faMagnifyingGlassDollar,\n  faSearchDollar,\n  faUsersGear,\n  faUsersCog,\n  faPersonMilitaryPointing,\n  faBuildingColumns,\n  faBank,\n  faInstitution,\n  faMuseum,\n  faUniversity,\n  faUmbrella,\n  faTrowel,\n  faD,\n  faStapler,\n  faMasksTheater,\n  faTheaterMasks,\n  faKipSign,\n  faHandPointLeft,\n  faHandshakeSimple,\n  faHandshakeAlt,\n  faJetFighter,\n  faFighterJet,\n  faSquareShareNodes,\n  faShareAltSquare,\n  faBarcode,\n  faPlusMinus,\n  faVideo,\n  faVideoCamera,\n  faGraduationCap,\n  faMortarBoard,\n  faHandHoldingMedical,\n  faPersonCircleCheck,\n  faTurnUp,\n  faLevelUpAlt\n};\n\nexport { icons as fas, prefix, fa0, fa1, fa2, fa3, fa4, fa5, fa6, fa7, fa8, fa9, faFillDrip, faArrowsToCircle, faCircleChevronRight, faChevronCircleRight, faAt, faTrashCan, faTrashAlt, faTextHeight, faUserXmark, faUserTimes, faStethoscope, faMessage, faCommentAlt, faInfo, faDownLeftAndUpRightToCenter, faCompressAlt, faExplosion, faFileLines, faFileAlt, faFileText, faWaveSquare, faRing, faBuildingUn, faDiceThree, faCalendarDays, faCalendarAlt, faAnchorCircleCheck, faBuildingCircleArrowRight, faVolleyball, faVolleyballBall, faArrowsUpToLine, faSortDown, faSortDesc, faCircleMinus, faMinusCircle, faDoorOpen, faRightFromBracket, faSignOutAlt, faAtom, faSoap, faIcons, faHeartMusicCameraBolt, faMicrophoneLinesSlash, faMicrophoneAltSlash, faBridgeCircleCheck, faPumpMedical, faFingerprint, faHandPointRight, faMagnifyingGlassLocation, faSearchLocation, faForwardStep, faStepForward, faFaceSmileBeam, faSmileBeam, faFlagCheckered, faFootball, faFootballBall, faSchoolCircleExclamation, faCrop, faAnglesDown, faAngleDoubleDown, faUsersRectangle, faPeopleRoof, faPeopleLine, faBeerMugEmpty, faBeer, faDiagramPredecessor, faArrowUpLong, faLongArrowUp, faFireFlameSimple, faBurn, faPerson, faMale, faLaptop, faFileCsv, faMenorah, faTruckPlane, faRecordVinyl, faFaceGrinStars, faGrinStars, faBong, faSpaghettiMonsterFlying, faPastafarianism, faArrowDownUpAcrossLine, faSpoon, faUtensilSpoon, faJarWheat, faEnvelopesBulk, faMailBulk, faFileCircleExclamation, faCircleH, faHospitalSymbol, faPager, faAddressBook, faContactBook, faStrikethrough, faK, faLandmarkFlag, faPencil, faPencilAlt, faBackward, faCaretRight, faComments, faPaste, faFileClipboard, faCodePullRequest, faClipboardList, faTruckRampBox, faTruckLoading, faUserCheck, faVialVirus, faSheetPlastic, faBlog, faUserNinja, faPersonArrowUpFromLine, faScrollTorah, faTorah, faBroomBall, faQuidditch, faQuidditchBroomBall, faToggleOff, faBoxArchive, faArchive, faPersonDrowning, faArrowDown91, faSortNumericDesc, faSortNumericDownAlt, faFaceGrinTongueSquint, faGrinTongueSquint, faSprayCan, faTruckMonster, faW, faEarthAfrica, faGlobeAfrica, faRainbow, faCircleNotch, faTabletScreenButton, faTabletAlt, faPaw, faCloud, faTrowelBricks, faFaceFlushed, faFlushed, faHospitalUser, faTentArrowLeftRight, faGavel, faLegal, faBinoculars, faMicrophoneSlash, faBoxTissue, faMotorcycle, faBellConcierge, faConciergeBell, faPenRuler, faPencilRuler, faPeopleArrows, faPeopleArrowsLeftRight, faMarsAndVenusBurst, faSquareCaretRight, faCaretSquareRight, faScissors, faCut, faSunPlantWilt, faToiletsPortable, faHockeyPuck, faTable, faMagnifyingGlassArrowRight, faTachographDigital, faDigitalTachograph, faUsersSlash, faClover, faReply, faMailReply, faStarAndCrescent, faHouseFire, faSquareMinus, faMinusSquare, faHelicopter, faCompass, faSquareCaretDown, faCaretSquareDown, faFileCircleQuestion, faLaptopCode, faSwatchbook, faPrescriptionBottle, faBars, faNavicon, faPeopleGroup, faHourglassEnd, faHourglass3, faHeartCrack, faHeartBroken, faSquareUpRight, faExternalLinkSquareAlt, faFaceKissBeam, faKissBeam, faFilm, faRulerHorizontal, faPeopleRobbery, faLightbulb, faCaretLeft, faCircleExclamation, faExclamationCircle, faSchoolCircleXmark, faArrowRightFromBracket, faSignOut, faCircleChevronDown, faChevronCircleDown, faUnlockKeyhole, faUnlockAlt, faCloudShowersHeavy, faHeadphonesSimple, faHeadphonesAlt, faSitemap, faCircleDollarToSlot, faDonate, faMemory, faRoadSpikes, faFireBurner, faFlag, faHanukiah, faFeather, faVolumeLow, faVolumeDown, faCommentSlash, faCloudSunRain, faCompress, faWheatAwn, faWheatAlt, faAnkh, faHandsHoldingChild, faAsterisk, faSquareCheck, faCheckSquare, faPesetaSign, faHeading, faHeader, faGhost, faList, faListSquares, faSquarePhoneFlip, faPhoneSquareAlt, faCartPlus, faGamepad, faCircleDot, faDotCircle, faFaceDizzy, faDizzy, faEgg, faHouseMedicalCircleXmark, faCampground, faFolderPlus, faFutbol, faFutbolBall, faSoccerBall, faPaintbrush, faPaintBrush, faLock, faGasPump, faHotTubPerson, faHotTub, faMapLocation, faMapMarked, faHouseFloodWater, faTree, faBridgeLock, faSackDollar, faPenToSquare, faEdit, faCarSide, faShareNodes, faShareAlt, faHeartCircleMinus, faHourglassHalf, faHourglass2, faMicroscope, faSink, faBagShopping, faShoppingBag, faArrowDownZA, faSortAlphaDesc, faSortAlphaDownAlt, faMitten, faPersonRays, faUsers, faEyeSlash, faFlaskVial, faHand, faHandPaper, faOm, faWorm, faHouseCircleXmark, faPlug, faChevronUp, faHandSpock, faStopwatch, faFaceKiss, faKiss, faBridgeCircleXmark, faFaceGrinTongue, faGrinTongue, faChessBishop, faFaceGrinWink, faGrinWink, faEarDeaf, faDeaf, faDeafness, faHardOfHearing, faRoadCircleCheck, faDiceFive, faSquareRss, faRssSquare, faLandMineOn, faICursor, faStamp, faStairs, faI, faHryvniaSign, faHryvnia, faPills, faFaceGrinWide, faGrinAlt, faTooth, faV, faBangladeshiTakaSign, faBicycle, faStaffSnake, faRodAsclepius, faRodSnake, faStaffAesculapius, faHeadSideCoughSlash, faTruckMedical, faAmbulance, faWheatAwnCircleExclamation, faSnowman, faMortarPestle, faRoadBarrier, faSchool, faIgloo, faJoint, faAngleRight, faHorse, faQ, faG, faNotesMedical, faTemperatureHalf, faTemperature2, faThermometer2, faThermometerHalf, faDongSign, faCapsules, faPooStorm, faPooBolt, faFaceFrownOpen, faFrownOpen, faHandPointUp, faMoneyBill, faBookmark, faAlignJustify, faUmbrellaBeach, faHelmetUn, faBullseye, faBacon, faHandPointDown, faArrowUpFromBracket, faFolder, faFolderBlank, faFileWaveform, faFileMedicalAlt, faRadiation, faChartSimple, faMarsStroke, faVial, faGauge, faDashboard, faGaugeMed, faTachometerAltAverage, faWandMagicSparkles, faMagicWandSparkles, faE, faPenClip, faPenAlt, faBridgeCircleExclamation, faUser, faSchoolCircleCheck, faDumpster, faVanShuttle, faShuttleVan, faBuildingUser, faSquareCaretLeft, faCaretSquareLeft, faHighlighter, faKey, faBullhorn, faGlobe, faSynagogue, faPersonHalfDress, faRoadBridge, faLocationArrow, faC, faTabletButton, faBuildingLock, faPizzaSlice, faMoneyBillWave, faChartArea, faAreaChart, faHouseFlag, faPersonCircleMinus, faBan, faCancel, faCameraRotate, faSprayCanSparkles, faAirFreshener, faStar, faRepeat, faCross, faBox, faVenusMars, faArrowPointer, faMousePointer, faMaximize, faExpandArrowsAlt, faChargingStation, faShapes, faTriangleCircleSquare, faShuffle, faRandom, faPersonRunning, faRunning, faMobileRetro, faGripLinesVertical, faSpider, faHandsBound, faFileInvoiceDollar, faPlaneCircleExclamation, faXRay, faSpellCheck, faSlash, faComputerMouse, faMouse, faArrowRightToBracket, faSignIn, faShopSlash, faStoreAltSlash, faServer, faVirusCovidSlash, faShopLock, faHourglassStart, faHourglass1, faBlenderPhone, faBuildingWheat, faPersonBreastfeeding, faRightToBracket, faSignInAlt, faVenus, faPassport, faThumbtackSlash, faThumbTackSlash, faHeartPulse, faHeartbeat, faPeopleCarryBox, faPeopleCarry, faTemperatureHigh, faMicrochip, faCrown, faWeightHanging, faXmarksLines, faFilePrescription, faWeightScale, faWeight, faUserGroup, faUserFriends, faArrowUpAZ, faSortAlphaUp, faChessKnight, faFaceLaughSquint, faLaughSquint, faWheelchair, faCircleArrowUp, faArrowCircleUp, faToggleOn, faPersonWalking, faWalking, faL, faFire, faBedPulse, faProcedures, faShuttleSpace, faSpaceShuttle, faFaceLaugh, faLaugh, faFolderOpen, faHeartCirclePlus, faCodeFork, faCity, faMicrophoneLines, faMicrophoneAlt, faPepperHot, faUnlock, faColonSign, faHeadset, faStoreSlash, faRoadCircleXmark, faUserMinus, faMarsStrokeUp, faMarsStrokeV, faChampagneGlasses, faGlassCheers, faClipboard, faHouseCircleExclamation, faFileArrowUp, faFileUpload, faWifi, faWifi3, faWifiStrong, faBath, faBathtub, faUnderline, faUserPen, faUserEdit, faSignature, faStroopwafel, faBold, faAnchorLock, faBuildingNgo, faManatSign, faNotEqual, faBorderTopLeft, faBorderStyle, faMapLocationDot, faMapMarkedAlt, faJedi, faSquarePollVertical, faPoll, faMugHot, faCarBattery, faBatteryCar, faGift, faDiceTwo, faChessQueen, faGlasses, faChessBoard, faBuildingCircleCheck, faPersonChalkboard, faMarsStrokeRight, faMarsStrokeH, faHandBackFist, faHandRock, faSquareCaretUp, faCaretSquareUp, faCloudShowersWater, faChartBar, faBarChart, faHandsBubbles, faHandsWash, faLessThanEqual, faTrain, faEyeLowVision, faLowVision, faCrow, faSailboat, faWindowRestore, faSquarePlus, faPlusSquare, faToriiGate, faFrog, faBucket, faImage, faMicrophone, faCow, faCaretUp, faScrewdriver, faFolderClosed, faHouseTsunami, faSquareNfi, faArrowUpFromGroundWater, faMartiniGlass, faGlassMartiniAlt, faSquareBinary, faRotateLeft, faRotateBack, faRotateBackward, faUndoAlt, faTableColumns, faColumns, faLemon, faHeadSideMask, faHandshake, faGem, faDolly, faDollyBox, faSmoking, faMinimize, faCompressArrowsAlt, faMonument, faSnowplow, faAnglesRight, faAngleDoubleRight, faCannabis, faCirclePlay, faPlayCircle, faTablets, faEthernet, faEuroSign, faEur, faEuro, faChair, faCircleCheck, faCheckCircle, faCircleStop, faStopCircle, faCompassDrafting, faDraftingCompass, faPlateWheat, faIcicles, faPersonShelter, faNeuter, faIdBadge, faMarker, faFaceLaughBeam, faLaughBeam, faHelicopterSymbol, faUniversalAccess, faCircleChevronUp, faChevronCircleUp, faLariSign, faVolcano, faPersonWalkingDashedLineArrowRight, faSterlingSign, faGbp, faPoundSign, faViruses, faSquarePersonConfined, faUserTie, faArrowDownLong, faLongArrowDown, faTentArrowDownToLine, faCertificate, faReplyAll, faMailReplyAll, faSuitcase, faPersonSkating, faSkating, faFilterCircleDollar, faFunnelDollar, faCameraRetro, faCircleArrowDown, faArrowCircleDown, faFileImport, faArrowRightToFile, faSquareArrowUpRight, faExternalLinkSquare, faBoxOpen, faScroll, faSpa, faLocationPinLock, faPause, faHillAvalanche, faTemperatureEmpty, faTemperature0, faThermometer0, faThermometerEmpty, faBomb, faRegistered, faAddressCard, faContactCard, faVcard, faScaleUnbalancedFlip, faBalanceScaleRight, faSubscript, faDiamondTurnRight, faDirections, faBurst, faHouseLaptop, faLaptopHouse, faFaceTired, faTired, faMoneyBills, faSmog, faCrutch, faFontAwesome, faFontAwesomeFlag, faFontAwesomeLogoFull, faCloudArrowUp, faCloudUpload, faCloudUploadAlt, faPalette, faArrowsTurnRight, faVest, faFerry, faArrowsDownToPeople, faSeedling, faSprout, faLeftRight, faArrowsAltH, faBoxesPacking, faCircleArrowLeft, faArrowCircleLeft, faGroupArrowsRotate, faBowlFood, faCandyCane, faArrowDownWideShort, faSortAmountAsc, faSortAmountDown, faCloudBolt, faThunderstorm, faTextSlash, faRemoveFormat, faFaceSmileWink, faSmileWink, faFileWord, faFilePowerpoint, faArrowsLeftRight, faArrowsH, faHouseLock, faCloudArrowDown, faCloudDownload, faCloudDownloadAlt, faChildren, faChalkboard, faBlackboard, faUserLargeSlash, faUserAltSlash, faEnvelopeOpen, faHandshakeSimpleSlash, faHandshakeAltSlash, faMattressPillow, faGuaraniSign, faArrowsRotate, faRefresh, faSync, faFireExtinguisher, faCruzeiroSign, faGreaterThanEqual, faShieldHalved, faShieldAlt, faBookAtlas, faAtlas, faVirus, faEnvelopeCircleCheck, faLayerGroup, faArrowsToDot, faArchway, faHeartCircleCheck, faHouseChimneyCrack, faHouseDamage, faFileZipper, faFileArchive, faSquare, faMartiniGlassEmpty, faGlassMartini, faCouch, faCediSign, faItalic, faTableCellsColumnLock, faChurch, faCommentsDollar, faDemocrat, faZ, faPersonSkiing, faSkiing, faRoadLock, faA, faTemperatureArrowDown, faTemperatureDown, faFeatherPointed, faFeatherAlt, faP, faSnowflake, faNewspaper, faRectangleAd, faAd, faCircleArrowRight, faArrowCircleRight, faFilterCircleXmark, faLocust, faSort, faUnsorted, faListOl, faList12, faListNumeric, faPersonDressBurst, faMoneyCheckDollar, faMoneyCheckAlt, faVectorSquare, faBreadSlice, faLanguage, faFaceKissWinkHeart, faKissWinkHeart, faFilter, faQuestion, faFileSignature, faUpDownLeftRight, faArrowsAlt, faHouseChimneyUser, faHandHoldingHeart, faPuzzlePiece, faMoneyCheck, faStarHalfStroke, faStarHalfAlt, faCode, faWhiskeyGlass, faGlassWhiskey, faBuildingCircleExclamation, faMagnifyingGlassChart, faArrowUpRightFromSquare, faExternalLink, faCubesStacked, faWonSign, faKrw, faWon, faVirusCovid, faAustralSign, faF, faLeaf, faRoad, faTaxi, faCab, faPersonCirclePlus, faChartPie, faPieChart, faBoltLightning, faSackXmark, faFileExcel, faFileContract, faFishFins, faBuildingFlag, faFaceGrinBeam, faGrinBeam, faObjectUngroup, faPoop, faLocationPin, faMapMarker, faKaaba, faToiletPaper, faHelmetSafety, faHardHat, faHatHard, faEject, faCircleRight, faArrowAltCircleRight, faPlaneCircleCheck, faFaceRollingEyes, faMehRollingEyes, faObjectGroup, faChartLine, faLineChart, faMaskVentilator, faArrowRight, faSignsPost, faMapSigns, faCashRegister, faPersonCircleQuestion, faH, faTarp, faScrewdriverWrench, faTools, faArrowsToEye, faPlugCircleBolt, faHeart, faMarsAndVenus, faHouseUser, faHomeUser, faDumpsterFire, faHouseCrack, faMartiniGlassCitrus, faCocktail, faFaceSurprise, faSurprise, faBottleWater, faCirclePause, faPauseCircle, faToiletPaperSlash, faAppleWhole, faAppleAlt, faKitchenSet, faR, faTemperatureQuarter, faTemperature1, faThermometer1, faThermometerQuarter, faCube, faBitcoinSign, faShieldDog, faSolarPanel, faLockOpen, faElevator, faMoneyBillTransfer, faMoneyBillTrendUp, faHouseFloodWaterCircleArrowRight, faSquarePollHorizontal, faPollH, faCircle, faBackwardFast, faFastBackward, faRecycle, faUserAstronaut, faPlaneSlash, faTrademark, faBasketball, faBasketballBall, faSatelliteDish, faCircleUp, faArrowAltCircleUp, faMobileScreenButton, faMobileAlt, faVolumeHigh, faVolumeUp, faUsersRays, faWallet, faClipboardCheck, faFileAudio, faBurger, faHamburger, faWrench, faBugs, faRupeeSign, faRupee, faFileImage, faCircleQuestion, faQuestionCircle, faPlaneDeparture, faHandshakeSlash, faBookBookmark, faCodeBranch, faHatCowboy, faBridge, faPhoneFlip, faPhoneAlt, faTruckFront, faCat, faAnchorCircleExclamation, faTruckField, faRoute, faClipboardQuestion, faPanorama, faCommentMedical, faTeethOpen, faFileCircleMinus, faTags, faWineGlass, faForwardFast, faFastForward, faFaceMehBlank, faMehBlank, faSquareParking, faParking, faHouseSignal, faBarsProgress, faTasksAlt, faFaucetDrip, faCartFlatbed, faDollyFlatbed, faBanSmoking, faSmokingBan, faTerminal, faMobileButton, faHouseMedicalFlag, faBasketShopping, faShoppingBasket, faTape, faBusSimple, faBusAlt, faEye, faFaceSadCry, faSadCry, faAudioDescription, faPersonMilitaryToPerson, faFileShield, faUserSlash, faPen, faTowerObservation, faFileCode, faSignal, faSignal5, faSignalPerfect, faBus, faHeartCircleXmark, faHouseChimney, faHomeLg, faWindowMaximize, faFaceFrown, faFrown, faPrescription, faShop, faStoreAlt, faFloppyDisk, faSave, faVihara, faScaleUnbalanced, faBalanceScaleLeft, faSortUp, faSortAsc, faCommentDots, faCommenting, faPlantWilt, faDiamond, faFaceGrinSquint, faGrinSquint, faHandHoldingDollar, faHandHoldingUsd, faChartDiagram, faBacterium, faHandPointer, faDrumSteelpan, faHandScissors, faHandsPraying, faPrayingHands, faArrowRotateRight, faArrowRightRotate, faArrowRotateForward, faRedo, faWebAwesome, faBiohazard, faLocationCrosshairs, faLocation, faMarsDouble, faChildDress, faUsersBetweenLines, faLungsVirus, faFaceGrinTears, faGrinTears, faPhone, faCalendarXmark, faCalendarTimes, faChildReaching, faHeadSideVirus, faUserGear, faUserCog, faArrowUp19, faSortNumericUp, faDoorClosed, faShieldVirus, faDiceSix, faMosquitoNet, faFileFragment, faBridgeWater, faPersonBooth, faTextWidth, faHatWizard, faPenFancy, faPersonDigging, faDigging, faTrash, faGaugeSimple, faGaugeSimpleMed, faTachometerAverage, faBookMedical, faPoo, faQuoteRight, faQuoteRightAlt, faShirt, faTShirt, faTshirt, faCubes, faDivide, faTengeSign, faTenge, faHeadphones, faHandsHolding, faHandsClapping, faRepublican, faArrowLeft, faPersonCircleXmark, faRuler, faAlignLeft, faDiceD6, faRestroom, faJ, faUsersViewfinder, faFileVideo, faUpRightFromSquare, faExternalLinkAlt, faTableCells, faTh, faFilePdf, faBookBible, faBible, faO, faSuitcaseMedical, faMedkit, faUserSecret, faOtter, faPersonDress, faFemale, faCommentDollar, faBusinessTime, faBriefcaseClock, faTableCellsLarge, faThLarge, faBookTanakh, faTanakh, faPhoneVolume, faVolumeControlPhone, faHatCowboySide, faClipboardUser, faChild, faLiraSign, faSatellite, faPlaneLock, faTag, faComment, faCakeCandles, faBirthdayCake, faCake, faEnvelope, faAnglesUp, faAngleDoubleUp, faPaperclip, faArrowRightToCity, faRibbon, faLungs, faArrowUp91, faSortNumericUpAlt, faLitecoinSign, faBorderNone, faCircleNodes, faParachuteBox, faIndent, faTruckFieldUn, faHourglass, faHourglassEmpty, faMountain, faUserDoctor, faUserMd, faCircleInfo, faInfoCircle, faCloudMeatball, faCamera, faCameraAlt, faSquareVirus, faMeteor, faCarOn, faSleigh, faArrowDown19, faSortNumericAsc, faSortNumericDown, faHandHoldingDroplet, faHandHoldingWater, faWater, faCalendarCheck, faBraille, faPrescriptionBottleMedical, faPrescriptionBottleAlt, faLandmark, faTruck, faCrosshairs, faPersonCane, faTent, faVestPatches, faCheckDouble, faArrowDownAZ, faSortAlphaAsc, faSortAlphaDown, faMoneyBillWheat, faCookie, faArrowRotateLeft, faArrowLeftRotate, faArrowRotateBack, faArrowRotateBackward, faUndo, faHardDrive, faHdd, faFaceGrinSquintTears, faGrinSquintTears, faDumbbell, faRectangleList, faListAlt, faTarpDroplet, faHouseMedicalCircleCheck, faPersonSkiingNordic, faSkiingNordic, faCalendarPlus, faPlaneArrival, faCircleLeft, faArrowAltCircleLeft, faTrainSubway, faSubway, faChartGantt, faIndianRupeeSign, faIndianRupee, faInr, faCropSimple, faCropAlt, faMoneyBill1, faMoneyBillAlt, faLeftLong, faLongArrowAltLeft, faDna, faVirusSlash, faMinus, faSubtract, faChess, faArrowLeftLong, faLongArrowLeft, faPlugCircleCheck, faStreetView, faFrancSign, faVolumeOff, faHandsAslInterpreting, faAmericanSignLanguageInterpreting, faAslInterpreting, faHandsAmericanSignLanguageInterpreting, faGear, faCog, faDropletSlash, faTintSlash, faMosque, faMosquito, faStarOfDavid, faPersonMilitaryRifle, faCartShopping, faShoppingCart, faVials, faPlugCirclePlus, faPlaceOfWorship, faGripVertical, faHexagonNodes, faArrowTurnUp, faLevelUp, faU, faSquareRootVariable, faSquareRootAlt, faClock, faClockFour, faBackwardStep, faStepBackward, faPallet, faFaucet, faBaseballBatBall, faS, faTimeline, faKeyboard, faCaretDown, faHouseChimneyMedical, faClinicMedical, faTemperatureThreeQuarters, faTemperature3, faThermometer3, faThermometerThreeQuarters, faMobileScreen, faMobileAndroidAlt, faPlaneUp, faPiggyBank, faBatteryHalf, faBattery3, faMountainCity, faCoins, faKhanda, faSliders, faSlidersH, faFolderTree, faNetworkWired, faMapPin, faHamsa, faCentSign, faFlask, faPersonPregnant, faWandSparkles, faEllipsisVertical, faEllipsisV, faTicket, faPowerOff, faRightLong, faLongArrowAltRight, faFlagUsa, faLaptopFile, faTty, faTeletype, faDiagramNext, faPersonRifle, faHouseMedicalCircleExclamation, faClosedCaptioning, faPersonHiking, faHiking, faVenusDouble, faImages, faCalculator, faPeoplePulling, faN, faCableCar, faTram, faCloudRain, faBuildingCircleXmark, faShip, faArrowsDownToLine, faDownload, faFaceGrin, faGrin, faDeleteLeft, faBackspace, faEyeDropper, faEyeDropperEmpty, faEyedropper, faFileCircleCheck, faForward, faMobile, faMobileAndroid, faMobilePhone, faFaceMeh, faMeh, faAlignCenter, faBookSkull, faBookDead, faIdCard, faDriversLicense, faOutdent, faDedent, faHeartCircleExclamation, faHouse, faHome, faHomeAlt, faHomeLgAlt, faCalendarWeek, faLaptopMedical, faB, faFileMedical, faDiceOne, faKiwiBird, faArrowRightArrowLeft, faExchange, faRotateRight, faRedoAlt, faRotateForward, faUtensils, faCutlery, faArrowUpWideShort, faSortAmountUp, faMillSign, faBowlRice, faSkull, faTowerBroadcast, faBroadcastTower, faTruckPickup, faUpLong, faLongArrowAltUp, faStop, faCodeMerge, faUpload, faHurricane, faMound, faToiletPortable, faCompactDisc, faFileArrowDown, faFileDownload, faCaravan, faShieldCat, faBolt, faZap, faGlassWater, faOilWell, faVault, faMars, faToilet, faPlaneCircleXmark, faYenSign, faCny, faJpy, faRmb, faYen, faRubleSign, faRouble, faRub, faRuble, faSun, faGuitar, faFaceLaughWink, faLaughWink, faHorseHead, faBoreHole, faIndustry, faCircleDown, faArrowAltCircleDown, faArrowsTurnToDots, faFlorinSign, faArrowDownShortWide, faSortAmountDesc, faSortAmountDownAlt, faLessThan, faAngleDown, faCarTunnel, faHeadSideCough, faGripLines, faThumbsDown, faUserLock, faArrowRightLong, faLongArrowRight, faAnchorCircleXmark, faEllipsis, faEllipsisH, faChessPawn, faKitMedical, faFirstAid, faPersonThroughWindow, faToolbox, faHandsHoldingCircle, faBug, faCreditCard, faCreditCardAlt, faCar, faAutomobile, faHandHoldingHand, faBookOpenReader, faBookReader, faMountainSun, faArrowsLeftRightToLine, faDiceD20, faTruckDroplet, faFileCircleXmark, faTemperatureArrowUp, faTemperatureUp, faMedal, faBed, faSquareH, faHSquare, faPodcast, faTemperatureFull, faTemperature4, faThermometer4, faThermometerFull, faBell, faSuperscript, faPlugCircleXmark, faStarOfLife, faPhoneSlash, faPaintRoller, faHandshakeAngle, faHandsHelping, faLocationDot, faMapMarkerAlt, faFile, faGreaterThan, faPersonSwimming, faSwimmer, faArrowDown, faDroplet, faTint, faEraser, faEarthAmericas, faEarth, faEarthAmerica, faGlobeAmericas, faPersonBurst, faDove, faBatteryEmpty, faBattery0, faSocks, faInbox, faSection, faGaugeHigh, faTachometerAlt, faTachometerAltFast, faEnvelopeOpenText, faHospital, faHospitalAlt, faHospitalWide, faWineBottle, faChessRook, faBarsStaggered, faReorder, faStream, faDharmachakra, faHotdog, faPersonWalkingWithCane, faBlind, faDrum, faIceCream, faHeartCircleBolt, faFax, faParagraph, faCheckToSlot, faVoteYea, faStarHalf, faBoxesStacked, faBoxes, faBoxesAlt, faLink, faChain, faEarListen, faAssistiveListeningSystems, faTreeCity, faPlay, faFont, faTableCellsRowLock, faRupiahSign, faMagnifyingGlass, faSearch, faTableTennisPaddleBall, faPingPongPaddleBall, faTableTennis, faPersonDotsFromLine, faDiagnoses, faTrashCanArrowUp, faTrashRestoreAlt, faNairaSign, faCartArrowDown, faWalkieTalkie, faFilePen, faFileEdit, faReceipt, faSquarePen, faPenSquare, faPencilSquare, faSuitcaseRolling, faPersonCircleExclamation, faChevronDown, faBatteryFull, faBattery, faBattery5, faSkullCrossbones, faCodeCompare, faListUl, faListDots, faSchoolLock, faTowerCell, faDownLong, faLongArrowAltDown, faRankingStar, faChessKing, faPersonHarassing, faBrazilianRealSign, faLandmarkDome, faLandmarkAlt, faArrowUp, faTv, faTelevision, faTvAlt, faShrimp, faListCheck, faTasks, faJugDetergent, faCircleUser, faUserCircle, faUserShield, faWind, faCarBurst, faCarCrash, faY, faPersonSnowboarding, faSnowboarding, faTruckFast, faShippingFast, faFish, faUserGraduate, faCircleHalfStroke, faAdjust, faClapperboard, faCircleRadiation, faRadiationAlt, faBaseball, faBaseballBall, faJetFighterUp, faDiagramProject, faProjectDiagram, faCopy, faVolumeXmark, faVolumeMute, faVolumeTimes, faHandSparkles, faGrip, faGripHorizontal, faShareFromSquare, faShareSquare, faChildCombatant, faChildRifle, faGun, faSquarePhone, faPhoneSquare, faPlus, faAdd, faExpand, faComputer, faXmark, faClose, faMultiply, faRemove, faTimes, faArrowsUpDownLeftRight, faArrows, faChalkboardUser, faChalkboardTeacher, faPesoSign, faBuildingShield, faBaby, faUsersLine, faQuoteLeft, faQuoteLeftAlt, faTractor, faTrashArrowUp, faTrashRestore, faArrowDownUpLock, faLinesLeaning, faRulerCombined, faCopyright, faEquals, faBlender, faTeeth, faShekelSign, faIls, faShekel, faSheqel, faSheqelSign, faMap, faRocket, faPhotoFilm, faPhotoVideo, faFolderMinus, faHexagonNodesBolt, faStore, faArrowTrendUp, faPlugCircleMinus, faSignHanging, faSign, faBezierCurve, faBellSlash, faTablet, faTabletAndroid, faSchoolFlag, faFill, faAngleUp, faDrumstickBite, faHollyBerry, faChevronLeft, faBacteria, faHandLizard, faNotdef, faDisease, faBriefcaseMedical, faGenderless, faChevronRight, faRetweet, faCarRear, faCarAlt, faPumpSoap, faVideoSlash, faBatteryQuarter, faBattery2, faRadio, faBabyCarriage, faCarriageBaby, faTrafficLight, faThermometer, faVrCardboard, faHandMiddleFinger, faPercent, faPercentage, faTruckMoving, faGlassWaterDroplet, faDisplay, faFaceSmile, faSmile, faThumbtack, faThumbTack, faTrophy, faPersonPraying, faPray, faHammer, faHandPeace, faRotate, faSyncAlt, faSpinner, faRobot, faPeace, faGears, faCogs, faWarehouse, faArrowUpRightDots, faSplotch, faFaceGrinHearts, faGrinHearts, faDiceFour, faSimCard, faTransgender, faTransgenderAlt, faMercury, faArrowTurnDown, faLevelDown, faPersonFallingBurst, faAward, faTicketSimple, faTicketAlt, faBuilding, faAnglesLeft, faAngleDoubleLeft, faQrcode, faClockRotateLeft, faHistory, faFaceGrinBeamSweat, faGrinBeamSweat, faFileExport, faArrowRightFromFile, faShield, faShieldBlank, faArrowUpShortWide, faSortAmountUpAlt, faCommentNodes, faHouseMedical, faGolfBallTee, faGolfBall, faCircleChevronLeft, faChevronCircleLeft, faHouseChimneyWindow, faPenNib, faTentArrowTurnLeft, faTents, faWandMagic, faMagic, faDog, faCarrot, faMoon, faWineGlassEmpty, faWineGlassAlt, faCheese, faYinYang, faMusic, faCodeCommit, faTemperatureLow, faPersonBiking, faBiking, faBroom, faShieldHeart, faGopuram, faEarthOceania, faGlobeOceania, faSquareXmark, faTimesSquare, faXmarkSquare, faHashtag, faUpRightAndDownLeftFromCenter, faExpandAlt, faOilCan, faT, faHippo, faChartColumn, faInfinity, faVialCircleCheck, faPersonArrowDownToLine, faVoicemail, faFan, faPersonWalkingLuggage, faUpDown, faArrowsAltV, faCloudMoonRain, faCalendar, faTrailer, faBahai, faHaykal, faSdCard, faDragon, faShoePrints, faCirclePlus, faPlusCircle, faFaceGrinTongueWink, faGrinTongueWink, faHandHolding, faPlugCircleExclamation, faLinkSlash, faChainBroken, faChainSlash, faUnlink, faClone, faPersonWalkingArrowLoopLeft, faArrowUpZA, faSortAlphaUpAlt, faFireFlameCurved, faFireAlt, faTornado, faFileCirclePlus, faBookQuran, faQuran, faAnchor, faBorderAll, faFaceAngry, faAngry, faCookieBite, faArrowTrendDown, faRss, faFeed, faDrawPolygon, faScaleBalanced, faBalanceScale, faGaugeSimpleHigh, faTachometer, faTachometerFast, faShower, faDesktop, faDesktopAlt, faM, faTableList, faThList, faCommentSms, faSms, faBook, faUserPlus, faCheck, faBatteryThreeQuarters, faBattery4, faHouseCircleCheck, faAngleLeft, faDiagramSuccessor, faTruckArrowRight, faArrowsSplitUpAndLeft, faHandFist, faFistRaised, faCloudMoon, faBriefcase, faPersonFalling, faImagePortrait, faPortrait, faUserTag, faRug, faEarthEurope, faGlobeEurope, faCartFlatbedSuitcase, faLuggageCart, faRectangleXmark, faRectangleTimes, faTimesRectangle, faWindowClose, faBahtSign, faBookOpen, faBookJournalWhills, faJournalWhills, faHandcuffs, faTriangleExclamation, faExclamationTriangle, faWarning, faDatabase, faShare, faMailForward, faBottleDroplet, faMaskFace, faHillRockslide, faRightLeft, faExchangeAlt, faPaperPlane, faRoadCircleExclamation, faDungeon, faAlignRight, faMoneyBill1Wave, faMoneyBillWaveAlt, faLifeRing, faHands, faSignLanguage, faSigning, faCalendarDay, faWaterLadder, faLadderWater, faSwimmingPool, faArrowsUpDown, faArrowsV, faFaceGrimace, faGrimace, faWheelchairMove, faWheelchairAlt, faTurnDown, faLevelDownAlt, faPersonWalkingArrowRight, faSquareEnvelope, faEnvelopeSquare, faDice, faBowlingBall, faBrain, faBandage, faBandAid, faCalendarMinus, faCircleXmark, faTimesCircle, faXmarkCircle, faGifts, faHotel, faEarthAsia, faGlobeAsia, faIdCardClip, faIdCardAlt, faMagnifyingGlassPlus, faSearchPlus, faThumbsUp, faUserClock, faHandDots, faAllergies, faFileInvoice, faWindowMinimize, faMugSaucer, faCoffee, faBrush, faFileHalfDashed, faMask, faMagnifyingGlassMinus, faSearchMinus, faRulerVertical, faUserLarge, faUserAlt, faTrainTram, faUserNurse, faSyringe, faCloudSun, faStopwatch20, faSquareFull, faMagnet, faJar, faNoteSticky, faStickyNote, faBugSlash, faArrowUpFromWaterPump, faBone, faTableCellsRowUnlock, faUserInjured, faFaceSadTear, faSadTear, faPlane, faTentArrowsDown, faExclamation, faArrowsSpin, faPrint, faTurkishLiraSign, faTry, faTurkishLira, faDollarSign, faDollar, faUsd, faX, faMagnifyingGlassDollar, faSearchDollar, faUsersGear, faUsersCog, faPersonMilitaryPointing, faBuildingColumns, faBank, faInstitution, faMuseum, faUniversity, faUmbrella, faTrowel, faD, faStapler, faMasksTheater, faTheaterMasks, faKipSign, faHandPointLeft, faHandshakeSimple, faHandshakeAlt, faJetFighter, faFighterJet, faSquareShareNodes, faShareAltSquare, faBarcode, faPlusMinus, faVideo, faVideoCamera, faGraduationCap, faMortarBoard, faHandHoldingMedical, faPersonCircleCheck, faTurnUp, faLevelUpAlt };\n", "/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\nconst prefix = \"far\";\nconst faTrashCan = {\n  prefix: 'far',\n  iconName: 'trash-can',\n  icon: [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M170.5 51.6L151.5 80l145 0-19-28.4c-1.5-2.2-4-3.6-6.7-3.6l-93.7 0c-2.7 0-5.2 1.3-6.7 3.6zm147-26.6L354.2 80 368 80l48 0 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 304c0 44.2-35.8 80-80 80l-224 0c-44.2 0-80-35.8-80-80l0-304-8 0c-13.3 0-24-10.7-24-24S10.7 80 24 80l8 0 48 0 13.8 0 36.7-55.1C140.9 9.4 158.4 0 177.1 0l93.7 0c18.7 0 36.2 9.4 46.6 24.9zM80 128l0 304c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-304L80 128zm80 64l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faTrashAlt = faTrashCan;\nconst faMessage = {\n  prefix: 'far',\n  iconName: 'message',\n  icon: [512, 512, [\"comment-alt\"], \"f27a\", \"M160 368c26.5 0 48 21.5 48 48l0 16 72.5-54.4c8.3-6.2 18.4-9.6 28.8-9.6L448 368c8.8 0 16-7.2 16-16l0-288c0-8.8-7.2-16-16-16L64 48c-8.8 0-16 7.2-16 16l0 288c0 8.8 7.2 16 16 16l96 0zm48 124l-.2 .2-5.1 3.8-17.1 12.8c-4.8 3.6-11.3 4.2-16.8 1.5s-8.8-8.2-8.8-14.3l0-21.3 0-6.4 0-.3 0-4 0-48-48 0-48 0c-35.3 0-64-28.7-64-64L0 64C0 28.7 28.7 0 64 0L448 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64l-138.7 0L208 492z\"]\n};\nconst faCommentAlt = faMessage;\nconst faFileLines = {\n  prefix: 'far',\n  iconName: 'file-lines',\n  icon: [384, 512, [128441, 128462, 61686, \"file-alt\", \"file-text\"], \"f15c\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm56 256c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nconst faFileAlt = faFileLines;\nconst faFileText = faFileLines;\nconst faCalendarDays = {\n  prefix: 'far',\n  iconName: 'calendar-days',\n  icon: [448, 512, [\"calendar-alt\"], \"f073\", \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l80 0 0 56-80 0 0-56zm0 104l80 0 0 64-80 0 0-64zm128 0l96 0 0 64-96 0 0-64zm144 0l80 0 0 64-80 0 0-64zm80-48l-80 0 0-56 80 0 0 56zm0 160l0 40c0 8.8-7.2 16-16 16l-64 0 0-56 80 0zm-128 0l0 56-96 0 0-56 96 0zm-144 0l0 56-64 0c-8.8 0-16-7.2-16-16l0-40 80 0zM272 248l-96 0 0-56 96 0 0 56z\"]\n};\nconst faCalendarAlt = faCalendarDays;\nconst faHandPointRight = {\n  prefix: 'far',\n  iconName: 'hand-point-right',\n  icon: [512, 512, [], \"f0a4\", \"M448 128l-177.6 0c1 5.2 1.6 10.5 1.6 16l0 16 32 0 144 0c8.8 0 16-7.2 16-16s-7.2-16-16-16zM224 144c0-17.7-14.3-32-32-32c0 0 0 0 0 0l-24 0c-66.3 0-120 53.7-120 120l0 48c0 52.5 33.7 97.1 80.7 113.4c-.5-3.1-.7-6.2-.7-9.4c0-20 9.2-37.9 23.6-49.7c-4.9-9-7.6-19.4-7.6-30.3c0-15.1 5.3-29 14-40c-8.8-11-14-24.9-14-40l0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40c0 8.8 7.2 16 16 16s16-7.2 16-16l0-40 0-40zM192 64s0 0 0 0c18 0 34.6 6 48 16l208 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-82 0c1.3 5.1 2 10.5 2 16c0 25.3-14.7 47.2-36 57.6c2.6 7 4 14.5 4 22.4c0 20-9.2 37.9-23.6 49.7c4.9 9 7.6 19.4 7.6 30.3c0 35.3-28.7 64-64 64l-64 0-24 0C75.2 448 0 372.8 0 280l0-48C0 139.2 75.2 64 168 64l24 0zm64 336c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0zm16-176c0 5.5-.7 10.9-2 16l2 0 32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0 16zm-24 64l-40 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-24 0z\"]\n};\nconst faFaceSmileBeam = {\n  prefix: 'far',\n  iconName: 'face-smile-beam',\n  icon: [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zm40-89.3s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faSmileBeam = faFaceSmileBeam;\nconst faFaceGrinStars = {\n  prefix: 'far',\n  iconName: 'face-grin-stars',\n  icon: [512, 512, [129321, \"grin-stars\"], \"f587\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM183.2 132.6c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L176 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L242.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm160 0c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L336 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L402.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm6.3 175.8c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5c10.4-16.1-6.8-32.5-25.5-28.1z\"]\n};\nconst faGrinStars = faFaceGrinStars;\nconst faAddressBook = {\n  prefix: 'far',\n  iconName: 'address-book',\n  icon: [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M384 48c8.8 0 16 7.2 16 16l0 384c0 8.8-7.2 16-16 16L96 464c-8.8 0-16-7.2-16-16L80 64c0-8.8 7.2-16 16-16l288 0zM96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L96 0zM240 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM496 192c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64z\"]\n};\nconst faContactBook = faAddressBook;\nconst faComments = {\n  prefix: 'far',\n  iconName: 'comments',\n  icon: [640, 512, [128490, 61670], \"f086\", \"M88.2 309.1c9.8-18.3 6.8-40.8-7.5-55.8C59.4 230.9 48 204 48 176c0-63.5 63.8-128 160-128s160 64.5 160 128s-63.8 128-160 128c-13.1 0-25.8-1.3-37.8-3.6c-10.4-2-21.2-.6-30.7 4.2c-4.1 2.1-8.3 4.1-12.6 6c-16 7.2-32.9 13.5-49.9 18c2.8-4.6 5.4-9.1 7.9-13.6c1.1-1.9 2.2-3.9 3.2-5.9zM208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 41.8 17.2 80.1 45.9 110.3c-.9 1.7-1.9 3.5-2.8 5.1c-10.3 18.4-22.3 36.5-36.6 52.1c-6.6 7-8.3 17.2-4.6 25.9C5.8 378.3 14.4 384 24 384c43 0 86.5-13.3 122.7-29.7c4.8-2.2 9.6-4.5 14.2-6.8c15.1 3 30.9 4.5 47.1 4.5zM432 480c16.2 0 31.9-1.6 47.1-4.5c4.6 2.3 9.4 4.6 14.2 6.8C529.5 498.7 573 512 616 512c9.6 0 18.2-5.7 22-14.5c3.8-8.8 2-19-4.6-25.9c-14.2-15.6-26.2-33.7-36.6-52.1c-.9-1.7-1.9-3.4-2.8-5.1C622.8 384.1 640 345.8 640 304c0-94.4-87.9-171.5-198.2-175.8c4.1 15.2 6.2 31.2 6.2 47.8l0 .6c87.2 6.7 144 67.5 144 127.4c0 28-11.4 54.9-32.7 77.2c-14.3 15-17.3 37.6-7.5 55.8c1.1 2 2.2 4 3.2 5.9c2.5 4.5 5.2 9 7.9 13.6c-17-4.5-33.9-10.7-49.9-18c-4.3-1.9-8.5-3.9-12.6-6c-9.5-4.8-20.3-6.2-30.7-4.2c-12.1 2.4-24.8 3.6-37.8 3.6c-61.7 0-110-26.5-136.8-62.3c-16 5.4-32.8 9.4-50 11.8C279 439.8 350 480 432 480z\"]\n};\nconst faPaste = {\n  prefix: 'far',\n  iconName: 'paste',\n  icon: [512, 512, [\"file-clipboard\"], \"f0ea\", \"M104.6 48L64 48C28.7 48 0 76.7 0 112L0 384c0 35.3 28.7 64 64 64l96 0 0-48-96 0c-8.8 0-16-7.2-16-16l0-272c0-8.8 7.2-16 16-16l16 0c0 17.7 14.3 32 32 32l72.4 0C202 108.4 227.6 96 256 96l62 0c-7.1-27.6-32.2-48-62-48l-40.6 0C211.6 20.9 188.2 0 160 0s-51.6 20.9-55.4 48zM144 56a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM448 464l-192 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l140.1 0L464 243.9 464 448c0 8.8-7.2 16-16 16zM256 512l192 0c35.3 0 64-28.7 64-64l0-204.1c0-12.7-5.1-24.9-14.1-33.9l-67.9-67.9c-9-9-21.2-14.1-33.9-14.1L256 128c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64z\"]\n};\nconst faFileClipboard = faPaste;\nconst faFaceGrinTongueSquint = {\n  prefix: 'far',\n  iconName: 'face-grin-tongue-squint',\n  icon: [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4l0-23.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 22.9c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm116-98.9c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 416l0-37.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 37.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGrinTongueSquint = faFaceGrinTongueSquint;\nconst faFaceFlushed = {\n  prefix: 'far',\n  iconName: 'face-flushed',\n  icon: [512, 512, [128563, \"flushed\"], \"f579\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM160.4 248a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm216-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 336c-13.3 0-24 10.7-24 24s10.7 24 24 24l128 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-128 0zM160 176a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm144-80a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z\"]\n};\nconst faFlushed = faFaceFlushed;\nconst faSquareCaretRight = {\n  prefix: 'far',\n  iconName: 'square-caret-right',\n  icon: [448, 512, [\"caret-square-right\"], \"f152\", \"M400 96c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320zM384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"]\n};\nconst faCaretSquareRight = faSquareCaretRight;\nconst faSquareMinus = {\n  prefix: 'far',\n  iconName: 'square-minus',\n  icon: [448, 512, [61767, \"minus-square\"], \"f146\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM152 232l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faMinusSquare = faSquareMinus;\nconst faCompass = {\n  prefix: 'far',\n  iconName: 'compass',\n  icon: [512, 512, [129517], \"f14e\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm306.7 69.1L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faSquareCaretDown = {\n  prefix: 'far',\n  iconName: 'square-caret-down',\n  icon: [448, 512, [\"caret-square-down\"], \"f150\", \"M384 432c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0zm64-16c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"]\n};\nconst faCaretSquareDown = faSquareCaretDown;\nconst faFaceKissBeam = {\n  prefix: 'far',\n  iconName: 'face-kiss-beam',\n  icon: [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 41.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 427.1 257.4 432 240 432c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-68.9s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faKissBeam = faFaceKissBeam;\nconst faLightbulb = {\n  prefix: 'far',\n  iconName: 'lightbulb',\n  icon: [384, 512, [128161], \"f0eb\", \"M297.2 248.9C311.6 228.3 320 203.2 320 176c0-70.7-57.3-128-128-128S64 105.3 64 176c0 27.2 8.4 52.3 22.8 72.9c3.7 5.3 8.1 11.3 12.8 17.7c0 0 0 0 0 0c12.9 17.7 28.3 38.9 39.8 59.8c10.4 19 15.7 38.8 18.3 57.5L109 384c-2.2-12-5.9-23.7-11.8-34.5c-9.9-18-22.2-34.9-34.5-51.8c0 0 0 0 0 0s0 0 0 0c-5.2-7.1-10.4-14.2-15.4-21.4C27.6 247.9 16 213.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176c0 37.3-11.6 71.9-31.4 100.3c-5 7.2-10.2 14.3-15.4 21.4c0 0 0 0 0 0s0 0 0 0c-12.3 16.8-24.6 33.7-34.5 51.8c-5.9 10.8-9.6 22.5-11.8 34.5l-48.6 0c2.6-18.7 7.9-38.6 18.3-57.5c11.5-20.9 26.9-42.1 39.8-59.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0c4.7-6.4 9-12.4 12.7-17.7zM192 128c-26.5 0-48 21.5-48 48c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16s-7.2 16-16 16zm0 384c-44.2 0-80-35.8-80-80l0-16 160 0 0 16c0 44.2-35.8 80-80 80z\"]\n};\nconst faFlag = {\n  prefix: 'far',\n  iconName: 'flag',\n  icon: [448, 512, [127988, 61725], \"f024\", \"M48 24C48 10.7 37.3 0 24 0S0 10.7 0 24L0 64 0 350.5 0 400l0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-100 80.3-20.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30l0-279.7c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L48 52l0-28zm0 77.5l96.6-24.2c27-6.7 55.5-3.6 80.4 8.8c54.9 27.4 118.7 29.7 175 6.8l0 241.8-24.4 9.1c-33.7 12.6-71.2 10.7-103.4-5.4c-48.2-24.1-103.3-30.1-155.6-17.1L48 338.5l0-237z\"]\n};\nconst faSquareCheck = {\n  prefix: 'far',\n  iconName: 'square-check',\n  icon: [448, 512, [9745, 9989, 61510, \"check-square\"], \"f14a\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faCheckSquare = faSquareCheck;\nconst faCircleDot = {\n  prefix: 'far',\n  iconName: 'circle-dot',\n  icon: [512, 512, [128280, \"dot-circle\"], \"f192\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faDotCircle = faCircleDot;\nconst faFaceDizzy = {\n  prefix: 'far',\n  iconName: 'face-dizzy',\n  icon: [512, 512, [\"dizzy\"], \"f567\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM103 135c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9zm192 0c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faDizzy = faFaceDizzy;\nconst faFutbol = {\n  prefix: 'far',\n  iconName: 'futbol',\n  icon: [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M435.4 361.4l-89.7-6c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-22 87.2c-14.4 3.2-29.4 4.8-44.8 4.8s-30.3-1.7-44.8-4.8l-22-87.2c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-89.7 6C61.7 335.9 51.9 307 49 276.2L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15L100.4 118c19.9-22.4 44.6-40.5 72.4-52.7l69.1 57.6c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l69.1-57.6c27.8 12.2 52.5 30.3 72.4 52.7l-33.4 83.4c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9L463 276.2c-3 30.8-12.7 59.7-27.6 85.2zM256 48l.9 0-1.8 0 .9 0zM56.7 196.2c.9-3 1.9-6.1 2.9-9.1l-2.9 9.1zM132 423l3.8 2.7c-1.3-.9-2.5-1.8-3.8-2.7zm248.1-.1c-1.3 1-2.6 2-4 2.9l4-2.9zm75.2-226.7l-3-9.2c1.1 3 2.1 6.1 3 9.2zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6l59.2 0c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"]\n};\nconst faFutbolBall = faFutbol;\nconst faSoccerBall = faFutbol;\nconst faPenToSquare = {\n  prefix: 'far',\n  iconName: 'pen-to-square',\n  icon: [512, 512, [\"edit\"], \"f044\", \"M441 58.9L453.1 71c9.4 9.4 9.4 24.6 0 33.9L424 134.1 377.9 88 407 58.9c9.4-9.4 24.6-9.4 33.9 0zM209.8 256.2L344 121.9 390.1 168 255.8 302.2c-2.9 2.9-6.5 5-10.4 6.1l-58.5 16.7 16.7-58.5c1.1-3.9 3.2-7.5 6.1-10.4zM373.1 25L175.8 222.2c-8.7 8.7-15 19.4-18.3 31.1l-28.6 100c-2.4 8.4-.1 17.4 6.1 23.6s15.2 8.5 23.6 6.1l100-28.6c11.8-3.4 22.5-9.7 31.1-18.3L487 138.9c28.1-28.1 28.1-73.7 0-101.8L474.9 25C446.8-3.1 401.2-3.1 373.1 25zM88 64C39.4 64 0 103.4 0 152L0 424c0 48.6 39.4 88 88 88l272 0c48.6 0 88-39.4 88-88l0-112c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 112c0 22.1-17.9 40-40 40L88 464c-22.1 0-40-17.9-40-40l0-272c0-22.1 17.9-40 40-40l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 64z\"]\n};\nconst faEdit = faPenToSquare;\nconst faHourglassHalf = {\n  prefix: 'far',\n  iconName: 'hourglass-half',\n  icon: [384, 512, [\"hourglass-2\"], \"f252\", \"M0 24C0 10.7 10.7 0 24 0L360 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 19c0 40.3-16 79-44.5 107.5L225.9 256l81.5 81.5C336 366 352 404.7 352 445l0 19 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-19c0-40.3 16-79 44.5-107.5L158.1 256 76.5 174.5C48 146 32 107.3 32 67l0-19-8 0C10.7 48 0 37.3 0 24zM110.5 371.5c-3.9 3.9-7.5 8.1-10.7 12.5l184.4 0c-3.2-4.4-6.8-8.6-10.7-12.5L192 289.9l-81.5 81.5zM284.2 128C297 110.4 304 89 304 67l0-19L80 48l0 19c0 22.1 7 43.4 19.8 61l184.4 0z\"]\n};\nconst faHourglass2 = faHourglassHalf;\nconst faEyeSlash = {\n  prefix: 'far',\n  iconName: 'eye-slash',\n  icon: [640, 512, [], \"f070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zm151 118.3C226 97.7 269.5 80 320 80c65.2 0 118.8 29.6 159.9 67.7C518.4 183.5 545 226 558.6 256c-12.6 28-36.6 66.8-70.9 100.9l-53.8-42.2c9.1-17.6 14.2-37.5 14.2-58.7c0-70.7-57.3-128-128-128c-32.2 0-61.7 11.9-84.2 31.5l-46.1-36.1zM394.9 284.2l-81.5-63.9c4.2-8.5 6.6-18.2 6.6-28.3c0-5.5-.7-10.9-2-16c.7 0 1.3 0 2 0c44.2 0 80 35.8 80 80c0 9.9-1.8 19.4-5.1 28.2zm9.4 130.3C378.8 425.4 350.7 432 320 432c-65.2 0-118.8-29.6-159.9-67.7C121.6 328.5 95 286 81.4 256c8.3-18.4 21.5-41.5 39.4-64.8L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5l-41.9-33zM192 256c0 70.7 57.3 128 128 128c13.3 0 26.1-2 38.2-5.8L302 334c-23.5-5.4-43.1-21.2-53.7-42.3l-56.1-44.2c-.2 2.8-.3 5.6-.3 8.5z\"]\n};\nconst faHand = {\n  prefix: 'far',\n  iconName: 'hand',\n  icon: [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M256 0c-25.3 0-47.2 14.7-57.6 36c-7-2.6-14.5-4-22.4-4c-35.3 0-64 28.7-64 64l0 165.5-2.7-2.7c-25-25-65.5-25-90.5 0s-25 65.5 0 90.5L106.5 437c48 48 113.1 75 181 75l8.5 0 8 0c1.5 0 3-.1 4.5-.4c91.7-6.2 165-79.4 171.1-171.1c.3-1.5 .4-3 .4-4.5l0-176c0-35.3-28.7-64-64-64c-5.5 0-10.9 .7-16 2l0-2c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4C303.2 14.7 281.3 0 256 0zM240 96.1l0-.1 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 31.9 0 .1 0 136c0 13.3 10.7 24 24 24s24-10.7 24-24l0-136c0 0 0 0 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16l0 55.9c0 0 0 .1 0 .1l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-71.9c0 0 0-.1 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16l0 172.9c-.1 .6-.1 1.3-.2 1.9c-3.4 69.7-59.3 125.6-129 129c-.6 0-1.3 .1-1.9 .2l-4.9 0-8.5 0c-55.2 0-108.1-21.9-147.1-60.9L52.7 315.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L119 336.4c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2L160 96c0-8.8 7.2-16 16-16c8.8 0 16 7.1 16 15.9L192 232c0 13.3 10.7 24 24 24s24-10.7 24-24l0-135.9z\"]\n};\nconst faHandPaper = faHand;\nconst faHandSpock = {\n  prefix: 'far',\n  iconName: 'hand-spock',\n  icon: [576, 512, [128406], \"f259\", \"M170.2 80.8C161 47 180.8 12 214.6 2.4c34-9.6 69.4 10.2 79 44.2l30.3 107.1L337.1 84c6.6-34.7 40.1-57.5 74.8-50.9c31.4 6 53 33.9 52 64.9c10-2.6 20.8-2.8 31.5-.1c34.3 8.6 55.1 43.3 46.6 77.6L486.7 397.2C469.8 464.7 409.2 512 339.6 512l-33.7 0c-56.9 0-112.2-19-157.2-53.9l-92-71.6c-27.9-21.7-32.9-61.9-11.2-89.8s61.9-32.9 89.8-11.2l17 13.2L100.5 167.5c-13-32.9 3.2-70.1 36-83c11.1-4.4 22.7-5.4 33.7-3.7zm77.1-21.2c-2.4-8.5-11.2-13.4-19.7-11s-13.4 11.2-11 19.7l54.8 182.4c3.5 12.3-3.3 25.2-15.4 29.3s-25.3-2-30-13.9L174.9 138.1c-3.2-8.2-12.5-12.3-20.8-9s-12.3 12.5-9 20.8l73.3 185.6c12 30.3-23.7 57-49.4 37l-63.1-49.1c-7-5.4-17-4.2-22.5 2.8s-4.2 17 2.8 22.5l92 71.6c36.5 28.4 81.4 43.8 127.7 43.8l33.7 0c47.5 0 89-32.4 100.5-78.5l55.4-221.6c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-26 104C435.6 271.8 425 280 413 280c-16.5 0-28.9-15-25.8-31.2L415.7 99c1.7-8.7-4-17.1-12.7-18.7s-17.1 4-18.7 12.7L352.5 260c-2.2 11.6-12.4 20-24.2 20c-11 0-20.7-7.3-23.7-17.9L247.4 59.6z\"]\n};\nconst faFaceKiss = {\n  prefix: 'far',\n  iconName: 'face-kiss',\n  icon: [512, 512, [128535, \"kiss\"], \"f596\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 25.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 411.1 257.4 416 240 416c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.8-.5-.1-.1-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faKiss = faFaceKiss;\nconst faFaceGrinTongue = {\n  prefix: 'far',\n  iconName: 'face-grin-tongue',\n  icon: [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4l0-52.4c-8.9-8-16.7-17.1-23.1-27.1c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1c-6.4 9.9-14.2 19-23 27l0 52.5c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 416l0-37.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 37.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGrinTongue = faFaceGrinTongue;\nconst faChessBishop = {\n  prefix: 'far',\n  iconName: 'chess-bishop',\n  icon: [320, 512, [9821], \"f43a\", \"M104 0C90.7 0 80 10.7 80 24c0 11.2 7.6 20.6 18 23.2c-7.8 8-16.1 17-24.4 27C38.2 116.7 0 178.8 0 250.9c0 44.8 24.6 72.2 48 87.8L48 352l48 0 0-27c0-9-5-17.2-13-21.3c-18-9.3-35-24.7-35-52.7c0-55.5 29.8-106.8 62.4-145.9c16-19.2 32.1-34.8 44.2-45.5c1.9-1.7 3.7-3.2 5.3-4.6c1.7 1.4 3.4 3 5.3 4.6c12.1 10.7 28.2 26.3 44.2 45.5c5.3 6.3 10.5 13 15.5 20L159 191c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57.8-57.8c12.8 25.9 21.2 54.3 21.2 83.8c0 28-17 43.4-35 52.7c-8 4.1-13 12.3-13 21.3l0 27 48 0 0-13.3c23.4-15.6 48-42.9 48-87.8c0-72.1-38.2-134.2-73.6-176.7c-8.3-9.9-16.6-19-24.4-27c10.3-2.7 18-12.1 18-23.2c0-13.3-10.7-24-24-24L160 0 104 0zM52.7 464l16.6-32 181.6 0 16.6 32L52.7 464zm207.9-80l-201 0c-12 0-22.9 6.7-28.4 17.3L4.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C0 493.8 18.2 512 40.8 512l238.5 0c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2c-5.5-10.6-16.5-17.3-28.4-17.3z\"]\n};\nconst faFaceGrinWink = {\n  prefix: 'far',\n  iconName: 'face-grin-wink',\n  icon: [512, 512, [\"grin-wink\"], \"f58c\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"]\n};\nconst faGrinWink = faFaceGrinWink;\nconst faFaceGrinWide = {\n  prefix: 'far',\n  iconName: 'face-grin-wide',\n  icon: [512, 512, [128515, \"grin-alt\"], \"f581\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM224 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm96 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\"]\n};\nconst faGrinAlt = faFaceGrinWide;\nconst faFaceFrownOpen = {\n  prefix: 'far',\n  iconName: 'face-frown-open',\n  icon: [512, 512, [128550, \"frown-open\"], \"f57a\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM182.4 382.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faFrownOpen = faFaceFrownOpen;\nconst faHandPointUp = {\n  prefix: 'far',\n  iconName: 'hand-point-up',\n  icon: [384, 512, [9757], \"f0a6\", \"M64 64l0 177.6c5.2-1 10.5-1.6 16-1.6l16 0 0-32L96 64c0-8.8-7.2-16-16-16s-16 7.2-16 16zM80 288c-17.7 0-32 14.3-32 32c0 0 0 0 0 0l0 24c0 66.3 53.7 120 120 120l48 0c52.5 0 97.1-33.7 113.4-80.7c-3.1 .5-6.2 .7-9.4 .7c-20 0-37.9-9.2-49.7-23.6c-9 4.9-19.4 7.6-30.3 7.6c-15.1 0-29-5.3-40-14c-11 8.8-24.9 14-40 14l-40 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l40 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-40 0-40 0zM0 320s0 0 0 0c0-18 6-34.6 16-48L16 64C16 28.7 44.7 0 80 0s64 28.7 64 64l0 82c5.1-1.3 10.5-2 16-2c25.3 0 47.2 14.7 57.6 36c7-2.6 14.5-4 22.4-4c20 0 37.9 9.2 49.7 23.6c9-4.9 19.4-7.6 30.3-7.6c35.3 0 64 28.7 64 64l0 64 0 24c0 92.8-75.2 168-168 168l-48 0C75.2 512 0 436.8 0 344l0-24zm336-64c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48 0 16c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM160 240c5.5 0 10.9 .7 16 2l0-2 0-32c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 32 16 0zm64 24l0 40c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 0-16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 24z\"]\n};\nconst faBookmark = {\n  prefix: 'far',\n  iconName: 'bookmark',\n  icon: [384, 512, [128278, 61591], \"f02e\", \"M0 48C0 21.5 21.5 0 48 0l0 48 0 393.4 130.1-92.9c8.3-6 19.6-6 27.9 0L336 441.4 336 48 48 48 48 0 336 0c26.5 0 48 21.5 48 48l0 440c0 9-5 17.2-13 21.3s-17.6 3.4-24.9-1.8L192 397.5 37.9 507.5c-7.3 5.2-16.9 5.9-24.9 1.8S0 497 0 488L0 48z\"]\n};\nconst faHandPointDown = {\n  prefix: 'far',\n  iconName: 'hand-point-down',\n  icon: [384, 512, [], \"f0a7\", \"M64 448l0-177.6c5.2 1 10.5 1.6 16 1.6l16 0 0 32 0 144c0 8.8-7.2 16-16 16s-16-7.2-16-16zM80 224c-17.7 0-32-14.3-32-32c0 0 0 0 0 0l0-24c0-66.3 53.7-120 120-120l48 0c52.5 0 97.1 33.7 113.4 80.7c-3.1-.5-6.2-.7-9.4-.7c-20 0-37.9 9.2-49.7 23.6c-9-4.9-19.4-7.6-30.3-7.6c-15.1 0-29 5.3-40 14c-11-8.8-24.9-14-40-14l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-40 0-40 0zM0 192s0 0 0 0c0 18 6 34.6 16 48l0 208c0 35.3 28.7 64 64 64s64-28.7 64-64l0-82c5.1 1.3 10.5 2 16 2c25.3 0 47.2-14.7 57.6-36c7 2.6 14.5 4 22.4 4c20 0 37.9-9.2 49.7-23.6c9 4.9 19.4 7.6 30.3 7.6c35.3 0 64-28.7 64-64l0-64 0-24C384 75.2 308.8 0 216 0L168 0C75.2 0 0 75.2 0 168l0 24zm336 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64zM160 272c5.5 0 10.9-.7 16-2l0 2 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32 16 0zm64-24l0-40c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-24z\"]\n};\nconst faFolder = {\n  prefix: 'far',\n  iconName: 'folder',\n  icon: [512, 512, [128193, 128447, 61716, \"folder-blank\"], \"f07b\", \"M0 96C0 60.7 28.7 32 64 32l132.1 0c19.1 0 37.4 7.6 50.9 21.1L289.9 96 448 96c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-256c0-8.8-7.2-16-16-16l-161.4 0c-10.6 0-20.8-4.2-28.3-11.7L213.1 87c-4.5-4.5-10.6-7-17-7L64 80z\"]\n};\nconst faFolderBlank = faFolder;\nconst faUser = {\n  prefix: 'far',\n  iconName: 'user',\n  icon: [448, 512, [128100, 62144], \"f007\", \"M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464l349.5 0c-8.9-63.3-63.3-112-129-112l-91.4 0c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3z\"]\n};\nconst faSquareCaretLeft = {\n  prefix: 'far',\n  iconName: 'square-caret-left',\n  icon: [448, 512, [\"caret-square-left\"], \"f191\", \"M48 416c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320zm16 64c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480zm64-224c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"]\n};\nconst faCaretSquareLeft = faSquareCaretLeft;\nconst faStar = {\n  prefix: 'far',\n  iconName: 'star',\n  icon: [576, 512, [11088, 61446], \"f005\", \"M287.9 0c9.2 0 17.6 5.2 21.6 13.5l68.6 141.3 153.2 22.6c9 1.3 16.5 7.6 19.3 16.3s.5 18.1-5.9 24.5L433.6 328.4l26.2 155.6c1.5 9-2.2 18.1-9.7 23.5s-17.3 6-25.3 1.7l-137-73.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.2c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5C270.4 5.2 278.7 0 287.9 0zm0 79L235.4 187.2c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l105.2-56.2c7.1-3.8 15.6-3.8 22.6 0l105.2 56.2L384.2 324.1c-1.3-7.7 1.2-15.5 6.8-21l85.9-85.1L358.6 200.5c-7.8-1.2-14.6-6.1-18.1-13.3L287.9 79z\"]\n};\nconst faChessKnight = {\n  prefix: 'far',\n  iconName: 'chess-knight',\n  icon: [448, 512, [9822], \"f441\", \"M226.6 48L117.3 48l17.1 12.8c6 4.5 9.6 11.6 9.6 19.2s-3.6 14.7-9.6 19.2l-6.5 4.9c-10 7.5-16 19.3-16 31.9l-.3 91c0 10.2 4.9 19.9 13.2 25.8l1.9 1.3c9.9 7.1 23.3 7 33.2-.1l49.9-36.3c10.7-7.8 25.7-5.4 33.5 5.3s5.4 25.7-5.3 33.5l-49.9 36.3-53.8 39.1c-7.3 5.3-13 12.2-16.9 20.1l-50.7 0c5.3-22.1 17.8-41.9 35.9-56.3c-1.3-.8-2.6-1.7-3.8-2.6L97 291.8c-21-15-33.4-39.2-33.3-65l.3-91c.1-19.8 6.7-38.7 18.6-53.9l-.4-.3C70.7 73 64 59.6 64 45.3C64 20.3 84.3 0 109.3 0L226.6 0C331.2 0 416 84.8 416 189.4c0 11.1-1 22.2-2.9 33.2L390.1 352l-48.8 0 24.5-137.8c1.5-8.2 2.2-16.5 2.2-24.8C368 111.3 304.7 48 226.6 48zM85.2 432L68.7 464l310.7 0-16.6-32L85.2 432zm315.7-30.7l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8L56.8 512C34.2 512 16 493.8 16 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C52.5 390.7 63.5 384 75.5 384l297 0c12 0 22.9 6.7 28.4 17.3zM172 128a20 20 0 1 1 0 40 20 20 0 1 1 0-40z\"]\n};\nconst faFaceLaughSquint = {\n  prefix: 'far',\n  iconName: 'face-laugh-squint',\n  icon: [512, 512, [\"laugh-squint\"], \"f59b\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm2.8-183.3l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 141.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faLaughSquint = faFaceLaughSquint;\nconst faFaceLaugh = {\n  prefix: 'far',\n  iconName: 'face-laugh',\n  icon: [512, 512, [\"laugh\"], \"f599\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faLaugh = faFaceLaugh;\nconst faFolderOpen = {\n  prefix: 'far',\n  iconName: 'folder-open',\n  icon: [576, 512, [128194, 128449, 61717], \"f07c\", \"M384 480l48 0c11.4 0 21.9-6 27.6-15.9l112-192c5.8-9.9 5.8-22.1 .1-32.1S555.5 224 544 224l-400 0c-11.4 0-21.9 6-27.6 15.9L48 357.1 48 96c0-8.8 7.2-16 16-16l117.5 0c4.2 0 8.3 1.7 11.3 4.7l26.5 26.5c21 21 49.5 32.8 79.2 32.8L416 144c8.8 0 16 7.2 16 16l0 32 48 0 0-32c0-35.3-28.7-64-64-64L298.5 96c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l23.7 0L384 480z\"]\n};\nconst faClipboard = {\n  prefix: 'far',\n  iconName: 'clipboard',\n  icon: [384, 512, [128203], \"f328\", \"M280 64l40 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l40 0 9.6 0C121 27.5 153.3 0 192 0s71 27.5 78.4 64l9.6 0zM64 112c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16l-16 0 0 24c0 13.3-10.7 24-24 24l-88 0-88 0c-13.3 0-24-10.7-24-24l0-24-16 0zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faChessQueen = {\n  prefix: 'far',\n  iconName: 'chess-queen',\n  icon: [512, 512, [9819], \"f445\", \"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-95.2-8c-18.1 0-31.3 12.8-35.6 26.9c-8 26.2-32.4 45.2-61.2 45.2c-10 0-19.4-2.3-27.7-6.3c-7.6-3.7-16.7-3.3-24 1.2C.7 162.1-3.1 177.1 3.7 188.9L97.6 352l55.4 0-83-144.1c40.5-2.2 75.3-25.9 93.1-59.8c22 26.8 55.4 43.9 92.8 43.9s70.8-17.1 92.8-43.9c17.8 34 52.6 57.7 93.1 59.8L359 352l55.4 0 93.9-163.1c6.8-11.7 3-26.7-8.6-33.8c-7.3-4.5-16.4-4.9-24-1.2c-8.4 4-17.7 6.3-27.7 6.3c-28.8 0-53.2-19-61.2-45.2C382.5 100.8 369.3 88 351.2 88c-14.5 0-26.3 8.5-32.4 19.3c-12.4 22-35.9 36.7-62.8 36.7s-50.4-14.8-62.8-36.7C187.1 96.5 175.4 88 160.8 88zM133.2 432l245.6 0 16.6 32-278.7 0 16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3l-265 0c-12 0-22.9 6.7-28.4 17.3L68.6 452.5c-3 5.8-4.6 12.2-4.6 18.7c0 22.5 18.2 40.8 40.8 40.8l302.5 0c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\"]\n};\nconst faHandBackFist = {\n  prefix: 'far',\n  iconName: 'hand-back-fist',\n  icon: [448, 512, [\"hand-rock\"], \"f255\", \"M144 64c0-8.8 7.2-16 16-16s16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16l0 104c0 31.3-20 58-48 67.9c-9.6 3.4-16 12.5-16 22.6L304 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-117.8c38-20.1 64-60.1 64-106.2l0-104c0-35.3-28.7-64-64-64c-2.8 0-5.6 .2-8.3 .5C332.8 77.1 311.9 64 288 64c-2.8 0-5.6 .2-8.3 .5C268.8 45.1 247.9 32 224 32c-2.8 0-5.6 .2-8.3 .5C204.8 13.1 183.9 0 160 0C124.7 0 96 28.7 96 64l0 64.3c-11.7 7.4-22.5 16.4-32 26.9l17.8 16.1L64 155.2l-9.4 10.5C40 181.8 32 202.8 32 224.6l0 12.8c0 49.6 24.2 96.1 64.8 124.5l13.8-19.7L96.8 361.9l8.9 6.2c6.9 4.8 14.4 8.6 22.3 11.3L128 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-128.1c0-12.6-9.8-23.1-22.4-23.9c-7.3-.5-14.3-2.9-20.3-7.1l-13.1 18.7 13.1-18.7-8.9-6.2C96.6 303.1 80 271.3 80 237.4l0-12.8c0-9.9 3.7-19.4 10.3-26.8l9.4-10.5c3.8-4.2 7.9-8.1 12.3-11.6l0 32.3c0 8.8 7.2 16 16 16s16-7.2 16-16l0-65.7 0-14.3 0-64z\"]\n};\nconst faHandRock = faHandBackFist;\nconst faSquareCaretUp = {\n  prefix: 'far',\n  iconName: 'square-caret-up',\n  icon: [448, 512, [\"caret-square-up\"], \"f151\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm224 64c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"]\n};\nconst faCaretSquareUp = faSquareCaretUp;\nconst faChartBar = {\n  prefix: 'far',\n  iconName: 'chart-bar',\n  icon: [512, 512, [\"bar-chart\"], \"f080\", \"M24 32c13.3 0 24 10.7 24 24l0 352c0 13.3 10.7 24 24 24l416 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L72 480c-39.8 0-72-32.2-72-72L0 56C0 42.7 10.7 32 24 32zM128 136c0-13.3 10.7-24 24-24l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24zm24 72l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 96l272 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-272 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faBarChart = faChartBar;\nconst faWindowRestore = {\n  prefix: 'far',\n  iconName: 'window-restore',\n  icon: [512, 512, [], \"f2d2\", \"M432 48L208 48c-17.7 0-32 14.3-32 32l0 16-48 0 0-16c0-44.2 35.8-80 80-80L432 0c44.2 0 80 35.8 80 80l0 224c0 44.2-35.8 80-80 80l-16 0 0-48 16 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32zM48 448c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-192L48 256l0 192zM64 128l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64z\"]\n};\nconst faSquarePlus = {\n  prefix: 'far',\n  iconName: 'square-plus',\n  icon: [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM200 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nconst faPlusSquare = faSquarePlus;\nconst faImage = {\n  prefix: 'far',\n  iconName: 'image',\n  icon: [512, 512, [], \"f03e\", \"M448 80c8.8 0 16 7.2 16 16l0 319.8-5-6.5-136-176c-4.5-5.9-11.6-9.3-19-9.3s-14.4 3.4-19 9.3L202 340.7l-30.5-42.7C167 291.7 159.8 288 152 288s-15 3.7-19.5 10.1l-80 112L48 416.3l0-.3L48 96c0-8.8 7.2-16 16-16l384 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm80 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faFolderClosed = {\n  prefix: 'far',\n  iconName: 'folder-closed',\n  icon: [512, 512, [], \"e185\", \"M251.7 127.6s0 0 0 0c10.5 10.5 24.7 16.4 39.6 16.4L448 144c8.8 0 16 7.2 16 16l0 32L48 192l0-96c0-8.8 7.2-16 16-16l133.5 0c4.2 0 8.3 1.7 11.3 4.7l33.9-33.9L208.8 84.7l42.9 42.9zM48 240l416 0 0 176c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-176zM285.7 93.7L242.7 50.7c-12-12-28.3-18.7-45.3-18.7L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L291.3 96c-2.1 0-4.2-.8-5.7-2.3z\"]\n};\nconst faLemon = {\n  prefix: 'far',\n  iconName: 'lemon',\n  icon: [448, 512, [127819], \"f094\", \"M368 80c-3.2 0-6.2 .4-8.9 1.3C340 86.8 313 91.9 284.8 84.6C227.4 69.7 160.2 92 110.1 142.1S37.7 259.4 52.6 316.8c7.3 28.2 2.2 55.2-3.3 74.3c-.8 2.8-1.3 5.8-1.3 8.9c0 17.7 14.3 32 32 32c3.2 0 6.2-.4 8.9-1.3c19.1-5.5 46.1-10.7 74.3-3.3c57.4 14.9 124.6-7.4 174.7-57.5s72.4-117.3 57.5-174.7c-7.3-28.2-2.2-55.2 3.3-74.3c.8-2.8 1.3-5.8 1.3-8.9c0-17.7-14.3-32-32-32zm0-48c44.2 0 80 35.8 80 80c0 7.7-1.1 15.2-3.1 22.3c-4.6 15.8-7.1 32.9-3 48.9c20.1 77.6-10.9 161.5-70 220.7s-143.1 90.2-220.7 70c-16-4.1-33-1.6-48.9 3c-7.1 2-14.6 3.1-22.3 3.1c-44.2 0-80-35.8-80-80c0-7.7 1.1-15.2 3.1-22.3c4.6-15.8 7.1-32.9 3-48.9C-14 251.3 17 167.3 76.2 108.2S219.3 18 296.8 38.1c16 4.1 33 1.6 48.9-3c7.1-2 14.6-3.1 22.3-3.1zM246.7 167c-52 15.2-96.5 59.7-111.7 111.7c-3.7 12.7-17.1 20-29.8 16.3s-20-17.1-16.3-29.8c19.8-67.7 76.6-124.5 144.3-144.3c12.7-3.7 26.1 3.6 29.8 16.3s-3.6 26.1-16.3 29.8z\"]\n};\nconst faHandshake = {\n  prefix: 'far',\n  iconName: 'handshake',\n  icon: [640, 512, [], \"f2b5\", \"M272.2 64.6l-51.1 51.1c-15.3 4.2-29.5 11.9-41.5 22.5L153 161.9C142.8 171 129.5 176 115.8 176L96 176l0 128c20.4 .6 39.8 8.9 54.3 23.4l35.6 35.6 7 7c0 0 0 0 0 0L219.9 397c6.2 6.2 16.4 6.2 22.6 0c1.7-1.7 3-3.7 3.7-5.8c2.8-7.7 9.3-13.5 17.3-15.3s16.4 .6 22.2 6.5L296.5 393c11.6 11.6 30.4 11.6 41.9 0c5.4-5.4 8.3-12.3 8.6-19.4c.4-8.8 5.6-16.6 13.6-20.4s17.3-3 24.4 2.1c9.4 6.7 22.5 5.8 30.9-2.6c9.4-9.4 9.4-24.6 0-33.9L340.1 243l-35.8 33c-27.3 25.2-69.2 25.6-97 .9c-31.7-28.2-32.4-77.4-1.6-106.5l70.1-66.2C303.2 78.4 339.4 64 377.1 64c36.1 0 71 13.3 97.9 37.2L505.1 128l38.9 0 40 0 40 0c8.8 0 16 7.2 16 16l0 208c0 17.7-14.3 32-32 32l-32 0c-11.8 0-22.2-6.4-27.7-16l-84.9 0c-3.4 6.7-7.9 13.1-13.5 18.7c-17.1 17.1-40.8 23.8-63 20.1c-3.6 7.3-8.5 14.1-14.6 20.2c-27.3 27.3-70 30-100.4 8.1c-25.1 20.8-62.5 19.5-86-4.1L159 404l-7-7-35.6-35.6c-5.5-5.5-12.7-8.7-20.4-9.3C96 369.7 81.6 384 64 384l-32 0c-17.7 0-32-14.3-32-32L0 144c0-8.8 7.2-16 16-16l40 0 40 0 19.8 0c2 0 3.9-.7 5.3-2l26.5-23.6C175.5 77.7 211.4 64 248.7 64L259 64c4.4 0 8.9 .2 13.2 .6zM544 320l0-144-48 0c-5.9 0-11.6-2.2-15.9-6.1l-36.9-32.8c-18.2-16.2-41.7-25.1-66.1-25.1c-25.4 0-49.8 9.7-68.3 27.1l-70.1 66.2c-10.3 9.8-10.1 26.3 .5 35.7c9.3 8.3 23.4 8.1 32.5-.3l71.9-66.4c9.7-9 24.9-8.4 33.9 1.4s8.4 24.9-1.4 33.9l-.8 .8 74.4 74.4c10 10 16.5 22.3 19.4 35.1l74.8 0zM64 336a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm528 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faGem = {\n  prefix: 'far',\n  iconName: 'gem',\n  icon: [512, 512, [128142], \"f3a5\", \"M168.5 72L256 165l87.5-93-175 0zM383.9 99.1L311.5 176l129 0L383.9 99.1zm50 124.9L256 224 78.1 224 256 420.3 433.9 224zM71.5 176l129 0L128.1 99.1 71.5 176zm434.3 40.1l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152c4.5-6.1 11.7-9.8 19.3-9.8l240 0c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4z\"]\n};\nconst faCirclePlay = {\n  prefix: 'far',\n  iconName: 'circle-play',\n  icon: [512, 512, [61469, \"play-circle\"], \"f144\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c7.6-4.2 16.8-4.1 24.3 .5l144 88c7.1 4.4 11.5 12.1 11.5 20.5s-4.4 16.1-11.5 20.5l-144 88c-7.4 4.5-16.7 4.7-24.3 .5s-12.3-12.2-12.3-20.9l0-176c0-8.7 4.7-16.7 12.3-20.9z\"]\n};\nconst faPlayCircle = faCirclePlay;\nconst faCircleCheck = {\n  prefix: 'far',\n  iconName: 'circle-check',\n  icon: [512, 512, [61533, \"check-circle\"], \"f058\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L369 209z\"]\n};\nconst faCheckCircle = faCircleCheck;\nconst faCircleStop = {\n  prefix: 'far',\n  iconName: 'circle-stop',\n  icon: [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm192-96l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z\"]\n};\nconst faStopCircle = faCircleStop;\nconst faIdBadge = {\n  prefix: 'far',\n  iconName: 'id-badge',\n  icon: [384, 512, [], \"f2c1\", \"M256 48l0 16c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-16L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-384c0-8.8-7.2-16-16-16l-64 0zM0 64C0 28.7 28.7 0 64 0L320 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM160 320l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 416c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nconst faFaceLaughBeam = {\n  prefix: 'far',\n  iconName: 'face-laugh-beam',\n  icon: [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm86.9-85.1s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faLaughBeam = faFaceLaughBeam;\nconst faRegistered = {\n  prefix: 'far',\n  iconName: 'registered',\n  icon: [512, 512, [174], \"f25d\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152l0 112 0 96c0 13.3 10.7 24 24 24s24-10.7 24-24l0-72 60.9 0 37.2 81.9c5.5 12.1 19.7 17.4 31.8 11.9s17.4-19.7 11.9-31.8L315.7 275c21.8-14.3 36.3-39 36.3-67c0-44.2-35.8-80-80-80l-88 0c-13.3 0-24 10.7-24 24zm48 88l0-64 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0z\"]\n};\nconst faAddressCard = {\n  prefix: 'far',\n  iconName: 'address-card',\n  icon: [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M512 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l448 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM208 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0zM376 144c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0z\"]\n};\nconst faContactCard = faAddressCard;\nconst faVcard = faAddressCard;\nconst faFaceTired = {\n  prefix: 'far',\n  iconName: 'face-tired',\n  icon: [512, 512, [128555, \"tired\"], \"f5c8\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.5 64.3C196.1 302.1 223.8 288 256 288s59.9 14.1 79.5 32.3C354.5 338.1 368 362 368 384c0 5.4-2.7 10.4-7.2 13.4s-10.2 3.4-15.2 1.3l-17.2-7.5c-22.8-10-47.5-15.1-72.4-15.1s-49.6 5.2-72.4 15.1l-17.2 7.5c-4.9 2.2-10.7 1.7-15.2-1.3s-7.2-8-7.2-13.4c0-22 13.5-45.9 32.5-63.7zm-43-173.6l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faTired = faFaceTired;\nconst faFontAwesome = {\n  prefix: 'far',\n  iconName: 'font-awesome',\n  icon: [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 48 0 256 0 48 0 64 48 0 0-64 389.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96zM80 400l0-256 356.4 0L388.1 252.5c-5.5 12.4-5.5 26.6 0 39L436.4 400 80 400z\"]\n};\nconst faFontAwesomeFlag = faFontAwesome;\nconst faFontAwesomeLogoFull = faFontAwesome;\nconst faFaceSmileWink = {\n  prefix: 'far',\n  iconName: 'face-smile-wink',\n  icon: [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"]\n};\nconst faSmileWink = faFaceSmileWink;\nconst faFileWord = {\n  prefix: 'far',\n  iconName: 'file-word',\n  icon: [384, 512, [], \"f1c2\", \"M48 448L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm55 241.1c-3.8-12.7-17.2-19.9-29.9-16.1s-19.9 17.2-16.1 29.9l48 160c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l25-83.4 25 83.4c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l48-160c3.8-12.7-3.4-26.1-16.1-29.9s-26.1 3.4-29.9 16.1l-25 83.4-25-83.4c-3-10.2-12.4-17.1-23-17.1s-19.9 7-23 17.1l-25 83.4-25-83.4z\"]\n};\nconst faFilePowerpoint = {\n  prefix: 'far',\n  iconName: 'file-powerpoint',\n  icon: [384, 512, [], \"f1c4\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm72 208c-13.3 0-24 10.7-24 24l0 104 0 56c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32 44 0c42 0 76-34 76-76s-34-76-76-76l-68 0zm68 104l-44 0 0-56 44 0c15.5 0 28 12.5 28 28s-12.5 28-28 28z\"]\n};\nconst faEnvelopeOpen = {\n  prefix: 'far',\n  iconName: 'envelope-open',\n  icon: [512, 512, [62135], \"f2b6\", \"M255.4 48.2c.2-.1 .4-.2 .6-.2s.4 .1 .6 .2L460.6 194c2.1 1.5 3.4 3.9 3.4 6.5l0 13.6L291.5 355.7c-20.7 17-50.4 17-71.1 0L48 214.1l0-13.6c0-2.6 1.2-5 3.4-6.5L255.4 48.2zM48 276.2L190 392.8c38.4 31.5 93.7 31.5 132 0L464 276.2 464 456c0 4.4-3.6 8-8 8L56 464c-4.4 0-8-3.6-8-8l0-179.8zM256 0c-10.2 0-20.2 3.2-28.5 9.1L23.5 154.9C8.7 165.4 0 182.4 0 200.5L0 456c0 30.9 25.1 56 56 56l400 0c30.9 0 56-25.1 56-56l0-255.5c0-18.1-8.7-35.1-23.4-45.6L284.5 9.1C276.2 3.2 266.2 0 256 0z\"]\n};\nconst faFileZipper = {\n  prefix: 'far',\n  iconName: 'file-zipper',\n  icon: [384, 512, [\"file-archive\"], \"f1c6\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l48 0c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l48 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm48 112c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm-6.3 71.8L82.1 335.9c-1.4 5.4-2.1 10.9-2.1 16.4c0 35.2 28.8 63.7 64 63.7s64-28.5 64-63.7c0-5.5-.7-11.1-2.1-16.4l-23.5-88.2c-3.7-14-16.4-23.8-30.9-23.8l-14.8 0c-14.5 0-27.2 9.7-30.9 23.8zM128 336l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faFileArchive = faFileZipper;\nconst faSquare = {\n  prefix: 'far',\n  iconName: 'square',\n  icon: [448, 512, [9632, 9723, 9724, 61590], \"f0c8\", \"M384 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l320 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nconst faSnowflake = {\n  prefix: 'far',\n  iconName: 'snowflake',\n  icon: [448, 512, [10052, 10054], \"f2dc\", \"M224 0c13.3 0 24 10.7 24 24l0 46.1 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-57 57 0 76.5 66.2-38.2 20.9-77.8c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4L373 142.2l37.1-21.4c11.5-6.6 26.2-2.7 32.8 8.8s2.7 26.2-8.8 32.8L397 183.8l31.5 8.4c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-77.8-20.9L272 256l66.2 38.2 77.8-20.9c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4L397 328.2l37.1 21.4c11.5 6.6 15.4 21.3 8.8 32.8s-21.3 15.4-32.8 8.8L373 369.8l8.4 31.5c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-20.9-77.8L248 297.6l0 76.5 57 57c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23 0 46.1c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-46.1-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57 0-76.5-66.2 38.2-20.9 77.8c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4L75 369.8 37.9 391.2c-11.5 6.6-26.2 2.7-32.8-8.8s-2.7-26.2 8.8-32.8L51 328.2l-31.5-8.4c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l77.8 20.9L176 256l-66.2-38.2L31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4L51 183.8 13.9 162.4c-11.5-6.6-15.4-21.3-8.8-32.8s21.3-15.4 32.8-8.8L75 142.2l-8.4-31.5c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l20.9 77.8L200 214.4l0-76.5L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23L200 24c0-13.3 10.7-24 24-24z\"]\n};\nconst faNewspaper = {\n  prefix: 'far',\n  iconName: 'newspaper',\n  icon: [512, 512, [128240], \"f1ea\", \"M168 80c-13.3 0-24 10.7-24 24l0 304c0 8.4-1.4 16.5-4.1 24L440 432c13.3 0 24-10.7 24-24l0-304c0-13.3-10.7-24-24-24L168 80zM72 480c-39.8 0-72-32.2-72-72L0 112C0 98.7 10.7 88 24 88s24 10.7 24 24l0 296c0 13.3 10.7 24 24 24s24-10.7 24-24l0-304c0-39.8 32.2-72 72-72l272 0c39.8 0 72 32.2 72 72l0 304c0 39.8-32.2 72-72 72L72 480zM176 136c0-13.3 10.7-24 24-24l96 0c13.3 0 24 10.7 24 24l0 80c0 13.3-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24l0-80zm200-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM200 272l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faFaceKissWinkHeart = {\n  prefix: 'far',\n  iconName: 'face-kiss-wink-heart',\n  icon: [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M338.9 446.8c-25.4 11-53.4 17.2-82.9 17.2C141.1 464 48 370.9 48 256S141.1 48 256 48s208 93.1 208 208c0 22.4-3.5 43.9-10.1 64.1c3.1 4.5 5.7 9.4 7.8 14.6c12.7-1.6 25.1 .4 36.2 5c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-6.5-25.3zM296 316c0-6.9-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4C258.7 276.9 241.4 272 224 272c-3.6 0-6.8 2.5-7.7 6s.6 7.2 3.8 9c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c-2.5 1.4-4.1 4.1-4.1 7s1.6 5.6 4.1 7c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-3.2 1.8-4.7 5.5-3.8 9s4.1 6 7.7 6c17.4 0 34.7-4.9 47.9-12.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3s-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4c-2.7-1.5-5.7-3-8.7-4.3c3.1-1.3 6-2.7 8.7-4.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm159.3-20c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C375.7 186.8 355 180 335.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\"]\n};\nconst faKissWinkHeart = faFaceKissWinkHeart;\nconst faStarHalfStroke = {\n  prefix: 'far',\n  iconName: 'star-half-stroke',\n  icon: [576, 512, [\"star-half-alt\"], \"f5c0\", \"M309.5 13.5C305.5 5.2 297.1 0 287.9 0s-17.6 5.2-21.6 13.5L197.7 154.8 44.5 177.5c-9 1.3-16.5 7.6-19.3 16.3s-.5 18.1 5.9 24.5L142.2 328.4 116 483.9c-1.5 9 2.2 18.1 9.7 23.5s17.3 6 25.3 1.7l137-73.2 137 73.2c8.1 4.3 17.9 3.7 25.3-1.7s11.2-14.5 9.7-23.5L433.6 328.4 544.8 218.2c6.5-6.4 8.7-15.9 5.9-24.5s-10.3-14.9-19.3-16.3L378.1 154.8 309.5 13.5zM288 384.7l0-305.6 52.5 108.1c3.5 7.1 10.2 12.1 18.1 13.3l118.3 17.5L391 303c-5.5 5.5-8.1 13.3-6.8 21l20.2 119.6L299.2 387.5c-3.5-1.9-7.4-2.8-11.2-2.8z\"]\n};\nconst faStarHalfAlt = faStarHalfStroke;\nconst faFileExcel = {\n  prefix: 'far',\n  iconName: 'file-excel',\n  icon: [384, 512, [], \"f1c3\", \"M48 448L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm90.9 233.3c-8.1-10.5-23.2-12.3-33.7-4.2s-12.3 23.2-4.2 33.7L161.6 320l-44.5 57.3c-8.1 10.5-6.3 25.5 4.2 33.7s25.5 6.3 33.7-4.2L192 359.1l37.1 47.6c8.1 10.5 23.2 12.3 33.7 4.2s12.3-23.2 4.2-33.7L222.4 320l44.5-57.3c8.1-10.5 6.3-25.5-4.2-33.7s-25.5-6.3-33.7 4.2L192 280.9l-37.1-47.6z\"]\n};\nconst faFaceGrinBeam = {\n  prefix: 'far',\n  iconName: 'face-grin-beam',\n  icon: [512, 512, [128516, \"grin-beam\"], \"f582\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM217.6 228.8s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faGrinBeam = faFaceGrinBeam;\nconst faObjectUngroup = {\n  prefix: 'far',\n  iconName: 'object-ungroup',\n  icon: [640, 512, [], \"f248\", \"M48.2 66.8c-.1-.8-.2-1.7-.2-2.5l0-.2c0-8.8 7.2-16 16-16c.9 0 1.9 .1 2.8 .2C74.3 49.5 80 56.1 80 64c0 8.8-7.2 16-16 16c-7.9 0-14.5-5.7-15.8-13.2zM0 64c0 26.9 16.5 49.9 40 59.3l0 105.3C16.5 238.1 0 261.1 0 288c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40l201.3 0c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3l0-105.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40L123.3 40C113.9 16.5 90.9 0 64 0C28.7 0 0 28.7 0 64zm368 0a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM324.7 88c6.5 16 19.3 28.9 35.3 35.3l0 105.3c-16 6.5-28.9 19.3-35.3 35.3l-201.3 0c-6.5-16-19.3-28.9-35.3-35.3l0-105.3c16-6.5 28.9-19.3 35.3-35.3l201.3 0zM384 272a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM80 288c0 7.9-5.7 14.5-13.2 15.8c-.8 .1-1.7 .2-2.5 .2l-.2 0c-8.8 0-16-7.2-16-16c0-.9 .1-1.9 .2-2.8C49.5 277.7 56.1 272 64 272c8.8 0 16 7.2 16 16zm391.3-40l45.4 0c6.5 16 19.3 28.9 35.3 35.3l0 105.3c-16 6.5-28.9 19.3-35.3 35.3l-201.3 0c-6.5-16-19.3-28.9-35.3-35.3l0-36.7-48 0 0 36.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40l201.3 0c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3l0-105.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40L448 200l0 16.4c9.8 8.8 17.8 19.5 23.3 31.6zm88.9-26.7a16 16 0 1 1 31.5 5.5 16 16 0 1 1 -31.5-5.5zM271.8 450.7a16 16 0 1 1 -31.5-5.5 16 16 0 1 1 31.5 5.5zm307-18.5a16 16 0 1 1 -5.5 31.5 16 16 0 1 1 5.5-31.5z\"]\n};\nconst faCircleRight = {\n  prefix: 'far',\n  iconName: 'circle-right',\n  icon: [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM294.6 151.2c-4.2-4.6-10.1-7.2-16.4-7.2C266 144 256 154 256 166.3l0 41.7-96 0c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l96 0 0 41.7c0 12.3 10 22.3 22.3 22.3c6.2 0 12.1-2.6 16.4-7.2l84-91c3.5-3.8 5.4-8.7 5.4-13.9s-1.9-10.1-5.4-13.9l-84-91z\"]\n};\nconst faArrowAltCircleRight = faCircleRight;\nconst faFaceRollingEyes = {\n  prefix: 'far',\n  iconName: 'face-rolling-eyes',\n  icon: [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM168 376c0 13.3 10.7 24 24 24l128 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-128 0c-13.3 0-24 10.7-24 24zm-8-104c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm192-32c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"]\n};\nconst faMehRollingEyes = faFaceRollingEyes;\nconst faObjectGroup = {\n  prefix: 'far',\n  iconName: 'object-group',\n  icon: [576, 512, [], \"f247\", \"M48 115.8C38.2 107 32 94.2 32 80c0-26.5 21.5-48 48-48c14.2 0 27 6.2 35.8 16l344.4 0c8.8-9.8 21.6-16 35.8-16c26.5 0 48 21.5 48 48c0 14.2-6.2 27-16 35.8l0 280.4c9.8 8.8 16 21.6 16 35.8c0 26.5-21.5 48-48 48c-14.2 0-27-6.2-35.8-16l-344.4 0c-8.8 9.8-21.6 16-35.8 16c-26.5 0-48-21.5-48-48c0-14.2 6.2-27 16-35.8l0-280.4zM125.3 96c-4.8 13.6-15.6 24.4-29.3 29.3l0 261.5c13.6 4.8 24.4 15.6 29.3 29.3l325.5 0c4.8-13.6 15.6-24.4 29.3-29.3l0-261.5c-13.6-4.8-24.4-15.6-29.3-29.3L125.3 96zm2.7 64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-96zM256 320l32 0c35.3 0 64-28.7 64-64l0-32 64 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-32z\"]\n};\nconst faHeart = {\n  prefix: 'far',\n  iconName: 'heart',\n  icon: [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 9829, 10084, 61578], \"f004\", \"M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8l0-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5l0 3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20-.1-.1s0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5l0 3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2l0-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z\"]\n};\nconst faFaceSurprise = {\n  prefix: 'far',\n  iconName: 'face-surprise',\n  icon: [512, 512, [128558, \"surprise\"], \"f5c2\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faSurprise = faFaceSurprise;\nconst faCirclePause = {\n  prefix: 'far',\n  iconName: 'circle-pause',\n  icon: [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm224-72l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24zm112 0l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faPauseCircle = faCirclePause;\nconst faCircle = {\n  prefix: 'far',\n  iconName: 'circle',\n  icon: [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9679, 9898, 9899, 11044, 61708, 61915], \"f111\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faCircleUp = {\n  prefix: 'far',\n  iconName: 'circle-up',\n  icon: [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM151.2 217.4c-4.6 4.2-7.2 10.1-7.2 16.4c0 12.3 10 22.3 22.3 22.3l41.7 0 0 96c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-96 41.7 0c12.3 0 22.3-10 22.3-22.3c0-6.2-2.6-12.1-7.2-16.4l-91-84c-3.8-3.5-8.7-5.4-13.9-5.4s-10.1 1.9-13.9 5.4l-91 84z\"]\n};\nconst faArrowAltCircleUp = faCircleUp;\nconst faFileAudio = {\n  prefix: 'far',\n  iconName: 'file-audio',\n  icon: [384, 512, [], \"f1c7\", \"M64 464l256 0c8.8 0 16-7.2 16-16l0-288-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16zM0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM192 272l0 128c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L129.4 376 112 376c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16l17.4 0 35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8zm85.8-4c11.6 20 18.2 43.3 18.2 68s-6.6 48-18.2 68c-6.6 11.5-21.3 15.4-32.8 8.8s-15.4-21.3-8.8-32.8c7.5-12.9 11.8-27.9 11.8-44s-4.3-31.1-11.8-44c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8z\"]\n};\nconst faFileImage = {\n  prefix: 'far',\n  iconName: 'file-image',\n  icon: [384, 512, [128443], \"f1c5\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm96 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm69.2 46.9c-3-4.3-7.9-6.9-13.2-6.9s-10.2 2.6-13.2 6.9l-41.3 59.7-11.9-19.1c-2.9-4.7-8.1-7.5-13.6-7.5s-10.6 2.8-13.6 7.5l-40 64c-3.1 4.9-3.2 11.1-.4 16.2s8.2 8.2 14 8.2l48 0 32 0 40 0 72 0c6 0 11.4-3.3 14.2-8.6s2.4-11.6-1-16.5l-72-104z\"]\n};\nconst faCircleQuestion = {\n  prefix: 'far',\n  iconName: 'circle-question',\n  icon: [512, 512, [62108, \"question-circle\"], \"f059\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm169.8-90.7c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faQuestionCircle = faCircleQuestion;\nconst faFaceMehBlank = {\n  prefix: 'far',\n  iconName: 'face-meh-blank',\n  icon: [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faMehBlank = faFaceMehBlank;\nconst faEye = {\n  prefix: 'far',\n  iconName: 'eye',\n  icon: [576, 512, [128065], \"f06e\", \"M288 80c-65.2 0-118.8 29.6-159.9 67.7C89.6 183.5 63 226 49.4 256c13.6 30 40.2 72.5 78.6 108.3C169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256c-13.6-30-40.2-72.5-78.6-108.3C406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1c3.3 7.9 3.3 16.7 0 24.6c-14.9 35.7-46.2 87.7-93 131.1C433.5 443.2 368.8 480 288 480s-145.5-36.8-192.6-80.6C48.6 356 17.3 304 2.5 268.3c-3.3-7.9-3.3-16.7 0-24.6C17.3 208 48.6 156 95.4 112.6zM288 336c44.2 0 80-35.8 80-80s-35.8-80-80-80c-.7 0-1.3 0-2 0c1.3 5.1 2 10.5 2 16c0 35.3-28.7 64-64 64c-5.5 0-10.9-.7-16-2c0 .7 0 1.3 0 2c0 44.2 35.8 80 80 80zm0-208a128 128 0 1 1 0 256 128 128 0 1 1 0-256z\"]\n};\nconst faFaceSadCry = {\n  prefix: 'far',\n  iconName: 'face-sad-cry',\n  icon: [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M400 406.1L400 288c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 152.6c-28.7 15-61.4 23.4-96 23.4s-67.3-8.5-96-23.4L160 288c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 118.1C72.6 368.2 48 315 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 59-24.6 112.2-64 150.1zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm166.6 9.7c5.5-5.8 14.8-9.7 25.4-9.7s19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C391.7 186.8 371 180 351.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9zM208 320l0 32c0 26.5 21.5 48 48 48s48-21.5 48-48l0-32c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"]\n};\nconst faSadCry = faFaceSadCry;\nconst faFileCode = {\n  prefix: 'far',\n  iconName: 'file-code',\n  icon: [384, 512, [], \"f1c9\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm97 289c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L79 303c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-31-31 31-31zM257 255c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9l-48-48z\"]\n};\nconst faWindowMaximize = {\n  prefix: 'far',\n  iconName: 'window-maximize',\n  icon: [512, 512, [128470], \"f2d0\", \"M.3 89.5C.1 91.6 0 93.8 0 96L0 224 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-192 0-128c0-35.3-28.7-64-64-64L64 32c-2.2 0-4.4 .1-6.5 .3c-9.2 .9-17.8 3.8-25.5 8.2C21.8 46.5 13.4 55.1 7.7 65.5c-3.9 7.3-6.5 15.4-7.4 24zM48 224l416 0 0 192c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-192z\"]\n};\nconst faFaceFrown = {\n  prefix: 'far',\n  iconName: 'face-frown',\n  icon: [512, 512, [9785, \"frown\"], \"f119\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM174.6 384.1c-4.5 12.5-18.2 18.9-30.7 14.4s-18.9-18.2-14.4-30.7C146.9 319.4 198.9 288 256 288s109.1 31.4 126.6 79.9c4.5 12.5-2 26.2-14.4 30.7s-26.2-2-30.7-14.4C328.2 358.5 297.2 336 256 336s-72.2 22.5-81.4 48.1zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faFrown = faFaceFrown;\nconst faFloppyDisk = {\n  prefix: 'far',\n  iconName: 'floppy-disk',\n  icon: [448, 512, [128190, 128426, \"save\"], \"f0c7\", \"M48 96l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-245.5c0-4.2-1.7-8.3-4.7-11.3l33.9-33.9c12 12 18.7 28.3 18.7 45.3L448 416c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l245.5 0c17 0 33.3 6.7 45.3 18.7l74.5 74.5-33.9 33.9L320.8 84.7c-.3-.3-.5-.5-.8-.8L320 184c0 13.3-10.7 24-24 24l-192 0c-13.3 0-24-10.7-24-24L80 80 64 80c-8.8 0-16 7.2-16 16zm80-16l0 80 144 0 0-80L128 80zm32 240a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nconst faSave = faFloppyDisk;\nconst faCommentDots = {\n  prefix: 'far',\n  iconName: 'comment-dots',\n  icon: [512, 512, [128172, 62075, \"commenting\"], \"f4ad\", \"M168.2 384.9c-15-5.4-31.7-3.1-44.6 6.4c-8.2 6-22.3 14.8-39.4 22.7c5.6-14.7 9.9-31.3 11.3-49.4c1-12.9-3.3-25.7-11.8-35.5C60.4 302.8 48 272 48 240c0-79.5 83.3-160 208-160s208 80.5 208 160s-83.3 160-208 160c-31.6 0-61.3-5.5-87.8-15.1zM26.3 423.8c-1.6 2.7-3.3 5.4-5.1 8.1l-.3 .5c-1.6 2.3-3.2 4.6-4.8 6.9c-3.5 4.7-7.3 9.3-11.3 13.5c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c5.1 0 10.2-.3 15.3-.8l.7-.1c4.4-.5 8.8-1.1 13.2-1.9c.8-.1 1.6-.3 2.4-.5c17.8-3.5 34.9-9.5 50.1-16.1c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9zM144 272a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm80 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faCommenting = faCommentDots;\nconst faFaceGrinSquint = {\n  prefix: 'far',\n  iconName: 'face-grin-squint',\n  icon: [512, 512, [128518, \"grin-squint\"], \"f585\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zm-216-161.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faGrinSquint = faFaceGrinSquint;\nconst faHandPointer = {\n  prefix: 'far',\n  iconName: 'hand-pointer',\n  icon: [448, 512, [], \"f25a\", \"M160 64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 136c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c8.8 0 16 7.2 16 16c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c7.8 0 14.3 5.6 15.7 13c1.6 8.2 7.3 15.1 15.1 18s16.7 1.6 23.3-3.6c2.7-2.1 6.1-3.4 9.9-3.4c8.8 0 16 7.2 16 16l0 16 0 104c0 39.8-32.2 72-72 72l-56 0-59.8 0-.9 0c-37.4 0-72.4-18.7-93.2-49.9L50.7 312.9c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4L116 353.2c5.9 8.8 16.8 12.7 26.9 9.7s17-12.4 17-23l0-19.9 0-256zM176 0c-35.3 0-64 28.7-64 64l0 197.7C91.2 238 55.5 232.8 28.5 250.7C-.9 270.4-8.9 310.1 10.8 339.5L78.3 440.8c29.7 44.5 79.6 71.2 133.1 71.2l.9 0 59.8 0 56 0c66.3 0 120-53.7 120-120l0-104 0-16c0-35.3-28.7-64-64-64c-4.5 0-8.8 .5-13 1.3c-11.7-15.4-30.2-25.3-51-25.3c-6.9 0-13.5 1.1-19.7 3.1C288.7 170.7 269.6 160 248 160c-2.7 0-5.4 .2-8 .5L240 64c0-35.3-28.7-64-64-64zm48 304c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96zm48-16c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96z\"]\n};\nconst faHandScissors = {\n  prefix: 'far',\n  iconName: 'hand-scissors',\n  icon: [512, 512, [], \"f257\", \"M.2 276.3c-1.2-35.3 26.4-65 61.7-66.2l3.3-.1L57 208.1C22.5 200.5 .7 166.3 8.3 131.8S50.2 75.5 84.7 83.2l173 38.3c2.3-2.9 4.7-5.7 7.1-8.5l18.4-20.3C299.9 74.5 323.5 64 348.3 64l10.2 0c54.1 0 104.1 28.7 131.3 75.4l1.5 2.6c13.6 23.2 20.7 49.7 20.7 76.6L512 344c0 66.3-53.7 120-120 120l-8 0-96 0c-35.3 0-64-28.7-64-64c0-2.8 .2-5.6 .5-8.3c-19.4-11-32.5-31.8-32.5-55.7c0-.8 0-1.6 0-2.4L66.4 338c-35.3 1.2-65-26.4-66.2-61.7zm63.4-18.2c-8.8 .3-15.7 7.7-15.4 16.5s7.7 15.7 16.5 15.4l161.5-5.6c9.8-.3 18.7 5.3 22.7 14.2s2.2 19.3-4.5 26.4c-2.8 2.9-4.4 6.7-4.4 11c0 8.8 7.2 16 16 16c9.1 0 17.4 5.1 21.5 13.3s3.2 17.9-2.3 25.1c-2 2.7-3.2 6-3.2 9.6c0 8.8 7.2 16 16 16l96 0 8 0c39.8 0 72-32.2 72-72l0-125.4c0-18.4-4.9-36.5-14.2-52.4l-1.5-2.6c-18.6-32-52.8-51.6-89.8-51.6l-10.2 0c-11.3 0-22 4.8-29.6 13.1l-17.5-15.9 17.5 15.9-18.4 20.3c-.6 .6-1.1 1.3-1.7 1.9l57 13.2c8.6 2 14 10.6 12 19.2s-10.6 14-19.2 12l-85.6-19.7L74.3 130c-8.6-1.9-17.2 3.5-19.1 12.2s3.5 17.2 12.2 19.1l187.5 41.6c10.2 2.3 17.8 10.9 18.7 21.4l.1 1c.6 6.6-1.5 13.1-5.8 18.1s-10.6 7.9-17.2 8.2L63.6 258.1z\"]\n};\nconst faFaceGrinTears = {\n  prefix: 'far',\n  iconName: 'face-grin-tears',\n  icon: [640, 512, [128514, \"grin-tears\"], \"f588\", \"M516.1 325.5c1 3 2.1 6 3.3 8.9c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c1.2-2.9 2.3-5.9 3.3-8.9C152.5 406.2 229.5 464 320 464s167.5-57.8 196.1-138.5zM320 48c-101.4 0-185.8 72.5-204.3 168.5c-6.7-3.1-14.3-4.3-22.3-3.1c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-8-1.2-15.7 .1-22.3 3.1C505.8 120.5 421.4 48 320 48zM78.5 341.1C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7zm483 0c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zM439 336.5C414.4 374.6 370.3 400 319.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1zM281.6 228.8c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0zm160 0s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0z\"]\n};\nconst faGrinTears = faFaceGrinTears;\nconst faCalendarXmark = {\n  prefix: 'far',\n  iconName: 'calendar-xmark',\n  icon: [448, 512, [\"calendar-times\"], \"f273\", \"M128 0c13.3 0 24 10.7 24 24l0 40 144 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 40 0c35.3 0 64 28.7 64 64l0 16 0 48 0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192l0-48 0-16C0 92.7 28.7 64 64 64l40 0 0-40c0-13.3 10.7-24 24-24zM400 192L48 192l0 256c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-256zm-95 89l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faCalendarTimes = faCalendarXmark;\nconst faFileVideo = {\n  prefix: 'far',\n  iconName: 'file-video',\n  icon: [384, 512, [], \"f1c8\", \"M320 464c8.8 0 16-7.2 16-16l0-288-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l256 0zM0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM80 288c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 16 44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3l0 103.4c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1L240 368l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96z\"]\n};\nconst faFilePdf = {\n  prefix: 'far',\n  iconName: 'file-pdf',\n  icon: [512, 512, [], \"f1c1\", \"M64 464l48 0 0 48-48 0c-35.3 0-64-28.7-64-64L0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 304l-48 0 0-144-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16zM176 352l32 0c30.9 0 56 25.1 56 56s-25.1 56-56 56l-16 0 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-80c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0 48 16 0zm96-80l32 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16l0-128c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-16 0 0 96 16 0zm80-112c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64 0-64z\"]\n};\nconst faComment = {\n  prefix: 'far',\n  iconName: 'comment',\n  icon: [512, 512, [128489, 61669], \"f075\", \"M123.6 391.3c12.9-9.4 29.6-11.8 44.6-6.4c26.5 9.6 56.2 15.1 87.8 15.1c124.7 0 208-80.5 208-160s-83.3-160-208-160S48 160.5 48 240c0 32 12.4 62.8 35.7 89.2c8.6 9.7 12.8 22.5 11.8 35.5c-1.4 18.1-5.7 34.7-11.3 49.4c17-7.9 31.1-16.7 39.4-22.7zM21.2 431.9c1.8-2.7 3.5-5.4 5.1-8.1c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208s-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6c-15.1 6.6-32.3 12.6-50.1 16.1c-.8 .2-1.6 .3-2.4 .5c-4.4 .8-8.7 1.5-13.2 1.9c-.2 0-.5 .1-.7 .1c-5.1 .5-10.2 .8-15.3 .8c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4c4.1-4.2 7.8-8.7 11.3-13.5c1.7-2.3 3.3-4.6 4.8-6.9l.3-.5z\"]\n};\nconst faEnvelope = {\n  prefix: 'far',\n  iconName: 'envelope',\n  icon: [512, 512, [128386, 9993, 61443], \"f0e0\", \"M64 112c-8.8 0-16 7.2-16 16l0 22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1l0-22.1c0-8.8-7.2-16-16-16L64 112zM48 212.2L48 384c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-171.8L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128z\"]\n};\nconst faHourglass = {\n  prefix: 'far',\n  iconName: 'hourglass',\n  icon: [384, 512, [9203, 62032, \"hourglass-empty\"], \"f254\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l8 0 0 19c0 40.3 16 79 44.5 107.5L158.1 256 76.5 337.5C48 366 32 404.7 32 445l0 19-8 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0-19c0-40.3-16-79-44.5-107.5L225.9 256l81.5-81.5C336 146 352 107.3 352 67l0-19 8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 0zM192 289.9l81.5 81.5C293 391 304 417.4 304 445l0 19L80 464l0-19c0-27.6 11-54 30.5-73.5L192 289.9zm0-67.9l-81.5-81.5C91 121 80 94.6 80 67l0-19 224 0 0 19c0 27.6-11 54-30.5 73.5L192 222.1z\"]\n};\nconst faHourglassEmpty = faHourglass;\nconst faCalendarCheck = {\n  prefix: 'far',\n  iconName: 'calendar-check',\n  icon: [448, 512, [], \"f274\", \"M128 0c13.3 0 24 10.7 24 24l0 40 144 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 40 0c35.3 0 64 28.7 64 64l0 16 0 48 0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192l0-48 0-16C0 92.7 28.7 64 64 64l40 0 0-40c0-13.3 10.7-24 24-24zM400 192L48 192l0 256c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-256zM329 297L217 409c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 95-95c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faHardDrive = {\n  prefix: 'far',\n  iconName: 'hard-drive',\n  icon: [512, 512, [128436, \"hdd\"], \"f0a0\", \"M64 80c-8.8 0-16 7.2-16 16l0 162c5.1-1.3 10.5-2 16-2l384 0c5.5 0 10.9 .7 16 2l0-162c0-8.8-7.2-16-16-16L64 80zM48 320l0 96c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16L64 304c-8.8 0-16 7.2-16 16zM0 320L0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 224 0 96c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-96zm280 48a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faHdd = faHardDrive;\nconst faFaceGrinSquintTears = {\n  prefix: 'far',\n  iconName: 'face-grin-squint-tears',\n  icon: [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-14.8 14.8-65.7 23.6-88.3 26.7c-5.6 .9-10.3-3.9-9.5-9.5C403.3 79.9 412 29 426.8 14.2zM75 75C158.2-8.3 284.5-22.2 382.2 33.2c-1.5 4.8-2.9 9.6-4.1 14.3c-3.1 12.2-5.5 24.6-7.3 35c-80.8-53.6-190.7-44.8-261.9 26.4C37.7 180.1 28.9 290 82.5 370.8c-10.5 1.8-22.9 4.2-35 7.3c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75zm389.6 58.9c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c3.1-12.2 5.5-24.6 7.3-35c80.8 53.6 190.7 44.8 261.9-26.4c71.2-71.2 80-181.1 26.4-261.9c10.5-1.8 22.9-4.2 35-7.3zm-105.4 93c10.1-16.3 33.9-16.9 37.9 1.9c9.5 44.4-3.7 93.5-39.3 129.1s-84.8 48.8-129.1 39.3c-18.7-4-18.2-27.8-1.9-37.9c25.2-15.7 50.2-35.4 73.6-58.8s43.1-48.4 58.8-73.6zM92 265.3l97.4-29.7c11.6-3.5 22.5 7.3 19 19l-29.7 97.4c-2.6 8.6-13.4 11.3-19.8 4.9c-2-2-3.2-4.6-3.4-7.3l-5.1-56.1-56.1-5.1c-2.8-.3-5.4-1.5-7.3-3.4c-6.3-6.3-3.6-17.2 4.9-19.8zm193-178.2c2 2 3.2 4.6 3.4 7.3l5.1 56.1 56.1 5.1c2.8 .3 5.4 1.5 7.3 3.4c6.3 6.3 3.6 17.2-4.9 19.8l-97.4 29.7c-11.6 3.5-22.5-7.3-19-19L265.3 92c2.6-8.6 13.4-11.3 19.8-4.9zM14.9 497.1c-19.6-19.6-20-51-.7-70.3C29 412 79.8 403.2 102.4 400.1c5.6-.9 10.3 3.9 9.5 9.5c-3.2 22.5-11.9 73.5-26.7 88.3C66 517 34.5 516.6 14.9 497.1z\"]\n};\nconst faGrinSquintTears = faFaceGrinSquintTears;\nconst faRectangleList = {\n  prefix: 'far',\n  iconName: 'rectangle-list',\n  icon: [576, 512, [\"list-alt\"], \"f022\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm96 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm104 0c0-13.3 10.7-24 24-24l224 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-224 0c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24l224 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-224 0c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24l224 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-224 0c-13.3 0-24-10.7-24-24zm-72-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faListAlt = faRectangleList;\nconst faCalendarPlus = {\n  prefix: 'far',\n  iconName: 'calendar-plus',\n  icon: [448, 512, [], \"f271\", \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l352 0 0 256c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256zm176 40c-13.3 0-24 10.7-24 24l0 48-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0 0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48 48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-48c0-13.3-10.7-24-24-24z\"]\n};\nconst faCircleLeft = {\n  prefix: 'far',\n  iconName: 'circle-left',\n  icon: [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M48 256a208 208 0 1 1 416 0A208 208 0 1 1 48 256zm464 0A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM217.4 376.9c4.2 4.5 10.1 7.1 16.3 7.1c12.3 0 22.3-10 22.3-22.3l0-57.7 96 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-96 0 0-57.7c0-12.3-10-22.3-22.3-22.3c-6.2 0-12.1 2.6-16.3 7.1L117.5 242.2c-3.5 3.8-5.5 8.7-5.5 13.8s2 10.1 5.5 13.8l99.9 107.1z\"]\n};\nconst faArrowAltCircleLeft = faCircleLeft;\nconst faMoneyBill1 = {\n  prefix: 'far',\n  iconName: 'money-bill-1',\n  icon: [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M112 112c0 35.3-28.7 64-64 64l0 160c35.3 0 64 28.7 64 64l352 0c0-35.3 28.7-64 64-64l0-160c-35.3 0-64-28.7-64-64l-352 0zM0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm80-48c0 8.8 7.2 16 16 16l0 64-8 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l24 0 24 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-8 0 0-80c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faMoneyBillAlt = faMoneyBill1;\nconst faClock = {\n  prefix: 'far',\n  iconName: 'clock',\n  icon: [512, 512, [128339, \"clock-four\"], \"f017\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nconst faClockFour = faClock;\nconst faKeyboard = {\n  prefix: 'far',\n  iconName: 'keyboard',\n  icon: [576, 512, [9000], \"f11c\", \"M64 112c-8.8 0-16 7.2-16 16l0 256c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-256c0-8.8-7.2-16-16-16L64 112zM0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM176 320l224 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm-72-72c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16z\"]\n};\nconst faClosedCaptioning = {\n  prefix: 'far',\n  iconName: 'closed-captioning',\n  icon: [576, 512, [], \"f20a\", \"M512 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l448 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\"]\n};\nconst faImages = {\n  prefix: 'far',\n  iconName: 'images',\n  icon: [576, 512, [], \"f302\", \"M160 80l352 0c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-21.2 0L388.1 178.9c-4.4-6.8-12-10.9-20.1-10.9s-15.7 4.1-20.1 10.9l-52.2 79.8-12.4-16.9c-4.5-6.2-11.7-9.8-19.4-9.8s-14.8 3.6-19.4 9.8L175.6 336 160 336c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16zM96 96l0 224c0 35.3 28.7 64 64 64l352 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32c-35.3 0-64 28.7-64 64zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 344c0 75.1 60.9 136 136 136l320 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-320 0c-48.6 0-88-39.4-88-88l0-224zm208 24a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faFaceGrin = {\n  prefix: 'far',\n  iconName: 'face-grin',\n  icon: [512, 512, [128512, \"grin\"], \"f580\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrin = faFaceGrin;\nconst faFaceMeh = {\n  prefix: 'far',\n  iconName: 'face-meh',\n  icon: [512, 512, [128528, \"meh\"], \"f11a\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm192-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM184 328c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nconst faMeh = faFaceMeh;\nconst faIdCard = {\n  prefix: 'far',\n  iconName: 'id-card',\n  icon: [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M528 160l0 256c0 8.8-7.2 16-16 16l-192 0c0-44.2-35.8-80-80-80l-64 0c-44.2 0-80 35.8-80 80l-32 0c-8.8 0-16-7.2-16-16l0-256 480 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM272 256a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm104-48c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0z\"]\n};\nconst faDriversLicense = faIdCard;\nconst faSun = {\n  prefix: 'far',\n  iconName: 'sun',\n  icon: [512, 512, [9728], \"f185\", \"M375.7 19.7c-1.5-8-6.9-14.7-14.4-17.8s-16.1-2.2-22.8 2.4L256 61.1 173.5 4.2c-6.7-4.6-15.3-5.5-22.8-2.4s-12.9 9.8-14.4 17.8l-18.1 98.5L19.7 136.3c-8 1.5-14.7 6.9-17.8 14.4s-2.2 16.1 2.4 22.8L61.1 256 4.2 338.5c-4.6 6.7-5.5 15.3-2.4 22.8s9.8 13 17.8 14.4l98.5 18.1 18.1 98.5c1.5 8 6.9 14.7 14.4 17.8s16.1 2.2 22.8-2.4L256 450.9l82.5 56.9c6.7 4.6 15.3 5.5 22.8 2.4s12.9-9.8 14.4-17.8l18.1-98.5 98.5-18.1c8-1.5 14.7-6.9 17.8-14.4s2.2-16.1-2.4-22.8L450.9 256l56.9-82.5c4.6-6.7 5.5-15.3 2.4-22.8s-9.8-12.9-17.8-14.4l-98.5-18.1L375.7 19.7zM269.6 110l65.6-45.2 14.4 78.3c1.8 9.8 9.5 17.5 19.3 19.3l78.3 14.4L402 242.4c-5.7 8.2-5.7 19 0 27.2l45.2 65.6-78.3 14.4c-9.8 1.8-17.5 9.5-19.3 19.3l-14.4 78.3L269.6 402c-8.2-5.7-19-5.7-27.2 0l-65.6 45.2-14.4-78.3c-1.8-9.8-9.5-17.5-19.3-19.3L64.8 335.2 110 269.6c5.7-8.2 5.7-19 0-27.2L64.8 176.8l78.3-14.4c9.8-1.8 17.5-9.5 19.3-19.3l14.4-78.3L242.4 110c8.2 5.7 19 5.7 27.2 0zM256 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM192 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nconst faFaceLaughWink = {\n  prefix: 'far',\n  iconName: 'face-laugh-wink',\n  icon: [512, 512, [\"laugh-wink\"], \"f59c\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"]\n};\nconst faLaughWink = faFaceLaughWink;\nconst faCircleDown = {\n  prefix: 'far',\n  iconName: 'circle-down',\n  icon: [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 464a208 208 0 1 1 0-416 208 208 0 1 1 0 416zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM376.9 294.6c4.5-4.2 7.1-10.1 7.1-16.3c0-12.3-10-22.3-22.3-22.3L304 256l0-96c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 96-57.7 0C138 256 128 266 128 278.3c0 6.2 2.6 12.1 7.1 16.3l107.1 99.9c3.8 3.5 8.7 5.5 13.8 5.5s10.1-2 13.8-5.5l107.1-99.9z\"]\n};\nconst faArrowAltCircleDown = faCircleDown;\nconst faThumbsDown = {\n  prefix: 'far',\n  iconName: 'thumbs-down',\n  icon: [512, 512, [128078, 61576], \"f165\", \"M323.8 477.2c-38.2 10.9-78.1-11.2-89-49.4l-5.7-20c-3.7-13-10.4-25-19.5-35l-51.3-56.4c-8.9-9.8-8.2-25 1.6-33.9s25-8.2 33.9 1.6l51.3 56.4c14.1 15.5 24.4 34 30.1 54.1l5.7 20c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7l-5.7-20c-5.7-19.9-14.7-38.7-26.6-55.5c-5.2-7.3-5.8-16.9-1.7-24.9s12.3-13 21.3-13L448 288c8.8 0 16-7.2 16-16c0-6.8-4.3-12.7-10.4-15c-7.4-2.8-13-9-14.9-16.7s.1-15.8 5.3-21.7c2.5-2.8 4-6.5 4-10.6c0-7.8-5.6-14.3-13-15.7c-8.2-1.6-15.1-7.3-18-15.2s-1.6-16.7 3.6-23.3c2.1-2.7 3.4-6.1 3.4-9.9c0-6.7-4.2-12.6-10.2-14.9c-11.5-4.5-17.7-16.9-14.4-28.8c.4-1.3 .6-2.8 .6-4.3c0-8.8-7.2-16-16-16l-97.5 0c-12.6 0-25 3.7-35.5 10.7l-61.7 41.1c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l61.7-41.1c18.4-12.3 40-18.8 62.1-18.8L384 32c34.7 0 62.9 27.6 64 62c14.6 11.7 24 29.7 24 50c0 4.5-.5 8.8-1.3 13c15.4 11.7 25.3 30.2 25.3 51c0 6.5-1 12.8-2.8 18.7C504.8 238.3 512 254.3 512 272c0 35.3-28.6 64-64 64l-92.3 0c4.7 10.4 8.7 21.2 11.8 32.2l5.7 20c10.9 38.2-11.2 78.1-49.4 89zM32 384c-17.7 0-32-14.3-32-32L0 128c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32l-64 0z\"]\n};\nconst faChessPawn = {\n  prefix: 'far',\n  iconName: 'chess-pawn',\n  icon: [320, 512, [9823], \"f443\", \"M232 152A72 72 0 1 0 88 152a72 72 0 1 0 144 0zm24 120l-12.6 0 10.7 80-48.4 0L195 272l-35 0-35 0-10.7 80-48.4 0 10.7-80L64 272c-13.3 0-24-10.7-24-24s10.7-24 24-24c-15.1-20.1-24-45-24-72C40 85.7 93.7 32 160 32s120 53.7 120 120c0 27-8.9 51.9-24 72c13.3 0 24 10.7 24 24s-10.7 24-24 24zM52.7 464l214.7 0-16.6-32L69.2 432 52.7 464zm207.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8L40.8 512C18.2 512 0 493.8 0 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C36.5 390.7 47.5 384 59.5 384l201 0z\"]\n};\nconst faCreditCard = {\n  prefix: 'far',\n  iconName: 'credit-card',\n  icon: [576, 512, [128179, 62083, \"credit-card-alt\"], \"f09d\", \"M512 80c8.8 0 16 7.2 16 16l0 32L48 128l0-32c0-8.8 7.2-16 16-16l448 0zm16 144l0 192c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-192 480 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm56 304c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0zm128 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0z\"]\n};\nconst faCreditCardAlt = faCreditCard;\nconst faBell = {\n  prefix: 'far',\n  iconName: 'bell',\n  icon: [448, 512, [128276, 61602], \"f0f3\", \"M224 0c-17.7 0-32 14.3-32 32l0 19.2C119 66 64 130.6 64 208l0 25.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416l400 0c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6C399.5 322.9 384 278.8 384 233.4l0-25.4c0-77.4-55-142-128-156.8L256 32c0-17.7-14.3-32-32-32zm0 96c61.9 0 112 50.1 112 112l0 25.4c0 47.9 13.9 94.6 39.7 134.6L72.3 368C98.1 328 112 281.3 112 233.4l0-25.4c0-61.9 50.1-112 112-112zm64 352l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\"]\n};\nconst faFile = {\n  prefix: 'far',\n  iconName: 'file',\n  icon: [384, 512, [128196, 128459, 61462], \"f15b\", \"M320 464c8.8 0 16-7.2 16-16l0-288-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l256 0zM0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64z\"]\n};\nconst faHospital = {\n  prefix: 'far',\n  iconName: 'hospital',\n  icon: [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M232 0c-39.8 0-72 32.2-72 72l0 8L72 80C32.2 80 0 112.2 0 152L0 440c0 39.8 32.2 72 72 72l.2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0s0 0 0 0l272 0 8 0s0 0 0 0l104 0c39.8 0 72-32.2 72-72l0-288c0-39.8-32.2-72-72-72l-88 0 0-8c0-39.8-32.2-72-72-72L232 0zM480 128l88 0c13.3 0 24 10.7 24 24l0 40-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0 0 48-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0 0 104c0 13.3-10.7 24-24 24l-88 0 0-128 0-208zM72 128l88 0 0 336c0 0 0 0-.1 0l-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0c-13.2 0-24-10.7-24-24l0-104 56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0 0-48 56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0 0-40c0-13.3 10.7-24 24-24zM208 72c0-13.3 10.7-24 24-24l176 0c13.3 0 24 10.7 24 24l0 264 0 128-64 0 0-64c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 64-64 0 0-392zm88 24l0 24-24 0c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l24 0 0 24c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-24 24 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-24 0 0-24c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faHospitalAlt = faHospital;\nconst faHospitalWide = faHospital;\nconst faChessRook = {\n  prefix: 'far',\n  iconName: 'chess-rook',\n  icon: [448, 512, [9820], \"f447\", \"M80 80l0 112c0 2.5 1.2 4.9 3.2 6.4l51.2 38.4c6.8 5.1 10.4 13.4 9.5 21.9L133.5 352l-48.3 0 9.4-85L54.4 236.8C40.3 226.2 32 209.6 32 192L32 72c0-22.1 17.9-40 40-40l304 0c22.1 0 40 17.9 40 40l0 120c0 17.6-8.3 34.2-22.4 44.8L353.4 267l9.4 85-48.3 0-10.4-93.3c-.9-8.4 2.7-16.8 9.5-21.9l51.2-38.4c2-1.5 3.2-3.9 3.2-6.4l0-112-64 0 0 24c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-24-64 0 0 24c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-24L80 80zm4.7 384l278.7 0-16.6-32-245.6 0L84.7 464zm271.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8L72.8 512C50.2 512 32 493.8 32 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C68.5 390.7 79.5 384 91.5 384l265 0zM208 288c-8.8 0-16-7.2-16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 8.8-7.2 16-16 16l-32 0z\"]\n};\nconst faStarHalf = {\n  prefix: 'far',\n  iconName: 'star-half',\n  icon: [576, 512, [61731], \"f089\", \"M293.3 .6c10.9 2.5 18.6 12.2 18.6 23.4l0 384.7c0 8.9-4.9 17-12.7 21.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.3c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5c4.9-10.1 16.1-15.4 27-12.9zM263.9 128.4l-28.6 58.8c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l92.5-49.4 0-265.9z\"]\n};\nconst faChessKing = {\n  prefix: 'far',\n  iconName: 'chess-king',\n  icon: [448, 512, [9818], \"f43f\", \"M248 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 32-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 40L59.6 144C26.7 144 0 170.7 0 203.6c0 8.2 1.7 16.3 4.9 23.8L59.1 352l52.3 0L49 208.2c-.6-1.5-1-3-1-4.6c0-6.4 5.2-11.6 11.6-11.6L224 192l164.4 0c6.4 0 11.6 5.2 11.6 11.6c0 1.6-.3 3.2-1 4.6L336.5 352l52.3 0 54.2-124.6c3.3-7.5 4.9-15.6 4.9-23.8c0-32.9-26.7-59.6-59.6-59.6L248 144l0-40 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-32zM101.2 432l245.6 0 16.6 32L84.7 464l16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3l-265 0c-12 0-22.9 6.7-28.4 17.3L36.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C32 493.8 50.2 512 72.8 512l302.5 0c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\"]\n};\nconst faCircleUser = {\n  prefix: 'far',\n  iconName: 'circle-user',\n  icon: [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M406.5 399.6C387.4 352.9 341.5 320 288 320l-64 0c-53.5 0-99.4 32.9-118.5 79.6C69.9 362.2 48 311.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 55.7-21.9 106.2-57.5 143.6zm-40.1 32.7C334.4 452.4 296.6 464 256 464s-78.4-11.6-110.5-31.7c7.3-36.7 39.7-64.3 78.5-64.3l64 0c38.8 0 71.2 27.6 78.5 64.3zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-272a40 40 0 1 1 0-80 40 40 0 1 1 0 80zm-88-40a88 88 0 1 0 176 0 88 88 0 1 0 -176 0z\"]\n};\nconst faUserCircle = faCircleUser;\nconst faCopy = {\n  prefix: 'far',\n  iconName: 'copy',\n  icon: [448, 512, [], \"f0c5\", \"M384 336l-192 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l140.1 0L400 115.9 400 320c0 8.8-7.2 16-16 16zM192 384l192 0c35.3 0 64-28.7 64-64l0-204.1c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1L192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-32-48 0 0 32c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l32 0 0-48-32 0z\"]\n};\nconst faShareFromSquare = {\n  prefix: 'far',\n  iconName: 'share-from-square',\n  icon: [576, 512, [61509, \"share-square\"], \"f14d\", \"M400 255.4l0-15.4 0-32c0-8.8-7.2-16-16-16l-32 0-16 0-46.5 0c-50.9 0-93.9 33.5-108.3 79.6c-3.3-9.4-5.2-19.8-5.2-31.6c0-61.9 50.1-112 112-112l48 0 16 0 32 0c8.8 0 16-7.2 16-16l0-32 0-15.4L506 160 400 255.4zM336 240l16 0 0 48c0 17.7 14.3 32 32 32l3.7 0c7.9 0 15.5-2.9 21.4-8.2l139-125.1c7.6-6.8 11.9-16.5 11.9-26.7s-4.3-19.9-11.9-26.7L409.9 8.9C403.5 3.2 395.3 0 386.7 0C367.5 0 352 15.5 352 34.7L352 80l-16 0-32 0-16 0c-88.4 0-160 71.6-160 160c0 60.4 34.6 99.1 63.9 120.9c5.9 4.4 11.5 8.1 16.7 11.2c4.4 2.7 8.5 4.9 11.9 6.6c3.4 1.7 6.2 3 8.2 3.9c2.2 1 4.6 1.4 7.1 1.4l2.5 0c9.8 0 17.8-8 17.8-17.8c0-7.8-5.3-14.7-11.6-19.5c0 0 0 0 0 0c-.4-.3-.7-.5-1.1-.8c-1.7-1.1-3.4-2.5-5-4.1c-.8-.8-1.7-1.6-2.5-2.6s-1.6-1.9-2.4-2.9c-1.8-2.5-3.5-5.3-5-8.5c-2.6-6-4.3-13.3-4.3-22.4c0-36.1 29.3-65.5 65.5-65.5l14.5 0 32 0zM72 32C32.2 32 0 64.2 0 104L0 440c0 39.8 32.2 72 72 72l336 0c39.8 0 72-32.2 72-72l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64c0 13.3-10.7 24-24 24L72 464c-13.3 0-24-10.7-24-24l0-336c0-13.3 10.7-24 24-24l64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L72 32z\"]\n};\nconst faShareSquare = faShareFromSquare;\nconst faCopyright = {\n  prefix: 'far',\n  iconName: 'copyright',\n  icon: [512, 512, [169], \"f1f9\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c-31.2-31.2-31.2-81.9 0-113.1s81.9-31.2 113.1 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9c-50-50-131-50-181 0s-50 131 0 181s131 50 181 0c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0c-31.2 31.2-81.9 31.2-113.1 0z\"]\n};\nconst faMap = {\n  prefix: 'far',\n  iconName: 'map',\n  icon: [576, 512, [128506, 62072], \"f279\", \"M565.6 36.2C572.1 40.7 576 48.1 576 56l0 336c0 10-6.2 18.9-15.5 22.4l-168 64c-5.2 2-10.9 2.1-16.1 .3L192.5 417.5l-160 61c-7.4 2.8-15.7 1.8-22.2-2.7S0 463.9 0 456L0 120c0-10 6.1-18.9 15.5-22.4l168-64c5.2-2 10.9-2.1 16.1-.3L383.5 94.5l160-61c7.4-2.8 15.7-1.8 22.2 2.7zM48 136.5l0 284.6 120-45.7 0-284.6L48 136.5zM360 422.7l0-285.4-144-48 0 285.4 144 48zm48-1.5l120-45.7 0-284.6L408 136.5l0 284.6z\"]\n};\nconst faBellSlash = {\n  prefix: 'far',\n  iconName: 'bell-slash',\n  icon: [640, 512, [128277, 61943], \"f1f6\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L542.6 400c2.7-7.8 1.3-16.5-3.9-23l-14.9-18.6C495.5 322.9 480 278.8 480 233.4l0-33.4c0-75.8-55.5-138.6-128-150.1L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 17.9c-43.9 7-81.5 32.7-104.4 68.7L38.8 5.1zM221.7 148.4C239.6 117.1 273.3 96 312 96l8 0 8 0c57.4 0 104 46.6 104 104l0 33.4c0 32.7 6.4 64.8 18.7 94.5L221.7 148.4zM406.2 416l-60.9-48-176.9 0c21.2-32.8 34.4-70.3 38.4-109.1L160 222.1l0 11.4c0 45.4-15.5 89.5-43.8 124.9L101.3 377c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l286.2 0zM384 448l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\"]\n};\nconst faHandLizard = {\n  prefix: 'far',\n  iconName: 'hand-lizard',\n  icon: [512, 512, [], \"f258\", \"M72 112c-13.3 0-24 10.7-24 24s10.7 24 24 24l168 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-104 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l152 0c4.5 0 8.9 1.3 12.7 3.6l64 40c7 4.4 11.3 12.1 11.3 20.4l0 24c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-10.7L281.1 384 136 384c-39.8 0-72-32.2-72-72s32.2-72 72-72l104 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L72 208c-39.8 0-72-32.2-72-72S32.2 64 72 64l209.6 0c46.7 0 90.9 21.5 119.7 58.3l78.4 100.1c20.9 26.7 32.3 59.7 32.3 93.7L512 424c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-107.9c0-23.2-7.8-45.8-22.1-64.1L363.5 151.9c-19.7-25.2-49.9-39.9-81.9-39.9L72 112z\"]\n};\nconst faFaceSmile = {\n  prefix: 'far',\n  iconName: 'face-smile',\n  icon: [512, 512, [128578, \"smile\"], \"f118\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSmile = faFaceSmile;\nconst faHandPeace = {\n  prefix: 'far',\n  iconName: 'hand-peace',\n  icon: [512, 512, [9996], \"f25b\", \"M250.8 1.4c-35.2-3.7-66.6 21.8-70.3 57L174 119 156.7 69.6C145 36.3 108.4 18.8 75.1 30.5S24.2 78.8 35.9 112.1L88.7 262.2C73.5 276.7 64 297.3 64 320c0 0 0 0 0 0l0 24c0 92.8 75.2 168 168 168l48 0c92.8 0 168-75.2 168-168l0-72 0-16 0-32c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4c-10.4-21.3-32.3-36-57.6-36c-.7 0-1.5 0-2.2 0l5.9-56.3c3.7-35.2-21.8-66.6-57-70.3zm-.2 155.4C243.9 166.9 240 179 240 192l0 48c0 .7 0 1.4 0 2c-5.1-1.3-10.5-2-16-2l-7.4 0-5.4-15.3 17-161.3c.9-8.8 8.8-15.2 17.6-14.2s15.2 8.8 14.2 17.6l-9.5 90.1zM111.4 85.6L165.7 240 144 240c-4 0-8 .3-11.9 .9L81.2 96.2c-2.9-8.3 1.5-17.5 9.8-20.4s17.5 1.5 20.4 9.8zM288 192c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48zm38.4 108c10.4 21.3 32.3 36 57.6 36c5.5 0 10.9-.7 16-2l0 10c0 66.3-53.7 120-120 120l-48 0c-66.3 0-120-53.7-120-120l0-24s0 0 0 0c0-17.7 14.3-32 32-32l80 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c35.3 0 64-28.7 64-64c0-.7 0-1.4 0-2c5.1 1.3 10.5 2 16 2c7.9 0 15.4-1.4 22.4-4zM400 272c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 0 16z\"]\n};\nconst faFaceGrinHearts = {\n  prefix: 'far',\n  iconName: 'face-grin-hearts',\n  icon: [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM215.3 137.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm122.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\"]\n};\nconst faGrinHearts = faFaceGrinHearts;\nconst faBuilding = {\n  prefix: 'far',\n  iconName: 'building',\n  icon: [384, 512, [127970, 61687], \"f1ad\", \"M64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l80 0 0-64c0-26.5 21.5-48 48-48s48 21.5 48 48l0 64 80 0c8.8 0 16-7.2 16-16l0-384c0-8.8-7.2-16-16-16L64 48zM0 64C0 28.7 28.7 0 64 0L320 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm88 40c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48zM232 88l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16zM88 232c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48zm144-16l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16z\"]\n};\nconst faFaceGrinBeamSweat = {\n  prefix: 'far',\n  iconName: 'face-grin-beam-sweat',\n  icon: [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M476.8 126.3C497.1 120.8 512 102.7 512 81c0-20-28.6-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0c-9.5 12.6-27.1 37.2-36 57.5c-.3 .7-.6 1.4-.9 2.1C417.8 69.7 416 76 416 81c0 26 21.5 47 48 47c4.4 0 8.7-.6 12.8-1.7zM395.4 41.2C355.3 15.2 307.4 0 256 0C114.6 0 0 114.6 0 256S114.6 512 256 512s256-114.6 256-256c0-35.8-7.3-69.9-20.6-100.8c-8.6 3.1-17.8 4.8-27.4 4.8c-8.9 0-17.6-1.5-25.7-4.2C454.7 185.5 464 219.7 464 256c0 114.9-93.1 208-208 208S48 370.9 48 256S141.1 48 256 48c48.7 0 93.4 16.7 128.9 44.7c-.6-3.8-.9-7.7-.9-11.7c0-11.4 3.8-22.4 7.1-30.5c1.3-3.1 2.7-6.2 4.3-9.3zM375 336.5c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5zM217.6 228.8s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0z\"]\n};\nconst faGrinBeamSweat = faFaceGrinBeamSweat;\nconst faMoon = {\n  prefix: 'far',\n  iconName: 'moon',\n  icon: [384, 512, [127769, 9214], \"f186\", \"M144.7 98.7c-21 34.1-33.1 74.3-33.1 117.3c0 98 62.8 181.4 150.4 211.7c-12.4 2.8-25.3 4.3-38.6 4.3C126.6 432 48 353.3 48 256c0-68.9 39.4-128.4 96.8-157.3zm62.1-66C91.1 41.2 0 137.9 0 256C0 379.7 100 480 223.5 480c47.8 0 92-15 128.4-40.6c1.9-1.3 3.7-2.7 5.5-4c4.8-3.6 9.4-7.4 13.9-11.4c2.7-2.4 5.3-4.8 7.9-7.3c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-3.7 .6-7.4 1.2-11.1 1.6c-5 .5-10.1 .9-15.3 1c-1.2 0-2.5 0-3.7 0l-.3 0c-96.8-.2-175.2-78.9-175.2-176c0-54.8 24.9-103.7 64.1-136c1-.9 2.1-1.7 3.2-2.6c4-3.2 8.2-6.2 12.5-9c3.1-2 6.3-4 9.6-5.8c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-3.6-.3-7.1-.5-10.7-.6c-2.7-.1-5.5-.1-8.2-.1c-3.3 0-6.5 .1-9.8 .2c-2.3 .1-4.6 .2-6.9 .4z\"]\n};\nconst faCalendar = {\n  prefix: 'far',\n  iconName: 'calendar',\n  icon: [448, 512, [128197, 128198], \"f133\", \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l352 0 0 256c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256z\"]\n};\nconst faFaceGrinTongueWink = {\n  prefix: 'far',\n  iconName: 'face-grin-tongue-wink',\n  icon: [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M348.3 442.4c2.4-8.4 3.7-17.3 3.7-26.4l0-52.5c8.8-8 16.6-17.1 23-27c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c6.5 10 14.3 19.1 23.1 27.1l0 52.4c0 9.2 1.3 18 3.7 26.4C95.1 408.4 48 337.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 81.7-47.1 152.4-115.7 186.4zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm176.7 12a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-.4-72a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM320 416c0 35.3-28.7 64-64 64s-64-28.7-64-64l0-37.4c0-14.7 11.9-26.6 26.6-26.6l2 0c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9l2 0c14.7 0 26.6 11.9 26.6 26.6l0 37.4z\"]\n};\nconst faGrinTongueWink = faFaceGrinTongueWink;\nconst faClone = {\n  prefix: 'far',\n  iconName: 'clone',\n  icon: [512, 512, [], \"f24d\", \"M64 464l224 0c8.8 0 16-7.2 16-16l0-64 48 0 0 64c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64l64 0 0 48-64 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16zM224 304l224 0c8.8 0 16-7.2 16-16l0-224c0-8.8-7.2-16-16-16L224 48c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16zm-64-16l0-224c0-35.3 28.7-64 64-64L448 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-224 0c-35.3 0-64-28.7-64-64z\"]\n};\nconst faFaceAngry = {\n  prefix: 'far',\n  iconName: 'face-angry',\n  icon: [512, 512, [128544, \"angry\"], \"f556\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm72.4-118.5c9.7-9 10.2-24.2 1.2-33.9C315.3 344.3 290.6 328 256 328s-59.3 16.3-73.5 31.6c-9 9.7-8.5 24.9 1.2 33.9s24.9 8.5 33.9-1.2c7.4-7.9 20-16.4 38.5-16.4s31.1 8.5 38.5 16.4c9 9.7 24.2 10.2 33.9 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nconst faAngry = faFaceAngry;\nconst faRectangleXmark = {\n  prefix: 'far',\n  iconName: 'rectangle-xmark',\n  icon: [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm175 79c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faRectangleTimes = faRectangleXmark;\nconst faTimesRectangle = faRectangleXmark;\nconst faWindowClose = faRectangleXmark;\nconst faPaperPlane = {\n  prefix: 'far',\n  iconName: 'paper-plane',\n  icon: [512, 512, [61913], \"f1d8\", \"M16.1 260.2c-22.6 12.9-20.5 47.3 3.6 57.3L160 376l0 103.3c0 18.1 14.6 32.7 32.7 32.7c9.7 0 18.9-4.3 25.1-11.8l62-74.3 123.9 51.6c18.9 7.9 40.8-4.5 43.9-24.7l64-416c1.9-12.1-3.4-24.3-13.5-31.2s-23.3-7.5-34-1.4l-448 256zm52.1 25.5L409.7 90.6 190.1 336l1.2 1L68.2 285.7zM403.3 425.4L236.7 355.9 450.8 116.6 403.3 425.4z\"]\n};\nconst faLifeRing = {\n  prefix: 'far',\n  iconName: 'life-ring',\n  icon: [512, 512, [], \"f1cd\", \"M385.1 419.1C349.7 447.2 304.8 464 256 464s-93.7-16.8-129.1-44.9l80.4-80.4c14.3 8.4 31 13.3 48.8 13.3s34.5-4.8 48.8-13.3l80.4 80.4zm68.1 .2C489.9 374.9 512 318.1 512 256s-22.1-118.9-58.8-163.3L465 81c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L419.3 58.8C374.9 22.1 318.1 0 256 0S137.1 22.1 92.7 58.8L81 47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L58.8 92.7C22.1 137.1 0 193.9 0 256s22.1 118.9 58.8 163.3L47 431c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l11.8-11.8C137.1 489.9 193.9 512 256 512s118.9-22.1 163.3-58.8L431 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-11.8-11.8zm-34.1-34.1l-80.4-80.4c8.4-14.3 13.3-31 13.3-48.8s-4.8-34.5-13.3-48.8l80.4-80.4C447.2 162.3 464 207.2 464 256s-16.8 93.7-44.9 129.1zM385.1 92.9l-80.4 80.4c-14.3-8.4-31-13.3-48.8-13.3s-34.5 4.8-48.8 13.3L126.9 92.9C162.3 64.8 207.2 48 256 48s93.7 16.8 129.1 44.9zM173.3 304.8L92.9 385.1C64.8 349.7 48 304.8 48 256s16.8-93.7 44.9-129.1l80.4 80.4c-8.4 14.3-13.3 31-13.3 48.8s4.8 34.5 13.3 48.8zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nconst faFaceGrimace = {\n  prefix: 'far',\n  iconName: 'face-grimace',\n  icon: [512, 512, [128556, \"grimace\"], \"f57f\", \"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM168 320c-13.3 0-24 10.7-24 24s10.7 24 24 24l8 0 0-48-8 0zm40 48l32 0 0-48-32 0 0 48zm96 0l0-48-32 0 0 48 32 0zm32 0l8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0 48zM168 288l176 0c30.9 0 56 25.1 56 56s-25.1 56-56 56l-176 0c-30.9 0-56-25.1-56-56s25.1-56 56-56zm-23.6-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrimace = faFaceGrimace;\nconst faCalendarMinus = {\n  prefix: 'far',\n  iconName: 'calendar-minus',\n  icon: [448, 512, [], \"f272\", \"M128 0c13.3 0 24 10.7 24 24l0 40 144 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 40 0c35.3 0 64 28.7 64 64l0 16 0 48 0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192l0-48 0-16C0 92.7 28.7 64 64 64l40 0 0-40c0-13.3 10.7-24 24-24zM400 192L48 192l0 256c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-256zM296 352l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24z\"]\n};\nconst faCircleXmark = {\n  prefix: 'far',\n  iconName: 'circle-xmark',\n  icon: [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c-9.4 9.4-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0z\"]\n};\nconst faTimesCircle = faCircleXmark;\nconst faXmarkCircle = faCircleXmark;\nconst faThumbsUp = {\n  prefix: 'far',\n  iconName: 'thumbs-up',\n  icon: [512, 512, [128077, 61575], \"f164\", \"M323.8 34.8c-38.2-10.9-78.1 11.2-89 49.4l-5.7 20c-3.7 13-10.4 25-19.5 35l-51.3 56.4c-8.9 9.8-8.2 25 1.6 33.9s25 8.2 33.9-1.6l51.3-56.4c14.1-15.5 24.4-34 30.1-54.1l5.7-20c3.6-12.7 16.9-20.1 29.7-16.5s20.1 16.9 16.5 29.7l-5.7 20c-5.7 19.9-14.7 38.7-26.6 55.5c-5.2 7.3-5.8 16.9-1.7 24.9s12.3 13 21.3 13L448 224c8.8 0 16 7.2 16 16c0 6.8-4.3 12.7-10.4 15c-7.4 2.8-13 9-14.9 16.7s.1 15.8 5.3 21.7c2.5 2.8 4 6.5 4 10.6c0 7.8-5.6 14.3-13 15.7c-8.2 1.6-15.1 7.3-18 15.2s-1.6 16.7 3.6 23.3c2.1 2.7 3.4 6.1 3.4 9.9c0 6.7-4.2 12.6-10.2 14.9c-11.5 4.5-17.7 16.9-14.4 28.8c.4 1.3 .6 2.8 .6 4.3c0 8.8-7.2 16-16 16l-97.5 0c-12.6 0-25-3.7-35.5-10.7l-61.7-41.1c-11-7.4-25.9-4.4-33.3 6.7s-4.4 25.9 6.7 33.3l61.7 41.1c18.4 12.3 40 18.8 62.1 18.8l97.5 0c34.7 0 62.9-27.6 64-62c14.6-11.7 24-29.7 24-50c0-4.5-.5-8.8-1.3-13c15.4-11.7 25.3-30.2 25.3-51c0-6.5-1-12.8-2.8-18.7C504.8 273.7 512 257.7 512 240c0-35.3-28.6-64-64-64l-92.3 0c4.7-10.4 8.7-21.2 11.8-32.2l5.7-20c10.9-38.2-11.2-78.1-49.4-89zM32 192c-17.7 0-32 14.3-32 32L0 448c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32l-64 0z\"]\n};\nconst faWindowMinimize = {\n  prefix: 'far',\n  iconName: 'window-minimize',\n  icon: [512, 512, [128469], \"f2d1\", \"M24 432c-13.3 0-24 10.7-24 24s10.7 24 24 24l464 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 432z\"]\n};\nconst faSquareFull = {\n  prefix: 'far',\n  iconName: 'square-full',\n  icon: [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11035, 11036], \"f45c\", \"M464 48l0 416L48 464 48 48l416 0zM48 0L0 0 0 48 0 464l0 48 48 0 416 0 48 0 0-48 0-416 0-48L464 0 48 0z\"]\n};\nconst faNoteSticky = {\n  prefix: 'far',\n  iconName: 'note-sticky',\n  icon: [448, 512, [62026, \"sticky-note\"], \"f249\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l224 0 0-80c0-17.7 14.3-32 32-32l80 0 0-224c0-8.8-7.2-16-16-16L64 80zM288 480L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 224 0 5.5c0 17-6.7 33.3-18.7 45.3l-90.5 90.5c-12 12-28.3 18.7-45.3 18.7l-5.5 0z\"]\n};\nconst faStickyNote = faNoteSticky;\nconst faFaceSadTear = {\n  prefix: 'far',\n  iconName: 'face-sad-tear',\n  icon: [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M175.9 448c-35-.1-65.5-22.6-76-54.6C67.6 356.8 48 308.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208s-93.1 208-208 208c-28.4 0-55.5-5.7-80.1-16zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM128 369c0 26 21.5 47 48 47s48-21 48-47c0-20-28.4-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0C156.6 308.6 128 349 128 369zm128-65c-13.3 0-24 10.7-24 24s10.7 24 24 24c30.7 0 58.7 11.5 80 30.6c9.9 8.8 25 8 33.9-1.9s8-25-1.9-33.9C338.3 320.2 299 304 256 304zm47.6-96a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zm-128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faSadTear = faFaceSadTear;\nconst faHandPointLeft = {\n  prefix: 'far',\n  iconName: 'hand-point-left',\n  icon: [512, 512, [], \"f0a5\", \"M64 128l177.6 0c-1 5.2-1.6 10.5-1.6 16l0 16-32 0L64 160c-8.8 0-16-7.2-16-16s7.2-16 16-16zm224 16c0-17.7 14.3-32 32-32c0 0 0 0 0 0l24 0c66.3 0 120 53.7 120 120l0 48c0 52.5-33.7 97.1-80.7 113.4c.5-3.1 .7-6.2 .7-9.4c0-20-9.2-37.9-23.6-49.7c4.9-9 7.6-19.4 7.6-30.3c0-15.1-5.3-29-14-40c8.8-11 14-24.9 14-40l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-40 0-40zm32-80s0 0 0 0c-18 0-34.6 6-48 16L64 80C28.7 80 0 108.7 0 144s28.7 64 64 64l82 0c-1.3 5.1-2 10.5-2 16c0 25.3 14.7 47.2 36 57.6c-2.6 7-4 14.5-4 22.4c0 20 9.2 37.9 23.6 49.7c-4.9 9-7.6 19.4-7.6 30.3c0 35.3 28.7 64 64 64l64 0 24 0c92.8 0 168-75.2 168-168l0-48c0-92.8-75.2-168-168-168l-24 0zM256 400c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0zM240 224c0 5.5 .7 10.9 2 16l-2 0-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0 16zm24 64l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l24 0z\"]\n};\nvar icons = {\n  faTrashCan,\n  faTrashAlt,\n  faMessage,\n  faCommentAlt,\n  faFileLines,\n  faFileAlt,\n  faFileText,\n  faCalendarDays,\n  faCalendarAlt,\n  faHandPointRight,\n  faFaceSmileBeam,\n  faSmileBeam,\n  faFaceGrinStars,\n  faGrinStars,\n  faAddressBook,\n  faContactBook,\n  faComments,\n  faPaste,\n  faFileClipboard,\n  faFaceGrinTongueSquint,\n  faGrinTongueSquint,\n  faFaceFlushed,\n  faFlushed,\n  faSquareCaretRight,\n  faCaretSquareRight,\n  faSquareMinus,\n  faMinusSquare,\n  faCompass,\n  faSquareCaretDown,\n  faCaretSquareDown,\n  faFaceKissBeam,\n  faKissBeam,\n  faLightbulb,\n  faFlag,\n  faSquareCheck,\n  faCheckSquare,\n  faCircleDot,\n  faDotCircle,\n  faFaceDizzy,\n  faDizzy,\n  faFutbol,\n  faFutbolBall,\n  faSoccerBall,\n  faPenToSquare,\n  faEdit,\n  faHourglassHalf,\n  faHourglass2,\n  faEyeSlash,\n  faHand,\n  faHandPaper,\n  faHandSpock,\n  faFaceKiss,\n  faKiss,\n  faFaceGrinTongue,\n  faGrinTongue,\n  faChessBishop,\n  faFaceGrinWink,\n  faGrinWink,\n  faFaceGrinWide,\n  faGrinAlt,\n  faFaceFrownOpen,\n  faFrownOpen,\n  faHandPointUp,\n  faBookmark,\n  faHandPointDown,\n  faFolder,\n  faFolderBlank,\n  faUser,\n  faSquareCaretLeft,\n  faCaretSquareLeft,\n  faStar,\n  faChessKnight,\n  faFaceLaughSquint,\n  faLaughSquint,\n  faFaceLaugh,\n  faLaugh,\n  faFolderOpen,\n  faClipboard,\n  faChessQueen,\n  faHandBackFist,\n  faHandRock,\n  faSquareCaretUp,\n  faCaretSquareUp,\n  faChartBar,\n  faBarChart,\n  faWindowRestore,\n  faSquarePlus,\n  faPlusSquare,\n  faImage,\n  faFolderClosed,\n  faLemon,\n  faHandshake,\n  faGem,\n  faCirclePlay,\n  faPlayCircle,\n  faCircleCheck,\n  faCheckCircle,\n  faCircleStop,\n  faStopCircle,\n  faIdBadge,\n  faFaceLaughBeam,\n  faLaughBeam,\n  faRegistered,\n  faAddressCard,\n  faContactCard,\n  faVcard,\n  faFaceTired,\n  faTired,\n  faFontAwesome,\n  faFontAwesomeFlag,\n  faFontAwesomeLogoFull,\n  faFaceSmileWink,\n  faSmileWink,\n  faFileWord,\n  faFilePowerpoint,\n  faEnvelopeOpen,\n  faFileZipper,\n  faFileArchive,\n  faSquare,\n  faSnowflake,\n  faNewspaper,\n  faFaceKissWinkHeart,\n  faKissWinkHeart,\n  faStarHalfStroke,\n  faStarHalfAlt,\n  faFileExcel,\n  faFaceGrinBeam,\n  faGrinBeam,\n  faObjectUngroup,\n  faCircleRight,\n  faArrowAltCircleRight,\n  faFaceRollingEyes,\n  faMehRollingEyes,\n  faObjectGroup,\n  faHeart,\n  faFaceSurprise,\n  faSurprise,\n  faCirclePause,\n  faPauseCircle,\n  faCircle,\n  faCircleUp,\n  faArrowAltCircleUp,\n  faFileAudio,\n  faFileImage,\n  faCircleQuestion,\n  faQuestionCircle,\n  faFaceMehBlank,\n  faMehBlank,\n  faEye,\n  faFaceSadCry,\n  faSadCry,\n  faFileCode,\n  faWindowMaximize,\n  faFaceFrown,\n  faFrown,\n  faFloppyDisk,\n  faSave,\n  faCommentDots,\n  faCommenting,\n  faFaceGrinSquint,\n  faGrinSquint,\n  faHandPointer,\n  faHandScissors,\n  faFaceGrinTears,\n  faGrinTears,\n  faCalendarXmark,\n  faCalendarTimes,\n  faFileVideo,\n  faFilePdf,\n  faComment,\n  faEnvelope,\n  faHourglass,\n  faHourglassEmpty,\n  faCalendarCheck,\n  faHardDrive,\n  faHdd,\n  faFaceGrinSquintTears,\n  faGrinSquintTears,\n  faRectangleList,\n  faListAlt,\n  faCalendarPlus,\n  faCircleLeft,\n  faArrowAltCircleLeft,\n  faMoneyBill1,\n  faMoneyBillAlt,\n  faClock,\n  faClockFour,\n  faKeyboard,\n  faClosedCaptioning,\n  faImages,\n  faFaceGrin,\n  faGrin,\n  faFaceMeh,\n  faMeh,\n  faIdCard,\n  faDriversLicense,\n  faSun,\n  faFaceLaughWink,\n  faLaughWink,\n  faCircleDown,\n  faArrowAltCircleDown,\n  faThumbsDown,\n  faChessPawn,\n  faCreditCard,\n  faCreditCardAlt,\n  faBell,\n  faFile,\n  faHospital,\n  faHospitalAlt,\n  faHospitalWide,\n  faChessRook,\n  faStarHalf,\n  faChessKing,\n  faCircleUser,\n  faUserCircle,\n  faCopy,\n  faShareFromSquare,\n  faShareSquare,\n  faCopyright,\n  faMap,\n  faBellSlash,\n  faHandLizard,\n  faFaceSmile,\n  faSmile,\n  faHandPeace,\n  faFaceGrinHearts,\n  faGrinHearts,\n  faBuilding,\n  faFaceGrinBeamSweat,\n  faGrinBeamSweat,\n  faMoon,\n  faCalendar,\n  faFaceGrinTongueWink,\n  faGrinTongueWink,\n  faClone,\n  faFaceAngry,\n  faAngry,\n  faRectangleXmark,\n  faRectangleTimes,\n  faTimesRectangle,\n  faWindowClose,\n  faPaperPlane,\n  faLifeRing,\n  faFaceGrimace,\n  faGrimace,\n  faCalendarMinus,\n  faCircleXmark,\n  faTimesCircle,\n  faXmarkCircle,\n  faThumbsUp,\n  faWindowMinimize,\n  faSquareFull,\n  faNoteSticky,\n  faStickyNote,\n  faFaceSadTear,\n  faSadTear,\n  faHandPointLeft\n};\n\nexport { icons as far, prefix, faTrashCan, faTrashAlt, faMessage, faCommentAlt, faFileLines, faFileAlt, faFileText, faCalendarDays, faCalendarAlt, faHandPointRight, faFaceSmileBeam, faSmileBeam, faFaceGrinStars, faGrinStars, faAddressBook, faContactBook, faComments, faPaste, faFileClipboard, faFaceGrinTongueSquint, faGrinTongueSquint, faFaceFlushed, faFlushed, faSquareCaretRight, faCaretSquareRight, faSquareMinus, faMinusSquare, faCompass, faSquareCaretDown, faCaretSquareDown, faFaceKissBeam, faKissBeam, faLightbulb, faFlag, faSquareCheck, faCheckSquare, faCircleDot, faDotCircle, faFaceDizzy, faDizzy, faFutbol, faFutbolBall, faSoccerBall, faPenToSquare, faEdit, faHourglassHalf, faHourglass2, faEyeSlash, faHand, faHandPaper, faHandSpock, faFaceKiss, faKiss, faFaceGrinTongue, faGrinTongue, faChessBishop, faFaceGrinWink, faGrinWink, faFaceGrinWide, faGrinAlt, faFaceFrownOpen, faFrownOpen, faHandPointUp, faBookmark, faHandPointDown, faFolder, faFolderBlank, faUser, faSquareCaretLeft, faCaretSquareLeft, faStar, faChessKnight, faFaceLaughSquint, faLaughSquint, faFaceLaugh, faLaugh, faFolderOpen, faClipboard, faChessQueen, faHandBackFist, faHandRock, faSquareCaretUp, faCaretSquareUp, faChartBar, faBarChart, faWindowRestore, faSquarePlus, faPlusSquare, faImage, faFolderClosed, faLemon, faHandshake, faGem, faCirclePlay, faPlayCircle, faCircleCheck, faCheckCircle, faCircleStop, faStopCircle, faIdBadge, faFaceLaughBeam, faLaughBeam, faRegistered, faAddressCard, faContactCard, faVcard, faFaceTired, faTired, faFontAwesome, faFontAwesomeFlag, faFontAwesomeLogoFull, faFaceSmileWink, faSmileWink, faFileWord, faFilePowerpoint, faEnvelopeOpen, faFileZipper, faFileArchive, faSquare, faSnowflake, faNewspaper, faFaceKissWinkHeart, faKissWinkHeart, faStarHalfStroke, faStarHalfAlt, faFileExcel, faFaceGrinBeam, faGrinBeam, faObjectUngroup, faCircleRight, faArrowAltCircleRight, faFaceRollingEyes, faMehRollingEyes, faObjectGroup, faHeart, faFaceSurprise, faSurprise, faCirclePause, faPauseCircle, faCircle, faCircleUp, faArrowAltCircleUp, faFileAudio, faFileImage, faCircleQuestion, faQuestionCircle, faFaceMehBlank, faMehBlank, faEye, faFaceSadCry, faSadCry, faFileCode, faWindowMaximize, faFaceFrown, faFrown, faFloppyDisk, faSave, faCommentDots, faCommenting, faFaceGrinSquint, faGrinSquint, faHandPointer, faHandScissors, faFaceGrinTears, faGrinTears, faCalendarXmark, faCalendarTimes, faFileVideo, faFilePdf, faComment, faEnvelope, faHourglass, faHourglassEmpty, faCalendarCheck, faHardDrive, faHdd, faFaceGrinSquintTears, faGrinSquintTears, faRectangleList, faListAlt, faCalendarPlus, faCircleLeft, faArrowAltCircleLeft, faMoneyBill1, faMoneyBillAlt, faClock, faClockFour, faKeyboard, faClosedCaptioning, faImages, faFaceGrin, faGrin, faFaceMeh, faMeh, faIdCard, faDriversLicense, faSun, faFaceLaughWink, faLaughWink, faCircleDown, faArrowAltCircleDown, faThumbsDown, faChessPawn, faCreditCard, faCreditCardAlt, faBell, faFile, faHospital, faHospitalAlt, faHospitalWide, faChessRook, faStarHalf, faChessKing, faCircleUser, faUserCircle, faCopy, faShareFromSquare, faShareSquare, faCopyright, faMap, faBellSlash, faHandLizard, faFaceSmile, faSmile, faHandPeace, faFaceGrinHearts, faGrinHearts, faBuilding, faFaceGrinBeamSweat, faGrinBeamSweat, faMoon, faCalendar, faFaceGrinTongueWink, faGrinTongueWink, faClone, faFaceAngry, faAngry, faRectangleXmark, faRectangleTimes, faTimesRectangle, faWindowClose, faPaperPlane, faLifeRing, faFaceGrimace, faGrimace, faCalendarMinus, faCircleXmark, faTimesCircle, faXmarkCircle, faThumbsUp, faWindowMinimize, faSquareFull, faNoteSticky, faStickyNote, faFaceSadTear, faSadTear, faHandPointLeft };\n", "/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\nconst prefix = \"fab\";\nconst faMonero = {\n  prefix: 'fab',\n  iconName: 'monero',\n  icon: [496, 512, [], \"f3d0\", \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"]\n};\nconst faHooli = {\n  prefix: 'fab',\n  iconName: 'hooli',\n  icon: [640, 512, [], \"f427\", \"M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"]\n};\nconst faYelp = {\n  prefix: 'fab',\n  iconName: 'yelp',\n  icon: [384, 512, [], \"f1e9\", \"M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z\"]\n};\nconst faCcVisa = {\n  prefix: 'fab',\n  iconName: 'cc-visa',\n  icon: [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"]\n};\nconst faLastfm = {\n  prefix: 'fab',\n  iconName: 'lastfm',\n  icon: [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"]\n};\nconst faShopware = {\n  prefix: 'fab',\n  iconName: 'shopware',\n  icon: [512, 512, [], \"f5b5\", \"M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z\"]\n};\nconst faCreativeCommonsNc = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc',\n  icon: [496, 512, [], \"f4e8\", \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"]\n};\nconst faAws = {\n  prefix: 'fab',\n  iconName: 'aws',\n  icon: [640, 512, [], \"f375\", \"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"]\n};\nconst faRedhat = {\n  prefix: 'fab',\n  iconName: 'redhat',\n  icon: [512, 512, [], \"f7bc\", \"M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24\"]\n};\nconst faYoast = {\n  prefix: 'fab',\n  iconName: 'yoast',\n  icon: [448, 512, [], \"f2b1\", \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"]\n};\nconst faCloudflare = {\n  prefix: 'fab',\n  iconName: 'cloudflare',\n  icon: [640, 512, [], \"e07d\", \"M407.906,319.913l-230.8-2.928a4.58,4.58,0,0,1-3.632-1.926,4.648,4.648,0,0,1-.494-4.147,6.143,6.143,0,0,1,5.361-4.076L411.281,303.9c27.631-1.26,57.546-23.574,68.022-50.784l13.286-34.542a7.944,7.944,0,0,0,.524-2.936,7.735,7.735,0,0,0-.164-1.631A151.91,151.91,0,0,0,201.257,198.4,68.12,68.12,0,0,0,94.2,269.59C41.924,271.106,0,313.728,0,366.12a96.054,96.054,0,0,0,1.029,13.958,4.508,4.508,0,0,0,4.445,3.871l426.1.051c.043,0,.08-.019.122-.02a5.606,5.606,0,0,0,5.271-4l3.273-11.265c3.9-13.4,2.448-25.8-4.1-34.9C430.124,325.423,420.09,320.487,407.906,319.913ZM513.856,221.1c-2.141,0-4.271.062-6.391.164a3.771,3.771,0,0,0-3.324,2.653l-9.077,31.193c-3.9,13.4-2.449,25.786,4.1,34.89,6.02,8.4,16.054,13.323,28.238,13.9l49.2,2.939a4.491,4.491,0,0,1,3.51,1.894,4.64,4.64,0,0,1,.514,4.169,6.153,6.153,0,0,1-5.351,4.075l-51.125,2.939c-27.754,1.27-57.669,23.574-68.145,50.784l-3.695,9.606a2.716,2.716,0,0,0,2.427,3.68c.046,0,.088.017.136.017h175.91a4.69,4.69,0,0,0,4.539-3.37,124.807,124.807,0,0,0,4.682-34C640,277.3,583.524,221.1,513.856,221.1Z\"]\n};\nconst faUps = {\n  prefix: 'fab',\n  iconName: 'ups',\n  icon: [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"]\n};\nconst faPixiv = {\n  prefix: 'fab',\n  iconName: 'pixiv',\n  icon: [448, 512, [], \"e640\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm171.5 84c41 0 76.3 12.9 101.4 35.2l0 0c25.2 22.2 39.8 54.1 39.8 88.8c.1 35.3-16.6 66.3-42.4 87c-25.9 20.8-60.6 32.4-98.8 32.4c-43.5 0-83.8-16.1-83.8-16.1v51.8c7.4 2.2 19.7 7 11.9 14.8H104.8c-7.7-7.8 3.6-12.4 12.1-14.8V175.5C97.1 190.9 87 204.3 81.8 214.2c6 19.4-5.3 18.5-5.3 18.5L56 199.7s72.7-83.7 179.5-83.7zm-3.6 222.9c30 0 56-11.3 73.9-29.2c17.9-18.1 27.9-41.6 28-70.2c-.1-29.3-9.5-54.6-26.7-73.6c-17.2-18.9-42.7-31.3-75.2-31.4c-26.7-.1-59.8 9-80.2 23.7V323.1c18.6 9.3 46.8 15.9 80.2 15.8z\"]\n};\nconst faWpexplorer = {\n  prefix: 'fab',\n  iconName: 'wpexplorer',\n  icon: [512, 512, [], \"f2de\", \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"]\n};\nconst faDyalog = {\n  prefix: 'fab',\n  iconName: 'dyalog',\n  icon: [416, 512, [], \"f399\", \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"]\n};\nconst faBity = {\n  prefix: 'fab',\n  iconName: 'bity',\n  icon: [496, 512, [], \"f37a\", \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"]\n};\nconst faStackpath = {\n  prefix: 'fab',\n  iconName: 'stackpath',\n  icon: [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z\"]\n};\nconst faBuysellads = {\n  prefix: 'fab',\n  iconName: 'buysellads',\n  icon: [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"]\n};\nconst faFirstOrder = {\n  prefix: 'fab',\n  iconName: 'first-order',\n  icon: [448, 512, [], \"f2b0\", \"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"]\n};\nconst faModx = {\n  prefix: 'fab',\n  iconName: 'modx',\n  icon: [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"]\n};\nconst faGuilded = {\n  prefix: 'fab',\n  iconName: 'guilded',\n  icon: [448, 512, [], \"e07e\", \"M443.427,64H4.571c0,103.26,22.192,180.06,43.418,222.358C112.046,414.135,224,448,225.256,448a312.824,312.824,0,0,0,140.55-103.477c25.907-33.923,53.1-87.19,65.916-145.761H171.833c4.14,36.429,22.177,67.946,45.1,86.944h88.589c-17.012,28.213-48.186,54.4-80.456,69.482-31.232-13.259-69.09-46.544-96.548-98.362-26.726-53.833-27.092-105.883-27.092-105.883H437.573A625.91,625.91,0,0,0,443.427,64Z\"]\n};\nconst faVnv = {\n  prefix: 'fab',\n  iconName: 'vnv',\n  icon: [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"]\n};\nconst faSquareJs = {\n  prefix: 'fab',\n  iconName: 'square-js',\n  icon: [448, 512, [\"js-square\"], \"f3b9\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z\"]\n};\nconst faJsSquare = faSquareJs;\nconst faMicrosoft = {\n  prefix: 'fab',\n  iconName: 'microsoft',\n  icon: [448, 512, [], \"f3ca\", \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"]\n};\nconst faQq = {\n  prefix: 'fab',\n  iconName: 'qq',\n  icon: [448, 512, [], \"f1d6\", \"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\"]\n};\nconst faOrcid = {\n  prefix: 'fab',\n  iconName: 'orcid',\n  icon: [512, 512, [], \"f8d2\", \"M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z\"]\n};\nconst faJava = {\n  prefix: 'fab',\n  iconName: 'java',\n  icon: [384, 512, [], \"f4e4\", \"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z\"]\n};\nconst faInvision = {\n  prefix: 'fab',\n  iconName: 'invision',\n  icon: [448, 512, [], \"f7b0\", \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"]\n};\nconst faCreativeCommonsPdAlt = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd-alt',\n  icon: [496, 512, [], \"f4ed\", \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z\"]\n};\nconst faCentercode = {\n  prefix: 'fab',\n  iconName: 'centercode',\n  icon: [512, 512, [], \"f380\", \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"]\n};\nconst faGlideG = {\n  prefix: 'fab',\n  iconName: 'glide-g',\n  icon: [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"]\n};\nconst faDrupal = {\n  prefix: 'fab',\n  iconName: 'drupal',\n  icon: [448, 512, [], \"f1a9\", \"M303.973,108.136C268.2,72.459,234.187,38.35,224.047,0c-9.957,38.35-44.25,72.459-80.019,108.136C90.467,161.7,29.716,222.356,29.716,313.436c-2.337,107.3,82.752,196.18,190.053,198.517S415.948,429.2,418.285,321.9q.091-4.231,0-8.464C418.285,222.356,357.534,161.7,303.973,108.136Zm-174.326,223a130.282,130.282,0,0,0-15.211,24.153,4.978,4.978,0,0,1-3.319,2.766h-1.659c-4.333,0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.247-25.72-1.475-62.318-1.475-62.318h0a160.585,160.585,0,0,1,23.231-49.873A290.8,290.8,0,0,1,138.5,201.613l9.219,9.219,43.512,44.434a4.979,4.979,0,0,1,0,6.638L145.78,312.33h0Zm96.612,127.311a67.2,67.2,0,0,1-49.781-111.915c14.2-16.871,31.528-33.464,50.334-55.313,22.309,23.785,36.875,40.1,51.164,57.986a28.413,28.413,0,0,1,2.95,4.425,65.905,65.905,0,0,1,11.984,37.981,66.651,66.651,0,0,1-66.466,66.836ZM352.371,351.6h0a7.743,7.743,0,0,1-6.176,5.347H344.9a11.249,11.249,0,0,1-6.269-5.07h0a348.21,348.21,0,0,0-39.456-48.952L281.387,284.49,222.3,223.185a497.888,497.888,0,0,1-35.4-36.322,12.033,12.033,0,0,0-.922-1.382,35.4,35.4,0,0,1-4.7-9.219V174.51a31.346,31.346,0,0,1,9.218-27.656c11.432-11.431,22.955-22.954,33.833-34.939,11.984,13.275,24.8,26,37.428,38.627h0a530.991,530.991,0,0,1,69.6,79.1,147.494,147.494,0,0,1,27.011,83.8A134.109,134.109,0,0,1,352.371,351.6Z\"]\n};\nconst faJxl = {\n  prefix: 'fab',\n  iconName: 'jxl',\n  icon: [448, 512, [], \"e67b\", \"M412.2 32H35.8C16 32 0 48 0 67.8V444.2C0 464 16 480 35.8 480H412.2c19.8 0 35.8-16 35.8-35.8V67.8C448 48 432 32 412.2 32zM378.6 333.7c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6zm0-113.9c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6zm0-113.9c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6z\"]\n};\nconst faDartLang = {\n  prefix: 'fab',\n  iconName: 'dart-lang',\n  icon: [512, 512, [], \"e693\", \"M378.6 78.9c-2.8-.1-5.6-.2-8.5-.2l-264.1 0 143.2-72C256.6 2.3 268 0 279.6 0c13.5 0 29.4 9.2 37 16.8l62 62zM107.3 96.5l262.8 0c16 0 25.4 1.4 35.4 9.3L512 212.2 512 421l-79.3 .7L107.3 96.5zM96.5 373l0-262.2L420.3 434.6l.7 77.4-212.2 0-98.1-98.2 0 0C99.4 402.5 96.5 398.5 96.5 373zM78.7 105.3l0 267.7c0 3.3 .1 6.3 .2 9.1l-62-62C6.5 309.3 0 294.3 0 279.6c0-6.8 3.9-17.5 6.7-23.6l72-150.7z\"]\n};\nconst faHireAHelper = {\n  prefix: 'fab',\n  iconName: 'hire-a-helper',\n  icon: [512, 512, [], \"f3b0\", \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"]\n};\nconst faCreativeCommonsBy = {\n  prefix: 'fab',\n  iconName: 'creative-commons-by',\n  icon: [496, 512, [], \"f4e7\", \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\"]\n};\nconst faUnity = {\n  prefix: 'fab',\n  iconName: 'unity',\n  icon: [448, 512, [], \"e049\", \"M243.583 91.6027L323.695 138.384C326.575 140.026 326.68 144.583 323.695 146.225L228.503 201.854C225.623 203.55 222.22 203.444 219.549 201.854L124.357 146.225C121.425 144.636 121.373 139.973 124.357 138.384L204.417 91.6027V0L0 119.417V358.252L78.3843 312.477V218.914C78.3319 215.576 82.2066 213.192 85.0865 214.993L180.279 270.622C183.159 272.318 184.782 275.338 184.782 278.464V389.669C184.834 393.007 180.959 395.391 178.079 393.589L97.9673 346.808L19.583 392.583L224 512L428.417 392.583L350.033 346.808L269.921 393.589C267.093 395.338 263.114 393.06 263.218 389.669V278.464C263.218 275.126 265.051 272.159 267.721 270.622L362.914 214.993C365.741 213.245 369.72 215.47 369.616 218.914V312.477L448 358.252V119.417L243.583 0V91.6027Z\"]\n};\nconst faWhmcs = {\n  prefix: 'fab',\n  iconName: 'whmcs',\n  icon: [448, 512, [], \"f40d\", \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"]\n};\nconst faRocketchat = {\n  prefix: 'fab',\n  iconName: 'rocketchat',\n  icon: [576, 512, [], \"f3e8\", \"M284.046,224.8a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,284.046,224.8Zm-110.45,0a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,173.6,224.8Zm220.923,0a34.114,34.114,0,1,0,34.317,34.113A34.215,34.215,0,0,0,394.519,224.8Zm153.807-55.319c-15.535-24.172-37.31-45.57-64.681-63.618-52.886-34.817-122.374-54-195.666-54a405.975,405.975,0,0,0-72.032,6.357,238.524,238.524,0,0,0-49.51-36.588C99.684-11.7,40.859.711,11.135,11.421A14.291,14.291,0,0,0,5.58,34.782C26.542,56.458,61.222,99.3,52.7,138.252c-33.142,33.9-51.112,74.776-51.112,117.337,0,43.372,17.97,84.248,51.112,118.148,8.526,38.956-26.154,81.816-47.116,103.491a14.284,14.284,0,0,0,5.555,23.34c29.724,10.709,88.549,23.147,155.324-10.2a238.679,238.679,0,0,0,49.51-36.589A405.972,405.972,0,0,0,288,460.14c73.313,0,142.8-19.159,195.667-53.975,27.371-18.049,49.145-39.426,64.679-63.619,17.309-26.923,26.07-55.916,26.07-86.125C574.394,225.4,565.634,196.43,548.326,169.485ZM284.987,409.9a345.65,345.65,0,0,1-89.446-11.5l-20.129,19.393a184.366,184.366,0,0,1-37.138,27.585,145.767,145.767,0,0,1-52.522,14.87c.983-1.771,1.881-3.563,2.842-5.356q30.258-55.68,16.325-100.078c-32.992-25.962-52.778-59.2-52.778-95.4,0-83.1,104.254-150.469,232.846-150.469s232.867,67.373,232.867,150.469C517.854,342.525,413.6,409.9,284.987,409.9Z\"]\n};\nconst faVk = {\n  prefix: 'fab',\n  iconName: 'vk',\n  icon: [448, 512, [], \"f189\", \"M31.4907 63.4907C0 94.9813 0 145.671 0 247.04V264.96C0 366.329 0 417.019 31.4907 448.509C62.9813 480 113.671 480 215.04 480H232.96C334.329 480 385.019 480 416.509 448.509C448 417.019 448 366.329 448 264.96V247.04C448 145.671 448 94.9813 416.509 63.4907C385.019 32 334.329 32 232.96 32H215.04C113.671 32 62.9813 32 31.4907 63.4907ZM75.6 168.267H126.747C128.427 253.76 166.133 289.973 196 297.44V168.267H244.16V242C273.653 238.827 304.64 205.227 315.093 168.267H363.253C359.313 187.435 351.46 205.583 340.186 221.579C328.913 237.574 314.461 251.071 297.733 261.227C316.41 270.499 332.907 283.63 346.132 299.751C359.357 315.873 369.01 334.618 374.453 354.747H321.44C316.555 337.262 306.614 321.61 292.865 309.754C279.117 297.899 262.173 290.368 244.16 288.107V354.747H238.373C136.267 354.747 78.0267 284.747 75.6 168.267Z\"]\n};\nconst faUntappd = {\n  prefix: 'fab',\n  iconName: 'untappd',\n  icon: [640, 512, [], \"f405\", \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"]\n};\nconst faMailchimp = {\n  prefix: 'fab',\n  iconName: 'mailchimp',\n  icon: [448, 512, [], \"f59e\", \"M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z\"]\n};\nconst faCss3Alt = {\n  prefix: 'fab',\n  iconName: 'css3-alt',\n  icon: [384, 512, [], \"f38b\", \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"]\n};\nconst faSquareReddit = {\n  prefix: 'fab',\n  iconName: 'square-reddit',\n  icon: [448, 512, [\"reddit-square\"], \"f1a2\", \"M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32zM305.9 166.4c20.6 0 37.3-16.7 37.3-37.3s-16.7-37.3-37.3-37.3c-18 0-33.1 12.8-36.6 29.8c-30.2 3.2-53.8 28.8-53.8 59.9l0 .2c-32.8 1.4-62.8 10.7-86.6 25.5c-8.8-6.8-19.9-10.9-32-10.9c-28.9 0-52.3 23.4-52.3 52.3c0 21 12.3 39 30.1 47.4c1.7 60.7 67.9 109.6 149.3 109.6s147.6-48.9 149.3-109.7c17.7-8.4 29.9-26.4 29.9-47.3c0-28.9-23.4-52.3-52.3-52.3c-12 0-23 4-31.9 10.8c-24-14.9-54.3-24.2-87.5-25.4l0-.1c0-22.2 16.5-40.7 37.9-43.7l0 0c3.9 16.5 18.7 28.7 36.3 28.7zM155 248.1c14.6 0 25.8 15.4 25 34.4s-11.8 25.9-26.5 25.9s-27.5-7.7-26.6-26.7s13.5-33.5 28.1-33.5zm166.4 33.5c.9 19-12 26.7-26.6 26.7s-25.6-6.9-26.5-25.9c-.9-19 10.3-34.4 25-34.4s27.3 14.6 28.1 33.5zm-42.1 49.6c-9 21.5-30.3 36.7-55.1 36.7s-46.1-15.1-55.1-36.7c-1.1-2.6 .7-5.4 3.4-5.7c16.1-1.6 33.5-2.5 51.7-2.5s35.6 .9 51.7 2.5c2.7 .3 4.5 3.1 3.4 5.7z\"]\n};\nconst faRedditSquare = faSquareReddit;\nconst faVimeoV = {\n  prefix: 'fab',\n  iconName: 'vimeo-v',\n  icon: [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"]\n};\nconst faContao = {\n  prefix: 'fab',\n  iconName: 'contao',\n  icon: [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"]\n};\nconst faSquareFontAwesome = {\n  prefix: 'fab',\n  iconName: 'square-font-awesome',\n  icon: [448, 512, [], \"e5ad\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm90 122c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2c0 1.8-.4 3.7-1.1 5.4L312 264l30.9 69.4c.7 1.7 1.1 3.5 1.1 5.4c0 7.3-5.9 13.2-13.2 13.2L144 352l0 32-32 0 0-32 0-176 0-1.5c-6.1-4.8-10-12.2-10-20.5c0-14.4 11.6-26 26-26s26 11.6 26 26z\"]\n};\nconst faDeskpro = {\n  prefix: 'fab',\n  iconName: 'deskpro',\n  icon: [480, 512, [], \"f38f\", \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"]\n};\nconst faBrave = {\n  prefix: 'fab',\n  iconName: 'brave',\n  icon: [448, 512, [], \"e63c\", \"M145.5 0H224h78.5l44.7 50.8s39.3-10.9 57.8 7.6s33.8 34.9 33.8 34.9l-12 29.5 15.3 43.7s-44.9 170.2-50.1 191c-10.4 40.9-17.4 56.8-46.9 77.5s-82.9 56.8-91.6 62.2c-1.9 1.2-3.9 2.5-5.9 3.9c-7.5 5.1-15.8 10.8-23.5 10.8l0 0 0 0c-7.7 0-16.1-5.7-23.5-10.8c-2-1.4-4-2.8-5.9-3.9c-8.7-5.5-62.1-41.5-91.6-62.2s-36.5-36.6-46.9-77.5c-5.3-20.8-50.1-191-50.1-191l15.3-43.7L9.2 93.3s15.3-16.4 33.8-34.9s57.8-7.6 57.8-7.6L145.5 0zM224 407.6l0 0c3.7 0 8.9-4.7 13-8.4c.6-.5 1.2-1.1 1.7-1.5c4.2-3.7 47.8-37.5 51-39.8s5.4-6.5 1.9-8.7c-2.8-1.7-10-5.5-20.3-10.8c-3-1.6-6.3-3.2-9.7-5c-15.4-8-34.5-14.7-37.5-14.7l0 0 0 0c-3 0-22.1 6.8-37.5 14.7c-3.5 1.8-6.7 3.5-9.7 5c-10.3 5.3-17.6 9.1-20.3 10.8c-3.6 2.2-1.4 6.4 1.9 8.7s46.8 36.1 51 39.8c.5 .5 1.1 1 1.7 1.5c4.1 3.7 9.3 8.4 13 8.4l0 0zm0-165.7l0 0c4.7 0 17.6-3 26.4-5l0 0 2-.5c7.8-1.8 7.3-6.3 6.4-13c-.1-.8-.2-1.6-.3-2.4c-.6-6.1-5.8-33.1-9.1-50.3c-1.1-5.8-2-10.5-2.4-12.9c-1.5-8.1-.6-9.4 .7-11.3c.2-.3 .5-.7 .7-1.1c1.4-2.3 16-6.2 27.9-9.5l0 0c2.5-.7 4.8-1.3 6.9-1.9c10.6-3 32.4-.6 44.2 .6c1.8 .2 3.4 .4 4.7 .5c9.6 .9 10.4 2.3 7.2 3.8c-2.3 1.1-16.2 6.3-28.7 10.9l0 0 0 0c-4.7 1.8-9.2 3.5-12.8 4.8c-1.5 .5-3 1.1-4.5 1.7c-12.5 4.6-27.2 10-28.9 19.4c-1.5 8.3 5.2 19.9 11.3 30.3l0 0c1.6 2.8 3.2 5.5 4.6 8.1c6.3 11.9 6.5 13.3 6.1 18.1c-.4 3.9-14.5 12.7-22.4 17.6l0 0c-1.8 1.1-3.3 2.1-4.2 2.7c-.8 .5-2.1 1.4-3.8 2.4c-8.6 5.2-26.3 16-26.3 22.5c0 7.8 24.6 28.1 32.4 33.2s28.9 16.1 37.9 17.8s23-8.5 31.2-23.8c7.7-14.4 1.7-28.5-3.2-40l-.9-2.2c-4.5-10.6 1.9-17 6.2-21.3l0 0c.5-.5 1-1 1.4-1.4L377.7 194c1.3-1.3 2.5-2.6 3.7-3.8l0 0c5.8-5.7 10.8-10.5 10.8-22.8c0-14.9-57.5-84.5-57.5-84.5s-48.5 9.3-55.1 9.3c-5.2 0-15.3-3.5-25.8-7.1l0 0c-2.7-.9-5.4-1.9-8-2.7C232.8 78.1 224 78 224 78l0 0 0 0s-8.7 0-21.8 4.4c-2.7 .9-5.4 1.8-8 2.7l0 0c-10.5 3.6-20.6 7.1-25.8 7.1c-6.5 0-55.1-9.3-55.1-9.3s-57.5 69.6-57.5 84.5c0 12.3 4.9 17.1 10.8 22.8l0 0c1.2 1.2 2.5 2.4 3.7 3.8l43.1 45.8c.4 .5 .9 .9 1.4 1.4l0 0c4.3 4.3 10.6 10.7 6.2 21.3l-.9 2.2c-4.9 11.5-11 25.6-3.2 40c8.2 15.3 22.2 25.5 31.2 23.8s30.1-12.7 37.9-17.8s32.4-25.4 32.4-33.2c0-6.5-17.7-17.3-26.3-22.5c-1.7-1-3.1-1.9-3.8-2.4c-.9-.6-2.4-1.5-4.2-2.7c-7.9-4.9-22-13.7-22.4-17.6c-.4-4.8-.3-6.2 6.1-18.1c1.3-2.5 2.9-5.3 4.6-8.1c6-10.4 12.8-22 11.3-30.3c-1.7-9.4-16.4-14.8-28.9-19.4c-1.6-.6-3.1-1.1-4.5-1.7c-3.6-1.4-8.1-3.1-12.8-4.8l-.1 0c-12.5-4.7-26.4-9.9-28.7-10.9c-3.2-1.5-2.3-2.8 7.2-3.8c1.3-.1 2.9-.3 4.7-.5c11.8-1.3 33.6-3.6 44.2-.6c2.1 .6 4.4 1.2 6.9 1.9c11.9 3.2 26.5 7.2 27.9 9.5c.2 .4 .5 .7 .7 1.1c1.3 1.9 2.2 3.2 .7 11.3c-.4 2.4-1.3 7.1-2.4 12.9c-3.3 17.2-8.5 44.2-9.1 50.3c-.1 .8-.2 1.7-.3 2.4c-.8 6.7-1.4 11.2 6.4 13l2 .5 0 0c8.8 2 21.8 5 26.4 5l0 0z\"]\n};\nconst faSistrix = {\n  prefix: 'fab',\n  iconName: 'sistrix',\n  icon: [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"]\n};\nconst faSquareInstagram = {\n  prefix: 'fab',\n  iconName: 'square-instagram',\n  icon: [448, 512, [\"instagram-square\"], \"e055\", \"M194.4 211.7a53.3 53.3 0 1 0 59.3 88.7 53.3 53.3 0 1 0 -59.3-88.7zm142.3-68.4c-5.2-5.2-11.5-9.3-18.4-12c-18.1-7.1-57.6-6.8-83.1-6.5c-4.1 0-7.9 .1-11.2 .1c-3.3 0-7.2 0-11.4-.1c-25.5-.3-64.8-.7-82.9 6.5c-6.9 2.7-13.1 6.8-18.4 12s-9.3 11.5-12 18.4c-7.1 18.1-6.7 57.7-6.5 83.2c0 4.1 .1 7.9 .1 11.1s0 7-.1 11.1c-.2 25.5-.6 65.1 6.5 83.2c2.7 6.9 6.8 13.1 12 18.4s11.5 9.3 18.4 12c18.1 7.1 57.6 6.8 83.1 6.5c4.1 0 7.9-.1 11.2-.1c3.3 0 7.2 0 11.4 .1c25.5 .3 64.8 .7 82.9-6.5c6.9-2.7 13.1-6.8 18.4-12s9.3-11.5 12-18.4c7.2-18 6.8-57.4 6.5-83c0-4.2-.1-8.1-.1-11.4s0-7.1 .1-11.4c.3-25.5 .7-64.9-6.5-83l0 0c-2.7-6.9-6.8-13.1-12-18.4zm-67.1 44.5A82 82 0 1 1 178.4 324.2a82 82 0 1 1 91.1-136.4zm29.2-1.3c-3.1-2.1-5.6-5.1-7.1-8.6s-1.8-7.3-1.1-11.1s2.6-7.1 5.2-9.8s6.1-4.5 9.8-5.2s7.6-.4 11.1 1.1s6.5 3.9 8.6 7s3.2 6.8 3.2 10.6c0 2.5-.5 5-1.4 7.3s-2.4 4.4-4.1 6.2s-3.9 3.2-6.2 4.2s-4.8 1.5-7.3 1.5l0 0c-3.8 0-7.5-1.1-10.6-3.2zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM357 389c-18.7 18.7-41.4 24.6-67 25.9c-26.4 1.5-105.6 1.5-132 0c-25.6-1.3-48.3-7.2-67-25.9s-24.6-41.4-25.8-67c-1.5-26.4-1.5-105.6 0-132c1.3-25.6 7.1-48.3 25.8-67s41.5-24.6 67-25.8c26.4-1.5 105.6-1.5 132 0c25.6 1.3 48.3 7.1 67 25.8s24.6 41.4 25.8 67c1.5 26.3 1.5 105.4 0 131.9c-1.3 25.6-7.1 48.3-25.8 67z\"]\n};\nconst faInstagramSquare = faSquareInstagram;\nconst faBattleNet = {\n  prefix: 'fab',\n  iconName: 'battle-net',\n  icon: [512, 512, [], \"f835\", \"M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8\"]\n};\nconst faTheRedYeti = {\n  prefix: 'fab',\n  iconName: 'the-red-yeti',\n  icon: [512, 512, [], \"f69d\", \"M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z\"]\n};\nconst faSquareHackerNews = {\n  prefix: 'fab',\n  iconName: 'square-hacker-news',\n  icon: [448, 512, [\"hacker-news-square\"], \"f3af\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM21 229.2c0 0 .1-.1 .1-.2s.1-.2 .2-.2c0 .1 0 .3-.1 .4H21zM239.2 384H207.8V281.3L128 128h37.3c41.5 77.7 48.1 95.8 54.1 112c1.6 4.3 3.1 8.5 5.2 13.6c3.2-7 5.1-11.9 7.1-17.3c5.9-15.3 12.8-33.2 53.5-108.3H320L239.2 283.1V384z\"]\n};\nconst faHackerNewsSquare = faSquareHackerNews;\nconst faEdge = {\n  prefix: 'fab',\n  iconName: 'edge',\n  icon: [512, 512, [], \"f282\", \"M120.1 37.44C161.1 12.23 207.7-.7753 255 .0016C423 .0016 512 123.8 512 219.5C511.9 252.2 499 283.4 476.1 306.7C453.2 329.9 422.1 343.2 389.4 343.7C314.2 343.7 297.9 320.6 297.9 311.7C297.9 307.9 299.1 305.5 302.7 302.3L303.7 301.1L304.1 299.5C314.6 288 320 273.3 320 257.9C320 179.2 237.8 115.2 136 115.2C98.46 114.9 61.46 124.1 28.48 142.1C55.48 84.58 111.2 44.5 119.8 38.28C120.6 37.73 120.1 37.44 120.1 37.44V37.44zM135.7 355.5C134.3 385.5 140.3 415.5 152.1 442.7C165.7 469.1 184.8 493.7 208.6 512C149.1 500.5 97.11 468.1 59.2 422.7C21.12 376.3 0 318.4 0 257.9C0 206.7 62.4 163.5 136 163.5C172.6 162.9 208.4 174.4 237.8 196.2L234.2 197.4C182.7 215 135.7 288.1 135.7 355.5V355.5zM469.8 400L469.1 400.1C457.3 418.9 443.2 435.2 426.9 449.6C396.1 477.6 358.8 495.1 318.1 499.5C299.5 499.8 281.3 496.3 264.3 488.1C238.7 477.8 217.2 458.1 202.7 435.1C188.3 411.2 181.6 383.4 183.7 355.5C183.1 335.4 189.1 315.2 198.7 297.3C212.6 330.4 236.2 358.6 266.3 378.1C296.4 397.6 331.8 407.6 367.7 406.7C398.7 407 429.8 400 457.9 386.2L459.8 385.3C463.7 383 467.5 381.4 471.4 385.3C475.9 390.2 473.2 394.5 470.2 399.3C470 399.5 469.9 399.8 469.8 400V400z\"]\n};\nconst faThreads = {\n  prefix: 'fab',\n  iconName: 'threads',\n  icon: [448, 512, [], \"e618\", \"M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z\"]\n};\nconst faNapster = {\n  prefix: 'fab',\n  iconName: 'napster',\n  icon: [496, 512, [], \"f3d2\", \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"]\n};\nconst faSquareSnapchat = {\n  prefix: 'fab',\n  iconName: 'square-snapchat',\n  icon: [448, 512, [\"snapchat-square\"], \"f2ad\", \"M384,32H64A64,64,0,0,0,0,96V416a64,64,0,0,0,64,64H384a64,64,0,0,0,64-64V96A64,64,0,0,0,384,32Zm-3.907,319.309-.083.1a32.364,32.364,0,0,1-8.717,6.823,90.26,90.26,0,0,1-20.586,8.2,12.694,12.694,0,0,0-3.852,1.76c-2.158,1.909-2.1,4.64-4.4,8.55a23.137,23.137,0,0,1-6.84,7.471c-6.707,4.632-14.244,4.923-22.23,5.23-7.214.274-15.39.581-24.729,3.669-3.761,1.245-7.753,3.694-12.377,6.533-11.265,6.9-26.68,16.353-52.3,16.353s-40.925-9.4-52.106-16.279c-4.657-2.888-8.675-5.362-12.543-6.64-9.339-3.08-17.516-3.4-24.729-3.67-7.986-.307-15.523-.6-22.231-5.229a23.085,23.085,0,0,1-6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.428,13.428,0,0,0-4.1-1.834,89.986,89.986,0,0,1-20.313-8.127,32.905,32.905,0,0,1-8.3-6.284c-6.583-6.757-8.276-14.776-5.686-21.824,3.436-9.338,11.571-12.111,19.4-16.262,14.776-8.027,26.348-18.055,34.433-29.884a68.236,68.236,0,0,0,5.985-10.567c.789-2.158.772-3.329.241-4.416a7.386,7.386,0,0,0-2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.245a28.4,28.4,0,0,1-1.369-23.584c4.134-10.924,14.469-17.706,26.978-17.706a37.141,37.141,0,0,1,7.845.83c.689.15,1.37.307,2.042.482-.108-7.43.058-15.357.722-23.119,2.358-27.261,11.912-41.589,21.874-52.994a86.836,86.836,0,0,1,22.28-17.931C188.254,100.383,205.312,96,224,96s35.828,4.383,50.944,13.016a87.169,87.169,0,0,1,22.239,17.9c9.961,11.406,19.516,25.709,21.874,52.995a231.194,231.194,0,0,1,.713,23.118c.673-.174,1.362-.332,2.051-.481a37.131,37.131,0,0,1,7.844-.83c12.5,0,22.82,6.782,26.971,17.706a28.37,28.37,0,0,1-1.4,23.559c-2.74,5.2-7.123,9.861-13.39,14.244-1.668,1.187-4.258,2.864-7.529,4.981-1.835,1.187-4.541,2.947-7.164,4.682a6.856,6.856,0,0,0-1.951,2.034c-.506,1.046-.539,2.191.166,4.208a69.015,69.015,0,0,0,6.085,10.792c8.268,12.1,20.188,22.313,35.454,30.407,1.486.772,2.98,1.5,4.441,2.258.722.332,1.569.763,2.491,1.3,4.9,2.723,9.2,6.01,11.455,12.153C387.821,336.915,386.269,344.7,380.093,351.309Zm-16.719-18.461c-50.313-24.314-58.332-61.918-58.689-64.749-.431-3.379-.921-6.035,2.806-9.472,3.594-3.328,19.541-13.19,23.965-16.278,7.33-5.114,10.534-10.219,8.16-16.495-1.66-4.316-5.686-5.976-9.961-5.976a18.5,18.5,0,0,0-3.993.448c-8.035,1.743-15.838,5.769-20.354,6.857a7.1,7.1,0,0,1-1.66.224c-2.408,0-3.279-1.071-3.088-3.968.564-8.783,1.759-25.925.373-41.937-1.884-22.032-8.99-32.948-17.432-42.6-4.051-4.624-23.135-24.654-59.536-24.654S168.53,134.359,164.479,139c-8.434,9.654-15.531,20.57-17.432,42.6-1.386,16.013-.141,33.147.373,41.937.166,2.756-.68,3.968-3.088,3.968a7.1,7.1,0,0,1-1.66-.224c-4.507-1.087-12.31-5.113-20.346-6.856a18.494,18.494,0,0,0-3.993-.449c-4.25,0-8.3,1.636-9.961,5.977-2.374,6.276.847,11.381,8.168,16.494,4.425,3.088,20.371,12.958,23.966,16.279,3.719,3.437,3.237,6.093,2.805,9.471-.356,2.79-8.384,40.394-58.689,64.749-2.946,1.428-7.96,4.45.88,9.331,13.88,7.628,23.111,6.807,30.3,11.43,6.093,3.927,2.5,12.394,6.923,15.449,5.454,3.76,21.583-.266,42.335,6.6,17.433,5.744,28.116,22.015,58.963,22.015s41.788-16.3,58.938-21.973c20.795-6.865,36.89-2.839,42.336-6.6,4.433-3.055.822-11.522,6.923-15.448,7.181-4.624,16.411-3.8,30.3-11.472C371.36,337.355,366.346,334.333,363.374,332.848Z\"]\n};\nconst faSnapchatSquare = faSquareSnapchat;\nconst faGooglePlusG = {\n  prefix: 'fab',\n  iconName: 'google-plus-g',\n  icon: [640, 512, [], \"f0d5\", \"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\"]\n};\nconst faArtstation = {\n  prefix: 'fab',\n  iconName: 'artstation',\n  icon: [512, 512, [], \"f77a\", \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"]\n};\nconst faMarkdown = {\n  prefix: 'fab',\n  iconName: 'markdown',\n  icon: [640, 512, [], \"f60f\", \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"]\n};\nconst faSourcetree = {\n  prefix: 'fab',\n  iconName: 'sourcetree',\n  icon: [448, 512, [], \"f7d3\", \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"]\n};\nconst faGooglePlus = {\n  prefix: 'fab',\n  iconName: 'google-plus',\n  icon: [512, 512, [], \"f2b3\", \"M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z\"]\n};\nconst faDiaspora = {\n  prefix: 'fab',\n  iconName: 'diaspora',\n  icon: [512, 512, [], \"f791\", \"M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"]\n};\nconst faFoursquare = {\n  prefix: 'fab',\n  iconName: 'foursquare',\n  icon: [368, 512, [], \"f180\", \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"]\n};\nconst faStackOverflow = {\n  prefix: 'fab',\n  iconName: 'stack-overflow',\n  icon: [384, 512, [], \"f16c\", \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"]\n};\nconst faGithubAlt = {\n  prefix: 'fab',\n  iconName: 'github-alt',\n  icon: [480, 512, [], \"f113\", \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"]\n};\nconst faPhoenixSquadron = {\n  prefix: 'fab',\n  iconName: 'phoenix-squadron',\n  icon: [512, 512, [], \"f511\", \"M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"]\n};\nconst faPagelines = {\n  prefix: 'fab',\n  iconName: 'pagelines',\n  icon: [384, 512, [], \"f18c\", \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"]\n};\nconst faAlgolia = {\n  prefix: 'fab',\n  iconName: 'algolia',\n  icon: [512, 512, [], \"f36c\", \"M256 0C116.1 0 2 112.7 0 252.1C-2 393.6 112.9 510.8 254.5 511.6c43.7 .3 85.9-10.4 123.3-30.7c3.6-2 4.2-7 1.1-9.7l-24-21.2c-4.9-4.3-11.8-5.5-17.8-3c-26.1 11.1-54.5 16.8-83.7 16.4C139 461.9 46.5 366.8 48.3 252.4C50.1 139.5 142.6 48.2 256 48.2H463.7V417.2L345.9 312.5c-3.8-3.4-9.7-2.7-12.7 1.3c-18.9 25-49.7 40.6-83.9 38.2c-47.5-3.3-85.9-41.5-89.5-88.9c-4.2-56.6 40.6-103.9 96.3-103.9c50.4 0 91.9 38.8 96.2 88c.4 4.4 2.4 8.5 5.7 11.4l30.7 27.2c3.5 3.1 9 1.2 9.9-3.4c2.2-11.8 3-24.2 2.1-36.8c-4.9-72-63.3-130-135.4-134.4c-82.7-5.1-151.8 59.5-154 140.6c-2.1 78.9 62.6 147 141.6 148.7c33 .7 63.6-9.6 88.3-27.6L495 509.4c6.6 5.8 17 1.2 17-7.7V9.7c0-5.4-4.4-9.7-9.7-9.7H256z\"]\n};\nconst faRedRiver = {\n  prefix: 'fab',\n  iconName: 'red-river',\n  icon: [448, 512, [], \"f3e3\", \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"]\n};\nconst faCreativeCommonsSa = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sa',\n  icon: [496, 512, [], \"f4ef\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"]\n};\nconst faSafari = {\n  prefix: 'fab',\n  iconName: 'safari',\n  icon: [512, 512, [], \"f267\", \"M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z\"]\n};\nconst faGoogle = {\n  prefix: 'fab',\n  iconName: 'google',\n  icon: [488, 512, [], \"f1a0\", \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"]\n};\nconst faSquareFontAwesomeStroke = {\n  prefix: 'fab',\n  iconName: 'square-font-awesome-stroke',\n  icon: [448, 512, [\"font-awesome-alt\"], \"f35c\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm154 58c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2c0 1.8-.4 3.7-1.1 5.4L312 264l30.9 69.4c.8 1.7 1.1 3.5 1.1 5.4c0 7.3-5.9 13.2-13.2 13.2L144 352l0 32-32 0 0-32 0-176 0-1.5c-6.1-4.8-10-12.2-10-20.5c0-14.4 11.6-26 26-26s26 11.6 26 26z\"]\n};\nconst faFontAwesomeAlt = faSquareFontAwesomeStroke;\nconst faAtlassian = {\n  prefix: 'fab',\n  iconName: 'atlassian',\n  icon: [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z\"]\n};\nconst faLinkedinIn = {\n  prefix: 'fab',\n  iconName: 'linkedin-in',\n  icon: [448, 512, [], \"f0e1\", \"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"]\n};\nconst faDigitalOcean = {\n  prefix: 'fab',\n  iconName: 'digital-ocean',\n  icon: [512, 512, [], \"f391\", \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"]\n};\nconst faNimblr = {\n  prefix: 'fab',\n  iconName: 'nimblr',\n  icon: [384, 512, [], \"f5a8\", \"M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z\"]\n};\nconst faChromecast = {\n  prefix: 'fab',\n  iconName: 'chromecast',\n  icon: [512, 512, [], \"f838\", \"M447.8,64H64c-23.6,0-42.7,19.1-42.7,42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6,0,42.7-19.1,42.7-42.7V106.7 C490.7,83.1,471.4,64,447.8,64z M21.3,383.6L21.3,383.6l0,63.9h63.9C85.2,412.2,56.6,383.6,21.3,383.6L21.3,383.6z M21.3,298.6V341 c58.9,0,106.6,48.1,106.6,107h42.7C170.7,365.6,103.7,298.7,21.3,298.6z M213.4,448h42.7c-0.5-129.5-105.3-234.3-234.8-234.6l0,42.4 C127.3,255.6,213.3,342,213.4,448z\"]\n};\nconst faEvernote = {\n  prefix: 'fab',\n  iconName: 'evernote',\n  icon: [384, 512, [], \"f839\", \"M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"]\n};\nconst faHackerNews = {\n  prefix: 'fab',\n  iconName: 'hacker-news',\n  icon: [448, 512, [], \"f1d4\", \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"]\n};\nconst faCreativeCommonsSampling = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling',\n  icon: [496, 512, [], \"f4f0\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"]\n};\nconst faAdversal = {\n  prefix: 'fab',\n  iconName: 'adversal',\n  icon: [512, 512, [], \"f36a\", \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"]\n};\nconst faCreativeCommons = {\n  prefix: 'fab',\n  iconName: 'creative-commons',\n  icon: [496, 512, [], \"f25e\", \"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\"]\n};\nconst faWatchmanMonitoring = {\n  prefix: 'fab',\n  iconName: 'watchman-monitoring',\n  icon: [512, 512, [], \"e087\", \"M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16ZM121.69,429.122C70.056,388.972,36.741,326.322,36.741,256a218.519,218.519,0,0,1,9.587-64.122l102.9-17.895-.121,10.967-13.943,2.013s-.144,12.5-.144,19.549a12.778,12.778,0,0,0,4.887,10.349l9.468,7.4Zm105.692-283.27,8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46,0,0,0-32.342,30.474-39.529,34.5-7.078,3.964-.144,9.344-.144,9.344l8.481,7.618-.048,4.369L75.982,131.045c39.644-56.938,105.532-94.3,180.018-94.3A218.754,218.754,0,0,1,420.934,111.77l-193.512,37.7Zm34.063,329.269-33.9-250.857,9.467-7.4a12.778,12.778,0,0,0,4.888-10.349c0-7.044-.144-19.549-.144-19.549l-13.943-2.013-.116-10.474,241.711,31.391A218.872,218.872,0,0,1,475.259,256C475.259,375.074,379.831,472.212,261.445,475.121Z\"]\n};\nconst faFonticons = {\n  prefix: 'fab',\n  iconName: 'fonticons',\n  icon: [448, 512, [], \"f280\", \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"]\n};\nconst faWeixin = {\n  prefix: 'fab',\n  iconName: 'weixin',\n  icon: [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\"]\n};\nconst faShirtsinbulk = {\n  prefix: 'fab',\n  iconName: 'shirtsinbulk',\n  icon: [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"]\n};\nconst faCodepen = {\n  prefix: 'fab',\n  iconName: 'codepen',\n  icon: [512, 512, [], \"f1cb\", \"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\"]\n};\nconst faGitAlt = {\n  prefix: 'fab',\n  iconName: 'git-alt',\n  icon: [448, 512, [], \"f841\", \"M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z\"]\n};\nconst faLyft = {\n  prefix: 'fab',\n  iconName: 'lyft',\n  icon: [512, 512, [], \"f3c3\", \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"]\n};\nconst faRev = {\n  prefix: 'fab',\n  iconName: 'rev',\n  icon: [448, 512, [], \"f5b2\", \"M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z\"]\n};\nconst faWindows = {\n  prefix: 'fab',\n  iconName: 'windows',\n  icon: [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"]\n};\nconst faWizardsOfTheCoast = {\n  prefix: 'fab',\n  iconName: 'wizards-of-the-coast',\n  icon: [640, 512, [], \"f730\", \"M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"]\n};\nconst faSquareViadeo = {\n  prefix: 'fab',\n  iconName: 'square-viadeo',\n  icon: [448, 512, [\"viadeo-square\"], \"f2aa\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM118.3 381.2c-68-73.6-19.8-196.1 81.2-196.1c13.3 0 26.6 2.1 39.1 6.7c-4.3 8.4-7.3 17.6-8.4 27.1c-9.7-4.1-20.2-6-30.7-6c-48.8 0-84.6 41.7-84.6 88.9c0 43 28.5 78.7 69.5 85.9c61.5-24 72.9-117.6 72.9-175v0c0-7.3 0-14.8-.6-22.1c-11.2-32.9-26.6-64.6-44.2-94.5c27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70c0 54.1-21.9 99-68.3 128.2l-2.4 .2c50 1 86.2-38.6 86.2-87.2c0-12.2-2.1-24.3-6.9-35.7c9.5-1.9 18.5-5.6 26.4-10.5c15.3 36.6 12.6 87.3-22.8 125.6c-42.4 46.2-120 46.6-162.4 0zM274.6 217.6c21.9-12 49.6-30.7 62.3-53c1.5-3 4.1-8.6 4.5-12c-12.5 27.9-44.2 49.8-73.9 56.7c-4.7-7.3-7.5-15.5-7.5-24.3c0-10.3 5.2-24.1 12.9-31.6c8.3-7.9 18-10.9 27.9-14.1c16-5.1 32.5-10.3 44.5-35.9c32.5 46.2 13.1 130.3-36.3 130.3c-13.3 0-25.1-7.1-34.4-16.1z\"]\n};\nconst faViadeoSquare = faSquareViadeo;\nconst faMeetup = {\n  prefix: 'fab',\n  iconName: 'meetup',\n  icon: [512, 512, [], \"f2e0\", \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"]\n};\nconst faCentos = {\n  prefix: 'fab',\n  iconName: 'centos',\n  icon: [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"]\n};\nconst faAdn = {\n  prefix: 'fab',\n  iconName: 'adn',\n  icon: [496, 512, [], \"f170\", \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"]\n};\nconst faCloudsmith = {\n  prefix: 'fab',\n  iconName: 'cloudsmith',\n  icon: [512, 512, [], \"f384\", \"M512 227.6v56.9L284.4 512H227.6L0 284.4V227.6L227.6 0h56.9L512 227.6zm-256 162a133.6 133.6 0 1 0 0-267.1 133.6 133.6 0 1 0 0 267.1z\"]\n};\nconst faOpensuse = {\n  prefix: 'fab',\n  iconName: 'opensuse',\n  icon: [640, 512, [], \"e62b\", \"M471.1 102.7s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3c-51.9-1.8-122.8-4.3-223 57.3c-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.1 307 7 335.1c3.3 12.8 8.9 24.9 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4c44.4 3.9 78.1-16 90-53.3c8.2-25.8 0-63.6-31.5-82.9c-25.6-15.7-53.3-12.1-69.2-1.6c-13.9 9.2-21.8 23.5-21.6 39.2c.3 27.8 24.3 42.6 41.5 42.6c5.4 0 10.7-.9 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9c0-12.1-11.6-14.8-16.8-13.9c-2.9 .5-4.5 2-11.8 2.4c-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9c32.3 2.8 47.7 40.7 28.5 65.7C135 388.5 76.7 388 53.6 344.4c-26-49.2 12.7-111.2 87-98.4c33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3c56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8c5.6-33.8 39.7-18.4 82.4-17.4c66.5 .4 102.1-27 103.1-28c3.7-3.1 6.5-15.8 7-17.7c1.3-5.1-3.2-2.4-3.2-2.4c-8.7 5.2-30.5 15.2-50.9 15.6c-25.3 .5-76.2-25.4-81.6-28.2c-.3-.4 .1 1.2-11-25.5c88.4 58.3 118.3 40.5 145.2 21.7c.8-.6 4.3-2.9 3.6-5.7c-13.8-48.1-22.4-62.7-34.5-69.6c-37-21.6-125-34.7-129.2-35.3c.1-.1-.9-.3-.9 .7l0 0zm135.6 75.4a37.6 37.6 0 1 1 -75.2-2.6 37.6 37.6 0 1 1 75.2 2.6zm-36.6-27.9a26.3 26.3 0 1 0 -1.7 52.5 26.3 26.3 0 1 0 1.7-52.5zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.6 0 15.6v0z\"]\n};\nconst faPiedPiperAlt = {\n  prefix: 'fab',\n  iconName: 'pied-piper-alt',\n  icon: [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"]\n};\nconst faSquareDribbble = {\n  prefix: 'fab',\n  iconName: 'square-dribbble',\n  icon: [448, 512, [\"dribbble-square\"], \"f397\", \"M165.9 132.5c-38.3 18-66.8 53.3-75.7 95.7c6.1 .1 62.4 .3 126.4-16.7c-22.7-40.2-47.1-74.1-50.7-79zm26.1-9.1c3.8 5.1 28.6 38.9 51 80c48.6-18.3 69.1-45.9 71.6-49.4C281 124.2 235.3 112.9 192 123.4zM277.4 382c-2-12-10-53.8-29.2-103.6c-55.1 18.8-93.8 56.4-108.1 85.6c40.5 31.6 93.3 36.7 137.3 18zM227.8 232.6C159.6 253 93.4 252.2 87.4 252c0 .7 0 1.4 0 2.1s0 1.4 0 2.1c0 35.1 13.3 67.1 35.1 91.4c22.2-37.9 67.1-77.9 116.5-91.8c-3.4-7.8-7.2-15.5-11.1-23.2zm72.5 136.9c30.7-20.7 52.5-53.6 58.6-91.6c-4.6-1.5-42.3-12.7-85.1-5.8c17.9 49.1 25.1 89.1 26.5 97.4zm-34.8-119c45.5-5.7 90.7 3.4 95.2 4.4c-.3-32.3-11.8-61.9-30.9-85.1c-2.9 3.9-25.8 33.2-76.3 53.9c4.8 9.8 8.3 17.8 12 26.8zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM224 416a160 160 0 1 1 0-320 160 160 0 1 1 0 320z\"]\n};\nconst faDribbbleSquare = faSquareDribbble;\nconst faCodiepie = {\n  prefix: 'fab',\n  iconName: 'codiepie',\n  icon: [472, 512, [], \"f284\", \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"]\n};\nconst faNode = {\n  prefix: 'fab',\n  iconName: 'node',\n  icon: [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"]\n};\nconst faMix = {\n  prefix: 'fab',\n  iconName: 'mix',\n  icon: [448, 512, [], \"f3cb\", \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"]\n};\nconst faSteam = {\n  prefix: 'fab',\n  iconName: 'steam',\n  icon: [496, 512, [], \"f1b6\", \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"]\n};\nconst faCcApplePay = {\n  prefix: 'fab',\n  iconName: 'cc-apple-pay',\n  icon: [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"]\n};\nconst faScribd = {\n  prefix: 'fab',\n  iconName: 'scribd',\n  icon: [384, 512, [], \"f28a\", \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"]\n};\nconst faDebian = {\n  prefix: 'fab',\n  iconName: 'debian',\n  icon: [448, 512, [], \"e60b\", \"M380.2 245.6c3-7.6 5.5-14 5.2-24.4l-4.3 9c4.4-13.2 4-27.1 3.6-40.4c-.2-6-.3-11.8 0-17.4l-1.8-.5c-1.5-45.2-40.6-93.1-75.3-109.4c-30-13.8-76.1-16.2-97.3-5.8c1.3-1.1 4.2-2 6.8-2.7l.3-.1c3.3-1 6-1.7 4-2.9c-19.2 1.9-24.9 5.5-31.1 9.4l-.1 0c-4.6 2.9-9.5 6-20.3 8.7c-3.5 3.4 1.7 2 5.8 .9l0 0c4.1-1.1 7.2-1.9-.1 2.4c-3.5 1-6.6 1.3-9.6 1.6l-.1 0c-8.3 .8-15.8 1.6-30.7 17c.8 1.3 3.4-.2 5.3-1.3l.1-.1c2.3-1.4 3.4-2-1.7 4.4c-19.1-2.4-60.3 43.7-69.1 59l4.6 .8c-3.2 8-6.8 14.8-10 20.8c-4.3 8.1-7.9 14.9-8.7 21.3c-.3 5.1-1 11-1.7 17.3l0 0c-.1 1-.2 2-.3 3l-.1 .6c-3 27.3-6.7 60.8 3.9 73l-1.3 13c.6 1.2 1.1 2.3 1.6 3.5c.2 .4 .4 .8 .5 1.1l0 0 0 0 0 0 0 0 0 0 0 0 0 0c1 2.1 2 4.2 3.3 6.2l-3 .2c7 22.1 10.8 22.5 15.1 22.9l0 0c4.4 .4 9.3 .9 18.7 24.2c-2.7-.9-5.5-1.9-9.4-7.2c-.5 4.1 5.8 16.3 13.1 25.8l-3.1 3.6c2.1 3.7 4.8 6.2 7.6 8.8l0 0 0 0c1 .9 2.1 1.9 3.1 2.9c-11.9-6.5 3.2 13.7 11.9 25.2c.8 1.1 1.5 2 2.2 2.9l0 0 0 0 0 0 0 0 0 0c1.4 1.9 2.5 3.4 2.9 4.1l2.4-4.2c-.3 6.1 4.3 13.9 13.1 24.7l7.3-.3c3 6 14 16.7 20.7 17.2l-4.4 5.8c8.1 2.6 10.3 4.3 12.7 6.2c2.6 2.1 5.4 4.3 16.1 8.1l-4.2-7.4c3.5 3 6.2 5.9 8.8 8.7l.1 .1c5.2 5.6 9.9 10.6 19.7 15.3c10.7 3.7 16.6 4.7 22.7 5.8c.3 0 .6 .1 .9 .1c5.4 .8 11.2 1.8 20.8 4.5c-1.1-.1-2.2-.1-3.3-.1h0c-2.3-.1-4.7-.1-7-.1l0 0 0 0 0 0 0 0 0 0 0 0 0 0c-14.4-.2-29.2-.4-42.7-5.2C107.8 480.5 19.5 367.2 26 250.6c-.6-9.9-.3-20.9 0-30.7c.4-13.5 .7-24.8-1.6-28.3l1-3.1c5.3-17.4 11.7-38.2 23.8-62.8l-.1-.2v-.1c.4 .4 3.4 3.4 8.8-5.8c.8-1.8 1.6-3.7 2.4-5.6c.5-1.1 .9-2.2 1.4-3.2c2.5-6.1 5.1-12.3 8.4-17.9l2.6-.6c1.7-10.1 17-23.8 29.8-35.2l1.1-1c5.7-5.1 10.7-9.7 13.6-13.1l.7 4.4c17-15.9 44.6-27.5 65.6-36.4l.5-.2c4.8-2 9.3-3.9 13.3-5.7c-3.4 3.8 2.2 2.7 10 1c4.8-1 10.4-2.1 15.3-2.4l-3.9 2.1c-2.7 1.4-5.4 2.8-8 4.6c8.1-2 11.7-1.4 15.7-.8l.3 0c3.5 .6 7.3 1.2 14.6 .2c-5.6 .8-12.3 3-11.2 3.8c7.9 .9 12.8-.1 17.2-1l.2 0c5.5-1.1 10.3-2 19.3 .9l-1-4.8c7.3 2.6 12.7 4.3 17.5 5.8l.5 .1c10 3 17.6 5.3 34.2 14.1c3.2 .2 5.3-.5 7.4-1.2l.1 0c3.6-1.1 7-2.1 15.2 1.2c.3 .5 .5 1 .7 1.4c.1 .2 .2 .5 .3 .7l0 .1c1 2.6 1.8 4.6 14.6 12.1c1.7-.7-2.7-4.7-6.4-8.2c0 0 0 0-.1-.1c-.2-.1-.3-.3-.5-.4c32.2 17.3 67.3 54.1 78 93.5c-6-11.1-5.2-5.5-4.3 .5c.6 4 1.2 8.1-.2 7.5c4.5 12.1 8.1 24.5 10.4 37.4l-.8-2.9-.1-.3c-3.3-11.9-9.6-34.3-19.9-49.3c-.4 4.3-2.8 3.9-5.2 3.5l-.1 0 0 0c-3.3-.6-6.2-1.1-1.9 12.6c2.6 3.8 3.1 2.4 3.5 1.1l0 0c.5-1.5 .9-2.7 4.7 5.2c.1 4.1 1 8.2 2.1 12.7l0 0 0 0 .1 .6c.1 .3 .1 .5 .2 .8l.1 .6c.6 2.6 1.3 5.4 1.8 8.4c-1.1-.2-2.3-2.2-3.4-4.2c-1.4-2.4-2.8-4.7-3.7-3.2c2.4 11.5 6.5 17.4 8 18.3c-.3 .6-.6 .7-1.1 .7c-.8 0-1.8 .1-1.9 5.3c.7 13.7 3.3 12.5 5.3 11.6l0 0c.6-.3 1.2-.6 1.7-.4c-.6 2.5-1.6 5.1-2.7 7.9c-2.8 7.1-6 15.4-3.4 26.1c-.8-3-2-6-3.1-8.9l-.1-.4c-.2-.5-.4-1-.6-1.5l0 0c-.3-.8-.6-1.6-.9-2.3c-.6 4.4-.3 7.7-.1 10.6c0 .2 0 .5 0 .7c.4 5.3 .7 10-3 19.9c4.3-14.2 3.8-26.9-.2-20.8c1 10.9-3.7 20.4-8 28.9l-.1 .2c-3.6 7.1-6.8 13.5-5.9 19.3l-5.2-7.1c-7.5 10.9-7 13.3-6.5 15.5l0 .1c.5 1.9 1 3.8-3.4 10.8c1.7-2.9 1.3-3.6 1-4.2l0 0c-.4-.8-.7-1.5 1.7-5.1c-1.6 .1-5.5 3.9-10.1 8.5c-3.9 3.9-8.5 8.4-12.8 11.8c-37.5 30.1-82.3 34-125.6 17.8c.2-1-.2-2.1-3.1-4.1c-36.8-28.2-58.5-52.1-50.9-107.5c2.1-1.6 3.6-5.8 5.3-10.8l0 0 0 0 .2-.4 .1-.3 0-.1c2.9-8.4 6.5-18.8 14.3-23.8c7.8-17.3 31.3-33.3 56.4-33.7c25.6-1.4 47.2 13.7 58.1 27.9c-19.8-18.4-52.1-24-79.7-10.4c-28.2 12.7-45 43.8-42.5 74.7c.3-.4 .6-.6 .9-.8l0 0s0 0 0 0c0 0 .1-.1 .1-.1l.1-.1c.6-.5 1.1-.9 1.4-3.3c-.9 60.2 64.8 104.3 112.1 82l.6 1.3c12.7-3.5 15.9-6.5 20.3-10.7l.1-.1 0 0c2.2-2.1 4.7-4.5 8.9-7.3c-.3 .7-1.3 1.7-2.4 2.7c-2.2 2.1-4.6 4.5-1.6 4.6c5-1.3 18.5-13.4 28.5-22.3l0 0 0 0c.6-.5 1.2-1 1.7-1.5c1.5-1.3 2.8-2.5 4-3.6l0 0 .3-.3c1.9-4.2 1.6-5.6 1.3-7l0-.1c-.4-1.6-.8-3.3 2.4-9.6l7.3-3.7c.8-2.1 1.5-4.1 2.2-6c.2-.6 .5-1.2 .7-1.8l-.4-.2zM349.3 34.3l-.2-.1 .2 .1 0 0zM247.8 334.1c-6-3-13.7-8.9-14.8-11.4l-.4 .3c-.3 .6-.5 1.3-.2 2.2c-12.2-5.7-23.4-14.3-32.6-24.9c4.9 7.1 10.1 14.1 17 19.5c-6.9-2.3-15.1-11.8-21.6-19.3l-.1-.1c-4.3-5-7.9-9.1-9.7-9.5c19.8 35.5 80.5 62.3 112.3 49c-14.7 .5-33.4 .3-49.9-5.8zm79.3-119.7l-.1-.2c-.5-1.5-1.1-3.1-1.7-3.4c1.4-5.8 5.4-10.7 4.4 4.6c-1 3.8-1.8 1.5-2.6-1zm-4.2 22.2c-1.3 7.9-5 15.5-10.1 22.5c.2-2-1.2-2.4-2.6-2.8l0 0c-2.9-.8-5.9-1.6 5.6-16.1c-.5 1.9-2.1 4.6-3.7 7.3l0 0 0 0-.3 .4c-3.6 5.9-6.7 11 4 4.3l1-1.8c2.6-4.5 5-8.8 6-13.8h.1zm-55.6 33.9c7.1 .6 14.1 .6 21-1.1c-2.5 2.4-5.2 4.8-8.3 7.2c-11.1-1.7-21.2-6-12.7-6.1zm-92.6 11.6c3.6 7.1 6.4 11.5 9 15.7l.1 .2c2.3 3.7 4.4 7.1 6.8 11.7c-5.1-4.2-8.7-9.5-12.5-15l-.3-.5c-1.4-2.1-2.8-4.2-4.4-6.2l1.2-5.9h.1zm7.5-9.6c1.6 3.3 3.2 6.4 5.7 9.1l2.6 7.7-1.3-2.1c-3.2-5.3-6.3-10.6-8-16.7l.8 1.6 .2 .4zm238.9-41.6c-2.3 17.4-7.7 34.6-16 50.3c7.6-14.9 12.5-30.9 14.8-47.2l1.2-3.1zM35.6 110.6c.4 .8 1.4 .5 2.3 .3c1.9-.5 3.6-.9-.1 7.6c-.5 .3-1 .7-1.5 1l0 0 0 0c-1.4 .9-2.8 1.9-3.9 3c1.9-3.8 3.5-7.4 3.2-11.9zM25.3 152.3c-.7 3.7-1.5 7.9-3.4 13.9c.2-1.9 0-3.5-.2-4.9l0-.1c-.4-3.4-.7-6.3 4.3-12.8c-.3 1.2-.5 2.5-.7 3.8v.1z\"]\n};\nconst faOpenid = {\n  prefix: 'fab',\n  iconName: 'openid',\n  icon: [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"]\n};\nconst faInstalod = {\n  prefix: 'fab',\n  iconName: 'instalod',\n  icon: [512, 512, [], \"e081\", \"M153.384,480H387.113L502.554,275.765,204.229,333.211ZM504.726,240.078,387.113,32H155.669L360.23,267.9ZM124.386,48.809,7.274,256,123.236,461.154,225.627,165.561Z\"]\n};\nconst faFilesPinwheel = {\n  prefix: 'fab',\n  iconName: 'files-pinwheel',\n  icon: [512, 512, [], \"e69f\", \"M253.2 246.4L136.9 130.2c-.6-.6-1-1.3-1.4-2s-.5-1.6-.5-2.4s.2-1.6 .5-2.4s.8-1.4 1.4-2L253.3 5.1c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3s2.1 1.3 2.8 2.3s1.1 2.2 1.1 3.5L264 242c0 1.3-.3 2.5-1 3.6s-1.7 1.9-2.9 2.4s-2.5 .6-3.7 .3s-2.4-.9-3.2-1.9zm40.3-4.4l0-134.4c0-.8 .1-1.6 .5-2.4s.8-1.5 1.3-2.1s1.3-1.1 2-1.4s1.6-.5 2.4-.5l134.4 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8s.6 2.4 .3 3.6s-.9 2.3-1.7 3.2L304 246.4c-.9 .8-2 1.4-3.2 1.6s-2.4 .1-3.5-.4s-2.1-1.3-2.8-2.3s-1.1-2.2-1.1-3.4zm30.6 35c-1.2 0-2.5-.3-3.5-1s-1.9-1.6-2.4-2.8s-.6-2.4-.4-3.6s.8-2.3 1.7-3.2l84.2-84.2c.6-.6 1.3-1 2-1.4s1.6-.5 2.4-.5s1.6 .2 2.4 .5s1.4 .8 2 1.4l84.4 84.2c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6s-1.3 2.1-2.3 2.8s-2.2 1.1-3.5 1.1l-168.5 0zM414.8 408l-95.3-95.2c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.7s1.3-2.1 2.4-2.8s2.3-1 3.5-1l95.2 0c1.7 0 3.2 .7 4.4 1.8s1.8 2.8 1.8 4.4l0 95.3c0 1.2-.4 2.5-1.1 3.5s-1.7 1.8-2.8 2.3s-2.4 .6-3.6 .3s-2.3-.9-3.2-1.7zM16.5 302.1l216.9 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8s.6 2.4 .3 3.6s-.8 2.3-1.7 3.2L129.4 421.2c-.6 .6-1.3 1-2 1.4s-1.6 .5-2.4 .5s-1.6-.2-2.4-.5s-1.4-.8-2-1.4L12 312.8c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.6s1.3-2.1 2.3-2.8s2.3-1 3.5-1zM264 465.3c0 .8-.2 1.6-.5 2.4s-.8 1.5-1.4 2s-1.3 1-2 1.4s-1.6 .5-2.4 .5l-128 0c-1.2 0-2.5-.4-3.5-1.1s-1.8-1.7-2.3-2.8s-.6-2.4-.3-3.6s.8-2.3 1.7-3.2l128-128c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3s2.1 1.3 2.8 2.3s1.1 2.2 1.1 3.5l0 128zm40-132.5l82.8 82.7c.6 .6 1 1.3 1.4 2s.5 1.6 .5 2.4s-.2 1.6-.5 2.4s-.8 1.4-1.4 2L304 507c-.9 .9-2 1.5-3.2 1.7s-2.5 .1-3.6-.3s-2.1-1.3-2.8-2.3s-1.1-2.2-1.1-3.5l0-165.4c0-1.2 .4-2.5 1.1-3.5s1.7-1.8 2.8-2.3s2.4-.6 3.6-.3s2.3 .8 3.2 1.7zM78.7 122.4c0-1.2 .3-2.5 1-3.5s1.7-1.8 2.8-2.3s2.4-.6 3.6-.4s2.3 .8 3.2 1.7L237.8 266.4c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6s-1.3 2.1-2.3 2.8s-2.2 1.1-3.5 1.1L85 277.1c-1.7 0-3.2-.7-4.4-1.8s-1.8-2.8-1.8-4.4l0-148.4z\"]\n};\nconst faExpeditedssl = {\n  prefix: 'fab',\n  iconName: 'expeditedssl',\n  icon: [496, 512, [], \"f23e\", \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"]\n};\nconst faSellcast = {\n  prefix: 'fab',\n  iconName: 'sellcast',\n  icon: [448, 512, [], \"f2da\", \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"]\n};\nconst faSquareTwitter = {\n  prefix: 'fab',\n  iconName: 'square-twitter',\n  icon: [448, 512, [\"twitter-square\"], \"f081\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM351.3 199.3v0c0 86.7-66 186.6-186.6 186.6c-37.2 0-71.7-10.8-100.7-29.4c5.3 .6 10.4 .8 15.8 .8c30.7 0 58.9-10.4 81.4-28c-28.8-.6-53-19.5-61.3-45.5c10.1 1.5 19.2 1.5 29.6-1.2c-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3c-9-6-16.4-14.1-21.5-23.6s-7.8-20.2-7.7-31c0-12.2 3.2-23.4 8.9-33.1c32.3 39.8 80.8 65.8 135.2 68.6c-9.3-44.5 24-80.6 64-80.6c18.9 0 35.9 7.9 47.9 20.7c14.8-2.8 29-8.3 41.6-15.8c-4.9 15.2-15.2 28-28.8 36.1c13.2-1.4 26-5.1 37.8-10.2c-8.9 13.1-20.1 24.7-32.9 34c.2 2.8 .2 5.7 .2 8.5z\"]\n};\nconst faTwitterSquare = faSquareTwitter;\nconst faRProject = {\n  prefix: 'fab',\n  iconName: 'r-project',\n  icon: [581, 512, [], \"f4f7\", \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"]\n};\nconst faDelicious = {\n  prefix: 'fab',\n  iconName: 'delicious',\n  icon: [448, 512, [], \"f1a5\", \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"]\n};\nconst faFreebsd = {\n  prefix: 'fab',\n  iconName: 'freebsd',\n  icon: [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"]\n};\nconst faVuejs = {\n  prefix: 'fab',\n  iconName: 'vuejs',\n  icon: [448, 512, [], \"f41f\", \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"]\n};\nconst faAccusoft = {\n  prefix: 'fab',\n  iconName: 'accusoft',\n  icon: [640, 512, [], \"f369\", \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"]\n};\nconst faIoxhost = {\n  prefix: 'fab',\n  iconName: 'ioxhost',\n  icon: [640, 512, [], \"f208\", \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"]\n};\nconst faFonticonsFi = {\n  prefix: 'fab',\n  iconName: 'fonticons-fi',\n  icon: [384, 512, [], \"f3a2\", \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"]\n};\nconst faAppStore = {\n  prefix: 'fab',\n  iconName: 'app-store',\n  icon: [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"]\n};\nconst faCcMastercard = {\n  prefix: 'fab',\n  iconName: 'cc-mastercard',\n  icon: [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\"]\n};\nconst faItunesNote = {\n  prefix: 'fab',\n  iconName: 'itunes-note',\n  icon: [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\"]\n};\nconst faGolang = {\n  prefix: 'fab',\n  iconName: 'golang',\n  icon: [640, 512, [], \"e40f\", \"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\"]\n};\nconst faKickstarter = {\n  prefix: 'fab',\n  iconName: 'kickstarter',\n  icon: [448, 512, [\"square-kickstarter\"], \"f3bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM320.8 233l-23.3 23.1L320.8 279c24.1 23.9 24.1 63 0 86.9s-63.4 23.9-87.6 0l-8.5-8.4c-11.3 16-29.7 26.5-50.9 26.5c-34.1 0-61.9-27.5-61.9-61.4l0-133.2c0-33.8 27.7-61.4 61.9-61.4c21.1 0 39.6 10.5 50.9 26.5l8.5-8.4c24.1-23.9 63.4-23.9 87.6 0s24.1 63 0 86.9z\"]\n};\nconst faSquareKickstarter = faKickstarter;\nconst faGrav = {\n  prefix: 'fab',\n  iconName: 'grav',\n  icon: [512, 512, [], \"f2d6\", \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"]\n};\nconst faWeibo = {\n  prefix: 'fab',\n  iconName: 'weibo',\n  icon: [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"]\n};\nconst faUncharted = {\n  prefix: 'fab',\n  iconName: 'uncharted',\n  icon: [448, 512, [], \"e084\", \"M171.73,232.813A5.381,5.381,0,0,0,176.7,229.5,48.081,48.081,0,0,1,191.6,204.244c1.243-.828,1.657-2.484,1.657-4.141a4.22,4.22,0,0,0-2.071-3.312L74.429,128.473,148.958,85a9.941,9.941,0,0,0,4.968-8.281,9.108,9.108,0,0,0-4.968-8.281L126.6,55.6a9.748,9.748,0,0,0-9.523,0l-100.2,57.966a9.943,9.943,0,0,0-4.969,8.281V236.954a9.109,9.109,0,0,0,4.969,8.281L39.235,258.07a8.829,8.829,0,0,0,4.968,1.242,9.4,9.4,0,0,0,6.625-2.484,10.8,10.8,0,0,0,2.9-7.039V164.5L169.66,232.4A4.5,4.5,0,0,0,171.73,232.813ZM323.272,377.73a12.478,12.478,0,0,0-4.969,1.242l-74.528,43.062V287.882c0-2.9-2.9-5.8-6.211-4.555a53.036,53.036,0,0,1-28.984.414,4.86,4.86,0,0,0-6.21,4.555V421.619l-74.529-43.061a8.83,8.83,0,0,0-4.969-1.242,9.631,9.631,0,0,0-9.523,9.523v26.085a9.107,9.107,0,0,0,4.969,8.281l100.2,57.553A8.829,8.829,0,0,0,223.486,480a11.027,11.027,0,0,0,4.969-1.242l100.2-57.553a9.941,9.941,0,0,0,4.968-8.281V386.839C332.8,382.285,328.24,377.73,323.272,377.73ZM286.007,78a23,23,0,1,0-23-23A23,23,0,0,0,286.007,78Zm63.627-10.086a23,23,0,1,0,23,23A23,23,0,0,0,349.634,67.914ZM412.816,151.6a23,23,0,1,0-23-23A23,23,0,0,0,412.816,151.6Zm-63.182-9.2a23,23,0,1,0,23,23A23,23,0,0,0,349.634,142.4Zm-63.627,83.244a23,23,0,1,0-23-23A23,23,0,0,0,286.007,225.648Zm-62.074,36.358a23,23,0,1,0-23-23A23,23,0,0,0,223.933,262.006Zm188.883-82.358a23,23,0,1,0,23,23A23,23,0,0,0,412.816,179.648Zm0,72.272a23,23,0,1,0,23,23A23,23,0,0,0,412.816,251.92Z\"]\n};\nconst faFirstdraft = {\n  prefix: 'fab',\n  iconName: 'firstdraft',\n  icon: [384, 512, [], \"f3a1\", \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"]\n};\nconst faSquareYoutube = {\n  prefix: 'fab',\n  iconName: 'square-youtube',\n  icon: [448, 512, [61798, \"youtube-square\"], \"f431\", \"M282 256.2l-95.2-54.1V310.3L282 256.2zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zm14.4 136.1c7.6 28.6 7.6 88.2 7.6 88.2s0 59.6-7.6 88.1c-4.2 15.8-16.5 27.7-32.2 31.9C337.9 384 224 384 224 384s-113.9 0-142.2-7.6c-15.7-4.2-28-16.1-32.2-31.9C42 315.9 42 256.3 42 256.3s0-59.7 7.6-88.2c4.2-15.8 16.5-28.2 32.2-32.4C110.1 128 224 128 224 128s113.9 0 142.2 7.7c15.7 4.2 28 16.6 32.2 32.4z\"]\n};\nconst faYoutubeSquare = faSquareYoutube;\nconst faWikipediaW = {\n  prefix: 'fab',\n  iconName: 'wikipedia-w',\n  icon: [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\"]\n};\nconst faWpressr = {\n  prefix: 'fab',\n  iconName: 'wpressr',\n  icon: [496, 512, [\"rendact\"], \"f3e4\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z\"]\n};\nconst faRendact = faWpressr;\nconst faAngellist = {\n  prefix: 'fab',\n  iconName: 'angellist',\n  icon: [448, 512, [], \"f209\", \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"]\n};\nconst faGalacticRepublic = {\n  prefix: 'fab',\n  iconName: 'galactic-republic',\n  icon: [496, 512, [], \"f50c\", \"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\"]\n};\nconst faNfcDirectional = {\n  prefix: 'fab',\n  iconName: 'nfc-directional',\n  icon: [512, 512, [], \"e530\", \"M211.8 488.6C213.4 491.1 213.9 494.2 213.2 497.1C212.6 500 210.8 502.6 208.3 504.2C205.7 505.8 202.7 506.3 199.7 505.7C138.3 491.8 84.1 455.8 47.53 404.5C10.97 353.2-5.395 290.3 1.57 227.7C8.536 165 38.34 107.2 85.29 65.21C132.2 23.2 193-.0131 256 0C257.5 0 258.1 .2931 260.3 .8627C261.7 1.432 262.1 2.267 264 3.319C265.1 4.371 265.9 5.619 266.5 6.993C267 8.367 267.3 9.839 267.3 11.32V112.3L291.8 86.39C292.8 85.31 294 84.44 295.4 83.84C296.7 83.23 298.2 82.9 299.7 82.86C301.2 82.81 302.6 83.06 304 83.59C305.4 84.12 306.7 84.92 307.8 85.94C308.8 86.96 309.7 88.18 310.3 89.54C310.9 90.89 311.3 92.35 311.3 93.84C311.3 95.32 311.1 96.8 310.6 98.18C310 99.57 309.2 100.8 308.2 101.9L264.2 148.5C263.1 149.6 261.9 150.5 260.5 151.1C259 151.7 257.5 152 255.1 152C254.5 152 252.9 151.7 251.5 151.1C250.1 150.5 248.8 149.6 247.8 148.5L203.7 101.9C201.7 99.74 200.6 96.83 200.7 93.84C200.7 90.84 202 87.1 204.2 85.94C206.4 83.88 209.3 82.77 212.3 82.86C215.3 82.94 218.1 84.21 220.2 86.39L244.7 112.4V22.89C188.3 25.64 134.9 48.73 94.23 87.87C53.58 127 28.49 179.6 23.61 235.8C18.73 292 34.38 348.1 67.68 393.7C100.1 439.2 149.7 471.2 204.7 483.6C207.6 484.3 210.2 486.1 211.8 488.6L211.8 488.6zM171.4 126.1C170.6 127.4 169.5 128.5 168.3 129.3C147.8 143.2 131.1 161.9 119.5 183.8C107.9 205.7 101.8 230.1 101.8 254.9C101.8 279.7 107.9 304.1 119.5 325.1C131.1 347.9 147.8 366.6 168.3 380.5C170.8 382.2 172.5 384.8 173 387.8C173.6 390.7 172.1 393.8 171.3 396.2C169.6 398.7 166.1 400.4 164 400.1C161.1 401.5 158 400.9 155.6 399.2C132 383.2 112.8 361.7 99.46 336.5C86.15 311.4 79.19 283.4 79.19 254.9C79.19 226.5 86.15 198.4 99.46 173.3C112.8 148.1 132 126.6 155.6 110.6C156.8 109.8 158.2 109.2 159.6 108.8C161.1 108.5 162.6 108.5 164.1 108.8C165.5 109 166.9 109.6 168.2 110.4C169.5 111.2 170.5 112.3 171.4 113.5C172.2 114.7 172.8 116.1 173.1 117.6C173.4 119.1 173.4 120.6 173.1 122C172.8 123.5 172.3 124.9 171.4 126.1H171.4zM340.9 383.5C341.7 382.3 342.8 381.2 343.1 380.4V380.3C364.4 366.3 381.1 347.6 392.7 325.7C404.2 303.9 410.2 279.5 410.2 254.8C410.2 230.1 404.2 205.7 392.7 183.8C381.1 161.1 364.4 143.3 343.1 129.3C342.8 128.5 341.7 127.4 340.9 126.2C340.1 124.9 339.5 123.5 339.3 122.1C338.1 120.6 339 119.1 339.3 117.7C339.6 116.2 340.2 114.8 341 113.6C341.9 112.4 342.1 111.3 344.2 110.5C345.4 109.7 346.8 109.2 348.3 108.9C349.8 108.6 351.2 108.6 352.7 108.9C354.2 109.2 355.5 109.8 356.8 110.7C380.2 126.7 399.5 148.2 412.7 173.3C426 198.4 432.1 226.4 432.1 254.8C432.1 283.3 426 311.3 412.7 336.4C399.5 361.5 380.2 383 356.8 399C355.5 399.9 354.2 400.5 352.7 400.8C351.2 401.1 349.8 401.1 348.3 400.8C346.8 400.5 345.4 399.1 344.2 399.2C342.1 398.4 341.9 397.3 341 396.1C340.2 394.9 339.6 393.5 339.3 392C339 390.6 338.1 389.1 339.3 387.6C339.5 386.2 340.1 384.8 340.9 383.5V383.5zM312.3 6.307C368.5 19.04 418.7 50.28 455 95.01C485.4 132.6 504.6 178 510.3 226C515.9 274 507.9 322.7 487.1 366.3C466.2 409.9 433.5 446.8 392.6 472.6C351.7 498.3 304.4 512 256 512C254.5 512 253.1 511.7 251.7 511.1C250.3 510.6 249.1 509.7 248 508.7C246.1 507.6 246.1 506.4 245.6 505C245 503.6 244.7 502.2 244.7 500.7V401.5L220.2 427.5C218.1 429.7 215.3 430.1 212.3 431.1C209.3 431.2 206.4 430 204.2 427.1C202 425.9 200.7 423.1 200.7 420.1C200.6 417.1 201.7 414.2 203.7 412L247.8 365.4C249.1 363.2 252.9 362 255.1 362C259.1 362 262 363.2 264.2 365.4L308.2 412C310.3 414.2 311.4 417.1 311.3 420.1C311.2 423.1 309.9 425.9 307.8 427.1C305.6 430 302.7 431.2 299.7 431.1C296.7 430.1 293.8 429.7 291.8 427.5L267.3 401.6V489.1C323.7 486.3 377.1 463.3 417.8 424.1C458.5 384.1 483.6 332.4 488.5 276.2C493.3 219.1 477.7 163.9 444.4 118.3C411.1 72.75 362.4 40.79 307.4 28.36C305.9 28.03 304.6 27.42 303.3 26.57C302.1 25.71 301.1 24.63 300.3 23.37C299.5 22.12 298.1 20.72 298.7 19.26C298.5 17.8 298.5 16.3 298.8 14.85C299.2 13.41 299.8 12.04 300.6 10.82C301.5 9.61 302.6 8.577 303.8 7.784C305.1 6.99 306.5 6.451 307.9 6.198C309.4 5.945 310.9 5.982 312.3 6.307L312.3 6.307zM353.1 256.1C353.1 287.5 335.6 317.2 303.8 339.6C301.7 341.1 299 341.9 296.4 341.6C293.7 341.4 291.2 340.3 289.4 338.4L219.3 268.6C217.1 266.5 215.1 263.6 215.9 260.6C215.9 257.6 217.1 254.7 219.2 252.6C221.4 250.5 224.2 249.3 227.2 249.3C230.2 249.3 233.1 250.5 235.2 252.6L298.3 315.4C319.1 298.3 330.5 277.5 330.5 256.1C330.5 232.2 316.4 209.1 290.8 191C288.3 189.3 286.7 186.7 286.2 183.7C285.7 180.8 286.3 177.7 288.1 175.3C289.8 172.8 292.4 171.2 295.4 170.7C298.3 170.2 301.4 170.8 303.8 172.6C335.6 195 353.1 224.7 353.1 256.1V256.1zM216.7 341.5C213.7 342 210.7 341.3 208.2 339.6C176.5 317.2 158.1 287.5 158.1 256.1C158.1 224.7 176.5 195 208.2 172.6C210.4 171 213.1 170.3 215.7 170.5C218.4 170.8 220.8 171.9 222.7 173.8L292.8 243.6C294.9 245.7 296.1 248.6 296.1 251.6C296.1 254.6 294.1 257.4 292.8 259.6C290.7 261.7 287.8 262.9 284.9 262.9C281.9 262.9 278.1 261.7 276.9 259.6L213.8 196.7C192.9 214 181.6 234.7 181.6 256.1C181.6 279.1 195.7 303.1 221.3 321.1C223.7 322.9 225.4 325.5 225.9 328.5C226.4 331.4 225.7 334.4 224 336.9C222.3 339.3 219.6 341 216.7 341.5L216.7 341.5z\"]\n};\nconst faSkype = {\n  prefix: 'fab',\n  iconName: 'skype',\n  icon: [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"]\n};\nconst faJoget = {\n  prefix: 'fab',\n  iconName: 'joget',\n  icon: [496, 512, [], \"f3b7\", \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"]\n};\nconst faFedora = {\n  prefix: 'fab',\n  iconName: 'fedora',\n  icon: [448, 512, [], \"f798\", \"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\"]\n};\nconst faStripeS = {\n  prefix: 'fab',\n  iconName: 'stripe-s',\n  icon: [384, 512, [], \"f42a\", \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"]\n};\nconst faMeta = {\n  prefix: 'fab',\n  iconName: 'meta',\n  icon: [640, 512, [], \"e49b\", \"M640 317.9C640 409.2 600.6 466.4 529.7 466.4C467.1 466.4 433.9 431.8 372.8 329.8L341.4 277.2C333.1 264.7 326.9 253 320.2 242.2C300.1 276 273.1 325.2 273.1 325.2C206.1 441.8 168.5 466.4 116.2 466.4C43.42 466.4 0 409.1 0 320.5C0 177.5 79.78 42.4 183.9 42.4C234.1 42.4 277.7 67.08 328.7 131.9C365.8 81.8 406.8 42.4 459.3 42.4C558.4 42.4 640 168.1 640 317.9H640zM287.4 192.2C244.5 130.1 216.5 111.7 183 111.7C121.1 111.7 69.22 217.8 69.22 321.7C69.22 370.2 87.7 397.4 118.8 397.4C149 397.4 167.8 378.4 222 293.6C222 293.6 246.7 254.5 287.4 192.2V192.2zM531.2 397.4C563.4 397.4 578.1 369.9 578.1 322.5C578.1 198.3 523.8 97.08 454.9 97.08C421.7 97.08 393.8 123 360 175.1C369.4 188.9 379.1 204.1 389.3 220.5L426.8 282.9C485.5 377 500.3 397.4 531.2 397.4L531.2 397.4z\"]\n};\nconst faLaravel = {\n  prefix: 'fab',\n  iconName: 'laravel',\n  icon: [512, 512, [], \"f3bd\", \"M107.2 0c2.5 0 4.7 .8 6.7 2l94.3 54.1c2.7 1.5 4.5 3.5 5.4 5.9c.9 2.2 .9 4.3 .9 5.6l0 193.4 69.2-39.7 0-100.3c0-2.6 .6-5 2.2-7.2c1.5-2.1 3.5-3.6 5.7-4.8c0 0 0 0 0 0l94-54c1.6-.9 3.4-1.6 5.5-1.6s4 .7 5.6 1.6l95.8 55.1c2.3 1.3 3.9 3 4.9 5.3c.9 2.1 .9 4.2 .9 5.8l0 107.2c0 2-.2 4.3-1.4 6.4c-1.2 2.2-3 3.7-5.1 4.9l-.1 .1-88 50.5 0 100c0 2.3-.3 4.8-1.6 7c-1.3 2.2-3.3 3.7-5.3 4.9c0 0 0 0-.1 0L208.7 510c-2.2 1.2-4.5 2-7.1 2s-4.9-.9-7.1-2l-.1-.1L7.1 402l-.5-.3c-1.1-.7-2.6-1.7-3.8-2.9C.9 396.9 0 394.6 0 391.6L0 65.9c0-4.8 3-7.9 5.5-9.3L100.5 2c2-1.2 4.3-2 6.8-2zM38.1 67.1l69 39.9 69.2-39.9L107.1 27.4l-69 39.7zm353 93.2l69-39.7-69-39.7-69.1 39.7 69.1 39.7zM189.2 89L120 128.8l0 186.4 69.2-39.9 0-186.4zM94.5 128.9L25.2 89.1l0 294.2 164 94.2 0-79.4-87.3-49.3-.2-.1c-1.3-.8-3.2-1.9-4.6-3.7c-1.7-2.1-2.5-4.7-2.5-7.7l0-208.5zm214.7 92.4l69.3 39.6 0-78.5-69.3-39.9 0 78.8zm94.5 39.6L473 221.2l0-78.8-69.3 39.9 0 78.5zM201.6 376.1l163.8-93.2-69-39.9L133 337.1l68.6 38.9zm12.9 101.5l164-94.2 0-78.8-164 93.6 0 79.4z\"]\n};\nconst faHotjar = {\n  prefix: 'fab',\n  iconName: 'hotjar',\n  icon: [512, 512, [], \"f3b1\", \"M361.5 0c0 131.6-80.7 176.8-140.2 209.4c-.6 .3-1.1 .6-1.6 .9c-53.8 30.2-88.7 49.8-89.6 122H32C32 200.8 112.7 155.6 172.2 123C227 93.2 262.5 73 262.5 0h98.9zM301 302.6c54.8-29.8 90.3-50 90.3-123h98c0 131.6-80.7 176.7-140.2 209.4c-54.8 29.8-90.3 50-90.3 123h-98c0-131.6 80.7-176.8 140.2-209.4z\"]\n};\nconst faBluetoothB = {\n  prefix: 'fab',\n  iconName: 'bluetooth-b',\n  icon: [320, 512, [], \"f294\", \"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\"]\n};\nconst faSquareLetterboxd = {\n  prefix: 'fab',\n  iconName: 'square-letterboxd',\n  icon: [448, 512, [], \"e62e\", \"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zM105.1 187C66.4 187 35 218.3 35 257s31.4 70 70.1 70c24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5c0-13.6 3.9-26.3 10.6-37.1c-12.4-19.8-34.4-32.9-59.5-32.9zM224 187c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5c0 13.6-3.9 26.3-10.6 37.1C176.9 313.8 198.9 327 224 327c24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5c0-13.6 3.9-26.3 10.6-37.1C271.1 200.2 249.1 187 224 187zm118.9 0c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5c0 13.6-3.9 26.3-10.6 37.1c12.4 19.8 34.4 32.9 59.5 32.9c38.7 0 70.1-31.3 70.1-70s-31.4-70-70.1-70z\"]\n};\nconst faStickerMule = {\n  prefix: 'fab',\n  iconName: 'sticker-mule',\n  icon: [576, 512, [], \"f3f7\", \"M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"]\n};\nconst faCreativeCommonsZero = {\n  prefix: 'fab',\n  iconName: 'creative-commons-zero',\n  icon: [496, 512, [], \"f4f3\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"]\n};\nconst faHips = {\n  prefix: 'fab',\n  iconName: 'hips',\n  icon: [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"]\n};\nconst faCss = {\n  prefix: 'fab',\n  iconName: 'css',\n  icon: [448, 512, [], \"e6a2\", \"M376.3 32L0 32 0 408.3c0 19 7.6 37.2 21 50.7s31.7 21 50.7 21l304.6 0c19 0 37.2-7.6 50.7-21s21-31.7 21-50.7l0-304.6c0-19-7.6-37.2-21-50.7s-31.7-21-50.7-21zM332.4 431.4c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.5-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-4-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L351.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.5 12.5c7.5 8.4 11.5 20.3 11.8 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4 27.4-12.3 35.7c-8.2 8.3-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-101 0c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.4-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-3.9-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L250.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.4 12.5c7.6 8.4 11.5 20.3 11.9 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4.1 27.4-12.3 35.7s-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-105.6 1.1c-8.4-7.7-12.5-19.2-12.5-34.5l0-75.4c0-15.2 4.4-26.7 13.2-34.6c8.9-7.8 20.7-11.8 35.2-11.8c14.1 0 25.2 4 33.4 12c8.3 8 12.5 20 12.5 35.9l0 6-33.1 0 0-5.8c0-6.1-1.3-10.7-4-13.6c-1.1-1.5-2.6-2.7-4.3-3.5s-3.5-1.2-5.4-1.1c-5.4 0-9.2 1.8-11.4 5.6c-2.3 5.2-3.3 10.8-3 16.4l0 65.5c0 13.7 4.8 20.6 14.4 20.8c4.5 0 7.9-1.6 10.2-4.8c2.5-4.1 3.7-8.8 3.5-13.6l0-4.9 33.1 0 0 5.1c0 10.6-2.1 19.5-6.2 26.6c-4 6.9-9.9 12.5-17.1 16c-7.7 3.7-16.1 5.5-24.6 5.3c-14.2 0-25.5-3.9-33.8-11.6z\"]\n};\nconst faBehance = {\n  prefix: 'fab',\n  iconName: 'behance',\n  icon: [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"]\n};\nconst faReddit = {\n  prefix: 'fab',\n  iconName: 'reddit',\n  icon: [512, 512, [], \"f1a1\", \"M0 256C0 114.6 114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256L37.1 512c-13.7 0-20.5-16.5-10.9-26.2L75 437C28.7 390.7 0 326.7 0 256zM349.6 153.6c23.6 0 42.7-19.1 42.7-42.7s-19.1-42.7-42.7-42.7c-20.6 0-37.8 14.6-41.8 34c-34.5 3.7-61.4 33-61.4 68.4l0 .2c-37.5 1.6-71.8 12.3-99 29.1c-10.1-7.8-22.8-12.5-36.5-12.5c-33 0-59.8 26.8-59.8 59.8c0 24 14.1 44.6 34.4 54.1c2 69.4 77.6 125.2 170.6 125.2s168.7-55.9 170.6-125.3c20.2-9.6 34.1-30.2 34.1-54c0-33-26.8-59.8-59.8-59.8c-13.7 0-26.3 4.6-36.4 12.4c-27.4-17-62.1-27.7-100-29.1l0-.2c0-25.4 18.9-46.5 43.4-49.9l0 0c4.4 18.8 21.3 32.8 41.5 32.8zM177.1 246.9c16.7 0 29.5 17.6 28.5 39.3s-13.5 29.6-30.3 29.6s-31.4-8.8-30.4-30.5s15.4-38.3 32.1-38.3zm190.1 38.3c1 21.7-13.7 30.5-30.4 30.5s-29.3-7.9-30.3-29.6c-1-21.7 11.8-39.3 28.5-39.3s31.2 16.6 32.1 38.3zm-48.1 56.7c-10.3 24.6-34.6 41.9-63 41.9s-52.7-17.3-63-41.9c-1.2-2.9 .8-6.2 3.9-6.5c18.4-1.9 38.3-2.9 59.1-2.9s40.7 1 59.1 2.9c3.1 .3 5.1 3.6 3.9 6.5z\"]\n};\nconst faDiscord = {\n  prefix: 'fab',\n  iconName: 'discord',\n  icon: [640, 512, [], \"f392\", \"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z\"]\n};\nconst faChrome = {\n  prefix: 'fab',\n  iconName: 'chrome',\n  icon: [512, 512, [], \"f268\", \"M0 256C0 209.4 12.47 165.6 34.27 127.1L144.1 318.3C166 357.5 207.9 384 256 384C270.3 384 283.1 381.7 296.8 377.4L220.5 509.6C95.9 492.3 0 385.3 0 256zM365.1 321.6C377.4 302.4 384 279.1 384 256C384 217.8 367.2 183.5 340.7 160H493.4C505.4 189.6 512 222.1 512 256C512 397.4 397.4 511.1 256 512L365.1 321.6zM477.8 128H256C193.1 128 142.3 172.1 130.5 230.7L54.19 98.47C101 38.53 174 0 256 0C350.8 0 433.5 51.48 477.8 128V128zM168 256C168 207.4 207.4 168 256 168C304.6 168 344 207.4 344 256C344 304.6 304.6 344 256 344C207.4 344 168 304.6 168 256z\"]\n};\nconst faAppStoreIos = {\n  prefix: 'fab',\n  iconName: 'app-store-ios',\n  icon: [448, 512, [], \"f370\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"]\n};\nconst faCcDiscover = {\n  prefix: 'fab',\n  iconName: 'cc-discover',\n  icon: [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"]\n};\nconst faWpbeginner = {\n  prefix: 'fab',\n  iconName: 'wpbeginner',\n  icon: [512, 512, [], \"f297\", \"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\"]\n};\nconst faConfluence = {\n  prefix: 'fab',\n  iconName: 'confluence',\n  icon: [512, 512, [], \"f78d\", \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"]\n};\nconst faShoelace = {\n  prefix: 'fab',\n  iconName: 'shoelace',\n  icon: [512, 512, [], \"e60c\", \"M404.9 331c2.2-1.1 4.4-2.3 6.5-3.7l8.3-4.8c1.5-1.1 4.4-3.4 8.7-6.7l.5-.5c3.4-3.4 7.2-5 11.3-4.9c1.8 0 3.9 .5 6.4 1.5l31-27.5c.9-.7 1.7-1.3 2.6-1.8h.2c3.3-1.9 6-1.8 8.2 .4c3.9 2.1 4.2 5.6 .9 10.6L456.9 322c.2 .5 .4 1 .4 1.5c.5 2.2 .3 4.4-.5 6.6c-.7 1.5-1.8 2.9-3.1 4.2c-1.4 1.4-2.7 2.8-4.2 4.2l-18.8 13.7c-1.7 1.2-3.4 2.3-5.1 3.3c-2.1 1.3-4.3 2.5-6.6 3.6c-1 .4-1.9 .9-2.9 1.3c-5.9 2.5-11.9 4.2-18.2 5c-2.9 24.5-11.3 47.1-25.1 67.8c-17.5 25.7-41.4 45.4-71.8 58.8c-30.2 13.5-63 20.2-98.2 20.2c-48.6-.5-88-11.4-118.2-32.8C49.5 454.4 32 421.5 32 380.3v-5.6c1.2-28.1 9.5-54.6 24.8-79.8c15.1-24.9 37.1-41.7 66.1-50.5c14.9-4.4 29.9-6.6 45-6.6c15.5 0 31.6 2.9 48.1 8.6s35.2 15.5 55.9 29.5L326 312.2c15.1 9.8 28.8 16.5 41.2 20c-2.6-25.1-11.7-46.6-27.3-64.5c-15.7-18.1-35.6-31.3-59.9-39.7l-23.3-8c-21.4-7.5-37.3-14.9-47.7-22.2c-28.2-19.1-43.8-45.2-47-78.5l-.5-9.8c0-32.1 13-58.9 39-80.5C223.5 9.7 251.1 0 283 0c24 0 45.6 6.9 64.7 20.8c19.2 14 30.1 33.8 32.6 59.4l.5 10c0 18.6-4.8 34.5-14.4 47.7c-9.8 13.2-18.5 19.9-26 19.9c-1.6-.1-3.1-.3-4.5-.6l-34 32c-5.5 3-9.2 2.5-11.1-1.6c-1.9-2.2-1.8-4.9 .5-8.2l.2-.2c.5-.7 1.2-1.5 2-2.4l31.6-30c-.4-1.5-.6-3.1-.6-4.8c0-4.1 1.6-7.6 4.9-10.4c13.8-12.4 20.8-26.7 20.8-42.8c0-16-6.1-29.5-18.2-40.4s-28.7-16.5-49.7-16.8c-26.2 0-47.8 7.9-64.7 23.7S192.3 89.9 192.3 112c0 17.8 6.9 33.9 20.6 48.3c13.6 14.2 34.6 25.4 63 33.5c39.8 11.5 70.2 31 91.3 58.3c18.7 24.2 29.1 51.3 31.3 81.4c2.2-.7 4.3-1.5 6.5-2.6zM294.1 178.7c0 1.1 .6 1.6 1.8 1.6c.1 0 9.7-8.9 28.8-26.6c0-2.4-5.1 .9-15.3 10c-10.2 9.2-15.3 14.2-15.3 14.9zm8 6.4c0-1-.5-1.5-1.5-1.5c-1.1 0-2.1 .5-2.9 1.6c-1.9-.1-3.3 .1-4.2 .7c-.4 .2-.5 .5-.5 .7c0 .7 .5 1.3 1.5 1.6h3.3c2.9-1.1 4.4-2.2 4.4-3.3zm22.6-19.9c0-2.8-1.6-2.8-4.9 0c-1.6 1.5-3.6 3.5-6 6.2c-.8 .6-2.6 2.2-5.3 4.9c-2.8 2.9-4.2 4.7-4.2 5.3l.2 1.3c.7 .2 1.2 .4 1.5 .4c.1 0 3.3-2.9 9.5-8.7s9.3-8.9 9.3-9.3zm159.7 120l-30.6 27c1.8 1 3.2 2.4 4 4.2l30.2-27c.2-1.2 .1-2.2-.5-2.9c-.6-.5-1.6-.9-3.1-1.3zm-1.6-.9l-.7-.7-27 21.9 1.6 2 26-23.1zM366.6 363.9c-8-2.1-15.4-4.6-22.2-7.5c-15.3-6.2-34.3-17-57-32.4L250 298.7c-15.8-10.1-30.2-17.6-43.2-22.6c-13.1-4.9-26-7.3-38.6-7.3h-5.5c-32.2 1.7-57.2 13.8-75 36.2c-16.6 20.8-25 45.3-25 73.6c0 31.8 12.8 56.7 38.2 74.7c25.4 18.1 60.2 27.1 104.4 27.1c34.7 0 64-6.2 87.8-18.6c23.7-12.4 42.1-28.8 55.2-49.2c9.8-15.5 15.9-31.8 18.2-48.8z\"]\n};\nconst faMdb = {\n  prefix: 'fab',\n  iconName: 'mdb',\n  icon: [576, 512, [], \"f8ca\", \"M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\"]\n};\nconst faDochub = {\n  prefix: 'fab',\n  iconName: 'dochub',\n  icon: [416, 512, [], \"f394\", \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"]\n};\nconst faAccessibleIcon = {\n  prefix: 'fab',\n  iconName: 'accessible-icon',\n  icon: [448, 512, [62107], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"]\n};\nconst faEbay = {\n  prefix: 'fab',\n  iconName: 'ebay',\n  icon: [640, 512, [], \"f4f4\", \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"]\n};\nconst faAmazon = {\n  prefix: 'fab',\n  iconName: 'amazon',\n  icon: [448, 512, [], \"f270\", \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"]\n};\nconst faUnsplash = {\n  prefix: 'fab',\n  iconName: 'unsplash',\n  icon: [448, 512, [], \"e07c\", \"M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z\"]\n};\nconst faYarn = {\n  prefix: 'fab',\n  iconName: 'yarn',\n  icon: [496, 512, [], \"f7e3\", \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"]\n};\nconst faSquareSteam = {\n  prefix: 'fab',\n  iconName: 'square-steam',\n  icon: [448, 512, [\"steam-square\"], \"f1b7\", \"M165.6 309.1c18.6 7.7 27.3 28.9 19.6 47.4s-29 27.2-47.6 19.4l-28.5-11.8c5 10.6 13.8 19.4 25.4 24.2c25.2 10.5 54.1-1.4 64.6-26.5c5.1-12.1 5.1-25.5 .1-37.7c-5.1-12.1-14.5-21.6-26.7-26.7c-12.1-5-25-4.8-36.4-.5l29.5 12.2zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V240.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8c-31.8 0-58.5-22.7-64.5-52.7L0 319.2V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM241.9 196.2a58.4 58.4 0 1 0 116.8 0 58.4 58.4 0 1 0 -116.8 0zm14.6-.1a43.9 43.9 0 1 1 87.8 0 43.9 43.9 0 1 1 -87.8 0z\"]\n};\nconst faSteamSquare = faSquareSteam;\nconst fa500px = {\n  prefix: 'fab',\n  iconName: '500px',\n  icon: [448, 512, [], \"f26e\", \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"]\n};\nconst faSquareVimeo = {\n  prefix: 'fab',\n  iconName: 'square-vimeo',\n  icon: [448, 512, [\"vimeo-square\"], \"f194\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM318.5 309.5C275 366 238.2 394.3 208.1 394.3c-18.7 0-34.4-17.2-47.3-51.6c-3.8-13.9-7.3-26.9-10.5-39c-18.2-68.3-28.6-107.4-46.2-107.4c-2.4 0-10.8 5-25.1 15.1L64 192c7-6.1 13.9-12.4 20.6-18.5c29.1-26.3 55.6-50.3 73.5-51.9c24.9-2.4 40.2 14.6 46 51.1c20.5 129.6 29.6 149.2 66.8 90.5c13.4-21.2 20.6-37.2 21.5-48.3c3.4-32.8-25.6-30.6-45.2-22.2c15.7-51.5 45.8-76.5 90.1-75.1c32.9 1 48.4 22.4 46.5 64c-1.4 31.1-23.2 73.8-65.3 127.9z\"]\n};\nconst faVimeoSquare = faSquareVimeo;\nconst faAsymmetrik = {\n  prefix: 'fab',\n  iconName: 'asymmetrik',\n  icon: [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"]\n};\nconst faFontAwesome = {\n  prefix: 'fab',\n  iconName: 'font-awesome',\n  icon: [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 352 0 64 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"]\n};\nconst faFontAwesomeFlag = faFontAwesome;\nconst faFontAwesomeLogoFull = faFontAwesome;\nconst faGratipay = {\n  prefix: 'fab',\n  iconName: 'gratipay',\n  icon: [496, 512, [], \"f184\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"]\n};\nconst faApple = {\n  prefix: 'fab',\n  iconName: 'apple',\n  icon: [384, 512, [], \"f179\", \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"]\n};\nconst faHive = {\n  prefix: 'fab',\n  iconName: 'hive',\n  icon: [512, 512, [], \"e07f\", \"M260.353,254.878,131.538,33.1a2.208,2.208,0,0,0-3.829.009L.3,254.887A2.234,2.234,0,0,0,.3,257.122L129.116,478.9a2.208,2.208,0,0,0,3.83-.009L260.358,257.113A2.239,2.239,0,0,0,260.353,254.878Zm39.078-25.713a2.19,2.19,0,0,0,1.9,1.111h66.509a2.226,2.226,0,0,0,1.9-3.341L259.115,33.111a2.187,2.187,0,0,0-1.9-1.111H190.707a2.226,2.226,0,0,0-1.9,3.341ZM511.7,254.886,384.9,33.112A2.2,2.2,0,0,0,382.99,32h-66.6a2.226,2.226,0,0,0-1.906,3.34L440.652,256,314.481,476.66a2.226,2.226,0,0,0,1.906,3.34h66.6a2.2,2.2,0,0,0,1.906-1.112L511.7,257.114A2.243,2.243,0,0,0,511.7,254.886ZM366.016,284.917H299.508a2.187,2.187,0,0,0-1.9,1.111l-108.8,190.631a2.226,2.226,0,0,0,1.9,3.341h66.509a2.187,2.187,0,0,0,1.9-1.111l108.8-190.631A2.226,2.226,0,0,0,366.016,284.917Z\"]\n};\nconst faGitkraken = {\n  prefix: 'fab',\n  iconName: 'gitkraken',\n  icon: [592, 512, [], \"f3a6\", \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"]\n};\nconst faKeybase = {\n  prefix: 'fab',\n  iconName: 'keybase',\n  icon: [448, 512, [], \"f4f5\", \"M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z\"]\n};\nconst faApplePay = {\n  prefix: 'fab',\n  iconName: 'apple-pay',\n  icon: [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\"]\n};\nconst faPadlet = {\n  prefix: 'fab',\n  iconName: 'padlet',\n  icon: [640, 512, [], \"e4a0\", \"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\"]\n};\nconst faAmazonPay = {\n  prefix: 'fab',\n  iconName: 'amazon-pay',\n  icon: [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"]\n};\nconst faSquareGithub = {\n  prefix: 'fab',\n  iconName: 'square-github',\n  icon: [448, 512, [\"github-square\"], \"f092\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM265.8 407.7c0-1.8 0-6 .1-11.6c.1-11.4 .1-28.8 .1-43.7c0-15.6-5.2-25.5-11.3-30.7c37-4.1 76-9.2 76-73.1c0-18.2-6.5-27.3-17.1-39c1.7-4.3 7.4-22-1.7-45c-13.9-4.3-45.7 17.9-45.7 17.9c-13.2-3.7-27.5-5.6-41.6-5.6s-28.4 1.9-41.6 5.6c0 0-31.8-22.2-45.7-17.9c-9.1 22.9-3.5 40.6-1.7 45c-10.6 11.7-15.6 20.8-15.6 39c0 63.6 37.3 69 74.3 73.1c-4.8 4.3-9.1 11.7-10.6 22.3c-9.5 4.3-33.8 11.7-48.3-13.9c-9.1-15.8-25.5-17.1-25.5-17.1c-16.2-.2-1.1 10.2-1.1 10.2c10.8 5 18.4 24.2 18.4 24.2c9.7 29.7 56.1 19.7 56.1 19.7c0 9 .1 21.7 .1 30.6c0 4.8 .1 8.6 .1 10c0 4.3-3 9.5-11.5 8C106 393.6 59.8 330.8 59.8 257.4c0-91.8 70.2-161.5 162-161.5s166.2 69.7 166.2 161.5c.1 73.4-44.7 136.3-110.7 158.3c-8.4 1.5-11.5-3.7-11.5-8zm-90.5-54.8c-.2-1.5 1.1-2.8 3-3.2c1.9-.2 3.7 .6 3.9 1.9c.3 1.3-1 2.6-3 3c-1.9 .4-3.7-.4-3.9-1.7zm-9.1 3.2c-2.2 .2-3.7-.9-3.7-2.4c0-1.3 1.5-2.4 3.5-2.4c1.9-.2 3.7 .9 3.7 2.4c0 1.3-1.5 2.4-3.5 2.4zm-14.3-2.2c-1.9-.4-3.2-1.9-2.8-3.2s2.4-1.9 4.1-1.5c2 .6 3.3 2.1 2.8 3.4c-.4 1.3-2.4 1.9-4.1 1.3zm-12.5-7.3c-1.5-1.3-1.9-3.2-.9-4.1c.9-1.1 2.8-.9 4.3 .6c1.3 1.3 1.8 3.3 .9 4.1c-.9 1.1-2.8 .9-4.3-.6zm-8.5-10c-1.1-1.5-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3c1.1 1.5 1.1 3.3 0 4.1c-.9 .6-2.6 0-3.7-1.5zm-6.3-8.8c-1.1-1.3-1.3-2.8-.4-3.5c.9-.9 2.4-.4 3.5 .6c1.1 1.3 1.3 2.8 .4 3.5c-.9 .9-2.4 .4-3.5-.6zm-6-6.4c-1.3-.6-1.9-1.7-1.5-2.6c.4-.6 1.5-.9 2.8-.4c1.3 .7 1.9 1.8 1.5 2.6c-.4 .9-1.7 1.1-2.8 .4z\"]\n};\nconst faGithubSquare = faSquareGithub;\nconst faStumbleupon = {\n  prefix: 'fab',\n  iconName: 'stumbleupon',\n  icon: [512, 512, [], \"f1a4\", \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"]\n};\nconst faFedex = {\n  prefix: 'fab',\n  iconName: 'fedex',\n  icon: [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"]\n};\nconst faPhoenixFramework = {\n  prefix: 'fab',\n  iconName: 'phoenix-framework',\n  icon: [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"]\n};\nconst faShopify = {\n  prefix: 'fab',\n  iconName: 'shopify',\n  icon: [448, 512, [], \"e057\", \"M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z\"]\n};\nconst faNeos = {\n  prefix: 'fab',\n  iconName: 'neos',\n  icon: [512, 512, [], \"f612\", \"M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z\"]\n};\nconst faSquareThreads = {\n  prefix: 'fab',\n  iconName: 'square-threads',\n  icon: [448, 512, [], \"e619\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM294.2 244.3c19.5 9.3 33.7 23.5 41.2 40.9c10.4 24.3 11.4 63.9-20.2 95.4c-24.2 24.1-53.5 35-95.1 35.3h-.2c-46.8-.3-82.8-16.1-106.9-46.8C91.5 341.8 80.4 303.7 80 256v-.1-.1c.4-47.7 11.5-85.7 33-113.1c24.2-30.7 60.2-46.5 106.9-46.8h.2c46.9 .3 83.3 16 108.2 46.6c12.3 15.1 21.3 33.3 27 54.4l-26.9 7.2c-4.7-17.2-11.9-31.9-21.4-43.6c-19.4-23.9-48.7-36.1-87-36.4c-38 .3-66.8 12.5-85.5 36.2c-17.5 22.3-26.6 54.4-26.9 95.5c.3 41.1 9.4 73.3 26.9 95.5c18.7 23.8 47.4 36 85.5 36.2c34.3-.3 56.9-8.4 75.8-27.3c21.5-21.5 21.1-47.9 14.2-64c-4-9.4-11.4-17.3-21.3-23.3c-2.4 18-7.9 32.2-16.5 43.2c-11.4 14.5-27.7 22.4-48.4 23.5c-15.7 .9-30.8-2.9-42.6-10.7c-13.9-9.2-22-23.2-22.9-39.5c-1.7-32.2 23.8-55.3 63.5-57.6c14.1-.8 27.3-.2 39.5 1.9c-1.6-9.9-4.9-17.7-9.8-23.4c-6.7-7.8-17.1-11.8-30.8-11.9h-.4c-11 0-26 3.1-35.6 17.6l-23-15.8c12.8-19.4 33.6-30.1 58.5-30.1h.6c41.8 .3 66.6 26.3 69.1 71.8c1.4 .6 2.8 1.2 4.2 1.9l.1 .5zm-71.8 67.5c17-.9 36.4-7.6 39.7-48.8c-8.8-1.9-18.6-2.9-29-2.9c-3.2 0-6.4 .1-9.6 .3c-28.6 1.6-38.1 15.5-37.4 27.9c.9 16.7 19 24.5 36.4 23.6l-.1-.1z\"]\n};\nconst faHackerrank = {\n  prefix: 'fab',\n  iconName: 'hackerrank',\n  icon: [512, 512, [], \"f5f7\", \"M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"]\n};\nconst faResearchgate = {\n  prefix: 'fab',\n  iconName: 'researchgate',\n  icon: [448, 512, [], \"f4f8\", \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"]\n};\nconst faSwift = {\n  prefix: 'fab',\n  iconName: 'swift',\n  icon: [448, 512, [], \"f8e1\", \"M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\"]\n};\nconst faAngular = {\n  prefix: 'fab',\n  iconName: 'angular',\n  icon: [448, 512, [], \"f420\", \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"]\n};\nconst faSpeakap = {\n  prefix: 'fab',\n  iconName: 'speakap',\n  icon: [448, 512, [], \"f3f3\", \"M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z\"]\n};\nconst faAngrycreative = {\n  prefix: 'fab',\n  iconName: 'angrycreative',\n  icon: [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"]\n};\nconst faYCombinator = {\n  prefix: 'fab',\n  iconName: 'y-combinator',\n  icon: [448, 512, [], \"f23b\", \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"]\n};\nconst faEmpire = {\n  prefix: 'fab',\n  iconName: 'empire',\n  icon: [496, 512, [], \"f1d1\", \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"]\n};\nconst faEnvira = {\n  prefix: 'fab',\n  iconName: 'envira',\n  icon: [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"]\n};\nconst faGoogleScholar = {\n  prefix: 'fab',\n  iconName: 'google-scholar',\n  icon: [512, 512, [], \"e63b\", \"M390.9 298.5c0 0 0 .1 .1 .1c9.2 19.4 14.4 41.1 14.4 64C405.3 445.1 338.5 512 256 512s-149.3-66.9-149.3-149.3c0-22.9 5.2-44.6 14.4-64h0c1.7-3.6 3.6-7.2 5.6-10.7c4.4-7.6 9.4-14.7 15-21.3c27.4-32.6 68.5-53.3 114.4-53.3c33.6 0 64.6 11.1 89.6 29.9c9.1 6.9 17.4 14.7 24.8 23.5c5.6 6.6 10.6 13.8 15 21.3c2 3.4 3.8 7 5.5 10.5zm26.4-18.8c-30.1-58.4-91-98.4-161.3-98.4s-131.2 40-161.3 98.4L0 202.7 256 0 512 202.7l-94.7 77.1z\"]\n};\nconst faSquareGitlab = {\n  prefix: 'fab',\n  iconName: 'square-gitlab',\n  icon: [448, 512, [\"gitlab-square\"], \"e5ae\", \"M0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96zm337.5 12.5l44.6 116.4 .4 1.2c5.6 16.8 7.2 35.2 2.3 52.5c-5 17.2-15.4 32.4-29.8 43.3l-.2 .1-68.4 51.2-54.1 40.9c-.5 .2-1.1 .5-1.7 .8c-2 1-4.4 2-6.7 2c-3 0-6.8-1.8-8.3-2.8l-54.2-40.9L93.5 322.3l-.4-.3-.2-.1c-14.3-10.8-24.8-26-29.7-43.3s-4.2-35.7 2.2-52.5l.5-1.2 44.7-116.4c.9-2.3 2.5-4.3 4.5-5.6c1.6-1 3.4-1.6 5.2-1.8c1.3-.7 2.1-.4 3.4 .1c.6 .2 1.2 .5 2 .7c1 .4 1.6 .9 2.4 1.5c.6 .4 1.2 1 2.1 1.5c1.2 1.4 2.2 3 2.7 4.8l29.2 92.2H285l30.2-92.2c.5-1.8 1.4-3.4 2.6-4.8s2.8-2.4 4.5-3.1c1.7-.6 3.6-.9 5.4-.7s3.6 .8 5.2 1.8c2 1.3 3.7 3.3 4.6 5.6z\"]\n};\nconst faGitlabSquare = faSquareGitlab;\nconst faStudiovinari = {\n  prefix: 'fab',\n  iconName: 'studiovinari',\n  icon: [512, 512, [], \"f3f8\", \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"]\n};\nconst faPiedPiper = {\n  prefix: 'fab',\n  iconName: 'pied-piper',\n  icon: [480, 512, [], \"f2ae\", \"M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z\"]\n};\nconst faWordpress = {\n  prefix: 'fab',\n  iconName: 'wordpress',\n  icon: [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"]\n};\nconst faProductHunt = {\n  prefix: 'fab',\n  iconName: 'product-hunt',\n  icon: [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"]\n};\nconst faFirefox = {\n  prefix: 'fab',\n  iconName: 'firefox',\n  icon: [512, 512, [], \"f269\", \"M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z\"]\n};\nconst faLinode = {\n  prefix: 'fab',\n  iconName: 'linode',\n  icon: [448, 512, [], \"f2b8\", \"M366.036,186.867l-59.5,36.871-.838,36.871-29.329-19.273-39.384,24.3c2.238,55.211,2.483,59.271,2.51,59.5l-97.2,65.359L127.214,285.748l108.1-62.01L195.09,197.761l-75.417,38.547L98.723,93.015,227.771,43.574,136.432,0,10.737,39.385,38.39,174.3l41.9,32.681L48.445,222.062,69.394,323.457,98.723,351.11,77.774,363.679l16.76,78.769L160.733,512c-10.8-74.842-11.658-78.641-11.725-78.773l77.925-55.3c16.759-12.57,15.083-10.894,15.083-10.894l.838,24.3,33.519,28.491-.838-77.093,46.927-33.519,26.815-18.435-2.514,36.033,25.139,17.6,6.7-74.579,58.657-43.575Z\"]\n};\nconst faGoodreads = {\n  prefix: 'fab',\n  iconName: 'goodreads',\n  icon: [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"]\n};\nconst faSquareOdnoklassniki = {\n  prefix: 'fab',\n  iconName: 'square-odnoklassniki',\n  icon: [448, 512, [\"odnoklassniki-square\"], \"f264\", \"M224 137.1a39.9 39.9 0 1 0 0 79.7 39.9 39.9 0 1 0 0-79.7zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM224 95.9A81 81 0 1 1 224 258a81 81 0 1 1 0-162.1zm59.3 168.3c16.8-13.2 29.5-5.5 34.1 3.6c7.8 16-1.1 23.7-21.5 37c-17.1 10.9-40.7 15.2-56.2 16.8l13 12.9 47.7 47.7c17.4 17.9-11 45.8-28.6 28.6c-12-12.2-29.5-29.7-47.7-47.9l0 0-47.7 47.9c-17.7 17.2-46-11-28.4-28.6c3.7-3.7 7.9-7.9 12.5-12.5c10.4-10.4 22.6-22.7 35.2-35.2l12.9-12.9c-15.4-1.6-39.3-5.7-56.6-16.8c-20.3-13.3-29.3-20.9-21.4-37c4.6-9.1 17.3-16.8 34.1-3.6c0 0 22.7 18 59.3 18s59.3-18 59.3-18z\"]\n};\nconst faOdnoklassnikiSquare = faSquareOdnoklassniki;\nconst faJsfiddle = {\n  prefix: 'fab',\n  iconName: 'jsfiddle',\n  icon: [576, 512, [], \"f1cc\", \"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\"]\n};\nconst faSith = {\n  prefix: 'fab',\n  iconName: 'sith',\n  icon: [448, 512, [], \"f512\", \"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\"]\n};\nconst faThemeisle = {\n  prefix: 'fab',\n  iconName: 'themeisle',\n  icon: [512, 512, [], \"f2b2\", \"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\"]\n};\nconst faPage4 = {\n  prefix: 'fab',\n  iconName: 'page4',\n  icon: [496, 512, [], \"f3d7\", \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"]\n};\nconst faHashnode = {\n  prefix: 'fab',\n  iconName: 'hashnode',\n  icon: [512, 512, [], \"e499\", \"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\"]\n};\nconst faReact = {\n  prefix: 'fab',\n  iconName: 'react',\n  icon: [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"]\n};\nconst faCcPaypal = {\n  prefix: 'fab',\n  iconName: 'cc-paypal',\n  icon: [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\"]\n};\nconst faSquarespace = {\n  prefix: 'fab',\n  iconName: 'squarespace',\n  icon: [512, 512, [], \"f5be\", \"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"]\n};\nconst faCcStripe = {\n  prefix: 'fab',\n  iconName: 'cc-stripe',\n  icon: [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"]\n};\nconst faCreativeCommonsShare = {\n  prefix: 'fab',\n  iconName: 'creative-commons-share',\n  icon: [496, 512, [], \"f4f2\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"]\n};\nconst faBitcoin = {\n  prefix: 'fab',\n  iconName: 'bitcoin',\n  icon: [512, 512, [], \"f379\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\"]\n};\nconst faKeycdn = {\n  prefix: 'fab',\n  iconName: 'keycdn',\n  icon: [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\"]\n};\nconst faOpera = {\n  prefix: 'fab',\n  iconName: 'opera',\n  icon: [496, 512, [], \"f26a\", \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"]\n};\nconst faItchIo = {\n  prefix: 'fab',\n  iconName: 'itch-io',\n  icon: [512, 512, [], \"f83a\", \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"]\n};\nconst faUmbraco = {\n  prefix: 'fab',\n  iconName: 'umbraco',\n  icon: [510, 512, [], \"f8e8\", \"M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z\"]\n};\nconst faGalacticSenate = {\n  prefix: 'fab',\n  iconName: 'galactic-senate',\n  icon: [512, 512, [], \"f50d\", \"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"]\n};\nconst faUbuntu = {\n  prefix: 'fab',\n  iconName: 'ubuntu',\n  icon: [576, 512, [], \"f7df\", \"M469.2 75A75.6 75.6 0 1 0 317.9 75a75.6 75.6 0 1 0 151.2 0zM154.2 240.7A75.6 75.6 0 1 0 3 240.7a75.6 75.6 0 1 0 151.2 0zM57 346C75.6 392.9 108 433 150 461.1s91.5 42.6 142 41.7c-14.7-18.6-22.9-41.5-23.2-65.2c-6.8-.9-13.3-2.1-19.5-3.4c-26.8-5.7-51.9-17.3-73.6-34s-39.3-38.1-51.7-62.5c-20.9 9.9-44.5 12.8-67.1 8.2zm395.1 89.8a75.6 75.6 0 1 0 -151.2 0 75.6 75.6 0 1 0 151.2 0zM444 351.6c18.5 14.8 31.6 35.2 37.2 58.2c33.3-41.3 52.6-92.2 54.8-145.2s-12.5-105.4-42.2-149.4c-8.6 21.5-24 39.6-43.8 51.6c15.4 28.6 22.9 60.8 21.9 93.2s-10.7 64-28 91.6zM101.1 135.4c12.4 2.7 24.3 7.5 35.1 14.3c16.6-24.2 38.9-44.1 64.8-58S255.8 70.4 285.2 70c.2-5.9 .9-11.9 2-17.7c3.6-16.7 11.1-32.3 21.8-45.5c-47.7-3.8-95.4 6-137.6 28.5S94.3 91.7 70.8 133.4c2.7-.2 5.3-.3 8-.3c7.5 0 15 .8 22.4 2.3z\"]\n};\nconst faDraft2digital = {\n  prefix: 'fab',\n  iconName: 'draft2digital',\n  icon: [480, 512, [], \"f396\", \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"]\n};\nconst faStripe = {\n  prefix: 'fab',\n  iconName: 'stripe',\n  icon: [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"]\n};\nconst faHouzz = {\n  prefix: 'fab',\n  iconName: 'houzz',\n  icon: [448, 512, [], \"f27c\", \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"]\n};\nconst faGg = {\n  prefix: 'fab',\n  iconName: 'gg',\n  icon: [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"]\n};\nconst faDhl = {\n  prefix: 'fab',\n  iconName: 'dhl',\n  icon: [640, 512, [], \"f790\", \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"]\n};\nconst faSquarePinterest = {\n  prefix: 'fab',\n  iconName: 'square-pinterest',\n  icon: [448, 512, [\"pinterest-square\"], \"f0d3\", \"M384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64h72.6l-2.2-.8c-5.4-48.1-3.1-57.5 15.7-134.7c3.9-16 8.5-35 13.9-57.9c0 0-7.3-14.8-7.3-36.5c0-70.7 75.5-78 75.5-25c0 13.5-5.4 31.1-11.2 49.8c-3.3 10.6-6.6 21.5-9.1 32c-5.7 24.5 12.3 44.4 36.4 44.4c43.7 0 77.2-46 77.2-112.4c0-58.8-42.3-99.9-102.6-99.9C153 139 112 191.4 112 245.6c0 21.1 8.2 43.7 18.3 56c2 2.4 2.3 4.5 1.7 7c-1.1 4.7-3.1 12.9-4.7 19.2c-1 4-1.8 7.3-2.1 8.6c-1.1 4.5-3.5 5.5-8.2 3.3c-30.6-14.3-49.8-59.1-49.8-95.1C67.2 167.1 123.4 96 229.4 96c85.2 0 151.4 60.7 151.4 141.8c0 84.6-53.3 152.7-127.4 152.7c-24.9 0-48.3-12.9-56.3-28.2c0 0-12.3 46.9-15.3 58.4c-5 19.3-17.6 42.9-27.4 59.3H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64z\"]\n};\nconst faPinterestSquare = faSquarePinterest;\nconst faXing = {\n  prefix: 'fab',\n  iconName: 'xing',\n  icon: [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"]\n};\nconst faBlackberry = {\n  prefix: 'fab',\n  iconName: 'blackberry',\n  icon: [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\"]\n};\nconst faCreativeCommonsPd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd',\n  icon: [496, 512, [], \"f4ec\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"]\n};\nconst faPlaystation = {\n  prefix: 'fab',\n  iconName: 'playstation',\n  icon: [576, 512, [], \"f3df\", \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"]\n};\nconst faQuinscape = {\n  prefix: 'fab',\n  iconName: 'quinscape',\n  icon: [512, 512, [], \"f459\", \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z\"]\n};\nconst faLess = {\n  prefix: 'fab',\n  iconName: 'less',\n  icon: [640, 512, [], \"f41d\", \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"]\n};\nconst faBloggerB = {\n  prefix: 'fab',\n  iconName: 'blogger-b',\n  icon: [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"]\n};\nconst faOpencart = {\n  prefix: 'fab',\n  iconName: 'opencart',\n  icon: [640, 512, [], \"f23d\", \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"]\n};\nconst faVine = {\n  prefix: 'fab',\n  iconName: 'vine',\n  icon: [384, 512, [], \"f1ca\", \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"]\n};\nconst faSignalMessenger = {\n  prefix: 'fab',\n  iconName: 'signal-messenger',\n  icon: [512, 512, [], \"e663\", \"M256 0c13.3 0 26.3 1 39.1 3l-3.7 23.7C279.9 24.9 268 24 256 24s-23.9 .9-35.4 2.7L216.9 3C229.7 1 242.7 0 256 0zm60.8 7.3l-5.7 23.3c23.4 5.7 45.4 14.9 65.4 27.1l12.5-20.5c-22.1-13.4-46.4-23.6-72.2-29.9zm90.5 42.2L393.1 68.8c19.1 14 36 30.9 50.1 50.1l19.4-14.2C447 83.6 428.4 65 407.3 49.5zm67.5 73.6l-20.5 12.5c12.2 20 21.4 42 27.1 65.4l23.3-5.7c-6.3-25.8-16.5-50.1-29.9-72.2zM509 216.9l-23.7 3.7c1.8 11.5 2.7 23.4 2.7 35.4s-.9 23.9-2.7 35.4l23.7 3.7c1.9-12.7 3-25.8 3-39.1s-1-26.3-3-39.1zM454.3 376.5c12.2-20 21.4-42 27.1-65.4l23.3 5.7c-6.3 25.8-16.5 50.1-29.9 72.2l-20.5-12.5zm-11.1 16.6l19.4 14.2c-15.5 21.1-34.1 39.8-55.2 55.2l-14.2-19.4c19.1-14 36-30.9 50.1-50.1zm-66.7 61.2l12.5 20.5c-22.1 13.4-46.4 23.6-72.2 29.9l-5.7-23.3c23.4-5.7 45.4-14.9 65.4-27.1zm-85.1 31l3.7 23.7c-12.7 1.9-25.8 3-39.1 3s-26.3-1-39.1-3l3.7-23.7c11.5 1.8 23.4 2.7 35.4 2.7s23.9-.9 35.4-2.7zm-90.5-3.9l-5.7 23.3c-19.4-4.7-37.9-11.6-55.3-20.5l-24.3 5.7-5.5-23.4 32.8-7.7 7.8 4c15.7 8 32.5 14.3 50.1 18.6zM90 471.3l5.5 23.4-41.6 9.7C26 510.8 1.2 486 7.6 458.2l9.7-41.6L40.7 422 31 463.7c-2.4 10.4 6.9 19.7 17.3 17.3L90 471.3zM45.5 401.8l-23.4-5.5L27.8 372C18.9 354.7 12 336.1 7.3 316.7l23.3-5.7c4.3 17.6 10.6 34.4 18.6 50.1l4 7.8-7.7 32.8zM26.7 291.4L3 295.1C1 282.3 0 269.3 0 256s1-26.3 3-39.1l23.7 3.7C24.9 232.1 24 244 24 256s.9 23.9 2.7 35.4zm3.9-90.5L7.3 195.2c6.3-25.8 16.5-50.1 29.9-72.2l20.5 12.5c-12.2 20-21.4 42-27.1 65.4zm38.3-82.1L49.5 104.7C65 83.6 83.6 65 104.7 49.5l14.2 19.4c-19.1 14-36 30.9-50.1 50.1zm66.7-61.2L123.1 37.2c22.1-13.4 46.4-23.6 72.2-29.9l5.7 23.3c-23.4 5.7-45.4 14.9-65.4 27.1zM464 256c0 114.9-93.1 208-208 208c-36.4 0-70.7-9.4-100.5-25.8c-2.9-1.6-6.2-2.1-9.4-1.4L53.6 458.4l21.6-92.5c.7-3.2 .2-6.5-1.4-9.4C57.4 326.7 48 292.4 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208z\"]\n};\nconst faPaypal = {\n  prefix: 'fab',\n  iconName: 'paypal',\n  icon: [384, 512, [], \"f1ed\", \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"]\n};\nconst faGitlab = {\n  prefix: 'fab',\n  iconName: 'gitlab',\n  icon: [512, 512, [], \"f296\", \"M503.5 204.6L502.8 202.8L433.1 21.02C431.7 17.45 429.2 14.43 425.9 12.38C423.5 10.83 420.8 9.865 417.9 9.57C415 9.275 412.2 9.653 409.5 10.68C406.8 11.7 404.4 13.34 402.4 15.46C400.5 17.58 399.1 20.13 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.13 111.5 17.59 109.6 15.47C107.6 13.35 105.2 11.72 102.5 10.7C99.86 9.675 96.98 9.295 94.12 9.587C91.26 9.878 88.51 10.83 86.08 12.38C82.84 14.43 80.33 17.45 78.92 21.02L9.267 202.8L8.543 204.6C-1.484 230.8-2.72 259.6 5.023 286.6C12.77 313.5 29.07 337.3 51.47 354.2L51.74 354.4L52.33 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z\"]\n};\nconst faTypo3 = {\n  prefix: 'fab',\n  iconName: 'typo3',\n  icon: [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"]\n};\nconst faRedditAlien = {\n  prefix: 'fab',\n  iconName: 'reddit-alien',\n  icon: [512, 512, [], \"f281\", \"M373 138.6c-25.2 0-46.3-17.5-51.9-41l0 0c-30.6 4.3-54.2 30.7-54.2 62.4l0 .2c47.4 1.8 90.6 15.1 124.9 36.3c12.6-9.7 28.4-15.5 45.5-15.5c41.3 0 74.7 33.4 74.7 74.7c0 29.8-17.4 55.5-42.7 67.5c-2.4 86.8-97 156.6-213.2 156.6S45.5 410.1 43 323.4C17.6 311.5 0 285.7 0 255.7c0-41.3 33.4-74.7 74.7-74.7c17.2 0 33 5.8 45.7 15.6c34-21.1 76.8-34.4 123.7-36.4l0-.3c0-44.3 33.7-80.9 76.8-85.5C325.8 50.2 347.2 32 373 32c29.4 0 53.3 23.9 53.3 53.3s-23.9 53.3-53.3 53.3zM157.5 255.3c-20.9 0-38.9 20.8-40.2 47.9s17.1 38.1 38 38.1s36.6-9.8 37.8-36.9s-14.7-49.1-35.7-49.1zM395 303.1c-1.2-27.1-19.2-47.9-40.2-47.9s-36.9 22-35.7 49.1c1.2 27.1 16.9 36.9 37.8 36.9s39.3-11 38-38.1zm-60.1 70.8c1.5-3.6-1-7.7-4.9-8.1c-23-2.3-47.9-3.6-73.8-3.6s-50.8 1.3-73.8 3.6c-3.9 .4-6.4 4.5-4.9 8.1c12.9 30.8 43.3 52.4 78.7 52.4s65.8-21.6 78.7-52.4z\"]\n};\nconst faYahoo = {\n  prefix: 'fab',\n  iconName: 'yahoo',\n  icon: [512, 512, [], \"f19e\", \"M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z\"]\n};\nconst faDailymotion = {\n  prefix: 'fab',\n  iconName: 'dailymotion',\n  icon: [448, 512, [], \"e052\", \"M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z\"]\n};\nconst faAffiliatetheme = {\n  prefix: 'fab',\n  iconName: 'affiliatetheme',\n  icon: [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\"]\n};\nconst faPiedPiperPp = {\n  prefix: 'fab',\n  iconName: 'pied-piper-pp',\n  icon: [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"]\n};\nconst faBootstrap = {\n  prefix: 'fab',\n  iconName: 'bootstrap',\n  icon: [576, 512, [], \"f836\", \"M333.5,201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4,238.2,333.5,225,333.5,201.4z M517,188.6 c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1,0-55.8,28.1-54.7,58.5c1,29.3-0.3,67.2-9.8,98.1 c-9.6,31-25.7,50.6-52.2,53.1v28.5c26.4,2.5,42.6,22.1,52.2,53.1c9.5,30.9,10.9,68.8,9.8,98.1c-1.1,30.5,22.7,58.5,54.7,58.5h328.7 c32.1,0,55.8-28.1,54.7-58.5c-1-29.3,0.3-67.2,9.8-98.1c9.6-31,25.7-50.6,52.1-53.1v-28.5C542.7,239.2,526.5,219.6,517,188.6z M300.2,375.1h-97.9V136.8h97.4c43.3,0,71.7,23.4,71.7,59.4c0,25.3-19.1,47.9-43.5,51.8v1.3c33.2,3.6,55.5,26.6,55.5,58.3 C383.4,349.7,352.1,375.1,300.2,375.1z M290.2,266.4h-50.1v78.4h52.3c34.2,0,52.3-13.7,52.3-39.5 C344.7,279.6,326.1,266.4,290.2,266.4z\"]\n};\nconst faOdnoklassniki = {\n  prefix: 'fab',\n  iconName: 'odnoklassniki',\n  icon: [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"]\n};\nconst faNfcSymbol = {\n  prefix: 'fab',\n  iconName: 'nfc-symbol',\n  icon: [576, 512, [], \"e531\", \"M392.9 32.43C400.6 31.1 408.6 32.89 414.1 37.41C498.2 96.14 544 173.7 544 255.1C544 338.2 498.2 415.9 414.1 474.6C409.3 478.6 402.4 480.5 395.5 479.9C388.5 479.3 382 476.3 377.1 471.4L193.7 288.7C188.1 283.2 185 275.7 184.1 267.8C184.1 260 188.1 252.5 193.6 246.9C199.2 241.4 206.7 238.2 214.5 238.2C222.4 238.2 229.9 241.3 235.4 246.8L400.5 411.2C455.1 366.5 484.8 312 484.8 255.1C484.8 193.5 447.9 132.9 380.9 85.76C374.5 81.24 370.1 74.35 368.8 66.62C367.4 58.89 369.2 50.94 373.8 44.53C378.3 38.12 385.2 33.77 392.9 32.43V32.43zM186.9 479.6C179.2 480.9 171.3 479.1 164.8 474.6C81.67 415.9 35.84 338.2 35.84 255.1C35.84 173.7 81.67 96.14 164.8 37.41C170.5 33.4 177.4 31.53 184.4 32.12C191.3 32.71 197.8 35.72 202.7 40.63L386.1 223.3C391.7 228.8 394.8 236.3 394.8 244.2C394.9 251.1 391.8 259.5 386.2 265.1C380.7 270.6 373.2 273.8 365.3 273.8C357.5 273.8 349.1 270.7 344.4 265.2L179.3 100.7C124.7 145.9 95.03 199.9 95.03 255.1C95.03 318.5 131.9 379.1 198.1 426.2C205.4 430.8 209.7 437.6 211.1 445.4C212.4 453.1 210.6 461.1 206.1 467.5C201.6 473.9 194.7 478.2 186.9 479.6V479.6z\"]\n};\nconst faMintbit = {\n  prefix: 'fab',\n  iconName: 'mintbit',\n  icon: [512, 512, [], \"e62f\", \"M73.2 512V438.9H365.7V365.7h73.2V219.4H512V0H292.6V73.1H146.3v73.2H73.2V438.9H0V512H73.2zm73.1-219.4h73.2v73.1H146.3V292.6zm73.2-73.1h73.1v73.1H219.4V219.4zm73.1 0V146.3h73.2v73.1H292.6zM365.7 73.1h73.2v73.2H365.7V73.1z\"]\n};\nconst faEthereum = {\n  prefix: 'fab',\n  iconName: 'ethereum',\n  icon: [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"]\n};\nconst faSpeakerDeck = {\n  prefix: 'fab',\n  iconName: 'speaker-deck',\n  icon: [512, 512, [], \"f83c\", \"M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"]\n};\nconst faCreativeCommonsNcEu = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-eu',\n  icon: [496, 512, [], \"f4e9\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"]\n};\nconst faPatreon = {\n  prefix: 'fab',\n  iconName: 'patreon',\n  icon: [512, 512, [], \"f3d9\", \"M489.7 153.8c-.1-65.4-51-119-110.7-138.3C304.8-8.5 207-5 136.1 28.4C50.3 68.9 23.3 157.7 22.3 246.2C21.5 319 28.7 510.6 136.9 512c80.3 1 92.3-102.5 129.5-152.3c26.4-35.5 60.5-45.5 102.4-55.9c72-17.8 121.1-74.7 121-150z\"]\n};\nconst faAvianex = {\n  prefix: 'fab',\n  iconName: 'avianex',\n  icon: [512, 512, [], \"f374\", \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"]\n};\nconst faEllo = {\n  prefix: 'fab',\n  iconName: 'ello',\n  icon: [496, 512, [], \"f5f1\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"]\n};\nconst faGofore = {\n  prefix: 'fab',\n  iconName: 'gofore',\n  icon: [400, 512, [], \"f3a7\", \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"]\n};\nconst faBimobject = {\n  prefix: 'fab',\n  iconName: 'bimobject',\n  icon: [448, 512, [], \"f378\", \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"]\n};\nconst faBraveReverse = {\n  prefix: 'fab',\n  iconName: 'brave-reverse',\n  icon: [448, 512, [], \"e63d\", \"M298 0c3 0 5.8 1.3 7.8 3.6l38.1 44c.5-.1 1-.2 1.5-.3c9.2-1.6 18.6-2.2 27.7-1.2c11.6 1.4 21.5 5.4 28.9 12.9c7.7 7.8 15.4 15.8 22.6 23.6c2.5 2.7 4.9 5.2 6.9 7.4c.7 .8 1.4 1.5 1.9 2c3.4 3.7 4.2 8.1 2.7 11.9l-9.8 24.6 13.1 38.1c.7 2 .8 4.1 .2 6.2c-.1 .4-.1 .4-.5 2.1c-.6 2.3-.6 2.3-1.5 5.8c-1.6 6.3-3.5 13.3-5.4 20.9c-5.6 21.6-11.2 43.2-16.4 63.4c-12.9 49.9-21.4 82.7-23.4 90.9c-11.1 44.5-19.9 60-48.3 80.3c-24.9 17.8-76.8 53.6-86.8 60c-1 .6-2 1.3-3.4 2.3c-.5 .4-3.2 2.2-3.9 2.7c-4.9 3.3-8.3 5.5-12.1 7.3c-4.7 2.2-9.3 3.5-13.9 3.5s-9.1-1.2-13.9-3.5c-3.7-1.8-7.2-3.9-12.1-7.3c-.8-.5-3.4-2.4-3.9-2.7c-1.4-1-2.5-1.7-3.4-2.3c-10-6.4-61.9-42.1-86.8-60c-28.4-20.4-37.2-35.8-48.3-80.3c-2-8.2-10.5-41-23.3-90.5c-5.3-20.6-10.9-42.2-16.5-63.8c-2-7.6-3.8-14.6-5.4-20.9c-.9-3.5-.9-3.5-1.5-5.8c-.4-1.7-.4-1.7-.5-2.1c-.5-2-.4-4.2 .2-6.2l13.1-38.1L11.8 104c-1.5-3.8-.7-8.2 2-11.2c1.2-1.3 1.8-2 2.6-2.8c2-2.2 4.4-4.7 6.9-7.4C30.6 74.9 38.3 66.9 46 59.1c7.4-7.5 17.3-11.6 28.9-12.9c9.1-1.1 18.5-.5 27.7 1.2c.5 .1 1 .2 1.5 .3l38.1-44C144.2 1.3 147 0 150 0H298zm-4.7 21.1H154.7L115.6 66.2c-2.6 3-6.7 4.3-10.6 3.2c-.2-.1-.7-.2-1.5-.4c-1.3-.3-2.9-.6-4.5-.9c-7.4-1.3-14.9-1.8-21.7-1C70 68 64.3 70.3 60.7 74c-7.6 7.7-15.2 15.6-22.3 23.3c-1.7 1.8-3.3 3.5-4.8 5.1l8.8 22c1 2.4 1 5 .2 7.5L29.2 170.6c.4 1.4 .5 1.9 1.2 4.8c1.6 6.3 3.5 13.3 5.4 20.9c5.6 21.6 11.2 43.2 16.4 63.4c12.9 50 21.4 82.8 23.4 91C85.7 390.8 92 402 115.8 419c24.6 17.6 76.3 53.2 85.9 59.3c1.2 .8 2.5 1.6 4 2.7c.6 .4 3.2 2.2 3.9 2.7c4 2.8 6.7 4.4 9.2 5.6c2.2 1 3.9 1.5 5.1 1.5s2.9-.5 5.1-1.5c2.5-1.2 5.2-2.8 9.2-5.6c.7-.5 3.3-2.3 3.9-2.7c1.6-1.1 2.8-1.9 4-2.7c9.6-6.1 61.3-41.7 85.9-59.3c23.8-17.1 30.2-28.2 40.1-68.3c2.1-8.3 10.5-41.1 23.3-90.7c5.3-20.6 10.9-42.2 16.5-63.8c2-7.6 3.8-14.6 5.4-20.9c.7-2.9 .9-3.4 1.2-4.8l-13.3-38.8c-.8-2.4-.8-5.1 .2-7.5l8.8-22c-1.5-1.6-3.1-3.3-4.8-5.1c-7.2-7.6-14.7-15.5-22.3-23.3c-3.7-3.7-9.3-6-16.6-6.9c-6.8-.8-14.4-.3-21.7 1c-1.7 .3-3.2 .6-4.5 .9c-.8 .2-1.3 .3-1.5 .4c-3.8 1.1-7.9-.2-10.6-3.2L293.3 21.1zM224 316c2.8 0 20.9 6.5 35.4 14.1s25 13 28.3 15.2s1.3 6.2-1.7 8.4s-44.1 34.6-48.1 38.2s-9.8 9.5-13.8 9.5s-9.8-5.9-13.8-9.5s-45.1-36-48.1-38.2s-5.1-6.2-1.7-8.4s13.9-7.5 28.3-15.2s32.5-14.1 35.4-14.1zm.1-230.7c.7 0 8.8 .2 20.5 4.2c12.3 4.2 25.7 9.4 31.9 9.4s51.9-8.9 51.9-8.9s54.2 66.7 54.2 81s-6.8 18-13.7 25.4s-36.8 39.8-40.7 43.9s-11.9 10.5-7.1 21.8s11.7 25.8 3.9 40.4s-21 24.4-29.4 22.8s-28.4-12.2-35.7-17.1s-30.5-24.3-30.5-31.8s24-20.8 28.4-23.9s24.7-14.8 25.1-19.4s.3-6-5.7-17.4s-16.7-26.7-14.9-36.8s19.1-15.4 31.5-20.2s36.2-13.7 39.2-15.1s2.2-2.7-6.8-3.6s-34.6-4.3-46.1-1.1s-31.2 8.2-32.8 10.9s-3 2.7-1.4 11.8s10.1 52.8 10.9 60.6s2.4 12.9-5.8 14.8s-22.1 5.2-26.8 5.2s-18.6-3.3-26.8-5.2s-6.6-7-5.8-14.8s9.3-51.5 10.9-60.6s.2-9.2-1.4-11.8s-21.3-7.6-32.8-10.9s-37.1 .2-46.1 1.1s-9.8 2.2-6.8 3.6s26.8 10.4 39.2 15.1s29.7 10 31.5 20.2s-9 25.4-14.9 36.8s-6.1 12.8-5.7 17.4s20.6 16.4 25.1 19.4s28.4 16.4 28.4 23.9s-23.2 27-30.5 31.8s-27.2 15.4-35.7 17.1s-21.7-8.2-29.4-22.8s-.8-29.1 3.9-40.4s-3.3-17.7-7.1-21.8s-33.8-36.5-40.7-43.9s-13.7-11.2-13.7-25.4s54.2-81 54.2-81s45.8 8.9 51.9 8.9s19.5-5.2 31.9-9.4s20.6-4.2 20.6-4.2l.1 0z\"]\n};\nconst faFacebookF = {\n  prefix: 'fab',\n  iconName: 'facebook-f',\n  icon: [320, 512, [], \"f39e\", \"M80 299.3V512H196V299.3h86.5l18-97.8H196V166.9c0-51.7 20.3-71.5 72.7-71.5c16.3 0 29.4 .4 37 1.2V7.9C291.4 4 256.4 0 236.2 0C129.3 0 80 50.5 80 159.4v42.1H14v97.8H80z\"]\n};\nconst faSquareGooglePlus = {\n  prefix: 'fab',\n  iconName: 'square-google-plus',\n  icon: [448, 512, [\"google-plus-square\"], \"f0d4\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM64 256c0-55.3 44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4c-34.1 0-61.9 28.2-61.9 63.2c0 34.9 27.8 63.2 61.9 63.2c39.6 0 54.4-28.5 56.8-43.1H164V241.8h94.4c1 5 1.6 10.1 1.6 16.6c0 57.1-38.3 97.6-96 97.6c-55.3 0-100-44.7-100-100zm291 18.2v29H325.8v-29h-29V245h29V216H355v29h29v29.2H355z\"]\n};\nconst faGooglePlusSquare = faSquareGooglePlus;\nconst faWebAwesome = {\n  prefix: 'fab',\n  iconName: 'web-awesome',\n  icon: [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192l104.4-20.9c-5.3-7.7-8.4-17.1-8.4-27.1c0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144c0-26.5 21.5-48 48-48s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1c0-28.7 23.3-52 52-52s52 23.3 52 52z\"]\n};\nconst faMandalorian = {\n  prefix: 'fab',\n  iconName: 'mandalorian',\n  icon: [448, 512, [], \"f50f\", \"M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z\"]\n};\nconst faFirstOrderAlt = {\n  prefix: 'fab',\n  iconName: 'first-order-alt',\n  icon: [496, 512, [], \"f50a\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"]\n};\nconst faOsi = {\n  prefix: 'fab',\n  iconName: 'osi',\n  icon: [512, 512, [], \"f41a\", \"M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"]\n};\nconst faGoogleWallet = {\n  prefix: 'fab',\n  iconName: 'google-wallet',\n  icon: [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"]\n};\nconst faDAndDBeyond = {\n  prefix: 'fab',\n  iconName: 'd-and-d-beyond',\n  icon: [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"]\n};\nconst faPeriscope = {\n  prefix: 'fab',\n  iconName: 'periscope',\n  icon: [448, 512, [], \"f3da\", \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"]\n};\nconst faFulcrum = {\n  prefix: 'fab',\n  iconName: 'fulcrum',\n  icon: [320, 512, [], \"f50b\", \"M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z\"]\n};\nconst faCloudscale = {\n  prefix: 'fab',\n  iconName: 'cloudscale',\n  icon: [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"]\n};\nconst faForumbee = {\n  prefix: 'fab',\n  iconName: 'forumbee',\n  icon: [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"]\n};\nconst faMizuni = {\n  prefix: 'fab',\n  iconName: 'mizuni',\n  icon: [496, 512, [], \"f3cc\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"]\n};\nconst faSchlix = {\n  prefix: 'fab',\n  iconName: 'schlix',\n  icon: [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"]\n};\nconst faSquareXing = {\n  prefix: 'fab',\n  iconName: 'square-xing',\n  icon: [448, 512, [\"xing-square\"], \"f169\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM93.8 320.2c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6 .2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2c-3.5 6.2-7.7 9.1-12.6 9.1H93.8zm163.5-33.4v.2l65.5 119c2.8 5.1 .1 10.1-6 10.1H270.2c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c1.8-3.2 22.9-40.4 63.3-111.6c11.7-20.7 25.1-44.3 40.1-70.8c3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10L257.3 286.8z\"]\n};\nconst faXingSquare = faSquareXing;\nconst faBandcamp = {\n  prefix: 'fab',\n  iconName: 'bandcamp',\n  icon: [512, 512, [], \"f2d5\", \"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z\"]\n};\nconst faWpforms = {\n  prefix: 'fab',\n  iconName: 'wpforms',\n  icon: [448, 512, [], \"f298\", \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"]\n};\nconst faCloudversify = {\n  prefix: 'fab',\n  iconName: 'cloudversify',\n  icon: [616, 512, [], \"f385\", \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"]\n};\nconst faUsps = {\n  prefix: 'fab',\n  iconName: 'usps',\n  icon: [576, 512, [], \"f7e1\", \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"]\n};\nconst faMegaport = {\n  prefix: 'fab',\n  iconName: 'megaport',\n  icon: [496, 512, [], \"f5a3\", \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"]\n};\nconst faMagento = {\n  prefix: 'fab',\n  iconName: 'magento',\n  icon: [448, 512, [], \"f3c4\", \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"]\n};\nconst faSpotify = {\n  prefix: 'fab',\n  iconName: 'spotify',\n  icon: [496, 512, [], \"f1bc\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"]\n};\nconst faOptinMonster = {\n  prefix: 'fab',\n  iconName: 'optin-monster',\n  icon: [576, 512, [], \"f23c\", \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z\"]\n};\nconst faFly = {\n  prefix: 'fab',\n  iconName: 'fly',\n  icon: [384, 512, [], \"f417\", \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"]\n};\nconst faSquareBluesky = {\n  prefix: 'fab',\n  iconName: 'square-bluesky',\n  icon: [448, 512, [], \"e6a3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 247.4c14.5-30 54-85.8 90.7-113.3c26.5-19.9 69.3-35.2 69.3 13.7c0 9.8-5.6 82.1-8.9 93.8c-11.4 40.8-53 51.2-90 44.9c64.7 11 81.2 47.5 45.6 84c-67.5 69.3-97-17.4-104.6-39.6c0 0 0 0 0 0l-.3-.9c-.9-2.6-1.4-4.1-1.8-4.1s-.9 1.5-1.8 4.1c-.1 .3-.2 .6-.3 .9c0 0 0 0 0 0c-7.6 22.2-37.1 108.8-104.6 39.6c-35.5-36.5-19.1-73 45.6-84c-37 6.3-78.6-4.1-90-44.9c-3.3-11.7-8.9-84-8.9-93.8c0-48.9 42.9-33.5 69.3-13.7c36.7 27.5 76.2 83.4 90.7 113.3z\"]\n};\nconst faAviato = {\n  prefix: 'fab',\n  iconName: 'aviato',\n  icon: [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"]\n};\nconst faItunes = {\n  prefix: 'fab',\n  iconName: 'itunes',\n  icon: [448, 512, [], \"f3b4\", \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"]\n};\nconst faCuttlefish = {\n  prefix: 'fab',\n  iconName: 'cuttlefish',\n  icon: [440, 512, [], \"f38c\", \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"]\n};\nconst faBlogger = {\n  prefix: 'fab',\n  iconName: 'blogger',\n  icon: [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"]\n};\nconst faFlickr = {\n  prefix: 'fab',\n  iconName: 'flickr',\n  icon: [448, 512, [], \"f16e\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"]\n};\nconst faViber = {\n  prefix: 'fab',\n  iconName: 'viber',\n  icon: [512, 512, [], \"f409\", \"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"]\n};\nconst faSoundcloud = {\n  prefix: 'fab',\n  iconName: 'soundcloud',\n  icon: [640, 512, [], \"f1be\", \"M639.8 298.6c-1.3 23.1-11.5 44.8-28.4 60.5s-39.2 24.4-62.3 24.1h-218c-4.8 0-9.4-2-12.8-5.4s-5.3-8-5.3-12.8V130.2c-.2-4 .9-8 3.1-11.4s5.3-6.1 9-7.7c0 0 20.1-13.9 62.3-13.9c25.8 0 51.1 6.9 73.3 20.1c17.3 10.2 32.3 23.8 44.1 40.1s20 34.8 24.2 54.4c7.5-2.1 15.3-3.2 23.1-3.2c11.7-.1 23.3 2.2 34.2 6.7S606.8 226.6 615 235s14.6 18.3 18.9 29.3s6.3 22.6 5.9 34.3zm-354-153.5c.1-1 0-2-.3-2.9s-.8-1.8-1.5-2.6s-1.5-1.3-2.4-1.7s-1.9-.6-2.9-.6s-2 .2-2.9 .6s-1.7 1-2.4 1.7s-1.2 1.6-1.5 2.6s-.4 1.9-.3 2.9c-6 78.9-10.6 152.9 0 231.6c.2 1.7 1 3.3 2.3 4.5s3 1.8 4.7 1.8s3.4-.6 4.7-1.8s2.1-2.8 2.3-4.5c11.3-79.4 6.6-152 0-231.6zm-44 27.3c-.2-1.8-1.1-3.5-2.4-4.7s-3.1-1.9-5-1.9s-3.6 .7-5 1.9s-2.2 2.9-2.4 4.7c-7.9 67.9-7.9 136.5 0 204.4c.3 1.8 1.2 3.4 2.5 4.5s3.1 1.8 4.8 1.8s3.5-.6 4.8-1.8s2.2-2.8 2.5-4.5c8.8-67.8 8.8-136.5 .1-204.4zm-44.3-6.9c-.2-1.8-1-3.4-2.3-4.6s-3-1.8-4.8-1.8s-3.5 .7-4.8 1.8s-2.1 2.8-2.3 4.6c-6.7 72-10.2 139.3 0 211.1c0 1.9 .7 3.7 2.1 5s3.1 2.1 5 2.1s3.7-.7 5-2.1s2.1-3.1 2.1-5c10.5-72.8 7.3-138.2 .1-211.1zm-44 20.6c0-1.9-.8-3.8-2.1-5.2s-3.2-2.1-5.2-2.1s-3.8 .8-5.2 2.1s-2.1 3.2-2.1 5.2c-8.1 63.3-8.1 127.5 0 190.8c.2 1.8 1 3.4 2.4 4.6s3.1 1.9 4.8 1.9s3.5-.7 4.8-1.9s2.2-2.8 2.4-4.6c8.8-63.3 8.9-127.5 .3-190.8zM109 233.7c0-1.9-.8-3.8-2.1-5.1s-3.2-2.1-5.1-2.1s-3.8 .8-5.1 2.1s-2.1 3.2-2.1 5.1c-10.5 49.2-5.5 93.9 .4 143.6c.3 1.6 1.1 3.1 2.3 4.2s2.8 1.7 4.5 1.7s3.2-.6 4.5-1.7s2.1-2.5 2.3-4.2c6.6-50.4 11.6-94.1 .4-143.6zm-44.1-7.5c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9s-3.6 .7-5 1.9s-2.2 2.9-2.4 4.8c-9.3 50.2-6.2 94.4 .3 144.5c.7 7.6 13.6 7.5 14.4 0c7.2-50.9 10.5-93.8 .3-144.5zM20.3 250.8c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9s-3.6 .7-5 1.9s-2.3 2.9-2.4 4.8c-8.5 33.7-5.9 61.6 .6 95.4c.2 1.7 1 3.3 2.3 4.4s2.9 1.8 4.7 1.8s3.4-.6 4.7-1.8s2.1-2.7 2.3-4.4c7.5-34.5 11.2-61.8 .4-95.4z\"]\n};\nconst faDigg = {\n  prefix: 'fab',\n  iconName: 'digg',\n  icon: [512, 512, [], \"f1a6\", \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"]\n};\nconst faTencentWeibo = {\n  prefix: 'fab',\n  iconName: 'tencent-weibo',\n  icon: [384, 512, [], \"f1d5\", \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"]\n};\nconst faLetterboxd = {\n  prefix: 'fab',\n  iconName: 'letterboxd',\n  icon: [640, 512, [], \"e62d\", \"M521.3 128C586.9 128 640 181.1 640 246.6s-53.1 118.6-118.7 118.6c-42.5 0-79.7-22.3-100.7-55.8c11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l0 0 .8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zM320 128c42.5 0 79.7 22.3 100.7 55.8c-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l0 0-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0c-42.5 0-79.7-22.3-100.7-55.8c11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l0 0 .8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zm-201.3 0c42.5 0 79.7 22.3 100.7 55.8c-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l0 0-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0C53.1 365.1 0 312.1 0 246.6S53.1 128 118.7 128z\"]\n};\nconst faSymfony = {\n  prefix: 'fab',\n  iconName: 'symfony',\n  icon: [512, 512, [], \"f83d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z\"]\n};\nconst faMaxcdn = {\n  prefix: 'fab',\n  iconName: 'maxcdn',\n  icon: [512, 512, [], \"f136\", \"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"]\n};\nconst faEtsy = {\n  prefix: 'fab',\n  iconName: 'etsy',\n  icon: [384, 512, [], \"f2d7\", \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\"]\n};\nconst faFacebookMessenger = {\n  prefix: 'fab',\n  iconName: 'facebook-messenger',\n  icon: [512, 512, [], \"f39f\", \"M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\"]\n};\nconst faAudible = {\n  prefix: 'fab',\n  iconName: 'audible',\n  icon: [640, 512, [], \"f373\", \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"]\n};\nconst faThinkPeaks = {\n  prefix: 'fab',\n  iconName: 'think-peaks',\n  icon: [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z\"]\n};\nconst faBilibili = {\n  prefix: 'fab',\n  iconName: 'bilibili',\n  icon: [512, 512, [], \"e3d9\", \"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\"]\n};\nconst faErlang = {\n  prefix: 'fab',\n  iconName: 'erlang',\n  icon: [640, 512, [], \"f39d\", \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"]\n};\nconst faXTwitter = {\n  prefix: 'fab',\n  iconName: 'x-twitter',\n  icon: [512, 512, [], \"e61b\", \"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"]\n};\nconst faCottonBureau = {\n  prefix: 'fab',\n  iconName: 'cotton-bureau',\n  icon: [512, 512, [], \"f89e\", \"M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\"]\n};\nconst faDashcube = {\n  prefix: 'fab',\n  iconName: 'dashcube',\n  icon: [448, 512, [], \"f210\", \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"]\n};\nconst fa42Group = {\n  prefix: 'fab',\n  iconName: '42-group',\n  icon: [640, 512, [\"innosoft\"], \"e080\", \"M320 96V416C341.011 416 361.818 411.861 381.23 403.821C400.641 395.78 418.28 383.995 433.138 369.138C447.995 354.28 459.78 336.641 467.821 317.23C475.861 297.818 480 277.011 480 256C480 234.989 475.861 214.182 467.821 194.771C459.78 175.359 447.995 157.72 433.138 142.863C418.28 128.005 400.641 116.22 381.23 108.179C361.818 100.139 341.011 96 320 96ZM0 256L160.002 416L320.003 256L160.002 96L0 256ZM480 256C480 277.011 484.138 297.818 492.179 317.23C500.219 336.643 512.005 354.28 526.862 369.138C541.72 383.995 559.357 395.781 578.77 403.821C598.182 411.862 618.989 416 640 416V96C597.565 96 556.869 112.858 526.862 142.863C496.857 172.869 480 213.565 480 256Z\"]\n};\nconst faInnosoft = fa42Group;\nconst faStackExchange = {\n  prefix: 'fab',\n  iconName: 'stack-exchange',\n  icon: [448, 512, [], \"f18d\", \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"]\n};\nconst faElementor = {\n  prefix: 'fab',\n  iconName: 'elementor',\n  icon: [512, 512, [], \"f430\", \"M.361 256C.361 397 114 511 255 511C397 511 511 397 511 256C511 116 397 2.05 255 2.05C114 2.05 .361 116 .361 256zM192 150V363H149V150H192zM234 150H362V193H234V150zM362 235V278H234V235H362zM234 320H362V363H234V320z\"]\n};\nconst faSquarePiedPiper = {\n  prefix: 'fab',\n  iconName: 'square-pied-piper',\n  icon: [448, 512, [\"pied-piper-square\"], \"e01e\", \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"]\n};\nconst faPiedPiperSquare = faSquarePiedPiper;\nconst faCreativeCommonsNd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nd',\n  icon: [496, 512, [], \"f4eb\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"]\n};\nconst faPalfed = {\n  prefix: 'fab',\n  iconName: 'palfed',\n  icon: [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"]\n};\nconst faSuperpowers = {\n  prefix: 'fab',\n  iconName: 'superpowers',\n  icon: [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"]\n};\nconst faResolving = {\n  prefix: 'fab',\n  iconName: 'resolving',\n  icon: [496, 512, [], \"f3e7\", \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"]\n};\nconst faXbox = {\n  prefix: 'fab',\n  iconName: 'xbox',\n  icon: [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"]\n};\nconst faSquareWebAwesomeStroke = {\n  prefix: 'fab',\n  iconName: 'square-web-awesome-stroke',\n  icon: [448, 512, [], \"e684\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm235 81.6L288 224l52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6c0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224C74.3 223.6 64 213 64 200c0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224l53.1-46.4c-8.9-4.1-15-13.1-15-23.6c0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"]\n};\nconst faSearchengin = {\n  prefix: 'fab',\n  iconName: 'searchengin',\n  icon: [460, 512, [], \"f3eb\", \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"]\n};\nconst faTiktok = {\n  prefix: 'fab',\n  iconName: 'tiktok',\n  icon: [448, 512, [], \"e07b\", \"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\"]\n};\nconst faSquareFacebook = {\n  prefix: 'fab',\n  iconName: 'square-facebook',\n  icon: [448, 512, [\"facebook-square\"], \"f082\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64h98.2V334.2H109.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H255V480H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"]\n};\nconst faFacebookSquare = faSquareFacebook;\nconst faRenren = {\n  prefix: 'fab',\n  iconName: 'renren',\n  icon: [512, 512, [], \"f18b\", \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"]\n};\nconst faLinux = {\n  prefix: 'fab',\n  iconName: 'linux',\n  icon: [448, 512, [], \"f17c\", \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"]\n};\nconst faGlide = {\n  prefix: 'fab',\n  iconName: 'glide',\n  icon: [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\"]\n};\nconst faLinkedin = {\n  prefix: 'fab',\n  iconName: 'linkedin',\n  icon: [448, 512, [], \"f08c\", \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"]\n};\nconst faHubspot = {\n  prefix: 'fab',\n  iconName: 'hubspot',\n  icon: [512, 512, [], \"f3b2\", \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"]\n};\nconst faDeploydog = {\n  prefix: 'fab',\n  iconName: 'deploydog',\n  icon: [512, 512, [], \"f38e\", \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"]\n};\nconst faTwitch = {\n  prefix: 'fab',\n  iconName: 'twitch',\n  icon: [512, 512, [], \"f1e8\", \"M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z\"]\n};\nconst faFlutter = {\n  prefix: 'fab',\n  iconName: 'flutter',\n  icon: [448, 512, [], \"e694\", \"M429.5 236.3L291.7 374.1 429.5 512H272l-59.1-59.1-78.8-78.8L272 236.3H429.5zM272 0L16 256l78.8 78.8L429.5 0H272z\"]\n};\nconst faRavelry = {\n  prefix: 'fab',\n  iconName: 'ravelry',\n  icon: [512, 512, [], \"f2d9\", \"M498.252,234.223c-1.208-10.34-1.7-20.826-3.746-31a310.306,310.306,0,0,0-9.622-36.6,184.068,184.068,0,0,0-30.874-57.5,251.154,251.154,0,0,0-18.818-21.689,237.362,237.362,0,0,0-47.113-36.116A240.8,240.8,0,0,0,331.356,26.65c-11.018-3.1-22.272-5.431-33.515-7.615-6.78-1.314-13.749-1.667-20.627-2.482-.316-.036-.6-.358-.9-.553q-16.143.009-32.288.006c-2.41.389-4.808.925-7.236,1.15a179.331,179.331,0,0,0-34.256,7.1,221.5,221.5,0,0,0-39.768,16.355,281.385,281.385,0,0,0-38.08,24.158c-6.167,4.61-12.268,9.36-17.974,14.518C96.539,88.494,86.34,97.72,76.785,107.555a243.878,243.878,0,0,0-33.648,43.95,206.488,206.488,0,0,0-20.494,44.6,198.2,198.2,0,0,0-7.691,34.759A201.13,201.13,0,0,0,13.4,266.385a299.716,299.716,0,0,0,4.425,40.24,226.865,226.865,0,0,0,16.73,53.3,210.543,210.543,0,0,0,24,39.528,213.589,213.589,0,0,0,26.358,28.416A251.313,251.313,0,0,0,126.7,458.455a287.831,287.831,0,0,0,55.9,25.277,269.5,269.5,0,0,0,40.641,9.835c6.071,1.01,12.275,1.253,18.412,1.873a4.149,4.149,0,0,1,1.19.56h32.289c2.507-.389,5-.937,7.527-1.143,16.336-1.332,32.107-5.335,47.489-10.717A219.992,219.992,0,0,0,379.1,460.322c9.749-6.447,19.395-13.077,28.737-20.1,5.785-4.348,10.988-9.5,16.3-14.457,3.964-3.7,7.764-7.578,11.51-11.5a232.162,232.162,0,0,0,31.427-41.639c9.542-16.045,17.355-32.905,22.3-50.926,2.859-10.413,4.947-21.045,7.017-31.652,1.032-5.279,1.251-10.723,1.87-16.087.036-.317.358-.6.552-.9V236.005A9.757,9.757,0,0,1,498.252,234.223Zm-161.117-1.15s-16.572-2.98-28.47-2.98c-27.2,0-33.57,14.9-33.57,37.04V360.8H201.582V170.062H275.1v31.931c8.924-26.822,26.771-36.189,62.04-36.189Z\"]\n};\nconst faMixer = {\n  prefix: 'fab',\n  iconName: 'mixer',\n  icon: [512, 512, [], \"e056\", \"M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z\"]\n};\nconst faSquareLastfm = {\n  prefix: 'fab',\n  iconName: 'square-lastfm',\n  icon: [448, 512, [\"lastfm-square\"], \"f203\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM210.7 280.8c-1.8-5.5-3.4-10.8-5-15.9c-12.9-41.9-21-68.4-58-68.4c-22.4 0-45.1 16.1-45.1 61.2c0 35.2 18 57.2 43.3 57.2c28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8c0-57.9 28.6-92 82.5-92c67.9 0 79.3 35.3 96.4 88.4c1.4 4.4 2.9 8.9 4.4 13.5c8.8 26.8 24.2 46.2 61.2 46.2c24.9 0 38.1-5.5 38.1-19.1c0-17.5-16.9-21.2-40-26.4c-3.2-.7-6.5-1.4-9.9-2.2c-30.4-7.3-42.5-23.1-42.5-48c0-40 32.3-52.4 65.2-52.4c37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4c-16.1 0-26 7.3-26 19.8c0 11 4.8 17.6 20.9 21.3c2.2 .5 4.5 1 6.7 1.4c31.1 6.5 65.1 13.7 65.1 56.1c.1 36.7-30.7 50.6-76.1 50.6c-63.4 0-85.4-28.6-97.1-64.1z\"]\n};\nconst faLastfmSquare = faSquareLastfm;\nconst faVimeo = {\n  prefix: 'fab',\n  iconName: 'vimeo',\n  icon: [448, 512, [], \"f40a\", \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\"]\n};\nconst faMendeley = {\n  prefix: 'fab',\n  iconName: 'mendeley',\n  icon: [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"]\n};\nconst faUniregistry = {\n  prefix: 'fab',\n  iconName: 'uniregistry',\n  icon: [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"]\n};\nconst faFigma = {\n  prefix: 'fab',\n  iconName: 'figma',\n  icon: [384, 512, [], \"f799\", \"M14 95.7924C14 42.8877 56.8878 0 109.793 0H274.161C327.066 0 369.954 42.8877 369.954 95.7924C369.954 129.292 352.758 158.776 326.711 175.897C352.758 193.019 369.954 222.502 369.954 256.002C369.954 308.907 327.066 351.795 274.161 351.795H272.081C247.279 351.795 224.678 342.369 207.666 326.904V415.167C207.666 468.777 163.657 512 110.309 512C57.5361 512 14 469.243 14 416.207C14 382.709 31.1945 353.227 57.2392 336.105C31.1945 318.983 14 289.5 14 256.002C14 222.502 31.196 193.019 57.2425 175.897C31.196 158.776 14 129.292 14 95.7924ZM176.288 191.587H109.793C74.2172 191.587 45.3778 220.427 45.3778 256.002C45.3778 291.44 73.9948 320.194 109.381 320.416C109.518 320.415 109.655 320.415 109.793 320.415H176.288V191.587ZM207.666 256.002C207.666 291.577 236.505 320.417 272.081 320.417H274.161C309.737 320.417 338.576 291.577 338.576 256.002C338.576 220.427 309.737 191.587 274.161 191.587H272.081C236.505 191.587 207.666 220.427 207.666 256.002ZM109.793 351.795C109.655 351.795 109.518 351.794 109.381 351.794C73.9948 352.015 45.3778 380.769 45.3778 416.207C45.3778 451.652 74.6025 480.622 110.309 480.622C146.591 480.622 176.288 451.186 176.288 415.167V351.795H109.793ZM109.793 31.3778C74.2172 31.3778 45.3778 60.2173 45.3778 95.7924C45.3778 131.368 74.2172 160.207 109.793 160.207H176.288V31.3778H109.793ZM207.666 160.207H274.161C309.737 160.207 338.576 131.368 338.576 95.7924C338.576 60.2173 309.737 31.3778 274.161 31.3778H207.666V160.207Z\"]\n};\nconst faCreativeCommonsRemix = {\n  prefix: 'fab',\n  iconName: 'creative-commons-remix',\n  icon: [496, 512, [], \"f4ee\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"]\n};\nconst faCcAmazonPay = {\n  prefix: 'fab',\n  iconName: 'cc-amazon-pay',\n  icon: [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\"]\n};\nconst faDropbox = {\n  prefix: 'fab',\n  iconName: 'dropbox',\n  icon: [528, 512, [], \"f16b\", \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"]\n};\nconst faInstagram = {\n  prefix: 'fab',\n  iconName: 'instagram',\n  icon: [448, 512, [], \"f16d\", \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"]\n};\nconst faCmplid = {\n  prefix: 'fab',\n  iconName: 'cmplid',\n  icon: [640, 512, [], \"e360\", \"M226.119,388.165a3.816,3.816,0,0,0-2.294-3.5,3.946,3.946,0,0,0-1.629-.385L72.6,384.3a19.243,19.243,0,0,1-17.924-26.025L81.585,255.692a35.72,35.72,0,0,1,32.373-26H262.525a7.07,7.07,0,0,0,6.392-5.194l10.769-41.131a3.849,3.849,0,0,0-2.237-4.937,3.755,3.755,0,0,0-1.377-.261c-.063,0-.126,0-.189.005H127.38a106.8,106.8,0,0,0-96.99,77.1L3.483,358.824A57.469,57.469,0,0,0,57.314,436q1.43,0,2.86-.072H208.742a7.131,7.131,0,0,0,6.391-5.193L225.839,389.6A3.82,3.82,0,0,0,226.119,388.165ZM306.658,81.2a3.861,3.861,0,0,0,.251-1.367A3.813,3.813,0,0,0,303.079,76c-.064,0-.128,0-.192,0h-41A7.034,7.034,0,0,0,255.5,81.2l-21.347,80.915h51.131ZM180.364,368.249H231.5L263.452,245.69H212.321ZM511.853,79.723a3.809,3.809,0,0,0-3.8-3.661c-.058,0-.137,0-.23.007h-41a7.1,7.1,0,0,0-6.584,5.129L368.91,430.634a3.54,3.54,0,0,0-.262,1.335,3.873,3.873,0,0,0,3.864,3.863c.056,0,.112,0,.169,0h41a7.068,7.068,0,0,0,6.392-5.193L511.533,81.2A3.624,3.624,0,0,0,511.853,79.723ZM324.649,384.47h-41a7.2,7.2,0,0,0-6.392,5.194L266.52,430.8a3.662,3.662,0,0,0-.268,1.374A3.783,3.783,0,0,0,270.023,436c.06,0,.166,0,.3-.012h40.905a7.036,7.036,0,0,0,6.391-5.193l10.769-41.131a3.75,3.75,0,0,0-3.445-5.208c-.108,0-.217,0-.326.014Zm311.324-308.4h-41a7.066,7.066,0,0,0-6.392,5.129l-91.46,349.436a4.073,4.073,0,0,0-.229,1.347,3.872,3.872,0,0,0,3.863,3.851c.056,0,.112,0,.169,0h40.968a7.1,7.1,0,0,0,6.392-5.193L639.68,81.2a3.624,3.624,0,0,0,.32-1.475,3.841,3.841,0,0,0-3.821-3.564c-.068,0-.137,0-.206.006ZM371.562,225.236l10.8-41.1a4.369,4.369,0,0,0,.227-1.388,3.869,3.869,0,0,0-3.861-3.842c-.057,0-.113,0-.169,0h-41.1a7.292,7.292,0,0,0-6.391,5.226l-10.834,41.1a4.417,4.417,0,0,0-.26,1.493c0,.069,0,.138,0,.206a3.776,3.776,0,0,0,3.757,3.507c.076,0,.18,0,.3-.012h41.129A7.034,7.034,0,0,0,371.562,225.236Z\"]\n};\nconst faUpwork = {\n  prefix: 'fab',\n  iconName: 'upwork',\n  icon: [641, 512, [], \"e641\", \"M494.7 295.6c-50.3 0-83.5-38.9-92.8-53.9c11.9-95.3 46.8-125.4 92.8-125.4c45.5 0 80.9 36.4 80.9 89.7s-35.4 89.7-80.9 89.7zm0-237.8c-81.9 0-127.8 53.4-141 108.4c-14.9-28-25.9-65.5-34.5-100.3H206v141c0 51.1-23.3 89-68.8 89s-71.6-37.8-71.6-89l.5-141H.8v141c0 41.1 13.3 78.4 37.6 105.1c25 27.5 59.2 41.8 98.8 41.8c78.8 0 133.8-60.4 133.8-146.9V112.1c8.2 31.2 27.8 91.1 65.3 143.6l-35 199.4h66.4l23.1-141.3c7.6 6.3 15.7 12 24.2 17c22.2 14 47.7 21.9 73.9 22.8c0 0 4 .2 6.1 .2c81.2 0 145.9-62.9 145.9-147.8s-64.8-148.1-146-148.1z\"]\n};\nconst faFacebook = {\n  prefix: 'fab',\n  iconName: 'facebook',\n  icon: [512, 512, [62000], \"f09a\", \"M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z\"]\n};\nconst faGripfire = {\n  prefix: 'fab',\n  iconName: 'gripfire',\n  icon: [384, 512, [], \"f3ac\", \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"]\n};\nconst faJediOrder = {\n  prefix: 'fab',\n  iconName: 'jedi-order',\n  icon: [448, 512, [], \"f50e\", \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"]\n};\nconst faUikit = {\n  prefix: 'fab',\n  iconName: 'uikit',\n  icon: [448, 512, [], \"f403\", \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"]\n};\nconst faFortAwesomeAlt = {\n  prefix: 'fab',\n  iconName: 'fort-awesome-alt',\n  icon: [512, 512, [], \"f3a3\", \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"]\n};\nconst faPhabricator = {\n  prefix: 'fab',\n  iconName: 'phabricator',\n  icon: [496, 512, [], \"f3db\", \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"]\n};\nconst faUssunnah = {\n  prefix: 'fab',\n  iconName: 'ussunnah',\n  icon: [482, 512, [], \"f407\", \"M481.9 268.1A240.9 240.9 0 1 1 .1 268a240.9 240.9 0 1 1 481.9 0zM24.5 268a216.5 216.5 0 1 0 432.9 0A216.5 216.5 0 1 0 24.5 268zm385.9 63.3c-12.7 0-21.6-1.9-26.7-5.9c-5.5-4.3-8.2-12.3-8.2-23.8V205.1c0-6.5-5.2-20.2-15.7-41.2c7 0 17-9.1 30-27.2V284.5c0 11 2.4 19.4 7 25.3c3.7 4.7 10.1 8.9 19 12.6c1.2 .4 2.6 .9 4.1 1.4c2.9 .9 6.3 2.1 10.3 3.5c-1.8 2.7-8.3 4-19.9 4zm-219 0c-1.3 2.4-3.6 5.5-6.8 9.4l-18.5 22.5c-1-6.1-4-13-9.3-20.6s-9.7-11.4-13.4-11.4h-8.3H53.6c3.3-5.3 4.9-8.8 4.9-10.8c0-2-.8-5.3-2.4-9.7c-1.5-4.4-2.4-8.5-2.4-12.4c0-7.4 2.1-13.9 6.3-19.3L80 253.4l-7.1-17.7L89 215.9l6.7 16.8 8-10.3c-1.8 6.4-2.6 12.3-2.6 17.7c0 4.2 2.8 13.3 8.3 27.3l16.2 40.7H135h8 .3c2.8 .4 7.7 5 14.6 13.9c1.8 2.4 4.3 5.8 7.7 10.2c1.4 1.9 2.9 3.9 4.6 6.1c1.3-2.3 2-4.6 2-7.1c0-2-1.3-6.6-4-13.4L163 304.1c-4-10.6-6.1-17.7-6.1-21.3c0-6.3 1.9-12.3 5.8-17.9c.5-.6 1-1.3 1.5-1.9c4.4-5.6 8.8-11.1 13.3-16.5c-1.1 4.6-1.7 8.7-1.7 12c0 3.7 1.7 9.9 5.1 18.8l7.9 20.4c1.9 4.7 3 8.2 3.7 10.3h17.6 8.3l-.9-2.6c-1.4-3.9-4-7-7.7-9.3l15.6-20.1 12.3 32h13.4L245 292.2c-1.5-3.9-4-7-7.7-9.3L253 262.8 270.3 308h13.4l-11.4-29.4c-1.5-3.9-4-7-7.7-9.3l15.6-20L302.6 308h10.3 8.3 7.6c1.5 0 3-1.1 4.5-3.1s2.2-4.1 2.2-6.3V205.1c0-6.5-4.5-20.3-13.7-41.2c5.4 0 14.1-9.1 26.2-27.2V300.2c0 7.2 .6 12 1.7 14.6c1.6 3.4 5.3 6.2 11.1 8.2c-3.9 5.6-8.7 8.5-14.5 8.5H321.1h-8.3H210.5h-19zM93.4 287.3c-2.7-6.7-4-11.7-4-15c-.6 1.2-2.4 3.7-5.4 7.6c-1.4 1.9-2.2 3.7-2.2 5.3c0 2.6 .8 5.7 2.2 9.3l5.6 13.9h0c5 0 9 0 11.9-.1l-8.2-20.9zm13.5-72.4c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm-27.6 0c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm87 27.5c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3z\"]\n};\nconst faEarlybirds = {\n  prefix: 'fab',\n  iconName: 'earlybirds',\n  icon: [480, 512, [], \"f39a\", \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"]\n};\nconst faTradeFederation = {\n  prefix: 'fab',\n  iconName: 'trade-federation',\n  icon: [496, 512, [], \"f513\", \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"]\n};\nconst faAutoprefixer = {\n  prefix: 'fab',\n  iconName: 'autoprefixer',\n  icon: [640, 512, [], \"f41c\", \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"]\n};\nconst faWhatsapp = {\n  prefix: 'fab',\n  iconName: 'whatsapp',\n  icon: [448, 512, [], \"f232\", \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"]\n};\nconst faSquareUpwork = {\n  prefix: 'fab',\n  iconName: 'square-upwork',\n  icon: [448, 512, [], \"e67c\", \"M56 32l336 0c30.9 0 56 25.1 56 56l0 336c0 30.9-25.1 56-56 56L56 480c-30.9 0-56-25.1-56-56L0 88C0 57.1 25.1 32 56 32zM270.9 274.2c6.6-52.9 25.9-69.5 51.4-69.5c25.3 0 44.9 20.2 44.9 49.7s-19.7 49.7-44.9 49.7c-27.9 0-46.3-21.5-51.4-29.9zm-26.7-41.8c-8.2-15.5-14.3-36.3-19.2-55.6l-29.7 0-33.2 0 0 78.1c0 28.4-12.9 49.4-38.2 49.4s-39.8-20.9-39.8-49.3l.3-78.1-36.2 0 0 78.1c0 22.8 7.4 43.5 20.9 58.2c13.9 15.2 32.8 23.2 54.8 23.2c43.7 0 74.2-33.5 74.2-81.5l0-52.5c4.6 17.3 15.4 50.5 36.2 79.7L215 392.6l36.8 0 12.8-78.4c4.2 3.5 8.7 6.6 13.4 9.4c12.3 7.8 26.4 12.2 40.9 12.6l.1 0c.5 0 1.1 0 1.6 0c.6 0 1.1 0 1.7 0c45.1 0 80.9-34.9 80.9-81.9s-35.9-82.2-80.9-82.2c-45.4 0-70.9 29.7-78.1 60.1z\"]\n};\nconst faSlideshare = {\n  prefix: 'fab',\n  iconName: 'slideshare',\n  icon: [512, 512, [], \"f1e7\", \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"]\n};\nconst faGooglePlay = {\n  prefix: 'fab',\n  iconName: 'google-play',\n  icon: [512, 512, [], \"f3ab\", \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"]\n};\nconst faViadeo = {\n  prefix: 'fab',\n  iconName: 'viadeo',\n  icon: [448, 512, [], \"f2a9\", \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"]\n};\nconst faLine = {\n  prefix: 'fab',\n  iconName: 'line',\n  icon: [512, 512, [], \"f3c0\", \"M311 196.8v81.3c0 2.1-1.6 3.7-3.7 3.7h-13c-1.3 0-2.4-.7-3-1.5l-37.3-50.3v48.2c0 2.1-1.6 3.7-3.7 3.7h-13c-2.1 0-3.7-1.6-3.7-3.7V196.9c0-2.1 1.6-3.7 3.7-3.7h12.9c1.1 0 2.4 .6 3 1.6l37.3 50.3V196.9c0-2.1 1.6-3.7 3.7-3.7h13c2.1-.1 3.8 1.6 3.8 3.5zm-93.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 2.1 1.6 3.7 3.7 3.7h13c2.1 0 3.7-1.6 3.7-3.7V196.8c0-1.9-1.6-3.7-3.7-3.7zm-31.4 68.1H150.3V196.8c0-2.1-1.6-3.7-3.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 1 .3 1.8 1 2.5c.7 .6 1.5 1 2.5 1h52.2c2.1 0 3.7-1.6 3.7-3.7v-13c0-1.9-1.6-3.7-3.5-3.7zm193.7-68.1H327.3c-1.9 0-3.7 1.6-3.7 3.7v81.3c0 1.9 1.6 3.7 3.7 3.7h52.2c2.1 0 3.7-1.6 3.7-3.7V265c0-2.1-1.6-3.7-3.7-3.7H344V247.7h35.5c2.1 0 3.7-1.6 3.7-3.7V230.9c0-2.1-1.6-3.7-3.7-3.7H344V213.5h35.5c2.1 0 3.7-1.6 3.7-3.7v-13c-.1-1.9-1.7-3.7-3.7-3.7zM512 93.4V419.4c-.1 51.2-42.1 92.7-93.4 92.6H92.6C41.4 511.9-.1 469.8 0 418.6V92.6C.1 41.4 42.2-.1 93.4 0H419.4c51.2 .1 92.7 42.1 92.6 93.4zM441.6 233.5c0-83.4-83.7-151.3-186.4-151.3s-186.4 67.9-186.4 151.3c0 74.7 66.3 137.4 155.9 149.3c21.8 4.7 19.3 12.7 14.4 42.1c-.8 4.7-3.8 18.4 16.1 10.1s107.3-63.2 146.5-108.2c27-29.7 39.9-59.8 39.9-93.1z\"]\n};\nconst faGoogleDrive = {\n  prefix: 'fab',\n  iconName: 'google-drive',\n  icon: [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"]\n};\nconst faServicestack = {\n  prefix: 'fab',\n  iconName: 'servicestack',\n  icon: [496, 512, [], \"f3ec\", \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"]\n};\nconst faSimplybuilt = {\n  prefix: 'fab',\n  iconName: 'simplybuilt',\n  icon: [512, 512, [], \"f215\", \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"]\n};\nconst faBitbucket = {\n  prefix: 'fab',\n  iconName: 'bitbucket',\n  icon: [512, 512, [61810], \"f171\", \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"]\n};\nconst faImdb = {\n  prefix: 'fab',\n  iconName: 'imdb',\n  icon: [448, 512, [], \"f2d8\", \"M89.5 323.6H53.93V186.2H89.5V323.6zM156.1 250.5L165.2 186.2H211.5V323.6H180.5V230.9L167.1 323.6H145.8L132.8 232.9L132.7 323.6H101.5V186.2H147.6C148.1 194.5 150.4 204.3 151.9 215.6L156.1 250.5zM223.7 323.6V186.2H250.3C267.3 186.2 277.3 187.1 283.3 188.6C289.4 190.3 294 192.8 297.2 196.5C300.3 199.8 302.3 203.1 303 208.5C303.9 212.9 304.4 221.6 304.4 234.7V282.9C304.4 295.2 303.7 303.4 302.5 307.6C301.4 311.7 299.4 315 296.5 317.3C293.7 319.7 290.1 321.4 285.8 322.3C281.6 323.1 275.2 323.6 266.7 323.6H223.7zM259.2 209.7V299.1C264.3 299.1 267.5 298.1 268.6 296.8C269.7 294.8 270.4 289.2 270.4 280.1V226.8C270.4 220.6 270.3 216.6 269.7 214.8C269.4 213 268.5 211.8 267.1 210.1C265.7 210.1 263 209.7 259.2 209.7V209.7zM316.5 323.6V186.2H350.6V230.1C353.5 227.7 356.7 225.2 360.1 223.5C363.7 222 368.9 221.1 372.9 221.1C377.7 221.1 381.8 221.9 385.2 223.3C388.6 224.8 391.2 226.8 393.2 229.5C394.9 232.1 395.9 234.8 396.3 237.3C396.7 239.9 396.1 245.3 396.1 253.5V292.1C396.1 300.3 396.3 306.4 395.3 310.5C394.2 314.5 391.5 318.1 387.5 320.1C383.4 324 378.6 325.4 372.9 325.4C368.9 325.4 363.7 324.5 360.2 322.9C356.7 321.1 353.5 318.4 350.6 314.9L348.5 323.6L316.5 323.6zM361.6 302.9C362.3 301.1 362.6 296.9 362.6 290.4V255C362.6 249.4 362.3 245.5 361.5 243.8C360.8 241.9 357.8 241.1 355.7 241.1C353.7 241.1 352.3 241.9 351.6 243.4C351 244.9 350.6 248.8 350.6 255V291.4C350.6 297.5 351 301.4 351.8 303C352.4 304.7 353.9 305.5 355.9 305.5C358.1 305.5 360.1 304.7 361.6 302.9L361.6 302.9zM418.4 32.04C434.1 33.27 447.1 47.28 447.1 63.92V448.1C447.1 464.5 435.2 478.5 418.9 479.1C418.6 479.1 418.4 480 418.1 480H29.88C29.6 480 29.32 479.1 29.04 479.9C13.31 478.5 1.093 466.1 0 449.7L.0186 61.78C1.081 45.88 13.82 33.09 30.26 31.1H417.7C417.9 31.1 418.2 32.01 418.4 32.04L418.4 32.04zM30.27 41.26C19 42.01 10.02 51.01 9.257 62.4V449.7C9.63 455.1 11.91 460.2 15.7 464C19.48 467.9 24.51 470.3 29.89 470.7H418.1C429.6 469.7 438.7 459.1 438.7 448.1V63.91C438.7 58.17 436.6 52.65 432.7 48.45C428.8 44.24 423.4 41.67 417.7 41.26L30.27 41.26z\"]\n};\nconst faDeezer = {\n  prefix: 'fab',\n  iconName: 'deezer',\n  icon: [576, 512, [], \"e077\", \"M451.46,244.71H576V172H451.46Zm0-173.89v72.67H576V70.82Zm0,275.06H576V273.2H451.46ZM0,447.09H124.54V374.42H0Zm150.47,0H275V374.42H150.47Zm150.52,0H425.53V374.42H301Zm150.47,0H576V374.42H451.46ZM301,345.88H425.53V273.2H301Zm-150.52,0H275V273.2H150.47Zm0-101.17H275V172H150.47Z\"]\n};\nconst faRaspberryPi = {\n  prefix: 'fab',\n  iconName: 'raspberry-pi',\n  icon: [407, 512, [], \"f7bb\", \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"]\n};\nconst faJira = {\n  prefix: 'fab',\n  iconName: 'jira',\n  icon: [496, 512, [], \"f7b1\", \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"]\n};\nconst faDocker = {\n  prefix: 'fab',\n  iconName: 'docker',\n  icon: [640, 512, [], \"f395\", \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"]\n};\nconst faScreenpal = {\n  prefix: 'fab',\n  iconName: 'screenpal',\n  icon: [512, 512, [], \"e570\", \"M233.5 22.49C233.5 10.07 243.6 0 256 0C268.4 0 278.5 10.07 278.5 22.49C278.5 34.91 268.4 44.98 256 44.98C243.6 44.98 233.5 34.91 233.5 22.49zM313.4 259C313.4 290.7 287.7 316.4 256 316.4C224.3 316.4 198.6 290.7 198.6 259C198.6 227.3 224.3 201.6 256 201.6C287.7 201.6 313.4 227.3 313.4 259zM337.2 350C359.5 330.1 373.7 302.7 377.1 273H496.6C493.1 334.4 466.2 392.2 421.4 434.4C376.7 476.6 317.5 500.2 256 500.2C194.5 500.2 135.3 476.6 90.56 434.4C45.83 392.2 18.94 334.4 15.39 273H135.1C138.5 302.7 152.7 330.1 175 350C197.3 369.9 226.2 380.9 256.1 380.9C285.1 380.9 314.8 369.9 337.2 350zM73.14 140.3C73.54 152.7 63.81 163.1 51.39 163.5C38.97 163.9 28.59 154.2 28.18 141.8C27.78 129.3 37.52 118.9 49.94 118.5C62.35 118.1 72.74 127.9 73.14 140.3zM438.9 141C438.9 128.6 448.9 118.5 461.4 118.5C473.8 118.5 483.8 128.6 483.8 141C483.8 153.5 473.8 163.5 461.4 163.5C448.9 163.5 438.9 153.5 438.9 141zM317.9 95.27C300.6 109.1 278.7 118.1 256 118.1C233.3 118.1 211.4 109.1 194.1 95.27C176.8 80.55 165.3 60.18 161.7 37.78C176.8 31.37 192.5 26.52 208.6 23.31C208.6 35.88 213.6 47.93 222.5 56.82C231.4 65.7 243.4 70.7 256 70.7C268.6 70.7 280.6 65.7 289.5 56.82C298.4 47.93 303.4 35.88 303.4 23.31C319.5 26.52 335.2 31.37 350.3 37.78C346.7 60.18 335.2 80.55 317.9 95.27H317.9zM82.78 231C61.42 238.6 38.06 238.4 16.86 230.4C18.82 214.1 22.46 198.1 27.71 182.5C33.1 185.6 39.05 187.6 45.22 188.5C51.39 189.3 57.67 188.9 63.68 187.3C69.69 185.6 75.33 182.9 80.27 179.1C85.21 175.3 89.36 170.6 92.47 165.2C95.58 159.8 97.61 153.8 98.42 147.7C99.23 141.5 98.83 135.2 97.22 129.2C95.61 123.2 92.83 117.6 89.04 112.6C85.25 107.7 80.53 103.5 75.14 100.4C85.96 88.11 98.01 76.94 111.1 67.07C128.7 81.42 140.6 101.6 144.7 123.9C148.8 146.2 144.8 169.3 133.5 188.9C122.1 208.5 104.1 223.4 82.78 231V231zM429.2 231.1C407.9 223.5 389.9 208.5 378.5 188.9C367.2 169.3 363.3 146.2 367.4 123.9C371.5 101.7 383.4 81.54 400.9 67.19C414 77.04 426.1 88.21 436.9 100.5C426.2 106.9 418.5 117.2 415.4 129.3C412.2 141.3 413.1 154.1 420.2 164.9C426.4 175.7 436.6 183.6 448.6 186.9C460.6 190.2 473.5 188.6 484.3 182.6C489.6 198.1 493.2 214.2 495.2 230.4C473.1 238.5 450.6 238.7 429.2 231.1L429.2 231.1z\"]\n};\nconst faBluetooth = {\n  prefix: 'fab',\n  iconName: 'bluetooth',\n  icon: [448, 512, [], \"f293\", \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"]\n};\nconst faGitter = {\n  prefix: 'fab',\n  iconName: 'gitter',\n  icon: [384, 512, [], \"f426\", \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"]\n};\nconst faDAndD = {\n  prefix: 'fab',\n  iconName: 'd-and-d',\n  icon: [576, 512, [], \"f38d\", \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"]\n};\nconst faMicroblog = {\n  prefix: 'fab',\n  iconName: 'microblog',\n  icon: [448, 512, [], \"e01a\", \"M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z\"]\n};\nconst faCcDinersClub = {\n  prefix: 'fab',\n  iconName: 'cc-diners-club',\n  icon: [576, 512, [], \"f24c\", \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"]\n};\nconst faGgCircle = {\n  prefix: 'fab',\n  iconName: 'gg-circle',\n  icon: [512, 512, [], \"f261\", \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"]\n};\nconst faPiedPiperHat = {\n  prefix: 'fab',\n  iconName: 'pied-piper-hat',\n  icon: [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"]\n};\nconst faKickstarterK = {\n  prefix: 'fab',\n  iconName: 'kickstarter-k',\n  icon: [448, 512, [], \"f3bc\", \"M356.6 256.2l40.8-40.5c42.2-41.9 42.2-110.3 0-152.1s-111-41.9-153.2 0L229.3 78.4C209.6 50.3 177.1 32 140.2 32C80.5 32 32 80.2 32 139.5V372.5C32 431.9 80.5 480 140.2 480c37.1 0 69.3-18.3 89-46.4l14.9 14.7c42.2 41.9 111 41.9 153.2 0s42.2-110.3 0-152.1l-40.8-40z\"]\n};\nconst faYandex = {\n  prefix: 'fab',\n  iconName: 'yandex',\n  icon: [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"]\n};\nconst faReadme = {\n  prefix: 'fab',\n  iconName: 'readme',\n  icon: [576, 512, [], \"f4d5\", \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"]\n};\nconst faHtml5 = {\n  prefix: 'fab',\n  iconName: 'html5',\n  icon: [384, 512, [], \"f13b\", \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"]\n};\nconst faSellsy = {\n  prefix: 'fab',\n  iconName: 'sellsy',\n  icon: [640, 512, [], \"f213\", \"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\"]\n};\nconst faSquareWebAwesome = {\n  prefix: 'fab',\n  iconName: 'square-web-awesome',\n  icon: [448, 512, [], \"e683\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM235 177.6L288 224l52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6c0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224C74.3 223.6 64 213 64 200c0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224l53.1-46.4c-8.9-4.1-15-13.1-15-23.6c0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"]\n};\nconst faSass = {\n  prefix: 'fab',\n  iconName: 'sass',\n  icon: [640, 512, [], \"f41e\", \"M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"]\n};\nconst faWirsindhandwerk = {\n  prefix: 'fab',\n  iconName: 'wirsindhandwerk',\n  icon: [512, 512, [\"wsh\"], \"e2d0\", \"M50.77161,479.81213h83.36071V367.84741l-83.36071,47.009Zm329.04675,0h82.35022V414.85645l-82.35022-47.009Zm.00568-448V251.568L256.1759,179.1861,134.50378,251.568V31.81213H50.77161V392.60565L256.1759,270.31909,462.16858,392.60565V31.81213Z\"]\n};\nconst faWsh = faWirsindhandwerk;\nconst faBuromobelexperte = {\n  prefix: 'fab',\n  iconName: 'buromobelexperte',\n  icon: [448, 512, [], \"f37f\", \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"]\n};\nconst faSalesforce = {\n  prefix: 'fab',\n  iconName: 'salesforce',\n  icon: [640, 512, [], \"f83b\", \"M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"]\n};\nconst faOctopusDeploy = {\n  prefix: 'fab',\n  iconName: 'octopus-deploy',\n  icon: [512, 512, [], \"e082\", \"M455.6,349.2c-45.891-39.09-36.67-77.877-16.095-128.11C475.16,134.04,415.967,34.14,329.93,8.3,237.04-19.6,134.252,24.341,99.677,117.147a180.862,180.862,0,0,0-10.988,73.544c1.733,29.543,14.717,52.97,24.09,80.3,17.2,50.161-28.1,92.743-66.662,117.582-46.806,30.2-36.319,39.857-8.428,41.858,23.378,1.68,44.478-4.548,65.265-15.045,9.2-4.647,40.687-18.931,45.13-28.588C135.9,413.388,111.122,459.5,126.621,488.9c19.1,36.229,67.112-31.77,76.709-45.812,8.591-12.572,42.963-81.279,63.627-46.926,18.865,31.361,8.6,76.391,35.738,104.622,32.854,34.2,51.155-18.312,51.412-44.221.163-16.411-6.1-95.852,29.9-59.944C405.428,418,436.912,467.8,472.568,463.642c38.736-4.516-22.123-67.967-28.262-78.695,5.393,4.279,53.665,34.128,53.818,9.52C498.234,375.678,468.039,359.8,455.6,349.2Z\"]\n};\nconst faMedapps = {\n  prefix: 'fab',\n  iconName: 'medapps',\n  icon: [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"]\n};\nconst faNs8 = {\n  prefix: 'fab',\n  iconName: 'ns8',\n  icon: [640, 512, [], \"f3d5\", \"M104.324,269.172h26.067V242.994H104.324Zm52.466-26.178-.055-26.178v-.941a39.325,39.325,0,0,0-78.644.941v.166h26.4v-.166a12.98,12.98,0,0,1,25.956,0v26.178Zm52.356,25.846a91.1,91.1,0,0,1-91.1,91.1h-.609a91.1,91.1,0,0,1-91.1-91.1H0v.166A117.33,117.33,0,0,0,117.44,386.28h.775A117.331,117.331,0,0,0,235.49,268.84V242.828H209.146Zm-157.233,0a65.362,65.362,0,0,0,130.723,0H156.292a39.023,39.023,0,0,1-78.035,0V242.883H51.968v-26.62A65.42,65.42,0,0,1,182.8,217.48v25.293h26.344V217.48a91.761,91.761,0,0,0-183.522,0v25.4H51.913Zm418.4-71.173c13.67,0,24.573,6.642,30.052,18.264l.719,1.549,23.245-11.511-.609-1.439c-8.025-19.26-28.5-31.27-53.407-31.27-23.134,0-43.611,11.4-50.972,28.447-.123,26.876-.158,23.9,0,24.85,4.7,11.013,14.555,19.37,28.668,24.241a102.033,102.033,0,0,0,19.813,3.984c5.479.72,10.626,1.384,15.829,3.1,6.364,2.1,10.46,5.257,12.84,9.851v9.851c-3.708,7.527-13.781,12.342-25.791,12.342-14.334,0-25.956-6.918-31.933-19.039l-.72-1.494L415.026,280.9l.553,1.439c7.915,19.426,29.609,32.044,55.289,32.044,23.632,0,44.608-11.4,52.3-28.447l.166-25.9-.166-.664c-4.87-11.014-15.219-19.647-28.944-24.241-7.693-2.712-14.335-3.6-20.7-4.427a83.777,83.777,0,0,1-14.832-2.878c-6.31-1.937-10.4-5.092-12.619-9.63v-8.412C449.45,202.427,458.969,197.667,470.315,197.667ZM287.568,311.344h26.067v-68.4H287.568Zm352.266-53.3c-2.933-6.254-8.3-12.01-15.441-16.714A37.99,37.99,0,0,0,637.4,226l.166-25.347-.166-.664C630.038,184,610.667,173.26,589.25,173.26S548.461,184,541.1,199.992l-.166,25.347.166.664a39.643,39.643,0,0,0,13.006,15.331c-7.2,4.7-12.508,10.46-15.441,16.714l-.166,28.889.166.72c7.582,15.994,27.893,26.731,50.585,26.731s43.057-10.737,50.584-26.731l.166-28.89Zm-73.22-50.806c3.6-6.31,12.563-10.516,22.58-10.516s19.038,4.206,22.636,10.516v13.725c-3.542,6.2-12.563,10.349-22.636,10.349s-19.094-4.15-22.58-10.349Zm47.319,72.169c-3.764,6.641-13.338,10.9-24.683,10.9-11.125,0-20.976-4.372-24.684-10.9V263.25c3.708-6.309,13.5-10.515,24.684-10.515,11.345,0,20.919,4.15,24.683,10.515ZM376.4,265.962l-59.827-89.713h-29v40.623h26.51v.387l62.539,94.085H402.3V176.249H376.4Z\"]\n};\nconst faPinterestP = {\n  prefix: 'fab',\n  iconName: 'pinterest-p',\n  icon: [384, 512, [], \"f231\", \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"]\n};\nconst faApper = {\n  prefix: 'fab',\n  iconName: 'apper',\n  icon: [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"]\n};\nconst faFortAwesome = {\n  prefix: 'fab',\n  iconName: 'fort-awesome',\n  icon: [512, 512, [], \"f286\", \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"]\n};\nconst faWaze = {\n  prefix: 'fab',\n  iconName: 'waze',\n  icon: [512, 512, [], \"f83f\", \"M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"]\n};\nconst faBluesky = {\n  prefix: 'fab',\n  iconName: 'bluesky',\n  icon: [512, 512, [], \"e671\", \"M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z\"]\n};\nconst faCcJcb = {\n  prefix: 'fab',\n  iconName: 'cc-jcb',\n  icon: [576, 512, [], \"f24b\", \"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\"]\n};\nconst faSnapchat = {\n  prefix: 'fab',\n  iconName: 'snapchat',\n  icon: [512, 512, [62124, \"snapchat-ghost\"], \"f2ab\", \"M496.926,366.6c-3.373-9.176-9.8-14.086-17.112-18.153-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.609-27.341-52.959-45.42a102.889,102.889,0,0,1-9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.221,10.221,0,0,1,2.914-3.038c3.918-2.591,7.96-5.22,10.7-6.993,4.885-3.162,8.754-5.667,11.246-7.44,9.362-6.547,15.909-13.5,20-21.278a42.371,42.371,0,0,0,2.1-35.191c-6.2-16.318-21.613-26.449-40.287-26.449a55.543,55.543,0,0,0-11.718,1.24c-1.029.224-2.059.459-3.063.72.174-11.16-.074-22.94-1.066-34.534-3.522-40.758-17.794-62.123-32.674-79.16A130.167,130.167,0,0,0,332.1,36.443C309.515,23.547,283.91,17,256,17S202.6,23.547,180,36.443a129.735,129.735,0,0,0-33.281,26.783c-14.88,17.038-29.152,38.44-32.673,79.161-.992,11.594-1.24,23.435-1.079,34.533-1-.26-2.021-.5-3.051-.719a55.461,55.461,0,0,0-11.717-1.24c-18.687,0-34.125,10.131-40.3,26.449a42.423,42.423,0,0,0,2.046,35.228c4.105,7.774,10.652,14.731,20.014,21.278,2.48,1.736,6.361,4.24,11.246,7.44,2.641,1.711,6.5,4.216,10.28,6.72a11.054,11.054,0,0,1,3.3,3.311c.794,1.624.818,3.373-.36,6.6a102.02,102.02,0,0,1-8.94,15.785c-12.077,17.669-29.363,32.648-51.434,44.639C32.355,348.608,20.2,352.75,15.069,366.7c-3.868,10.528-1.339,22.506,8.494,32.6a49.137,49.137,0,0,0,12.4,9.387,134.337,134.337,0,0,0,30.342,12.139,20.024,20.024,0,0,1,6.126,2.741c3.583,3.137,3.075,7.861,7.849,14.78a34.468,34.468,0,0,0,8.977,9.127c10.019,6.919,21.278,7.353,33.207,7.811,10.776.41,22.989.881,36.939,5.481,5.778,1.91,11.78,5.605,18.736,9.92C194.842,480.951,217.707,495,255.973,495s61.292-14.123,78.118-24.428c6.907-4.24,12.872-7.9,18.489-9.758,13.949-4.613,26.163-5.072,36.939-5.481,11.928-.459,23.187-.893,33.206-7.812a34.584,34.584,0,0,0,10.218-11.16c3.434-5.84,3.348-9.919,6.572-12.771a18.971,18.971,0,0,1,5.753-2.629A134.893,134.893,0,0,0,476.02,408.71a48.344,48.344,0,0,0,13.019-10.193l.124-.149C498.389,388.5,500.708,376.867,496.926,366.6Zm-34.013,18.277c-20.745,11.458-34.533,10.23-45.259,17.137-9.114,5.865-3.72,18.513-10.342,23.076-8.134,5.617-32.177-.4-63.239,9.858-25.618,8.469-41.961,32.822-88.038,32.822s-62.036-24.3-88.076-32.884c-31-10.255-55.092-4.241-63.239-9.858-6.609-4.563-1.24-17.211-10.341-23.076-10.739-6.907-24.527-5.679-45.26-17.075-13.206-7.291-5.716-11.8-1.314-13.937,75.143-36.381,87.133-92.552,87.666-96.719.645-5.046,1.364-9.014-4.191-14.148-5.369-4.96-29.189-19.7-35.8-24.316-10.937-7.638-15.748-15.264-12.2-24.638,2.48-6.485,8.531-8.928,14.879-8.928a27.643,27.643,0,0,1,5.965.67c12,2.6,23.659,8.617,30.392,10.242a10.749,10.749,0,0,0,2.48.335c3.6,0,4.86-1.811,4.612-5.927-.768-13.132-2.628-38.725-.558-62.644,2.84-32.909,13.442-49.215,26.04-63.636,6.051-6.932,34.484-36.976,88.857-36.976s82.88,29.92,88.931,36.827c12.611,14.421,23.225,30.727,26.04,63.636,2.071,23.919.285,49.525-.558,62.644-.285,4.327,1.017,5.927,4.613,5.927a10.648,10.648,0,0,0,2.48-.335c6.745-1.624,18.4-7.638,30.4-10.242a27.641,27.641,0,0,1,5.964-.67c6.386,0,12.4,2.48,14.88,8.928,3.546,9.374-1.24,17-12.189,24.639-6.609,4.612-30.429,19.343-35.8,24.315-5.568,5.134-4.836,9.1-4.191,14.149.533,4.228,12.511,60.4,87.666,96.718C468.629,373.011,476.119,377.524,462.913,384.877Z\"]\n};\nconst faSnapchatGhost = faSnapchat;\nconst faFantasyFlightGames = {\n  prefix: 'fab',\n  iconName: 'fantasy-flight-games',\n  icon: [512, 512, [], \"f6dc\", \"M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"]\n};\nconst faRust = {\n  prefix: 'fab',\n  iconName: 'rust',\n  icon: [512, 512, [], \"e07a\", \"M508.52,249.75,486.7,236.24c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35,7.35,0,0,0-2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35,7.35,0,0,0-4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35,7.35,0,0,0-6.95-10.39l-25.82.91q-1.79-2.22-3.61-4.4L439,81.84A7.36,7.36,0,0,0,430.16,73L405,78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35,7.35,0,0,0-10.39-7L367.7,53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4,25.08a7.35,7.35,0,0,0-11.54-4.79L326,35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35,7.35,0,0,0-12.25-2.44l-17.5,18.72c-1.95-.21-3.91-.38-5.88-.55L262.25,3.48a7.35,7.35,0,0,0-12.5,0L236.24,25.3c-2,.17-3.93.34-5.88.55L212.86,7.13a7.35,7.35,0,0,0-12.25,2.44l-9,24c-1.89.55-3.79,1.08-5.66,1.68l-20.82-15a7.35,7.35,0,0,0-11.54,4.79l-4.15,25.41c-1.73.9-3.45,1.79-5.16,2.73L120.88,42.55a7.35,7.35,0,0,0-10.39,7l.92,25.81c-1.49,1.19-3,2.39-4.42,3.61L81.84,73A7.36,7.36,0,0,0,73,81.84L78.93,107c-1.23,1.45-2.43,2.93-3.62,4.41l-25.81-.91a7.42,7.42,0,0,0-6.37,3.26,7.35,7.35,0,0,0-.57,7.13l10.66,23.41c-.94,1.7-1.83,3.43-2.73,5.16L25.08,153.6a7.35,7.35,0,0,0-4.79,11.54l15,20.82c-.59,1.87-1.13,3.77-1.68,5.66l-24,9a7.35,7.35,0,0,0-2.44,12.25l18.72,17.5c-.21,1.95-.38,3.91-.55,5.88L3.48,249.75a7.35,7.35,0,0,0,0,12.5L25.3,275.76c.17,2,.34,3.92.55,5.87L7.13,299.13a7.35,7.35,0,0,0,2.44,12.25l24,9c.55,1.89,1.08,3.78,1.68,5.65l-15,20.83a7.35,7.35,0,0,0,4.79,11.54l25.42,4.15c.9,1.72,1.79,3.45,2.73,5.14L42.56,391.12a7.35,7.35,0,0,0,.57,7.13,7.13,7.13,0,0,0,6.37,3.26l25.83-.91q1.77,2.22,3.6,4.4L73,430.16A7.36,7.36,0,0,0,81.84,439L107,433.07q2.18,1.83,4.41,3.61l-.92,25.82a7.35,7.35,0,0,0,10.39,6.95l23.43-10.68c1.69.94,3.42,1.83,5.14,2.73l4.15,25.42a7.34,7.34,0,0,0,11.54,4.78l20.83-15c1.86.6,3.76,1.13,5.65,1.68l9,24a7.36,7.36,0,0,0,12.25,2.44l17.5-18.72c1.95.21,3.92.38,5.88.55l13.51,21.82a7.35,7.35,0,0,0,12.5,0l13.51-21.82c2-.17,3.93-.34,5.88-.56l17.5,18.73a7.36,7.36,0,0,0,12.25-2.44l9-24c1.89-.55,3.78-1.08,5.65-1.68l20.82,15a7.34,7.34,0,0,0,11.54-4.78l4.15-25.42c1.72-.9,3.45-1.79,5.15-2.73l23.42,10.68a7.35,7.35,0,0,0,10.39-6.95l-.91-25.82q2.22-1.79,4.4-3.61L430.16,439a7.36,7.36,0,0,0,8.84-8.84L433.07,405q1.83-2.17,3.61-4.4l25.82.91a7.23,7.23,0,0,0,6.37-3.26,7.35,7.35,0,0,0,.58-7.13L458.77,367.7c.94-1.7,1.83-3.43,2.73-5.15l25.42-4.15a7.35,7.35,0,0,0,4.79-11.54l-15-20.83c.59-1.87,1.13-3.76,1.67-5.65l24-9a7.35,7.35,0,0,0,2.44-12.25l-18.72-17.5c.21-1.95.38-3.91.55-5.87l21.82-13.51a7.35,7.35,0,0,0,0-12.5Zm-151,129.08A13.91,13.91,0,0,0,341,389.51l-7.64,35.67A187.51,187.51,0,0,1,177,424.44l-7.64-35.66a13.87,13.87,0,0,0-16.46-10.68l-31.51,6.76a187.38,187.38,0,0,1-16.26-19.21H258.3c1.72,0,2.89-.29,2.89-1.91V309.55c0-1.57-1.17-1.91-2.89-1.91H213.47l.05-34.35H262c4.41,0,23.66,1.28,29.79,25.87,1.91,7.55,6.17,32.14,9.06,40,2.89,8.82,14.6,26.46,27.1,26.46H407a187.3,187.3,0,0,1-17.34,20.09Zm25.77,34.49A15.24,15.24,0,1,1,368,398.08h.44A15.23,15.23,0,0,1,383.24,413.32Zm-225.62-.68a15.24,15.24,0,1,1-15.25-15.25h.45A15.25,15.25,0,0,1,157.62,412.64ZM69.57,234.15l32.83-14.6a13.88,13.88,0,0,0,7.06-18.33L102.69,186h26.56V305.73H75.65A187.65,187.65,0,0,1,69.57,234.15ZM58.31,198.09a15.24,15.24,0,0,1,15.23-15.25H74a15.24,15.24,0,1,1-15.67,15.24Zm155.16,24.49.05-35.32h63.26c3.28,0,23.07,3.77,23.07,18.62,0,12.29-15.19,16.7-27.68,16.7ZM399,306.71c-9.8,1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4,18.86-11.95,38.46-29.64,38.46-53.26,0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.32A187.49,187.49,0,0,1,221.21,70.06l23.47,24.6a13.82,13.82,0,0,0,19.6.44l26.26-25a187.51,187.51,0,0,1,128.37,91.43l-18,40.57A14,14,0,0,0,408,220.43l34.59,15.33a187.12,187.12,0,0,1,.4,32.54H423.71c-1.91,0-2.69,1.27-2.69,3.13v8.82C421,301,409.31,305.58,399,306.71ZM240,60.21A15.24,15.24,0,0,1,255.21,45h.45A15.24,15.24,0,1,1,240,60.21ZM436.84,214a15.24,15.24,0,1,1,0-30.48h.44a15.24,15.24,0,0,1-.44,30.48Z\"]\n};\nconst faWix = {\n  prefix: 'fab',\n  iconName: 'wix',\n  icon: [640, 512, [], \"f5cf\", \"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\"]\n};\nconst faSquareBehance = {\n  prefix: 'fab',\n  iconName: 'square-behance',\n  icon: [448, 512, [\"behance-square\"], \"f1b5\", \"M155.3 318.4c17.2 0 31.2-6.1 31.2-25.4c0-19.7-11.7-27.4-30.3-27.5h-46v52.9h45.1zm-5.4-129.6H110.3v44.8H153c15.1 0 25.8-6.6 25.8-22.9c0-17.7-13.7-21.9-28.9-21.9zm129.5 74.8h62.2c-1.7-18.5-11.3-29.7-30.5-29.7c-18.3 0-30.5 11.4-31.7 29.7zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM349.5 185H271.7V166.1h77.8V185zM193.7 243.7c23.6 6.7 35 27.5 35 51.6c0 39-32.7 55.7-67.6 55.9H68v-192h90.5c32.9 0 61.4 9.3 61.4 47.5c0 19.3-9 28.8-26.2 37zm118.7-38.6c43.5 0 67.6 34.3 67.6 75.4c0 1.6-.1 3.3-.2 5c0 .8-.1 1.5-.1 2.2H279.5c0 22.2 11.7 35.3 34.1 35.3c11.6 0 26.5-6.2 30.2-18.1h33.7c-10.4 31.9-31.9 46.8-65.1 46.8c-43.8 0-71.1-29.7-71.1-73c0-41.8 28.7-73.6 71.1-73.6z\"]\n};\nconst faBehanceSquare = faSquareBehance;\nconst faSupple = {\n  prefix: 'fab',\n  iconName: 'supple',\n  icon: [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"]\n};\nconst faWebflow = {\n  prefix: 'fab',\n  iconName: 'webflow',\n  icon: [640, 512, [], \"e65c\", \"M640 64L435.8 463.2H244l85.5-165.5h-3.8C255.1 389.3 149.9 449.5 0 463.2V300.1s95.9-5.7 152.3-64.9H0V64H171.1V204.8l3.8 0L244.9 64H374.3V203.9l3.8 0L450.7 64H640z\"]\n};\nconst faRebel = {\n  prefix: 'fab',\n  iconName: 'rebel',\n  icon: [512, 512, [], \"f1d0\", \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"]\n};\nconst faCss3 = {\n  prefix: 'fab',\n  iconName: 'css3',\n  icon: [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"]\n};\nconst faStaylinked = {\n  prefix: 'fab',\n  iconName: 'staylinked',\n  icon: [440, 512, [], \"f3f5\", \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z\"]\n};\nconst faKaggle = {\n  prefix: 'fab',\n  iconName: 'kaggle',\n  icon: [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"]\n};\nconst faSpaceAwesome = {\n  prefix: 'fab',\n  iconName: 'space-awesome',\n  icon: [512, 512, [], \"e5ac\", \"M96 256H128V512H0V352H32V320H64V288H96V256zM512 352V512H384V256H416V288H448V320H480V352H512zM320 64H352V448H320V416H192V448H160V64H192V32H224V0H288V32H320V64zM288 128H224V192H288V128z\"]\n};\nconst faDeviantart = {\n  prefix: 'fab',\n  iconName: 'deviantart',\n  icon: [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"]\n};\nconst faCpanel = {\n  prefix: 'fab',\n  iconName: 'cpanel',\n  icon: [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"]\n};\nconst faGoodreadsG = {\n  prefix: 'fab',\n  iconName: 'goodreads-g',\n  icon: [384, 512, [], \"f3a9\", \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"]\n};\nconst faSquareGit = {\n  prefix: 'fab',\n  iconName: 'square-git',\n  icon: [448, 512, [\"git-square\"], \"f1d2\", \"M120.8 335.5c-5.9-.4-12.6-.8-20.2-1.3c-3.3 4.1-6.6 8.4-6.6 13.5c0 18.5 65.5 18.5 65.5-1.5c0-8.3-7.4-8.7-38.8-10.7zm7.8-117.9c-32.3 0-33.7 44.5-.7 44.5c32.5 0 31.7-44.5 .7-44.5zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM243.9 172.2c-14.5 0-22.9-8.4-22.9-22.9c0-14.5 8.4-22.3 22.9-22.3c14.7 0 23.1 7.8 23.1 22.3s-8.4 22.9-23.1 22.9zM149.6 195h49.5l0 21.6-23.4 1.8c4.6 5.8 9.4 14 9.4 25.7c0 48.7-57.2 47.2-74.2 42.4l-8.4 13.4c5 .3 9.8 .6 14.3 .8c56.3 3.2 80.5 4.6 80.5 38.5c0 29.2-25.7 45.7-69.9 45.7c-46 0-63.5-11.6-63.5-31.7c0-11.4 5.1-17.5 14-25.9c-8.4-3.5-11.2-9.9-11.2-16.8c0-9.6 7.4-16.3 23-30.6l.2-.2c-12.4-6.1-21.8-19.3-21.8-38.1c0-51.6 56.6-53.3 81.6-46.8zM270.5 303.1l13 1.8 0 20.1H211.1V304.9c2.7-.4 5-.7 6.9-.9c9.9-1.2 10.1-1.3 10.1-6V223.3c0-4.4-.9-4.7-10.1-7.8c-1.9-.7-4.2-1.4-6.9-2.4l2.8-20.6h52.6V298c0 4.1 .2 4.6 4.1 5.1zm106.6-10.4L384 315c-10.9 5.4-26.9 10.2-41.4 10.2c-30.2 0-41.7-12.2-41.7-40.9V217.7c0-.8 0-1.4-.2-1.8c-.8-1.2-4.2-.7-19.6-.7V192.6c22.3-2.5 31.2-13.7 34-41.4h24.2c0 33.3-.6 38 .7 38.6c.3 .1 .7 0 1.3 0h35.8v25.4H339.3v60.7c0 .2 0 .5 0 .9c-.2 6.3-.9 30.4 37.9 15.9z\"]\n};\nconst faGitSquare = faSquareGit;\nconst faSquareTumblr = {\n  prefix: 'fab',\n  iconName: 'square-tumblr',\n  icon: [448, 512, [\"tumblr-square\"], \"f174\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM256.8 416c-75.5 0-91.9-55.5-91.9-87.9v-90H135.2c-3.4 0-6.2-2.8-6.2-6.2V189.4c0-4.5 2.8-8.5 7.1-10c38.8-13.7 50.9-47.5 52.7-73.2c.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2H249.1V321c0 21.4 14.8 33.5 42.5 22.4c3-1.2 5.6-2 8-1.4c2.2 .5 3.6 2.1 4.6 4.9L318 387.1c1 3.2 2 6.7-.3 9.1c-8.5 9.1-31.2 19.8-60.9 19.8z\"]\n};\nconst faTumblrSquare = faSquareTumblr;\nconst faTrello = {\n  prefix: 'fab',\n  iconName: 'trello',\n  icon: [448, 512, [], \"f181\", \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"]\n};\nconst faCreativeCommonsNcJp = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-jp',\n  icon: [496, 512, [], \"f4ea\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"]\n};\nconst faGetPocket = {\n  prefix: 'fab',\n  iconName: 'get-pocket',\n  icon: [448, 512, [], \"f265\", \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"]\n};\nconst faPerbyte = {\n  prefix: 'fab',\n  iconName: 'perbyte',\n  icon: [448, 512, [], \"e083\", \"M305.314,284.578H246.6V383.3h58.711q24.423,0,38.193-13.77t13.77-36.11q0-21.826-14.032-35.335T305.314,284.578ZM149.435,128.7H90.724v98.723h58.711q24.42,0,38.19-13.773t13.77-36.107q0-21.826-14.029-35.338T149.435,128.7ZM366.647,32H81.353A81.445,81.445,0,0,0,0,113.352V398.647A81.445,81.445,0,0,0,81.353,480H366.647A81.445,81.445,0,0,0,448,398.647V113.352A81.445,81.445,0,0,0,366.647,32Zm63.635,366.647a63.706,63.706,0,0,1-63.635,63.635H81.353a63.706,63.706,0,0,1-63.635-63.635V113.352A63.706,63.706,0,0,1,81.353,49.718H366.647a63.706,63.706,0,0,1,63.635,63.634ZM305.314,128.7H246.6v98.723h58.711q24.423,0,38.193-13.773t13.77-36.107q0-21.826-14.032-35.338T305.314,128.7Z\"]\n};\nconst faGrunt = {\n  prefix: 'fab',\n  iconName: 'grunt',\n  icon: [384, 512, [], \"f3ad\", \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"]\n};\nconst faWeebly = {\n  prefix: 'fab',\n  iconName: 'weebly',\n  icon: [512, 512, [], \"f5cc\", \"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"]\n};\nconst faConnectdevelop = {\n  prefix: 'fab',\n  iconName: 'connectdevelop',\n  icon: [576, 512, [], \"f20e\", \"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\"]\n};\nconst faLeanpub = {\n  prefix: 'fab',\n  iconName: 'leanpub',\n  icon: [576, 512, [], \"f212\", \"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\"]\n};\nconst faBlackTie = {\n  prefix: 'fab',\n  iconName: 'black-tie',\n  icon: [448, 512, [], \"f27e\", \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"]\n};\nconst faThemeco = {\n  prefix: 'fab',\n  iconName: 'themeco',\n  icon: [448, 512, [], \"f5c6\", \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"]\n};\nconst faPython = {\n  prefix: 'fab',\n  iconName: 'python',\n  icon: [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"]\n};\nconst faAndroid = {\n  prefix: 'fab',\n  iconName: 'android',\n  icon: [576, 512, [], \"f17b\", \"M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55\"]\n};\nconst faBots = {\n  prefix: 'fab',\n  iconName: 'bots',\n  icon: [640, 512, [], \"e340\", \"M86.344,197.834a51.767,51.767,0,0,0-41.57,20.058V156.018a8.19,8.19,0,0,0-8.19-8.19H8.19A8.19,8.19,0,0,0,0,156.018V333.551a8.189,8.189,0,0,0,8.19,8.189H36.584a8.189,8.189,0,0,0,8.19-8.189v-8.088c11.628,13.373,25.874,19.769,41.573,19.769,34.6,0,61.922-26.164,61.922-73.843C148.266,225.452,121.229,197.834,86.344,197.834ZM71.516,305.691c-9.593,0-21.221-4.942-26.745-12.5V250.164c5.528-7.558,17.152-12.791,26.745-12.791,17.734,0,31.107,13.082,31.107,34.013C102.623,292.609,89.25,305.691,71.516,305.691Zm156.372-59.032a17.4,17.4,0,1,0,17.4,17.4A17.4,17.4,0,0,0,227.888,246.659ZM273.956,156.7V112.039a13.308,13.308,0,1,0-10.237,0V156.7a107.49,107.49,0,1,0,10.237,0Zm85.993,107.367c0,30.531-40.792,55.281-91.112,55.281s-91.111-24.75-91.111-55.281,40.792-55.281,91.111-55.281S359.949,233.532,359.949,264.062Zm-50.163,17.4a17.4,17.4,0,1,0-17.4-17.4h0A17.4,17.4,0,0,0,309.786,281.466ZM580.7,250.455c-14.828-2.617-22.387-3.78-22.387-9.885,0-5.523,7.268-9.884,17.735-9.884a65.56,65.56,0,0,1,34.484,10.1,8.171,8.171,0,0,0,11.288-2.468c.07-.11.138-.221.2-.333l8.611-14.886a8.2,8.2,0,0,0-2.867-11.123,99.863,99.863,0,0,0-52.014-14.138c-38.956,0-60.179,21.514-60.179,46.225,0,36.342,33.725,41.864,57.563,45.642,13.373,2.326,24.13,4.361,24.13,11.048,0,6.4-5.523,10.757-18.9,10.757-13.552,0-30.994-6.222-42.623-13.579a8.206,8.206,0,0,0-11.335,2.491c-.035.054-.069.108-.1.164l-10.2,16.891a8.222,8.222,0,0,0,2.491,11.066c15.224,10.3,37.663,16.692,59.441,16.692,40.409,0,63.957-19.769,63.957-46.515C640,260.63,604.537,254.816,580.7,250.455Zm-95.928,60.787a8.211,8.211,0,0,0-9.521-5.938,23.168,23.168,0,0,1-4.155.387c-7.849,0-12.5-6.106-12.5-14.245V240.28h20.349a8.143,8.143,0,0,0,8.141-8.143V209.466a8.143,8.143,0,0,0-8.141-8.143H458.594V171.091a8.143,8.143,0,0,0-8.143-8.143H422.257a8.143,8.143,0,0,0-8.143,8.143h0v30.232H399a8.143,8.143,0,0,0-8.143,8.143h0v22.671A8.143,8.143,0,0,0,399,240.28h15.115v63.667c0,27.037,15.408,41.282,43.9,41.282,12.183,0,21.383-2.2,27.6-5.446a8.161,8.161,0,0,0,4.145-9.278Z\"]\n};\nconst faFreeCodeCamp = {\n  prefix: 'fab',\n  iconName: 'free-code-camp',\n  icon: [576, 512, [], \"f2c5\", \"M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z\"]\n};\nconst faHornbill = {\n  prefix: 'fab',\n  iconName: 'hornbill',\n  icon: [512, 512, [], \"f592\", \"M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"]\n};\nconst faJs = {\n  prefix: 'fab',\n  iconName: 'js',\n  icon: [448, 512, [], \"f3b8\", \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"]\n};\nconst faIdeal = {\n  prefix: 'fab',\n  iconName: 'ideal',\n  icon: [576, 512, [], \"e013\", \"M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z\"]\n};\nconst faGit = {\n  prefix: 'fab',\n  iconName: 'git',\n  icon: [512, 512, [], \"f1d3\", \"M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"]\n};\nconst faDev = {\n  prefix: 'fab',\n  iconName: 'dev',\n  icon: [448, 512, [], \"f6cc\", \"M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z\"]\n};\nconst faSketch = {\n  prefix: 'fab',\n  iconName: 'sketch',\n  icon: [512, 512, [], \"f7c6\", \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"]\n};\nconst faYandexInternational = {\n  prefix: 'fab',\n  iconName: 'yandex-international',\n  icon: [320, 512, [], \"f414\", \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"]\n};\nconst faCcAmex = {\n  prefix: 'fab',\n  iconName: 'cc-amex',\n  icon: [576, 512, [], \"f1f3\", \"M0 432c0 26.5 21.5 48 48 48H528c26.5 0 48-21.5 48-48v-1.1H514.3l-31.9-35.1-31.9 35.1H246.8V267.1H181L262.7 82.4h78.6l28.1 63.2V82.4h97.2L483.5 130l17-47.6H576V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80V432zm440.4-21.7L482.6 364l42 46.3H576l-68-72.1 68-72.1H525.4l-42 46.7-41.5-46.7H390.5L458 338.6l-67.4 71.6V377.1h-83V354.9h80.9V322.6H307.6V300.2h83V267.1h-122V410.3H440.4zm96.3-72L576 380.2V296.9l-39.3 41.4zm-36.3-92l36.9-100.6V246.3H576V103H515.8l-32.2 89.3L451.7 103H390.5V246.1L327.3 103H276.1L213.7 246.3h43l11.9-28.7h65.9l12 28.7h82.7V146L466 246.3h34.4zM282 185.4l19.5-46.9 19.4 46.9H282z\"]\n};\nconst faUber = {\n  prefix: 'fab',\n  iconName: 'uber',\n  icon: [448, 512, [], \"f402\", \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"]\n};\nconst faGithub = {\n  prefix: 'fab',\n  iconName: 'github',\n  icon: [496, 512, [], \"f09b\", \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"]\n};\nconst faPhp = {\n  prefix: 'fab',\n  iconName: 'php',\n  icon: [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"]\n};\nconst faAlipay = {\n  prefix: 'fab',\n  iconName: 'alipay',\n  icon: [448, 512, [], \"f642\", \"M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z\"]\n};\nconst faYoutube = {\n  prefix: 'fab',\n  iconName: 'youtube',\n  icon: [576, 512, [61802], \"f167\", \"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"]\n};\nconst faSkyatlas = {\n  prefix: 'fab',\n  iconName: 'skyatlas',\n  icon: [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"]\n};\nconst faFirefoxBrowser = {\n  prefix: 'fab',\n  iconName: 'firefox-browser',\n  icon: [512, 512, [], \"e007\", \"M130.22 127.548C130.38 127.558 130.3 127.558 130.22 127.548V127.548ZM481.64 172.898C471.03 147.398 449.56 119.898 432.7 111.168C446.42 138.058 454.37 165.048 457.4 185.168C457.405 185.306 457.422 185.443 457.45 185.578C429.87 116.828 383.098 89.1089 344.9 28.7479C329.908 5.05792 333.976 3.51792 331.82 4.08792L331.7 4.15792C284.99 30.1109 256.365 82.5289 249.12 126.898C232.503 127.771 216.219 131.895 201.19 139.035C199.838 139.649 198.736 140.706 198.066 142.031C197.396 143.356 197.199 144.87 197.506 146.323C197.7 147.162 198.068 147.951 198.586 148.639C199.103 149.327 199.76 149.899 200.512 150.318C201.264 150.737 202.096 150.993 202.954 151.071C203.811 151.148 204.676 151.045 205.491 150.768L206.011 150.558C221.511 143.255 238.408 139.393 255.541 139.238C318.369 138.669 352.698 183.262 363.161 201.528C350.161 192.378 326.811 183.338 304.341 187.248C392.081 231.108 368.541 381.784 246.951 376.448C187.487 373.838 149.881 325.467 146.421 285.648C146.421 285.648 157.671 243.698 227.041 243.698C234.541 243.698 255.971 222.778 256.371 216.698C256.281 214.698 213.836 197.822 197.281 181.518C188.434 172.805 184.229 168.611 180.511 165.458C178.499 163.75 176.392 162.158 174.201 160.688C168.638 141.231 168.399 120.638 173.51 101.058C148.45 112.468 128.96 130.508 114.8 146.428H114.68C105.01 134.178 105.68 93.7779 106.25 85.3479C106.13 84.8179 99.022 89.0159 98.1 89.6579C89.5342 95.7103 81.5528 102.55 74.26 110.088C57.969 126.688 30.128 160.242 18.76 211.318C14.224 231.701 12 255.739 12 263.618C12 398.318 121.21 507.508 255.92 507.508C376.56 507.508 478.939 420.281 496.35 304.888C507.922 228.192 481.64 173.82 481.64 172.898Z\"]\n};\nconst faReplyd = {\n  prefix: 'fab',\n  iconName: 'replyd',\n  icon: [448, 512, [], \"f3e6\", \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"]\n};\nconst faSuse = {\n  prefix: 'fab',\n  iconName: 'suse',\n  icon: [640, 512, [], \"f7d6\", \"M593.1 192.6A10.4 10.4 0 1 1 604.5 210a10.4 10.4 0 1 1 -11.4-17.4zm-47.1 12.2a38.5 38.5 0 1 1 75-17.6 38.5 38.5 0 1 1 -75 17.6zM433.7 336.7c3.2 4.6 5.8 9 7.3 13.4c1 3.1 2.4 7.3 5.5 8.9c.2 .1 .3 .2 .5 .2c5.7 2.1 20.3 1.7 20.3 1.7h26.8c2.3 0 22.4 0 21.9-2.3c-2.4-10.8-14.9-12.7-24.4-18.3c-8.7-5.2-17-11.1-20.8-21.3c-2-5.2-.8-17.4 2.6-21.8c2.5-3.2 6.1-5.3 10-6.2c4.3-.9 8.8-.1 13.1 .3c5.3 .5 10.6 1.5 15.9 2.2c10.3 1.3 20.6 1.9 31 1.6c17.1-.5 34.2-3.2 50.4-8.7c11.3-3.8 22.4-8.9 32-16.1c10.9-8.1 8.1-7.4-3-6.2c-13.3 1.4-26.6 1.6-39.9 .8c-12.4-.7-24.7-2.2-35.9-7.9c-8.8-4.6-16.4-9.1-23.4-16.2c-1-1.1-1.7-4.2 .2-6.2c1.9-1.9 5.8-.8 7 .2c12.2 10.2 30.5 18.6 49.3 19.5c10.2 .5 20.1 .7 30.4 .3c5.1-.2 12.8-.2 17.9-.3c2.6 0 9.8 .7 11.2-2.1c.4-.8 .4-1.8 .3-2.7c-1.5-40.9-4.5-86.9-47.3-106.5c-31.9-14.6-79.7-37.2-99.9-46.6c-4.7-2.2-10.2 1.3-10.2 6.5c0 13.6 .7 33.3 .7 51.1c-9.7-9.9-26-16.1-38.4-21.8c-14.1-6.5-28.7-12-43.5-16.6c-29.8-9.2-60.7-14.9-91.7-18c-35.2-3.5-71-1.8-105.7 5.3C147 115.1 90.8 142.6 48.2 182.7C22.1 207.3 1.6 242.4 .2 277.9c-2 50.3 12.1 77.3 38 105.2c41.3 44.4 130.2 50.6 166.2-2c16.2-23.7 19.7-55.8 8-82c-11.8-26.2-38.8-45.1-67.4-46c-22.2-.7-45.9 10.6-54.5 31.1c-6.5 15.7-2.8 35.1 9 47.3c4.6 4.8 10.9 8.7 17.7 7.1c4-.9 7.4-3.9 8-8c.9-6-4.4-9.9-7.6-14.5c-5.8-8.3-4.7-20.9 2.7-27.9c6.2-6 15.3-7.8 23.9-7.7c8 0 16.2 1.4 23.1 5.5c9.7 5.7 16.2 16.2 18.4 27.2c6.7 33-20.2 59.9-56.6 62c-18.6 1.1-37.6-3.8-52.1-15.5C40.1 329.9 31.1 269.4 73.2 237c40-30.7 90.4-22.8 120.2-6.8c23.8 12.8 41.5 33.6 55 56.7c6.7 11.6 12.5 23.7 17.8 36.1c5.1 11.8 9.9 23.8 20.2 32.5c6.8 5.8 15.2 5.6 24.1 5.6h50.8c6.9 0 5.2-4.6 2.2-7.7c-6.7-6.9-16.4-8.4-25.4-10.9c-20.5-5.6-18.4-32.8-12.7-32.8c18.3 0 18.9 .6 34.9 .3c23.2-.3 30.2-1.7 48.3 5c9.7 3.6 19 13.1 25.1 21.7z\"]\n};\nconst faJenkins = {\n  prefix: 'fab',\n  iconName: 'jenkins',\n  icon: [512, 512, [], \"f3b6\", \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"]\n};\nconst faTwitter = {\n  prefix: 'fab',\n  iconName: 'twitter',\n  icon: [512, 512, [], \"f099\", \"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"]\n};\nconst faRockrms = {\n  prefix: 'fab',\n  iconName: 'rockrms',\n  icon: [496, 512, [], \"f3e9\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\"]\n};\nconst faPinterest = {\n  prefix: 'fab',\n  iconName: 'pinterest',\n  icon: [496, 512, [], \"f0d2\", \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"]\n};\nconst faBuffer = {\n  prefix: 'fab',\n  iconName: 'buffer',\n  icon: [448, 512, [], \"f837\", \"M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"]\n};\nconst faNpm = {\n  prefix: 'fab',\n  iconName: 'npm',\n  icon: [576, 512, [], \"f3d4\", \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"]\n};\nconst faYammer = {\n  prefix: 'fab',\n  iconName: 'yammer',\n  icon: [512, 512, [], \"f840\", \"M500.676,159.486a12.779,12.779,0,0,0-6.4-8.282,13.954,13.954,0,0,0-10.078-1.125L457.8,156.7l-.043-.2-22.3,5.785-1.243.333-.608-2.17A369.037,369.037,0,0,0,347.538,4.289a14.1,14.1,0,0,0-19.784-.463l-102.9,102.747H24.947A24.9,24.9,0,0,0,0,131.417V380.38a24.963,24.963,0,0,0,24.918,24.9H224.986L328.072,508a13.667,13.667,0,0,0,19.327,0c.126-.126.249-.255.37-.385a368.025,368.025,0,0,0,69.577-107.374,403.45,403.45,0,0,0,17.3-50.8v-.028l20.406,5.336.029-.073L483.345,362a20.253,20.253,0,0,0,2.619.5,13.359,13.359,0,0,0,4.139-.072,13.5,13.5,0,0,0,10.515-9.924,415.855,415.855,0,0,0,.058-193.013ZM337.125,24.65l.013.014h-.013Zm-110.2,165.161L174.311,281.1a11.338,11.338,0,0,0-1.489,5.655v46.189a22.04,22.04,0,0,1-22.041,22h-3.4A22.068,22.068,0,0,1,125.3,332.962V287.294a11.532,11.532,0,0,0-1.388-5.51l-51.6-92.2a21.988,21.988,0,0,1,19.264-32.726h3.268a22.059,22.059,0,0,1,19.611,11.916l36.357,70.281,37.515-70.512a22.066,22.066,0,0,1,38.556-.695,21.7,21.7,0,0,1,0,21.967ZM337.145,24.673a348.147,348.147,0,0,1,75.8,141.335l.564,1.952-114.134,29.6V131.417a25.006,25.006,0,0,0-24.947-24.9H255.067Zm60.5,367.305v-.043l-.014.014a347.19,347.19,0,0,1-60.177,95.227l-82.2-81.893h19.177a24.978,24.978,0,0,0,24.947-24.9v-66.2l114.6,29.862A385.191,385.191,0,0,1,397.648,391.978Zm84-52.45.015.014-50.618-13.131L299.379,292.1V219.572l119.746-30.99,4.468-1.157,39.54-10.253,18.511-4.816A393,393,0,0,1,481.644,339.528Z\"]\n};\nconst faBtc = {\n  prefix: 'fab',\n  iconName: 'btc',\n  icon: [384, 512, [], \"f15a\", \"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\"]\n};\nconst faDribbble = {\n  prefix: 'fab',\n  iconName: 'dribbble',\n  icon: [512, 512, [], \"f17d\", \"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\"]\n};\nconst faStumbleuponCircle = {\n  prefix: 'fab',\n  iconName: 'stumbleupon-circle',\n  icon: [496, 512, [], \"f1a3\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"]\n};\nconst faInternetExplorer = {\n  prefix: 'fab',\n  iconName: 'internet-explorer',\n  icon: [512, 512, [], \"f26b\", \"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\"]\n};\nconst faStubber = {\n  prefix: 'fab',\n  iconName: 'stubber',\n  icon: [448, 512, [], \"e5c7\", \"M136.5 294.2l58.8 22.9c9.1-36.8 25.4-61.1 55-61.1c49.4 0 71.4 63.6 142.4 63.6c15.6 0 35.9-2.8 55.3-13.3V368c0 61.8-50.4 112-112.3 112H0l41.8-56L0 368l41.7-56L0 256.1l41.8-56L0 144.1 41.8 88 0 32H335.7C397.6 32 448 82.3 448 144.1v51.3c-9.2 36.3-25.9 60.6-55 60.6c-49.6 0-71.6-63.5-142.4-63.5c-35.9 0-95.2 14.6-114.1 101.6h0z\"]\n};\nconst faTelegram = {\n  prefix: 'fab',\n  iconName: 'telegram',\n  icon: [496, 512, [62462, \"telegram-plane\"], \"f2c6\", \"M248,8C111.033,8,0,119.033,0,256S111.033,504,248,504,496,392.967,496,256,384.967,8,248,8ZM362.952,176.66c-3.732,39.215-19.881,134.378-28.1,178.3-3.476,18.584-10.322,24.816-16.948,25.425-14.4,1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25,5.342-39.5,3.652-3.793,67.107-61.51,68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608,69.142-14.845,10.194-26.894,9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7,18.45-13.7,108.446-47.248,144.628-62.3c68.872-28.647,83.183-33.623,92.511-33.789,2.052-.034,6.639.474,9.61,2.885a10.452,10.452,0,0,1,3.53,6.716A43.765,43.765,0,0,1,362.952,176.66Z\"]\n};\nconst faTelegramPlane = faTelegram;\nconst faOldRepublic = {\n  prefix: 'fab',\n  iconName: 'old-republic',\n  icon: [496, 512, [], \"f510\", \"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"]\n};\nconst faOdysee = {\n  prefix: 'fab',\n  iconName: 'odysee',\n  icon: [512, 512, [], \"e5c6\", \"M406.7 463c-42.3 30.8-94.4 49-150.7 49C144.9 512 50.3 441.2 14.9 342.2c2.4 1.7 5.9 3.6 7.9 4.4c16.3 7.4 40.1-5.4 62.9-28.7c6.9-6.9 14.4-12.4 22.8-17.3c18.3-11.9 37.6-20.8 58.4-27.2c0 0 22.3 34.2 43.1 74.8s-22.3 54-27.2 54c-.3 0-.8 0-1.5-.1c-11-.5-70-3-56 51.1c14.9 57.4 97.5 36.6 139.6 8.9s31.7-118.3 31.7-118.3c41.1-6.4 54 37.1 57.9 59.4c.8 4.6 1.1 9.9 1.4 15.5c1.1 21.2 2.3 45.6 35.3 46.4c5.3 0 10.6-.8 15.5-2zm-95.3-23.7c-2-.5-3.5-2.5-3-5c1-2.5 3-3.5 5-3s3.5 3 3 5s-2.5 3.5-5 3zm-207-95.6c1.5-.5 3.5 1 4 3c0 2-1 4-3 4c-1.5 .5-3.5-1-4-3c-.5-1.5 1-3.5 3-4zM451.8 421C489.3 376.4 512 318.8 512 256c0-67.5-26.1-128.9-68.8-174.7c-.1 23.5-6.1 48.2-16.8 69.2c-11.9 20.3-49 58.9-69.8 78.7c-.7 .3-1.1 .9-1.5 1.4c-.2 .2-.3 .4-.5 .6c-5 6.9-4 16.8 3 21.8c21.3 15.8 56.4 45.6 59.4 72.8c3.5 34.9 27.9 75.6 34.2 86.2l0 0c.8 1.3 1.3 2.1 1.4 2.4c0 2.2-.4 4.3-.8 6.5zM390.7 251c-.5 3 1 5.9 4 6.4s5.9-1 6.4-4s-1-5.9-4-6.4c-3-1-5.9 1-6.4 4zm61.4-60.9l-11.4 5.4-3 12.9-5.4-11.4-12.9-3 11.4-5.4 3-12.9 5.4 11.4 12.9 3zM395.5 41.3c-16.2 8.2-22.1 32.8-29 61.4l0 0c-.3 1.4-.7 2.8-1 4.2c-9.5 38.5-30.6 37.6-41.7 37.2c-1.1 0-2-.1-2.9-.1c-5.1 0-6-4-8.9-17.1c-2.6-12.1-6.9-32-17.9-63.6C271.4-2.5 211.4 13.9 165.9 41.1C110.6 74.2 131.5 143 146.1 190.5c.7 2.2 1.4 4.4 2 6.6c-4 4-13.8 7.5-26 11.9c-12.1 4.3-26.6 9.5-40.3 16.9C47.9 243.9 11.5 274.9 2 288.5C.7 277.8 0 267 0 256C0 114.6 114.6 0 256 0c51.4 0 99.4 15.2 139.5 41.3zM58.9 189.6c-1.5-2-4.5-3-6.4-1.5s-3 4.5-1.5 6.4s4.5 3 6.4 1.5c2.5-1.5 3-4.5 1.5-6.4zM327.3 64.9c2-1.5 5-.5 6.4 1.5c1.5 2.5 1 5.4-1.5 6.4c-2 1.5-5 .5-6.4-1.5s-.5-5 1.5-6.4zM95.1 105c-.5 1.5 .5 3 2 3c1.5 .5 3-.5 3-2c.5-1.5-.5-3-2-3s-3 .5-3 2zm84.7-.5c-3.5-43.1 37.1-54 37.1-54c44.1-15.4 56 5.9 66.4 37.6s3 42.6-38.6 58.9s-61.9-4.5-64.9-42.6zm89.6 14.9h1c2.5 0 5-2 5-5c2-6.9 1-14.4-2-20.8c-1.5-2-4-3.5-6.4-2.5c-3 1-4.5 4-3.5 6.9c2 4.5 3 9.9 1.5 14.9c-.5 3 1.5 5.9 4.5 6.4zm-9.9-41.6c-2 0-4-1-5-3s-2-3.5-3-5c-2-2-2-5.4 0-7.4s5.4-2 7.4 0c2 2.5 3.5 5 5 7.4s.5 5.9-2.5 7.4c-.6 0-1 .2-1.3 .3c-.2 .1-.4 .2-.6 .2z\"]\n};\nconst faSquareWhatsapp = {\n  prefix: 'fab',\n  iconName: 'square-whatsapp',\n  icon: [448, 512, [\"whatsapp-square\"], \"f40c\", \"M92.1 254.6c0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6L152 365.2l4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8c0-35.2-15.2-68.3-40.1-93.2c-25-25-58-38.7-93.2-38.7c-72.7 0-131.8 59.1-131.9 131.8zM274.8 330c-12.6 1.9-22.4 .9-47.5-9.9c-36.8-15.9-61.8-51.5-66.9-58.7c-.4-.6-.7-.9-.8-1.1c-2-2.6-16.2-21.5-16.2-41c0-18.4 9-27.9 13.2-32.3c.3-.3 .5-.5 .7-.8c3.6-4 7.9-5 10.6-5c2.6 0 5.3 0 7.6 .1c.3 0 .5 0 .8 0c2.3 0 5.2 0 8.1 6.8c1.2 2.9 3 7.3 4.9 11.8c3.3 8 6.7 16.3 7.3 17.6c1 2 1.7 4.3 .3 6.9c-3.4 6.8-6.9 10.4-9.3 13c-3.1 3.2-4.5 4.7-2.3 8.6c15.3 26.3 30.6 35.4 53.9 47.1c4 2 6.3 1.7 8.6-1c2.3-2.6 9.9-11.6 12.5-15.5c2.6-4 5.3-3.3 8.9-2s23.1 10.9 27.1 12.9c.8 .4 1.5 .7 2.1 1c2.8 1.4 4.7 2.3 5.5 3.6c.9 1.9 .9 9.9-2.4 19.1c-3.3 9.3-19.1 17.7-26.7 18.8zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM148.1 393.9L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5c29.9 30 47.9 69.8 47.9 112.2c0 87.4-72.7 158.5-160.1 158.5c-26.6 0-52.7-6.7-75.8-19.3z\"]\n};\nconst faWhatsappSquare = faSquareWhatsapp;\nconst faNodeJs = {\n  prefix: 'fab',\n  iconName: 'node-js',\n  icon: [448, 512, [], \"f3d3\", \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"]\n};\nconst faEdgeLegacy = {\n  prefix: 'fab',\n  iconName: 'edge-legacy',\n  icon: [512, 512, [], \"e078\", \"M25.71,228.16l.35-.48c0,.16,0,.32-.07.48Zm460.58,15.51c0-44-7.76-84.46-28.81-122.4C416.5,47.88,343.91,8,258.89,8,119,7.72,40.62,113.21,26.06,227.68c42.42-61.31,117.07-121.38,220.37-125,0,0,109.67,0,99.42,105H170c6.37-37.39,18.55-59,34.34-78.93-75.05,34.9-121.85,96.1-120.75,188.32.83,71.45,50.13,144.84,120.75,172,83.35,31.84,192.77,7.2,240.13-21.33V363.31C363.6,419.8,173.6,424.23,172.21,295.74H486.29V243.67Z\"]\n};\nconst faSlack = {\n  prefix: 'fab',\n  iconName: 'slack',\n  icon: [448, 512, [62447, \"slack-hash\"], \"f198\", \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"]\n};\nconst faSlackHash = faSlack;\nconst faMedrt = {\n  prefix: 'fab',\n  iconName: 'medrt',\n  icon: [544, 512, [], \"f3c8\", \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"]\n};\nconst faUsb = {\n  prefix: 'fab',\n  iconName: 'usb',\n  icon: [640, 512, [], \"f287\", \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"]\n};\nconst faTumblr = {\n  prefix: 'fab',\n  iconName: 'tumblr',\n  icon: [320, 512, [], \"f173\", \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"]\n};\nconst faVaadin = {\n  prefix: 'fab',\n  iconName: 'vaadin',\n  icon: [448, 512, [], \"f408\", \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"]\n};\nconst faQuora = {\n  prefix: 'fab',\n  iconName: 'quora',\n  icon: [448, 512, [], \"f2c4\", \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\"]\n};\nconst faSquareXTwitter = {\n  prefix: 'fab',\n  iconName: 'square-x-twitter',\n  icon: [448, 512, [], \"e61a\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396H283.8L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5L313.6 116h47.5zM323.3 367.6L153.4 142.9H125.1L296.9 367.6h26.3z\"]\n};\nconst faReacteurope = {\n  prefix: 'fab',\n  iconName: 'reacteurope',\n  icon: [576, 512, [], \"f75d\", \"M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"]\n};\nconst faMedium = {\n  prefix: 'fab',\n  iconName: 'medium',\n  icon: [640, 512, [62407, \"medium-m\"], \"f23a\", \"M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z\"]\n};\nconst faMediumM = faMedium;\nconst faAmilia = {\n  prefix: 'fab',\n  iconName: 'amilia',\n  icon: [448, 512, [], \"f36d\", \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"]\n};\nconst faMixcloud = {\n  prefix: 'fab',\n  iconName: 'mixcloud',\n  icon: [640, 512, [], \"f289\", \"M212.98 346.566H179.789V195.114L185.973 173.47H175.262L137.127 346.566H76.1069L37.7323 173.47H27.276L33.1913 195.114V346.566H0V165H65.6506L102.248 338.096H110.747L147.329 165H212.98L212.98 346.566ZM544.459 283.589L458.434 345.655V307.534L531.329 255.776L458.434 204.017V165.896L544.459 228.231H553.721L640 165.896V204.017L566.866 255.776L640 307.549V345.655L553.721 283.589H544.459ZM430.157 272.311H248.113V239.255H430.157V272.311Z\"]\n};\nconst faFlipboard = {\n  prefix: 'fab',\n  iconName: 'flipboard',\n  icon: [448, 512, [], \"f44d\", \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"]\n};\nconst faViacoin = {\n  prefix: 'fab',\n  iconName: 'viacoin',\n  icon: [384, 512, [], \"f237\", \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"]\n};\nconst faCriticalRole = {\n  prefix: 'fab',\n  iconName: 'critical-role',\n  icon: [448, 512, [], \"f6c9\", \"M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"]\n};\nconst faSitrox = {\n  prefix: 'fab',\n  iconName: 'sitrox',\n  icon: [448, 512, [], \"e44a\", \"M212.439 0.00846128V0H448V128H64C64 57.6008 141.755 0.475338 212.439 0.00846128ZM237.256 192V192.007C307.135 192.475 384 249.6 384 320H210.809V319.995C140.915 319.563 64 262.424 64 192H237.256ZM235.565 511.993C306.251 511.521 384 454.399 384 384H0V512H235.565V511.993Z\"]\n};\nconst faDiscourse = {\n  prefix: 'fab',\n  iconName: 'discourse',\n  icon: [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"]\n};\nconst faJoomla = {\n  prefix: 'fab',\n  iconName: 'joomla',\n  icon: [448, 512, [], \"f1aa\", \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"]\n};\nconst faMastodon = {\n  prefix: 'fab',\n  iconName: 'mastodon',\n  icon: [448, 512, [], \"f4f6\", \"M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z\"]\n};\nconst faAirbnb = {\n  prefix: 'fab',\n  iconName: 'airbnb',\n  icon: [448, 512, [], \"f834\", \"M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z\"]\n};\nconst faWolfPackBattalion = {\n  prefix: 'fab',\n  iconName: 'wolf-pack-battalion',\n  icon: [512, 512, [], \"f514\", \"M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"]\n};\nconst faBuyNLarge = {\n  prefix: 'fab',\n  iconName: 'buy-n-large',\n  icon: [576, 512, [], \"f8a6\", \"M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z\"]\n};\nconst faGulp = {\n  prefix: 'fab',\n  iconName: 'gulp',\n  icon: [256, 512, [], \"f3ae\", \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\"]\n};\nconst faCreativeCommonsSamplingPlus = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling-plus',\n  icon: [496, 512, [], \"f4f1\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"]\n};\nconst faStrava = {\n  prefix: 'fab',\n  iconName: 'strava',\n  icon: [384, 512, [], \"f428\", \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"]\n};\nconst faEmber = {\n  prefix: 'fab',\n  iconName: 'ember',\n  icon: [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"]\n};\nconst faCanadianMapleLeaf = {\n  prefix: 'fab',\n  iconName: 'canadian-maple-leaf',\n  icon: [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"]\n};\nconst faTeamspeak = {\n  prefix: 'fab',\n  iconName: 'teamspeak',\n  icon: [576, 512, [], \"f4f9\", \"M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5c0 .2-.1 .3-.1 .5C43.5 184.4 16 223 16 268c0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5c15.7-41.8 40.4-79.6 72.3-110.7c1.8-1.6 4-2.6 6.3-3.1c37.2-11.5 76.7-13.3 114.8-5.2C454.7 67.6 534 180.7 517.1 301.3c-8.4 62.6-38.6 112.7-87.7 151.4c-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3c40.7 4.2 81.4 2.1 120.1-12.5c94-35.5 149.3-102.3 162.9-202.5c4.8-52.6-5.8-105.4-30.8-152C454.6 11.3 290.8-38.4 159 32c-2.4 1.4-4.5 3.1-6.3 5.2zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3c53.2-1 123.2-29.2 161.8-97.1c39.7-69.9 37.6-139.9-6.3-207.8C413.8 105 360.5 77.9 293.7 73.7c1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5c2.1 15.7-1 30.3-13.6 41.8c-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7L365.7 318c5.2 11.5 4.2 19.8-6.3 28.2c-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7c-2.5 2.4-3.8 5.9-3.1 9.4c2.1 11.5-2.1 19.8-12.5 25.1c-2.1 1-4.2 5.2-5.2 7.3zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1c24 5.2 41.8-6.3 44.9-30.3c1-8.4 5.2-14.6 12.5-17.7c7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5c-1.4-3-2.4-6.2-3.1-9.4c-3.1-14.6-2.1-15.7 11.5-18.8c8.4-3.1 15.7-6.3 21.9-12.5c3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7c-6.4-11.7-13-23.6-15.7-37.1c-2.1-9.4-1-17.7 8.4-24c5.2-4.2 8.4-9.4 8.4-16.7c-.4-10.1-1.5-20.3-3.1-30.3c-6.3-37.6-23-68.9-51.2-95c-5.2-4.2-9.4-6.3-16.7-4.2L203.9 91.5c2 1.2 4 2.4 6 3.6l0 0c6.3 3.7 12.2 7.3 17 12.1c30.3 26.1 41.8 61.6 45.9 100.2c1 8.4 0 16.7-7.3 21.9c-8.4 5.2-10.4 12.5-7.3 20.9c4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6c-12.5 3.1-14.6 7.3-10.4 20.9c.6 1.5 1.4 2.8 2.1 4.2c2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4c-7.3 4.2-11.5 9.4-11.5 17.7c0 12.5-7.3 19.8-18.8 24c-3.8 1-7.6 1.5-11.5 1l-34.5-2.1z\"]\n};\nconst faPushed = {\n  prefix: 'fab',\n  iconName: 'pushed',\n  icon: [432, 512, [], \"f3e1\", \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"]\n};\nconst faWordpressSimple = {\n  prefix: 'fab',\n  iconName: 'wordpress-simple',\n  icon: [512, 512, [], \"f411\", \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"]\n};\nconst faNutritionix = {\n  prefix: 'fab',\n  iconName: 'nutritionix',\n  icon: [400, 512, [], \"f3d6\", \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"]\n};\nconst faWodu = {\n  prefix: 'fab',\n  iconName: 'wodu',\n  icon: [640, 512, [], \"e088\", \"M178.414 339.706H141.1L112.166 223.475h-.478L83.228 339.706H45.2L0 168.946H37.548L64.574 285.177h.478L94.707 168.946h35.157l29.178 117.667h.479L187.5 168.946h36.831zM271.4 212.713c38.984 0 64.1 25.828 64.1 65.291 0 39.222-25.111 65.05-64.1 65.05-38.743 0-63.855-25.828-63.855-65.05C207.547 238.541 232.659 212.713 271.4 212.713zm0 104.753c23.2 0 30.133-19.852 30.133-39.462 0-19.852-6.934-39.7-30.133-39.7-27.7 0-29.894 19.85-29.894 39.7C241.508 297.614 248.443 317.466 271.4 317.466zM435.084 323.922h-.478c-7.893 13.392-21.765 19.132-37.548 19.132-37.31 0-55.485-32.045-55.485-66.246 0-33.243 18.415-64.095 54.767-64.095 14.589 0 28.938 6.218 36.831 18.416h.24V168.946h33.96v170.76H435.084zM405.428 238.3c-22.24 0-29.894 19.134-29.894 39.463 0 19.371 8.848 39.7 29.894 39.7 22.482 0 29.178-19.613 29.178-39.94C434.606 257.436 427.432 238.3 405.428 238.3zM592.96 339.706H560.673V322.487h-.718c-8.609 13.87-23.436 20.567-37.786 20.567-36.113 0-45.2-20.328-45.2-50.941V216.061h33.959V285.9c0 20.329 5.979 30.372 21.765 30.372 18.415 0 26.306-10.283 26.306-35.393V216.061H592.96zM602.453 302.876H640v36.83H602.453z\"]\n};\nconst faGooglePay = {\n  prefix: 'fab',\n  iconName: 'google-pay',\n  icon: [640, 512, [], \"e079\", \"M105.72,215v41.25h57.1a49.66,49.66,0,0,1-21.14,32.6c-9.54,6.55-21.72,10.28-36,10.28-27.6,0-50.93-18.91-59.3-44.22a65.61,65.61,0,0,1,0-41l0,0c8.37-25.46,31.7-44.37,59.3-44.37a56.43,56.43,0,0,1,40.51,16.08L176.47,155a101.24,101.24,0,0,0-70.75-27.84,105.55,105.55,0,0,0-94.38,59.11,107.64,107.64,0,0,0,0,96.18v.15a105.41,105.41,0,0,0,94.38,59c28.47,0,52.55-9.53,70-25.91,20-18.61,31.41-46.15,31.41-78.91A133.76,133.76,0,0,0,205.38,215Zm389.41-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46,0-39.34,8.34-50.5,24.86l20.85,13.26q11.45-17,31.26-17a34.05,34.05,0,0,1,22.75,8.79A28.14,28.14,0,0,1,487.79,248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44,0-29.65,3.88-39.49,11.77s-14.82,18.31-14.82,31.56a39.74,39.74,0,0,0,13.94,31.27c9.25,8.34,21,12.51,34.79,12.51,16.29,0,29.21-7.3,39-21.89h1v17.72h22.61V250C510.25,233.45,505.26,220.34,495.13,211ZM475.9,300.3a37.32,37.32,0,0,1-26.57,11.16A28.61,28.61,0,0,1,431,305.21a19.41,19.41,0,0,1-7.77-15.63c0-7,3.22-12.81,9.54-17.42s14.53-7,24.07-7C470,265,480.3,268,487.64,273.94,487.64,284.07,483.68,292.85,475.9,300.3Zm-93.65-142A55.71,55.71,0,0,0,341.74,142H279.07V328.74H302.7V253.1h39c16,0,29.5-5.36,40.51-15.93.88-.89,1.76-1.79,2.65-2.68A54.45,54.45,0,0,0,382.25,158.26Zm-16.58,62.23a30.65,30.65,0,0,1-23.34,9.68H302.7V165h39.63a32,32,0,0,1,22.6,9.23A33.18,33.18,0,0,1,365.67,220.49ZM614.31,201,577.77,292.7h-.45L539.9,201H514.21L566,320.55l-29.35,64.32H561L640,201Z\"]\n};\nconst faIntercom = {\n  prefix: 'fab',\n  iconName: 'intercom',\n  icon: [448, 512, [], \"f7af\", \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"]\n};\nconst faZhihu = {\n  prefix: 'fab',\n  iconName: 'zhihu',\n  icon: [640, 512, [], \"f63f\", \"M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"]\n};\nconst faKorvue = {\n  prefix: 'fab',\n  iconName: 'korvue',\n  icon: [446, 512, [], \"f42f\", \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"]\n};\nconst faPix = {\n  prefix: 'fab',\n  iconName: 'pix',\n  icon: [512, 512, [], \"e43a\", \"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\"]\n};\nconst faSteamSymbol = {\n  prefix: 'fab',\n  iconName: 'steam-symbol',\n  icon: [448, 512, [], \"f3f6\", \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\"]\n};\nvar icons = {\n  faMonero,\n  faHooli,\n  faYelp,\n  faCcVisa,\n  faLastfm,\n  faShopware,\n  faCreativeCommonsNc,\n  faAws,\n  faRedhat,\n  faYoast,\n  faCloudflare,\n  faUps,\n  faPixiv,\n  faWpexplorer,\n  faDyalog,\n  faBity,\n  faStackpath,\n  faBuysellads,\n  faFirstOrder,\n  faModx,\n  faGuilded,\n  faVnv,\n  faSquareJs,\n  faJsSquare,\n  faMicrosoft,\n  faQq,\n  faOrcid,\n  faJava,\n  faInvision,\n  faCreativeCommonsPdAlt,\n  faCentercode,\n  faGlideG,\n  faDrupal,\n  faJxl,\n  faDartLang,\n  faHireAHelper,\n  faCreativeCommonsBy,\n  faUnity,\n  faWhmcs,\n  faRocketchat,\n  faVk,\n  faUntappd,\n  faMailchimp,\n  faCss3Alt,\n  faSquareReddit,\n  faRedditSquare,\n  faVimeoV,\n  faContao,\n  faSquareFontAwesome,\n  faDeskpro,\n  faBrave,\n  faSistrix,\n  faSquareInstagram,\n  faInstagramSquare,\n  faBattleNet,\n  faTheRedYeti,\n  faSquareHackerNews,\n  faHackerNewsSquare,\n  faEdge,\n  faThreads,\n  faNapster,\n  faSquareSnapchat,\n  faSnapchatSquare,\n  faGooglePlusG,\n  faArtstation,\n  faMarkdown,\n  faSourcetree,\n  faGooglePlus,\n  faDiaspora,\n  faFoursquare,\n  faStackOverflow,\n  faGithubAlt,\n  faPhoenixSquadron,\n  faPagelines,\n  faAlgolia,\n  faRedRiver,\n  faCreativeCommonsSa,\n  faSafari,\n  faGoogle,\n  faSquareFontAwesomeStroke,\n  faFontAwesomeAlt,\n  faAtlassian,\n  faLinkedinIn,\n  faDigitalOcean,\n  faNimblr,\n  faChromecast,\n  faEvernote,\n  faHackerNews,\n  faCreativeCommonsSampling,\n  faAdversal,\n  faCreativeCommons,\n  faWatchmanMonitoring,\n  faFonticons,\n  faWeixin,\n  faShirtsinbulk,\n  faCodepen,\n  faGitAlt,\n  faLyft,\n  faRev,\n  faWindows,\n  faWizardsOfTheCoast,\n  faSquareViadeo,\n  faViadeoSquare,\n  faMeetup,\n  faCentos,\n  faAdn,\n  faCloudsmith,\n  faOpensuse,\n  faPiedPiperAlt,\n  faSquareDribbble,\n  faDribbbleSquare,\n  faCodiepie,\n  faNode,\n  faMix,\n  faSteam,\n  faCcApplePay,\n  faScribd,\n  faDebian,\n  faOpenid,\n  faInstalod,\n  faFilesPinwheel,\n  faExpeditedssl,\n  faSellcast,\n  faSquareTwitter,\n  faTwitterSquare,\n  faRProject,\n  faDelicious,\n  faFreebsd,\n  faVuejs,\n  faAccusoft,\n  faIoxhost,\n  faFonticonsFi,\n  faAppStore,\n  faCcMastercard,\n  faItunesNote,\n  faGolang,\n  faKickstarter,\n  faSquareKickstarter,\n  faGrav,\n  faWeibo,\n  faUncharted,\n  faFirstdraft,\n  faSquareYoutube,\n  faYoutubeSquare,\n  faWikipediaW,\n  faWpressr,\n  faRendact,\n  faAngellist,\n  faGalacticRepublic,\n  faNfcDirectional,\n  faSkype,\n  faJoget,\n  faFedora,\n  faStripeS,\n  faMeta,\n  faLaravel,\n  faHotjar,\n  faBluetoothB,\n  faSquareLetterboxd,\n  faStickerMule,\n  faCreativeCommonsZero,\n  faHips,\n  faCss,\n  faBehance,\n  faReddit,\n  faDiscord,\n  faChrome,\n  faAppStoreIos,\n  faCcDiscover,\n  faWpbeginner,\n  faConfluence,\n  faShoelace,\n  faMdb,\n  faDochub,\n  faAccessibleIcon,\n  faEbay,\n  faAmazon,\n  faUnsplash,\n  faYarn,\n  faSquareSteam,\n  faSteamSquare,\n  fa500px,\n  faSquareVimeo,\n  faVimeoSquare,\n  faAsymmetrik,\n  faFontAwesome,\n  faFontAwesomeFlag,\n  faFontAwesomeLogoFull,\n  faGratipay,\n  faApple,\n  faHive,\n  faGitkraken,\n  faKeybase,\n  faApplePay,\n  faPadlet,\n  faAmazonPay,\n  faSquareGithub,\n  faGithubSquare,\n  faStumbleupon,\n  faFedex,\n  faPhoenixFramework,\n  faShopify,\n  faNeos,\n  faSquareThreads,\n  faHackerrank,\n  faResearchgate,\n  faSwift,\n  faAngular,\n  faSpeakap,\n  faAngrycreative,\n  faYCombinator,\n  faEmpire,\n  faEnvira,\n  faGoogleScholar,\n  faSquareGitlab,\n  faGitlabSquare,\n  faStudiovinari,\n  faPiedPiper,\n  faWordpress,\n  faProductHunt,\n  faFirefox,\n  faLinode,\n  faGoodreads,\n  faSquareOdnoklassniki,\n  faOdnoklassnikiSquare,\n  faJsfiddle,\n  faSith,\n  faThemeisle,\n  faPage4,\n  faHashnode,\n  faReact,\n  faCcPaypal,\n  faSquarespace,\n  faCcStripe,\n  faCreativeCommonsShare,\n  faBitcoin,\n  faKeycdn,\n  faOpera,\n  faItchIo,\n  faUmbraco,\n  faGalacticSenate,\n  faUbuntu,\n  faDraft2digital,\n  faStripe,\n  faHouzz,\n  faGg,\n  faDhl,\n  faSquarePinterest,\n  faPinterestSquare,\n  faXing,\n  faBlackberry,\n  faCreativeCommonsPd,\n  faPlaystation,\n  faQuinscape,\n  faLess,\n  faBloggerB,\n  faOpencart,\n  faVine,\n  faSignalMessenger,\n  faPaypal,\n  faGitlab,\n  faTypo3,\n  faRedditAlien,\n  faYahoo,\n  faDailymotion,\n  faAffiliatetheme,\n  faPiedPiperPp,\n  faBootstrap,\n  faOdnoklassniki,\n  faNfcSymbol,\n  faMintbit,\n  faEthereum,\n  faSpeakerDeck,\n  faCreativeCommonsNcEu,\n  faPatreon,\n  faAvianex,\n  faEllo,\n  faGofore,\n  faBimobject,\n  faBraveReverse,\n  faFacebookF,\n  faSquareGooglePlus,\n  faGooglePlusSquare,\n  faWebAwesome,\n  faMandalorian,\n  faFirstOrderAlt,\n  faOsi,\n  faGoogleWallet,\n  faDAndDBeyond,\n  faPeriscope,\n  faFulcrum,\n  faCloudscale,\n  faForumbee,\n  faMizuni,\n  faSchlix,\n  faSquareXing,\n  faXingSquare,\n  faBandcamp,\n  faWpforms,\n  faCloudversify,\n  faUsps,\n  faMegaport,\n  faMagento,\n  faSpotify,\n  faOptinMonster,\n  faFly,\n  faSquareBluesky,\n  faAviato,\n  faItunes,\n  faCuttlefish,\n  faBlogger,\n  faFlickr,\n  faViber,\n  faSoundcloud,\n  faDigg,\n  faTencentWeibo,\n  faLetterboxd,\n  faSymfony,\n  faMaxcdn,\n  faEtsy,\n  faFacebookMessenger,\n  faAudible,\n  faThinkPeaks,\n  faBilibili,\n  faErlang,\n  faXTwitter,\n  faCottonBureau,\n  faDashcube,\n  fa42Group,\n  faInnosoft,\n  faStackExchange,\n  faElementor,\n  faSquarePiedPiper,\n  faPiedPiperSquare,\n  faCreativeCommonsNd,\n  faPalfed,\n  faSuperpowers,\n  faResolving,\n  faXbox,\n  faSquareWebAwesomeStroke,\n  faSearchengin,\n  faTiktok,\n  faSquareFacebook,\n  faFacebookSquare,\n  faRenren,\n  faLinux,\n  faGlide,\n  faLinkedin,\n  faHubspot,\n  faDeploydog,\n  faTwitch,\n  faFlutter,\n  faRavelry,\n  faMixer,\n  faSquareLastfm,\n  faLastfmSquare,\n  faVimeo,\n  faMendeley,\n  faUniregistry,\n  faFigma,\n  faCreativeCommonsRemix,\n  faCcAmazonPay,\n  faDropbox,\n  faInstagram,\n  faCmplid,\n  faUpwork,\n  faFacebook,\n  faGripfire,\n  faJediOrder,\n  faUikit,\n  faFortAwesomeAlt,\n  faPhabricator,\n  faUssunnah,\n  faEarlybirds,\n  faTradeFederation,\n  faAutoprefixer,\n  faWhatsapp,\n  faSquareUpwork,\n  faSlideshare,\n  faGooglePlay,\n  faViadeo,\n  faLine,\n  faGoogleDrive,\n  faServicestack,\n  faSimplybuilt,\n  faBitbucket,\n  faImdb,\n  faDeezer,\n  faRaspberryPi,\n  faJira,\n  faDocker,\n  faScreenpal,\n  faBluetooth,\n  faGitter,\n  faDAndD,\n  faMicroblog,\n  faCcDinersClub,\n  faGgCircle,\n  faPiedPiperHat,\n  faKickstarterK,\n  faYandex,\n  faReadme,\n  faHtml5,\n  faSellsy,\n  faSquareWebAwesome,\n  faSass,\n  faWirsindhandwerk,\n  faWsh,\n  faBuromobelexperte,\n  faSalesforce,\n  faOctopusDeploy,\n  faMedapps,\n  faNs8,\n  faPinterestP,\n  faApper,\n  faFortAwesome,\n  faWaze,\n  faBluesky,\n  faCcJcb,\n  faSnapchat,\n  faSnapchatGhost,\n  faFantasyFlightGames,\n  faRust,\n  faWix,\n  faSquareBehance,\n  faBehanceSquare,\n  faSupple,\n  faWebflow,\n  faRebel,\n  faCss3,\n  faStaylinked,\n  faKaggle,\n  faSpaceAwesome,\n  faDeviantart,\n  faCpanel,\n  faGoodreadsG,\n  faSquareGit,\n  faGitSquare,\n  faSquareTumblr,\n  faTumblrSquare,\n  faTrello,\n  faCreativeCommonsNcJp,\n  faGetPocket,\n  faPerbyte,\n  faGrunt,\n  faWeebly,\n  faConnectdevelop,\n  faLeanpub,\n  faBlackTie,\n  faThemeco,\n  faPython,\n  faAndroid,\n  faBots,\n  faFreeCodeCamp,\n  faHornbill,\n  faJs,\n  faIdeal,\n  faGit,\n  faDev,\n  faSketch,\n  faYandexInternational,\n  faCcAmex,\n  faUber,\n  faGithub,\n  faPhp,\n  faAlipay,\n  faYoutube,\n  faSkyatlas,\n  faFirefoxBrowser,\n  faReplyd,\n  faSuse,\n  faJenkins,\n  faTwitter,\n  faRockrms,\n  faPinterest,\n  faBuffer,\n  faNpm,\n  faYammer,\n  faBtc,\n  faDribbble,\n  faStumbleuponCircle,\n  faInternetExplorer,\n  faStubber,\n  faTelegram,\n  faTelegramPlane,\n  faOldRepublic,\n  faOdysee,\n  faSquareWhatsapp,\n  faWhatsappSquare,\n  faNodeJs,\n  faEdgeLegacy,\n  faSlack,\n  faSlackHash,\n  faMedrt,\n  faUsb,\n  faTumblr,\n  faVaadin,\n  faQuora,\n  faSquareXTwitter,\n  faReacteurope,\n  faMedium,\n  faMediumM,\n  faAmilia,\n  faMixcloud,\n  faFlipboard,\n  faViacoin,\n  faCriticalRole,\n  faSitrox,\n  faDiscourse,\n  faJoomla,\n  faMastodon,\n  faAirbnb,\n  faWolfPackBattalion,\n  faBuyNLarge,\n  faGulp,\n  faCreativeCommonsSamplingPlus,\n  faStrava,\n  faEmber,\n  faCanadianMapleLeaf,\n  faTeamspeak,\n  faPushed,\n  faWordpressSimple,\n  faNutritionix,\n  faWodu,\n  faGooglePay,\n  faIntercom,\n  faZhihu,\n  faKorvue,\n  faPix,\n  faSteamSymbol\n};\n\nexport { icons as fab, prefix, faMonero, faHooli, faYelp, faCcVisa, faLastfm, faShopware, faCreativeCommonsNc, faAws, faRedhat, faYoast, faCloudflare, faUps, faPixiv, faWpexplorer, faDyalog, faBity, faStackpath, faBuysellads, faFirstOrder, faModx, faGuilded, faVnv, faSquareJs, faJsSquare, faMicrosoft, faQq, faOrcid, faJava, faInvision, faCreativeCommonsPdAlt, faCentercode, faGlideG, faDrupal, faJxl, faDartLang, faHireAHelper, faCreativeCommonsBy, faUnity, faWhmcs, faRocketchat, faVk, faUntappd, faMailchimp, faCss3Alt, faSquareReddit, faRedditSquare, faVimeoV, faContao, faSquareFontAwesome, faDeskpro, faBrave, faSistrix, faSquareInstagram, faInstagramSquare, faBattleNet, faTheRedYeti, faSquareHackerNews, faHackerNewsSquare, faEdge, faThreads, faNapster, faSquareSnapchat, faSnapchatSquare, faGooglePlusG, faArtstation, faMarkdown, faSourcetree, faGooglePlus, faDiaspora, faFoursquare, faStackOverflow, faGithubAlt, faPhoenixSquadron, faPagelines, faAlgolia, faRedRiver, faCreativeCommonsSa, faSafari, faGoogle, faSquareFontAwesomeStroke, faFontAwesomeAlt, faAtlassian, faLinkedinIn, faDigitalOcean, faNimblr, faChromecast, faEvernote, faHackerNews, faCreativeCommonsSampling, faAdversal, faCreativeCommons, faWatchmanMonitoring, faFonticons, faWeixin, faShirtsinbulk, faCodepen, faGitAlt, faLyft, faRev, faWindows, faWizardsOfTheCoast, faSquareViadeo, faViadeoSquare, faMeetup, faCentos, faAdn, faCloudsmith, faOpensuse, faPiedPiperAlt, faSquareDribbble, faDribbbleSquare, faCodiepie, faNode, faMix, faSteam, faCcApplePay, faScribd, faDebian, faOpenid, faInstalod, faFilesPinwheel, faExpeditedssl, faSellcast, faSquareTwitter, faTwitterSquare, faRProject, faDelicious, faFreebsd, faVuejs, faAccusoft, faIoxhost, faFonticonsFi, faAppStore, faCcMastercard, faItunesNote, faGolang, faKickstarter, faSquareKickstarter, faGrav, faWeibo, faUncharted, faFirstdraft, faSquareYoutube, faYoutubeSquare, faWikipediaW, faWpressr, faRendact, faAngellist, faGalacticRepublic, faNfcDirectional, faSkype, faJoget, faFedora, faStripeS, faMeta, faLaravel, faHotjar, faBluetoothB, faSquareLetterboxd, faStickerMule, faCreativeCommonsZero, faHips, faCss, faBehance, faReddit, faDiscord, faChrome, faAppStoreIos, faCcDiscover, faWpbeginner, faConfluence, faShoelace, faMdb, faDochub, faAccessibleIcon, faEbay, faAmazon, faUnsplash, faYarn, faSquareSteam, faSteamSquare, fa500px, faSquareVimeo, faVimeoSquare, faAsymmetrik, faFontAwesome, faFontAwesomeFlag, faFontAwesomeLogoFull, faGratipay, faApple, faHive, faGitkraken, faKeybase, faApplePay, faPadlet, faAmazonPay, faSquareGithub, faGithubSquare, faStumbleupon, faFedex, faPhoenixFramework, faShopify, faNeos, faSquareThreads, faHackerrank, faResearchgate, faSwift, faAngular, faSpeakap, faAngrycreative, faYCombinator, faEmpire, faEnvira, faGoogleScholar, faSquareGitlab, faGitlabSquare, faStudiovinari, faPiedPiper, faWordpress, faProductHunt, faFirefox, faLinode, faGoodreads, faSquareOdnoklassniki, faOdnoklassnikiSquare, faJsfiddle, faSith, faThemeisle, faPage4, faHashnode, faReact, faCcPaypal, faSquarespace, faCcStripe, faCreativeCommonsShare, faBitcoin, faKeycdn, faOpera, faItchIo, faUmbraco, faGalacticSenate, faUbuntu, faDraft2digital, faStripe, faHouzz, faGg, faDhl, faSquarePinterest, faPinterestSquare, faXing, faBlackberry, faCreativeCommonsPd, faPlaystation, faQuinscape, faLess, faBloggerB, faOpencart, faVine, faSignalMessenger, faPaypal, faGitlab, faTypo3, faRedditAlien, faYahoo, faDailymotion, faAffiliatetheme, faPiedPiperPp, faBootstrap, faOdnoklassniki, faNfcSymbol, faMintbit, faEthereum, faSpeakerDeck, faCreativeCommonsNcEu, faPatreon, faAvianex, faEllo, faGofore, faBimobject, faBraveReverse, faFacebookF, faSquareGooglePlus, faGooglePlusSquare, faWebAwesome, faMandalorian, faFirstOrderAlt, faOsi, faGoogleWallet, faDAndDBeyond, faPeriscope, faFulcrum, faCloudscale, faForumbee, faMizuni, faSchlix, faSquareXing, faXingSquare, faBandcamp, faWpforms, faCloudversify, faUsps, faMegaport, faMagento, faSpotify, faOptinMonster, faFly, faSquareBluesky, faAviato, faItunes, faCuttlefish, faBlogger, faFlickr, faViber, faSoundcloud, faDigg, faTencentWeibo, faLetterboxd, faSymfony, faMaxcdn, faEtsy, faFacebookMessenger, faAudible, faThinkPeaks, faBilibili, faErlang, faXTwitter, faCottonBureau, faDashcube, fa42Group, faInnosoft, faStackExchange, faElementor, faSquarePiedPiper, faPiedPiperSquare, faCreativeCommonsNd, faPalfed, faSuperpowers, faResolving, faXbox, faSquareWebAwesomeStroke, faSearchengin, faTiktok, faSquareFacebook, faFacebookSquare, faRenren, faLinux, faGlide, faLinkedin, faHubspot, faDeploydog, faTwitch, faFlutter, faRavelry, faMixer, faSquareLastfm, faLastfmSquare, faVimeo, faMendeley, faUniregistry, faFigma, faCreativeCommonsRemix, faCcAmazonPay, faDropbox, faInstagram, faCmplid, faUpwork, faFacebook, faGripfire, faJediOrder, faUikit, faFortAwesomeAlt, faPhabricator, faUssunnah, faEarlybirds, faTradeFederation, faAutoprefixer, faWhatsapp, faSquareUpwork, faSlideshare, faGooglePlay, faViadeo, faLine, faGoogleDrive, faServicestack, faSimplybuilt, faBitbucket, faImdb, faDeezer, faRaspberryPi, faJira, faDocker, faScreenpal, faBluetooth, faGitter, faDAndD, faMicroblog, faCcDinersClub, faGgCircle, faPiedPiperHat, faKickstarterK, faYandex, faReadme, faHtml5, faSellsy, faSquareWebAwesome, faSass, faWirsindhandwerk, faWsh, faBuromobelexperte, faSalesforce, faOctopusDeploy, faMedapps, faNs8, faPinterestP, faApper, faFortAwesome, faWaze, faBluesky, faCcJcb, faSnapchat, faSnapchatGhost, faFantasyFlightGames, faRust, faWix, faSquareBehance, faBehanceSquare, faSupple, faWebflow, faRebel, faCss3, faStaylinked, faKaggle, faSpaceAwesome, faDeviantart, faCpanel, faGoodreadsG, faSquareGit, faGitSquare, faSquareTumblr, faTumblrSquare, faTrello, faCreativeCommonsNcJp, faGetPocket, faPerbyte, faGrunt, faWeebly, faConnectdevelop, faLeanpub, faBlackTie, faThemeco, faPython, faAndroid, faBots, faFreeCodeCamp, faHornbill, faJs, faIdeal, faGit, faDev, faSketch, faYandexInternational, faCcAmex, faUber, faGithub, faPhp, faAlipay, faYoutube, faSkyatlas, faFirefoxBrowser, faReplyd, faSuse, faJenkins, faTwitter, faRockrms, faPinterest, faBuffer, faNpm, faYammer, faBtc, faDribbble, faStumbleuponCircle, faInternetExplorer, faStubber, faTelegram, faTelegramPlane, faOldRepublic, faOdysee, faSquareWhatsapp, faWhatsappSquare, faNodeJs, faEdgeLegacy, faSlack, faSlackHash, faMedrt, faUsb, faTumblr, faVaadin, faQuora, faSquareXTwitter, faReacteurope, faMedium, faMediumM, faAmilia, faMixcloud, faFlipboard, faViacoin, faCriticalRole, faSitrox, faDiscourse, faJoomla, faMastodon, faAirbnb, faWolfPackBattalion, faBuyNLarge, faGulp, faCreativeCommonsSamplingPlus, faStrava, faEmber, faCanadianMapleLeaf, faTeamspeak, faPushed, faWordpressSimple, faNutritionix, faWodu, faGooglePay, faIntercom, faZhihu, faKorvue, faPix, faSteamSymbol };\n", "import {library, dom} from '@fortawesome/fontawesome-svg-core'\nimport {fas} from '@fortawesome/free-solid-svg-icons'\nimport {far} from '@fortawesome/free-regular-svg-icons'\nimport {fab} from '@fortawesome/free-brands-svg-icons'\n\ndocument.addEventListener('DOMContentLoaded', function (_event) {\n    library.add(fas, far, fab)\n    dom.watch()\n})\n", "window.printIframe = function printIframe(iframeId) {\n    try {\n        let iframe = document.getElementById(iframeId)\n        if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {\n            iframe.contentWindow.focus()\n            iframe.contentWindow.print()\n        } else {\n            iframe.contentWindow.document.execCommand('print', false, null)\n        }\n    } catch (_error) {\n        window.print()\n    }\n}\n", "// Entry point for the build script in your package.json\nimport Rails from '@rails/ujs'\n// import Turbolinks from 'turbolinks'\n// import * as ActiveStorage from '@rails/activestorage'\nimport './channels'\n\nRails.start()\nwindow.Rails = Rails\n// Turbolinks.start()\n// ActiveStorage.start()\n\nimport { Turbo } from \"@hotwired/turbo-rails\"\nTurbo.session.drive = false\nimport './controllers'\nimport './components/font_awesome'\nimport './components/utility/print_iframe'\n\ndocument.addEventListener('DOMContentLoaded', function (_event) {\n    // Placeholder\n})\n"],
  "mappings": "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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEjB,SAASxC,IAAM,CACb,IAAMyC,EAAM1F,GACN2F,EAAM1F,GACN2F,EAAKlD,GAAO,UACZmD,EAAKnD,GAAO,iBACd3E,EAAI0H,IACR,GAAIG,IAAOF,GAAOG,IAAOF,EAAK,CAC5B,IAAMG,EAAQ,IAAI,OAAO,MAAM,OAAOJ,EAAK,KAAK,EAAG,GAAG,EAChDK,EAAiB,IAAI,OAAO,OAAO,OAAOL,EAAK,KAAK,EAAG,GAAG,EAC1DM,EAAQ,IAAI,OAAO,MAAM,OAAOL,CAAG,EAAG,GAAG,EAC/C5H,EAAIA,EAAE,QAAQ+H,EAAO,IAAI,OAAOF,EAAI,GAAG,CAAC,EAAE,QAAQG,EAAgB,KAAK,OAAOH,EAAI,GAAG,CAAC,EAAE,QAAQI,EAAO,IAAI,OAAOH,CAAE,CAAC,CACvH,CACA,OAAO9H,CACT,CACA,IAAIkI,GAAe,GACnB,SAASC,IAAY,CACfxD,GAAO,YAAc,CAACuD,KACxBjD,IAAUC,GAAI,CAAC,EACfgD,GAAe,GAEnB,CACA,IAAIE,IAAY,CACd,QAAS,CACP,MAAO,CACL,IAAK,CACH,IAAAlD,GACA,UAAWiD,EACb,CACF,CACF,EACA,OAAQ,CACN,MAAO,CACL,0BAA2B,CACzBA,GAAU,CACZ,EACA,aAAc,CACZA,GAAU,CACZ,CACF,CACF,CACF,EAEME,GAAIjJ,IAAU,CAAC,EAChBiJ,GAAEtG,EAAoB,IAAGsG,GAAEtG,EAAoB,EAAI,CAAC,GACpDsG,GAAEtG,EAAoB,EAAE,SAAQsG,GAAEtG,EAAoB,EAAE,OAAS,CAAC,GAClEsG,GAAEtG,EAAoB,EAAE,QAAOsG,GAAEtG,EAAoB,EAAE,MAAQ,CAAC,GAChEsG,GAAEtG,EAAoB,EAAE,QAAOsG,GAAEtG,EAAoB,EAAE,MAAQ,CAAC,GACrE,IAAIuG,GAAYD,GAAEtG,EAAoB,EAEhCwG,GAAY,CAAC,EACbC,GAAW,UAAY,CAC3BnJ,GAAS,oBAAoB,mBAAoBmJ,EAAQ,EACzDC,GAAS,EACTF,GAAU,IAAIG,GAAMA,EAAG,CAAC,CAC1B,EACID,GAAS,GACThJ,KACFgJ,IAAUpJ,GAAS,gBAAgB,SAAW,aAAe,iBAAiB,KAAKA,GAAS,UAAU,EACjGoJ,IAAQpJ,GAAS,iBAAiB,mBAAoBmJ,EAAQ,GAErE,SAASG,IAAUD,EAAI,CAChBjJ,KACLgJ,GAAS,WAAWC,EAAI,CAAC,EAAIH,GAAU,KAAKG,CAAE,EAChD,CAEA,SAASE,GAAOC,EAAe,CAC7B,GAAM,CACJ,IAAAC,EACA,WAAA1C,EAAa,CAAC,EACd,SAAA2C,EAAW,CAAC,CACd,EAAIF,EACJ,OAAI,OAAOA,GAAkB,SACpB5C,GAAW4C,CAAa,EAExB,IAAI,OAAOC,EAAK,GAAG,EAAE,OAAO3C,IAAeC,CAAU,EAAG,GAAG,EAAE,OAAO2C,EAAS,IAAIH,EAAM,EAAE,KAAK,EAAE,EAAG,IAAI,EAAE,OAAOE,EAAK,GAAG,CAEnI,CAEA,SAASE,GAAgBC,EAASC,EAAQC,EAAU,CAClD,GAAIF,GAAWA,EAAQC,CAAM,GAAKD,EAAQC,CAAM,EAAEC,CAAQ,EACxD,MAAO,CACL,OAAAD,EACA,SAAAC,EACA,KAAMF,EAAQC,CAAM,EAAEC,CAAQ,CAChC,CAEJ,CAMA,IAAIC,IAAgB,SAAuBC,EAAMC,EAAa,CAC5D,OAAO,SAAUzH,EAAG0H,EAAGC,EAAGC,EAAG,CAC3B,OAAOJ,EAAK,KAAKC,EAAazH,EAAG0H,EAAGC,EAAGC,CAAC,CAC1C,CACF,EAaIC,GAAS,SAA0BC,EAASjB,EAAIkB,EAAcN,EAAa,CAC7E,IAAIO,EAAO,OAAO,KAAKF,CAAO,EAC5BG,EAASD,EAAK,OACdE,EAAWT,IAAgB,OAAYF,IAAcV,EAAIY,CAAW,EAAIZ,EACxEpD,EACAd,EACAwF,EAQF,IAPIJ,IAAiB,QACnBtE,EAAI,EACJ0E,EAASL,EAAQE,EAAK,CAAC,CAAC,IAExBvE,EAAI,EACJ0E,EAASJ,GAEJtE,EAAIwE,EAAQxE,IACjBd,EAAMqF,EAAKvE,CAAC,EACZ0E,EAASD,EAASC,EAAQL,EAAQnF,CAAG,EAAGA,EAAKmF,CAAO,EAEtD,OAAOK,CACT,EA2BA,SAASC,IAAWC,EAAQ,CAC1B,IAAMC,EAAS,CAAC,EACZC,EAAU,EACRN,EAASI,EAAO,OACtB,KAAOE,EAAUN,GAAQ,CACvB,IAAMO,EAAQH,EAAO,WAAWE,GAAS,EACzC,GAAIC,GAAS,OAAUA,GAAS,OAAUD,EAAUN,EAAQ,CAC1D,IAAMQ,EAAQJ,EAAO,WAAWE,GAAS,GACpCE,EAAQ,QAAW,MAEtBH,EAAO,OAAOE,EAAQ,OAAU,KAAOC,EAAQ,MAAS,KAAO,GAE/DH,EAAO,KAAKE,CAAK,EACjBD,IAEJ,MACED,EAAO,KAAKE,CAAK,CAErB,CACA,OAAOF,CACT,CACA,SAASI,GAAMC,EAAS,CACtB,IAAMC,EAAUR,IAAWO,CAAO,EAClC,OAAOC,EAAQ,SAAW,EAAIA,EAAQ,CAAC,EAAE,SAAS,EAAE,EAAI,IAC1D,CACA,SAASC,IAAYR,EAAQS,EAAO,CAClC,IAAMhF,EAAOuE,EAAO,OAChBU,EAAQV,EAAO,WAAWS,CAAK,EAC/BE,EACJ,OAAID,GAAS,OAAUA,GAAS,OAAUjF,EAAOgF,EAAQ,IACvDE,EAASX,EAAO,WAAWS,EAAQ,CAAC,EAChCE,GAAU,OAAUA,GAAU,QACxBD,EAAQ,OAAU,KAAQC,EAAS,MAAS,MAGjDD,CACT,CAEA,SAASE,GAAeC,EAAO,CAC7B,OAAO,OAAO,KAAKA,CAAK,EAAE,OAAO,CAAC1E,EAAK8C,IAAa,CAClD,IAAM6B,EAAOD,EAAM5B,CAAQ,EAE3B,MADiB,CAAC,CAAC6B,EAAK,KAEtB3E,EAAI2E,EAAK,QAAQ,EAAIA,EAAK,KAE1B3E,EAAI8C,CAAQ,EAAI6B,EAEX3E,CACT,EAAG,CAAC,CAAC,CACP,CACA,SAAS4E,GAAY/B,EAAQ6B,EAAO,CAClC,IAAIG,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,UAAAC,EAAY,EACd,EAAID,EACEE,EAAaN,GAAeC,CAAK,EACnC,OAAOzC,GAAU,MAAM,SAAY,YAAc,CAAC6C,EACpD7C,GAAU,MAAM,QAAQY,EAAQ4B,GAAeC,CAAK,CAAC,EAErDzC,GAAU,OAAOY,CAAM,EAAIjG,GAAeA,GAAe,CAAC,EAAGqF,GAAU,OAAOY,CAAM,GAAK,CAAC,CAAC,EAAGkC,CAAU,EAStGlC,IAAW,OACb+B,GAAY,KAAMF,CAAK,CAE3B,CAeA,GAAM,CACJ,OAAAM,GACA,MAAAC,GACF,EAAIC,GACEC,GAAe,OAAO,KAAKC,EAAoB,EAC/CC,IAAsBF,GAAa,OAAO,CAACG,EAAKC,KACpDD,EAAIC,CAAQ,EAAI,OAAO,KAAKH,GAAqBG,CAAQ,CAAC,EACnDD,GACN,CAAC,CAAC,EACDE,GAAuB,KACvBC,GAAa,CAAC,EACdC,GAAc,CAAC,EACfC,GAAa,CAAC,EACdC,GAAgB,CAAC,EACjBC,GAAW,CAAC,EAChB,SAASC,IAAWC,EAAM,CACxB,MAAO,CAACC,IAAiB,QAAQD,CAAI,CACvC,CACA,SAASE,IAAYC,EAAWC,EAAK,CACnC,IAAMC,EAAQD,EAAI,MAAM,GAAG,EACrBE,EAASD,EAAM,CAAC,EAChBE,EAAWF,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,EACxC,OAAIC,IAAWH,GAAaI,IAAa,IAAM,CAACR,IAAWQ,CAAQ,EAC1DA,EAEA,IAEX,CACA,IAAMC,GAAQ,IAAM,CAClB,IAAMC,EAASC,GACNC,GAAO1B,GAAQ,CAAC2B,EAAMC,EAAOP,KAClCM,EAAKN,CAAM,EAAIK,GAAOE,EAAOH,EAAS,CAAC,CAAC,EACjCE,GACN,CAAC,CAAC,EAEPlB,GAAae,EAAO,CAAClB,EAAKuB,EAAMP,KAC1BO,EAAK,CAAC,IACRvB,EAAIuB,EAAK,CAAC,CAAC,EAAIP,GAEbO,EAAK,CAAC,GACQA,EAAK,CAAC,EAAE,OAAOC,GACtB,OAAOA,GAAS,QACxB,EACO,QAAQC,GAAS,CACvBzB,EAAIyB,EAAM,SAAS,EAAE,CAAC,EAAIT,CAC5B,CAAC,EAEIhB,EACR,EACDI,GAAcc,EAAO,CAAClB,EAAKuB,EAAMP,KAC/BhB,EAAIgB,CAAQ,EAAIA,EACZO,EAAK,CAAC,GACQA,EAAK,CAAC,EAAE,OAAOC,GACtB,OAAOA,GAAS,QACxB,EACO,QAAQC,GAAS,CACvBzB,EAAIyB,CAAK,EAAIT,CACf,CAAC,EAEIhB,EACR,EACDO,GAAWW,EAAO,CAAClB,EAAKuB,EAAMP,IAAa,CACzC,IAAMU,EAAUH,EAAK,CAAC,EACtB,OAAAvB,EAAIgB,CAAQ,EAAIA,EAChBU,EAAQ,QAAQD,GAAS,CACvBzB,EAAIyB,CAAK,EAAIT,CACf,CAAC,EACMhB,CACT,CAAC,EAID,IAAM2B,EAAa,QAASjC,IAAUkC,GAAO,aACvCC,EAAcT,GAAOzB,IAAO,CAACK,EAAK8B,IAAS,CAC/C,IAAMC,EAAwBD,EAAK,CAAC,EAChCf,EAASe,EAAK,CAAC,EACbd,EAAWc,EAAK,CAAC,EACvB,OAAIf,IAAW,OAAS,CAACY,IACvBZ,EAAS,OAEP,OAAOgB,GAA0B,WACnC/B,EAAI,MAAM+B,CAAqB,EAAI,CACjC,OAAAhB,EACA,SAAAC,CACF,GAEE,OAAOe,GAA0B,WACnC/B,EAAI,SAAS+B,EAAsB,SAAS,EAAE,CAAC,EAAI,CACjD,OAAAhB,EACA,SAAAC,CACF,GAEKhB,CACT,EAAG,CACD,MAAO,CAAC,EACR,SAAU,CAAC,CACb,CAAC,EACDK,GAAawB,EAAY,MACzBvB,GAAgBuB,EAAY,SAC5B3B,GAAuB8B,GAAmBJ,GAAO,aAAc,CAC7D,OAAQA,GAAO,aACjB,CAAC,CACH,EACAK,IAASC,GAAQ,CACfhC,GAAuB8B,GAAmBE,EAAK,aAAc,CAC3D,OAAQN,GAAO,aACjB,CAAC,CACH,CAAC,EACDX,GAAM,EACN,SAASkB,GAAUpB,EAAQqB,EAAS,CAClC,OAAQjC,GAAWY,CAAM,GAAK,CAAC,GAAGqB,CAAO,CAC3C,CACA,SAASC,IAAWtB,EAAQuB,EAAU,CACpC,OAAQlC,GAAYW,CAAM,GAAK,CAAC,GAAGuB,CAAQ,CAC7C,CACA,SAASC,GAAQxB,EAAQU,EAAO,CAC9B,OAAQlB,GAASQ,CAAM,GAAK,CAAC,GAAGU,CAAK,CACvC,CACA,SAASe,GAAU/B,EAAM,CACvB,OAAOJ,GAAWI,CAAI,GAAK,CACzB,OAAQ,KACR,SAAU,IACZ,CACF,CACA,SAASgC,IAAaL,EAAS,CAC7B,IAAMM,EAAapC,GAAc8B,CAAO,EAClCO,EAAaR,GAAU,MAAOC,CAAO,EAC3C,OAAOM,IAAeC,EAAa,CACjC,OAAQ,MACR,SAAUA,CACZ,EAAI,OAAS,CACX,OAAQ,KACR,SAAU,IACZ,CACF,CACA,SAASC,IAAyB,CAChC,OAAO1C,EACT,CACA,IAAM2C,GAAqB,KAClB,CACL,OAAQ,KACR,SAAU,KACV,KAAM,CAAC,CACT,GAEF,SAASC,IAAYC,EAAQ,CAC3B,IAAIC,EAASC,GACPC,EAAWrD,GAAa,OAAO,CAACG,EAAKC,KACzCD,EAAIC,CAAQ,EAAI,GAAG,OAAO2B,GAAO,UAAW,GAAG,EAAE,OAAO3B,CAAQ,EACzDD,GACN,CAAC,CAAC,EACL,OAAAmD,GAAE,QAAQlD,GAAY,EAChB8C,EAAO,SAASG,EAASjD,CAAQ,CAAC,GAAK8C,EAAO,KAAKK,GAAQrD,IAAoBE,CAAQ,EAAE,SAASmD,CAAI,CAAC,KACzGJ,EAAS/C,EAEb,CAAC,EACM+C,CACT,CACA,SAAShB,GAAmBqB,EAAe,CACzC,IAAIC,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,OAAAN,EAASC,EACX,EAAIK,EACEhC,EAAQiC,IAAgBP,CAAM,EAAEK,CAAa,EAGnD,GAAIL,IAAWQ,IAAK,CAACH,EACnB,MAAO,MAET,IAAMtC,EAAS0C,GAAgBT,CAAM,EAAEK,CAAa,GAAKI,GAAgBT,CAAM,EAAE1B,CAAK,EAChFoC,EAAUL,KAAiBzD,GAAU,OAASyD,EAAgB,KAEpE,OADetC,GAAU2C,GAAW,IAEtC,CACA,SAASC,IAAuBC,EAAY,CAC1C,IAAIC,EAAO,CAAC,EACR7C,EAAW,KACf,OAAA4C,EAAW,QAAQ/C,GAAO,CACxB,IAAMiD,EAASnD,IAAYiB,GAAO,UAAWf,CAAG,EAC5CiD,EACF9C,EAAW8C,EACFjD,GACTgD,EAAK,KAAKhD,CAAG,CAEjB,CAAC,EACM,CACL,SAAAG,EACA,KAAA6C,CACF,CACF,CACA,SAASE,GAAmBC,EAAK,CAC/B,OAAOA,EAAI,KAAK,EAAE,OAAO,CAACC,EAAOC,EAAOF,IAC/BA,EAAI,QAAQC,CAAK,IAAMC,CAC/B,CACH,CACA,SAASC,GAAiBpB,EAAQ,CAChC,IAAIO,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,YAAAc,EAAc,EAChB,EAAId,EACAe,EAAc,KACZC,EAAoBC,GAAG,OAAOC,GAAI,EAClCC,EAAyBV,GAAmBhB,EAAO,OAAOlC,GAAOyD,EAAkB,SAASzD,CAAG,CAAC,CAAC,EACjG6D,EAA0BX,GAAmBhB,EAAO,OAAOlC,GAAO,CAAC0D,GAAG,SAAS1D,CAAG,CAAC,CAAC,EACpF8D,EAAWF,EAAuB,OAAO5D,IAC7CwD,EAAcxD,EACP,CAAC+D,GAAE,SAAS/D,CAAG,EACvB,EACK,CAACgE,EAAkB,IAAI,EAAIF,EAC3B3B,EAASF,IAAY2B,CAAsB,EAC3CK,EAAYC,GAAeA,GAAe,CAAC,EAAGpB,IAAuBe,CAAuB,CAAC,EAAG,CAAC,EAAG,CACxG,OAAQ1C,GAAmB6C,EAAiB,CAC1C,OAAA7B,CACF,CAAC,CACH,CAAC,EACD,OAAO+B,GAAeA,GAAeA,GAAe,CAAC,EAAGD,CAAS,EAAGE,IAA0B,CAC5F,OAAAjC,EACA,OAAAC,EACA,OAAAtD,GACA,OAAAkC,GACA,UAAAkD,EACA,YAAAT,CACF,CAAC,CAAC,EAAGY,IAAkBb,EAAaC,EAAaS,CAAS,CAAC,CAC7D,CACA,SAASG,IAAkBb,EAAaC,EAAaS,EAAW,CAC9D,GAAI,CACF,OAAA/D,EACA,SAAAC,CACF,EAAI8D,EACJ,GAAIV,GAAe,CAACrD,GAAU,CAACC,EAC7B,MAAO,CACL,OAAAD,EACA,SAAAC,CACF,EAEF,IAAMc,EAAOuC,IAAgB,KAAO7B,GAAUxB,CAAQ,EAAI,CAAC,EACrDkE,EAAgB3C,GAAQxB,EAAQC,CAAQ,EAC9C,OAAAA,EAAWc,EAAK,UAAYoD,GAAiBlE,EAC7CD,EAASe,EAAK,QAAUf,EACpBA,IAAW,OAAS,CAACrB,GAAO,KAAUA,GAAO,KAAU,CAACkC,GAAO,eAGjEb,EAAS,OAEJ,CACL,OAAAA,EACA,SAAAC,CACF,CACF,CACA,IAAMmE,IAAuBhC,GAAE,OAAOlD,GAC7BA,IAAagD,IAAKhD,IAAauD,EACvC,EACK4B,IAAqB,OAAO,KAAKC,EAAE,EAAE,OAAOC,GAAOA,IAAQrC,EAAC,EAAE,IAAIqC,GAAO,OAAO,KAAKD,GAAGC,CAAG,CAAC,CAAC,EAAE,KAAK,EAC1G,SAASN,IAA0BO,EAAe,CAChD,GAAM,CACJ,OAAAxC,EACA,OAAAC,EACA,UAAA8B,EACA,YAAAT,EAAc,GACd,OAAA3E,EAAS,CAAC,EACV,OAAQ8F,EAAY,CAAC,CACvB,EAAID,EACEE,EAAkBzC,IAAWQ,GAC7BkC,EAAmB3C,EAAO,SAAS,YAAY,GAAKA,EAAO,SAAS,KAAK,EACzE4C,EAAyBH,EAAU,gBAAkB,UACrDI,EAA2Bd,EAAU,SAAW,OAASA,EAAU,SAAW,aAOpF,GANI,CAACW,IAAoBC,GAAoBC,GAA0BC,KACrEd,EAAU,OAAS,QAEjB/B,EAAO,SAAS,WAAW,GAAKA,EAAO,SAAS,KAAK,KACvD+B,EAAU,OAAS,OAEjB,CAACA,EAAU,QAAUK,IAAqB,SAASnC,CAAM,IACvC,OAAO,KAAKtD,CAAM,EAAE,KAAK4F,GAAOF,IAAmB,SAASE,CAAG,CAAC,GACjEE,EAAU,cAAc,CACzC,IAAMK,EAAgBC,IAAG,IAAI9C,CAAM,EAAE,qBACrC8B,EAAU,OAASe,EACnBf,EAAU,SAAWvC,GAAQuC,EAAU,OAAQA,EAAU,QAAQ,GAAKA,EAAU,QAClF,CAEF,OAAIA,EAAU,SAAW,MAAQT,IAAgB,QAG/CS,EAAU,OAASlC,GAAuB,GAAK,OAE1CkC,CACT,CAEA,IAAMiB,GAAN,KAAc,CACZ,aAAc,CACZ,KAAK,YAAc,CAAC,CACtB,CACA,KAAM,CACJ,QAASC,EAAO,UAAU,OAAQC,EAAc,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IACtFD,EAAYC,CAAI,EAAI,UAAUA,CAAI,EAEpC,IAAMC,EAAYF,EAAY,OAAO,KAAK,iBAAkB,CAAC,CAAC,EAC9D,OAAO,KAAKE,CAAS,EAAE,QAAQb,GAAO,CACpC,KAAK,YAAYA,CAAG,EAAIP,GAAeA,GAAe,CAAC,EAAG,KAAK,YAAYO,CAAG,GAAK,CAAC,CAAC,EAAGa,EAAUb,CAAG,CAAC,EACtGc,GAAYd,EAAKa,EAAUb,CAAG,CAAC,EAG/B,IAAMe,EAAavG,GAAqBmD,EAAC,EAAEqC,CAAG,EAC1Ce,GAAYD,GAAYC,EAAYF,EAAUb,CAAG,CAAC,EACtDrE,GAAM,CACR,CAAC,CACH,CACA,OAAQ,CACN,KAAK,YAAc,CAAC,CACtB,CACA,iBAAiBkF,EAAWG,EAAY,CACtC,IAAMC,EAAaD,EAAW,QAAUA,EAAW,UAAYA,EAAW,KAAO,CAC/E,EAAGA,CACL,EAAIA,EACJ,cAAO,KAAKC,CAAU,EAAE,IAAIjB,GAAO,CACjC,GAAM,CACJ,OAAAvE,EACA,SAAAC,EACA,KAAAO,CACF,EAAIgF,EAAWjB,CAAG,EACZ5D,EAAUH,EAAK,CAAC,EACjB4E,EAAUpF,CAAM,IAAGoF,EAAUpF,CAAM,EAAI,CAAC,GACzCW,EAAQ,OAAS,GACnBA,EAAQ,QAAQD,GAAS,CACnB,OAAOA,GAAU,WACnB0E,EAAUpF,CAAM,EAAEU,CAAK,EAAIF,EAE/B,CAAC,EAEH4E,EAAUpF,CAAM,EAAEC,CAAQ,EAAIO,CAChC,CAAC,EACM4E,CACT,CACF,EAEIK,GAAW,CAAC,EACZC,GAAS,CAAC,EACRC,GAAY,CAAC,EACbC,IAAsB,OAAO,KAAKD,EAAS,EACjD,SAASE,IAAgBC,EAAaC,EAAM,CAC1C,GAAI,CACF,UAAWC,CACb,EAAID,EACJ,OAAAN,GAAWK,EACXJ,GAAS,CAAC,EACV,OAAO,KAAKC,EAAS,EAAE,QAAQM,GAAK,CAC9BL,IAAoB,QAAQK,CAAC,IAAM,IACrC,OAAON,GAAUM,CAAC,CAEtB,CAAC,EACDR,GAAS,QAAQS,GAAU,CACzB,IAAMC,EAASD,EAAO,OAASA,EAAO,OAAO,EAAI,CAAC,EAclD,GAbA,OAAO,KAAKC,CAAM,EAAE,QAAQC,GAAM,CAC5B,OAAOD,EAAOC,CAAE,GAAM,aACxBJ,EAAII,CAAE,EAAID,EAAOC,CAAE,GAEjB,OAAOD,EAAOC,CAAE,GAAM,UACxB,OAAO,KAAKD,EAAOC,CAAE,CAAC,EAAE,QAAQC,GAAM,CAC/BL,EAAII,CAAE,IACTJ,EAAII,CAAE,EAAI,CAAC,GAEbJ,EAAII,CAAE,EAAEC,CAAE,EAAIF,EAAOC,CAAE,EAAEC,CAAE,CAC7B,CAAC,CAEL,CAAC,EACGH,EAAO,MAAO,CAChB,IAAMI,EAAQJ,EAAO,MAAM,EAC3B,OAAO,KAAKI,CAAK,EAAE,QAAQC,GAAQ,CAC5Bb,GAAOa,CAAI,IACdb,GAAOa,CAAI,EAAI,CAAC,GAElBb,GAAOa,CAAI,EAAE,KAAKD,EAAMC,CAAI,CAAC,CAC/B,CAAC,CACH,CACIL,EAAO,UACTA,EAAO,SAASP,EAAS,CAE7B,CAAC,EACMK,CACT,CACA,SAASQ,GAAWD,EAAME,EAAa,CACrC,QAASxB,EAAO,UAAU,OAAQyB,EAAO,IAAI,MAAMzB,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAClGuB,EAAKvB,EAAO,CAAC,EAAI,UAAUA,CAAI,EAGjC,OADgBO,GAAOa,CAAI,GAAK,CAAC,GACzB,QAAQI,GAAU,CACxBF,EAAcE,EAAO,MAAM,KAAM,CAACF,EAAa,GAAGC,CAAI,CAAC,CACzD,CAAC,EACMD,CACT,CACA,SAASG,GAAUL,EAAM,CACvB,QAASM,EAAQ,UAAU,OAAQH,EAAO,IAAI,MAAMG,EAAQ,EAAIA,EAAQ,EAAI,CAAC,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGJ,EAAKI,EAAQ,CAAC,EAAI,UAAUA,CAAK,GAEnBpB,GAAOa,CAAI,GAAK,CAAC,GACzB,QAAQI,GAAU,CACxBA,EAAO,MAAM,KAAMD,CAAI,CACzB,CAAC,CAEH,CACA,SAASK,IAAe,CACtB,IAAMR,EAAO,UAAU,CAAC,EAClBG,EAAO,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,EACpD,OAAOf,GAAUY,CAAI,EAAIZ,GAAUY,CAAI,EAAE,MAAM,KAAMG,CAAI,EAAI,MAC/D,CAEA,SAASM,GAAmBC,EAAY,CAClCA,EAAW,SAAW,OACxBA,EAAW,OAAS,OAEtB,GAAI,CACF,SAAAhH,CACF,EAAIgH,EACEjH,EAASiH,EAAW,QAAUpF,GAAuB,EAC3D,GAAK5B,EACL,OAAAA,EAAWuB,GAAQxB,EAAQC,CAAQ,GAAKA,EACjCiH,GAAgBC,GAAQ,YAAanH,EAAQC,CAAQ,GAAKiH,GAAgBrI,GAAU,OAAQmB,EAAQC,CAAQ,CACrH,CACA,IAAMkH,GAAU,IAAInC,GACdoC,IAAS,IAAM,CACnBvG,GAAO,eAAiB,GACxBA,GAAO,iBAAmB,GAC1B+F,GAAU,QAAQ,CACpB,EACMS,IAAM,CACV,MAAO,UAAY,CACjB,IAAI9E,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAClF,OAAI+E,IACFV,GAAU,cAAerE,CAAM,EAC/BwE,GAAa,qBAAsBxE,CAAM,EAClCwE,GAAa,QAASxE,CAAM,GAE5B,QAAQ,OAAO,IAAI,MAAM,wCAAwC,CAAC,CAE7E,EACA,MAAO,UAAY,CACjB,IAAIA,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,mBAAAgF,CACF,EAAIhF,EACA1B,GAAO,iBAAmB,KAC5BA,GAAO,eAAiB,IAE1BA,GAAO,iBAAmB,GAC1B2G,IAAS,IAAM,CACbC,IAAY,CACV,mBAAAF,CACF,CAAC,EACDX,GAAU,QAASrE,CAAM,CAC3B,CAAC,CACH,CACF,EACMmF,IAAQ,CACZ,KAAMlH,GAAQ,CACZ,GAAIA,IAAS,KACX,OAAO,KAET,GAAI,OAAOA,GAAS,UAAYA,EAAK,QAAUA,EAAK,SAClD,MAAO,CACL,OAAQA,EAAK,OACb,SAAUgB,GAAQhB,EAAK,OAAQA,EAAK,QAAQ,GAAKA,EAAK,QACxD,EAEF,GAAI,MAAM,QAAQA,CAAI,GAAKA,EAAK,SAAW,EAAG,CAC5C,IAAMP,EAAWO,EAAK,CAAC,EAAE,QAAQ,KAAK,IAAM,EAAIA,EAAK,CAAC,EAAE,MAAM,CAAC,EAAIA,EAAK,CAAC,EACnER,EAASiB,GAAmBT,EAAK,CAAC,CAAC,EACzC,MAAO,CACL,OAAAR,EACA,SAAUwB,GAAQxB,EAAQC,CAAQ,GAAKA,CACzC,CACF,CACA,GAAI,OAAOO,GAAS,WAAaA,EAAK,QAAQ,GAAG,OAAOK,GAAO,UAAW,GAAG,CAAC,EAAI,IAAML,EAAK,MAAMmH,GAA6B,GAAI,CAClI,IAAMC,EAAgBxE,GAAiB5C,EAAK,MAAM,GAAG,EAAG,CACtD,YAAa,EACf,CAAC,EACD,MAAO,CACL,OAAQoH,EAAc,QAAU/F,GAAuB,EACvD,SAAUL,GAAQoG,EAAc,OAAQA,EAAc,QAAQ,GAAKA,EAAc,QACnF,CACF,CACA,GAAI,OAAOpH,GAAS,SAAU,CAC5B,IAAMR,EAAS6B,GAAuB,EACtC,MAAO,CACL,OAAA7B,EACA,SAAUwB,GAAQxB,EAAQQ,CAAI,GAAKA,CACrC,CACF,CACF,CACF,EACMqH,GAAM,CACV,OAAAT,IACA,OAAAvG,GACA,IAAAwG,IACA,MAAAK,IACA,QAAAP,GACA,mBAAAH,GACA,OAAAc,EACF,EACML,IAAc,UAAY,CAC9B,IAAIlF,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,mBAAAgF,EAAqBQ,EACvB,EAAIxF,GACC,OAAO,KAAK1D,GAAU,MAAM,EAAE,OAAS,GAAKgC,GAAO,eAAiByG,IAAUzG,GAAO,gBAAgBgH,GAAI,IAAI,MAAM,CACtH,KAAMN,CACR,CAAC,CACH,EAEA,SAASS,GAAYC,EAAKC,EAAiB,CACzC,cAAO,eAAeD,EAAK,WAAY,CACrC,IAAKC,CACP,CAAC,EACD,OAAO,eAAeD,EAAK,OAAQ,CACjC,IAAK,UAAY,CACf,OAAOA,EAAI,SAAS,IAAIE,GAAKL,GAAOK,CAAC,CAAC,CACxC,CACF,CAAC,EACD,OAAO,eAAeF,EAAK,OAAQ,CACjC,IAAK,UAAY,CACf,GAAI,CAACX,GAAQ,OACb,IAAMc,EAAYL,GAAS,cAAc,KAAK,EAC9C,OAAAK,EAAU,UAAYH,EAAI,KACnBG,EAAU,QACnB,CACF,CAAC,EACMH,CACT,CAEA,SAASI,IAAQtC,EAAM,CACrB,GAAI,CACF,SAAAuC,EACA,KAAAC,EACA,KAAAC,EACA,WAAAC,EACA,OAAA9J,EACA,UAAA+J,CACF,EAAI3C,EACJ,GAAI4C,GAAsBD,CAAS,GAAKH,EAAK,OAAS,CAACC,EAAK,MAAO,CACjE,GAAM,CACJ,MAAAI,EACA,OAAAC,CACF,EAAIN,EACEO,EAAS,CACb,EAAGF,EAAQC,EAAS,EACpB,EAAG,EACL,EACAJ,EAAW,MAAWM,GAAW/E,GAAeA,GAAe,CAAC,EAAGrF,CAAM,EAAG,CAAC,EAAG,CAC9E,mBAAoB,GAAG,OAAOmK,EAAO,EAAIJ,EAAU,EAAI,GAAI,KAAK,EAAE,OAAOI,EAAO,EAAIJ,EAAU,EAAI,GAAI,IAAI,CAC5G,CAAC,CAAC,CACJ,CACA,MAAO,CAAC,CACN,IAAK,MACL,WAAAD,EACA,SAAAH,CACF,CAAC,CACH,CAEA,SAASU,IAAUjD,EAAM,CACvB,GAAI,CACF,OAAA/F,EACA,SAAAC,EACA,SAAAqI,EACA,WAAAG,EACA,OAAAQ,CACF,EAAIlD,EACEmD,EAAKD,IAAW,GAAO,GAAG,OAAOjJ,EAAQ,GAAG,EAAE,OAAOa,GAAO,UAAW,GAAG,EAAE,OAAOZ,CAAQ,EAAIgJ,EACrG,MAAO,CAAC,CACN,IAAK,MACL,WAAY,CACV,MAAO,gBACT,EACA,SAAU,CAAC,CACT,IAAK,SACL,WAAYjF,GAAeA,GAAe,CAAC,EAAGyE,CAAU,EAAG,CAAC,EAAG,CAC7D,GAAAS,CACF,CAAC,EACD,SAAAZ,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAASa,GAAsB5G,EAAQ,CACrC,GAAM,CACJ,MAAO,CACL,KAAAgG,EACA,KAAAC,CACF,EACA,OAAAxI,EACA,SAAAC,EACA,UAAAyI,EACA,OAAAO,EACA,MAAAG,EACA,OAAAC,EACA,QAAAC,EACA,MAAAC,EACA,UAAAC,EAAY,EACd,EAAIjH,EACE,CACJ,MAAAqG,EACA,OAAAC,CACF,EAAIL,EAAK,MAAQA,EAAOD,EAClBkB,EAAiBC,IAAG,SAAS1J,CAAM,EACnC2J,EAAY,CAAC9I,GAAO,iBAAkBZ,EAAW,GAAG,OAAOY,GAAO,UAAW,GAAG,EAAE,OAAOZ,CAAQ,EAAI,EAAE,EAAE,OAAOkB,GAAQoI,EAAM,QAAQ,QAAQpI,CAAI,IAAM,EAAE,EAAE,OAAOA,GAAQA,IAAS,IAAM,CAAC,CAACA,CAAI,EAAE,OAAOoI,EAAM,OAAO,EAAE,KAAK,GAAG,EAClOK,EAAU,CACZ,SAAU,CAAC,EACX,WAAY5F,GAAeA,GAAe,CAAC,EAAGuF,EAAM,UAAU,EAAG,CAAC,EAAG,CACnE,cAAevJ,EACf,YAAaC,EACb,MAAS0J,EACT,KAAQJ,EAAM,WAAW,MAAQ,MACjC,MAAS,6BACT,QAAW,OAAO,OAAOX,EAAO,GAAG,EAAE,OAAOC,CAAM,CACpD,CAAC,CACH,EACMgB,EAAyBJ,GAAkB,CAAC,CAACF,EAAM,QAAQ,QAAQ,OAAO,EAAI,CAClF,MAAO,GAAG,OAAOX,EAAQC,EAAS,GAAK,MAAQ,IAAI,CACrD,EAAI,CAAC,EACDW,IACFI,EAAQ,WAAWE,EAAa,EAAI,IAElCV,IACFQ,EAAQ,SAAS,KAAK,CACpB,IAAK,QACL,WAAY,CACV,GAAIA,EAAQ,WAAW,iBAAiB,GAAK,SAAS,OAAON,GAAWS,GAAa,CAAC,CACxF,EACA,SAAU,CAACX,CAAK,CAClB,CAAC,EACD,OAAOQ,EAAQ,WAAW,OAE5B,IAAMlD,EAAO1C,GAAeA,GAAe,CAAC,EAAG4F,CAAO,EAAG,CAAC,EAAG,CAC3D,OAAA5J,EACA,SAAAC,EACA,KAAAsI,EACA,KAAAC,EACA,OAAAa,EACA,UAAAX,EACA,OAAAO,EACA,OAAQjF,GAAeA,GAAe,CAAC,EAAG6F,CAAsB,EAAGN,EAAM,MAAM,CACjF,CAAC,EACK,CACJ,SAAAjB,EACA,WAAAG,CACF,EAAID,EAAK,OAASD,EAAK,MAAQxB,GAAa,uBAAwBL,CAAI,GAAK,CAC3E,SAAU,CAAC,EACX,WAAY,CAAC,CACf,EAAIK,GAAa,uBAAwBL,CAAI,GAAK,CAChD,SAAU,CAAC,EACX,WAAY,CAAC,CACf,EAGA,OAFAA,EAAK,SAAW4B,EAChB5B,EAAK,WAAa+B,EACdQ,EACKD,IAAStC,CAAI,EAEb2B,IAAO3B,CAAI,CAEtB,CACA,SAASsD,GAAuBzH,EAAQ,CACtC,GAAM,CACJ,QAAAqH,EACA,MAAAhB,EACA,OAAAC,EACA,UAAAH,EACA,MAAAU,EACA,MAAAG,EACA,UAAAC,EAAY,EACd,EAAIjH,EACEkG,EAAazE,GAAeA,GAAeA,GAAe,CAAC,EAAGuF,EAAM,UAAU,EAAGH,EAAQ,CAC7F,MAASA,CACX,EAAI,CAAC,CAAC,EAAG,CAAC,EAAG,CACX,MAASG,EAAM,QAAQ,KAAK,GAAG,CACjC,CAAC,EACGC,IACFf,EAAWqB,EAAa,EAAI,IAE9B,IAAMnL,EAASqF,GAAe,CAAC,EAAGuF,EAAM,MAAM,EAC1CZ,GAAsBD,CAAS,IACjC/J,EAAO,UAAesL,IAAgB,CACpC,UAAAvB,EACA,cAAe,GACf,MAAAE,EACA,OAAAC,CACF,CAAC,EACDlK,EAAO,mBAAmB,EAAIA,EAAO,WAEvC,IAAMuL,EAAcnB,GAAWpK,CAAM,EACjCuL,EAAY,OAAS,IACvBzB,EAAW,MAAWyB,GAExB,IAAMjC,EAAM,CAAC,EACb,OAAAA,EAAI,KAAK,CACP,IAAK,OACL,WAAAQ,EACA,SAAU,CAACmB,CAAO,CACpB,CAAC,EACGR,GACFnB,EAAI,KAAK,CACP,IAAK,OACL,WAAY,CACV,MAAO,SACT,EACA,SAAU,CAACmB,CAAK,CAClB,CAAC,EAEInB,CACT,CACA,SAASkC,IAA0B5H,EAAQ,CACzC,GAAM,CACJ,QAAAqH,EACA,MAAAR,EACA,MAAAG,CACF,EAAIhH,EACEkG,EAAazE,GAAeA,GAAeA,GAAe,CAAC,EAAGuF,EAAM,UAAU,EAAGH,EAAQ,CAC7F,MAASA,CACX,EAAI,CAAC,CAAC,EAAG,CAAC,EAAG,CACX,MAASG,EAAM,QAAQ,KAAK,GAAG,CACjC,CAAC,EACKW,EAAcnB,GAAWQ,EAAM,MAAM,EACvCW,EAAY,OAAS,IACvBzB,EAAW,MAAWyB,GAExB,IAAMjC,EAAM,CAAC,EACb,OAAAA,EAAI,KAAK,CACP,IAAK,OACL,WAAAQ,EACA,SAAU,CAACmB,CAAO,CACpB,CAAC,EACGR,GACFnB,EAAI,KAAK,CACP,IAAK,OACL,WAAY,CACV,MAAO,SACT,EACA,SAAU,CAACmB,CAAK,CAClB,CAAC,EAEInB,CACT,CAEA,GAAM,CACJ,OAAQmC,EACV,EAAIvL,GACJ,SAASwL,GAAY7J,EAAM,CACzB,IAAMoI,EAAQpI,EAAK,CAAC,EACdqI,EAASrI,EAAK,CAAC,EACf,CAAC8J,CAAU,EAAI9J,EAAK,MAAM,CAAC,EAC7B+J,EAAU,KACd,OAAI,MAAM,QAAQD,CAAU,EAC1BC,EAAU,CACR,IAAK,IACL,WAAY,CACV,MAAO,GAAG,OAAO1J,GAAO,UAAW,GAAG,EAAE,OAAO2J,GAAgB,KAAK,CACtE,EACA,SAAU,CAAC,CACT,IAAK,OACL,WAAY,CACV,MAAO,GAAG,OAAO3J,GAAO,UAAW,GAAG,EAAE,OAAO2J,GAAgB,SAAS,EACxE,KAAM,eACN,EAAGF,EAAW,CAAC,CACjB,CACF,EAAG,CACD,IAAK,OACL,WAAY,CACV,MAAO,GAAG,OAAOzJ,GAAO,UAAW,GAAG,EAAE,OAAO2J,GAAgB,OAAO,EACtE,KAAM,eACN,EAAGF,EAAW,CAAC,CACjB,CACF,CAAC,CACH,EAEAC,EAAU,CACR,IAAK,OACL,WAAY,CACV,KAAM,eACN,EAAGD,CACL,CACF,EAEK,CACL,MAAO,GACP,MAAA1B,EACA,OAAAC,EACA,KAAM0B,CACR,CACF,CACA,IAAME,IAA6B,CACjC,MAAO,GACP,MAAO,IACP,OAAQ,GACV,EACA,SAASC,IAAmBzK,EAAUD,EAAQ,CACxC,CAAC2K,IAAc,CAAC9J,GAAO,kBAAoBZ,GAC7C,QAAQ,MAAM,mBAAoB,OAAOA,EAAU,gBAAkB,EAAE,OAAOD,EAAQ,eAAgB,CAAC,CAE3G,CACA,SAAS4K,GAAS3K,EAAUD,EAAQ,CAClC,IAAIsD,EAActD,EAClB,OAAIA,IAAW,MAAQa,GAAO,eAAiB,OAC7Cb,EAAS6B,GAAuB,GAE3B,IAAI,QAAQ,CAACgJ,EAASC,IAAW,CACtC,GAAIxH,IAAgB,KAAM,CACxB,IAAMvC,EAAOU,GAAUxB,CAAQ,GAAK,CAAC,EACrCA,EAAWc,EAAK,UAAYd,EAC5BD,EAASe,EAAK,QAAUf,CAC1B,CACA,GAAIC,GAAYD,GAAUoK,GAASpK,CAAM,GAAKoK,GAASpK,CAAM,EAAEC,CAAQ,EAAG,CACxE,IAAMO,EAAO4J,GAASpK,CAAM,EAAEC,CAAQ,EACtC,OAAO4K,EAAQR,GAAY7J,CAAI,CAAC,CAClC,CACAkK,IAAmBzK,EAAUD,CAAM,EACnC6K,EAAQ7G,GAAeA,GAAe,CAAC,EAAGyG,GAA0B,EAAG,CAAC,EAAG,CACzE,KAAM5J,GAAO,kBAAoBZ,EAAW8G,GAAa,qBAAqB,GAAK,CAAC,EAAI,CAAC,CAC3F,CAAC,CAAC,CACJ,CAAC,CACH,CAEA,IAAMgE,GAAS,IAAM,CAAC,EAChBC,GAAMnK,GAAO,oBAAsBoK,IAAeA,GAAY,MAAQA,GAAY,QAAUA,GAAc,CAC9G,KAAMF,GACN,QAASA,EACX,EACMG,GAAW,aACXC,IAAQzL,IACZsL,GAAI,KAAK,GAAG,OAAOE,GAAU,GAAG,EAAE,OAAOxL,EAAM,SAAS,CAAC,EAClD,IAAM0L,GAAI1L,CAAI,GAEjB0L,GAAM1L,GAAQ,CAClBsL,GAAI,KAAK,GAAG,OAAOE,GAAU,GAAG,EAAE,OAAOxL,EAAM,OAAO,CAAC,EACvDsL,GAAI,QAAQ,GAAG,OAAOE,GAAU,GAAG,EAAE,OAAOxL,CAAI,EAAG,GAAG,OAAOwL,GAAU,GAAG,EAAE,OAAOxL,EAAM,SAAS,EAAG,GAAG,OAAOwL,GAAU,GAAG,EAAE,OAAOxL,EAAM,OAAO,CAAC,CACrJ,EACI2L,GAAO,CACT,MAAAF,IACA,IAAAC,EACF,EAEME,GAAS,IAAM,CAAC,EACtB,SAASC,GAAUC,EAAM,CAEvB,OAAO,OADOA,EAAK,aAAeA,EAAK,aAAa1B,EAAa,EAAI,OAC7C,QAC1B,CACA,SAAS2B,IAAiBD,EAAM,CAC9B,IAAMxL,EAASwL,EAAK,aAAeA,EAAK,aAAaE,EAAW,EAAI,KAC9DlL,EAAOgL,EAAK,aAAeA,EAAK,aAAaG,EAAS,EAAI,KAChE,OAAO3L,GAAUQ,CACnB,CACA,SAASoL,IAAgBJ,EAAM,CAC7B,OAAOA,GAAQA,EAAK,WAAaA,EAAK,UAAU,UAAYA,EAAK,UAAU,SAAS3K,GAAO,gBAAgB,CAC7G,CACA,SAASgL,KAAa,CACpB,OAAIhL,GAAO,iBAAmB,GACrBiL,GAAS,QAEFA,GAASjL,GAAO,cAAc,GAC5BiL,GAAS,OAC7B,CACA,SAASC,IAAgBC,EAAK,CAC5B,OAAOjE,GAAS,gBAAgB,6BAA8BiE,CAAG,CACnE,CACA,SAASC,IAAcD,EAAK,CAC1B,OAAOjE,GAAS,cAAciE,CAAG,CACnC,CACA,SAASE,GAAWC,EAAa,CAC/B,IAAI5J,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,KAAA6J,EAAOD,EAAY,MAAQ,MAAQJ,IAAkBE,GACvD,EAAI1J,EACJ,GAAI,OAAO4J,GAAgB,SACzB,OAAOpE,GAAS,eAAeoE,CAAW,EAE5C,IAAMH,EAAMI,EAAKD,EAAY,GAAG,EAChC,cAAO,KAAKA,EAAY,YAAc,CAAC,CAAC,EAAE,QAAQ,SAAU5H,EAAK,CAC/DyH,EAAI,aAAazH,EAAK4H,EAAY,WAAW5H,CAAG,CAAC,CACnD,CAAC,GACgB4H,EAAY,UAAY,CAAC,GACjC,QAAQ,SAAUE,EAAO,CAChCL,EAAI,YAAYE,GAAWG,EAAO,CAChC,KAAAD,CACF,CAAC,CAAC,CACJ,CAAC,EACMJ,CACT,CACA,SAASM,IAAcd,EAAM,CAC3B,IAAIe,EAAU,IAAI,OAAOf,EAAK,UAAW,GAAG,EAE5C,OAAAe,EAAU,GAAG,OAAOA,EAAS,+BAA+B,EAErDA,CACT,CACA,IAAMT,GAAW,CACf,QAAS,SAAUU,EAAU,CAC3B,IAAMhB,EAAOgB,EAAS,CAAC,EACvB,GAAIhB,EAAK,WAIP,GAHAgB,EAAS,CAAC,EAAE,QAAQC,GAAY,CAC9BjB,EAAK,WAAW,aAAaU,GAAWO,CAAQ,EAAGjB,CAAI,CACzD,CAAC,EACGA,EAAK,aAAa1B,EAAa,IAAM,MAAQjJ,GAAO,mBAAoB,CAC1E,IAAI0L,EAAUxE,GAAS,cAAcuE,IAAcd,CAAI,CAAC,EACxDA,EAAK,WAAW,aAAae,EAASf,CAAI,CAC5C,MACEA,EAAK,OAAO,CAGlB,EACA,KAAM,SAAUgB,EAAU,CACxB,IAAMhB,EAAOgB,EAAS,CAAC,EACjBC,EAAWD,EAAS,CAAC,EAI3B,GAAI,CAACE,GAAWlB,CAAI,EAAE,QAAQ3K,GAAO,gBAAgB,EACnD,OAAOiL,GAAS,QAAQU,CAAQ,EAElC,IAAMG,EAAS,IAAI,OAAO,GAAG,OAAO9L,GAAO,UAAW,KAAK,CAAC,EAE5D,GADA,OAAO4L,EAAS,CAAC,EAAE,WAAW,GAC1BA,EAAS,CAAC,EAAE,WAAW,MAAO,CAChC,IAAMG,EAAeH,EAAS,CAAC,EAAE,WAAW,MAAM,MAAM,GAAG,EAAE,OAAO,CAACxN,EAAKa,KACpEA,IAAQe,GAAO,kBAAoBf,EAAI,MAAM6M,CAAM,EACrD1N,EAAI,MAAM,KAAKa,CAAG,EAElBb,EAAI,OAAO,KAAKa,CAAG,EAEdb,GACN,CACD,OAAQ,CAAC,EACT,MAAO,CAAC,CACV,CAAC,EACDwN,EAAS,CAAC,EAAE,WAAW,MAAQG,EAAa,MAAM,KAAK,GAAG,EACtDA,EAAa,OAAO,SAAW,EACjCpB,EAAK,gBAAgB,OAAO,EAE5BA,EAAK,aAAa,QAASoB,EAAa,OAAO,KAAK,GAAG,CAAC,CAE5D,CACA,IAAMC,EAAeJ,EAAS,IAAItE,GAAKL,GAAOK,CAAC,CAAC,EAAE,KAAK;AAAA,CAAI,EAC3DqD,EAAK,aAAa1B,GAAe,EAAE,EACnC0B,EAAK,UAAYqB,CACnB,CACF,EACA,SAASC,GAAqBC,EAAI,CAChCA,EAAG,CACL,CACA,SAASC,GAAQC,EAAWC,EAAU,CACpC,IAAMC,EAAmB,OAAOD,GAAa,WAAaA,EAAW5B,GACrE,GAAI2B,EAAU,SAAW,EACvBE,EAAiB,MACZ,CACL,IAAIC,EAAQN,GACRjM,GAAO,iBAAmBwM,MAC5BD,EAAQE,GAAO,uBAAyBR,IAE1CM,EAAM,IAAM,CACV,IAAMG,EAAU1B,IAAW,EACrB2B,EAAOnC,GAAK,MAAM,QAAQ,EAChC4B,EAAU,IAAIM,CAAO,EACrBC,EAAK,EACLL,EAAiB,CACnB,CAAC,CACH,CACF,CACA,IAAIM,GAAW,GACf,SAASC,IAAqB,CAC5BD,GAAW,EACb,CACA,SAASE,IAAoB,CAC3BF,GAAW,EACb,CACA,IAAIG,GAAK,KACT,SAASC,GAAQC,EAAS,CAIxB,GAHI,CAACC,IAGD,CAAClN,GAAO,iBACV,OAEF,GAAM,CACJ,aAAAmN,EAAe1C,GACf,aAAA2C,EAAe3C,GACf,uBAAA4C,EAAyB5C,GACzB,qBAAA6C,EAAuBpG,EACzB,EAAI+F,EACJF,GAAK,IAAIG,GAAkBK,GAAW,CACpC,GAAIX,GAAU,OACd,IAAM3I,EAAgBjD,GAAuB,EAC7CwM,GAAQD,CAAO,EAAE,QAAQE,GAAkB,CAUzC,GATIA,EAAe,OAAS,aAAeA,EAAe,WAAW,OAAS,GAAK,CAAC/C,GAAU+C,EAAe,WAAW,CAAC,CAAC,IACpHzN,GAAO,sBACTqN,EAAuBI,EAAe,MAAM,EAE9CN,EAAaM,EAAe,MAAM,GAEhCA,EAAe,OAAS,cAAgBA,EAAe,OAAO,YAAczN,GAAO,sBACrFqN,EAAuBI,EAAe,OAAO,UAAU,EAErDA,EAAe,OAAS,cAAgB/C,GAAU+C,EAAe,MAAM,GAAK,CAACC,IAAgC,QAAQD,EAAe,aAAa,EACnJ,GAAIA,EAAe,gBAAkB,SAAW7C,IAAiB6C,EAAe,MAAM,EAAG,CACvF,GAAM,CACJ,OAAAtO,EACA,SAAAC,CACF,EAAImD,GAAiBsJ,GAAW4B,EAAe,MAAM,CAAC,EACtDA,EAAe,OAAO,aAAa5C,GAAa1L,GAAU8E,CAAa,EACnE7E,GAAUqO,EAAe,OAAO,aAAa3C,GAAW1L,CAAQ,CACtE,MAAW2L,IAAgB0C,EAAe,MAAM,GAC9CL,EAAaK,EAAe,MAAM,CAGxC,CAAC,CACH,CAAC,EACIhH,IACLsG,GAAG,QAAQO,EAAsB,CAC/B,UAAW,GACX,WAAY,GACZ,cAAe,GACf,QAAS,EACX,CAAC,CACH,CACA,SAASK,KAAa,CACfZ,IACLA,GAAG,WAAW,CAChB,CAEA,SAASa,IAAajD,EAAM,CAC1B,IAAMjL,EAAQiL,EAAK,aAAa,OAAO,EACnCvD,EAAM,CAAC,EACX,OAAI1H,IACF0H,EAAM1H,EAAM,MAAM,GAAG,EAAE,OAAO,CAACtB,EAAKsB,IAAU,CAC5C,IAAM5B,EAAS4B,EAAM,MAAM,GAAG,EACxBmO,EAAO/P,EAAO,CAAC,EACfuE,EAAQvE,EAAO,MAAM,CAAC,EAC5B,OAAI+P,GAAQxL,EAAM,OAAS,IACzBjE,EAAIyP,CAAI,EAAIxL,EAAM,KAAK,GAAG,EAAE,KAAK,GAE5BjE,CACT,EAAG,CAAC,CAAC,GAEAgJ,CACT,CAEA,SAAS0G,IAAanD,EAAM,CAC1B,IAAMoD,EAAiBpD,EAAK,aAAa,aAAa,EAChDqD,EAAmBrD,EAAK,aAAa,WAAW,EAChDsD,EAAYtD,EAAK,YAAc,OAAYA,EAAK,UAAU,KAAK,EAAI,GACrEvD,EAAM7E,GAAiBsJ,GAAWlB,CAAI,CAAC,EAQ3C,OAPKvD,EAAI,SACPA,EAAI,OAASpG,GAAuB,GAElC+M,GAAkBC,IACpB5G,EAAI,OAAS2G,EACb3G,EAAI,SAAW4G,GAEb5G,EAAI,UAAYA,EAAI,SAGpBA,EAAI,QAAU6G,EAAU,OAAS,IACnC7G,EAAI,SAAW3G,IAAW2G,EAAI,OAAQuD,EAAK,SAAS,GAAKpK,GAAU6G,EAAI,OAAQ8G,GAAMvD,EAAK,SAAS,CAAC,GAElG,CAACvD,EAAI,UAAYpH,GAAO,cAAgB2K,EAAK,YAAcA,EAAK,WAAW,WAAa,KAAK,YAC/FvD,EAAI,SAAWuD,EAAK,WAAW,OAE1BvD,CACT,CAEA,SAAS+G,IAAkBxD,EAAM,CAC/B,IAAMyD,EAAkBZ,GAAQ7C,EAAK,UAAU,EAAE,OAAO,CAACvM,EAAKiQ,KACxDjQ,EAAI,OAAS,SAAWA,EAAI,OAAS,UACvCA,EAAIiQ,EAAK,IAAI,EAAIA,EAAK,OAEjBjQ,GACN,CAAC,CAAC,EACCmK,EAAQoC,EAAK,aAAa,OAAO,EACjClC,EAAUkC,EAAK,aAAa,kBAAkB,EACpD,OAAI3K,GAAO,WACLuI,EACF6F,EAAgB,iBAAiB,EAAI,GAAG,OAAOpO,GAAO,iBAAkB,SAAS,EAAE,OAAOyI,GAAWS,GAAa,CAAC,GAEnHkF,EAAgB,aAAa,EAAI,OACjCA,EAAgB,UAAe,UAG5BA,CACT,CAEA,SAASE,KAAY,CACnB,MAAO,CACL,SAAU,KACV,MAAO,KACP,QAAS,KACT,OAAQ,KACR,UAAWC,GACX,OAAQ,GACR,KAAM,CACJ,SAAU,KACV,OAAQ,KACR,KAAM,CAAC,CACT,EACA,OAAQ,KACR,MAAO,CACL,QAAS,CAAC,EACV,OAAQ,CAAC,EACT,WAAY,CAAC,CACf,CACF,CACF,CACA,SAASC,GAAU7D,EAAM,CACvB,IAAI8D,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAC/E,YAAa,EACf,EACM,CACJ,SAAArP,EACA,OAAAD,EACA,KAAMuP,CACR,EAAIZ,IAAYnD,CAAI,EACdyD,EAAkBD,IAAiBxD,CAAI,EACvCgE,EAAahJ,GAAW,sBAAuB,CAAC,EAAGgF,CAAI,EACzDiE,EAAcH,EAAO,YAAcb,IAAYjD,CAAI,EAAI,CAAC,EAC5D,OAAOxH,GAAe,CACpB,SAAA/D,EACA,MAAOuL,EAAK,aAAa,OAAO,EAChC,QAASA,EAAK,aAAa,kBAAkB,EAC7C,OAAAxL,EACA,UAAWoP,GACX,KAAM,CACJ,SAAU,KACV,OAAQ,KACR,KAAM,CAAC,CACT,EACA,OAAQ,KACR,OAAQ,GACR,MAAO,CACL,QAASG,EACT,OAAQE,EACR,WAAYR,CACd,CACF,EAAGO,CAAU,CACf,CAEA,GAAM,CACJ,OAAQE,GACV,EAAI7Q,GACJ,SAAS8Q,GAAiBnE,EAAM,CAC9B,IAAMoE,EAAW/O,GAAO,iBAAmB,OAASwO,GAAU7D,EAAM,CAClE,YAAa,EACf,CAAC,EAAI6D,GAAU7D,CAAI,EACnB,MAAI,CAACoE,EAAS,MAAM,QAAQ,QAAQC,EAAqB,EAChD9I,GAAa,qBAAsByE,EAAMoE,CAAQ,EAEjD7I,GAAa,iCAAkCyE,EAAMoE,CAAQ,CAExE,CACA,SAASE,KAAmB,CAC1B,MAAO,CAAC,GAAGC,IAAI,GAAGvM,EAAE,CACtB,CACA,SAASwM,GAAOC,EAAM,CACpB,IAAI/C,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACnF,GAAI,CAAC5F,GAAQ,OAAO,QAAQ,QAAQ,EACpC,IAAM4I,EAAgBnI,GAAS,gBAAgB,UACzCoI,EAASC,GAAUF,EAAc,IAAI,GAAG,OAAOG,GAA6B,GAAG,EAAE,OAAOD,CAAM,CAAC,EAC/FE,EAAYF,GAAUF,EAAc,OAAO,GAAG,OAAOG,GAA6B,GAAG,EAAE,OAAOD,CAAM,CAAC,EACrGG,EAAW1P,GAAO,aAAeiP,IAAiB,EAAIjM,GAAE,OAAO,OAAO,KAAK6L,GAAQ,CAAC,EACrFa,EAAS,SAAS,IAAI,GACzBA,EAAS,KAAK,IAAI,EAEpB,IAAMC,EAAmB,CAAC,IAAI,OAAOX,GAAuB,QAAQ,EAAE,OAAO/F,GAAe,IAAI,CAAC,EAAE,OAAOyG,EAAS,IAAIE,GAAQ,IAAI,OAAOA,EAAM,QAAQ,EAAE,OAAO3G,GAAe,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,EACjM,GAAI0G,EAAiB,SAAW,EAC9B,OAAO,QAAQ,QAAQ,EAEzB,IAAIE,EAAa,CAAC,EAClB,GAAI,CACFA,EAAarC,GAAQ4B,EAAK,iBAAiBO,CAAgB,CAAC,CAC9D,MAAe,CAEf,CACA,GAAIE,EAAW,OAAS,EACtBP,EAAO,SAAS,EAChBG,EAAU,UAAU,MAEpB,QAAO,QAAQ,QAAQ,EAEzB,IAAM9C,EAAOnC,GAAK,MAAM,QAAQ,EAC1B4B,EAAYyD,EAAW,OAAO,CAACzR,EAAKuM,IAAS,CACjD,GAAI,CACF,IAAMgB,EAAWmD,GAAiBnE,CAAI,EAClCgB,GACFvN,EAAI,KAAKuN,CAAQ,CAErB,OAASmE,EAAM,CACRhG,IACCgG,EAAK,OAAS,eAChB,QAAQ,MAAMA,CAAI,CAGxB,CACA,OAAO1R,CACT,EAAG,CAAC,CAAC,EACL,OAAO,IAAI,QAAQ,CAAC4L,EAASC,IAAW,CACtC,QAAQ,IAAImC,CAAS,EAAE,KAAK2D,GAAqB,CAC/C5D,GAAQ4D,EAAmB,IAAM,CAC/BT,EAAO,QAAQ,EACfA,EAAO,UAAU,EACjBG,EAAU,SAAS,EACf,OAAOpD,GAAa,YAAYA,EAAS,EAC7CM,EAAK,EACL3C,EAAQ,CACV,CAAC,CACH,CAAC,EAAE,MAAM8F,GAAQ,CACfnD,EAAK,EACL1C,EAAO6F,CAAI,CACb,CAAC,CACH,CAAC,CACH,CACA,SAASE,IAAOrF,EAAM,CACpB,IAAI0B,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACnFyC,GAAiBnE,CAAI,EAAE,KAAKgB,GAAY,CAClCA,GACFQ,GAAQ,CAACR,CAAQ,EAAGU,CAAQ,CAEhC,CAAC,CACH,CACA,SAAS4D,IAAaC,EAAM,CAC1B,OAAO,SAAUC,EAAqB,CACpC,IAAIzO,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E0O,GAAkBD,GAAuB,CAAC,GAAG,KAAOA,EAAsBhK,GAAmBgK,GAAuB,CAAC,CAAC,EACxH,CACF,KAAAxI,CACF,EAAIjG,EACJ,OAAIiG,IACFA,GAAQA,GAAQ,CAAC,GAAG,KAAOA,EAAOxB,GAAmBwB,GAAQ,CAAC,CAAC,GAE1DuI,EAAKE,EAAgBjN,GAAeA,GAAe,CAAC,EAAGzB,CAAM,EAAG,CAAC,EAAG,CACzE,KAAAiG,CACF,CAAC,CAAC,CACJ,CACF,CACA,IAAM0I,IAAS,SAAUD,EAAgB,CACvC,IAAI1O,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,UAAAmG,EAAY0G,GACZ,OAAAnG,EAAS,GACT,KAAAT,EAAO,KACP,OAAAa,EAAS,KACT,MAAAD,EAAQ,KACR,QAAAE,EAAU,KACV,QAAA6H,EAAU,CAAC,EACX,WAAA1I,EAAa,CAAC,EACd,OAAA9J,EAAS,CAAC,CACZ,EAAI4D,EACJ,GAAI,CAAC0O,EAAgB,OACrB,GAAM,CACJ,OAAAjR,EACA,SAAAC,EACA,KAAAO,CACF,EAAIyQ,EACJ,OAAOjJ,GAAYhE,GAAe,CAChC,KAAM,MACR,EAAGiN,CAAc,EAAG,KAClBrK,GAAU,2BAA4B,CACpC,eAAAqK,EACA,OAAA1O,CACF,CAAC,EACG1B,GAAO,WACLuI,EACFX,EAAW,iBAAiB,EAAI,GAAG,OAAO5H,GAAO,iBAAkB,SAAS,EAAE,OAAOyI,GAAWS,GAAa,CAAC,GAE9GtB,EAAW,aAAa,EAAI,OAC5BA,EAAW,UAAe,UAGvBU,GAAsB,CAC3B,MAAO,CACL,KAAMkB,GAAY7J,CAAI,EACtB,KAAMgI,EAAO6B,GAAY7B,EAAK,IAAI,EAAI,CACpC,MAAO,GACP,MAAO,KACP,OAAQ,KACR,KAAM,CAAC,CACT,CACF,EACA,OAAAxI,EACA,SAAAC,EACA,UAAW+D,GAAeA,GAAe,CAAC,EAAGoL,EAAoB,EAAG1G,CAAS,EAC7E,OAAAO,EACA,MAAAG,EACA,OAAAC,EACA,QAAAC,EACA,MAAO,CACL,WAAAb,EACA,OAAA9J,EACA,QAAAwS,CACF,CACF,CAAC,EACF,CACH,EACIC,IAAkB,CACpB,QAAS,CACP,MAAO,CACL,KAAMN,IAAaI,GAAM,CAC3B,CACF,EACA,OAAQ,CACN,MAAO,CACL,0BAA0BzK,EAAa,CACrC,OAAAA,EAAY,aAAeuJ,GAC3BvJ,EAAY,aAAeoK,IACpBpK,CACT,CACF,CACF,EACA,SAAS4K,EAAc,CACrBA,EAAa,MAAQ,SAAU9O,EAAQ,CACrC,GAAM,CACJ,KAAAiJ,EAAOzD,GACP,SAAAmF,EAAW,IAAM,CAAC,CACpB,EAAI3K,EACJ,OAAOyN,GAAOxE,EAAM0B,CAAQ,CAC9B,EACAmE,EAAa,+BAAiC,SAAU7F,EAAMoE,EAAU,CACtE,GAAM,CACJ,SAAA3P,EACA,MAAAmJ,EACA,QAAAE,EACA,OAAAtJ,EACA,UAAA0I,EACA,OAAAO,EACA,KAAAT,EACA,OAAAa,EACA,MAAAE,CACF,EAAIqG,EACJ,OAAO,IAAI,QAAQ,CAAC/E,EAASC,IAAW,CACtC,QAAQ,IAAI,CAACF,GAAS3K,EAAUD,CAAM,EAAGwI,EAAK,SAAWoC,GAASpC,EAAK,SAAUA,EAAK,MAAM,EAAI,QAAQ,QAAQ,CAC9G,MAAO,GACP,MAAO,IACP,OAAQ,IACR,KAAM,CAAC,CACT,CAAC,CAAC,CAAC,EAAE,KAAKzC,GAAQ,CAChB,GAAI,CAACwC,EAAMC,CAAI,EAAIzC,EACnB8E,EAAQ,CAACW,EAAMrC,GAAsB,CACnC,MAAO,CACL,KAAAZ,EACA,KAAAC,CACF,EACA,OAAAxI,EACA,SAAAC,EACA,UAAAyI,EACA,OAAAO,EACA,OAAAI,EACA,MAAAD,EACA,QAAAE,EACA,MAAAC,EACA,UAAW,EACb,CAAC,CAAC,CAAC,CACL,CAAC,EAAE,MAAMuB,CAAM,CACjB,CAAC,CACH,EACAuG,EAAa,qBAAuB,SAAUC,EAAO,CACnD,GAAI,CACF,SAAAhJ,EACA,WAAAG,EACA,KAAAF,EACA,UAAAG,EACA,OAAA/J,CACF,EAAI2S,EACEpH,EAAcnB,GAAWpK,CAAM,EACjCuL,EAAY,OAAS,IACvBzB,EAAW,MAAWyB,GAExB,IAAIqH,EACJ,OAAI5I,GAAsBD,CAAS,IACjC6I,EAAYxK,GAAa,oCAAqC,CAC5D,KAAAwB,EACA,UAAAG,EACA,eAAgBH,EAAK,MACrB,UAAWA,EAAK,KAClB,CAAC,GAEHD,EAAS,KAAKiJ,GAAahJ,EAAK,IAAI,EAC7B,CACL,SAAAD,EACA,WAAAG,CACF,CACF,CACF,CACF,EAEI+I,IAAS,CACX,QAAS,CACP,MAAO,CACL,MAAMC,EAAW,CACf,IAAIlP,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,QAAA4O,EAAU,CAAC,CACb,EAAI5O,EACJ,OAAOyF,GAAY,CACjB,KAAM,OACR,EAAG,IAAM,CACPpB,GAAU,2BAA4B,CACpC,UAAA6K,EACA,OAAAlP,CACF,CAAC,EACD,IAAI+F,EAAW,CAAC,EAChB,OAAAmJ,EAAU/K,GAAQ,CAChB,MAAM,QAAQA,CAAI,EAAIA,EAAK,IAAIyB,GAAK,CAClCG,EAAWA,EAAS,OAAOH,EAAE,QAAQ,CACvC,CAAC,EAAIG,EAAWA,EAAS,OAAO5B,EAAK,QAAQ,CAC/C,CAAC,EACM,CAAC,CACN,IAAK,OACL,WAAY,CACV,MAAO,CAAC,GAAG,OAAO7F,GAAO,UAAW,SAAS,EAAG,GAAGsQ,CAAO,EAAE,KAAK,GAAG,CACtE,EACA,SAAA7I,CACF,CAAC,CACH,CAAC,CACH,CACF,CACF,CACF,EAEIoJ,IAAgB,CAClB,QAAS,CACP,MAAO,CACL,QAAQ9H,EAAS,CACf,IAAIrH,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,MAAA6G,EAAQ,KACR,QAAA+H,EAAU,CAAC,EACX,WAAA1I,EAAa,CAAC,EACd,OAAA9J,EAAS,CAAC,CACZ,EAAI4D,EACJ,OAAOyF,GAAY,CACjB,KAAM,UACN,QAAA4B,CACF,EAAG,KACDhD,GAAU,2BAA4B,CACpC,QAAAgD,EACA,OAAArH,CACF,CAAC,EACM4H,IAA0B,CAC/B,QAASP,EAAQ,SAAS,EAC1B,MAAAR,EACA,MAAO,CACL,WAAAX,EACA,OAAA9J,EACA,QAAS,CAAC,GAAG,OAAOkC,GAAO,UAAW,iBAAiB,EAAG,GAAGsQ,CAAO,CACtE,CACF,CAAC,EACF,CACH,CACF,CACF,CACF,EAEIQ,IAAa,CACf,QAAS,CACP,MAAO,CACL,KAAK/H,EAAS,CACZ,IAAIrH,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E,CACJ,UAAAmG,EAAY0G,GACZ,MAAAhG,EAAQ,KACR,QAAA+H,EAAU,CAAC,EACX,WAAA1I,EAAa,CAAC,EACd,OAAA9J,EAAS,CAAC,CACZ,EAAI4D,EACJ,OAAOyF,GAAY,CACjB,KAAM,OACN,QAAA4B,CACF,EAAG,KACDhD,GAAU,2BAA4B,CACpC,QAAAgD,EACA,OAAArH,CACF,CAAC,EACMyH,GAAuB,CAC5B,QAAAJ,EACA,UAAW5F,GAAeA,GAAe,CAAC,EAAGoL,EAAoB,EAAG1G,CAAS,EAC7E,MAAAU,EACA,MAAO,CACL,WAAAX,EACA,OAAA9J,EACA,QAAS,CAAC,GAAG,OAAOkC,GAAO,UAAW,cAAc,EAAG,GAAGsQ,CAAO,CACnE,CACF,CAAC,EACF,CACH,CACF,CACF,EACA,SAASE,EAAc,CACrBA,EAAa,mBAAqB,SAAU7F,EAAMoE,EAAU,CAC1D,GAAM,CACJ,MAAAxG,EACA,UAAAV,EACA,MAAAa,CACF,EAAIqG,EACAhH,EAAQ,KACRC,EAAS,KACb,GAAI+I,GAAO,CACT,IAAMC,EAAmB,SAAS,iBAAiBrG,CAAI,EAAE,SAAU,EAAE,EAC/DsG,EAAqBtG,EAAK,sBAAsB,EACtD5C,EAAQkJ,EAAmB,MAAQD,EACnChJ,EAASiJ,EAAmB,OAASD,CACvC,CACA,OAAIhR,GAAO,UAAY,CAACuI,IACtBG,EAAM,WAAW,aAAa,EAAI,QAE7B,QAAQ,QAAQ,CAACiC,EAAMxB,GAAuB,CACnD,QAASwB,EAAK,UACd,MAAA5C,EACA,OAAAC,EACA,UAAAH,EACA,MAAAU,EACA,MAAAG,EACA,UAAW,EACb,CAAC,CAAC,CAAC,CACL,CACF,CACF,EAEMwI,IAAwB,IAAI,OAAO,IAAU,IAAI,EACjDC,GAA0B,CAAC,QAAS,OAAO,EAC3CC,GAAgCjO,GAAeA,GAAeA,GAAeA,GAAe,CAAC,EAAG,CACpG,YAAa,CACX,OAAQ,MACR,IAAK,KACP,CACF,CAAC,EAAGkO,GAAE,EAAGC,GAAE,EAAGC,GAAE,EACVC,GAA+B,OAAO,KAAKJ,EAA6B,EAAE,OAAO,CAAChT,EAAKsF,KAC3FtF,EAAIsF,EAAI,YAAY,CAAC,EAAI0N,GAA8B1N,CAAG,EACnDtF,GACN,CAAC,CAAC,EACCqT,IAA8B,OAAO,KAAKD,EAA4B,EAAE,OAAO,CAACpT,EAAKsT,IAAe,CACxG,IAAMC,EAAUH,GAA6BE,CAAU,EACvD,OAAAtT,EAAIsT,CAAU,EAAIC,EAAQ,GAAG,GAAK,CAAC,GAAG,OAAO,QAAQA,CAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5DvT,CACT,EAAG,CAAC,CAAC,EACL,SAASwT,IAAoB7I,EAAS,CACpC,IAAM8I,EAAU9I,EAAQ,QAAQmI,IAAuB,EAAE,EACnDY,EAAYC,IAAYF,EAAS,CAAC,EAClCG,EAAeF,GAAaX,GAAwB,CAAC,GAAKW,GAAaX,GAAwB,CAAC,EAChGc,EAAYJ,EAAQ,SAAW,EAAIA,EAAQ,CAAC,IAAMA,EAAQ,CAAC,EAAI,GACrE,MAAO,CACL,MAAmB3D,GAAZ+D,EAAkBJ,EAAQ,CAAC,EAAWA,CAAV,EACnC,YAAaG,GAAgBC,CAC/B,CACF,CACA,SAASC,IAAUR,EAAYS,EAAY,CACzC,IAAMC,EAAsBV,EAAW,QAAQ,eAAgB,EAAE,EAAE,YAAY,EACzEW,EAAoB,SAASF,CAAU,EACvCG,EAAsB,MAAMD,CAAiB,EAAI,SAAWA,EAClE,OAAQb,GAA6BY,CAAmB,GAAK,CAAC,GAAGE,CAAmB,GAAKb,IAA4BW,CAAmB,CAC1I,CACA,SAASG,GAAmB5H,EAAM6H,EAAU,CAC1C,IAAMC,EAAmB,GAAG,OAAOC,GAA8B,EAAE,OAAOF,EAAS,QAAQ,IAAK,GAAG,CAAC,EACpG,OAAO,IAAI,QAAQ,CAACxI,EAASC,IAAW,CACtC,GAAIU,EAAK,aAAa8H,CAAgB,IAAM,KAE1C,OAAOzI,EAAQ,EAGjB,IAAM2I,EADWnF,GAAQ7C,EAAK,QAAQ,EACS,OAAOrK,GAAQA,EAAK,aAAasS,EAAsB,IAAMJ,CAAQ,EAAE,CAAC,EACjH1U,EAAS2O,GAAO,iBAAiB9B,EAAM6H,CAAQ,EAC/Cd,EAAa5T,EAAO,iBAAiB,aAAa,EAClD+U,EAAkBnB,EAAW,MAAMoB,GAAmB,EACtDX,EAAarU,EAAO,iBAAiB,aAAa,EAClDiL,EAAUjL,EAAO,iBAAiB,SAAS,EACjD,GAAI6U,GAAiC,CAACE,EAIpC,OAAAlI,EAAK,YAAYgI,CAA6B,EACvC3I,EAAQ,EACV,GAAI6I,GAAmB9J,IAAY,QAAUA,IAAY,GAAI,CAClE,IAAMA,EAAUjL,EAAO,iBAAiB,SAAS,EAC7CqB,EAAS+S,IAAUR,EAAYS,CAAU,EACvC,CACJ,MAAOY,EACP,YAAAC,CACF,EAAIpB,IAAoB7I,CAAO,EACzBkK,EAAOJ,EAAgB,CAAC,EAAE,WAAW,aAAa,EACpDzT,EAAWmB,GAAUpB,EAAQ4T,CAAQ,EACrCG,EAAiB9T,EACrB,GAAI6T,EAAM,CACR,IAAME,EAAYtS,IAAakS,CAAQ,EACnCI,EAAU,UAAYA,EAAU,SAClC/T,EAAW+T,EAAU,SACrBhU,EAASgU,EAAU,OAEvB,CAIA,GAAI/T,GAAY,CAAC4T,IAAgB,CAACL,GAAiCA,EAA8B,aAAa9H,EAAW,IAAM1L,GAAUwT,EAA8B,aAAa7H,EAAS,IAAMoI,GAAiB,CAClNvI,EAAK,aAAa8H,EAAkBS,CAAc,EAC9CP,GAEFhI,EAAK,YAAYgI,CAA6B,EAEhD,IAAMS,EAAO9E,IAAU,EACjB,CACJ,MAAA5F,CACF,EAAI0K,EACJ1K,EAAM,WAAWkK,EAAsB,EAAIJ,EAC3CzI,GAAS3K,EAAUD,CAAM,EAAE,KAAKuI,GAAQ,CACtC,IAAMkE,EAAWtD,GAAsBnF,GAAeA,GAAe,CAAC,EAAGiQ,CAAI,EAAG,CAAC,EAAG,CAClF,MAAO,CACL,KAAA1L,EACA,KAAMzG,GAAmB,CAC3B,EACA,OAAA9B,EACA,SAAU+T,EACV,MAAAxK,EACA,UAAW,EACb,CAAC,CAAC,EACIgB,EAAUxC,GAAS,gBAAgB,6BAA8B,KAAK,EACxEsL,IAAa,WACf7H,EAAK,aAAajB,EAASiB,EAAK,UAAU,EAE1CA,EAAK,YAAYjB,CAAO,EAE1BA,EAAQ,UAAYkC,EAAS,IAAIhM,GAAQqH,GAAOrH,CAAI,CAAC,EAAE,KAAK;AAAA,CAAI,EAChE+K,EAAK,gBAAgB8H,CAAgB,EACrCzI,EAAQ,CACV,CAAC,EAAE,MAAMC,CAAM,CACjB,MACED,EAAQ,CAEZ,MACEA,EAAQ,CAEZ,CAAC,CACH,CACA,SAASqJ,IAAQ1I,EAAM,CACrB,OAAO,QAAQ,IAAI,CAAC4H,GAAmB5H,EAAM,UAAU,EAAG4H,GAAmB5H,EAAM,SAAS,CAAC,CAAC,CAChG,CACA,SAAS2I,IAAY3I,EAAM,CACzB,OAAOA,EAAK,aAAe,SAAS,MAAQ,CAAC,CAAC4I,IAAoC,QAAQ5I,EAAK,QAAQ,YAAY,CAAC,GAAK,CAACA,EAAK,aAAaiI,EAAsB,IAAM,CAACjI,EAAK,YAAcA,EAAK,WAAW,UAAY,MAC1N,CACA,SAAS6I,GAAqBpE,EAAM,CAClC,GAAK3I,GACL,OAAO,IAAI,QAAQ,CAACuD,EAASC,IAAW,CACtC,IAAMwJ,EAAajG,GAAQ4B,EAAK,iBAAiB,GAAG,CAAC,EAAE,OAAOkE,GAAW,EAAE,IAAID,GAAO,EAChF9I,EAAMC,GAAK,MAAM,sBAAsB,EAC7CqC,GAAmB,EACnB,QAAQ,IAAI4G,CAAU,EAAE,KAAK,IAAM,CACjClJ,EAAI,EACJuC,GAAkB,EAClB9C,EAAQ,CACV,CAAC,EAAE,MAAM,IAAM,CACbO,EAAI,EACJuC,GAAkB,EAClB7C,EAAO,CACT,CAAC,CACH,CAAC,CACH,CACA,IAAIyJ,IAAiB,CACnB,OAAQ,CACN,MAAO,CACL,0BAA0B9N,EAAa,CACrC,OAAAA,EAAY,uBAAyB4N,GAC9B5N,CACT,CACF,CACF,EACA,SAASd,EAAW,CAClBA,EAAU,mBAAqB,SAAUpD,EAAQ,CAC/C,GAAM,CACJ,KAAAiJ,EAAOzD,EACT,EAAIxF,EACA1B,GAAO,sBACTwT,GAAqB7I,CAAI,CAE7B,CACF,CACF,EAEIgJ,GAAa,GACbC,IAAqB,CACvB,QAAS,CACP,MAAO,CACL,IAAK,CACH,SAAU,CACR/G,GAAmB,EACnB8G,GAAa,EACf,CACF,CACF,CACF,EACA,OAAQ,CACN,MAAO,CACL,WAAY,CACV3G,GAAQrH,GAAW,4BAA6B,CAAC,CAAC,CAAC,CACrD,EACA,QAAS,CACPgI,IAAW,CACb,EACA,MAAMjM,EAAQ,CACZ,GAAM,CACJ,qBAAA4L,CACF,EAAI5L,EACAiS,GACF7G,GAAkB,EAElBE,GAAQrH,GAAW,4BAA6B,CAC9C,qBAAA2H,CACF,CAAC,CAAC,CAEN,CACF,CACF,CACF,EAEMuG,GAAuBC,GAAmB,CAC9C,IAAIjM,EAAY,CACd,KAAM,GACN,EAAG,EACH,EAAG,EACH,MAAO,GACP,MAAO,GACP,OAAQ,CACV,EACA,OAAOiM,EAAgB,YAAY,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC1V,EAAK2V,IAAM,CACjE,IAAM7U,EAAQ6U,EAAE,YAAY,EAAE,MAAM,GAAG,EACjCC,EAAQ9U,EAAM,CAAC,EACjB+C,EAAO/C,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,EAClC,GAAI8U,GAAS/R,IAAS,IACpB,OAAA7D,EAAI,MAAQ,GACLA,EAET,GAAI4V,GAAS/R,IAAS,IACpB,OAAA7D,EAAI,MAAQ,GACLA,EAGT,GADA6D,EAAO,WAAWA,CAAI,EAClB,MAAMA,CAAI,EACZ,OAAO7D,EAET,OAAQ4V,EAAO,CACb,IAAK,OACH5V,EAAI,KAAOA,EAAI,KAAO6D,EACtB,MACF,IAAK,SACH7D,EAAI,KAAOA,EAAI,KAAO6D,EACtB,MACF,IAAK,OACH7D,EAAI,EAAIA,EAAI,EAAI6D,EAChB,MACF,IAAK,QACH7D,EAAI,EAAIA,EAAI,EAAI6D,EAChB,MACF,IAAK,KACH7D,EAAI,EAAIA,EAAI,EAAI6D,EAChB,MACF,IAAK,OACH7D,EAAI,EAAIA,EAAI,EAAI6D,EAChB,MACF,IAAK,SACH7D,EAAI,OAASA,EAAI,OAAS6D,EAC1B,KACJ,CACA,OAAO7D,CACT,EAAGyJ,CAAS,CACd,EACIoM,IAAkB,CACpB,QAAS,CACP,MAAO,CACL,MAAO,CACL,UAAWH,GACFD,GAAqBC,CAAe,CAE/C,CACF,CACF,EACA,OAAQ,CACN,MAAO,CACL,oBAAoBlO,EAAa+E,EAAM,CACrC,IAAMmJ,EAAkBnJ,EAAK,aAAa,mBAAmB,EAC7D,OAAImJ,IACFlO,EAAY,UAAYiO,GAAqBC,CAAe,GAEvDlO,CACT,CACF,CACF,EACA,SAASd,EAAW,CAClBA,EAAU,kCAAoC,SAAUI,EAAM,CAC5D,GAAI,CACF,KAAAwC,EACA,UAAAG,EACA,eAAAqM,EACA,UAAAC,CACF,EAAIjP,EACEkP,EAAQ,CACZ,UAAW,aAAa,OAAOF,EAAiB,EAAG,OAAO,CAC5D,EACMG,EAAiB,aAAa,OAAOxM,EAAU,EAAI,GAAI,IAAI,EAAE,OAAOA,EAAU,EAAI,GAAI,IAAI,EAC1FyM,EAAa,SAAS,OAAOzM,EAAU,KAAO,IAAMA,EAAU,MAAQ,GAAK,GAAI,IAAI,EAAE,OAAOA,EAAU,KAAO,IAAMA,EAAU,MAAQ,GAAK,GAAI,IAAI,EAClJ0M,EAAc,UAAU,OAAO1M,EAAU,OAAQ,OAAO,EACxD2M,EAAQ,CACZ,UAAW,GAAG,OAAOH,EAAgB,GAAG,EAAE,OAAOC,EAAY,GAAG,EAAE,OAAOC,CAAW,CACtF,EACME,EAAO,CACX,UAAW,aAAa,OAAON,EAAY,EAAI,GAAI,QAAQ,CAC7D,EACMV,EAAa,CACjB,MAAAW,EACA,MAAAI,EACA,KAAAC,CACF,EACA,MAAO,CACL,IAAK,IACL,WAAYtR,GAAe,CAAC,EAAGsQ,EAAW,KAAK,EAC/C,SAAU,CAAC,CACT,IAAK,IACL,WAAYtQ,GAAe,CAAC,EAAGsQ,EAAW,KAAK,EAC/C,SAAU,CAAC,CACT,IAAK/L,EAAK,KAAK,IACf,SAAUA,EAAK,KAAK,SACpB,WAAYvE,GAAeA,GAAe,CAAC,EAAGuE,EAAK,KAAK,UAAU,EAAG+L,EAAW,IAAI,CACtF,CAAC,CACH,CAAC,CACH,CACF,CACF,CACF,EAEMiB,GAAY,CAChB,EAAG,EACH,EAAG,EACH,MAAO,OACP,OAAQ,MACV,EACA,SAASC,GAAU/I,EAAU,CAC3B,IAAIgJ,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAChF,OAAIhJ,EAAS,aAAeA,EAAS,WAAW,MAAQgJ,KACtDhJ,EAAS,WAAW,KAAO,SAEtBA,CACT,CACA,SAASiJ,IAAQjJ,EAAU,CACzB,OAAIA,EAAS,MAAQ,IACZA,EAAS,SAET,CAACA,CAAQ,CAEpB,CACA,IAAIkJ,IAAQ,CACV,OAAQ,CACN,MAAO,CACL,oBAAoBlP,EAAa+E,EAAM,CACrC,IAAMoK,EAAWpK,EAAK,aAAa,cAAc,EAC3ChD,EAAQoN,EAAkCxS,GAAiBwS,EAAS,MAAM,GAAG,EAAE,IAAIC,GAAKA,EAAE,KAAK,CAAC,CAAC,EAA9E/T,GAAmB,EAC5C,OAAK0G,EAAK,SACRA,EAAK,OAAS3G,GAAuB,GAEvC4E,EAAY,KAAO+B,EACnB/B,EAAY,OAAS+E,EAAK,aAAa,iBAAiB,EACjD/E,CACT,CACF,CACF,EACA,SAASd,EAAW,CAClBA,EAAU,qBAAuB,SAAUI,EAAM,CAC/C,GAAI,CACF,SAAAuC,EACA,WAAAG,EACA,KAAAF,EACA,KAAAC,EACA,OAAQsN,EACR,UAAApN,CACF,EAAI3C,EACE,CACJ,MAAOgQ,EACP,KAAMC,CACR,EAAIzN,EACE,CACJ,MAAO0N,EACP,KAAMC,CACR,EAAI1N,EACE2N,EAAQC,IAAgB,CAC5B,UAAA1N,EACA,eAAgBuN,EAChB,UAAWF,CACb,CAAC,EACKM,EAAW,CACf,IAAK,OACL,WAAYrS,GAAeA,GAAe,CAAC,EAAGuR,EAAS,EAAG,CAAC,EAAG,CAC5D,KAAM,OACR,CAAC,CACH,EACMe,EAA8BN,EAAS,SAAW,CACtD,SAAUA,EAAS,SAAS,IAAIR,EAAS,CAC3C,EAAI,CAAC,EACCe,EAAiB,CACrB,IAAK,IACL,WAAYvS,GAAe,CAAC,EAAGmS,EAAM,KAAK,EAC1C,SAAU,CAACX,GAAUxR,GAAe,CAClC,IAAKgS,EAAS,IACd,WAAYhS,GAAeA,GAAe,CAAC,EAAGgS,EAAS,UAAU,EAAGG,EAAM,IAAI,CAChF,EAAGG,CAA2B,CAAC,CAAC,CAClC,EACME,EAAiB,CACrB,IAAK,IACL,WAAYxS,GAAe,CAAC,EAAGmS,EAAM,KAAK,EAC1C,SAAU,CAACI,CAAc,CAC3B,EACMlN,EAAS,QAAQ,OAAOyM,GAAkB/L,GAAa,CAAC,EACxD0M,EAAS,QAAQ,OAAOX,GAAkB/L,GAAa,CAAC,EACxD2M,EAAU,CACd,IAAK,OACL,WAAY1S,GAAeA,GAAe,CAAC,EAAGuR,EAAS,EAAG,CAAC,EAAG,CAC5D,GAAIlM,EACJ,UAAW,iBACX,iBAAkB,gBACpB,CAAC,EACD,SAAU,CAACgN,EAAUG,CAAc,CACrC,EACMG,EAAO,CACX,IAAK,OACL,SAAU,CAAC,CACT,IAAK,WACL,WAAY,CACV,GAAIF,CACN,EACA,SAAUf,IAAQQ,CAAQ,CAC5B,EAAGQ,CAAO,CACZ,EACA,OAAApO,EAAS,KAAKqO,EAAM,CAClB,IAAK,OACL,WAAY3S,GAAe,CACzB,KAAM,eACN,YAAa,QAAQ,OAAOyS,EAAQ,GAAG,EACvC,KAAM,QAAQ,OAAOpN,EAAQ,GAAG,CAClC,EAAGkM,EAAS,CACd,CAAC,EACM,CACL,SAAAjN,EACA,WAAAG,CACF,CACF,CACF,CACF,EAEImO,IAAuB,CACzB,SAASjR,EAAW,CAClB,IAAIkR,EAAe,GACfvJ,GAAO,aACTuJ,EAAevJ,GAAO,WAAW,kCAAkC,EAAE,SAEvE3H,EAAU,oBAAsB,UAAY,CAC1C,IAAMmR,EAAY,CAAC,EACbC,EAAO,CACX,KAAM,cACR,EACMC,EAAiB,CACrB,cAAe,MACf,YAAa,aACb,IAAK,IACP,EAGAF,EAAU,KAAK,CACb,IAAK,OACL,WAAY9S,GAAeA,GAAe,CAAC,EAAG+S,CAAI,EAAG,CAAC,EAAG,CACvD,EAAG,k4CACL,CAAC,CACH,CAAC,EACD,IAAME,EAAkBjT,GAAeA,GAAe,CAAC,EAAGgT,CAAc,EAAG,CAAC,EAAG,CAC7E,cAAe,SACjB,CAAC,EACKE,EAAM,CACV,IAAK,SACL,WAAYlT,GAAeA,GAAe,CAAC,EAAG+S,CAAI,EAAG,CAAC,EAAG,CACvD,GAAI,MACJ,GAAI,MACJ,EAAG,IACL,CAAC,EACD,SAAU,CAAC,CACb,EACA,OAAKF,GACHK,EAAI,SAAS,KAAK,CAChB,IAAK,UACL,WAAYlT,GAAeA,GAAe,CAAC,EAAGgT,CAAc,EAAG,CAAC,EAAG,CACjE,cAAe,IACf,OAAQ,oBACV,CAAC,CACH,EAAG,CACD,IAAK,UACL,WAAYhT,GAAeA,GAAe,CAAC,EAAGiT,CAAe,EAAG,CAAC,EAAG,CAClE,OAAQ,cACV,CAAC,CACH,CAAC,EAEHH,EAAU,KAAKI,CAAG,EAClBJ,EAAU,KAAK,CACb,IAAK,OACL,WAAY9S,GAAeA,GAAe,CAAC,EAAG+S,CAAI,EAAG,CAAC,EAAG,CACvD,QAAS,IACT,EAAG,sSACL,CAAC,EACD,SAAUF,EAAe,CAAC,EAAI,CAAC,CAC7B,IAAK,UACL,WAAY7S,GAAeA,GAAe,CAAC,EAAGiT,CAAe,EAAG,CAAC,EAAG,CAClE,OAAQ,cACV,CAAC,CACH,CAAC,CACH,CAAC,EACIJ,GAEHC,EAAU,KAAK,CACb,IAAK,OACL,WAAY9S,GAAeA,GAAe,CAAC,EAAG+S,CAAI,EAAG,CAAC,EAAG,CACvD,QAAS,IACT,EAAG,6IACL,CAAC,EACD,SAAU,CAAC,CACT,IAAK,UACL,WAAY/S,GAAeA,GAAe,CAAC,EAAGiT,CAAe,EAAG,CAAC,EAAG,CAClE,OAAQ,cACV,CAAC,CACH,CAAC,CACH,CAAC,EAEI,CACL,IAAK,IACL,WAAY,CACV,MAAS,SACX,EACA,SAAUH,CACZ,CACF,CACF,CACF,EAEIK,IAAa,CACf,OAAQ,CACN,MAAO,CACL,oBAAoB1Q,EAAa+E,EAAM,CACrC,IAAM4L,EAAa5L,EAAK,aAAa,gBAAgB,EAC/CvC,EAASmO,IAAe,KAAO,GAAQA,IAAe,GAAK,GAAOA,EACxE,OAAA3Q,EAAY,OAAYwC,EACjBxC,CACT,CACF,CACF,CACF,EAEI4Q,IAAU,CAACC,IAAWlG,IAAiBI,IAAQE,IAAeC,IAAY4C,IAAgBE,IAAoBK,IAAiBa,IAAOiB,IAAsBO,GAAU,EAE1KtR,IAAgBwR,IAAS,CACvB,UAAWxP,EACb,CAAC,EACD,IAAM0P,IAAW1P,GAAI,OACf2P,IAAW3P,GAAI,OACf4P,GAAY5P,GAAI,QAChB6P,GAAQ7P,GAAI,IACZ8P,IAAU9P,GAAI,MACd+P,IAAuB/P,GAAI,mBAC3BgQ,IAAWhQ,GAAI,OACfrH,IAAOqH,GAAI,KACXiQ,IAAQjQ,GAAI,MACZkQ,IAAOlQ,GAAI,KACXmQ,IAAUnQ,GAAI,QCj8FpB,IAAMoQ,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,uLAAuL,CACpN,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,6NAA6N,CAC1P,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,0WAA0W,CACvY,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,qYAAqY,CACla,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,6QAA6Q,CAC1S,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,oXAAoX,CACjZ,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,8PAA8P,CAC3R,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,2KAA2K,CACxM,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,udAAud,CACpf,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,KAAM,mPAAmP,CAChR,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wkBAAwkB,CACvmB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qmCAAqmC,CACpoC,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,sBAAsB,EAAG,OAAQ,iMAAiM,CACtP,EACMC,IAAuBD,GACvBE,IAAO,CACX,OAAQ,MACR,SAAU,KACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,KAAM,6bAA6b,CAC/d,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,WAAW,EAAG,OAAQ,wgBAAwgB,CACzjB,EACMC,IAAaD,GACbE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ikBAAikB,CAChmB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,gaAAga,CAC3c,EACMC,IAAcD,GACdE,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+jBAA+jB,CACpmB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,iLAAiL,CAC7N,EACMC,IAAeD,GACfE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kOAAkO,CACjQ,EACMC,GAA+B,CACnC,OAAQ,MACR,SAAU,mCACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,4aAA4a,CACzd,EACMC,IAAgBD,GAChBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mrBAAmrB,CACltB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,MAAO,WAAY,WAAW,EAAG,OAAQ,yZAAyZ,CACte,EACMC,IAAYD,GACZE,IAAaF,GACbG,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oSAAoS,CACnU,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+iBAA+iB,CAC9kB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s0BAAs0B,CACr2B,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,kPAAkP,CACrR,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,y3BAAy3B,CACt6B,EACMC,IAAgBD,GAChBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2sBAA2sB,CAC1uB,EACMC,IAA6B,CACjC,OAAQ,MACR,SAAU,8BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mmCAAmmC,CACloC,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAiB,EAAG,OAAQ,gxBAAgxB,CACx0B,EACMC,IAAmBD,GACnBE,IAAmB,CACvB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4gBAA4gB,CAC3iB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,+JAA+J,CACzM,EACMC,IAAaD,GACbE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,iJAAiJ,CAC9L,EACMC,IAAgBD,GAChBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yWAAyW,CACxY,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,mcAAmc,CAChf,EACMC,IAAeD,GACfE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,ymCAAymC,CAC5oC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6dAA6d,CAClgB,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,yBAAyB,EAAG,OAAQ,43BAA43B,CACp7B,EACMC,IAAyBD,GACzBE,GAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,sBAAsB,EAAG,OAAQ,gsBAAgsB,CACrvB,EACMC,IAAuBD,GACvBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,klBAAklB,CACjnB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wiBAAwiB,CACvkB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s1CAAs1C,CACr3C,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mrBAAmrB,CACltB,EACMC,GAA4B,CAChC,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,iWAAiW,CACjZ,EACMC,IAAmBD,GACnBE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,gOAAgO,CAC7Q,EACMC,IAAgBD,GAChBE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,yoCAAyoC,CAC5rC,EACMC,IAAcD,GACdE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,u6BAAu6B,CAC58B,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,eAAe,EAAG,OAAQ,owBAAowB,CAC1zB,EACMC,IAAiBD,GACjBE,IAA4B,CAChC,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u4BAAu4B,CACt6B,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sWAAsW,CACrY,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,iVAAiV,CACnY,EACMC,IAAoBD,GACpBE,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mzBAAmzB,CACl1B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0gCAA0gC,CACziC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w8BAAw8B,CACv+B,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,uiBAAuiB,CAC5kB,EACMC,IAASD,GACTE,IAAuB,CAC3B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6ZAA6Z,CAC5b,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,2NAA2N,CACzQ,EACMC,IAAgBD,GAChBE,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0dAA0d,CAC/f,EACMC,IAASD,GACTE,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,kWAAkW,CAC/Y,EACMC,IAASD,GACTE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,sOAAsO,CAC3Q,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0gCAA0gC,CACziC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yxDAAyxD,CACxzD,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gxBAAgxB,CAC/yB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oLAAoL,CACnN,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,6yBAA6yB,CACh2B,EACMC,IAAcD,GACdE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ooBAAooB,CACnqB,EACMC,GAA2B,CAC/B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,s6EAAs6E,CACr9E,EACMC,IAAmBD,GACnBE,IAA0B,CAC9B,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mkBAAmkB,CAClmB,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,eAAe,EAAG,OAAQ,wMAAwM,CACrQ,EACMC,IAAiBD,GACjBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4zBAA4zB,CAC31B,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,slBAAslB,CAChoB,EACMC,IAAaD,GACbE,IAA0B,CAC9B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yYAAyY,CACxa,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,iBAAiB,EAAG,OAAQ,4PAA4P,CAClT,EACMC,IAAmBD,GACnBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+ZAA+Z,CACpc,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,sgBAAsgB,CAC1jB,EACMC,IAAgBD,GAChBE,IAAkB,CACtB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g4BAAg4B,CAC/5B,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,wPAAwP,CACxR,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mbAAmb,CACld,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,MAAO,YAAY,EAAG,OAAQ,6mBAA6mB,CACrqB,EACMC,IAAcD,GACdE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,iUAAiU,CACpW,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8JAA8J,CAC7L,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,kuBAAkuB,CAC9wB,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,iZAAiZ,CAChc,EACMC,IAAkBD,GAClBE,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,soBAAsoB,CACrqB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,geAAge,CAC/f,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,+dAA+d,CAC7gB,EACMC,IAAiBD,GACjBE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yUAAyU,CACxW,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,67BAA67B,CAC59B,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iXAAiX,CAChZ,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gcAAgc,CAC/d,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,mrBAAmrB,CACxtB,EACMC,IAA0B,CAC9B,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kmBAAkmB,CACjoB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,64BAA64B,CACn7B,EACMC,IAAUD,GACVE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAa,sBAAsB,EAAG,OAAQ,iiBAAiiB,CACnmB,EACMC,IAAcD,GACdE,IAAuBF,GACvBG,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0PAA0P,CACzR,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,6RAA6R,CACrU,EACMC,IAAYD,GACZE,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u+BAAu+B,CACtgC,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAqB,uBAAuB,EAAG,OAAQ,4qBAA4qB,CACvvB,EACMC,IAAoBD,GACpBE,IAAuBF,GACvBG,GAAyB,CAC7B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,oBAAoB,EAAG,OAAQ,42BAA42B,CACv6B,EACMC,IAAqBD,GACrBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,keAAke,CACjgB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4xDAA4xD,CAC3zD,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,oUAAoU,CACpW,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,o2BAAo2B,CACz5B,EACMC,IAAgBD,GAChBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,qjBAAqjB,CAC1lB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6SAA6S,CAC5U,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,+LAA+L,CAC1O,EACMC,IAAcD,GACdE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uqBAAuqB,CACtsB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,+PAA+P,CAClS,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,onBAAonB,CACnpB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,6TAA6T,CAC7W,EACMC,IAAYD,GACZE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,upBAAupB,CACtrB,EACMC,IAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mrBAAmrB,CACltB,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,4fAA4f,CACliB,EACMC,IAAUD,GACVE,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wfAAwf,CACvhB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ojBAAojB,CACnlB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4bAA4b,CAC3d,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,k7BAAk7B,CACv9B,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,gBAAgB,EAAG,OAAQ,iRAAiR,CACxU,EACMC,IAAkBD,GAClBE,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,yqBAAyqB,CACttB,EACMC,IAAgBD,GAChBE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,0BAA0B,EAAG,OAAQ,02BAA02B,CACn6B,EACMC,IAA0BD,GAC1BE,IAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g+JAAg+J,CAC//J,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,0RAA0R,CAC7U,EACMC,IAAqBD,GACrBE,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAM,KAAM,KAAK,EAAG,OAAQ,4fAA4f,CACljB,EACMC,IAAQD,GACRE,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mnCAAmnC,CAClpC,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wkBAAwkB,CACvmB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uPAAuP,CACtR,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8OAA8O,CAC7Q,EACMC,IAA8B,CAClC,OAAQ,MACR,SAAU,+BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0XAA0X,CACzZ,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,inBAAinB,CACpqB,EACMC,IAAsBD,GACtBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wuBAAwuB,CACvwB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ksCAAksC,CACjuC,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,YAAY,EAAG,OAAQ,yWAAyW,CAC3Z,EACMC,IAAcD,GACdE,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,4nBAA4nB,CAC/pB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,grBAAgrB,CAC/sB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,iNAAiN,CACrQ,EACMC,IAAgBD,GAChBE,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ylBAAylB,CAC9nB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,mQAAmQ,CACxS,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,6RAA6R,CAC/U,EACMC,IAAoBD,GACpBE,IAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ymBAAymB,CACxoB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6fAA6f,CAC5hB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oZAAoZ,CACnb,EACMC,IAAuB,CAC3B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kVAAkV,CACjX,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,2SAA2S,CACnV,EACMC,IAAYD,GACZE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,47BAA47B,CAC39B,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,aAAa,EAAG,OAAQ,kcAAkc,CACpf,EACMC,IAAeD,GACfE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,6aAA6a,CACle,EACMC,IAAgBD,GAChBE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,0BAA0B,EAAG,OAAQ,wWAAwW,CACva,EACMC,IAA0BD,GAC1BE,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,k8DAAk8D,CACp/D,EACMC,IAAaD,GACbE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,09BAA09B,CAC//B,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sWAAsW,CACrY,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ksBAAksB,CACjuB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,qbAAqb,CAC1d,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4JAA4J,CAC3L,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,gMAAgM,CACnP,EACMC,IAAsBD,GACtBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ugCAAugC,CACtiC,EACMC,GAA0B,CAC9B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,6ZAA6Z,CACtc,EACMC,IAAYD,GACZE,GAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,gMAAgM,CACpP,EACMC,IAAsBD,GACtBE,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,gXAAgX,CAC3Z,EACMC,IAAcD,GACdE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8wBAA8wB,CAC7yB,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,4aAA4a,CAC3d,EACMC,IAAkBD,GAClBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0kBAA0kB,CACzmB,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,s0CAAs0C,CAC72C,EACMC,IAAWD,GACXE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2yBAA2yB,CAC10B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mVAAmV,CAClX,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,40BAA40B,CAC32B,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,2TAA2T,CACvW,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ogEAAogE,CACziE,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ghBAAghB,CACrjB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,mZAAmZ,CACvc,EACMC,IAAeD,GACfE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4lBAA4lB,CAC3nB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,kwCAAkwC,CACvyC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yeAAye,CACxgB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,kjCAAkjC,CAC5lC,EACMC,IAAaD,GACbE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0ZAA0Z,CAC7b,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6oCAA6oC,CAC5qC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,KAAK,EAAG,KAAM,+XAA+X,CACxa,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAM,MAAO,cAAc,EAAG,OAAQ,oQAAoQ,CACpU,EACMC,IAAgBD,GAChBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iVAAiV,CAChX,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,8bAA8b,CACre,EACMC,IAAWD,GACXE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ocAAoc,CACze,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,4mBAA4mB,CACzpB,EACMC,IAAgBD,GAChBE,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,oYAAoY,CACrb,EACMC,IAAmBD,GACnBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ojBAAojB,CACnlB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qXAAqX,CACpZ,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,8FAA8F,CACjJ,EACMC,IAAcD,GACdE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,8mBAA8mB,CACppB,EACMC,IAAUD,GACVE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,kRAAkR,CACvT,EACMC,IAA4B,CAChC,OAAQ,MACR,SAAU,6BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8qBAA8qB,CAC7sB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,qSAAqS,CACxU,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6XAA6X,CAC5Z,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,cAAe,aAAa,EAAG,OAAQ,qtBAAqtB,CACtxB,EACMC,IAAeD,GACfE,IAAeF,GACfG,GAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,0VAA0V,CAC9Y,EACMC,IAAeD,GACfE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0OAA0O,CAC/Q,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,khBAAkhB,CACrjB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,2hCAA2hC,CACnkC,EACMC,IAAWD,GACXE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,uiBAAuiB,CACllB,EACMC,IAAcD,GACdE,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0/CAA0/C,CACzhD,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,weAAwe,CAC7gB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+mBAA+mB,CAC9oB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,yiCAAyiC,CAC9kC,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,wgBAAwgB,CAC7iB,EACMC,IAASD,GACTE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8gBAA8gB,CACnjB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,8VAA8V,CACxY,EACMC,IAAaD,GACbE,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,seAAse,CACrgB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,mgBAAmgB,CAC/iB,EACMC,IAAeD,GACfE,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,weAAwe,CAC7gB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2dAA2d,CAC1f,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,uTAAuT,CACpW,EACMC,IAAgBD,GAChBE,GAAgB,CACpB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAmB,qBAAqB,EAAG,OAAQ,gsBAAgsB,CACvwB,EACMC,IAAkBD,GAClBE,IAAqBF,GACrBG,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sVAAsV,CACrX,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kwBAAkwB,CACjyB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2mBAA2mB,CAC1oB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mwBAAmwB,CAClyB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kjBAAkjB,CACjlB,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAM,YAAY,EAAG,OAAQ,4bAA4b,CACrf,EACMC,IAAcD,GACdE,IAAO,CACX,OAAQ,MACR,SAAU,KACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,krEAAkrE,CACvtE,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yWAAyW,CACxY,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,snBAAsnB,CACrpB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,sUAAsU,CAC3W,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0KAA0K,CACzM,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6nBAA6nB,CAClqB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6YAA6Y,CAChb,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,2oCAA2oC,CACxrC,EACMC,IAASD,GACTE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mrBAAmrB,CACltB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,8mBAA8mB,CAClqB,EACMC,IAAeD,GACfE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,mdAAmd,CACtf,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,saAAsa,CAChd,EACMC,IAAaD,GACbE,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAY,iBAAiB,EAAG,OAAQ,kvBAAkvB,CACtzB,EACMC,IAASD,GACTE,IAAaF,GACbG,IAAkBH,GAClBI,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,moBAAmoB,CAClqB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,uUAAuU,CAC1W,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,yaAAya,CACpd,EACMC,IAAcD,GACdE,IAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+jBAA+jB,CAC9lB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8kBAA8kB,CAC7mB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4ZAA4Z,CAC3b,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4RAA4R,CAC3T,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,2MAA2M,CAC3O,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,SAAS,EAAG,OAAQ,msBAAmsB,CACjvB,EACMC,IAAYD,GACZE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0dAA0d,CACzf,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,4WAA4W,CAC7Z,EACMC,IAAYD,GACZE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,wgBAAwgB,CAC7iB,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,oMAAoM,CACpO,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yaAAya,CACxc,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,61BAA61B,CACl4B,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAiB,YAAa,mBAAmB,EAAG,OAAQ,0pBAA0pB,CAC1uB,EACMC,IAAiBD,GACjBE,IAAaF,GACbG,IAAqBH,GACrBI,IAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w0BAAw0B,CACv2B,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,goBAAgoB,CAClrB,EACMC,IAAcD,GACdE,IAA8B,CAClC,OAAQ,MACR,SAAU,+BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ysCAAysC,CACxuC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,IAAI,EAAG,OAAQ,skCAAskC,CAC/mC,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mXAAmX,CAClZ,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uaAAua,CACtc,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gzBAAgzB,CACr1B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gaAAga,CAC/b,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mnCAAmnC,CAClpC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,2KAA2K,CAC9M,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8wBAA8wB,CACnzB,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,oYAAoY,CACpa,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,iUAAiU,CACjW,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yhBAAyhB,CACxjB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,gBAAiB,gBAAiB,kBAAkB,EAAG,OAAQ,+kBAA+kB,CAC1qB,EACMC,IAAiBD,GACjBE,IAAiBF,GACjBG,IAAoBH,GACpBI,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sbAAsb,CACrd,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4dAA4d,CAC3f,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,myBAAmyB,CAC50B,EACMC,IAAYD,GACZE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,kTAAkT,CACrW,EACMC,IAAcD,GACdE,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,2qBAA2qB,CAC9sB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iUAAiU,CAChW,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,6KAA6K,CACzN,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2YAA2Y,CAC1a,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,inBAAinB,CACtpB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6pBAA6pB,CAC5rB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0OAA0O,CACzQ,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6pBAA6pB,CAClsB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yqBAAyqB,CACxsB,EACMC,IAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yZAAyZ,CACxb,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,MAAO,cAAc,EAAG,OAAQ,iLAAiL,CACrP,EACMC,IAAgBD,GAChBE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,gaAAga,CACjd,EACMC,IAAmBD,GACnBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4eAA4e,CAC3gB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6VAA6V,CAC5X,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,mfAAmf,CACthB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8RAA8R,CACnU,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAa,YAAa,wBAAwB,EAAG,OAAQ,8WAA8W,CAC/b,EACMC,IAAcD,GACdE,IAAaF,GACbG,IAAyBH,GACzBI,GAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,g4BAAg4B,CACp7B,EACMC,IAAsBD,GACtBE,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,4NAA4N,CAC5P,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,kbAAkb,CAC1d,EACMC,IAAWD,GACXE,IAA4B,CAChC,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ijBAAijB,CAChlB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,yLAAyL,CACrO,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g6BAAg6B,CAC/7B,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+fAA+f,CAC9hB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,ybAAyb,CAC7e,EACMC,IAAeD,GACfE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6/BAA6/B,CAC5hC,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,yRAAyR,CAC3U,EACMC,IAAoBD,GACpBE,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wcAAwc,CACve,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,oTAAoT,CACzV,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,2cAA2c,CACxf,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,o/BAAo/B,CACzhC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6vBAA6vB,CAClyB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6aAA6a,CAC5c,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0mBAA0mB,CACzoB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oLAAoL,CACnN,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAE,EAAG,KAAM,kPAAkP,CACjR,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4JAA4J,CAC3L,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gkCAAgkC,CAC/lC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wcAAwc,CACve,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mdAAmd,CAClf,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,4XAA4X,CACva,EACMC,IAAcD,GACdE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mYAAmY,CACla,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wfAAwf,CACvhB,EACMC,GAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,QAAQ,EAAG,OAAQ,4PAA4P,CAC3S,EACMC,IAAWD,GACXE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,y0BAAy0B,CACx2B,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,woCAAwoC,CACtrC,EACMC,IAAiBD,GACjBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,KAAK,EAAG,OAAQ,gVAAgV,CAC3X,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,2dAA2d,CAChgB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,mPAAmP,CAC/R,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,iNAAiN,CACtP,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,yuBAAyuB,CAC5wB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,gQAAgQ,CAC9S,EACMC,IAAiBD,GACjBE,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,olBAAolB,CACtoB,EACMC,IAAoBD,GACpBE,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iuBAAiuB,CAChwB,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,wBAAwB,EAAG,OAAQ,iVAAiV,CACxY,EACMC,IAAyBD,GACzBE,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,QAAQ,EAAG,OAAQ,gwBAAgwB,CAC/yB,EACMC,IAAWD,GACXE,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,6qBAA6qB,CAC7tB,EACMC,IAAYD,GACZE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qjBAAqjB,CACplB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mLAAmL,CAClN,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6zCAA6zC,CACl2C,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g1BAAg1B,CAC/2B,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+pCAA+pC,CAC9rC,EACMC,IAA2B,CAC/B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,khBAAkhB,CACjjB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oxBAAoxB,CACnzB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,orBAAorB,CACntB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kIAAkI,CACjK,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,6LAA6L,CAC3O,EACMC,IAAUD,GACVE,GAAwB,CAC5B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,0ZAA0Z,CAClc,EACMC,IAAWD,GACXE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,ggBAAggB,CAChjB,EACMC,IAAkBD,GAClBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8YAA8Y,CAC7a,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2mCAA2mC,CAC1oC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0kBAA0kB,CACzmB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,mcAAmc,CAC/e,EACMC,IAAeD,GACfE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ysBAAysB,CACxuB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g+CAAg+C,CAC//C,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,unBAAunB,CACtpB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,mcAAmc,CAC/e,EACMC,IAAcD,GACdE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,mTAAmT,CACtV,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8zBAA8zB,CAC71B,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,gfAAgf,CACjiB,EACMC,IAAmBD,GACnBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,4rBAA4rB,CACtuB,EACMC,IAAcD,GACdE,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,m8BAAm8B,CACh/B,EACMC,IAAgBD,GAChBE,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4qBAA4qB,CAC3sB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w0BAAw0B,CACv2B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,2aAA2a,CAChd,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iTAAiT,CAChV,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m2BAAm2B,CACl4B,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gjBAAgjB,CAC/kB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,uXAAuX,CAC9Z,EACMC,IAAWD,GACXE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,ufAAuf,CAC5iB,EACMC,IAAgBD,GAChBE,GAAc,CAClB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,osBAAosB,CAClvB,EACMC,IAAgBD,GAChBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,giBAAgiB,CACnkB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,sgBAAsgB,CACnjB,EACMC,IAAgBD,GAChBE,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sqBAAsqB,CACrsB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,wPAAwP,CACxS,EACMC,IAAkBD,GAClBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yIAAyI,CACxK,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,wrBAAwrB,CACxuB,EACMC,IAAYD,GACZE,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,sIAAsI,CACtK,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ugBAAugB,CAC5iB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,moBAAmoB,CAC9qB,EACMC,IAAeD,GACfE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,6hBAA6hB,CAC3kB,EACMC,IAAiBD,GACjBE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,yQAAyQ,CAC/S,EACMC,IAAUD,GACVE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,KAAK,EAAG,OAAQ,4WAA4W,CACha,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8jBAA8jB,CAC7lB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ygBAAygB,CACxiB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,y8CAAy8C,CAC9+C,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,gBAAgB,EAAG,OAAQ,6gBAA6gB,CACpkB,EACMC,IAAkBD,GAClBE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0lBAA0lB,CAC/nB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,qRAAqR,CAC1T,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4tBAA4tB,CAC3vB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wiBAAwiB,CACvkB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0uBAA0uB,CACzwB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kuBAAkuB,CACjwB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uRAAuR,CACtT,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,eAAe,EAAG,OAAQ,0bAA0b,CAC9e,EACMC,IAAgBD,GAChBE,GAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,inBAAinB,CACtqB,EACMC,IAAgBD,GAChBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gTAAgT,CACrV,EACMC,IAA2B,CAC/B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ofAAof,CACnhB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,wVAAwV,CACpY,EACMC,IAAeD,GACfE,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAU,aAAa,EAAG,OAAQ,qcAAqc,CAC3f,EACMC,IAAUD,GACVE,IAAeF,GACfG,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,2lBAA2lB,CAC3oB,EACMC,IAAYD,GACZE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mYAAmY,CACla,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,seAAse,CAChhB,EACMC,IAAaD,GACbE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gzBAAgzB,CAC/0B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,skCAAskC,CACrmC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uXAAuX,CACtZ,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0uBAA0uB,CACzwB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ugCAAugC,CACtiC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uTAAuT,CACtV,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0XAA0X,CACzZ,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,obAAob,CACje,EACMC,IAAgBD,GAChBE,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,ykBAAykB,CACxnB,EACMC,IAAiBD,GACjBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,y5CAAy5C,CACx7C,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+YAA+Y,CACpb,EACMC,IAASD,GACTE,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,gmBAAgmB,CACnoB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,6eAA6e,CACzhB,EACMC,IAAeD,GACfE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,smBAAsmB,CAC3oB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,4MAA4M,CAC/O,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,wmBAAwmB,CAC3oB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i+CAAi+C,CAChgD,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yZAAyZ,CACxb,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4iCAA4iC,CAC3kC,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,idAAid,CAChf,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,eAAe,EAAG,OAAQ,8ZAA8Z,CACld,EACMC,IAAgBD,GAChBE,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,+aAA+a,CACzd,EACMC,IAAaD,GACbE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,0RAA0R,CAC1U,EACMC,IAAkBD,GAClBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wvCAAwvC,CACvxC,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,kbAAkb,CAC5d,EACMC,IAAaD,GACbE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,gxCAAgxC,CAC3zC,EACMC,IAAcD,GACdE,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yRAAyR,CACxT,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8ZAA8Z,CACnc,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,0sBAA0sB,CACrvB,EACMC,IAAcD,GACdE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4bAA4b,CAC3d,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yaAAya,CACxc,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mZAAmZ,CAClb,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,qTAAqT,CACxW,EACMC,IAAeD,GACfE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,4dAA4d,CAC/f,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qnBAAqnB,CACppB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uUAAuU,CACtW,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oZAAoZ,CACnb,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uYAAuY,CACta,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,i9BAAi9B,CACt/B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+JAA+J,CAC9L,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,yVAAyV,CAC9X,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sNAAsN,CACrP,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,itDAAitD,CAChvD,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+kBAA+kB,CAC9mB,EACMC,IAA2B,CAC/B,OAAQ,MACR,SAAU,6BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,snCAAsnC,CACrpC,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,mBAAmB,EAAG,OAAQ,4QAA4Q,CACtU,EACMC,IAAoBD,GACpBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2uBAA2uB,CAC1wB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAe,kBAAmB,UAAU,EAAG,OAAQ,6WAA6W,CACxb,EACMC,IAAeD,GACfE,IAAmBF,GACnBG,IAAYH,GACZI,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,qLAAqL,CAC7N,EACMC,IAAYD,GACZE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ofAAof,CACzhB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,snBAAsnB,CACrpB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,81BAA81B,CAC73B,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,2cAA2c,CAChf,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,+dAA+d,CACzgB,EACMC,IAAaD,GACbE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ywBAAywB,CAC9yB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,o9BAAo9B,CACxgC,EACMC,IAAsBD,GACtBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iTAAiT,CAChV,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oxBAAoxB,CACnzB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,oBAAoB,EAAG,OAAQ,kVAAkV,CAC1Y,EACMC,IAAqBD,GACrBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k5BAAk5B,CACj7B,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,oOAAoO,CACvR,EACMC,IAAeD,GACfE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mhBAAmhB,CACljB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0bAA0b,CACzd,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,MAAO,MAAM,EAAG,OAAQ,ufAAuf,CACziB,EACMC,IAAQD,GACRE,IAASF,GACTG,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ycAAyc,CAC9e,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,mMAAmM,CACvP,EACMC,IAAgBD,GAChBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,0KAA0K,CAC7N,EACMC,IAAeD,GACfE,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,uwBAAuwB,CACxzB,EACMC,IAAoBD,GACpBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wiCAAwiC,CACvkC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0YAA0Y,CACza,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6jBAA6jB,CAC5lB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,8MAA8M,CACjP,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wVAAwV,CACvX,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yYAAyY,CACxa,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,ikCAAikC,CACpnC,EACMC,IAAcD,GACdE,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mhBAAmhB,CACljB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qkBAAqkB,CACpmB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,oMAAoM,CACtP,EACMC,IAAoBD,GACpBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2kBAA2kB,CAC1mB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,qtBAAqtB,CAC1vB,EACMC,IAAsC,CAC1C,OAAQ,MACR,SAAU,yCACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qwCAAqwC,CACpyC,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,MAAO,YAAY,EAAG,OAAQ,2dAA2d,CAClhB,EACMC,IAAQD,GACRE,IAAcF,GACdG,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kyCAAkyC,CACj0C,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mZAAmZ,CAClb,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8ZAA8Z,CAC7b,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,6NAA6N,CAC7Q,EACMC,IAAkBD,GAClBE,IAAwB,CAC5B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ygBAAygB,CACxiB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iuBAAiuB,CAChwB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,0gBAA0gB,CACzjB,EACMC,IAAiBD,GACjBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,kTAAkT,CACvV,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,gwBAAgwB,CACxyB,EACMC,IAAYD,GACZE,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,gnCAAgnC,CAC9pC,EACMC,IAAiBD,GACjBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,oYAAoY,CACza,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,mPAAmP,CACrS,EACMC,IAAoBD,GACpBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,yXAAyX,CAC7a,EACMC,IAAqBD,GACrBE,GAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,sBAAsB,EAAG,OAAQ,iTAAiT,CACtW,EACMC,IAAuBD,GACvBE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sdAAsd,CACrf,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,yVAAyV,CAC9X,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0eAA0e,CACzgB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sdAAsd,CACrf,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,uOAAuO,CAC1Q,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0nBAA0nB,CACzpB,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAiB,gBAAiB,mBAAmB,EAAG,OAAQ,+eAA+e,CACnkB,EACMC,IAAiBD,GACjBE,IAAiBF,GACjBG,IAAqBH,GACrBI,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,umBAAumB,CAC5oB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,OAAQ,2TAA2T,CAC7V,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,eAAgB,OAAO,EAAG,OAAQ,ugBAAugB,CACpkB,EACMC,IAAgBD,GAChBE,IAAUF,GACVG,GAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,qxBAAqxB,CACz0B,EACMC,IAAsBD,GACtBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mlBAAmlB,CAClnB,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,8YAA8Y,CACzb,EACMC,IAAeD,GACfE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yhBAAyhB,CACxjB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,+eAA+e,CAC5hB,EACMC,IAAgBD,GAChBE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,8tBAA8tB,CAC5wB,EACMC,IAAUD,GACVE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0dAA0d,CACzf,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+nBAA+nB,CAC9pB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yjBAAyjB,CACxlB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,MAAO,oBAAqB,wBAAwB,EAAG,OAAQ,8PAA8P,CACxV,EACMC,IAAoBD,GACpBE,IAAwBF,GACxBG,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,eAAgB,kBAAkB,EAAG,OAAQ,scAAsc,CAC9gB,EACMC,IAAgBD,GAChBE,IAAmBF,GACnBG,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6aAA6a,CACld,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wiBAAwiB,CACvkB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,43BAA43B,CAC35B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8lCAA8lC,CAC7nC,EACMC,IAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kvCAAkvC,CACjxC,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,QAAQ,EAAG,OAAQ,8PAA8P,CAC7S,EACMC,IAAWD,GACXE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,cAAc,EAAG,OAAQ,2UAA2U,CAC9X,EACMC,IAAeD,GACfE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ypBAAypB,CACxrB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,wPAAwP,CAC1S,EACMC,IAAoBD,GACpBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i6DAAi6D,CACh8D,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,geAAge,CAC/f,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,muBAAmuB,CAClwB,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAmB,kBAAkB,EAAG,OAAQ,olBAAolB,CACxpB,EACMC,IAAkBD,GAClBE,IAAmBF,GACnBG,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,okBAAokB,CACznB,EACMC,IAAiBD,GACjBE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,qfAAqf,CACniB,EACMC,IAAiBD,GACjBE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,wcAAwc,CAC3f,EACMC,IAAcD,GACdE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4dAA4d,CAC3f,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8UAA8U,CAC7W,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,6UAA6U,CACtX,EACMC,IAAYD,GACZE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,moBAAmoB,CAClqB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,iBAAkB,oBAAoB,EAAG,OAAQ,ucAAuc,CACnhB,EACMC,IAAkBD,GAClBE,IAAqBF,GACrBG,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8vBAA8vB,CAC7xB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,mQAAmQ,CAC9S,EACMC,IAAeD,GACfE,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,yTAAyT,CACxW,EACMC,IAAiBD,GACjBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,ySAAyS,CAC7U,EACMC,GAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,mrBAAmrB,CACvuB,EACMC,IAAsBD,GACtBE,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2QAA2Q,CAC1S,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2aAA2a,CAC1c,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAW,MAAM,EAAG,OAAQ,8wBAA8wB,CACt0B,EACMC,IAAYD,GACZE,IAASF,GACTG,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,sjBAAsjB,CAC3lB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yiBAAyiB,CACxkB,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4RAA4R,CAC3T,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,iRAAiR,CAC5T,EACMC,IAAcD,GACdE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,o4BAAo4B,CAC16B,EACMC,IAAUD,GACVE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qwBAAqwB,CACpyB,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uiBAAuiB,CACtkB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,unBAAunB,CACtpB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k1BAAk1B,CACj3B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0PAA0P,CACzR,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2iBAA2iB,CAC1kB,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,4aAA4a,CACzd,EACMC,IAAgBD,GAChBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,+qBAA+qB,CAC5tB,EACMC,IAAgBD,GAChBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAM,KAAM,KAAK,EAAG,OAAQ,2GAA2G,CACjK,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,0QAA0Q,CACxT,EACMC,IAAiBD,GACjBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qbAAqb,CACpd,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gbAAgb,CAC/c,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uNAAuN,CACtP,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,shBAAshB,CACrjB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,qeAAqe,CACxgB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2+CAA2+C,CAC1gD,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+/CAA+/C,CAC9hD,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,yNAAyN,CACzP,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,QAAQ,EAAG,OAAQ,myBAAmyB,CACh1B,EACMC,IAAWD,GACXE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6nBAA6nB,CAC5pB,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAE,EAAG,KAAM,8OAA8O,CAC7Q,EACMC,GAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,+yBAA+yB,CACh2B,EACMC,IAAoBD,GACpBE,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,8lBAA8lB,CAC1oB,EACMC,IAAeD,GACfE,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,6LAA6L,CAC7N,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,KAAK,EAAG,OAAQ,msCAAmsC,CAC9uC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,qqBAAqqB,CAC1sB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,mkBAAmkB,CACtmB,EACMC,IAAOD,GACPE,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,qPAAqP,CACxS,EACMC,IAAqBD,GACrBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2iBAA2iB,CAC1kB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4xBAA4xB,CAC3zB,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,uTAAuT,CAChW,EACMC,IAAaD,GACbE,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAY,cAAc,EAAG,OAAQ,mvBAAmvB,CAC5yB,EACMC,IAAWD,GACXE,IAAgBF,GAChBG,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s1BAAs1B,CACr3B,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,+iCAA+iC,CAC/lC,EACMC,IAAkBD,GAClBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gjBAAgjB,CAC/kB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iJAAiJ,CAChL,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k5BAAk5B,CACj7B,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAiB,EAAG,OAAQ,6mDAA6mD,CACrqD,EACMC,IAAkBD,GAClBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8NAA8N,CAC7P,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,MAAO,KAAK,EAAG,KAAM,yXAAyX,CACza,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m7BAAm7B,CACl9B,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,mnBAAmnB,CAC9pB,EACMC,IAAcD,GACdE,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6aAA6a,CAC5c,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gjBAAgjB,CAC/kB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,w6BAAw6B,CAC78B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4ZAA4Z,CAC3b,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,kdAAkd,CAChgB,EACMC,IAAgBD,GAChBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gdAAgd,CAC/e,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,eAAe,EAAG,OAAQ,0NAA0N,CAChR,EACMC,IAAiBD,GACjBE,IAA8B,CAClC,OAAQ,MACR,SAAU,8BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2gCAA2gC,CAC1iC,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ocAAoc,CACne,EACMC,GAA2B,CAC/B,OAAQ,MACR,SAAU,6BACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,2bAA2b,CACze,EACMC,IAAiBD,GACjBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,guBAAguB,CAC/vB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,MAAO,KAAK,EAAG,OAAQ,8iBAA8iB,CAC/lB,EACMC,IAAQD,GACRE,IAAQF,GACRG,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6vCAA6vC,CAC5xC,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mfAAmf,CAClhB,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,yLAAyL,CACzN,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2bAA2b,CAC1d,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8YAA8Y,CACnb,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,ohBAAohB,CAChkB,EACMC,IAAQD,GACRE,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,glBAAglB,CAC/mB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,sWAAsW,CAChZ,EACMC,IAAaD,GACbE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yRAAyR,CACxT,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ofAAof,CACnhB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0aAA0a,CACzc,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gvBAAgvB,CAC/wB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gkBAAgkB,CAC/lB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u5BAAu5B,CACt7B,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,wmCAAwmC,CAC1pC,EACMC,IAAaD,GACbE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s4BAAs4B,CACr6B,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8cAA8c,CAC7e,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,uHAAuH,CAClK,EACMC,IAAcD,GACdE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+4BAA+4B,CACp7B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,yhBAAyhB,CAC9jB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAY,UAAU,EAAG,OAAQ,wbAAwb,CAC7e,EACMC,IAAYD,GACZE,IAAYF,GACZG,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,iRAAiR,CACpT,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,wBAAwB,EAAG,OAAQ,iQAAiQ,CAC/T,EACMC,IAAwBD,GACxBE,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mjBAAmjB,CACllB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,kBAAkB,EAAG,OAAQ,ggBAAggB,CACzjB,EACMC,IAAmBD,GACnBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0tBAA0tB,CACzvB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,uWAAuW,CAClZ,EACMC,IAAcD,GACdE,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gsBAAgsB,CAC/tB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,+NAA+N,CAClQ,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,kbAAkb,CAC5d,EACMC,IAAaD,GACbE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uyBAAuyB,CACt0B,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8vBAA8vB,CAC7xB,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,6MAA6M,CAC7O,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2MAA2M,CAC1O,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,+wBAA+wB,CACrzB,EACMC,IAAUD,GACVE,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k7BAAk7B,CACj9B,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4pBAA4pB,CAC3rB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,KAAM,MAAO,KAAK,EAAG,OAAQ,kRAAkR,CACnY,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0hBAA0hB,CAC7jB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,2WAA2W,CACrZ,EACMC,IAAaD,GACbE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6kCAA6kC,CAC5mC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gWAAgW,CAC/X,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,ybAAyb,CACle,EACMC,IAAaD,GACbE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,wLAAwL,CACzO,EACMC,IAAaD,GACbE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,muBAAmuB,CAClwB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,yOAAyO,CAC7R,EACMC,IAAgBD,GAChBE,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,olBAAolB,CACnnB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,WAAW,EAAG,OAAQ,+WAA+W,CACza,EACMC,IAAaD,GACbE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mzBAAmzB,CACl1B,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,yRAAyR,CACzT,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAiB,gBAAiB,qBAAqB,EAAG,OAAQ,6kBAA6kB,CACnqB,EACMC,IAAiBD,GACjBE,IAAiBF,GACjBG,IAAuBH,GACvBI,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oSAAoS,CACnU,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,giBAAgiB,CAC/jB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2mBAA2mB,CAC1oB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,khBAAkhB,CACjjB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iQAAiQ,CAChS,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,usBAAusB,CACtuB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,40BAA40B,CAC32B,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yrBAAyrB,CACxtB,EACMC,IAAoC,CACxC,OAAQ,MACR,SAAU,uCACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uuDAAuuD,CACtwD,EACMC,GAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,qZAAqZ,CAC5b,EACMC,IAAUD,GACVE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,KAAM,KAAM,KAAM,MAAO,MAAO,KAAK,EAAG,OAAQ,mDAAmD,CAC/K,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,eAAe,EAAG,OAAQ,0VAA0V,CAC9Y,EACMC,IAAiBD,GACjBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAM,IAAI,EAAG,OAAQ,qgCAAqgC,CACpjC,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w5BAAw5B,CACv7B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,whBAAwhB,CACvjB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,ibAAib,CACpd,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAiB,EAAG,OAAQ,+5BAA+5B,CACv9B,EACMC,IAAmBD,GACnBE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,yiBAAyiB,CAC9kB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,qBAAqB,EAAG,OAAQ,qQAAqQ,CAChU,EACMC,IAAqBD,GACrBE,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,kMAAkM,CAC7O,EACMC,IAAcD,GACdE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,uzBAAuzB,CACz2B,EACMC,IAAaD,GACbE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+hCAA+hC,CAC9jC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iPAAiP,CAChR,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wWAAwW,CACvY,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,stBAAstB,CACrvB,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,ofAAof,CAC9hB,EACMC,IAAcD,GACdE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,scAAsc,CAC3e,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w1CAAw1C,CACv3C,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,OAAO,EAAG,OAAQ,glCAAglC,CAC5nC,EACMC,IAAUD,GACVE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+aAA+a,CACpd,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,iBAAiB,EAAG,OAAQ,wbAAwb,CAC/e,EACMC,IAAmBD,GACnBE,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ycAAyc,CAC9e,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u0BAAu0B,CACt2B,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sTAAsT,CACrV,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ghBAAghB,CAC/iB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0jBAA0jB,CACzlB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qYAAqY,CACpa,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,0RAA0R,CAC5U,EACMC,IAAaD,GACbE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kaAAka,CACjc,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,q1BAAq1B,CAC13B,EACMC,IAA4B,CAChC,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0qBAA0qB,CACzsB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0eAA0e,CACzgB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wmBAAwmB,CACvoB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6lBAA6lB,CAC5nB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yoBAAyoB,CACxqB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4lBAA4lB,CAC3nB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0hCAA0hC,CACzjC,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sWAAsW,CACrY,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0ZAA0Z,CACzb,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,oSAAoS,CACzU,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,cAAc,EAAG,OAAQ,uVAAuV,CAC1Y,EACMC,IAAgBD,GAChBE,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,wIAAwI,CAC1L,EACMC,IAAaD,GACbE,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,0SAA0S,CAC1V,EACMC,IAAYD,GACZE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8lBAA8lB,CAC7nB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,sSAAsS,CAChV,EACMC,IAAaD,GACbE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ypBAAypB,CAC9rB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,0lBAA0lB,CACxoB,EACMC,IAAiBD,GACjBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,+lBAA+lB,CACnpB,EACMC,IAAeD,GACfE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oQAAoQ,CACnS,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8JAA8J,CAC7L,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0fAA0f,CACzhB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,qkBAAqkB,CACrnB,EACMC,IAAmBD,GACnBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gPAAgP,CAC/Q,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,ybAAyb,CACje,EACMC,IAAWD,GACXE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8jBAA8jB,CACnmB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,2oBAA2oB,CAC3rB,EACMC,IAAWD,GACXE,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ggBAAggB,CAC/hB,EACMC,IAA2B,CAC/B,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+/BAA+/B,CAC9hC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,idAAid,CAChf,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gUAAgU,CAC/V,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,sQAAsQ,CAC3S,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,woBAAwoB,CACvqB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ibAAib,CAChd,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAY,gBAAgB,EAAG,OAAQ,6dAA6d,CAChiB,EACMC,IAAYD,GACZE,IAAkBF,GAClBG,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,urBAAurB,CAC5tB,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4oBAA4oB,CAC3qB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,SAAS,EAAG,OAAQ,kiBAAkiB,CACjlB,EACMC,IAAWD,GACXE,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gNAAgN,CACrP,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,OAAO,EAAG,OAAQ,wVAAwV,CACpY,EACMC,IAAUD,GACVE,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yaAAya,CACxc,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,yWAAyW,CACnZ,EACMC,IAAaD,GACbE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,MAAM,EAAG,OAAQ,4TAA4T,CACjX,EACMC,IAASD,GACTE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m2CAAm2C,CACl4C,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,wxBAAwxB,CAC30B,EACMC,IAAqBD,GACrBE,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,8JAA8J,CACvM,EACMC,IAAYD,GACZE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,YAAY,EAAG,OAAQ,yfAAyf,CACnjB,EACMC,IAAeD,GACfE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oiBAAoiB,CACnkB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,8JAA8J,CACjM,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,gjBAAgjB,CACpmB,EACMC,IAAeD,GACfE,GAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,isCAAisC,CAClvC,EACMC,IAAmBD,GACnBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,olBAAolB,CACnnB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w9CAAw9C,CACv/C,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8mBAA8mB,CAC7oB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yrBAAyrB,CACxtB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2bAA2b,CAC1d,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,i6BAAi6B,CAC/8B,EACMC,IAAiBD,GACjBE,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,qBAAsB,uBAAwB,MAAM,EAAG,OAAQ,iVAAiV,CAC1a,EACMC,IAAqBD,GACrBE,IAAuBF,GACvBG,IAASH,GACTI,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mYAAmY,CACla,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,s1CAAs1C,CACz3C,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,wbAAwb,CACje,EACMC,IAAaD,GACbE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6xBAA6xB,CACh0B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oaAAoa,CACnc,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yxBAAyxB,CACxzB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mzDAAmzD,CACl1D,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,q3DAAq3D,CACx6D,EACMC,IAAcD,GACdE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,uRAAuR,CACpU,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,8dAA8d,CAC7gB,EACMC,IAAkBD,GAClBE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4cAA4c,CAC3e,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g5BAAg5B,CAC/6B,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,6uCAA6uC,CACtxC,EACMC,IAAYD,GACZE,GAAc,CAClB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,2qBAA2qB,CAC3tB,EACMC,IAAkBD,GAClBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,sNAAsN,CAC3P,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,izBAAizB,CACh1B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,qXAAqX,CACxZ,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2oDAA2oD,CAC1qD,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yRAAyR,CACxT,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,87BAA87B,CAC79B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qzBAAqzB,CACp1B,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+jBAA+jB,CAC9lB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0wBAA0wB,CACzyB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,kYAAkY,CAC9a,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,gmBAAgmB,CACxoB,EACMC,IAAYD,GACZE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8QAA8Q,CAC7S,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAoB,oBAAoB,EAAG,OAAQ,kMAAkM,CACzQ,EACMC,IAAmBD,GACnBE,IAAsBF,GACtBG,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qcAAqc,CACpe,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,msBAAmsB,CACxuB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,iBAAiB,EAAG,OAAQ,2YAA2Y,CACjc,EACMC,IAAkBD,GAClBE,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAW,QAAQ,EAAG,OAAQ,8bAA8b,CACxf,EACMC,IAAWD,GACXE,IAAWF,GACXG,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kxBAAkxB,CACjzB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,GAAG,EAAG,OAAQ,qLAAqL,CAC9N,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,OAAO,EAAG,OAAQ,iQAAiQ,CAC7S,EACMC,IAAUD,GACVE,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,kUAAkU,CACvW,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+wBAA+wB,CAC9yB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o9BAAo9B,CACn/B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wwCAAwwC,CACvyC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,8NAA8N,CACjQ,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+pBAA+pB,CAC9rB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,oaAAoa,CACzc,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2YAA2Y,CAC1a,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ofAAof,CACnhB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,y0BAAy0B,CACx2B,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,gLAAgL,CAChN,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ikCAAikC,CAChmC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mZAAmZ,CAClb,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,sdAAsd,CACxgB,EACMC,IAAoBD,GACpBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,uWAAuW,CAC1Y,EACMC,IAAOD,GACPE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,srBAAsrB,CACrtB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,4bAA4b,CACle,EACMC,IAAUD,GACVE,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,mGAAmG,CACnI,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,mhBAAmhB,CAC1jB,EACMC,IAAWD,GACXE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,00BAA00B,CAC/2B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,i3CAAi3C,CACt5C,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,sbAAsb,CAC7d,EACMC,IAAWD,GACXE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0oCAA0oC,CACzqC,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,4jBAA4jB,CAC5mB,EACMC,IAAmBD,GACnBE,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,sPAAsP,CAC/R,EACMC,IAAYD,GACZE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,qtBAAqtB,CAC5vB,EACMC,IAAWD,GACXE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,sBAAsB,EAAG,OAAQ,qkBAAqkB,CAC1nB,EACMC,IAAuBD,GACvBE,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yaAAya,CACxc,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2WAA2W,CAC1Y,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wUAAwU,CACvW,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,2jBAA2jB,CAC9lB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gpBAAgpB,CACrrB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qoBAAqoB,CACpqB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8MAA8M,CACnP,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,6XAA6X,CACza,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,gBAAiB,MAAM,EAAG,OAAQ,y3DAAy3D,CACv7D,EACMC,IAAiBD,GACjBE,IAASF,GACTG,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAM,KAAK,EAAG,OAAQ,8QAA8Q,CAChU,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,iVAAiV,CACjY,EACMC,IAAkBD,GAClBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6bAA6b,CACle,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u7BAAu7B,CACt9B,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,2iBAA2iB,CAChlB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,u0BAAu0B,CAC52B,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,wqBAAwqB,CAC5tB,EACMC,IAAqBD,GACrBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kRAAkR,CACjT,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g3BAAg3B,CAC/4B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2aAA2a,CAC1c,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0mBAA0mB,CACzoB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8fAA8f,CAC7hB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o1BAAo1B,CACn3B,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,MAAO,iBAAiB,EAAG,OAAQ,0iBAA0iB,CACvmB,EACMC,IAAmBD,GACnBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,iSAAiS,CACtU,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,wlBAAwlB,CAChoB,EACMC,IAAWD,GACXE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,0QAA0Q,CACtT,EACMC,IAAeD,GACfE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,knCAAknC,CACjpC,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,YAAY,EAAG,OAAQ,oQAAoQ,CACtT,EACMC,IAAcD,GACdE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0uBAA0uB,CACzwB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,+YAA+Y,CAClb,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6wBAA6wB,CAC5yB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0dAA0d,CACzf,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAoB,mBAAmB,EAAG,OAAQ,6qBAA6qB,CACnvB,EACMC,IAAmBD,GACnBE,IAAoBF,GACpBG,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,4hBAA4hB,CAC/kB,EACMC,IAAqBD,GACrBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,quDAAquD,CACpwD,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8YAA8Y,CAC7a,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,81BAA81B,CAC73B,EACMC,GAA8B,CAClC,OAAQ,MACR,SAAU,8BACV,KAAM,CAAC,IAAK,IAAK,CAAC,yBAAyB,EAAG,OAAQ,2ZAA2Z,CACnd,EACMC,IAA0BD,GAC1BE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8bAA8b,CACne,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,IAAI,EAAG,OAAQ,0ZAA0Z,CACrc,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2tBAA2tB,CAC1vB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wgBAAwgB,CACviB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oVAAoV,CACnX,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6jCAA6jC,CAC5lC,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0UAA0U,CACzW,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAkB,iBAAiB,EAAG,OAAQ,isBAAisB,CACnwB,EACMC,IAAiBD,GACjBE,IAAkBF,GAClBG,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+mCAA+mC,CAC9oC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,2gBAA2gB,CAChjB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,oBAAqB,oBAAqB,wBAAyB,MAAM,EAAG,OAAQ,8UAA8U,CAC5b,EACMC,IAAoBD,GACpBE,IAAoBF,GACpBG,IAAwBH,GACxBI,IAASJ,GACTK,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,wUAAwU,CACpX,EACMC,IAAQD,GACRE,GAAwB,CAC5B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,mBAAmB,EAAG,OAAQ,40CAA40C,CACt4C,EACMC,IAAoBD,GACpBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2eAA2e,CAC1gB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,ygBAAygB,CACljB,EACMC,IAAYD,GACZE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iYAAiY,CACha,EACMC,IAA4B,CAChC,OAAQ,MACR,SAAU,6BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4kBAA4kB,CAC3mB,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,42BAA42B,CAC15B,EACMC,IAAiBD,GACjBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ocAAoc,CACne,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,uhBAAuhB,CAC5jB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,uBAAuB,EAAG,OAAQ,oQAAoQ,CACjU,EACMC,IAAuBD,GACvBE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,yjBAAyjB,CAChmB,EACMC,IAAWD,GACXE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gbAAgb,CAC/c,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAgB,KAAK,EAAG,OAAQ,kcAAkc,CACtf,EACMC,IAAgBD,GAChBE,IAAQF,GACRG,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,oSAAoS,CAC7U,EACMC,IAAYD,GACZE,GAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,keAAke,CACjhB,EACMC,IAAiBD,GACjBE,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,kOAAkO,CACtR,EACMC,IAAqBD,GACrBE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,u0BAAu0B,CAC52B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,80BAA80B,CAC72B,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAM,MAAO,UAAU,EAAG,OAAQ,sGAAsG,CAClK,EACMC,IAAaD,GACbE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,69BAA69B,CAC5/B,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,4NAA4N,CAC5Q,EACMC,IAAkBD,GAClBE,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mlBAAmlB,CAClnB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i6BAAi6B,CACh8B,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+RAA+R,CAC9T,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0LAA0L,CACzN,EACMC,GAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,sCAAuC,mBAAoB,2CAA2C,EAAG,OAAQ,mhCAAmhC,CACxpC,EACMC,IAAqCD,GACrCE,IAAoBF,GACpBG,IAA0CH,GAC1CI,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAK,EAAG,OAAQ,6gCAA6gC,CACvjC,EACMC,IAAQD,GACRE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,mfAAmf,CAC9hB,EACMC,IAAcD,GACdE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,g3BAAg3B,CACr5B,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,06BAA06B,CACz8B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,wqBAAwqB,CAC5sB,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sxBAAsxB,CACrzB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,eAAe,EAAG,OAAQ,8YAA8Y,CACpc,EACMC,IAAiBD,GACjBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wWAAwW,CACvY,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,smBAAsmB,CACroB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6bAA6b,CAC5d,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8qBAA8qB,CAC7sB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u9BAAu9B,CACt/B,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,0QAA0Q,CACnT,EACMC,IAAYD,GACZE,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,uLAAuL,CACvN,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,6hBAA6hB,CAC7kB,EACMC,IAAkBD,GAClBE,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,0LAA0L,CAC7O,EACMC,IAAcD,GACdE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,mOAAmO,CACjR,EACMC,IAAiBD,GACjBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kSAAkS,CACjU,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0eAA0e,CACzgB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6cAA6c,CAC5e,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,s6BAAs6B,CACt8B,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yhBAAyhB,CACxjB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAI,EAAG,OAAQ,49CAA49C,CAC//C,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+JAA+J,CAC9L,EACMC,GAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,6fAA6f,CAC5iB,EACMC,IAAkBD,GAClBE,GAA6B,CACjC,OAAQ,MACR,SAAU,6BACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAiB,gBAAiB,4BAA4B,EAAG,OAAQ,+kBAA+kB,CAC5qB,EACMC,IAAiBD,GACjBE,IAAiBF,GACjBG,IAA6BH,GAC7BI,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,kPAAkP,CACrS,EACMC,IAAqBD,GACrBE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yZAAyZ,CACxb,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+tBAA+tB,CAC9vB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,yTAAyT,CACnW,EACMC,IAAaD,GACbE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,49BAA49B,CAC3/B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,23CAA23C,CAC15C,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0pEAA0pE,CAC7rE,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,ytBAAytB,CACnwB,EACMC,IAAaD,GACbE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,weAAwe,CACvgB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ujBAAujB,CACtlB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,uQAAuQ,CAC5S,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6pBAA6pB,CAC5rB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yZAAyZ,CACxb,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2ZAA2Z,CAC1b,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mbAAmb,CACld,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+lCAA+lC,CAC9nC,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,oIAAoI,CAC/K,EACMC,IAAcD,GACdE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,oiBAAoiB,CACzkB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,mZAAmZ,CACtb,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,sBAAsB,EAAG,OAAQ,uOAAuO,CAC5R,EACMC,IAAsBD,GACtBE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4iCAA4iC,CAC3kC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8TAA8T,CAC7V,EACMC,GAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,uoCAAuoC,CAChrC,EACMC,IAAaD,GACbE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,igBAAigB,CAChiB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+nBAA+nB,CAC9pB,EACMC,IAAkC,CACtC,OAAQ,MACR,SAAU,mCACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+iBAA+iB,CAC9kB,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,inBAAinB,CAChpB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,0rBAA0rB,CACjuB,EACMC,IAAWD,GACXE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0sBAA0sB,CAC7uB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2hBAA2hB,CAC1jB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8mBAA8mB,CACnpB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qiCAAqiC,CACpkC,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,gOAAgO,CAChQ,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,MAAM,EAAG,OAAQ,ypBAAypB,CAC7sB,EACMC,IAASD,GACTE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,IAAI,EAAG,OAAQ,ktBAAktB,CAC7vB,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6oCAA6oC,CAC5qC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+gCAA+gC,CACpjC,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ohBAAohB,CACnjB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,waAAwa,CACvc,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,kTAAkT,CAC/V,EACMC,IAASD,GACTE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,WAAW,EAAG,OAAQ,maAAma,CACnd,EACMC,IAAcD,GACdE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAqB,YAAY,EAAG,OAAQ,gdAAgd,CAChhB,EACMC,IAAoBD,GACpBE,IAAeF,GACfG,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2aAA2a,CAC1c,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,gUAAgU,CACnW,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAkB,cAAc,EAAG,OAAQ,wMAAwM,CAC/Q,EACMC,IAAkBD,GAClBE,IAAgBF,GAChBG,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,mOAAmO,CAC/Q,EACMC,IAAQD,GACRE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+YAA+Y,CAC9a,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,stBAAstB,CAChwB,EACMC,IAAaD,GACbE,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,iBAAiB,EAAG,OAAQ,ykBAAykB,CAChoB,EACMC,IAAmBD,GACnBE,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,0fAA0f,CACjiB,EACMC,IAAWD,GACXE,IAA2B,CAC/B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0gBAA0gB,CACziB,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,MAAO,OAAQ,WAAY,aAAa,EAAG,OAAQ,seAAse,CAC5jB,EACMC,IAASD,GACTE,IAAYF,GACZG,IAAcH,GACdI,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0WAA0W,CACzY,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ocAAoc,CACne,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAE,EAAG,KAAM,4SAA4S,CAC3U,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wXAAwX,CACvZ,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,+JAA+J,CAClM,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0dAA0d,CACzf,EACMC,GAAwB,CAC5B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,UAAU,EAAG,OAAQ,8aAA8a,CAC7d,EACMC,IAAaD,GACbE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAY,gBAAgB,EAAG,OAAQ,+WAA+W,CAC1a,EACMC,IAAYD,GACZE,IAAkBF,GAClBG,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,SAAS,EAAG,OAAQ,qlBAAqlB,CAC5oB,EACMC,IAAYD,GACZE,GAAqB,CACzB,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,ilBAAilB,CAChoB,EACMC,IAAiBD,GACjBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,giBAAgiB,CAC/jB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,utCAAutC,CACtvC,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0XAA0X,CAC/Z,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,i6BAAi6B,CACj9B,EACMC,IAAmBD,GACnBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,shBAAshB,CAC3jB,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,iOAAiO,CACnR,EACMC,IAAmBD,GACnBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6GAA6G,CAChJ,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qdAAqd,CACpf,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,maAAma,CAClc,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mUAAmU,CAClW,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6IAA6I,CAC5K,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0RAA0R,CACzT,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,MAAM,EAAG,OAAQ,qSAAqS,CAC1V,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,uVAAuV,CACrY,EACMC,IAAiBD,GACjBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gdAAgd,CAC/e,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sgBAAsgB,CACriB,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAK,EAAG,OAAQ,wPAAwP,CAClS,EACMC,IAAQD,GACRE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wTAAwT,CACvV,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6hBAA6hB,CAC5jB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2YAA2Y,CAC1a,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,+WAA+W,CAClZ,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,42BAA42B,CACj5B,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,opBAAopB,CACnrB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,MAAO,MAAO,MAAO,KAAK,EAAG,OAAQ,sYAAsY,CACpc,EACMC,IAAQD,GACRE,IAAQF,GACRG,IAAQH,GACRI,IAAQJ,GACRK,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,SAAU,MAAO,OAAO,EAAG,OAAQ,+VAA+V,CAC5Z,EACMC,IAAWD,GACXE,IAAQF,GACRG,IAAUH,GACVI,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,qmBAAqmB,CACxoB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,geAAge,CAC/f,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,8XAA8X,CACza,EACMC,IAAcD,GACdE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qmBAAqmB,CACpoB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0WAA0W,CACzY,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gOAAgO,CAC/P,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,uBAAuB,EAAG,OAAQ,kQAAkQ,CAC/T,EACMC,IAAuBD,GACvBE,IAAqB,CACzB,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,smBAAsmB,CACroB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2WAA2W,CAC1Y,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAoB,sBAAsB,EAAG,OAAQ,mlBAAmlB,CAC5pB,EACMC,IAAmBD,GACnBE,IAAsBF,GACtBG,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,KAAM,sMAAsM,CACxO,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0KAA0K,CAC7M,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wkBAAwkB,CACvmB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ksBAAksB,CACjuB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2LAA2L,CAC1N,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,glBAAglB,CAC5nB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4aAA4a,CAC3c,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,6NAA6N,CAC9Q,EACMC,IAAmBD,GACnBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4yBAA4yB,CAC30B,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,qIAAqI,CAChL,EACMC,IAAcD,GACdE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,8XAA8X,CACja,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,mZAAmZ,CAC7b,EACMC,IAAaD,GACbE,IAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6jBAA6jB,CAC5lB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,iiBAAiiB,CACtkB,EACMC,IAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o0BAAo0B,CACn2B,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,23BAA23B,CAC15B,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,iBAAiB,EAAG,OAAQ,sUAAsU,CACrY,EACMC,IAAkBD,GAClBE,GAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,oeAAoe,CACvhB,EACMC,IAAeD,GACfE,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4uBAA4uB,CAC3wB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,sVAAsV,CAClY,EACMC,IAAeD,GACfE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iTAAiT,CAChV,EACMC,IAA0B,CAC9B,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ihBAAihB,CAChjB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uyCAAuyC,CACt0C,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,giBAAgiB,CAC/jB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0gBAA0gB,CACziB,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,oyBAAoyB,CACn1B,EACMC,IAAkBD,GAClBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,iqBAAiqB,CACtsB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,4QAA4Q,CACjT,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,6TAA6T,CACtW,EACMC,IAAYD,GACZE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mvBAAmvB,CAClxB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAiB,gBAAiB,kBAAkB,EAAG,OAAQ,+kBAA+kB,CAClqB,EACMC,IAAiBD,GACjBE,IAAiBF,GACjBG,IAAoBH,GACpBI,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,qZAAqZ,CACjc,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+kBAA+kB,CAC9mB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,orBAAorB,CACntB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0dAA0d,CACzf,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0dAA0d,CACzf,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mXAAmX,CAClZ,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,mpBAAmpB,CACjsB,EACMC,IAAiBD,GACjBE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,0KAA0K,CACzN,EACMC,IAAiBD,GACjBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,KAAK,EAAG,OAAQ,4JAA4J,CAChN,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,KAAM,2MAA2M,CAC7O,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,g6BAAg6B,CACh9B,EACMC,IAAYD,GACZE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6NAA6N,CAChQ,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,+RAA+R,CAC5U,EACMC,IAASD,GACTE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sRAAsR,CACrT,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,QAAS,gBAAiB,gBAAgB,EAAG,OAAQ,o0BAAo0B,CACr5B,EACMC,IAAUD,GACVE,IAAiBF,GACjBG,IAAkBH,GAClBI,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8vBAA8vB,CAC7xB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,soBAAsoB,CAC3qB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,wRAAwR,CAClU,EACMC,IAAaD,GACbE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0jBAA0jB,CAC/lB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0XAA0X,CACzZ,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,20CAA20C,CAC12C,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,iBAAkB,qBAAqB,EAAG,OAAQ,6YAA6Y,CAC1d,EACMC,IAAkBD,GAClBE,IAAsBF,GACtBG,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kqBAAkqB,CACjsB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,eAAgB,eAAe,EAAG,OAAQ,qrBAAqrB,CAClwB,EACMC,IAAgBD,GAChBE,IAAiBF,GACjBG,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6fAA6f,CAC5hB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,+jBAA+jB,CAClmB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAW,QAAQ,EAAG,OAAQ,4SAA4S,CAC9V,EACMC,IAAYD,GACZE,IAAWF,GACXG,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,06CAA06C,CAC78C,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ukCAAukC,CAC5mC,EACMC,GAA0B,CAC9B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,klBAAklB,CACxnB,EACMC,IAAUD,GACVE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,kuBAAkuB,CACvwB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,sRAAsR,CAC3T,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,onBAAonB,CACnpB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,+gBAA+gB,CAC5jB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,OAAQ,kNAAkN,CACpP,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,6WAA6W,CACtZ,EACMC,IAAYD,GACZE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,mNAAmN,CACvP,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,QAAS,WAAW,EAAG,OAAQ,klBAAklB,CAC5oB,EACMC,IAAUD,GACVE,IAAaF,GACbG,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,4wBAA4wB,CAC1zB,EACMC,IAAUD,GACVE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,6BAA6B,EAAG,OAAQ,wlCAAwlC,CACppC,EACMC,IAA8BD,GAC9BE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w6BAAw6B,CACv8B,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,sJAAsJ,CACzL,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6TAA6T,CAC5V,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uhBAAuhB,CACtjB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,odAAod,CACnf,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,QAAQ,EAAG,OAAQ,0OAA0O,CACzR,EACMC,IAAWD,GACXE,GAA0B,CAC9B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,wBAAyB,cAAc,EAAG,OAAQ,mkBAAmkB,CACjpB,EACMC,IAAuBD,GACvBE,IAAgBF,GAChBG,GAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,wuBAAwuB,CAClxB,EACMC,IAAcD,GACdE,GAAoB,CACxB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,ycAAyc,CAC3f,EACMC,IAAoBD,GACpBE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2ZAA2Z,CAC1b,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,giBAAgiB,CAC/jB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ooBAAooB,CACnqB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,sdAAsd,CACxgB,EACMC,IAAaD,GACbE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6pBAA6pB,CAClsB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAc,eAAe,EAAG,OAAQ,oXAAoX,CAChb,EACMC,IAAcD,GACdE,IAAiBF,GACjBG,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ueAAue,CACtgB,EACMC,IAA4B,CAChC,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8hBAA8hB,CAC7jB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0KAA0K,CACzM,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAW,WAAW,EAAG,OAAQ,yTAAyT,CACtX,EACMC,IAAYD,GACZE,IAAaF,GACbG,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,IAAI,EAAG,OAAQ,+hBAA+hB,CAC1kB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,utBAAutB,CACtvB,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,sZAAsZ,CAChc,EACMC,IAAaD,GACbE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,42BAA42B,CAC34B,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,umCAAumC,CACtoC,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,qOAAqO,CACzR,EACMC,IAAqBD,GACrBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+kBAA+kB,CAC9mB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,2aAA2a,CAC9c,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,00BAA00B,CACz2B,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+2BAA+2B,CAC94B,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,udAAud,CACpgB,EACMC,IAAgBD,GAChBE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,8NAA8N,CACjQ,EACMC,GAAO,CACX,OAAQ,MACR,SAAU,KACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAc,QAAQ,EAAG,OAAQ,gPAAgP,CAC5S,EACMC,IAAeD,GACfE,IAAUF,GACVG,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0pBAA0pB,CAC/rB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,2rBAA2rB,CACjuB,EACMC,IAAUD,GACVE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2WAA2W,CAC1Y,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,wNAAwN,CAC3Q,EACMC,IAAeD,GACfE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ycAAyc,CACxe,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+gBAA+gB,CAC9iB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,49BAA49B,CACtgC,EACMC,IAAaD,GACbE,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,4LAA4L,CAC5N,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,gzBAAgzB,CACr2B,EACMC,IAAiBD,GACjBE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,ypBAAypB,CACvsB,EACMC,IAAiBD,GACjBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gbAAgb,CACrd,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6iBAA6iB,CAC5kB,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,QAAQ,EAAG,OAAQ,0GAA0G,CACvJ,EACMC,IAAWD,GACXE,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mTAAmT,CAClV,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,eAAe,EAAG,OAAQ,0jBAA0jB,CAC9mB,EACMC,IAAiBD,GACjBE,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAM,eAAe,EAAG,OAAQ,klCAAklC,CAC9oC,EACMC,IAAiBD,GACjBE,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,khBAAkhB,CACjjB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,sWAAsW,CACtZ,EACMC,IAAmBD,GACnBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iSAAiS,CAChU,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAe,cAAc,EAAG,OAAQ,maAAma,CAC/d,EACMC,IAAeD,GACfE,IAAgBF,GAChBG,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yxCAAyxC,CACxzC,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,grBAAgrB,CAChuB,EACMC,IAAmBD,GACnBE,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,moBAAmoB,CACvrB,EACMC,IAAgBD,GAChBE,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,uwBAAuwB,CACnzB,EACMC,IAAeD,GACfE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ygBAAygB,CACxiB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,wXAAwX,CACra,EACMC,IAAgBD,GAChBE,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,MAAO,KAAK,EAAG,KAAM,2MAA2M,CAC3P,EACMC,IAAQD,GACRE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,seAAse,CACrgB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wlBAAwlB,CACvnB,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,MAAO,MAAO,IAAK,QAAS,WAAY,SAAU,OAAO,EAAG,OAAQ,yRAAyR,CAChY,EACMC,IAAUD,GACVE,IAAaF,GACbG,IAAWH,GACXI,IAAUJ,GACVK,GAA0B,CAC9B,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,0pBAA0pB,CACjsB,EACMC,IAAWD,GACXE,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,uaAAua,CAC1d,EACMC,IAAsBD,GACtBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qhBAAqhB,CACpjB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4hCAA4hC,CAC3jC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yjBAAyjB,CACxlB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6rBAA6rB,CAC5tB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,gBAAgB,EAAG,OAAQ,2YAA2Y,CAChc,EACMC,IAAiBD,GACjBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8nCAA8nC,CACnqC,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,ydAAyd,CACvgB,EACMC,IAAiBD,GACjBE,IAAoB,CACxB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yyBAAyyB,CACx0B,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oWAAoW,CACnY,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6cAA6c,CAC5e,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,OAAQ,4QAA4Q,CAC9S,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,KAAM,2LAA2L,CAC7N,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gfAAgf,CAC/gB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,86BAA86B,CAC78B,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,MAAO,SAAU,SAAU,aAAa,EAAG,OAAQ,4WAA4W,CACzb,EACMC,IAAQD,GACRE,IAAWF,GACXG,IAAWH,GACXI,IAAeJ,GACfK,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,iPAAiP,CAC7R,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6fAA6f,CAC5hB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,88BAA88B,CAC1/B,EACMC,IAAeD,GACfE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0RAA0R,CACzT,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wtCAAwtC,CACvvC,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4mBAA4mB,CAC3oB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qSAAqS,CACpU,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8gBAA8gB,CAC7iB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gUAAgU,CACrW,EACMC,IAASD,GACTE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qvBAAqvB,CACpxB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,uiBAAuiB,CACnlB,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,uMAAuM,CACtP,EACMC,IAAkBD,GAClBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gvBAAgvB,CAC/wB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2bAA2b,CAC1d,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0KAA0K,CAC7M,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oeAAoe,CACngB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i+BAAi+B,CAChgC,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,uKAAuK,CAC1M,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8wFAA8wF,CAC7yF,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sUAAsU,CACrW,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0QAA0Q,CACzS,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,urBAAurB,CACttB,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sdAAsd,CACrf,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kGAAkG,CACjI,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0KAA0K,CAC7M,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0fAA0f,CACzhB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,+tBAA+tB,CACvwB,EACMC,IAAWD,GACXE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mfAAmf,CAClhB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gaAAga,CAC/b,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,uTAAuT,CACjW,EACMC,IAAaD,GACbE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,miBAAmiB,CACxkB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,kaAAka,CAChd,EACMC,IAAiBD,GACjBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,yOAAyO,CAC9Q,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6aAA6a,CAC5c,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6UAA6U,CAC5W,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0aAA0a,CAC/c,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,MAAO,YAAY,EAAG,KAAM,qNAAqN,CAC5Q,EACMC,IAAeD,GACfE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,skBAAskB,CACrmB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wZAAwZ,CACvb,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sQAAsQ,CACrS,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,mVAAmV,CACjY,EACMC,IAAUD,GACVE,GAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,YAAY,EAAG,OAAQ,8VAA8V,CACzZ,EACMC,IAAcD,GACdE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,yrBAAyrB,CAC9tB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,qZAAqZ,CAClc,EACMC,IAASD,GACTE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,8iBAA8iB,CACnlB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,usBAAusB,CAC1uB,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,4qBAA4qB,CAC7tB,EACMC,IAAYD,GACZE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0UAA0U,CACzW,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,kpBAAkpB,CACvrB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6UAA6U,CAChX,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,y7DAAy7D,CAC99D,EACMC,IAASD,GACTE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oaAAoa,CACnc,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4mBAA4mB,CAC3oB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yjBAAyjB,CACxlB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,okBAAokB,CACxnB,EACMC,IAAeD,GACfE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,kSAAkS,CACrU,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+cAA+c,CAC9e,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,iBAAiB,EAAG,OAAQ,uwBAAuwB,CAC7zB,EACMC,IAAmBD,GACnBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,sfAAsf,CACzhB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,oQAAoQ,CAC/S,EACMC,IAAcD,GACdE,IAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,q5BAAq5B,CACp7B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s3CAAs3C,CACr5C,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,kUAAkU,CAC7W,EACMC,IAAcD,GACdE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,2xBAA2xB,CACv0B,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,mBAAmB,EAAG,OAAQ,+UAA+U,CACtY,EACMC,IAAoBD,GACpBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ovBAAovB,CACnxB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,2dAA2d,CACngB,EACMC,IAAYD,GACZE,GAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAiB,EAAG,OAAQ,07CAA07C,CACl/C,EACMC,IAAkBD,GAClBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,uBAAuB,EAAG,OAAQ,mXAAmX,CACza,EACMC,IAAuBD,GACvBE,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,kNAAkN,CACvQ,EACMC,IAAgBD,GAChBE,GAAqB,CACzB,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,glBAAglB,CACnoB,EACMC,IAAoBD,GACpBE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u9BAAu9B,CACt/B,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qbAAqb,CACpd,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,uwBAAuwB,CACjzB,EACMC,IAAaD,GACbE,GAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,mMAAmM,CACvP,EACMC,IAAsBD,GACtBE,IAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+YAA+Y,CAC9a,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,oaAAoa,CACxc,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8mBAA8mB,CAC7oB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kjBAAkjB,CACjlB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,2NAA2N,CACjQ,EACMC,IAAUD,GACVE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ukBAAukB,CAC5mB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,khBAAkhB,CACvjB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,IAAI,EAAG,OAAQ,gRAAgR,CAC3T,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,oVAAoV,CACnY,EACMC,IAAiBD,GACjBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+LAA+L,CAC9N,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,2OAA2O,CAC9Q,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,wRAAwR,CAC7T,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sPAAsP,CACrR,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mqBAAmqB,CAClsB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,QAAQ,EAAG,OAAQ,ofAAof,CACniB,EACMC,IAAWD,GACXE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6eAA6e,CAClhB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kcAAkc,CACje,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6tBAA6tB,CAC5vB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,ggCAAggC,CAC9iC,EACMC,IAAiBD,GACjBE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,eAAgB,cAAc,EAAG,OAAQ,0VAA0V,CAC9Z,EACMC,IAAgBD,GAChBE,IAAgBF,GAChBG,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,KAAM,okBAAokB,CACtmB,EACMC,GAAiC,CACrC,OAAQ,MACR,SAAU,qCACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,uaAAua,CACld,EACMC,IAAcD,GACdE,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yXAAyX,CACxZ,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,uJAAuJ,CACvL,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+kCAA+kC,CACpnC,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8gBAA8gB,CAC7iB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,IAAI,EAAG,OAAQ,+jBAA+jB,CACxmB,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,scAAsc,CACre,EACMC,IAA0B,CAC9B,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4lBAA4lB,CAC3nB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2RAA2R,CAC1T,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8gBAA8gB,CAC7iB,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,85BAA85B,CAC77B,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,MAAO,cAAc,EAAG,OAAQ,yUAAyU,CACnY,EACMC,IAAeD,GACfE,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kgCAAkgC,CACjiC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,4PAA4P,CACzS,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2tBAA2tB,CAC1vB,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,ypCAAypC,CAChsC,EACMC,IAAWD,GACXE,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iaAAia,CAChc,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,g+BAAg+B,CACrgC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8UAA8U,CAC7W,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,oPAAoP,CAChS,EACMC,IAAeD,GACfE,GAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,kBAAkB,EAAG,OAAQ,kxBAAkxB,CAC30B,EACMC,IAAmBD,GACnBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gXAAgX,CAC/Y,EACMC,IAA0B,CAC9B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kjBAAkjB,CACjlB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAgB,cAAe,QAAQ,EAAG,OAAQ,kwBAAkwB,CACx0B,EACMC,IAAgBD,GAChBE,IAAeF,GACfG,IAAWH,GACXI,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uPAAuP,CACtR,EACMC,IAA+B,CACnC,OAAQ,MACR,SAAU,iCACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o+BAAo+B,CACngC,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,ssBAAssB,CACxvB,EACMC,IAAmBD,GACnBE,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,2ZAA2Z,CACpc,EACMC,IAAYD,GACZE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6gBAA6gB,CACljB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,2bAA2b,CAC/d,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,0tBAA0tB,CAChwB,EACMC,IAAUD,GACVE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,mnBAAmnB,CACtpB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sPAAsP,CACrR,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,2qBAA2qB,CACztB,EACMC,IAAUD,GACVE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4jBAA4jB,CAC3lB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qSAAqS,CACpU,EACMC,GAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,uTAAuT,CAC5V,EACMC,IAASD,GACTE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2oBAA2oB,CAC1qB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,eAAe,EAAG,OAAQ,qvBAAqvB,CACzyB,EACMC,IAAiBD,GACjBE,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAc,iBAAiB,EAAG,OAAQ,8NAA8N,CACnS,EACMC,IAAeD,GACfE,IAAmBF,GACnBG,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,goBAAgoB,CACrqB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,aAAa,EAAG,OAAQ,sQAAsQ,CACjU,EACMC,IAAeD,GACfE,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,2SAA2S,CAC3U,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,kSAAkS,CAC1U,EACMC,IAAWD,GACXE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,qwCAAqwC,CACzyC,EACMC,IAAQD,GACRE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,6YAA6Y,CAClb,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0XAA0X,CACzZ,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,KAAK,EAAG,OAAQ,sLAAsL,CACjO,EACMC,GAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,yTAAyT,CACnW,EACMC,IAAaD,GACbE,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qhBAAqhB,CACpjB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,0KAA0K,CAC7M,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gaAAga,CAC/b,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+lBAA+lB,CAC9nB,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,seAAse,CACrgB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,aAAa,EAAG,OAAQ,ksBAAksB,CACpvB,EACMC,IAAeD,GACfE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0lBAA0lB,CACznB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,mWAAmW,CACxY,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8cAA8c,CAC7e,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,uSAAuS,CAChV,EACMC,IAAaD,GACbE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ocAAoc,CACne,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8mBAA8mB,CAC7oB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,i6CAAi6C,CAC98C,EACMC,IAAgBD,GAChBE,GAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,spBAAspB,CACnsB,EACMC,IAAgBD,GAChBE,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,kBAAmB,kBAAmB,cAAc,EAAG,OAAQ,2VAA2V,CACrb,EACMC,IAAmBD,GACnBE,IAAmBF,GACnBG,IAAgBH,GAChBI,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,udAAud,CACtf,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,kdAAkd,CAC/f,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,09CAA09C,CACzgD,EACMC,IAAkBD,GAClBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,izBAAizB,CACh1B,EACMC,GAAwB,CAC5B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,uBAAwB,SAAS,EAAG,OAAQ,yTAAyT,CAC/X,EACMC,IAAwBD,GACxBE,IAAYF,GACZG,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kbAAkb,CACjd,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,2WAA2W,CACxZ,EACMC,IAAgBD,GAChBE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,odAAod,CACnf,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g0BAAg0B,CAC/1B,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4kBAA4kB,CAC3mB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,6aAA6a,CAC1d,EACMC,IAAgBD,GAChBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,6UAA6U,CACjX,EACMC,IAA0B,CAC9B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mmBAAmmB,CACloB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2oDAA2oD,CAC1qD,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8YAA8Y,CAC7a,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,qBAAqB,EAAG,OAAQ,unBAAunB,CAC3qB,EACMC,IAAqBD,GACrBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k4BAAk4B,CACj6B,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAiB,SAAS,EAAG,OAAQ,wkCAAwkC,CACjoC,EACMC,IAAiBD,GACjBE,IAAYF,GACZG,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wWAAwW,CACvY,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAgB,eAAe,EAAG,OAAQ,qlCAAqlC,CACnpC,EACMC,IAAgBD,GAChBE,IAAiBF,GACjBG,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,2UAA2U,CACpX,EACMC,IAAYD,GACZE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,mcAAmc,CACnf,EACMC,IAAYD,GACZE,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,ggBAAggB,CAC/iB,EACMC,IAAkBD,GAClBE,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,gBAAgB,EAAG,OAAQ,2RAA2R,CACjV,EACMC,IAAiBD,GACjBE,IAA4B,CAChC,OAAQ,MACR,SAAU,6BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m5BAAm5B,CACl7B,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,6XAA6X,CAC7a,EACMC,IAAmBD,GACnBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ujBAAujB,CAC5lB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mLAAmL,CAClN,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,uqBAAuqB,CAC5sB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,kWAAkW,CACnZ,EACMC,IAAYD,GACZE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6VAA6V,CAC5X,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,eAAgB,cAAc,EAAG,OAAQ,0RAA0R,CAC9V,EACMC,IAAgBD,GAChBE,IAAgBF,GAChBG,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ogCAAogC,CACniC,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,w9BAAw9B,CAC7/B,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,qlCAAqlC,CACxoC,EACMC,IAAcD,GACdE,GAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,ydAAyd,CACrgB,EACMC,IAAcD,GACdE,GAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,0XAA0X,CACta,EACMC,IAAeD,GACfE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,glBAAglB,CAC5nB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wXAAwX,CACvZ,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,2rBAA2rB,CACruB,EACMC,IAAcD,GACdE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oiBAAoiB,CACnkB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+FAA+F,CACpI,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,QAAQ,EAAG,OAAQ,oSAAoS,CAC3U,EACMC,IAAWD,GACXE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kcAAkc,CACje,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6SAA6S,CAC5U,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8SAA8S,CAC7U,EACMC,GAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,uRAAuR,CACpU,EACMC,IAAgBD,GAChBE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kTAAkT,CACjV,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,uLAAuL,CAChO,EACMC,IAAYD,GACZE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,otBAAotB,CACzvB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,krBAAkrB,CACjtB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ykBAAykB,CAC9mB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,wzBAAwzB,CAC31B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w1BAAw1B,CACv3B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,OAAQ,MAAQ,OAAQ,OAAQ,OAAQ,MAAO,KAAK,EAAG,OAAQ,mBAAmB,CACtH,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gQAAgQ,CACrS,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2UAA2U,CAC1W,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,6MAA6M,CAChQ,EACMC,IAAeD,GACfE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2yBAA2yB,CAC10B,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,utCAAutC,CACtvC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,ofAAof,CACzhB,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6gBAA6gB,CAC5iB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4mBAA4mB,CAC3oB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,oZAAoZ,CACrc,EACMC,IAAYD,GACZE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,waAAwa,CACvc,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uvBAAuvB,CACtxB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,MAAO,KAAK,EAAG,KAAM,qIAAqI,CACrL,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+/BAA+/B,CAC9hC,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,IAAI,EAAG,OAAQ,0ZAA0Z,CAC7c,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,ieAAie,CACrhB,EACMC,IAAQD,GACRE,IAAgBF,GAChBG,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,SAAU,KAAK,EAAG,KAAM,i6BAAi6B,CAC59B,EACMC,IAAWD,GACXE,IAAQF,GACRG,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,4RAA4R,CAC5T,EACMC,GAA0B,CAC9B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,g8BAAg8B,CAC9+B,EACMC,IAAiBD,GACjBE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,onEAAonE,CAC9pE,EACMC,IAAaD,GACbE,IAA2B,CAC/B,OAAQ,MACR,SAAU,2BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,giBAAgiB,CAC/jB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAe,SAAU,YAAY,EAAG,OAAQ,yeAAye,CACrjB,EACMC,IAASD,GACTE,IAAgBF,GAChBG,IAAWH,GACXI,IAAeJ,GACfK,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,upBAAupB,CACtrB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2UAA2U,CAC1W,EACMC,IAAM,CACV,OAAQ,MACR,SAAU,IACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,KAAM,kLAAkL,CAClN,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6VAA6V,CAC5X,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,eAAe,EAAG,OAAQ,m5CAAm5C,CACz8C,EACMC,IAAiBD,GACjBE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wVAAwV,CACvX,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,krBAAkrB,CACjtB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,eAAe,EAAG,OAAQ,yrBAAyrB,CAC/uB,EACMC,IAAiBD,GACjBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,imBAAimB,CAC7oB,EACMC,IAAeD,GACfE,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,ucAAuc,CACxf,EACMC,IAAmBD,GACnBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wnBAAwnB,CACvpB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8SAA8S,CAC7U,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,6RAA6R,CAC1U,EACMC,IAAgBD,GAChBE,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,cAAc,EAAG,OAAQ,yvBAAyvB,CAC9yB,EACMC,IAAgBD,GAChBE,IAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,slBAAslB,CACrnB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6jBAA6jB,CAC5lB,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,4RAA4R,CAChV,EACMC,IAAeD,GACjBE,GAAQ,CACV,IAAA96D,IACA,IAAAC,IACA,IAAAC,IACA,IAAAC,IACA,IAAAC,IACA,IAAAC,IACA,IAAAC,IACA,IAAAC,IACA,IAAAC,IACA,IAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,qBAAAC,GACA,qBAAAC,IACA,KAAAC,IACA,WAAAC,GACA,WAAAC,IACA,aAAAC,IACA,YAAAC,GACA,YAAAC,IACA,cAAAC,IACA,UAAAC,GACA,aAAAC,IACA,OAAAC,IACA,6BAAAC,GACA,cAAAC,IACA,YAAAC,IACA,YAAAC,GACA,UAAAC,IACA,WAAAC,IACA,aAAAC,IACA,OAAAC,IACA,aAAAC,IACA,YAAAC,IACA,eAAAC,GACA,cAAAC,IACA,oBAAAC,IACA,2BAAAC,IACA,aAAAC,GACA,iBAAAC,IACA,iBAAAC,IACA,WAAAC,GACA,WAAAC,IACA,cAAAC,GACA,cAAAC,IACA,WAAAC,IACA,mBAAAC,GACA,aAAAC,IACA,OAAAC,IACA,OAAAC,IACA,QAAAC,GACA,uBAAAC,IACA,uBAAAC,GACA,qBAAAC,IACA,oBAAAC,IACA,cAAAC,IACA,cAAAC,IACA,iBAAAC,IACA,0BAAAC,GACA,iBAAAC,IACA,cAAAC,GACA,cAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,gBAAAC,IACA,WAAAC,GACA,eAAAC,IACA,0BAAAC,IACA,OAAAC,IACA,aAAAC,GACA,kBAAAC,IACA,iBAAAC,IACA,aAAAC,IACA,aAAAC,IACA,eAAAC,GACA,OAAAC,IACA,qBAAAC,IACA,cAAAC,GACA,cAAAC,IACA,kBAAAC,GACA,OAAAC,IACA,SAAAC,GACA,OAAAC,IACA,SAAAC,IACA,UAAAC,IACA,UAAAC,IACA,aAAAC,IACA,cAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,OAAAC,IACA,yBAAAC,GACA,iBAAAC,IACA,wBAAAC,IACA,QAAAC,GACA,eAAAC,IACA,WAAAC,IACA,gBAAAC,GACA,WAAAC,IACA,wBAAAC,IACA,UAAAC,GACA,iBAAAC,IACA,QAAAC,IACA,cAAAC,GACA,cAAAC,IACA,gBAAAC,IACA,IAAAC,IACA,eAAAC,IACA,SAAAC,GACA,YAAAC,IACA,WAAAC,IACA,aAAAC,IACA,WAAAC,IACA,QAAAC,GACA,gBAAAC,IACA,kBAAAC,IACA,gBAAAC,IACA,eAAAC,GACA,eAAAC,IACA,YAAAC,IACA,YAAAC,IACA,eAAAC,IACA,OAAAC,IACA,YAAAC,IACA,wBAAAC,IACA,cAAAC,GACA,QAAAC,IACA,YAAAC,GACA,YAAAC,IACA,qBAAAC,IACA,YAAAC,IACA,aAAAC,GACA,UAAAC,IACA,iBAAAC,IACA,cAAAC,GACA,kBAAAC,IACA,qBAAAC,IACA,uBAAAC,GACA,mBAAAC,IACA,WAAAC,IACA,eAAAC,IACA,IAAAC,IACA,cAAAC,GACA,cAAAC,IACA,UAAAC,IACA,cAAAC,IACA,qBAAAC,GACA,YAAAC,IACA,MAAAC,IACA,QAAAC,IACA,eAAAC,IACA,cAAAC,GACA,UAAAC,IACA,eAAAC,IACA,qBAAAC,IACA,QAAAC,GACA,QAAAC,IACA,aAAAC,IACA,kBAAAC,IACA,YAAAC,IACA,aAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,WAAAC,GACA,cAAAC,IACA,eAAAC,GACA,wBAAAC,IACA,oBAAAC,IACA,mBAAAC,GACA,mBAAAC,IACA,WAAAC,GACA,MAAAC,IACA,eAAAC,IACA,kBAAAC,IACA,aAAAC,IACA,QAAAC,IACA,4BAAAC,IACA,oBAAAC,GACA,oBAAAC,IACA,aAAAC,IACA,SAAAC,IACA,QAAAC,GACA,YAAAC,IACA,kBAAAC,IACA,YAAAC,IACA,cAAAC,GACA,cAAAC,IACA,aAAAC,IACA,UAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,qBAAAC,IACA,aAAAC,IACA,aAAAC,IACA,qBAAAC,IACA,OAAAC,GACA,UAAAC,IACA,cAAAC,IACA,eAAAC,GACA,aAAAC,IACA,aAAAC,GACA,cAAAC,IACA,gBAAAC,GACA,wBAAAC,IACA,eAAAC,GACA,WAAAC,IACA,OAAAC,IACA,kBAAAC,IACA,gBAAAC,IACA,YAAAC,IACA,YAAAC,IACA,oBAAAC,GACA,oBAAAC,IACA,oBAAAC,IACA,wBAAAC,GACA,UAAAC,IACA,oBAAAC,GACA,oBAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,oBAAAC,IACA,mBAAAC,GACA,gBAAAC,IACA,UAAAC,IACA,qBAAAC,GACA,SAAAC,IACA,SAAAC,IACA,aAAAC,IACA,aAAAC,IACA,OAAAC,IACA,WAAAC,IACA,UAAAC,IACA,YAAAC,GACA,aAAAC,IACA,eAAAC,IACA,eAAAC,IACA,WAAAC,IACA,WAAAC,GACA,WAAAC,IACA,OAAAC,IACA,oBAAAC,IACA,WAAAC,IACA,cAAAC,GACA,cAAAC,IACA,aAAAC,IACA,UAAAC,GACA,SAAAC,IACA,QAAAC,IACA,OAAAC,GACA,cAAAC,IACA,kBAAAC,GACA,iBAAAC,IACA,WAAAC,IACA,UAAAC,IACA,YAAAC,GACA,YAAAC,IACA,YAAAC,GACA,QAAAC,IACA,MAAAC,IACA,0BAAAC,IACA,aAAAC,IACA,aAAAC,IACA,SAAAC,GACA,aAAAC,IACA,aAAAC,IACA,aAAAC,GACA,aAAAC,IACA,OAAAC,IACA,UAAAC,IACA,eAAAC,GACA,SAAAC,IACA,cAAAC,GACA,YAAAC,IACA,kBAAAC,IACA,OAAAC,IACA,aAAAC,IACA,aAAAC,IACA,cAAAC,GACA,OAAAC,IACA,UAAAC,IACA,aAAAC,GACA,WAAAC,IACA,mBAAAC,IACA,gBAAAC,GACA,aAAAC,IACA,aAAAC,IACA,OAAAC,IACA,cAAAC,GACA,cAAAC,IACA,cAAAC,GACA,gBAAAC,IACA,mBAAAC,IACA,SAAAC,IACA,aAAAC,IACA,QAAAC,IACA,WAAAC,IACA,YAAAC,IACA,OAAAC,GACA,YAAAC,IACA,KAAAC,IACA,OAAAC,IACA,mBAAAC,IACA,OAAAC,IACA,YAAAC,IACA,YAAAC,IACA,YAAAC,IACA,WAAAC,GACA,OAAAC,IACA,oBAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,cAAAC,IACA,eAAAC,GACA,WAAAC,IACA,UAAAC,GACA,OAAAC,IACA,WAAAC,IACA,gBAAAC,IACA,kBAAAC,IACA,WAAAC,IACA,YAAAC,GACA,YAAAC,IACA,aAAAC,IACA,UAAAC,IACA,QAAAC,IACA,SAAAC,IACA,IAAAC,IACA,cAAAC,GACA,UAAAC,IACA,QAAAC,IACA,eAAAC,GACA,UAAAC,IACA,QAAAC,IACA,IAAAC,IACA,sBAAAC,IACA,UAAAC,IACA,aAAAC,GACA,eAAAC,IACA,WAAAC,IACA,mBAAAC,IACA,qBAAAC,IACA,eAAAC,GACA,YAAAC,IACA,4BAAAC,IACA,UAAAC,IACA,eAAAC,IACA,cAAAC,IACA,SAAAC,IACA,QAAAC,IACA,QAAAC,IACA,aAAAC,IACA,QAAAC,IACA,IAAAC,IACA,IAAAC,IACA,eAAAC,IACA,kBAAAC,GACA,eAAAC,IACA,eAAAC,IACA,kBAAAC,IACA,WAAAC,IACA,WAAAC,IACA,WAAAC,GACA,UAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,cAAAC,IACA,YAAAC,IACA,WAAAC,IACA,eAAAC,IACA,gBAAAC,IACA,WAAAC,IACA,WAAAC,IACA,QAAAC,IACA,gBAAAC,IACA,qBAAAC,IACA,SAAAC,GACA,cAAAC,IACA,eAAAC,GACA,iBAAAC,IACA,YAAAC,IACA,cAAAC,IACA,aAAAC,IACA,OAAAC,IACA,QAAAC,GACA,YAAAC,IACA,WAAAC,IACA,uBAAAC,IACA,oBAAAC,GACA,oBAAAC,IACA,IAAAC,IACA,UAAAC,GACA,SAAAC,IACA,0BAAAC,IACA,OAAAC,IACA,oBAAAC,IACA,WAAAC,IACA,aAAAC,GACA,aAAAC,IACA,eAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,cAAAC,IACA,MAAAC,IACA,WAAAC,IACA,QAAAC,IACA,YAAAC,IACA,kBAAAC,IACA,aAAAC,IACA,gBAAAC,IACA,IAAAC,IACA,eAAAC,IACA,eAAAC,IACA,aAAAC,IACA,gBAAAC,IACA,YAAAC,GACA,YAAAC,IACA,YAAAC,IACA,oBAAAC,IACA,MAAAC,GACA,SAAAC,IACA,eAAAC,IACA,mBAAAC,GACA,eAAAC,IACA,OAAAC,IACA,SAAAC,IACA,QAAAC,IACA,MAAAC,IACA,YAAAC,IACA,eAAAC,GACA,eAAAC,IACA,WAAAC,GACA,kBAAAC,IACA,kBAAAC,IACA,SAAAC,GACA,uBAAAC,IACA,UAAAC,GACA,SAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,cAAAC,IACA,oBAAAC,IACA,SAAAC,IACA,aAAAC,IACA,oBAAAC,IACA,yBAAAC,IACA,OAAAC,IACA,aAAAC,IACA,QAAAC,IACA,gBAAAC,GACA,QAAAC,IACA,sBAAAC,GACA,SAAAC,IACA,YAAAC,GACA,gBAAAC,IACA,SAAAC,IACA,kBAAAC,IACA,WAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,eAAAC,IACA,gBAAAC,IACA,sBAAAC,IACA,iBAAAC,GACA,YAAAC,IACA,QAAAC,IACA,WAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,aAAAC,GACA,YAAAC,IACA,iBAAAC,GACA,cAAAC,IACA,kBAAAC,IACA,YAAAC,IACA,QAAAC,IACA,gBAAAC,IACA,cAAAC,IACA,mBAAAC,IACA,cAAAC,GACA,SAAAC,IACA,YAAAC,GACA,cAAAC,IACA,YAAAC,GACA,cAAAC,IACA,cAAAC,IACA,kBAAAC,GACA,cAAAC,IACA,aAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,WAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,IAAAC,IACA,OAAAC,IACA,WAAAC,GACA,aAAAC,IACA,eAAAC,GACA,eAAAC,IACA,YAAAC,GACA,QAAAC,IACA,aAAAC,IACA,kBAAAC,IACA,WAAAC,IACA,OAAAC,IACA,kBAAAC,GACA,gBAAAC,IACA,YAAAC,IACA,SAAAC,IACA,YAAAC,IACA,UAAAC,IACA,aAAAC,IACA,kBAAAC,IACA,YAAAC,IACA,eAAAC,GACA,cAAAC,IACA,mBAAAC,GACA,cAAAC,IACA,YAAAC,IACA,yBAAAC,IACA,cAAAC,GACA,aAAAC,IACA,OAAAC,GACA,QAAAC,IACA,aAAAC,IACA,OAAAC,GACA,UAAAC,IACA,YAAAC,IACA,UAAAC,GACA,WAAAC,IACA,YAAAC,IACA,cAAAC,IACA,OAAAC,IACA,aAAAC,IACA,cAAAC,IACA,YAAAC,IACA,WAAAC,IACA,gBAAAC,GACA,cAAAC,IACA,iBAAAC,GACA,eAAAC,IACA,OAAAC,IACA,qBAAAC,GACA,OAAAC,IACA,SAAAC,IACA,aAAAC,GACA,aAAAC,IACA,OAAAC,IACA,UAAAC,IACA,aAAAC,IACA,UAAAC,IACA,aAAAC,IACA,sBAAAC,IACA,mBAAAC,IACA,kBAAAC,GACA,cAAAC,IACA,eAAAC,GACA,WAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,oBAAAC,IACA,WAAAC,GACA,WAAAC,IACA,eAAAC,GACA,YAAAC,IACA,gBAAAC,IACA,QAAAC,IACA,eAAAC,GACA,YAAAC,IACA,OAAAC,IACA,WAAAC,IACA,gBAAAC,IACA,aAAAC,GACA,aAAAC,IACA,YAAAC,IACA,OAAAC,IACA,SAAAC,IACA,QAAAC,IACA,aAAAC,IACA,MAAAC,IACA,UAAAC,IACA,cAAAC,IACA,eAAAC,IACA,eAAAC,IACA,YAAAC,IACA,yBAAAC,IACA,eAAAC,GACA,kBAAAC,IACA,eAAAC,IACA,aAAAC,GACA,aAAAC,IACA,iBAAAC,IACA,UAAAC,IACA,eAAAC,GACA,UAAAC,IACA,QAAAC,IACA,eAAAC,IACA,YAAAC,IACA,MAAAC,IACA,QAAAC,GACA,WAAAC,IACA,UAAAC,IACA,WAAAC,GACA,oBAAAC,IACA,WAAAC,IACA,WAAAC,IACA,cAAAC,GACA,mBAAAC,IACA,WAAAC,IACA,aAAAC,GACA,aAAAC,IACA,UAAAC,IACA,WAAAC,IACA,WAAAC,GACA,MAAAC,IACA,OAAAC,IACA,QAAAC,IACA,cAAAC,GACA,cAAAC,IACA,aAAAC,GACA,aAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,aAAAC,IACA,UAAAC,IACA,gBAAAC,IACA,SAAAC,IACA,UAAAC,IACA,SAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,mBAAAC,IACA,kBAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,WAAAC,IACA,UAAAC,IACA,oCAAAC,IACA,eAAAC,GACA,MAAAC,IACA,YAAAC,IACA,UAAAC,IACA,uBAAAC,IACA,UAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,sBAAAC,IACA,cAAAC,IACA,WAAAC,GACA,eAAAC,IACA,WAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,qBAAAC,GACA,eAAAC,IACA,cAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,aAAAC,GACA,mBAAAC,IACA,qBAAAC,GACA,qBAAAC,IACA,UAAAC,IACA,SAAAC,IACA,MAAAC,IACA,kBAAAC,IACA,QAAAC,IACA,gBAAAC,IACA,mBAAAC,GACA,eAAAC,IACA,eAAAC,IACA,mBAAAC,IACA,OAAAC,IACA,aAAAC,IACA,cAAAC,GACA,cAAAC,IACA,QAAAC,IACA,sBAAAC,GACA,oBAAAC,IACA,YAAAC,IACA,mBAAAC,GACA,aAAAC,IACA,QAAAC,IACA,cAAAC,GACA,cAAAC,IACA,YAAAC,GACA,QAAAC,IACA,aAAAC,IACA,OAAAC,IACA,SAAAC,IACA,cAAAC,GACA,kBAAAC,IACA,sBAAAC,IACA,eAAAC,GACA,cAAAC,IACA,iBAAAC,IACA,UAAAC,IACA,kBAAAC,IACA,OAAAC,IACA,QAAAC,IACA,qBAAAC,IACA,WAAAC,GACA,SAAAC,IACA,YAAAC,GACA,aAAAC,IACA,eAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,oBAAAC,IACA,WAAAC,IACA,YAAAC,IACA,qBAAAC,GACA,gBAAAC,IACA,iBAAAC,IACA,YAAAC,GACA,eAAAC,IACA,YAAAC,GACA,eAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,kBAAAC,GACA,UAAAC,IACA,YAAAC,IACA,iBAAAC,GACA,gBAAAC,IACA,mBAAAC,IACA,WAAAC,IACA,aAAAC,GACA,aAAAC,IACA,iBAAAC,GACA,eAAAC,IACA,eAAAC,IACA,uBAAAC,GACA,oBAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,eAAAC,GACA,UAAAC,IACA,OAAAC,IACA,mBAAAC,IACA,eAAAC,IACA,mBAAAC,IACA,eAAAC,GACA,YAAAC,IACA,YAAAC,GACA,QAAAC,IACA,QAAAC,IACA,sBAAAC,IACA,aAAAC,IACA,cAAAC,IACA,UAAAC,IACA,mBAAAC,IACA,oBAAAC,GACA,cAAAC,IACA,aAAAC,GACA,cAAAC,IACA,SAAAC,IACA,oBAAAC,GACA,eAAAC,IACA,QAAAC,IACA,WAAAC,IACA,SAAAC,IACA,uBAAAC,IACA,SAAAC,IACA,iBAAAC,IACA,WAAAC,IACA,IAAAC,IACA,eAAAC,GACA,SAAAC,IACA,WAAAC,IACA,IAAAC,IACA,uBAAAC,GACA,kBAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,IAAAC,IACA,YAAAC,IACA,YAAAC,IACA,cAAAC,GACA,KAAAC,IACA,mBAAAC,GACA,mBAAAC,IACA,oBAAAC,IACA,SAAAC,IACA,OAAAC,GACA,WAAAC,IACA,SAAAC,GACA,SAAAC,IACA,cAAAC,IACA,mBAAAC,IACA,mBAAAC,GACA,gBAAAC,IACA,eAAAC,IACA,aAAAC,IACA,WAAAC,IACA,oBAAAC,GACA,gBAAAC,IACA,SAAAC,IACA,WAAAC,IACA,gBAAAC,IACA,kBAAAC,GACA,YAAAC,IACA,mBAAAC,IACA,mBAAAC,IACA,cAAAC,IACA,aAAAC,IACA,iBAAAC,GACA,cAAAC,IACA,OAAAC,IACA,eAAAC,GACA,eAAAC,IACA,4BAAAC,IACA,uBAAAC,IACA,yBAAAC,GACA,eAAAC,IACA,eAAAC,IACA,UAAAC,GACA,MAAAC,IACA,MAAAC,IACA,aAAAC,IACA,cAAAC,IACA,IAAAC,IACA,OAAAC,IACA,OAAAC,IACA,OAAAC,GACA,MAAAC,IACA,mBAAAC,IACA,WAAAC,GACA,WAAAC,IACA,gBAAAC,IACA,YAAAC,IACA,YAAAC,IACA,eAAAC,IACA,WAAAC,IACA,eAAAC,IACA,eAAAC,GACA,WAAAC,IACA,gBAAAC,IACA,OAAAC,IACA,cAAAC,GACA,YAAAC,IACA,QAAAC,IACA,cAAAC,IACA,eAAAC,GACA,UAAAC,IACA,UAAAC,IACA,QAAAC,IACA,cAAAC,GACA,sBAAAC,IACA,mBAAAC,IACA,kBAAAC,GACA,iBAAAC,IACA,cAAAC,IACA,YAAAC,GACA,YAAAC,IACA,iBAAAC,IACA,aAAAC,IACA,YAAAC,GACA,WAAAC,IACA,eAAAC,IACA,uBAAAC,IACA,IAAAC,IACA,OAAAC,IACA,oBAAAC,GACA,QAAAC,IACA,cAAAC,IACA,iBAAAC,IACA,QAAAC,IACA,eAAAC,IACA,YAAAC,GACA,WAAAC,IACA,eAAAC,IACA,aAAAC,IACA,qBAAAC,GACA,WAAAC,IACA,eAAAC,GACA,WAAAC,IACA,cAAAC,IACA,cAAAC,GACA,cAAAC,IACA,mBAAAC,IACA,aAAAC,GACA,WAAAC,IACA,aAAAC,IACA,IAAAC,IACA,qBAAAC,GACA,eAAAC,IACA,eAAAC,IACA,qBAAAC,IACA,OAAAC,IACA,cAAAC,IACA,YAAAC,IACA,aAAAC,IACA,WAAAC,IACA,WAAAC,IACA,oBAAAC,IACA,mBAAAC,IACA,kCAAAC,IACA,uBAAAC,GACA,QAAAC,IACA,SAAAC,IACA,eAAAC,GACA,eAAAC,IACA,UAAAC,IACA,gBAAAC,IACA,aAAAC,IACA,YAAAC,IACA,aAAAC,GACA,iBAAAC,IACA,gBAAAC,IACA,WAAAC,GACA,mBAAAC,IACA,qBAAAC,GACA,YAAAC,IACA,aAAAC,GACA,WAAAC,IACA,YAAAC,IACA,SAAAC,IACA,iBAAAC,IACA,YAAAC,IACA,SAAAC,GACA,YAAAC,IACA,SAAAC,IACA,OAAAC,IACA,YAAAC,GACA,QAAAC,IACA,YAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,iBAAAC,IACA,iBAAAC,IACA,eAAAC,IACA,aAAAC,IACA,YAAAC,IACA,SAAAC,IACA,YAAAC,GACA,WAAAC,IACA,aAAAC,IACA,MAAAC,IACA,0BAAAC,IACA,aAAAC,IACA,QAAAC,IACA,oBAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,YAAAC,IACA,kBAAAC,IACA,OAAAC,IACA,YAAAC,IACA,cAAAC,GACA,cAAAC,IACA,eAAAC,GACA,WAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,cAAAC,IACA,eAAAC,GACA,WAAAC,IACA,aAAAC,IACA,cAAAC,GACA,eAAAC,IACA,aAAAC,GACA,aAAAC,IACA,WAAAC,IACA,eAAAC,IACA,mBAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,OAAAC,IACA,YAAAC,GACA,SAAAC,IACA,MAAAC,IACA,aAAAC,GACA,SAAAC,IACA,mBAAAC,IACA,yBAAAC,IACA,aAAAC,IACA,YAAAC,IACA,MAAAC,IACA,mBAAAC,IACA,WAAAC,IACA,SAAAC,GACA,UAAAC,IACA,gBAAAC,IACA,MAAAC,IACA,mBAAAC,IACA,eAAAC,GACA,SAAAC,IACA,iBAAAC,IACA,YAAAC,GACA,QAAAC,IACA,eAAAC,IACA,OAAAC,GACA,WAAAC,IACA,aAAAC,GACA,OAAAC,IACA,SAAAC,IACA,kBAAAC,GACA,mBAAAC,IACA,SAAAC,GACA,UAAAC,IACA,cAAAC,GACA,aAAAC,IACA,YAAAC,IACA,UAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,oBAAAC,GACA,iBAAAC,IACA,eAAAC,IACA,YAAAC,IACA,cAAAC,IACA,eAAAC,IACA,eAAAC,IACA,eAAAC,GACA,eAAAC,IACA,mBAAAC,GACA,mBAAAC,IACA,qBAAAC,IACA,OAAAC,IACA,aAAAC,IACA,YAAAC,IACA,qBAAAC,GACA,WAAAC,IACA,aAAAC,IACA,aAAAC,IACA,oBAAAC,IACA,aAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,QAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,gBAAAC,IACA,gBAAAC,IACA,WAAAC,GACA,UAAAC,IACA,YAAAC,GACA,gBAAAC,IACA,aAAAC,IACA,cAAAC,IACA,UAAAC,IACA,cAAAC,IACA,eAAAC,IACA,cAAAC,IACA,cAAAC,IACA,YAAAC,IACA,YAAAC,IACA,WAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,QAAAC,IACA,cAAAC,GACA,iBAAAC,IACA,oBAAAC,IACA,cAAAC,IACA,MAAAC,IACA,aAAAC,GACA,gBAAAC,IACA,QAAAC,GACA,SAAAC,IACA,SAAAC,IACA,QAAAC,IACA,SAAAC,IACA,YAAAC,GACA,QAAAC,IACA,aAAAC,IACA,eAAAC,IACA,gBAAAC,IACA,aAAAC,IACA,YAAAC,IACA,oBAAAC,IACA,QAAAC,IACA,YAAAC,IACA,SAAAC,IACA,WAAAC,IACA,IAAAC,IACA,kBAAAC,IACA,YAAAC,IACA,oBAAAC,GACA,kBAAAC,IACA,aAAAC,GACA,KAAAC,IACA,UAAAC,IACA,YAAAC,GACA,QAAAC,IACA,IAAAC,IACA,kBAAAC,GACA,SAAAC,IACA,aAAAC,IACA,QAAAC,IACA,cAAAC,GACA,SAAAC,IACA,gBAAAC,IACA,eAAAC,GACA,iBAAAC,IACA,kBAAAC,GACA,UAAAC,IACA,aAAAC,GACA,SAAAC,IACA,cAAAC,GACA,qBAAAC,IACA,gBAAAC,IACA,gBAAAC,IACA,QAAAC,IACA,WAAAC,IACA,YAAAC,IACA,YAAAC,IACA,MAAAC,IACA,UAAAC,IACA,cAAAC,GACA,eAAAC,IACA,OAAAC,IACA,WAAAC,IACA,WAAAC,GACA,gBAAAC,IACA,YAAAC,IACA,mBAAAC,IACA,SAAAC,IACA,QAAAC,IACA,YAAAC,GACA,mBAAAC,IACA,eAAAC,IACA,aAAAC,IACA,cAAAC,IACA,eAAAC,IACA,SAAAC,IACA,eAAAC,IACA,YAAAC,GACA,iBAAAC,IACA,WAAAC,IACA,aAAAC,GACA,SAAAC,IACA,aAAAC,GACA,aAAAC,IACA,gBAAAC,IACA,SAAAC,GACA,YAAAC,IACA,cAAAC,IACA,SAAAC,IACA,QAAAC,IACA,SAAAC,IACA,cAAAC,GACA,iBAAAC,IACA,kBAAAC,IACA,qBAAAC,GACA,mBAAAC,IACA,QAAAC,IACA,gBAAAC,IACA,UAAAC,IACA,4BAAAC,GACA,wBAAAC,IACA,WAAAC,IACA,QAAAC,IACA,aAAAC,IACA,aAAAC,IACA,OAAAC,IACA,cAAAC,IACA,cAAAC,IACA,cAAAC,GACA,eAAAC,IACA,gBAAAC,IACA,iBAAAC,IACA,SAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,kBAAAC,IACA,sBAAAC,IACA,OAAAC,IACA,YAAAC,GACA,MAAAC,IACA,sBAAAC,GACA,kBAAAC,IACA,WAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,cAAAC,IACA,0BAAAC,IACA,qBAAAC,GACA,eAAAC,IACA,eAAAC,IACA,eAAAC,IACA,aAAAC,GACA,qBAAAC,IACA,cAAAC,GACA,SAAAC,IACA,aAAAC,IACA,kBAAAC,GACA,cAAAC,IACA,MAAAC,IACA,aAAAC,GACA,UAAAC,IACA,aAAAC,GACA,eAAAC,IACA,WAAAC,GACA,mBAAAC,IACA,MAAAC,IACA,aAAAC,IACA,QAAAC,GACA,WAAAC,IACA,QAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,kBAAAC,IACA,aAAAC,IACA,YAAAC,IACA,YAAAC,IACA,uBAAAC,GACA,mCAAAC,IACA,kBAAAC,IACA,wCAAAC,IACA,OAAAC,GACA,MAAAC,IACA,eAAAC,GACA,YAAAC,IACA,SAAAC,IACA,WAAAC,IACA,cAAAC,IACA,sBAAAC,IACA,eAAAC,GACA,eAAAC,IACA,QAAAC,IACA,iBAAAC,IACA,iBAAAC,IACA,eAAAC,IACA,eAAAC,IACA,cAAAC,GACA,UAAAC,IACA,IAAAC,IACA,qBAAAC,GACA,gBAAAC,IACA,QAAAC,GACA,YAAAC,IACA,eAAAC,GACA,eAAAC,IACA,SAAAC,IACA,SAAAC,IACA,kBAAAC,IACA,IAAAC,IACA,WAAAC,IACA,WAAAC,IACA,YAAAC,IACA,sBAAAC,GACA,gBAAAC,IACA,2BAAAC,GACA,eAAAC,IACA,eAAAC,IACA,2BAAAC,IACA,eAAAC,GACA,mBAAAC,IACA,UAAAC,IACA,YAAAC,IACA,cAAAC,GACA,WAAAC,IACA,eAAAC,IACA,QAAAC,IACA,SAAAC,IACA,UAAAC,GACA,WAAAC,IACA,aAAAC,IACA,eAAAC,IACA,SAAAC,IACA,QAAAC,IACA,WAAAC,IACA,QAAAC,IACA,iBAAAC,IACA,eAAAC,IACA,mBAAAC,GACA,YAAAC,IACA,SAAAC,IACA,WAAAC,IACA,YAAAC,GACA,oBAAAC,IACA,UAAAC,IACA,aAAAC,IACA,MAAAC,GACA,WAAAC,IACA,cAAAC,IACA,cAAAC,IACA,gCAAAC,IACA,mBAAAC,IACA,eAAAC,GACA,SAAAC,IACA,cAAAC,IACA,SAAAC,IACA,aAAAC,IACA,gBAAAC,IACA,IAAAC,IACA,WAAAC,GACA,OAAAC,IACA,YAAAC,IACA,sBAAAC,IACA,OAAAC,IACA,mBAAAC,IACA,WAAAC,IACA,WAAAC,GACA,OAAAC,IACA,aAAAC,GACA,YAAAC,IACA,aAAAC,GACA,kBAAAC,IACA,aAAAC,IACA,kBAAAC,IACA,UAAAC,IACA,SAAAC,GACA,gBAAAC,IACA,cAAAC,IACA,UAAAC,GACA,MAAAC,IACA,cAAAC,IACA,YAAAC,GACA,WAAAC,IACA,SAAAC,GACA,iBAAAC,IACA,UAAAC,GACA,SAAAC,IACA,yBAAAC,IACA,QAAAC,GACA,OAAAC,IACA,UAAAC,IACA,YAAAC,IACA,eAAAC,IACA,gBAAAC,IACA,IAAAC,IACA,cAAAC,IACA,UAAAC,IACA,WAAAC,IACA,sBAAAC,GACA,WAAAC,IACA,cAAAC,GACA,UAAAC,IACA,gBAAAC,IACA,WAAAC,GACA,UAAAC,IACA,mBAAAC,GACA,eAAAC,IACA,WAAAC,IACA,WAAAC,IACA,QAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,cAAAC,IACA,SAAAC,GACA,iBAAAC,IACA,OAAAC,IACA,YAAAC,IACA,SAAAC,IACA,YAAAC,IACA,QAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,gBAAAC,GACA,eAAAC,IACA,UAAAC,IACA,YAAAC,IACA,OAAAC,GACA,MAAAC,IACA,aAAAC,IACA,UAAAC,IACA,QAAAC,IACA,OAAAC,IACA,SAAAC,IACA,mBAAAC,IACA,UAAAC,GACA,MAAAC,IACA,MAAAC,IACA,MAAAC,IACA,MAAAC,IACA,YAAAC,GACA,SAAAC,IACA,MAAAC,IACA,QAAAC,IACA,MAAAC,IACA,SAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,YAAAC,IACA,WAAAC,IACA,WAAAC,IACA,aAAAC,GACA,qBAAAC,IACA,mBAAAC,IACA,aAAAC,IACA,qBAAAC,GACA,iBAAAC,IACA,oBAAAC,IACA,WAAAC,IACA,YAAAC,IACA,YAAAC,IACA,gBAAAC,IACA,YAAAC,IACA,aAAAC,IACA,WAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,oBAAAC,IACA,WAAAC,GACA,YAAAC,IACA,YAAAC,IACA,aAAAC,GACA,WAAAC,IACA,sBAAAC,IACA,UAAAC,IACA,qBAAAC,IACA,MAAAC,IACA,aAAAC,GACA,gBAAAC,IACA,MAAAC,GACA,aAAAC,IACA,kBAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,cAAAC,IACA,wBAAAC,IACA,UAAAC,IACA,eAAAC,IACA,kBAAAC,IACA,qBAAAC,GACA,gBAAAC,IACA,QAAAC,IACA,MAAAC,IACA,UAAAC,GACA,UAAAC,IACA,UAAAC,IACA,kBAAAC,GACA,eAAAC,IACA,eAAAC,IACA,kBAAAC,IACA,OAAAC,IACA,cAAAC,IACA,kBAAAC,IACA,aAAAC,IACA,aAAAC,IACA,cAAAC,IACA,iBAAAC,GACA,eAAAC,IACA,cAAAC,GACA,eAAAC,IACA,OAAAC,IACA,cAAAC,IACA,iBAAAC,GACA,UAAAC,IACA,YAAAC,IACA,UAAAC,GACA,OAAAC,IACA,SAAAC,IACA,gBAAAC,GACA,QAAAC,IACA,eAAAC,IACA,gBAAAC,IACA,cAAAC,IACA,OAAAC,IACA,eAAAC,GACA,WAAAC,IACA,QAAAC,IACA,QAAAC,IACA,UAAAC,IACA,YAAAC,GACA,gBAAAC,IACA,oBAAAC,IACA,mBAAAC,IACA,WAAAC,GACA,cAAAC,IACA,eAAAC,IACA,aAAAC,IACA,YAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,SAAAC,IACA,eAAAC,IACA,SAAAC,IACA,wBAAAC,GACA,QAAAC,IACA,OAAAC,IACA,WAAAC,IACA,kBAAAC,IACA,MAAAC,IACA,YAAAC,IACA,cAAAC,GACA,UAAAC,IACA,WAAAC,IACA,eAAAC,GACA,QAAAC,IACA,WAAAC,IACA,OAAAC,GACA,QAAAC,IACA,YAAAC,GACA,4BAAAC,IACA,WAAAC,IACA,OAAAC,IACA,OAAAC,IACA,oBAAAC,IACA,aAAAC,IACA,kBAAAC,GACA,SAAAC,IACA,wBAAAC,GACA,qBAAAC,IACA,cAAAC,IACA,qBAAAC,GACA,YAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,YAAAC,IACA,gBAAAC,IACA,eAAAC,IACA,UAAAC,GACA,WAAAC,IACA,UAAAC,IACA,YAAAC,GACA,YAAAC,IACA,eAAAC,IACA,kBAAAC,IACA,0BAAAC,IACA,cAAAC,IACA,cAAAC,GACA,UAAAC,IACA,WAAAC,IACA,kBAAAC,IACA,cAAAC,IACA,SAAAC,GACA,WAAAC,IACA,aAAAC,IACA,YAAAC,IACA,WAAAC,GACA,mBAAAC,IACA,cAAAC,IACA,YAAAC,IACA,kBAAAC,IACA,oBAAAC,IACA,eAAAC,GACA,cAAAC,IACA,UAAAC,IACA,KAAAC,GACA,aAAAC,IACA,QAAAC,IACA,SAAAC,IACA,YAAAC,GACA,QAAAC,IACA,eAAAC,IACA,aAAAC,GACA,aAAAC,IACA,aAAAC,IACA,OAAAC,IACA,WAAAC,GACA,WAAAC,IACA,IAAAC,IACA,qBAAAC,GACA,eAAAC,IACA,YAAAC,GACA,eAAAC,IACA,OAAAC,IACA,eAAAC,IACA,mBAAAC,GACA,SAAAC,IACA,eAAAC,IACA,kBAAAC,GACA,eAAAC,IACA,WAAAC,GACA,eAAAC,IACA,eAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,OAAAC,IACA,cAAAC,GACA,aAAAC,IACA,cAAAC,IACA,eAAAC,IACA,OAAAC,GACA,iBAAAC,IACA,kBAAAC,GACA,cAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,MAAAC,IACA,cAAAC,GACA,cAAAC,IACA,OAAAC,GACA,MAAAC,IACA,SAAAC,IACA,WAAAC,IACA,QAAAC,GACA,QAAAC,IACA,WAAAC,IACA,SAAAC,IACA,QAAAC,IACA,wBAAAC,GACA,SAAAC,IACA,iBAAAC,GACA,oBAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,OAAAC,IACA,YAAAC,IACA,YAAAC,GACA,eAAAC,IACA,UAAAC,IACA,eAAAC,GACA,eAAAC,IACA,kBAAAC,IACA,eAAAC,IACA,gBAAAC,IACA,YAAAC,IACA,SAAAC,IACA,UAAAC,IACA,QAAAC,IACA,aAAAC,GACA,MAAAC,IACA,SAAAC,IACA,SAAAC,IACA,aAAAC,IACA,MAAAC,IACA,SAAAC,IACA,YAAAC,GACA,aAAAC,IACA,cAAAC,IACA,mBAAAC,IACA,QAAAC,IACA,eAAAC,IACA,kBAAAC,IACA,cAAAC,GACA,OAAAC,IACA,cAAAC,IACA,YAAAC,IACA,SAAAC,GACA,gBAAAC,IACA,aAAAC,IACA,OAAAC,IACA,UAAAC,IACA,gBAAAC,IACA,aAAAC,IACA,cAAAC,IACA,WAAAC,IACA,aAAAC,IACA,SAAAC,IACA,UAAAC,IACA,mBAAAC,IACA,aAAAC,IACA,eAAAC,IACA,UAAAC,IACA,UAAAC,GACA,SAAAC,IACA,WAAAC,IACA,aAAAC,IACA,iBAAAC,GACA,WAAAC,IACA,QAAAC,IACA,eAAAC,GACA,eAAAC,IACA,eAAAC,IACA,cAAAC,IACA,cAAAC,IACA,mBAAAC,IACA,UAAAC,GACA,aAAAC,IACA,cAAAC,IACA,oBAAAC,IACA,UAAAC,IACA,YAAAC,GACA,QAAAC,IACA,YAAAC,GACA,YAAAC,IACA,SAAAC,IACA,gBAAAC,GACA,OAAAC,IACA,SAAAC,IACA,YAAAC,IACA,SAAAC,GACA,UAAAC,IACA,UAAAC,IACA,QAAAC,IACA,QAAAC,IACA,QAAAC,GACA,OAAAC,IACA,YAAAC,IACA,mBAAAC,IACA,UAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,WAAAC,IACA,UAAAC,IACA,cAAAC,GACA,iBAAAC,IACA,UAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,qBAAAC,IACA,QAAAC,IACA,eAAAC,GACA,YAAAC,IACA,WAAAC,IACA,aAAAC,GACA,kBAAAC,IACA,SAAAC,IACA,kBAAAC,GACA,UAAAC,IACA,oBAAAC,GACA,gBAAAC,IACA,aAAAC,GACA,qBAAAC,IACA,SAAAC,GACA,cAAAC,IACA,mBAAAC,GACA,kBAAAC,IACA,eAAAC,IACA,eAAAC,IACA,cAAAC,GACA,WAAAC,IACA,oBAAAC,GACA,oBAAAC,IACA,qBAAAC,IACA,SAAAC,IACA,oBAAAC,IACA,QAAAC,IACA,YAAAC,GACA,QAAAC,IACA,MAAAC,IACA,SAAAC,IACA,OAAAC,IACA,iBAAAC,GACA,eAAAC,IACA,SAAAC,IACA,UAAAC,IACA,QAAAC,IACA,aAAAC,IACA,iBAAAC,IACA,eAAAC,GACA,SAAAC,IACA,QAAAC,IACA,cAAAC,IACA,UAAAC,IACA,eAAAC,GACA,eAAAC,IACA,cAAAC,GACA,cAAAC,IACA,cAAAC,IACA,UAAAC,IACA,+BAAAC,GACA,YAAAC,IACA,SAAAC,IACA,IAAAC,IACA,QAAAC,IACA,cAAAC,IACA,WAAAC,IACA,kBAAAC,IACA,wBAAAC,IACA,YAAAC,IACA,MAAAC,IACA,uBAAAC,IACA,SAAAC,GACA,aAAAC,IACA,gBAAAC,IACA,WAAAC,IACA,UAAAC,IACA,QAAAC,GACA,SAAAC,IACA,SAAAC,IACA,SAAAC,IACA,aAAAC,IACA,aAAAC,GACA,aAAAC,IACA,qBAAAC,GACA,iBAAAC,IACA,cAAAC,IACA,wBAAAC,IACA,YAAAC,GACA,cAAAC,IACA,aAAAC,IACA,SAAAC,IACA,QAAAC,IACA,6BAAAC,IACA,YAAAC,GACA,iBAAAC,IACA,kBAAAC,GACA,UAAAC,IACA,UAAAC,IACA,iBAAAC,IACA,YAAAC,GACA,QAAAC,IACA,SAAAC,IACA,YAAAC,IACA,YAAAC,GACA,QAAAC,IACA,aAAAC,IACA,iBAAAC,IACA,MAAAC,GACA,OAAAC,IACA,cAAAC,IACA,gBAAAC,GACA,eAAAC,IACA,kBAAAC,GACA,aAAAC,IACA,iBAAAC,IACA,SAAAC,IACA,UAAAC,GACA,aAAAC,IACA,IAAAC,IACA,YAAAC,GACA,SAAAC,IACA,aAAAC,GACA,MAAAC,IACA,OAAAC,IACA,WAAAC,IACA,QAAAC,IACA,uBAAAC,GACA,WAAAC,IACA,mBAAAC,IACA,YAAAC,IACA,mBAAAC,IACA,kBAAAC,IACA,uBAAAC,IACA,WAAAC,GACA,aAAAC,IACA,YAAAC,IACA,YAAAC,IACA,gBAAAC,IACA,gBAAAC,GACA,WAAAC,IACA,UAAAC,IACA,MAAAC,IACA,cAAAC,GACA,cAAAC,IACA,sBAAAC,GACA,cAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,WAAAC,IACA,WAAAC,IACA,oBAAAC,GACA,gBAAAC,IACA,YAAAC,IACA,sBAAAC,GACA,sBAAAC,IACA,UAAAC,IACA,WAAAC,IACA,QAAAC,GACA,cAAAC,IACA,gBAAAC,IACA,WAAAC,IACA,gBAAAC,IACA,YAAAC,GACA,cAAAC,IACA,aAAAC,IACA,wBAAAC,IACA,UAAAC,IACA,aAAAC,IACA,iBAAAC,GACA,mBAAAC,IACA,WAAAC,IACA,QAAAC,GACA,eAAAC,IACA,UAAAC,IACA,cAAAC,IACA,cAAAC,GACA,cAAAC,IACA,eAAAC,IACA,eAAAC,GACA,UAAAC,IACA,cAAAC,GACA,UAAAC,IACA,iBAAAC,GACA,gBAAAC,IACA,WAAAC,GACA,eAAAC,IACA,0BAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,OAAAC,IACA,cAAAC,IACA,QAAAC,IACA,UAAAC,GACA,UAAAC,IACA,gBAAAC,IACA,cAAAC,GACA,cAAAC,IACA,cAAAC,IACA,QAAAC,IACA,QAAAC,IACA,YAAAC,GACA,YAAAC,IACA,aAAAC,GACA,YAAAC,IACA,sBAAAC,GACA,aAAAC,IACA,WAAAC,IACA,YAAAC,IACA,WAAAC,GACA,YAAAC,IACA,cAAAC,IACA,iBAAAC,IACA,YAAAC,GACA,SAAAC,IACA,QAAAC,IACA,iBAAAC,IACA,OAAAC,IACA,uBAAAC,GACA,cAAAC,IACA,gBAAAC,IACA,YAAAC,GACA,UAAAC,IACA,YAAAC,IACA,YAAAC,IACA,UAAAC,IACA,WAAAC,IACA,cAAAC,IACA,aAAAC,IACA,SAAAC,IACA,MAAAC,IACA,aAAAC,GACA,aAAAC,IACA,WAAAC,IACA,uBAAAC,IACA,OAAAC,IACA,sBAAAC,IACA,cAAAC,IACA,cAAAC,GACA,UAAAC,IACA,QAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,aAAAC,IACA,QAAAC,IACA,kBAAAC,GACA,MAAAC,IACA,cAAAC,IACA,aAAAC,GACA,SAAAC,IACA,MAAAC,IACA,IAAAC,IACA,wBAAAC,GACA,eAAAC,IACA,YAAAC,GACA,WAAAC,IACA,yBAAAC,IACA,kBAAAC,GACA,OAAAC,IACA,cAAAC,IACA,SAAAC,IACA,aAAAC,IACA,WAAAC,IACA,SAAAC,IACA,IAAAC,IACA,UAAAC,IACA,eAAAC,GACA,eAAAC,IACA,UAAAC,IACA,gBAAAC,IACA,kBAAAC,GACA,eAAAC,IACA,aAAAC,GACA,aAAAC,IACA,mBAAAC,GACA,iBAAAC,IACA,UAAAC,IACA,YAAAC,IACA,QAAAC,GACA,cAAAC,IACA,gBAAAC,GACA,cAAAC,IACA,qBAAAC,IACA,oBAAAC,IACA,SAAAC,GACA,aAAAC,GACF,ECr0SA,IAAME,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,WAAW,EAAG,OAAQ,uqBAAuqB,CACxtB,EACMC,IAAaD,GACbE,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,6ZAA6Z,CACzc,EACMC,IAAeD,GACfE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,MAAO,WAAY,WAAW,EAAG,OAAQ,6cAA6c,CAC1hB,EACMC,IAAYD,GACZE,IAAaF,GACbG,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,qhBAAqhB,CAClkB,EACMC,IAAgBD,GAChBE,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k7BAAk7B,CACj9B,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,srCAAsrC,CACzuC,EACMC,IAAcD,GACdE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,y1BAAy1B,CAC54B,EACMC,IAAcD,GACdE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,mnBAAmnB,CACvqB,EACMC,IAAgBD,GAChBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,6mCAA6mC,CACzpC,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,kkBAAkkB,CACjnB,EACMC,IAAkBD,GAClBE,GAAyB,CAC7B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,oBAAoB,EAAG,OAAQ,25BAA25B,CACt9B,EACMC,IAAqBD,GACrBE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,scAAsc,CACtf,EACMC,IAAYD,GACZE,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,yYAAyY,CAC5b,EACMC,IAAqBD,GACrBE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,+TAA+T,CACnX,EACMC,IAAgBD,GAChBE,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,mTAAmT,CACxV,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,2YAA2Y,CAC7b,EACMC,IAAoBD,GACpBE,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,+/DAA+/D,CACjjE,EACMC,IAAaD,GACbE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,uzBAAuzB,CAC51B,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,0eAA0e,CACthB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAM,MAAO,cAAc,EAAG,OAAQ,iXAAiX,CACjb,EACMC,IAAgBD,GAChBE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,+IAA+I,CAClM,EACMC,IAAcD,GACdE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,2lBAA2lB,CACjoB,EACMC,IAAUD,GACVE,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,cAAe,aAAa,EAAG,OAAQ,k4BAAk4B,CACn8B,EACMC,IAAeD,GACfE,IAAeF,GACfG,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,4qBAA4qB,CACjtB,EACMC,IAASD,GACTE,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,ugBAAugB,CACnjB,EACMC,IAAeD,GACfE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,shCAAshC,CACrjC,EACMC,GAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAM,YAAY,EAAG,OAAQ,87BAA87B,CACv/B,EACMC,IAAcD,GACdE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,28BAA28B,CACh/B,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,isCAAisC,CAC9uC,EACMC,IAASD,GACTE,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,+pBAA+pB,CACntB,EACMC,IAAeD,GACfE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,g3BAAg3B,CACn5B,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,8fAA8f,CACxiB,EACMC,IAAaD,GACbE,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,+ZAA+Z,CAChd,EACMC,IAAYD,GACZE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,mWAAmW,CACtZ,EACMC,IAAcD,GACdE,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,06BAA06B,CAC78B,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,2OAA2O,CACvR,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w6BAAw6B,CACv8B,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,MAAO,cAAc,EAAG,OAAQ,+UAA+U,CACnZ,EACMC,IAAgBD,GAChBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,uTAAuT,CACnW,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,uYAAuY,CACzb,EACMC,IAAoBD,GACpBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,KAAK,EAAG,OAAQ,glBAAglB,CAC3nB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,s3BAAs3B,CACz5B,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,wjBAAwjB,CACrmB,EACMC,IAAgBD,GAChBE,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAO,EAAG,OAAQ,4TAA4T,CAClW,EACMC,IAAUD,GACVE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,KAAK,EAAG,OAAQ,2aAA2a,CAC/d,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0YAA0Y,CAC/a,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,8zBAA8zB,CACj2B,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,mjCAAmjC,CAC7lC,EACMC,IAAaD,GACbE,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,sYAAsY,CACtb,EACMC,IAAkBD,GAClBE,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,sbAAsb,CAChe,EACMC,IAAaD,GACbE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8XAA8X,CAC7Z,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,kaAAka,CACrd,EACMC,IAAeD,GACfE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iXAAiX,CAChZ,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sbAAsb,CACrd,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,w2BAAw2B,CAC74B,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,23CAA23C,CAC15C,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,iWAAiW,CACtY,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,sRAAsR,CACzU,EACMC,IAAeD,GACfE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,kPAAkP,CACtS,EACMC,IAAgBD,GAChBE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,yNAAyN,CAC5Q,EACMC,IAAeD,GACfE,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,obAAob,CACnd,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,knCAAknC,CACrqC,EACMC,IAAcD,GACdE,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,OAAQ,+WAA+W,CACjZ,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,eAAgB,OAAO,EAAG,OAAQ,yiBAAyiB,CACtmB,EACMC,IAAgBD,GAChBE,IAAUF,GACVG,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,qsBAAqsB,CACnvB,EACMC,IAAUD,GACVE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,MAAO,oBAAqB,wBAAwB,EAAG,OAAQ,mVAAmV,CAC7a,EACMC,IAAoBD,GACpBE,IAAwBF,GACxBG,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,0hBAA0hB,CAC7kB,EACMC,IAAcD,GACdE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4jBAA4jB,CAC3lB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2cAA2c,CAC1e,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,wdAAwd,CAC5f,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,ywBAAywB,CACtzB,EACMC,IAAgBD,GAChBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,KAAM,KAAM,KAAK,EAAG,OAAQ,kOAAkO,CACxR,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,KAAK,EAAG,OAAQ,srCAAsrC,CACjuC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,myBAAmyB,CACx0B,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAiB,EAAG,OAAQ,8uDAA8uD,CACtyD,EACMC,IAAkBD,GAClBE,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,kfAAkf,CAChiB,EACMC,IAAgBD,GAChBE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+iBAA+iB,CAC9kB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,8pCAA8pC,CAChtC,EACMC,IAAaD,GACbE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,84CAA84C,CAC76C,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,wBAAwB,EAAG,OAAQ,uVAAuV,CACrZ,EACMC,IAAwBD,GACxBE,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,kBAAkB,EAAG,OAAQ,onBAAonB,CAC7qB,EACMC,IAAmBD,GACnBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8sBAA8sB,CAC7uB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,KAAM,MAAO,KAAK,EAAG,OAAQ,ksBAAksB,CACnzB,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,uOAAuO,CACxR,EACMC,IAAaD,GACbE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,wRAAwR,CAC5U,EACMC,IAAgBD,GAChBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,KAAM,KAAM,KAAM,MAAO,MAAO,KAAK,EAAG,OAAQ,mGAAmG,CAC/N,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,qBAAqB,EAAG,OAAQ,qVAAqV,CAChZ,EACMC,IAAqBD,GACrBE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0oBAA0oB,CACzqB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,0iBAA0iB,CAC/kB,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,iBAAiB,EAAG,OAAQ,ueAAue,CAC9hB,EACMC,IAAmBD,GACnBE,GAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,WAAW,EAAG,OAAQ,2LAA2L,CAC7O,EACMC,IAAaD,GACbE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,gtBAAgtB,CACrvB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,4wBAA4wB,CAC5zB,EACMC,IAAWD,GACXE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8iBAA8iB,CAC7kB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+SAA+S,CACpV,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,OAAO,EAAG,OAAQ,8YAA8Y,CAC1b,EACMC,IAAUD,GACVE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,MAAM,EAAG,OAAQ,ycAAyc,CAC9f,EACMC,IAASD,GACTE,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,YAAY,EAAG,OAAQ,wwBAAwwB,CACl0B,EACMC,IAAeD,GACfE,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,mmBAAmmB,CACvpB,EACMC,IAAeD,GACfE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qmCAAqmC,CACpoC,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,miCAAmiC,CAClkC,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,m8DAAm8D,CACt/D,EACMC,IAAcD,GACdE,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,4hBAA4hB,CAC3kB,EACMC,IAAkBD,GAClBE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wgBAAwgB,CACviB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iwBAAiwB,CAChyB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,+pBAA+pB,CAC3sB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAM,KAAK,EAAG,OAAQ,2VAA2V,CAC7Y,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAM,MAAO,iBAAiB,EAAG,OAAQ,wgBAAwgB,CACrkB,EACMC,IAAmBD,GACnBE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4cAA4c,CAC3e,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,8aAA8a,CAC1d,EACMC,IAAQD,GACRE,GAAwB,CAC5B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,mBAAmB,EAAG,OAAQ,0vCAA0vC,CACpzC,EACMC,IAAoBD,GACpBE,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,uoBAAuoB,CAChrB,EACMC,IAAYD,GACZE,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kgBAAkgB,CACjiB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,uBAAuB,EAAG,OAAQ,6VAA6V,CAC1Z,EACMC,IAAuBD,GACvBE,GAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,scAAsc,CACrf,EACMC,IAAiBD,GACjBE,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,YAAY,EAAG,OAAQ,4OAA4O,CAC/R,EACMC,IAAcD,GACdE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAI,EAAG,OAAQ,62CAA62C,CACh5C,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8tBAA8tB,CAC7vB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ujBAAujB,CACtlB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,sWAAsW,CACnZ,EACMC,IAASD,GACTE,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,yRAAyR,CACrU,EACMC,IAAQD,GACRE,GAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,iBAAiB,EAAG,OAAQ,sdAAsd,CAC7gB,EACMC,IAAmBD,GACnBE,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,4+BAA4+B,CAC/gC,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,odAAod,CAC/f,EACMC,IAAcD,GACdE,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,uBAAuB,EAAG,OAAQ,6VAA6V,CAC1Z,EACMC,IAAuBD,GACvBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,mkCAAmkC,CAC/mC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6gBAA6gB,CAChjB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,iBAAiB,EAAG,OAAQ,wbAAwb,CACvf,EACMC,IAAkBD,GAClBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,shBAAshB,CAClkB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,KAAK,EAAG,OAAQ,yRAAyR,CAC7U,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAO,eAAgB,eAAe,EAAG,OAAQ,46KAA46K,CACz/K,EACMC,IAAgBD,GAChBE,IAAiBF,GACjBG,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,kwBAAkwB,CACryB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,qXAAqX,CACzZ,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6qBAA6qB,CAChtB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,sbAAsb,CACze,EACMC,IAAeD,GACfE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,scAAsc,CACre,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,cAAc,EAAG,OAAQ,giCAAgiC,CACplC,EACMC,IAAgBD,GAChBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,GAAG,EAAG,OAAQ,0TAA0T,CAC5V,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,4YAA4Y,CACxb,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,4rBAA4rB,CACxuB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qkBAAqkB,CACpmB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,kYAAkY,CAChb,EACMC,IAAUD,GACVE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAI,EAAG,OAAQ,6lCAA6lC,CAChoC,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,aAAa,EAAG,OAAQ,wnBAAwnB,CAC5qB,EACMC,IAAeD,GACfE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,urBAAurB,CACnuB,EACMC,GAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAiB,EAAG,OAAQ,2lDAA2lD,CACnpD,EACMC,IAAkBD,GAClBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,IAAI,EAAG,OAAQ,mqBAAmqB,CAC9sB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,MAAM,EAAG,OAAQ,2TAA2T,CACxW,EACMC,GAAuB,CAC3B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,kBAAkB,EAAG,OAAQ,64BAA64B,CACt8B,EACMC,IAAmBD,GACnBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gaAAga,CAC/b,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAO,EAAG,OAAQ,utBAAutB,CACrwB,EACMC,IAAUD,GACVE,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,kBAAmB,kBAAmB,cAAc,EAAG,OAAQ,ucAAuc,CACjiB,EACMC,IAAmBD,GACnBE,IAAmBF,GACnBG,IAAgBH,GAChBI,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,8TAA8T,CAClW,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i/BAAi/B,CAChhC,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,SAAS,EAAG,OAAQ,+bAA+b,CAC/e,EACMC,IAAYD,GACZE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4ZAA4Z,CAC3b,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,eAAgB,cAAc,EAAG,OAAQ,wUAAwU,CAC5Y,EACMC,IAAgBD,GAChBE,IAAgBF,GAChBG,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,KAAK,EAAG,OAAQ,kkCAAkkC,CAC9mC,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAM,EAAG,OAAQ,+FAA+F,CACpI,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,OAAQ,OAAQ,MAAQ,OAAQ,OAAQ,OAAQ,MAAO,KAAK,EAAG,OAAQ,wGAAwG,CAC3M,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,aAAa,EAAG,OAAQ,sSAAsS,CACzV,EACMC,IAAeD,GACfE,GAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,UAAU,EAAG,OAAQ,shBAAshB,CACvkB,EACMC,IAAYD,GACZE,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k7BAAk7B,CACj9B,EACIC,GAAQ,CACV,WAAAjQ,GACA,WAAAC,IACA,UAAAC,GACA,aAAAC,IACA,YAAAC,GACA,UAAAC,IACA,WAAAC,IACA,eAAAC,GACA,cAAAC,IACA,iBAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,cAAAC,GACA,cAAAC,IACA,WAAAC,IACA,QAAAC,GACA,gBAAAC,IACA,uBAAAC,GACA,mBAAAC,IACA,cAAAC,GACA,UAAAC,IACA,mBAAAC,GACA,mBAAAC,IACA,cAAAC,GACA,cAAAC,IACA,UAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,eAAAC,GACA,WAAAC,IACA,YAAAC,IACA,OAAAC,IACA,cAAAC,GACA,cAAAC,IACA,YAAAC,GACA,YAAAC,IACA,YAAAC,GACA,QAAAC,IACA,SAAAC,GACA,aAAAC,IACA,aAAAC,IACA,cAAAC,GACA,OAAAC,IACA,gBAAAC,GACA,aAAAC,IACA,WAAAC,IACA,OAAAC,GACA,YAAAC,IACA,YAAAC,IACA,WAAAC,GACA,OAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,cAAAC,IACA,eAAAC,GACA,WAAAC,IACA,eAAAC,GACA,UAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,cAAAC,IACA,WAAAC,IACA,gBAAAC,IACA,SAAAC,GACA,cAAAC,IACA,OAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,OAAAC,IACA,cAAAC,IACA,kBAAAC,GACA,cAAAC,IACA,YAAAC,GACA,QAAAC,IACA,aAAAC,IACA,YAAAC,IACA,aAAAC,IACA,eAAAC,GACA,WAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,WAAAC,GACA,WAAAC,IACA,gBAAAC,IACA,aAAAC,GACA,aAAAC,IACA,QAAAC,IACA,eAAAC,IACA,QAAAC,IACA,YAAAC,IACA,MAAAC,IACA,aAAAC,GACA,aAAAC,IACA,cAAAC,GACA,cAAAC,IACA,aAAAC,GACA,aAAAC,IACA,UAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,aAAAC,IACA,cAAAC,GACA,cAAAC,IACA,QAAAC,IACA,YAAAC,GACA,QAAAC,IACA,cAAAC,GACA,kBAAAC,IACA,sBAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,eAAAC,IACA,aAAAC,GACA,cAAAC,IACA,SAAAC,IACA,YAAAC,IACA,YAAAC,IACA,oBAAAC,GACA,gBAAAC,IACA,iBAAAC,GACA,cAAAC,IACA,YAAAC,IACA,eAAAC,GACA,WAAAC,IACA,gBAAAC,IACA,cAAAC,GACA,sBAAAC,IACA,kBAAAC,GACA,iBAAAC,IACA,cAAAC,IACA,QAAAC,IACA,eAAAC,GACA,WAAAC,IACA,cAAAC,GACA,cAAAC,IACA,SAAAC,IACA,WAAAC,GACA,mBAAAC,IACA,YAAAC,IACA,YAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,eAAAC,GACA,WAAAC,IACA,MAAAC,IACA,aAAAC,GACA,SAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,YAAAC,GACA,QAAAC,IACA,aAAAC,GACA,OAAAC,IACA,cAAAC,GACA,aAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,cAAAC,IACA,eAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,YAAAC,IACA,UAAAC,IACA,UAAAC,IACA,WAAAC,IACA,YAAAC,GACA,iBAAAC,IACA,gBAAAC,IACA,YAAAC,GACA,MAAAC,IACA,sBAAAC,GACA,kBAAAC,IACA,gBAAAC,GACA,UAAAC,IACA,eAAAC,IACA,aAAAC,GACA,qBAAAC,IACA,aAAAC,GACA,eAAAC,IACA,QAAAC,GACA,YAAAC,IACA,WAAAC,IACA,mBAAAC,IACA,SAAAC,IACA,WAAAC,GACA,OAAAC,IACA,UAAAC,GACA,MAAAC,IACA,SAAAC,GACA,iBAAAC,IACA,MAAAC,IACA,gBAAAC,GACA,YAAAC,IACA,aAAAC,GACA,qBAAAC,IACA,aAAAC,IACA,YAAAC,IACA,aAAAC,GACA,gBAAAC,IACA,OAAAC,IACA,OAAAC,IACA,WAAAC,GACA,cAAAC,IACA,eAAAC,IACA,YAAAC,IACA,WAAAC,IACA,YAAAC,IACA,aAAAC,GACA,aAAAC,IACA,OAAAC,IACA,kBAAAC,GACA,cAAAC,IACA,YAAAC,IACA,MAAAC,IACA,YAAAC,IACA,aAAAC,IACA,YAAAC,GACA,QAAAC,IACA,YAAAC,IACA,iBAAAC,GACA,aAAAC,IACA,WAAAC,IACA,oBAAAC,GACA,gBAAAC,IACA,OAAAC,IACA,WAAAC,IACA,qBAAAC,GACA,iBAAAC,IACA,QAAAC,IACA,YAAAC,GACA,QAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,aAAAC,IACA,WAAAC,IACA,cAAAC,GACA,UAAAC,IACA,gBAAAC,IACA,cAAAC,GACA,cAAAC,IACA,cAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,aAAAC,IACA,aAAAC,GACA,aAAAC,IACA,cAAAC,GACA,UAAAC,IACA,gBAAAC,GACF,EC/oCA,IAAME,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wNAAwN,CACvP,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,g4CAAg4C,CAC/5C,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uvBAAuvB,CACtxB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w1BAAw1B,CACv3B,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2jBAA2jB,CAC1lB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,igBAAigB,CAChiB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wpBAAwpB,CACvrB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wrEAAwrE,CACvtE,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qjBAAqjB,CACplB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0bAA0b,CACzd,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wgCAAwgC,CACviC,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6pBAA6pB,CAC5rB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wlBAAwlB,CACvnB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ubAAub,CACtd,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sLAAsL,CACrN,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yqBAAyqB,CACxsB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,osBAAosB,CACnuB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2NAA2N,CAC1P,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4oCAA4oC,CAC3qC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0KAA0K,CACzM,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qYAAqY,CACpa,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qwBAAqwB,CACpyB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,WAAW,EAAG,OAAQ,2mBAA2mB,CACrpB,EACMC,IAAaD,GACbE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6GAA6G,CAC5I,EACMC,IAAO,CACX,OAAQ,MACR,SAAU,KACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yjBAAyjB,CACxlB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6WAA6W,CAC5Y,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,glCAAglC,CAC/mC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6lBAA6lB,CAC5nB,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,0BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4hBAA4hB,CAC3jB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yXAAyX,CACxZ,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wqBAAwqB,CACvsB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+xCAA+xC,CAC9zC,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4VAA4V,CAC3X,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kYAAkY,CACja,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w9BAAw9B,CACv/B,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qfAAqf,CACphB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8tBAA8tB,CAC7vB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4pCAA4pC,CAC3rC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qwCAAqwC,CACpyC,EACMC,IAAO,CACX,OAAQ,MACR,SAAU,KACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ozBAAozB,CACn1B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ohCAAohC,CACnjC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m/FAAm/F,CAClhG,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+OAA+O,CAC9Q,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,45BAA45B,CAC18B,EACMC,IAAiBD,GACjBE,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+XAA+X,CAC9Z,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0dAA0d,CACzf,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0WAA0W,CACzY,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,imBAAimB,CAChoB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0jFAA0jF,CACzlF,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uRAAuR,CACtT,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,uyCAAuyC,CACx1C,EACMC,IAAoBD,GACpBE,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+7EAA+7E,CAC99E,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,28LAA28L,CAC1+L,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,wUAAwU,CAC3X,EACMC,IAAqBD,GACrBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wnCAAwnC,CACvpC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kkCAAkkC,CACjmC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s4BAAs4B,CACr6B,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,kjGAAkjG,CAClmG,EACMC,IAAmBD,GACnBE,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+dAA+d,CAC9f,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mMAAmM,CAClO,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yRAAyR,CACxT,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gQAAgQ,CAC/R,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4YAA4Y,CAC3a,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wZAAwZ,CACvb,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iiBAAiiB,CAChkB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6NAA6N,CAC5P,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kyBAAkyB,CACj0B,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,++CAA++C,CAC9gD,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,seAAse,CACrgB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4pBAA4pB,CAC3rB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2ZAA2Z,CAC1b,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4fAA4f,CAC3hB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ilDAAilD,CAChnD,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yPAAyP,CACxR,EACMC,GAA4B,CAChC,OAAQ,MACR,SAAU,6BACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,+dAA+d,CAChhB,EACMC,IAAmBD,GACnBE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gSAAgS,CAC/T,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8SAA8S,CAC7U,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0SAA0S,CACzU,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4dAA4d,CAC3f,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oZAAoZ,CACnb,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m6BAAm6B,CACl8B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sLAAsL,CACrN,EACMC,IAA4B,CAChC,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qoCAAqoC,CACpqC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4sCAA4sC,CAC3uC,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o3BAAo3B,CACn5B,EACMC,IAAuB,CAC3B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6zBAA6zB,CAC51B,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kjBAAkjB,CACjlB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s2BAAs2B,CACr4B,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s+CAAs+C,CACrgD,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2pBAA2pB,CAC1rB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4cAA4c,CAC3e,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qlBAAqlB,CACpnB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6WAA6W,CAC5Y,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yIAAyI,CACxK,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,63PAA63P,CAC55P,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,+0BAA+0B,CAC73B,EACMC,IAAiBD,GACjBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sgEAAsgE,CACriE,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m0BAAm0B,CACl2B,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6LAA6L,CAC5N,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qIAAqI,CACpK,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+qCAA+qC,CAC9sC,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0jDAA0jD,CACzlD,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,yzBAAyzB,CACz2B,EACMC,IAAmBD,GACnBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2cAA2c,CAC1e,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+9FAA+9F,CAC9/F,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kJAAkJ,CACjL,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8tBAA8tB,CAC7vB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,urCAAurC,CACttC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mpBAAmpB,CAClrB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,quJAAquJ,CACpwJ,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gQAAgQ,CAC/R,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kKAAkK,CACjM,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4xDAA4xD,CAC3zD,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o3BAAo3B,CACn5B,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gvBAAgvB,CAC/wB,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,ymBAAymB,CACxpB,EACMC,IAAkBD,GAClBE,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,miBAAmiB,CAClkB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,odAAod,CACnf,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sgBAAsgB,CACriB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0HAA0H,CACzJ,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,swBAAswB,CACryB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,inBAAinB,CAChpB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,whBAAwhB,CACvjB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4wBAA4wB,CAC3yB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,83FAA83F,CAC75F,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wkBAAwkB,CACvmB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u+DAAu+D,CACtgE,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,iXAAiX,CACpa,EACMC,IAAsBD,GACtBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8gDAA8gD,CAC7iD,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,05BAA05B,CACz7B,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,83CAA83C,CAC75C,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6LAA6L,CAC5N,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,gBAAgB,EAAG,OAAQ,8bAA8b,CACpf,EACMC,IAAkBD,GAClBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2rBAA2rB,CAC1tB,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,SAAS,EAAG,OAAQ,8mCAA8mC,CACtpC,EACMC,IAAYD,GACZE,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wxCAAwxC,CACvzC,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,q/CAAq/C,CACphD,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o6JAAo6J,CACn8J,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,msBAAmsB,CACluB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+xBAA+xB,CAC9zB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,q7BAAq7B,CACp9B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iTAAiT,CAChV,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yvBAAyvB,CACxxB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6+BAA6+B,CAC5gC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qSAAqS,CACpU,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qSAAqS,CACpU,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4sBAA4sB,CAC3uB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qhDAAqhD,CACpjD,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,wBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0kBAA0kB,CACzmB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,u1CAAu1C,CACt3C,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kxDAAkxD,CACjzD,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8lBAA8lB,CAC7nB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,q7BAAq7B,CACp9B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gxCAAgxC,CAC/yC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+hBAA+hB,CAC9jB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,woBAAwoB,CACvqB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uoCAAuoC,CACtqC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ofAAof,CACnhB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kgBAAkgB,CACjiB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4vEAA4vE,CAC3xE,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2iBAA2iB,CAC1kB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6LAA6L,CAC5N,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,yrBAAyrB,CAC7tB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2/BAA2/B,CAC1hC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,koBAAkoB,CACjqB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uFAAuF,CACtH,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,szCAAszC,CACr1C,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,yoBAAyoB,CACtrB,EACMC,IAAgBD,GAChBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+oCAA+oC,CAC9qC,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,cAAc,EAAG,OAAQ,mhBAAmhB,CAChkB,EACMC,IAAgBD,GAChBE,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8qBAA8qB,CAC7sB,EACMC,GAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,MAAO,oBAAqB,wBAAwB,EAAG,OAAQ,8PAA8P,CACxV,EACMC,IAAoBD,GACpBE,IAAwBF,GACxBG,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+PAA+P,CAC9R,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qbAAqb,CACpd,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0uBAA0uB,CACzwB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4vCAA4vC,CAC3xC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+8CAA+8C,CAC9+C,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wlCAAwlC,CACvnC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qpBAAqpB,CACprB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4zGAA4zG,CAC31G,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,g9CAAg9C,CAC9/C,EACMC,IAAiBD,GACjBE,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oaAAoa,CACnc,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,quBAAquB,CACpwB,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,82EAA82E,CAC74E,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,utCAAutC,CACtvC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yWAAyW,CACxY,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,koCAAkoC,CACjqC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6vBAA6vB,CAC5xB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8tBAA8tB,CAC7vB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m8CAAm8C,CACl+C,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iKAAiK,CAChM,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6iBAA6iB,CAC5kB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i1DAAi1D,CACh3D,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mIAAmI,CAClK,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yuDAAyuD,CACxwD,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gSAAgS,CAC/T,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iaAAia,CAChc,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,ooBAAooB,CAClrB,EACMC,IAAiBD,GACjBE,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yeAAye,CACxgB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yhBAAyhB,CACxjB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kgCAAkgC,CACjiC,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0PAA0P,CACzR,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ojEAAojE,CACnlE,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kiBAAkiB,CACjkB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6tBAA6tB,CAC5vB,EACMC,GAAwB,CAC5B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,sBAAsB,EAAG,OAAQ,omBAAomB,CACzpB,EACMC,IAAwBD,GACxBE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iyDAAiyD,CACh0D,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4uBAA4uB,CAC3wB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ioGAAioG,CAChqG,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,stBAAstB,CACrvB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qWAAqW,CACpY,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8wFAA8wF,CAC7yF,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,opDAAopD,CACnrD,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mlCAAmlC,CAClnC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0rCAA0rC,CACztC,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,miBAAmiB,CAClkB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+jCAA+jC,CAC9lC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i6CAAi6C,CACh8C,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gaAAga,CAC/b,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mqCAAmqC,CAClsC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i4BAAi4B,CACh6B,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8iFAA8iF,CAC7kF,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qwBAAqwB,CACpyB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6rBAA6rB,CAC5tB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,imCAAimC,CAChoC,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gEAAgE,CAC/F,EACMC,IAAO,CACX,OAAQ,MACR,SAAU,KACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uQAAuQ,CACtS,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yvBAAyvB,CACxxB,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,kBAAkB,EAAG,OAAQ,4rBAA4rB,CAC7uB,EACMC,IAAoBD,GACpBE,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6XAA6X,CAC5Z,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,slBAAslB,CACrnB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,okBAAokB,CACnmB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,olBAAolB,CACnnB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4UAA4U,CAC3W,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kuDAAkuD,CACjwD,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,szBAAszB,CACr1B,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4VAA4V,CAC3X,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uaAAua,CACtc,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2vDAA2vD,CAC1xD,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2iBAA2iB,CAC1kB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8vBAA8vB,CAC7xB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oUAAoU,CACnW,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6yBAA6yB,CAC50B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4MAA4M,CAC3O,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wdAAwd,CACvf,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sUAAsU,CACrW,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wpBAAwpB,CACvrB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6sBAA6sB,CAC5uB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ykBAAykB,CACxmB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wjCAAwjC,CACvlC,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6NAA6N,CAC5P,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iGAAiG,CAChI,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0WAA0W,CACzY,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0uBAA0uB,CACzwB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4NAA4N,CAC3P,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6eAA6e,CAC5gB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8VAA8V,CAC7X,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0WAA0W,CACzY,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uZAAuZ,CACtb,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,siGAAsiG,CACrkG,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uKAAuK,CACtM,EACMC,GAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,oBAAoB,EAAG,OAAQ,2aAA2a,CAC9d,EACMC,IAAqBD,GACrBE,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mYAAmY,CACla,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sxLAAsxL,CACrzL,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,46CAA46C,CAC38C,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,62BAA62B,CAC54B,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wgBAAwgB,CACviB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,80HAA80H,CAC72H,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,khBAAkhB,CACjjB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qQAAqQ,CACpS,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yiBAAyiB,CACxkB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2hBAA2hB,CAC1jB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uWAAuW,CACtY,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kxBAAkxB,CACjzB,EACMC,GAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,aAAa,EAAG,OAAQ,sfAAsf,CACliB,EACMC,IAAeD,GACfE,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sGAAsG,CACrI,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ggBAAggB,CAC/hB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,owCAAowC,CACnyC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2eAA2e,CAC1gB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+VAA+V,CAC9X,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yMAAyM,CACxO,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uxBAAuxB,CACtzB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ikJAAikJ,CAChmJ,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,spBAAspB,CACrrB,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qiBAAqiB,CACpkB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mjEAAmjE,CACllE,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,02BAA02B,CACz4B,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4PAA4P,CAC3R,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,imCAAimC,CAChoC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6SAA6S,CAC5U,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m2CAAm2C,CACl4C,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iwDAAiwD,CAChyD,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kTAAkT,CACjV,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kaAAka,CACjc,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8lBAA8lB,CAC7nB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ilCAAilC,CAChnC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8NAA8N,CAC7P,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wkBAAwkB,CACvmB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4dAA4d,CAC3f,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gfAAgf,CAC/gB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qIAAqI,CACpK,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ijDAAijD,CAChlD,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kWAAkW,CACjY,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8JAA8J,CAC7L,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4rCAA4rC,CAC3tC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kPAAkP,CACjR,EACMC,GAAY,CAChB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,UAAU,EAAG,OAAQ,wpBAAwpB,CACjsB,EACMC,IAAaD,GACbE,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8NAA8N,CAC7P,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sNAAsN,CACrP,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,mBAAmB,EAAG,OAAQ,6RAA6R,CAC/U,EACMC,IAAoBD,GACpBE,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oTAAoT,CACnV,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4vBAA4vB,CAC3xB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kUAAkU,CACjW,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2dAA2d,CAC1f,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,63BAA63B,CAC55B,EACMC,IAA2B,CAC/B,OAAQ,MACR,SAAU,4BACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,umBAAumB,CACtoB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uqBAAuqB,CACtsB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6NAA6N,CAC5P,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,6QAA6Q,CAC7T,EACMC,IAAmBD,GACnBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8UAA8U,CAC7W,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k6GAAk6G,CACj8G,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ywBAAywB,CACxyB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0aAA0a,CACzc,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kvBAAkvB,CACjxB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8vBAA8vB,CAC7xB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0MAA0M,CACzO,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kHAAkH,CACjJ,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iiDAAiiD,CAChkD,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4aAA4a,CAC3c,EACMC,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,uvBAAuvB,CACryB,EACMC,IAAiBD,GACjBE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ifAAif,CAChhB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kpBAAkpB,CACjrB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,08BAA08B,CACz+B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m6CAAm6C,CACl8C,EACMC,IAAyB,CAC7B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0jBAA0jB,CACzlB,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sxGAAsxG,CACrzG,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wOAAwO,CACvQ,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,45BAA45B,CAC37B,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0tDAA0tD,CACzvD,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2gBAA2gB,CAC1iB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,EAAG,OAAQ,8QAA8Q,CAClT,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,omBAAomB,CACnoB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kpBAAkpB,CACjrB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6JAA6J,CAC5L,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6hHAA6hH,CAC5jH,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s7BAAs7B,CACr9B,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,83DAA83D,CAC75D,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yzDAAyzD,CACx1D,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oxCAAoxC,CACnzC,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yMAAyM,CACxO,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w3BAAw3B,CACv5B,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6qBAA6qB,CAC5sB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gxBAAgxB,CAC/yB,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wPAAwP,CACvR,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,muBAAmuB,CAClwB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,omCAAomC,CACnoC,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2IAA2I,CAC1K,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4KAA4K,CAC3M,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ucAAuc,CACte,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,oOAAoO,CACxQ,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i/DAAi/D,CAChhE,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qRAAqR,CACpT,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6pHAA6pH,CAC5rH,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6NAA6N,CAC5P,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ykBAAykB,CACxmB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,snEAAsnE,CACrpE,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oSAAoS,CACnU,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oHAAoH,CACnJ,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,y1IAAy1I,CACx3I,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,siBAAsiB,CACrkB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0gBAA0gB,CACziB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4UAA4U,CAC3W,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8hBAA8hB,CAC7jB,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qQAAqQ,CACpS,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4MAA4M,CAC3O,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,y9BAAy9B,CACx/B,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yMAAyM,CACxO,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4mCAA4mC,CAC3oC,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mfAAmf,CAClhB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,i8FAAi8F,CACh+F,EACMC,GAAoB,CACxB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,+OAA+O,CACnR,EACMC,IAAQD,GACRE,IAAqB,CACzB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4YAA4Y,CAC3a,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wmIAAwmI,CACvoI,EACMC,IAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2vBAA2vB,CAC1xB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kzBAAkzB,CACj1B,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0gEAA0gE,CACziE,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ifAAif,CAChhB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mnDAAmnD,CAClpD,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,66BAA66B,CAC58B,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+8BAA+8B,CAC9+B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4aAA4a,CAC3c,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6rBAA6rB,CAC5tB,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,gBAAgB,EAAG,OAAQ,wjGAAwjG,CAC9mG,EACMC,IAAkBD,GAClBE,IAAuB,CAC3B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,igCAAigC,CAChiC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,svHAAsvH,CACrxH,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8nCAA8nC,CAC7pC,EACMC,GAAkB,CACtB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,gBAAgB,EAAG,OAAQ,ktBAAktB,CACjwB,EACMC,IAAkBD,GAClBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kmDAAkmD,CACjoD,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mKAAmK,CAClM,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yiBAAyiB,CACxkB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,iIAAiI,CAChK,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6sBAA6sB,CAC5uB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gPAAgP,CAC/Q,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yLAAyL,CACxN,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8KAA8K,CAC7M,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,y0CAAy0C,CACx2C,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qoBAAqoB,CACpqB,EACMC,GAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,YAAY,EAAG,OAAQ,2oCAA2oC,CACtrC,EACMC,IAAcD,GACdE,GAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,eAAe,EAAG,OAAQ,geAAge,CAC9gB,EACMC,IAAiBD,GACjBE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sZAAsZ,CACrb,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,yBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wfAAwf,CACvhB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0VAA0V,CACzX,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4pBAA4pB,CAC3rB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oyKAAoyK,CACn0K,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k6BAAk6B,CACj8B,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,o+FAAo+F,CACngG,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6jCAA6jC,CAC5lC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mGAAmG,CAClI,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,sqBAAsqB,CACrsB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8vBAA8vB,CAC7xB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+SAA+S,CAC9U,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,k8DAAk8D,CACj+D,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,iBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,opCAAopC,CACnrC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,w/BAAw/B,CACvhC,EACMC,IAAO,CACX,OAAQ,MACR,SAAU,KACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qhBAAqhB,CACpjB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2wBAA2wB,CAC1yB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6/BAA6/B,CAC5hC,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+qBAA+qB,CAC9sB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4UAA4U,CAC3W,EACMC,IAAwB,CAC5B,OAAQ,MACR,SAAU,uBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8EAA8E,CAC7G,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2lBAA2lB,CAC1nB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8XAA8X,CAC7Z,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0xCAA0xC,CACzzC,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,swBAAswB,CACryB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2pBAA2pB,CAC1rB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,KAAK,EAAG,OAAQ,wdAAwd,CAC5f,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qpBAAqpB,CACprB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2mDAA2mD,CAC1oD,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,msCAAmsC,CACluC,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,otDAAotD,CACnvD,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,uqIAAuqI,CACtsI,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yxBAAyxB,CACxzB,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yQAAyQ,CACxS,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4pBAA4pB,CAC3rB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,unBAAunB,CACtpB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,gLAAgL,CAC/M,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,s3CAAs3C,CACr5C,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wqBAAwqB,CACvsB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6hCAA6hC,CAC5jC,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,qBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,6fAA6f,CAC5hB,EACMC,IAAqB,CACzB,OAAQ,MACR,SAAU,oBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,21BAA21B,CAC13B,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qUAAqU,CACpW,EACMC,GAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,gBAAgB,EAAG,OAAQ,gsBAAgsB,CACtvB,EACMC,IAAkBD,GAClBE,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,q4VAAq4V,CACp6V,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,m9DAAm9D,CACl/D,EACMC,GAAmB,CACvB,OAAQ,MACR,SAAU,kBACV,KAAM,CAAC,IAAK,IAAK,CAAC,iBAAiB,EAAG,OAAQ,sjCAAsjC,CACtmC,EACMC,IAAmBD,GACnBE,IAAW,CACf,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8jCAA8jC,CAC7lC,EACMC,IAAe,CACnB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4ZAA4Z,CAC3b,EACMC,GAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,YAAY,EAAG,OAAQ,+9BAA+9B,CACjhC,EACMC,IAAcD,GACdE,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,svBAAsvB,CACrxB,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2qBAA2qB,CAC1sB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+WAA+W,CAC9Y,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+qBAA+qB,CAC9sB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8eAA8e,CAC7gB,EACMC,IAAmB,CACvB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wQAAwQ,CACvS,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,kyKAAkyK,CACj0K,EACMC,GAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,MAAO,UAAU,EAAG,OAAQ,maAAma,CACnd,EACMC,IAAYD,GACZE,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+gBAA+gB,CAC9iB,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ibAAib,CAChd,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8EAA8E,CAC7G,EACMC,IAAY,CAChB,OAAQ,MACR,SAAU,UACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8JAA8J,CAC7L,EACMC,IAAiB,CACrB,OAAQ,MACR,SAAU,gBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+4NAA+4N,CAC96N,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,8QAA8Q,CAC7S,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,yQAAyQ,CACxS,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,2iCAA2iC,CAC1kC,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ymBAAymB,CACxoB,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,mwBAAmwB,CAClyB,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,01EAA01E,CACz3E,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0wBAA0wB,CACzyB,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,29EAA29E,CAC1/E,EACMC,IAAgC,CACpC,OAAQ,MACR,SAAU,iCACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,qkCAAqkC,CACpmC,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,0GAA0G,CACzI,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,+zDAA+zD,CAC91D,EACMC,IAAsB,CAC1B,OAAQ,MACR,SAAU,sBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,oxBAAoxB,CACnzB,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,YACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wxDAAwxD,CACvzD,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,idAAid,CAChf,EACMC,IAAoB,CACxB,OAAQ,MACR,SAAU,mBACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,q3BAAq3B,CACp5B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,cACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,44CAA44C,CAC36C,EACMC,IAAS,CACb,OAAQ,MACR,SAAU,OACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,ylCAAylC,CACxnC,EACMC,IAAc,CAClB,OAAQ,MACR,SAAU,aACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,23CAA23C,CAC15C,EACMC,IAAa,CACjB,OAAQ,MACR,SAAU,WACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wkBAAwkB,CACvmB,EACMC,IAAU,CACd,OAAQ,MACR,SAAU,QACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,07CAA07C,CACz9C,EACMC,IAAW,CACf,OAAQ,MACR,SAAU,SACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,4PAA4P,CAC3R,EACMC,IAAQ,CACZ,OAAQ,MACR,SAAU,MACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,03BAA03B,CACz5B,EACMC,IAAgB,CACpB,OAAQ,MACR,SAAU,eACV,KAAM,CAAC,IAAK,IAAK,CAAC,EAAG,OAAQ,wmBAAwmB,CACvoB,EACIC,GAAQ,CACV,SAAAlhB,IACA,QAAAC,IACA,OAAAC,IACA,SAAAC,IACA,SAAAC,IACA,WAAAC,IACA,oBAAAC,IACA,MAAAC,IACA,SAAAC,IACA,QAAAC,IACA,aAAAC,IACA,MAAAC,IACA,QAAAC,IACA,aAAAC,IACA,SAAAC,IACA,OAAAC,IACA,YAAAC,IACA,aAAAC,IACA,aAAAC,IACA,OAAAC,IACA,UAAAC,IACA,MAAAC,IACA,WAAAC,GACA,WAAAC,IACA,YAAAC,IACA,KAAAC,IACA,QAAAC,IACA,OAAAC,IACA,WAAAC,IACA,uBAAAC,IACA,aAAAC,IACA,SAAAC,IACA,SAAAC,IACA,MAAAC,IACA,WAAAC,IACA,cAAAC,IACA,oBAAAC,IACA,QAAAC,IACA,QAAAC,IACA,aAAAC,IACA,KAAAC,IACA,UAAAC,IACA,YAAAC,IACA,UAAAC,IACA,eAAAC,GACA,eAAAC,IACA,SAAAC,IACA,SAAAC,IACA,oBAAAC,IACA,UAAAC,IACA,QAAAC,IACA,UAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,YAAAC,IACA,aAAAC,IACA,mBAAAC,GACA,mBAAAC,IACA,OAAAC,IACA,UAAAC,IACA,UAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,cAAAC,IACA,aAAAC,IACA,WAAAC,IACA,aAAAC,IACA,aAAAC,IACA,WAAAC,IACA,aAAAC,IACA,gBAAAC,IACA,YAAAC,IACA,kBAAAC,IACA,YAAAC,IACA,UAAAC,IACA,WAAAC,IACA,oBAAAC,IACA,SAAAC,IACA,SAAAC,IACA,0BAAAC,GACA,iBAAAC,IACA,YAAAC,IACA,aAAAC,IACA,eAAAC,IACA,SAAAC,IACA,aAAAC,IACA,WAAAC,IACA,aAAAC,IACA,0BAAAC,IACA,WAAAC,IACA,kBAAAC,IACA,qBAAAC,IACA,YAAAC,IACA,SAAAC,IACA,eAAAC,IACA,UAAAC,IACA,SAAAC,IACA,OAAAC,IACA,MAAAC,IACA,UAAAC,IACA,oBAAAC,IACA,eAAAC,GACA,eAAAC,IACA,SAAAC,IACA,SAAAC,IACA,MAAAC,IACA,aAAAC,IACA,WAAAC,IACA,eAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,WAAAC,IACA,OAAAC,IACA,MAAAC,IACA,QAAAC,IACA,aAAAC,IACA,SAAAC,IACA,SAAAC,IACA,SAAAC,IACA,WAAAC,IACA,gBAAAC,IACA,eAAAC,IACA,WAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,WAAAC,IACA,YAAAC,IACA,UAAAC,IACA,QAAAC,IACA,WAAAC,IACA,UAAAC,IACA,cAAAC,IACA,WAAAC,IACA,eAAAC,IACA,aAAAC,IACA,SAAAC,IACA,cAAAC,GACA,oBAAAC,IACA,OAAAC,IACA,QAAAC,IACA,YAAAC,IACA,aAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,aAAAC,IACA,UAAAC,GACA,UAAAC,IACA,YAAAC,IACA,mBAAAC,IACA,iBAAAC,IACA,QAAAC,IACA,QAAAC,IACA,SAAAC,IACA,UAAAC,IACA,OAAAC,IACA,UAAAC,IACA,SAAAC,IACA,aAAAC,IACA,mBAAAC,IACA,cAAAC,IACA,sBAAAC,IACA,OAAAC,IACA,MAAAC,IACA,UAAAC,IACA,SAAAC,IACA,UAAAC,IACA,SAAAC,IACA,cAAAC,IACA,aAAAC,IACA,aAAAC,IACA,aAAAC,IACA,WAAAC,IACA,MAAAC,IACA,SAAAC,IACA,iBAAAC,IACA,OAAAC,IACA,SAAAC,IACA,WAAAC,IACA,OAAAC,IACA,cAAAC,GACA,cAAAC,IACA,QAAAC,IACA,cAAAC,GACA,cAAAC,IACA,aAAAC,IACA,cAAAC,GACA,kBAAAC,IACA,sBAAAC,IACA,WAAAC,IACA,QAAAC,IACA,OAAAC,IACA,YAAAC,IACA,UAAAC,IACA,WAAAC,IACA,SAAAC,IACA,YAAAC,IACA,eAAAC,GACA,eAAAC,IACA,cAAAC,IACA,QAAAC,IACA,mBAAAC,IACA,UAAAC,IACA,OAAAC,IACA,gBAAAC,IACA,aAAAC,IACA,eAAAC,IACA,QAAAC,IACA,UAAAC,IACA,UAAAC,IACA,gBAAAC,IACA,cAAAC,IACA,SAAAC,IACA,SAAAC,IACA,gBAAAC,IACA,eAAAC,GACA,eAAAC,IACA,eAAAC,IACA,YAAAC,IACA,YAAAC,IACA,cAAAC,IACA,UAAAC,IACA,SAAAC,IACA,YAAAC,IACA,sBAAAC,GACA,sBAAAC,IACA,WAAAC,IACA,OAAAC,IACA,YAAAC,IACA,QAAAC,IACA,WAAAC,IACA,QAAAC,IACA,WAAAC,IACA,cAAAC,IACA,WAAAC,IACA,uBAAAC,IACA,UAAAC,IACA,SAAAC,IACA,QAAAC,IACA,SAAAC,IACA,UAAAC,IACA,iBAAAC,IACA,SAAAC,IACA,gBAAAC,IACA,SAAAC,IACA,QAAAC,IACA,KAAAC,IACA,MAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,OAAAC,IACA,aAAAC,IACA,oBAAAC,IACA,cAAAC,IACA,YAAAC,IACA,OAAAC,IACA,WAAAC,IACA,WAAAC,IACA,OAAAC,IACA,kBAAAC,IACA,SAAAC,IACA,SAAAC,IACA,QAAAC,IACA,cAAAC,IACA,QAAAC,IACA,cAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,YAAAC,IACA,gBAAAC,IACA,YAAAC,IACA,UAAAC,IACA,WAAAC,IACA,cAAAC,IACA,sBAAAC,IACA,UAAAC,IACA,UAAAC,IACA,OAAAC,IACA,SAAAC,IACA,YAAAC,IACA,eAAAC,IACA,YAAAC,IACA,mBAAAC,GACA,mBAAAC,IACA,aAAAC,IACA,cAAAC,IACA,gBAAAC,IACA,MAAAC,IACA,eAAAC,IACA,cAAAC,IACA,YAAAC,IACA,UAAAC,IACA,aAAAC,IACA,WAAAC,IACA,SAAAC,IACA,SAAAC,IACA,aAAAC,GACA,aAAAC,IACA,WAAAC,IACA,UAAAC,IACA,eAAAC,IACA,OAAAC,IACA,WAAAC,IACA,UAAAC,IACA,UAAAC,IACA,eAAAC,IACA,MAAAC,IACA,gBAAAC,IACA,SAAAC,IACA,SAAAC,IACA,aAAAC,IACA,UAAAC,IACA,SAAAC,IACA,QAAAC,IACA,aAAAC,IACA,OAAAC,IACA,eAAAC,IACA,aAAAC,IACA,UAAAC,IACA,SAAAC,IACA,OAAAC,IACA,oBAAAC,IACA,UAAAC,IACA,aAAAC,IACA,WAAAC,IACA,SAAAC,IACA,WAAAC,IACA,eAAAC,IACA,WAAAC,IACA,UAAAC,GACA,WAAAC,IACA,gBAAAC,IACA,YAAAC,IACA,kBAAAC,GACA,kBAAAC,IACA,oBAAAC,IACA,SAAAC,IACA,cAAAC,IACA,YAAAC,IACA,OAAAC,IACA,yBAAAC,IACA,cAAAC,IACA,SAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,SAAAC,IACA,QAAAC,IACA,QAAAC,IACA,WAAAC,IACA,UAAAC,IACA,YAAAC,IACA,SAAAC,IACA,UAAAC,IACA,UAAAC,IACA,QAAAC,IACA,eAAAC,GACA,eAAAC,IACA,QAAAC,IACA,WAAAC,IACA,cAAAC,IACA,QAAAC,IACA,uBAAAC,IACA,cAAAC,IACA,UAAAC,IACA,YAAAC,IACA,SAAAC,IACA,SAAAC,IACA,WAAAC,IACA,WAAAC,IACA,YAAAC,IACA,QAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,WAAAC,IACA,aAAAC,IACA,kBAAAC,IACA,eAAAC,IACA,WAAAC,IACA,eAAAC,IACA,aAAAC,IACA,aAAAC,IACA,SAAAC,IACA,OAAAC,IACA,cAAAC,IACA,eAAAC,IACA,cAAAC,IACA,YAAAC,IACA,OAAAC,IACA,SAAAC,IACA,cAAAC,IACA,OAAAC,IACA,SAAAC,IACA,YAAAC,IACA,YAAAC,IACA,SAAAC,IACA,QAAAC,IACA,YAAAC,IACA,eAAAC,IACA,WAAAC,IACA,eAAAC,IACA,eAAAC,IACA,SAAAC,IACA,SAAAC,IACA,QAAAC,IACA,SAAAC,IACA,mBAAAC,IACA,OAAAC,IACA,kBAAAC,GACA,MAAAC,IACA,mBAAAC,IACA,aAAAC,IACA,gBAAAC,IACA,UAAAC,IACA,MAAAC,IACA,aAAAC,IACA,QAAAC,IACA,cAAAC,IACA,OAAAC,IACA,UAAAC,IACA,QAAAC,IACA,WAAAC,GACA,gBAAAC,IACA,qBAAAC,IACA,OAAAC,IACA,MAAAC,IACA,gBAAAC,GACA,gBAAAC,IACA,SAAAC,IACA,UAAAC,IACA,QAAAC,IACA,OAAAC,IACA,aAAAC,IACA,SAAAC,IACA,eAAAC,IACA,aAAAC,IACA,SAAAC,IACA,aAAAC,IACA,YAAAC,GACA,YAAAC,IACA,eAAAC,GACA,eAAAC,IACA,SAAAC,IACA,sBAAAC,IACA,YAAAC,IACA,UAAAC,IACA,QAAAC,IACA,SAAAC,IACA,iBAAAC,IACA,UAAAC,IACA,WAAAC,IACA,UAAAC,IACA,SAAAC,IACA,UAAAC,IACA,OAAAC,IACA,eAAAC,IACA,WAAAC,IACA,KAAAC,IACA,QAAAC,IACA,MAAAC,IACA,MAAAC,IACA,SAAAC,IACA,sBAAAC,IACA,SAAAC,IACA,OAAAC,IACA,SAAAC,IACA,MAAAC,IACA,SAAAC,IACA,UAAAC,IACA,WAAAC,IACA,iBAAAC,IACA,SAAAC,IACA,OAAAC,IACA,UAAAC,IACA,UAAAC,IACA,UAAAC,IACA,YAAAC,IACA,SAAAC,IACA,MAAAC,IACA,SAAAC,IACA,MAAAC,IACA,WAAAC,IACA,oBAAAC,IACA,mBAAAC,IACA,UAAAC,IACA,WAAAC,GACA,gBAAAC,IACA,cAAAC,IACA,SAAAC,IACA,iBAAAC,GACA,iBAAAC,IACA,SAAAC,IACA,aAAAC,IACA,QAAAC,GACA,YAAAC,IACA,QAAAC,IACA,MAAAC,IACA,SAAAC,IACA,SAAAC,IACA,QAAAC,IACA,iBAAAC,IACA,cAAAC,IACA,SAAAC,GACA,UAAAC,IACA,SAAAC,IACA,WAAAC,IACA,YAAAC,IACA,UAAAC,IACA,eAAAC,IACA,SAAAC,IACA,YAAAC,IACA,SAAAC,IACA,WAAAC,IACA,SAAAC,IACA,oBAAAC,IACA,YAAAC,IACA,OAAAC,IACA,8BAAAC,IACA,SAAAC,IACA,QAAAC,IACA,oBAAAC,IACA,YAAAC,IACA,SAAAC,IACA,kBAAAC,IACA,cAAAC,IACA,OAAAC,IACA,YAAAC,IACA,WAAAC,IACA,QAAAC,IACA,SAAAC,IACA,MAAAC,IACA,cAAAC,GACF,ECl+FA,SAAS,iBAAiB,mBAAoB,SAAUE,EAAQ,CAC5DC,GAAQ,IAAIC,GAAKA,GAAKA,EAAG,EACzBC,GAAI,MAAM,CACd,CAAC,ECRD,OAAO,YAAc,SAAqBC,EAAU,CAChD,GAAI,CACA,IAAIC,EAAS,SAAS,eAAeD,CAAQ,EACzC,UAAU,UAAU,YAAY,EAAE,QAAQ,SAAS,EAAI,IACvDC,EAAO,cAAc,MAAM,EAC3BA,EAAO,cAAc,MAAM,GAE3BA,EAAO,cAAc,SAAS,YAAY,QAAS,GAAO,IAAI,CAEtE,MAAiB,CACb,OAAO,MAAM,CACjB,CACJ,ECNAC,GAAM,MAAM,EACZ,OAAO,MAAQA,GAKfC,GAAM,QAAQ,MAAQ,GAKtB,SAAS,iBAAiB,mBAAoB,SAAUC,EAAQ,CAEhE,CAAC",
  "names": ["adapters_default", "init_adapters", "__esmMin", "logger_default", "init_logger", "__esmMin", "init_adapters", "messages", "adapters_default", "now", "secondsSince", "ConnectionMonitor", "connection_monitor_default", "init_connection_monitor", "__esmMin", "init_logger", "time", "connection", "logger_default", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "internal_default", "init_internal", "__esmMin", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "connection_default", "init_connection", "__esmMin", "init_adapters", "init_connection_monitor", "init_internal", "init_logger", "internal_default", "consumer", "connection_monitor_default", "data", "logger_default", "socketProtocols", "adapters_default", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "Subscription", "init_subscription", "__esmMin", "object", "properties", "key", "value", "consumer", "params", "mixin", "action", "data", "SubscriptionGuarantor", "subscription_guarantor_default", "init_subscription_guarantor", "__esmMin", "init_logger", "subscriptions", "subscription", "logger_default", "s", "Subscriptions", "init_subscriptions", "__esmMin", "init_subscription", "init_subscription_guarantor", "init_logger", "consumer", "subscription_guarantor_default", "channelName", "mixin", "channel", "params", "subscription", "Subscription", "identifier", "s", "callbackName", "args", "subscriptions", "logger_default", "command", "createWebSocketURL", "url", "a", "Consumer", "init_consumer", "__esmMin", "init_connection", "init_subscriptions", "Subscriptions", "connection_default", "data", "subprotocol", "src_exports", "__export", "connection_default", "connection_monitor_default", "Consumer", "internal_default", "Subscription", "subscription_guarantor_default", "Subscriptions", "adapters_default", "createConsumer", "createWebSocketURL", "getConfig", "logger_default", "url", "name", "element", "init_src", "__esmMin", "init_connection", "init_connection_monitor", "init_consumer", "init_internal", "init_subscription", "init_subscriptions", "init_subscription_guarantor", "init_adapters", "init_logger", "require_doT", "__commonJSMin", "exports", "module", "doT", "template", "compile", "setDelimiters", "encoderType", "defaultSyntax", "currentSyntax", "TYPES", "resolveDefs", "c", "syn", "block", "def", "_", "code", "assign", "value", "param", "v", "s", "d", "rw", "unescape", "tmpl", "ds", "sameDelimiters", "getSyntax", "sid", "str", "needEncoders", "typ", "val", "error", "enc", "e", "elseCase", "arr", "vName", "iName", "defI", "incI", "args", "properties", "try_", "checkEncoders", "addEncoders", "f", "start", "end", "delimiters", "escape", "syntax", "strToRegExp", "escapeCharacters", "regexpPattern", "rx", "flags", "a", "i", "encoders", "require_debounce", "__commonJSMin", "exports", "module", "debounce", "func", "wait", "immediate", "timeout", "args", "context", "timestamp", "result", "later", "last", "debounced", "callNow", "insertReplacement", "source", "rx", "replacement", "newParts", "chunk", "raw", "i", "list", "interpolate", "phrase", "options", "dollarRegex", "dollarBillsYall", "interpolated", "arg", "defaultOnMissingKey", "_onMissingKey", "_Translator_instances", "apply_fn", "Translator", "init_Translator", "__esmMin", "key", "locales", "onMissingKey", "__privateAdd", "__publicField", "n", "__privateMethod", "__privateSet", "string", "__privateGet", "plural", "locale", "prevLocale", "BasePlugin", "init_BasePlugin", "__esmMin", "init_Translator", "uppy", "opts", "__publicField", "plugins", "update", "newOpts", "translator", "Translator", "plugin", "state", "pad", "number", "getTimeStamp", "date", "hours", "minutes", "seconds", "init_getTimeStamp", "__esmMin", "justErrorsLogger", "debugLogger", "init_loggers", "__esmMin", "init_getTimeStamp", "args", "getTimeStamp", "isDOMElement", "obj", "init_isDOMElement", "__esmMin", "findDOMElement", "element", "context", "isDOMElement", "findDOMElement_default", "init_findDOMElement", "__esmMin", "init_isDOMElement", "getTextDirection", "element", "getTextDirection_default", "init_getTextDirection", "__esmMin", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__c", "constructor", "__v", "vnodeId", "__i", "__u", "options", "Fragment", "BaseComponent", "context", "this", "getDomSibling", "childIndex", "sibling", "renderComponent", "component", "__P", "__d", "oldVNode", "oldDom", "commitQueue", "refQueue", "newVNode", "diff", "__n", "namespaceURI", "commitRoot", "updateParentDomPointers", "base", "some", "child", "enqueueRender", "c", "rerenderQueue", "push", "process", "__r", "prevDebounce", "debounceRendering", "defer", "l", "sort", "depthSort", "shift", "diffChildren", "parentDom", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "namespace", "excessDomChildren", "isHydrating", "childVNode", "newDom", "firstChildDom", "result", "shouldPlace", "oldChildren", "EMPTY_ARR", "newChildrenLength", "constructNewChildrenArray", "EMPTY_OBJ", "applyRef", "insert", "nextSibling", "skewedIndex", "matchingIndex", "oldChildrenLength", "remainingOldChildren", "skew", "Array", "String", "isArray", "findMatchingIndex", "unmount", "parentVNode", "insertBefore", "nodeType", "toChildArray", "out", "x", "y", "matched", "shouldSearch", "setStyle", "style", "value", "setProperty", "IS_NON_DIMENSIONAL", "test", "dom", "name", "oldValue", "useCapture", "lowerCaseName", "o", "cssText", "replace", "CAPTURE_REGEX", "toLowerCase", "_attached", "eventClock", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "createEventProxy", "eventHandler", "_dispatched", "event", "tmp", "isNew", "oldProps", "oldState", "snapshot", "clearProcessingException", "newProps", "isClassComponent", "provider", "componentContext", "renderHook", "count", "newType", "outer", "prototype", "render", "contextType", "__E", "doRender", "sub", "state", "__h", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "apply", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "cloneNode", "then", "MODE_HYDRATE", "indexOf", "markAsForce", "diffElementNodes", "diffed", "root", "cb", "map", "newHtml", "oldHtml", "newChildren", "inputValue", "checked", "localName", "document", "createTextNode", "createElementNS", "is", "__m", "data", "childNodes", "attributes", "__html", "innerHTML", "content", "undefined", "hasRefUnmount", "current", "skipRemove", "r", "componentWillUnmount", "replaceNode", "documentElement", "firstChild", "isValidElement", "init_preact_module", "__esmMin", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "Promise", "bind", "resolve", "setTimeout", "a", "b", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "hooks", "__H", "__P", "__h", "some", "invokeCleanup", "invokeEffect", "e", "options", "__e", "__v", "afterNextFrame", "callback", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "requestAnimationFrame", "hook", "comp", "currentComponent", "cleanup", "__c", "__", "currentIndex", "previousComponent", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "oldRoot", "_options", "__b", "__r", "diffed", "unmount", "vnode", "parentDom", "__k", "__m", "hookItem", "__N", "_pendingArgs", "c", "length", "push", "commitQueue", "filter", "cb", "hasErrored", "s", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "useLayoutEffect", "PureComponent", "p", "c", "this", "context", "detachedClone", "vnode", "detachedParent", "parentDom", "__c", "__H", "__", "forEach", "effect", "__P", "__e", "__k", "map", "child", "removeOriginal", "originalParent", "__v", "appendChild", "Suspense", "__u", "_suspenders", "__b", "suspended", "component", "__a", "SuspenseList", "_next", "_map", "render", "parent", "callback", "textContent", "preactRender", "oldDiffHook", "REACT_FORWARD_SYMBOL", "oldCatchError", "oldUnmount", "resolve", "REACT_ELEMENT_TYPE", "CAMEL_PROPS", "ON_ANI", "CAMEL_REPLACE", "IS_DOM", "onChangeInputType", "oldEventHook", "currentComponent", "classNameDescriptorNonEnumberable", "oldVNodeHook", "oldBeforeRender", "oldDiffed", "prototype", "Component", "isPureReactComponent", "shouldComponentUpdate", "state", "options", "type", "__f", "ref", "Symbol", "for", "error", "newVNode", "oldVNode", "errorInfo", "then", "unmount", "__z", "__R", "promise", "suspendingVNode", "suspendingComponent", "push", "resolved", "onResolved", "onSuspensionComplete", "originalParentDom", "suspendedVNode", "__O", "setState", "pop", "forceUpdate", "componentWillUnmount", "document", "createElement", "detachedComponent", "fallback", "Fragment", "children", "list", "node", "delete", "revealOrder", "size", "length", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "toChildArray", "reverse", "set", "componentDidUpdate", "componentDidMount", "_this", "test", "isReactComponent", "key", "Object", "defineProperty", "configurable", "v", "writable", "value", "event", "e", "persist", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "nativeEvent", "class", "normalizedProps", "isNonDashedType", "indexOf", "lowerCased", "toLowerCase", "replace", "multiple", "Array", "isArray", "selected", "defaultValue", "className", "$$typeof", "__r", "diffed", "dom", "debounce", "fn", "calling", "latestArgs", "args", "_updateUI", "_UIPlugin", "UIPlugin", "UIPlugin_default", "init_UIPlugin", "__esmMin", "init_findDOMElement", "init_getTextDirection", "init_compat_module", "init_BasePlugin", "BasePlugin", "__privateAdd", "__publicField", "target", "targetPlugin", "Target", "p", "plugin", "callerPluginName", "targetElement", "findDOMElement_default", "uppyRootElement", "__privateSet", "state", "nn", "getTextDirection_default", "message", "container", "_a", "__privateGet", "package_default", "init_package", "__esmMin", "_callbacks", "_DefaultStore_instances", "publish_fn", "DefaultStore", "lib_default", "init_lib", "__esmMin", "init_package", "__privateAdd", "__publicField", "patch", "prevState", "nextState", "__privateMethod", "listener", "__privateGet", "args", "package_default", "getFileNameAndExtension", "fullFileName", "lastDot", "init_getFileNameAndExtension", "__esmMin", "mimeTypes_default", "init_mimeTypes", "__esmMin", "getFileType", "file", "fileExtension", "getFileNameAndExtension", "mimeTypes_default", "init_getFileType", "__esmMin", "init_getFileNameAndExtension", "init_mimeTypes", "encodeCharacter", "character", "encodeFilename", "name", "suffix", "generateFileID", "file", "instanceId", "id", "hasFileStableId", "getSafeFileId", "fileType", "getFileType", "init_generateFileID", "__esmMin", "init_getFileType", "require_isObject", "__commonJSMin", "exports", "module", "isObject", "value", "type", "require_freeGlobal", "__commonJSMin", "exports", "module", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "freeGlobal", "freeSelf", "root", "require_now", "__commonJSMin", "exports", "module", "root", "now", "require_trimmedEndIndex", "__commonJSMin", "exports", "module", "reWhitespace", "trimmedEndIndex", "string", "index", "require_baseTrim", "__commonJSMin", "exports", "module", "trimmedEndIndex", "reTrimStart", "baseTrim", "string", "require_Symbol", "__commonJSMin", "exports", "module", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_isObjectLike", "__commonJSMin", "exports", "module", "isObjectLike", "value", "require_isSymbol", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "symbolTag", "isSymbol", "value", "require_toNumber", "__commonJSMin", "exports", "module", "baseTrim", "isObject", "isSymbol", "NAN", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "toNumber", "value", "other", "isBinary", "require_debounce", "__commonJSMin", "exports", "module", "isObject", "now", "toNumber", "FUNC_ERROR_TEXT", "nativeMax", "nativeMin", "debounce", "func", "wait", "options", "lastArgs", "lastThis", "maxWait", "result", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "invokeFunc", "time", "args", "thisArg", "leadingEdge", "timerExpired", "remainingWait", "timeSinceLastCall", "timeSinceLastInvoke", "timeWaiting", "shouldInvoke", "trailingEdge", "cancel", "flush", "debounced", "isInvoking", "require_throttle", "__commonJSMin", "exports", "module", "debounce", "isObject", "FUNC_ERROR_TEXT", "throttle", "func", "wait", "options", "leading", "trailing", "require_namespace_emitter", "__commonJSMin", "exports", "module", "emitter", "_fns", "event", "arg1", "arg2", "arg3", "arg4", "arg5", "arg6", "toEmit", "getListeners", "emitAll", "fn", "one", "keep", "fns", "i", "l", "e", "out", "idx", "args", "keys", "key", "urlAlphabet", "nanoid", "init_non_secure", "__esmMin", "size", "id", "i", "package_default", "init_package", "__esmMin", "getFileName", "fileType", "fileDescriptor", "init_getFileName", "__esmMin", "locale_default", "init_locale", "__esmMin", "module", "input", "neg", "num", "units", "exponent", "value", "unit", "require_wildcard", "__commonJSMin", "exports", "module", "WildcardMatcher", "text", "separator", "input", "matches", "parts", "ii", "partsCount", "testParts", "key", "test", "matcher", "require_mime_match", "__commonJSMin", "exports", "module", "wildcard", "reMimePartSplit", "target", "pattern", "test", "result", "import_prettier_bytes", "import_mime_match", "defaultOptions", "RestrictionError", "Restricter", "init_Restricter", "__esmMin", "message", "opts", "__publicField", "getOpts", "getI18n", "existingFiles", "addingFiles", "maxTotalFileSize", "maxNumberOfFiles", "totalFilesSize", "total", "f", "prettierBytes", "file", "maxFileSize", "minFileSize", "allowedFileTypes", "type", "match", "allowedFileTypesString", "addingFile", "files", "minNumberOfFiles", "error", "requiredMetaFields", "missingFields", "field", "supportsUploadProgress", "userAgent", "m", "version", "major", "minor", "init_supportsUploadProgress", "__esmMin", "import_throttle", "import_namespace_emitter", "defaultUploadState", "_plugins", "_restricter", "_storeUnsubscribe", "_emitter", "_preProcessors", "_uploaders", "_postProcessors", "_Uppy_instances", "informAndEmit_fn", "checkRequiredMetaFieldsOnFile_fn", "checkRequiredMetaFields_fn", "assertNewUploadAllowed_fn", "transformFile_fn", "startIfAutoProceed_fn", "checkAndUpdateFileState_fn", "getFilesToRetry_fn", "doRetryAll_fn", "_handleUploadProgress", "updateTotalProgress_fn", "_updateTotalProgressThrottled", "calculateTotalProgress_fn", "addListeners_fn", "_updateOnlineStatus", "_requestClientById", "createUpload_fn", "getUpload_fn", "removeUpload_fn", "runUpload_fn", "_Uppy", "Uppy", "Uppy_default", "init_Uppy", "__esmMin", "init_lib", "init_generateFileID", "init_getFileNameAndExtension", "init_getFileType", "init_Translator", "init_non_secure", "init_package", "init_getFileName", "init_locale", "init_loggers", "init_Restricter", "init_supportsUploadProgress", "opts", "__privateAdd", "ee", "__publicField", "file", "progress", "fileInState", "newProgress", "__privateGet", "throttle", "__privateMethod", "locale_default", "defaultOptions", "files", "lib_default", "justErrorsLogger", "merged", "debugLogger", "supportsUploadProgress", "__privateSet", "Restricter", "prevState", "nextState", "patch", "event", "args", "callback", "state", "plugin", "filesWithNewState", "existingFilesState", "fileID", "newFileState", "onMissingKey", "key", "translator", "Translator", "newOpts", "defaultProgress", "updatedFiles", "capabilities", "currentUploads", "fn", "data", "updatedMeta", "newMeta", "ids", "id", "filesObject", "totalProgress", "error", "inProgressFiles", "newFiles", "startedFiles", "uploadStartedFiles", "pausedFiles", "completeFiles", "erroredFiles", "inProgressNotPausedFiles", "processingFiles", "err", "existingFiles", "nextFilesState", "validFilesToAdd", "errors", "restrictionErrors", "firstValidFileToAdd", "fileDescriptors", "nonRestrictionErrors", "message", "subError", "fileIDs", "updatedUploads", "removedFiles", "fileIsNotRemoved", "uploadFileID", "uploadID", "newFileIDs", "stateUpdate", "removedFileIDs", "isPaused", "updatedFile", "result", "Plugin", "msg", "pluginId", "existsPluginAlready", "plugins", "foundPlugin", "type", "method", "instance", "list", "index", "item", "updatedState", "info", "duration", "isComplexMessage", "logger", "client", "requestClient", "currentUpload", "retryResult", "onBeforeUploadResult", "RestrictionError", "currentlyUploadingFiles", "curr", "waitingFileIDs", "userFacingErrors", "maxNumToShow", "firstErrors", "additionalErrors", "details", "missingFields", "success", "allowNewUpload", "fileDescriptorOrFile", "fileType", "getFileType", "fileName", "getFileName", "fileExtension", "getFileNameAndExtension", "getSafeFileId", "meta", "size", "filesToAdd", "fileToAdd", "newFile", "isGhost", "onBeforeFileAddedResult", "fileId", "filesToRetry", "totalProgressPercent", "filesInProgress", "isSizedFile", "sizedFilesInProgress", "unsizedFilesInProgress", "totalFilesSize", "acc", "totalUploadedSize", "errorHandler", "response", "errorMsg", "newError", "uploadStalledWarningRecentlyEmitted", "onUploadStarted", "filesFiltered", "exists", "filesState", "uploadResp", "currentProgress", "forceAllowNewUpload", "nanoid", "getCurrentUpload", "steps", "step", "successful", "failed", "package_default", "init_lib", "__esmMin", "init_BasePlugin", "init_UIPlugin", "init_Uppy", "require_classnames", "__commonJSMin", "exports", "module", "hasOwn", "classNames", "classes", "i", "arg", "appendClass", "parseValue", "key", "value", "newClass", "isDragDropSupported", "div", "init_isDragDropSupported", "__esmMin", "toArray_default", "init_toArray", "__esmMin", "fallbackApi", "dataTransfer", "files", "toArray_default", "init_fallbackApi", "__esmMin", "init_toArray", "getFilesAndDirectoriesFromDirectory", "directoryReader", "oldEntries", "logDropError", "onSuccess", "entries", "newEntries", "error", "init_getFilesAndDirectoriesFromDirectory", "__esmMin", "getAsFileSystemHandleFromEntry", "entry", "logDropError", "resolve", "reject", "directoryReader", "getFilesAndDirectoriesFromDirectory", "dirEntries", "file", "createPromiseToAddFileOrParseDirectory", "relativePath", "lastResortFile", "getNextRelativePath", "handle", "getFilesFromDataTransfer", "dataTransfer", "fileSystemHandles", "item", "fileSystemHandle", "err", "init_webkitGetAsEntryApi", "__esmMin", "init_getFilesAndDirectoriesFromDirectory", "getDroppedFiles", "dataTransfer", "options", "logDropError", "accumulator", "file", "getFilesFromDataTransfer", "fallbackApi", "init_getDroppedFiles", "__esmMin", "init_fallbackApi", "init_webkitGetAsEntryApi", "require_tut_drag_drop", "__commonJSMin", "exports", "module", "init_lib", "init_Translator", "init_isDragDropSupported", "init_getDroppedFiles", "TutDragDrop", "BasePlugin", "uppy", "opts", "defaultOptions", "isDragDropSupported", "newOpts", "Translator", "files", "descriptors", "file", "error", "event", "logDropError", "getDroppedFiles", "randomId", "restrictions", "inputText", "tooltip", "__publicField", "root", "factory", "exports", "module", "define", "amd", "a", "i", "self", "leafPrototypes", "getProto", "cssKeywords", "reverseKeywords", "key", "Object", "keys", "convert", "rgb", "channels", "labels", "hsl", "hsv", "hwb", "cmyk", "xyz", "lab", "lch", "hex", "keyword", "ansi16", "ansi256", "hcg", "apple", "gray", "model", "Error", "length", "defineProperty", "value", "r", "g", "b", "min", "Math", "max", "delta", "h", "s", "l", "rdif", "gdif", "bdif", "v", "diff", "diffc", "c", "w", "k", "reversed", "currentClosestKeyword", "currentClosestDistance", "Infinity", "distance", "y", "x", "z", "t2", "t3", "val", "t1", "smin", "lmin", "hi", "floor", "f", "p", "q", "t", "vmin", "sl", "wh", "bl", "ratio", "n", "m", "y2", "x2", "z2", "atan2", "PI", "sqrt", "hr", "cos", "sin", "args", "saturation", "round", "ansi", "color", "mult", "rem", "string", "toString", "toUpperCase", "substring", "match", "colorString", "split", "map", "char", "join", "integer", "parseInt", "chroma", "grayscale", "hue", "pure", "mg", "e", "conversions", "route", "forEach", "fromModel", "routes", "toModel", "fn", "wrappedFn", "arg0", "result", "len", "conversion", "raw", "deriveBFS", "graph", "models", "parent", "buildGraph", "queue", "current", "pop", "adjacents", "adjacent", "node", "unshift", "link", "from", "to", "wrapConversion", "path", "cur", "__webpack_module_cache__", "__webpack_require__", "moduleId", "cachedModule", "__webpack_modules__", "getPrototypeOf", "obj", "mode", "this", "__esModule", "then", "ns", "create", "def", "indexOf", "getOwnPropertyNames", "d", "definition", "o", "enumerable", "get", "prop", "prototype", "hasOwnProperty", "call", "Symbol", "toStringTag", "bP", "colors", "label", "hasBorder", "defaultConfig", "toolbar", "shouldNotGroupWhenFull", "items", "fontSize", "options", "fontColor", "fontBackgroundColor", "image", "styles", "table", "contentToolbar", "language", "globalVar", "window", "document", "getUserAgent", "navigator", "userAgent", "toLowerCase", "isMac", "isWindows", "isGecko", "isSafari", "isiOS", "isAndroid", "isBlink", "isMediaForcedColors", "matchMedia", "matches", "isMotionReduced", "features", "isRegExpUnicodePropertySupported", "maxTouchPoints", "isSupported", "search", "RegExp", "error", "fastDiff", "cmp", "atomicChanges", "arrayA", "Array", "isArray", "slice", "arrayB", "changeIndexes", "arr1", "arr2", "firstIndex", "findFirstDifferenceIndex", "lastIndexOld", "lastIndexNew", "oldArrayReversed", "cutAndReverse", "newArrayReversed", "lastIndex", "newLength", "fill", "concat", "newArray", "push", "index", "type", "values", "howMany", "arr", "reverse", "aLength", "bLength", "_insert", "_delete", "tmp", "es", "fp", "snake", "y1", "dir", "mix", "baseClass", "mixins", "mixin", "propertyNames", "propertySymbols", "getOwnPropertySymbols", "sourceDescriptor", "getOwnPropertyDescriptor", "spy", "called", "EventInfo", "source", "name", "stop", "off", "HEX_NUMBERS", "_", "uid", "r1", "r2", "r3", "r4", "crypto", "getRandomValues", "Uint32Array", "T", "priority", "normal", "highest", "high", "low", "lowest", "insertToPriorityArray", "objects", "objectToInsert", "splice", "P", "errorName", "context", "data", "super", "processedObjects", "WeakSet", "circularReferencesReplacer", "has", "constructor", "add", "stringifiedData", "JSON", "stringify", "documentationLink", "getLinkToDocumentationMessage", "err", "is", "message", "stack", "S", "console", "warn", "formatConsoleArguments", "documentationMessage", "version", "releaseDate", "Date", "globalThis", "CKEDITOR_VERSION", "_listeningTo", "_emitterId", "_delegations", "defaultEmitterClass", "EmitterMixin", "base", "event", "callback", "listenTo", "wasFired", "stopListening", "emitter", "emitterInfo", "eventCallbacks", "emitters", "_getEmitterId", "_setEmitterId", "emitterId", "callbacks", "listener", "_addEventListener", "removeEventListener", "eventOrInfo", "eventInfo", "getCallbacksForEvent", "callbackArgs", "apply", "_removeEventListener", "delegations", "destinations", "passAllDestinations", "fireDelegatedEvents", "return", "rethrowUnexpectedError", "events", "nameOrFunction", "Map", "eventName", "set", "delete", "clear", "getEvents", "childEventName", "newEventNodes", "childEvents", "substr", "lastIndexOf", "lists", "getCallbacksListsForNamespace", "callbackDefinition", "id", "_events", "eventNode", "callbacksLists", "childCallbacksLists", "fireArgs", "delegatedInfo", "fire", "observablePropertiesSymbol", "boundObservablesSymbol", "boundPropertiesSymbol", "decoratedMethods", "decoratedOriginal", "defaultObservableClass", "ObservableMixin", "property", "initObservable", "properties", "configurable", "oldValue", "newValue", "bindProperties", "isStringArray", "Set", "size", "boundProperties", "propertyName", "bindings", "binding", "bindTo", "toMany", "bindToMany", "_observable", "_bindProperties", "_to", "_bindings", "unbindProperties", "boundObservables", "toObservable", "toProperty", "toProperties", "toPropertyBindings", "boundObservable", "methodName", "originalMethod", "object", "on", "evt", "observable", "parsedArgs", "parsed", "lastObservable", "parseBindToArgs", "bindingsKeys", "numberOfBindings", "updateBoundObservableProperty", "chain", "toPropertyName", "bindingsToObservable", "observables", "attribute", "observableAndAttributePairs", "every", "propertyValue", "ElementReplacer", "_replacedElements", "element", "newElement", "style", "display", "parentNode", "insertBefore", "nextSibling", "restore", "remove", "count", "iterable", "compareArrays", "minLen", "isIterable", "iterator", "ce", "global", "freeSelf", "de", "Function", "ue", "objectProto", "ge", "nativeObjectToString", "symToStringTag", "be", "isOwn", "tag", "unmasked", "we", "_e", "ve", "ye", "ke", "Ce", "Ae", "createElement", "doc", "attributes", "children", "namespace", "xmlns", "createElementNS", "setAttribute", "child", "createTextNode", "appendChild", "Te", "func", "transform", "arg", "Ee", "funcProto", "Se", "funcToString", "Ve", "objectCtorString", "Oe", "proto", "Ctor", "Me", "__data__", "Be", "other", "Ne", "array", "De", "Le", "ze", "He", "ListCache", "entries", "entry", "$e", "We", "Ue", "je", "qe", "Ke", "Ge", "Ze", "maskSrcKey", "exec", "IE_PROTO", "Ye", "Xe", "Qe", "reIsHostCtor", "tt", "it", "nt", "st", "reIsNative", "replace", "rt", "test", "at", "lt", "ct", "ht", "dt", "ut", "mt", "gt", "ft", "pt", "bt", "Hash", "_t", "wt", "vt", "yt", "kt", "Ct", "At", "xt", "Tt", "MapCache", "Pt", "Et", "St", "pairs", "LARGE_ARRAY_SIZE", "Stack", "Vt", "It", "Rt", "iteratee", "Ot", "Mt", "Bt", "Nt", "objValue", "Ft", "props", "customizer", "isNew", "undefined", "Dt", "Lt", "zt", "Ht", "propertyIsEnumerable", "$t", "arguments", "Ut", "freeExports", "nodeType", "freeModule", "Buffer", "Gt", "isBuffer", "reIsUint", "Jt", "Yt", "typedArrayTags", "Qt", "ei", "ti", "ii", "freeProcess", "process", "si", "types", "require", "nodeIsTypedArray", "isTypedArray", "ri", "ai", "li", "inherited", "isArr", "isArg", "isBuff", "isType", "skipIndexes", "String", "ci", "di", "ui", "mi", "gi", "fi", "pi", "bi", "wi", "_i", "isProto", "vi", "yi", "ki", "Ci", "Ai", "allocUnsafe", "Ti", "buffer", "isDeep", "copy", "Ei", "Pi", "predicate", "resIndex", "Si", "Ii", "nativeGetSymbols", "Ri", "symbol", "Oi", "Mi", "offset", "Bi", "Ni", "Fi", "keysFunc", "symbolsFunc", "Di", "Li", "zi", "Hi", "Wi", "$i", "Ui", "promiseTag", "qi", "Ki", "Gi", "dataViewCtorString", "mapCtorString", "promiseCtorString", "setCtorString", "weakMapCtorString", "getTag", "ArrayBuffer", "resolve", "ctorString", "tn", "en", "nn", "sn", "input", "Uint8Array", "rn", "arrayBuffer", "byteLength", "an", "dataView", "byteOffset", "reFlags", "cn", "regexp", "symbolProto", "symbolValueOf", "valueOf", "un", "mn", "typedArray", "gn", "objectCreate", "pn", "bn", "wn", "nodeIsMap", "isMap", "vn", "yn", "nodeIsSet", "isSet", "Cn", "An", "xn", "Tn", "cloneableTags", "Pn", "baseClone", "bitmask", "isFlat", "isFull", "isFunc", "stacked", "subValue", "Sn", "In", "Config", "configurations", "defaultConfigurations", "_config", "cloneConfig", "_setObjectToTarget", "_setToTarget", "_getFromSource", "names", "target", "isDefine", "parts", "part", "configuration", "leaveItemReferences", "isNode", "defaultView", "Document", "ownerDocument", "Node", "isWindow", "stringifiedObject", "Nn", "DomEmitterMixin", "proxyOptions", "capture", "useCapture", "passive", "usePassive", "proxyEmitter", "_getProxyEmitter", "ProxyEmitter", "proxyEmitters", "_getAllProxyEmitters", "proxy", "listeningEmitter", "listenedToEmitterId", "listeningTo", "getProxyEmitterId", "filter", "_domNode", "_options", "_domListeners", "domListener", "_createDomListener", "addEventListener", "removeListener", "attach", "detach", "domEvt", "option", "sort", "getAncestors", "nodes", "currentNode", "DOCUMENT_NODE", "getBorderWidths", "getComputedStyle", "top", "borderTopWidth", "right", "borderRightWidth", "bottom", "borderBottomWidth", "left", "borderLeftWidth", "getRangeFromMouseEvent", "domEvent", "domDoc", "clientX", "clientY", "domRange", "caretRangeFromPoint", "rangeParent", "createRange", "setStart", "rangeOffset", "collapse", "isText", "isRange", "getPositionedAncestor", "offsetParent", "body", "rectProperties", "Kn", "isSourceRange", "_source", "writable", "isDomElement", "rangeRects", "getDomRangeRects", "copyRectProperties", "getBoundingRect", "getBoundingClientRect", "innerWidth", "innerHeight", "width", "height", "clone", "anotherRect", "rect", "newRect", "getIntersection", "getArea", "getVisible", "visibleRect", "isBody", "absolutelyPositionedChildElement", "commonAncestorContainer", "isParentOverflowVisible", "HTMLElement", "overflow", "getElementPosition", "parentElementPosition", "parentRect", "intersectionRect", "intersectRect", "isEqual", "toAbsoluteRect", "scrollX", "scrollY", "absoluteRect", "moveBy", "positionedAncestor", "positionedElementAncestor", "ancestorPosition", "ancestorBorderWidths", "moveX", "moveY", "scrollLeft", "scrollTop", "excludeScrollbarsAndBorders", "scrollBarWidth", "scrollBarHeight", "direction", "documentElement", "clientWidth", "clientHeight", "borderWidths", "offsetWidth", "offsetHeight", "range", "rects", "clientRects", "getClientRects", "startContainer", "boundingRectData", "Number", "POSITIVE_INFINITY", "NEGATIVE_INFINITY", "rectangleCount", "position", "ResizeObserver", "_observerInstance", "_createObserver", "_element", "_callback", "_addElementCallback", "observe", "destroy", "_deleteElementCallback", "_elementCallbacks", "_getElementCallbacks", "unobserve", "Qn", "Xn", "setDataInElement", "el", "HTMLTextAreaElement", "innerHTML", "toUnit", "unit", "previousSibling", "insertAt", "parentElement", "nodeToInsert", "childNodes", "isComment", "COMMENT_NODE", "isVisible", "getOptimalPosition", "positions", "limiter", "fitInViewport", "viewportOffsetConfig", "constrainedViewportRect", "assign", "viewportRect", "elementRect", "visibleTargetRect", "getVisibleViewportIntersectionRect", "bestPosition", "positionOptions", "targetRect", "visibleLimiterRect", "limiterRect", "elementRectArea", "positionInstances", "positioningFunction", "PositionObject", "maxFitFactor", "limiterIntersectionArea", "viewportIntersectionArea", "fitFactor", "visibleSourceRect", "positioningFunctionOutput", "config", "_positioningFunctionCoordinates", "_absoluteRect", "getIntersectionArea", "_rect", "_cachedRect", "moveTo", "_cachedAbsoluteRect", "removeChild", "scrollWindowToShowRect", "alignToTop", "forceScroll", "viewportOffset", "targetShiftedDownRect", "targetShiftedUpRect", "forceScrollToTop", "allRectsFitInViewport", "contains", "initialScrollX", "initialScrollY", "isAbove", "isBelow", "isLeftOf", "isRightOf", "scrollTo", "scrollAncestorsToShowRect", "getRect", "ancestorOffset", "limiterElement", "parentWindow", "getWindow", "targetFitsInTarget", "firstRect", "secondRect", "elementOrRange", "getParentElement", "getRectRelativeToWindow", "relativeWindow", "targetWindow", "currentWindow", "frame", "frameElement", "frameRect", "modifiersToGlyphsMac", "ctrl", "cmd", "alt", "shift", "modifiersToGlyphsNonMac", "keyCodesToGlyphs", "keyCodes", "generateKnownKeyCodes", "keyCodeNames", "fromEntries", "code", "prettyKeyName", "charAt", "getCode", "keyCode", "altKey", "ctrlKey", "shiftKey", "metaKey", "parseKeystroke", "keystroke", "trim", "endsWith", "reduce", "sum", "getEnvKeystrokeText", "keystrokeCode", "modifiers", "glyph", "getLocalizedArrowKeyCodeDirection", "contentLanguageDirection", "isLtrContent", "arrowleft", "arrowright", "arrowup", "arrowdown", "pageup", "pagedown", "backspace", "enter", "space", "esc", "tab", "fromCharCode", "toArray", "Is", "Vs", "fromRight", "Rs", "Os", "Ms", "Bs", "srcIndex", "mergeFunc", "srcValue", "isCommon", "isTyped", "Ns", "baseMerge", "Fs", "Ds", "thisArg", "nativeMax", "zs", "start", "otherArgs", "Hs", "Ws", "nativeNow", "now", "js", "lastCalled", "stamp", "remaining", "qs", "Ks", "Gs", "assigner", "sources", "guard", "Zs", "_translate", "quantity", "translations", "normalizedTranslations", "CKEDITOR_TRANSLATIONS", "numberOfLanguages", "messageId", "dictionary", "plural", "getPluralForm", "translation", "RTL_LANGUAGE_CODES", "getLanguageDirection", "languageCode", "includes", "Locale", "uiLanguage", "contentLanguage", "uiLanguageDirection", "acc", "Collection", "initialItemsOrOptions", "hasInitialItems", "_items", "_itemMap", "_idProperty", "idProperty", "_bindToExternalToInternalMap", "WeakMap", "_bindToInternalToExternalMap", "_skippedIndexesFromExternal", "item", "_getItemIdBeforeAdding", "first", "last", "addMany", "itemId", "currentItemIndex", "added", "removed", "idOrIndex", "itemOrId", "subject", "_remove", "ctx", "find", "_bindToCollection", "removedItems", "externalCollection", "as", "Class", "_setUpBindToBinding", "using", "callbackOrProperty", "addItem", "externalItem", "isExternalBoundToThis", "externalItemBound", "finalIndex", "skipped", "getIndex", "itemDoesNotExist", "iteratorItem", "next", "done", "FocusTracker", "_elements", "_externalViews", "_blurTimeout", "elements", "externalViews", "elementOrView", "so", "_addElement", "isViewWithFocusTracker", "_addView", "focusTracker", "view", "_removeElement", "_removeView", "externalFocusedViewInSubtree", "subTreeRoot", "isFocusedView", "_focus", "_blur", "focusedElement", "isFocused", "_clearBlurTimeout", "activeElement", "setTimeout", "clearTimeout", "KeystrokeHandler", "_listener", "keyEvtData", "preventDefault", "stopPropagation", "toMap", "spliceArray", "newTarget", "delay", "wait", "timer", "delayed", "cancel", "isInsideSurrogatePair", "character", "isInsideCombinedSymbol", "EMOJI_PATTERN", "buildEmojiRegexp", "isInsideEmojiSequence", "matchAll", "some", "flagSequence", "emoji", "po", "editor", "_disableStack", "forceDisable", "isEnabled", "isContextPlugin", "isOfficialPlugin", "isPremiumPlugin", "Command", "_affectsData", "_isEnabledBasedOnSelection", "decorate", "refresh", "affectsData", "selection", "canEditAtSelection", "getFirstPosition", "rootName", "canEditAt", "isReadOnly", "_o", "MultiCommand", "_childCommandsDefinitions", "command", "_getFirstEnabledCommand", "execute", "_checkEnabled", "commandDefinition", "PluginCollection", "availablePlugins", "contextPlugins", "_plugins", "_context", "_availablePlugins", "PluginConstructor", "pluginName", "_contextPlugins", "pluginInstance", "plugin", "plugins", "pluginsToRemove", "pluginsSubstitutions", "that", "findAvailablePluginConstructors", "processed", "isPluginConstructor", "requires", "validatePlugins", "pluginConstructors", "getPluginConstructors", "isPluginRemoved", "pluginItem", "pluginToReplace", "indexInPluginConstructors", "pluginInstances", "_add", "initPlugins", "removedPlugin", "getPluginName", "parentPluginConstructor", "missingPlugin", "requiredBy", "method", "promise", "bind", "Promise", "promises", "all", "plugin1", "plugin2", "Context", "_contextOwner", "rest", "builtinPlugins", "languageConfig", "locale", "editors", "substitutePlugins", "Plugin", "init", "isContextOwner", "_getEditorConfig", "ContextPlugin", "documentPlaceholders", "hasDisplayedPlaceholderDeprecationWarning", "enablePlaceholder", "text", "isDirectHost", "keepOnFocus", "setPlaceholder", "hostElement", "change", "writer", "updateDocumentPlaceholders", "registerPostFixer", "evtInfo", "placeholder", "showPlaceholderTextDeprecationWarning", "hidePlaceholder", "hasClass", "removeClass", "placeholders", "directHostElements", "wasViewModified", "updatePlaceholder", "getChildPlaceholderHostSubstitute", "getAttribute", "childCount", "isAttached", "getChildren", "selectionAnchor", "anchor", "isComposing", "addClass", "firstChild", "getChild", "TypeCheckable", "Ro", "Oo", "pos", "getChildIndex", "getPath", "ancestors", "includeSelf", "parentFirst", "ancestorsA", "ancestorsB", "thisPath", "nodePath", "isBefore", "_removeChildren", "_fireChange", "toJSON", "json", "Text", "_textData", "_data", "otherNode", "_clone", "TextProxy", "textNode", "offsetInText", "offsetSize", "isPartial", "Matcher", "pattern", "_patterns", "singleElement", "isElementMatching", "results", "getElementName", "patterns", "attributeKeys", "getAttributeKeys", "class", "matchPatterns", "classes", "getClassNames", "getStyleNames", "getStyle", "valueGetter", "normalizedPatterns", "normalizedItems", "patternKey", "patternValue", "itemKey", "itemValue", "Lo", "reIsDeepProp", "reIsPlainProp", "Wo", "memoize", "resolver", "TypeError", "memoized", "cache", "Cache", "Uo", "$o", "jo", "rePropName", "reEscapeChar", "stringToPath", "charCodeAt", "number", "quote", "subString", "Zo", "Go", "Jo", "Yo", "symbolToString", "Qo", "baseToString", "er", "tr", "ir", "nr", "sr", "or", "end", "rr", "ar", "lr", "cr", "defaultValue", "nested", "dr", "StylesMap", "styleProcessor", "_styles", "_styleProcessor", "isEmpty", "inlineStyle", "parsedStyles", "stylesString", "quoteType", "propertyNameStart", "propertyValueStart", "stylesMap", "toNormalizedForm", "propertyDescriptor", "getReducedForm", "nameOrObject", "valueOrObject", "toPath", "_cleanEmptyObjectsOnPath", "getNormalized", "getStylesEntries", "expand", "pathParts", "parentPath", "parentObject", "StylesProcessor", "_normalizers", "_extractors", "_reducers", "_consumables", "appendStyleValue", "normalizer", "extractor", "normalizedValue", "styleNamesKeysSet", "callbackOrPath", "shorthandName", "styleNames", "_mapStyleNames", "alsoName", "stylesObject", "nameOrPath", "valueToSet", "Element", "attrs", "_unsafeAttributesToRender", "_customProperties", "_attrs", "attrsMap", "_children", "_insertChild", "_classes", "classString", "parseClasses", "stylesProcessor", "setTo", "getAttributes", "otherElement", "className", "getAsString", "matcher", "getCustomProperties", "getIdentity", "attributeName", "deep", "childrenClone", "cloned", "getFillerOffset", "stringValue", "classesSet", "classesString", "classArray", "ContainerElement", "lastChild", "EditableElement", "editableElement", "rootNameSymbol", "RootEditableElement", "getCustomProperty", "_setCustomProperty", "TreeWalker", "boundaries", "startPosition", "_position", "Position", "_createAt", "singleCharacters", "shallow", "ignoreElementEnd", "_boundaryStartParent", "_boundaryEndParent", "skip", "nextResult", "prevPosition", "_next", "_previous", "previousPosition", "isAtEnd", "_createAfter", "_formatReturnValue", "charactersCount", "textLength", "textProxy", "isAtStart", "_createBefore", "startOffset", "nextPosition", "nodeAfter", "nodeBefore", "endOffset", "editable", "shifted", "treeWalker", "otherPosition", "compareWith", "otherPath", "itemOrPosition", "Range", "isCollapsed", "getEnlarged", "getLastMatchingPosition", "enlargeTrimSkip", "getTrimmed", "isAfter", "nodeAfterStart", "nodeBeforeEnd", "otherRange", "loose", "containsStart", "containsPosition", "containsEnd", "ranges", "isIntersecting", "commonRangeStart", "commonRangeEnd", "getCommonAncestor", "getContainedElement", "startElement", "endElement", "getShiftedBy", "_createFromParentsAndOffsets", "_createFromPositionAndShift", "Selection", "_ranges", "_lastRangeBackward", "_isFake", "_fakeSelectionLabel", "isFake", "fakeSelectionLabel", "focus", "rangeCount", "isBackward", "getRanges", "getFirstRange", "getLastRange", "firstRange", "getLastPosition", "lastRange", "otherSelection", "thisRange", "found", "numOfRangesA", "rangeA", "rangeB", "getSelectedElement", "selectable", "placeOrOffset", "_setRanges", "_setFakeOptions", "DocumentSelection", "fake", "backward", "_createIn", "_createOn", "newFocus", "_addRange", "newRanges", "isLastBackward", "_pushRange", "storedRange", "addedRange", "intersectingRange", "_selection", "delegate", "isSimilar", "setFocus", "BubblingEventInfo", "startRange", "_eventPhase", "_currentTarget", "eventPhase", "currentTarget", "contextsSymbol", "BubblingEmitterMixin", "eventArgs", "eventContexts", "getBubblingContexts", "updateEventInfo", "fireListenerFor", "selectedElement", "isCustomContext", "Boolean", "getCustomContext", "startParent", "endParent", "startPath", "endPath", "contexts", "_postFixers", "roots", "postFixer", "wasFixed", "AttributeElement", "_priority", "_id", "_clonesGroup", "Lr", "getElementsWithSameId", "DEFAULT_PRIORITY", "Dr", "Fr", "nonUiChildrenCount", "EmptyElement", "Wr", "UIElement", "jr", "domDocument", "domConverter", "toDomElement", "domElement", "injectUiElementHandling", "domSelection", "domTarget", "getSelection", "domSelectionCollapsed", "getRangeAt", "collapsed", "domParent", "focusNode", "domOffset", "focusOffset", "viewPosition", "domPositionToView", "jumpedOverAnyUiElement", "nextViewPosition", "newDomPosition", "viewPositionToDom", "extend", "RawElement", "Kr", "DocumentFragment", "DowncastWriter", "_cloneGroups", "_slotFactory", "_setTo", "_setFocus", "attributeElement", "renderUnsafeAttributes", "childrenOrOptions", "containerElement", "emptyElement", "renderFunction", "uiElement", "render", "rawElement", "_setAttribute", "_removeAttribute", "_addClass", "_removeClass", "_setStyle", "_removeStyle", "_removeCustomProperty", "positionOrRange", "_breakAttributes", "_breakAttributesRange", "insert", "sourceRange", "targetPosition", "move", "positionOffset", "positionParent", "_removeFromClonedElementsGroup", "mergeAttributes", "mergeTextNodes", "_appendChild", "prev", "newPosition", "validateNodesToInsert", "nodeGroups", "groups", "lastGroup", "breakAttributes", "_insertNodes", "rangeOrItem", "validateRangeContainer", "breakStart", "breakEnd", "parentContainer", "mergePosition", "walker", "getWalker", "rangeToRemove", "ancestor", "countBefore", "_wrapPosition", "viewSelection", "setSelection", "_wrapRange", "newRange", "_unwrapChildren", "newName", "viewElement", "groupName", "modeOrFilter", "slotFactory", "_clearSlotFactory", "insertionPosition", "getParentContainer", "breakTextNode", "_addToClonedElementsGroup", "endPosition", "wrapElement", "wrapPositions", "isAttribute", "_wrapAttributeElement", "shouldABeOutsideB", "newAttribute", "_wrapChildren", "offsetChange", "unwrapElement", "unwrapPositions", "unwrapped", "_unwrapAttributeElement", "movePositionToTextNode", "fakeElement", "createAttributeElement", "wrapRange", "wrap", "wrapper", "toWrap", "canBeJoined", "hasAttribute", "hasStyle", "setStyle", "toUnwrap", "removeAttribute", "removeStyle", "forceSplitText", "rangeStart", "rangeEnd", "isContainerOrFragment", "offsetAfter", "clonedNode", "nodesToMove", "group", "textToMove", "nodeBeforeLength", "validNodesToInsert", "errorContext", "validNode", "endContainer", "NBSP_FILLER", "MARKED_NBSP_FILLER", "span", "dataset", "ckeFiller", "innerText", "BR_FILLER", "fillerBr", "INLINE_FILLER", "repeat", "startsWithFiller", "domNode", "isInlineFiller", "domText", "getDataWithoutFiller", "jumpOverInlineFiller", "Renderer", "domDocuments", "markedAttributes", "markedChildren", "markedTexts", "_inlineFiller", "_fakeSelectionContainer", "isSelecting", "mapViewToDom", "inlineFillerPosition", "isInlineFillerRenderingPossible", "_updateChildrenMappings", "_isSelectionInInlineFiller", "_removeInlineFiller", "_getInlineFillerPosition", "_needsInlineFillerAtSelection", "Ar", "_updateAttrs", "_updateChildren", "_updateText", "fillerDomPosition", "addInlineFiller", "_updateFocus", "_updateSelection", "_clearTemporaryCustomProperties", "actualDomChildren", "expectedDomChildren", "viewChildrenToDom", "withChildren", "_diffNodeLists", "actions", "_findUpdateActions", "areSimilarElements", "counter", "equal", "action", "insertIndex", "deleteIndex", "viewChild", "_updateElementMappings", "unbindDomElement", "bindElements", "firstPos", "selectionPosition", "domFillerNode", "selectionParent", "selectionOffset", "findAncestor", "Mo", "viewText", "findCorrespondingDomText", "expectedText", "viewToDom", "filler", "_updateTextNode", "domAttr", "removeDomElementAttribute", "setDomElementAttribute", "previousDomNode", "normalize", "areTextNodes", "nodesToUnbind", "_markDescendantTextToSync", "domToView", "domChildList", "fakeSelectionContainer", "childList", "sameNodes", "actualDom", "expectedDom", "comparator", "newActions", "actualSlice", "expectedSlice", "actualText", "_updateTextNodeInternal", "insertData", "deleteData", "viewNode", "_removeDomSelection", "_removeFakeSelection", "domRoot", "_updateFakeSelection", "isConnected", "_updateDomSelection", "container", "textContent", "bindFakeSelection", "_fakeSelectionNeedsUpdate", "removeAllRanges", "selectNodeContents", "addRange", "_domSelectionNeedsUpdate", "setBaseAndExtent", "ELEMENT_NODE", "childAtOffset", "tagName", "isDomSelectionCorrect", "oldViewSelection", "domSelectionToView", "anchorNode", "activeDomElement", "mapDomToView", "domParentOrArray", "nodeAfterFiller", "fillerNode", "node1", "node2", "actualDomChild", "expectedDomChild", "isBlockFiller", "BR_FILLER_REF", "NBSP_FILLER_REF", "MARKED_NBSP_FILLER_REF", "UNSAFE_ATTRIBUTE_NAME_PREFIX", "UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE", "DomConverter", "blockFillerMode", "renderingMode", "_domToViewMapping", "_viewToDomMapping", "_fakeSelectionMapping", "_rawContentElementMatcher", "_inlineObjectElementMatcher", "_elementsWithTemporaryCustomProperties", "preElements", "blockElements", "inlineObjectElements", "unsafeElements", "_domDocument", "implementation", "createHTMLDocument", "viewDocumentSelection", "Er", "domFragment", "viewFragment", "attributeKey", "attributeValue", "elementName", "startsWith", "html", "DOMParser", "parseFromString", "fragment", "createDocumentFragment", "bodyChildNodes", "createTreeWalker", "NodeFilter", "SHOW_ELEMENT", "nextNode", "getAttributeNames", "_shouldRenameElement", "_logUnsafeElement", "replaceWith", "_createReplacementDomElement", "append", "textData", "_processDataFromViewText", "viewElementOrFragment", "bindDocumentFragments", "createComment", "HTMLTemplateElement", "content", "relatedViewElement", "shouldRenderAttribute", "shouldRenderUnsafeAttribute", "createAttribute", "fillerPositionOffset", "childView", "_getBlockFiller", "transparentRendering", "tempElement", "viewRange", "domStart", "domEnd", "setEnd", "viewParent", "domBefore", "domAfter", "inlineNodes", "generator", "_domToView", "_processDomInlineNodes", "domChild", "_isBlockViewElement", "fakeSelectionToView", "isDomSelectionBackward", "viewRanges", "domRangeToView", "viewStart", "viewEnd", "xr", "findCorrespondingViewText", "viewBefore", "domElementOrDocumentFragment", "getHostViewElement", "isElement", "documentFragmentOrElement", "viewEditable", "domEditable", "scrollPositions", "forEachDomElementAncestor", "_clearDomSelection", "newViewSelection", "DOCUMENT_FRAGMENT_NODE", "isEqualNode", "hasBlockParent", "anchorOffset", "_isDomSelectionPositionCorrect", "skipComments", "_isInlineObjectElement", "isDocumentFragment", "Gr", "_createViewElement", "_isViewElementWithRawContent", "nestedInlineNodes", "domChildrenToView", "inlineNode", "_isBlockDomElement", "prevNodeEndsWithSpace", "nodeEndsWithSpace", "_isPreFormatted", "prevNode", "shouldLeftTrim", "shouldRightTrim", "isNextNodeInlineObjectElement", "isNextNodeStartingWithSpace", "_getTouchingInlineViewNode", "_nodeEndsWithSpace", "nextStartsWithSpace", "getNext", "Cr", "$r", "viewName", "keepOriginalCase", "pr", "originalDomElement", "newDomElement", "Observer", "_isEnabled", "enable", "disable", "Sa", "DomEventData", "additionalData", "DomEventObserver", "domEventType", "checkShouldIgnoreEventFromTarget", "onDomEvent", "eventType", "KeyObserver", "Oa", "reWhitespace", "Ba", "reTrimStart", "Fa", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "Wa", "isBinary", "$a", "nativeMin", "ja", "lastArgs", "lastThis", "maxWait", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "invokeFunc", "time", "shouldInvoke", "timeSinceLastCall", "timerExpired", "trailingEdge", "timeWaiting", "debounced", "isInvoking", "flush", "FakeSelectionObserver", "_fireSelectionChangeDoneDebounced", "_handleSelectionMove", "stopObserving", "newSelection", "oldSelection", "Ka", "Ga", "SetCache", "Ja", "Za", "Ya", "Xa", "Qa", "equalFunc", "arrLength", "othLength", "arrStacked", "othStacked", "seen", "arrValue", "othValue", "compared", "othIndex", "tl", "il", "nl", "ol", "rl", "objProps", "objLength", "objStacked", "skipCtor", "objCtor", "othCtor", "al", "ll", "cl", "hl", "dl", "objIsArr", "othIsArr", "objTag", "othTag", "objIsObj", "othIsObj", "isSameTag", "objIsWrapped", "othIsWrapped", "objUnwrapped", "othUnwrapped", "ul", "baseIsEqual", "ml", "gl", "characterData", "subtree", "_domElements", "_mutationObserver", "MutationObserver", "_onMutations", "takeRecords", "disconnect", "domMutations", "mutatedTextNodes", "elementsWithMutatedChildren", "mutation", "_isBogusBrMutation", "mutations", "viewChildren", "newViewChildren", "fl", "addedNode", "removedNodes", "addedNodes", "child1", "child2", "FocusObserver", "_renderTimeoutId", "_isFocusChanging", "_handleFocus", "_handleBlur", "_clearTimeout", "selectedEditable", "SelectionObserver", "mutationObserver", "getObserver", "focusObserver", "_documents", "_clearInfiniteLoopInterval", "setInterval", "_clearInfiniteLoop", "_documentIsSelectingInactivityTimeoutDebounced", "_loopbackCounter", "endDocumentIsSelecting", "_handleSelectionChange", "clearInterval", "_reportInfiniteLoop", "hasDomSelection", "forceRender", "CompositionObserver", "DataTransfer", "nativeDataTransfer", "_files", "cacheFiles", "getFiles", "_native", "files", "getData", "setData", "effectAllowed", "dropEffect", "setDragImage", "isCanceled", "mozUserCancelled", "kind", "getAsFile", "InputObserver", "domTargetRanges", "getTargetRanges", "viewDocument", "dataTransfer", "targetRanges", "inputType", "partTargetRanges", "dataPart", "ArrowKeysObserver", "TabObserver", "Al", "View", "domRoots", "_initialDomRootAttributes", "_observers", "_ongoingChange", "_postFixersInProgress", "_renderingDisabled", "_hasChangedSinceTheLastRendering", "_renderer", "_writer", "addObserver", "_render", "relatedTarget", "markToSync", "viewRoot", "getRoot", "_name", "initialDomRootAttributes", "updateContenteditableAttribute", "observer", "ObserverConstructor", "disableObservers", "enableObservers", "scrollToTheSelection", "originalArgs", "viewRangeToDom", "currentFrame", "firstAncestorToScroll", "isRenderingInProgress", "callbackResult", "_callPostFixers", "flag", "Tl", "El", "_index", "_startOffset", "attr", "_deep", "_clearAttributes", "NodeList", "_nodes", "_offsetToNode", "maxOffset", "getNodeStartOffset", "nodeList", "getNodeIndex", "nodesArray", "offsetsArray", "offsets", "indexToOffset", "indexStart", "lastNode", "removedOffsetSum", "Sl", "Il", "Vl", "getNode", "getNodeAtOffset", "offsetToIndex", "relativePath", "getChildAtOffset", "parentName", "_removeNodes", "fromJSON", "Rl", "Ml", "stickiness", "_visitedParent", "prevVisitedParent", "textNodeAtPosition", "getTextNodeAtPosition", "getNodeAfterPosition", "formatReturnValue", "offsetInTextNode", "getNodeBeforePosition", "newOffset", "isValid", "getParentPath", "diffAt", "commonLevel", "level", "checkTouchingBranch", "checkOnlyZeroes", "operation", "_getTransformedByInsertOperation", "_getTransformedByMoveOperation", "_getTransformedBySplitOperation", "_getTransformedByMergeOperation", "_getTransformedByInsertion", "_getTransformedByMove", "sourcePosition", "movedRange", "_getCombined", "splitPosition", "moveTargetPosition", "graveyardPosition", "_getTransformedByDeletion", "deletionPosition", "deletePosition", "transformed", "insertPosition", "combined", "graveyard", "idx", "zl", "shouldJoin", "isTouching", "getMinimalFlatRanges", "getCommonPath", "posParent", "operations", "getTransformedByOperation", "j", "containsRange", "spread", "newPos", "moveRange", "differenceSet", "getDifference", "difference", "common", "transformedCommon", "newStart", "newEnd", "ref", "refIndex", "Mapper", "_modelToViewMapping", "_viewToModelMapping", "_viewToModelLengthCallbacks", "_markerNameToElements", "_elementToMarkerNames", "_deferredBindingRemovals", "_unboundMarkerNames", "viewContainer", "modelPosition", "findPositionIn", "viewBlock", "findMappedViewAncestor", "modelParent", "modelOffset", "_toModelOffset", "modelElement", "toModelElement", "markerName", "defer", "toViewElement", "nameToElements", "elementToNames", "flushUnboundMarkerNames", "markerNames", "flushDeferredBindings", "unbindViewElement", "clearBindings", "toModelPosition", "modelRange", "toViewPosition", "mapper", "isPhantom", "boundElements", "viewElementName", "lengthCallback", "viewOffset", "getModelLength", "expectedOffset", "lastLength", "_moveViewPositionToTextNode", "ModelConsumable", "_consumable", "_textProxyRegistry", "_normalizeConsumableType", "_getSymbolForTextProxy", "itemConsumables", "eventGroup", "consumables", "canConsume", "eventPrefix", "description", "startMap", "endMap", "_addSymbolForTextProxy", "DowncastDispatcher", "conversionApi", "_conversionApi", "dispatcher", "_firedEventsMap", "differ", "markers", "_createConversionApi", "getRefreshedItems", "getMarkersToRemove", "_convertMarkerRemove", "changes", "_reduceChanges", "getChanges", "_convertInsert", "_convertReinsert", "_convertRemove", "_convertAttribute", "attributeOldValue", "attributeNewValue", "markerRange", "getRange", "_convertMarkerAdd", "getMarkersToAdd", "consumable", "verifyAllConsumed", "modelRoot", "markersAtSelection", "getMarkersAtPosition", "_addConsumablesForSelection", "marker", "shouldMarkerChangeBeConverted", "doNotAddConsumables", "_addConsumablesForInsert", "walkerValueToEventData", "_testAndFire", "_addConsumablesForRange", "walkerValues", "reconversion", "consume", "getItems", "eventsFiredForConversion", "eventsFiredForItem", "refreshedItems", "Wl", "convertItem", "convertChildren", "convertAttributes", "_testAndFireAddAttributes", "canReuseView", "containsItem", "Kl", "anyNewRange", "oldRange", "_replaceAllRanges", "directChange", "_popRange", "getSelectedBlocks", "visited", "startBlock", "getParentBlock", "isStartBlockSelected", "block", "isUnvisitedTopBlock", "endBlock", "isEndBlockSelected", "limitStartPosition", "limitEndPosition", "_checkRange", "_removeAllRanges", "isUnvisitedBlock", "schema", "isBlock", "isTopBlockInRange", "hasParentLimit", "isLimit", "parentBlock", "LiveRange", "bindWithDocument", "toRange", "isDocumentOperation", "_createFromRanges", "boundariesChanged", "contentChanged", "storePrefix", "sc", "LiveSelection", "hasOwnRange", "isGravityOverridden", "containsEntireContent", "updateMarkers", "_updateAttributes", "prefixOrName", "observeMarkers", "_getStoredAttributes", "getStoredAttributes", "_overrideGravity", "overrideGravity", "restoreGravity", "_attributePriority", "_selectionRestorePosition", "_hasChangedRange", "_overriddenGravityRegister", "_observedMarkers", "_model", "_document", "_fixGraveyardSelection", "_validateSelectionRanges", "_updateMarker", "batch", "changeParent", "enqueueChange", "storedAttributes", "_getDefaultRange", "overrideUid", "liveRange", "_prepareRange", "_validateSelectionRange", "fromRange", "changed", "markerGroup", "selectionRange", "oldMarkers", "hasMarker", "contained", "clearAll", "newAttributes", "_getSurroundingAttributes", "oldAttributes", "_setAttributesTo", "newKey", "oldKey", "getTextAttributes", "isObject", "getNearestSelectionRange", "isInline", "checkAttribute", "getAttributeProperties", "copyFromObject", "ConversionHelpers", "dispatchers", "_dispatchers", "conversionHelper", "DowncastHelpers", "normalizeModelElementConfig", "normalizeToElementConfig", "insertElement", "createConsumer", "converterPriority", "createChangeReducer", "checkChild", "elementCreator", "consumer", "preflight", "slotsMap", "_registerSlotFactory", "slot", "createContainerElement", "childrenInSlots", "flat", "uniqueChildrenInSlots", "toViewPositionMapping", "currentSlot", "currentSlotNodes", "reinsertOrConvertNodes", "createRangeIn", "createPositionBefore", "modelValue", "getFromAttributeCreator", "normalizeToAttributeConfig", "attributeCreator", "oldAttribute", "viewWriter", "insertUIElement", "markerNameToElements", "unbindElementFromMarkerName", "createRangeOn", "clearClonedElementsGroup", "highlightDescriptor", "descriptor", "prepareDescriptor", "createViewElementFromHighlightDescriptor", "toViewRange", "rangeAfterWrap", "bindElementToMarker", "viewHighlightElement", "unwrap", "viewCreator", "viewMarkerData", "handleMarkerBoundary", "viewData", "removeMarkerFromAttribute", "oldViewElement", "newViewElement", "defaultConsumer", "isOpening", "viewStartElement", "viewEndElement", "isStart", "elementAfter", "elementBefore", "createUIElement", "viewElementType", "modelData", "viewElementDefinition", "modelAttributeValue", "shouldReplace", "reducedChanges", "reconvertedElements", "changeIndex", "positionRelation", "modelNodes", "modelChildNode", "reinsertNode", "modelNode", "viewChildNode", "autoParagraphEmptyRoots", "getRoots", "isParagraphable", "nodeOrType", "createContext", "wrapInParagraph", "paragraph", "createPositionAt", "UpcastHelpers", "upcastElementToElement", "normalizeModelAttributeConfig", "converter", "prepareToAttributeConverter", "getViewElementNameFromConfig", "viewKey", "normalized", "keyName", "normalizedConfig", "converterStart", "prepareToElementConverter", "normalizeDataToMarkerConfig", "converterEnd", "basePriority", "maxPriority", "priorityFactor", "attrName", "addMarkerElements", "markerViewNames", "markerViewName", "modelCursor", "viewItem", "viewConfig", "matcherResult", "safeInsert", "updateConversionResult", "viewAttributeKeyToCopy", "defaultModelValue", "configToTest", "modelKey", "modelAttribute", "injectSelectionPostFixer", "correctedRange", "tryFixingRange", "rangesToMerge", "rangeIndexesToRemove", "currentRangeIndex", "currentRange", "previousRanges", "previousRangeIndex", "previousRange", "mergedRange", "getJoined", "originalPosition", "nearestSelectionRange", "ancestorObject", "fixedPosition", "isTextAllowedOnStart", "isTextAllowedOnEnd", "startLimitElement", "getLimitElement", "endLimitElement", "startIsOnBlock", "endIsOnBlock", "fixedStart", "isSelectable", "fixedEnd", "isStartInLimit", "isEndInLimit", "bothInSameParent", "expandStart", "expandEnd", "findOutermostLimitAncestor", "startingNode", "isLimitNode", "EditingController", "downcastDispatcher", "_disableRendering", "convertChanges", "convertSelection", "toModelRange", "modelSelection", "createSelection", "createText", "modelEnd", "brokenPosition", "markerOrName", "currentMarker", "_refresh", "_refreshItem", "ViewConsumable", "elementConsumables", "ViewElementConsumables", "revert", "instance", "consumablesFromElement", "createFrom", "CONSUMABLE_TYPES", "_canConsumeName", "_test", "_consume", "_revert", "getRelatedStyles", "consumableName", "toConsume", "Schema", "_sourceDefinitions", "_attributeProperties", "_customChildChecks", "_customAttributeChecks", "_genericCheckSymbol", "SchemaContext", "getDefinition", "itemName", "_clearCache", "getDefinitions", "_compiledDefinitions", "_compile", "isContent", "_checkContextMatch", "isAllowed", "_evaluateAttributeChecks", "allowAttributes", "positionOrBaseElement", "elementToMerge", "checkMerge", "checks", "selectionOrRangeOrPosition", "rangeCommonAncestor", "_getValidRangesForRange", "backwardWalker", "forwardWalker", "limitElement", "forward", "step", "removeDisallowedAttributeFromNode", "positionsInRange", "getPositions", "attributeProperties", "definitions", "sourceRules", "itemNames", "compileBaseItemRule", "propagateAllowIn", "propagateAllowChildren", "propagateDisallowIn", "propagateDisallowChildren", "resolveDisallows", "compileAllowContentOf", "compileAllowWhere", "compileAllowAttributesOf", "compileInheritPropertiesFrom", "finalDefinitions", "allowIn", "allowChildren", "parentItem", "_evaluateChildChecks", "parentItemDefinition", "parentContext", "trimLast", "genericChecks", "childChecks", "check", "place", "firstBlock", "positionAfter", "mapContextItem", "getNames", "query", "sourceItemRules", "itemRule", "disallowIn", "disallowChildren", "allowContentOf", "allowWhere", "disallowAttributes", "allowAttributesOf", "inheritTypesFrom", "sourceItemRule", "typeNames", "copyProperty", "inheritFrom", "inheritAllFrom", "childName", "childItem", "allowContentOfItemName", "baseItem", "allowWhereItemName", "allowAttributeOfItemName", "inheritPropertiesOfItemName", "singleValue", "ctxItem", "UpcastDispatcher", "_splitParts", "_cursorParents", "_modelCursor", "_emptyElementsToKeep", "store", "_convertItem", "positionOrElement", "_convertChildren", "_safeInsert", "_updateConversionResult", "splitToAllowedParent", "_splitToAllowedParent", "getSplitParts", "_getSplitParts", "keepEmptyElement", "_keepEmptyElement", "contextDefinition", "documentFragment", "_removeEmptyElements", "modelItem", "markerElements", "markerElement", "currentPosition", "elementOrModelCursor", "nextModelCursor", "splitResult", "createPositionAfter", "savedCursorParent", "allowedParent", "findAllowedParent", "treeWalkerValue", "originalPart", "splitPart", "_registerSplitPair", "cursorParent", "list", "anyRemoved", "BasicHtmlWriter", "HtmlDataProcessor", "domParser", "htmlWriter", "getHtml", "_toDom", "registerRawContentMatcher", "DataController", "upcastDispatcher", "Nr", "htmlProcessor", "processor", "_viewWriter", "Zr", "isUndoable", "_checkIfRootsExists", "hasContent", "ignoreWhitespaces", "modelElementOrFragment", "viewDocumentFragment", "toView", "toData", "elementRange", "isMarkerCollapsed", "isMarkerAtElementBoundary", "updatedMarkerRange", "n1", "n2", "localeCompare", "initialData", "main", "parse", "newData", "batchType", "removeSelectionAttribute", "rootNames", "Conversion", "downcastDispatchers", "upcastDispatchers", "_helpers", "_downcast", "_createConversionHelpers", "isDowncast", "_upcast", "alias", "for", "elementToElement", "_getAllUpcastDefinitions", "attributeToElement", "elementToAttribute", "attributeToAttribute", "helpers", "upcastAlso", "_getUpcastDefinition", "upcastAlsoItem", "Operation", "baseVersion", "_validate", "__className", "normalizedNodes", "_normalizeNodes", "_splitNodeAtPosition", "_mergeNodesAtIndex", "_move", "_haveSameAttributes", "mergedNode", "offsetDiff", "firstPart", "secondPart", "nodeA", "nodeB", "iteratorA", "iteratorB", "MoveOperation", "affectedSelectable", "getMovedRangeStart", "getReversed", "newTargetPosition", "sourceElement", "targetElement", "sourceOffset", "targetOffset", "_execute", "InsertOperation", "shouldReceiveAttributes", "gyPosition", "originalNodes", "SplitOperation", "MergeOperation", "splitElement", "mergedElement", "MarkerOperation", "_markers", "_set", "Ch", "AttributeOperation", "NoOperation", "RenameOperation", "oldName", "RootAttributeOperation", "RootOperation", "isAdd", "createRoot", "_isAttached", "OperationFactory", "transformations", "setTransformation", "OperationA", "OperationB", "transformationFunction", "aGroup", "noUpdateTransformation", "Mh", "transformSets", "operationsA", "operationsB", "contextFactory", "ContextFactory", "useRelations", "forceWeakRemove", "setOriginalOperations", "originalOperations", "nextTransformIndex", "op", "nextBaseVersionA", "nextBaseVersionB", "originalOperationsACount", "originalOperationsBCount", "opA", "indexB", "opB", "newOpsA", "getContext", "newOpsB", "updateRelation", "newOpA", "handlePartialMarkerOperations", "padWithNoOps", "brokenOperationsACount", "brokenOperationsBCount", "updateBaseVersions", "_history", "history", "_useRelations", "_forceWeakRemove", "_relations", "takeFrom", "originalOperation", "_setRelation", "hasSameParentAs", "wasInLeftElement", "wasStartBeforeMergedElement", "wasEndBeforeMergedElement", "wasInRightElement", "aIsStrong", "aWasUndone", "_wasUndone", "bWasUndone", "abRelation", "_getRelation", "baRelation", "originalOp", "wasUndone", "isUndoneOperation", "origB", "undoneB", "getUndoneOperation", "origA", "relationsA", "relation", "markerOps", "_getComplementaryAttributeOperations", "insertOperation", "insertValue", "_moveTargetIntoMovedRange", "_makeMoveOperationsFromRanges", "moveOp", "diffs", "aNewRange", "aToGraveyard", "bToGraveyard", "removedRange", "aCompB", "shouldSpread", "rightRange", "movesGraveyardElement", "gyMoveSource", "splitNodesMoveSource", "aTarget", "gyMoveTarget", "gyMove", "splitNodesMoveTargetPath", "splitNodesMoveTarget", "splitNodesMove", "extraRename", "splitPath", "getInsertionPosition", "additionalSplit", "rangeToMove", "gyElementMoved", "newParentPosition", "newTargetPath", "splitAtTarget", "howManyRemoved", "aInGraveyard", "bInGraveyard", "newPositionPath", "LivePosition", "Uh", "toPosition", "jh", "oldPosition", "Batch", "isLocal", "isUndo", "isTyping", "Differ", "markerCollection", "_changesInElement", "_elementsSnapshots", "_elementChildrenSnapshots", "_elementState", "_changedMarkers", "_changedRoots", "_changeCount", "_cachedChanges", "_cachedChangesWithGraveyard", "_refreshedItems", "_markerCollection", "operationToBuffer", "_isInInsertedElement", "_markInsert", "_markAttribute", "sourceParentInserted", "targetParentInserted", "_markRemove", "_setElementState", "getMarkersIntersectingRange", "markerData", "bufferMarkerChange", "graveyardParent", "mergedIntoElement", "_isLoaded", "_bufferRootStateChange", "_bufferRootAttributeChange", "oldMarkerData", "newMarkerData", "buffered", "getChangedMarkers", "hasDataChanges", "markerAdded", "markerRemoved", "markerChanged", "includeChangesInGraveyard", "diffSet", "childrenBefore", "childrenAfter", "_getChildrenSnapshots", "diffInstructions", "_generateDiffInstructionsFromChanges", "instruction", "_getDiffActionForNode", "childSnapshotBefore", "diffItem", "_getInsertDiff", "_getRemoveDiff", "beforeAttributes", "afterAttributes", "diffItems", "_getAttributesDiff", "changeCount", "prevIndex", "prevDiff", "thisDiff", "isConsecutiveTextRemove", "isConsecutiveTextAdd", "isConsecutiveAttributeChange", "_changesInGraveyardFilter", "getChangedRoots", "state", "reset", "attrEntry", "changeItem", "_markChange", "_removeAllNestedChanges", "_makeSnapshots", "_getChangesForElement", "_handleChange", "currentStatePriority", "_statesPriority", "diffItemType", "childrenSnapshots", "snapshot", "inc", "nodesToHandle", "old", "incEnd", "oldEnd", "intersectionLength", "howManyAfter", "attributePart", "elementSnapshot", "elementSnapshotBefore", "before", "Gh", "Kh", "_getSingleNodeSnapshot", "snapshots", "oldChildrenLength", "oldChildrenHandled", "posInGy", "rangeInGy", "History", "_operations", "_undoPairs", "_undoneOperations", "_baseVersionToOperationIndex", "_version", "_gaps", "lastOperation", "historyVersion", "fromBaseVersion", "toBaseVersion", "firstOperation", "inclusiveTo", "gapFrom", "gapTo", "fromIndex", "toIndex", "operationIndex", "undoneOperation", "undoingOperation", "RootElement", "graveyardName", "_hasSelectionChangedFromTheLastChangeBlock", "bufferOperation", "addOperation", "removeMarker", "includeDetached", "_hasDocumentChangedFromTheLastChangeBlock", "_getDefaultRoot", "defaultRoot", "createPositionFromPath", "validateTextNodePosition", "rangeBoundary", "MarkerCollection", "Marker", "managedUsingOperations", "oldMarker", "hasChanged", "_attachLiveRange", "_managedUsingOperations", "_destroyMarker", "prefix", "_detachLiveRange", "_liveRange", "getStart", "getEnd", "stopDelegating", "DetachOperation", "ad", "Writer", "_assertWriterUsedCorrectly", "isSameTree", "applyOperation", "rangeRootPosition", "usingOperation", "updateMarker", "addMarker", "itemOrPositionOrOffset", "itemOrRange", "setAttributeOnRange", "setAttributeOnItem", "removeAttributesFromItem", "_addOperationForAffectedMarkers", "applyRemoveOperation", "_merge", "_mergeDetached", "merge", "renameOperation", "firstSplitElement", "firstCopyElement", "elementOrString", "shiftedRange", "applyMarkerOperation", "hasUsingOperationDefined", "affectsDataDefined", "updatedRange", "rootOrName", "keyOrObjectOrIterable", "_setSelectionAttribute", "keyOrIterableOfKeys", "_removeSelectionAttribute", "overrideSelectionGravity", "_restoreGravity", "storeKey", "_getStoreAttributeKey", "_currentWriter", "isAffected", "affectedInLeftElement", "affectedInRightElement", "affectedAfterLeftElement", "affectedBeforeRightElement", "valueBefore", "valueAfter", "lastSplitPosition", "previousValue", "rootA", "rootB", "deleteContent", "selRange", "doNotResetEntireContent", "insertParagraph", "attributesForAutoparagraph", "doNotAutoparagraph", "getAttributesWithProperty", "ignoreMarkers", "modifySelection", "newEndPosition", "skippedRange", "fromPosition", "leaveUnmerged", "checkShouldMerge", "startAncestor", "endAncestor", "positionA", "positionB", "mergeBranchesRight", "mergeBranchesLeft", "removeDisallowedAttributes", "collapseSelectionAt", "isTextAllowed", "isParagraphAllowed", "commonAncestor", "parentToRemove", "rename", "clearAttributes", "setAttributes", "leftPos", "rightPos", "rangeToCheck", "setAllowedAttributes", "removeRangeContent", "parentsToCheck", "itemRange", "parentToCheck", "removeRange", "Insertion", "_firstNode", "_lastNode", "_lastAutoParagraph", "_filterAttributesOf", "_affectedStart", "_affectedEnd", "_nodeToSelect", "canMergeWith", "_documentFragment", "_documentFragmentPosition", "_handleNode", "_insertPartialFragment", "_updateLastNodeFromAutoParagraph", "_mergeOnRight", "positionAfterLastNode", "positionAfterNode", "_setAffectedBoundaries", "getSelectionRange", "getAffectedRange", "_checkAndSplitToAllowedPosition", "_appendToFragment", "_handleDisallowedNode", "livePosition", "_mergeOnLeft", "handleNodes", "_canMergeLeft", "mergePosLeft", "_canMergeRight", "mergePosRight", "_insertAutoParagraph", "allowedIn", "_getAllowedIn", "tempPos", "contextElement", "childNode", "insertObject", "originalSelection", "insertionSelection", "findOptimalPosition", "findOptimalInsertionRange", "firstSelectedBlock", "attributesToCopy", "elementToInsert", "insertionPositionParent", "affectedRange", "insertContent", "paragraphAttributes", "nextElement", "tryExtendingTo", "isForward", "treatEmojiAsSingleUnit", "isAtNodeBoundary", "isAtWordBoundary", "getSearchRange", "searchEnd", "offsetToCheck", "Model", "_pendingChanges", "register", "addChildCheck", "insertion", "fakeMarkerElements", "nodesToInsert", "markersPosition", "posA", "posB", "isAtBeginning", "selectionLiveRange", "markersData", "isStartBoundary", "elementPosition", "rangeOnInsertion", "_runPendingChanges", "batchOrType", "normalizeSelectable", "setSelectionFocus", "frag", "commonPath", "commonParent", "getNodeByPath", "flatSubtreeRange", "appendText", "cloneElement", "leftExcessRange", "rangeOrElement", "intersectingMarker", "ret", "currentBatch", "callbackReturnValue", "_handleChangeBlock", "ClickObserver", "MouseObserver", "UpcastWriter", "removeChildren", "oldElement", "insertChild", "valueOrElement", "HEX_COLOR_REGEXP", "RGB_COLOR_REGEXP", "RGBA_COLOR_REGEXP", "HSL_COLOR_REGEXP", "HSLA_COLOR_REGEXP", "CSS_SHORTHAND_VALUE_REGEXP", "COLOR_NAMES", "isColor", "lineStyleValues", "isLineStyle", "lengthRegExp", "$d", "PERCENTAGE_VALUE_REGEXP", "isPercentage", "repeatValues", "isRepeat", "positionValues", "isPosition", "attachmentValues", "isAttachment", "urlRegExp", "isURL", "getBoxSidesValues", "getShorthandValues", "getBoxSidesValueReducer", "styleShorthand", "reduced", "getBoxSidesShorthandValue", "out", "getPositionShorthandNormalizer", "shorthand", "addBackgroundRules", "setNormalizer", "background", "attachment", "setReducer", "setStyleRelation", "addBorderRules", "normalizeBorderShorthand", "getBorderPositionNormalizer", "getBorderPropertyNormalizer", "getBorderPropertyPositionNormalizer", "setExtractor", "getBorderPositionExtractor", "getBorderPositionReducer", "topStyles", "extractBorderPosition", "rightStyles", "bottomStyles", "leftStyles", "borderStyles", "borderStylesByType", "getReducedStyleValueForType", "reducedBorderStyle", "reduceBorderPosition", "reducedStyleTypes", "getBorderReducer", "side", "border", "toBorderPropertyShorthand", "which", "borderTypes", "borderValue", "addMarginRules", "addPaddingRules", "Watchdog", "crashes", "_now", "_crashNumberLimit", "crashNumberLimit", "_minimumNonErrorTimePeriod", "minimumNonErrorTimePeriod", "_boundErrorHandler", "reason", "_handleError", "_listeners", "_restart", "_stopErrorHandling", "cb", "_startErrorHandling", "_shouldReactToError", "filename", "ErrorEvent", "lineno", "colno", "date", "causesRestart", "_shouldRestart", "_fire", "_isErrorComingFromThisItem", "_u", "head", "excludedProperties", "subNodes", "nodeIndex", "shouldNodeBeIncluded", "typeOfNode", "_watchdogExcluded", "EventTarget", "Event", "areConnectedThroughProperties", "target1", "target2", "excludedNodes", "structure", "subNodes1", "subNodes2", "ku", "EditorWatchdog", "Editor", "watchdogConfig", "_editor", "_lifecyclePromise", "_initUsingData", "_editables", "_throttledSave", "_save", "saveInterval", "_creator", "elementOrData", "_destructor", "_item", "creator", "destructor", "_destroy", "catch", "existingRoots", "lazyRoots", "oldRootsAttributes", "rootsAttributes", "rootData", "isLoaded", "updatedConfig", "extraPlugins", "_watchdogInitialData", "EditorWatchdogInitPlugin", "_elementOrData", "_cloneEditorConfiguration", "_lastDocumentVersion", "_getData", "_getEditables", "finally", "_excludedProps", "commentsRepository", "trackChanges", "commentThreads", "suggestions", "rangeJSON", "getCommentThreads", "skipNotAttached", "getSuggestions", "editables", "getRootNames", "getEditableElement", "_restoreCollaborationData", "_restoreEditorData", "jsonNode", "_createNode", "parsedNodes", "parsedAttributes", "rootElement", "markerOptions", "parsedCommentThreads", "parsedSuggestions", "commentThreadData", "channelId", "hasCommentThread", "threadId", "getCommentThread", "addCommentThread", "suggestionData", "trackChangesEditing", "hasSuggestion", "getSuggestion", "addSuggestionData", "mainQueueId", "ActionQueues", "_onEmptyCallbacks", "_queues", "_activeActions", "onEmptyCallback", "queueId", "isMainAction", "queueWithAction", "nonErrorQueue", "Eu", "elementOrArray", "CommandCollection", "_commands", "commandName", "commandParams", "commands", "EditingKeystrokeHandler", "evtData", "DEFAULT_CATEGORY_ID", "DEFAULT_GROUP_ID", "Accessibility", "keystrokeInfos", "isMenuBarVisible", "addKeystrokeInfoCategory", "navigationKeystrokes", "mayRequireFn", "keystrokes", "addKeystrokeInfoGroup", "categoryId", "category", "groupId", "addKeystrokeInfos", "defaultTranslations", "_addEditor", "_readOnlyLocks", "once", "editing", "addAlias", "accessibility", "lockId", "removePlugins", "readyPromise", "_removeEditor", "ContextWatchdog", "_watchdogs", "_contextProps", "_actionQueues", "_watchdogConfig", "contextConfig", "onEmpty", "enqueue", "_contextConfig", "_create", "_getWatchdog", "itemConfigurationOrItemConfigurations", "itemConfigurations", "watchdog", "setCreator", "_setExcludedProperties", "setDestructor", "res", "rethrowRestartEventOnce", "sourceElementOrData", "itemIdOrItemIds", "itemIds", "Mu", "Ou", "ElementApiMixin", "shouldUpdateSourceElement", "isSourceElementTextArea", "dataToSet", "updateSourceElement", "PendingActions", "_actions", "hasAny", "Fu", "Du", "Lu", "zu", "Hu", "Wu", "$u", "Uu", "ju", "qu", "Ku", "Gu", "Zu", "Ju", "Yu", "Xu", "Qu", "em", "tm", "im", "nm", "sm", "om", "rm", "am", "lm", "cm", "hm", "dm", "um", "mm", "gm", "fm", "pm", "bm", "wm", "_m", "vm", "ym", "km", "Cm", "Am", "xm", "Tm", "Em", "Pm", "supportedOptions", "isDefault", "alignment", "normalizeAlignmentOptions", "configuredOptions", "normalizedOptions", "isNameValid", "classNameCount", "allOptions", "succeedingOptions", "ALIGNMENT", "AlignmentCommand", "_canBeAligned", "blocks", "currentAlignment", "AlignmentEditing", "optionsToConvert", "shouldUseClasses", "setAttributeProperties", "isFormatting", "upcastInlineDefinitions", "upcastCompatibilityDefinitions", "ViewCollection", "initialItems", "_renderViewIntoCollectionParent", "_parentElement", "elementOrDocFragment", "dest", "evtName", "isRendered", "Template", "Km", "qm", "_isRendered", "_revertData", "_renderNode", "intoFragment", "isApplying", "revertData", "_revertTemplateFromNode", "getViews", "isView", "isTemplate", "eventNameOrFunctionOrAttribute", "TemplateToBinding", "eventNameOrFunction", "if", "valueIfTrue", "TemplateIfBinding", "template", "extendTemplate", "isInvalid", "_renderText", "_renderElement", "_renderAttributes", "_renderElementChildren", "_setUpListeners", "hasTemplateBinding", "_bindToObservable", "updater", "getTextUpdater", "domAttrValue", "attrValue", "attrNs", "isNamespaced", "valueToBind", "shouldExtend", "getAttributeUpdater", "_renderStyleAttribute", "arrayValueReducer", "isFalsy", "setAttributeNS", "styleName", "styleValue", "getStyleUpdater", "childIndex", "isViewCollection", "setParent", "childRevertData", "eventListeners", "revertBindings", "schemaItem", "domEvtName", "domSelector", "activateDomEventListener", "syncValueSchemaValue", "templateBinding", "activateAttributeListener", "revertBinding", "TemplateBinding", "getValue", "removeAttributeNS", "listeners", "arrayify", "extendObjectValueArray", "ext", "childDef", "sg", "_viewCollections", "_unboundChildren", "createCollection", "collection", "bindTemplate", "_bindTemplate", "views", "registerChild", "clickOutsideHandler", "activator", "contextElements", "listenerOptions", "composedPath", "contextElementsList", "CssTransitionDisablerMixin", "disableCssTransitions", "_isCssTransitionsDisabled", "enableCssTransitions", "initializeCssTransitionDisablerMixin", "submitHandler", "addKeyboardHandlingForGrid", "keystrokeHandler", "gridItems", "numberOfColumns", "getNumberOfColumns", "getGridItemFocuser", "getIndexToFocus", "focusedElementIndex", "nextIndexToFocus", "getRightElementIndex", "elementIndex", "collectionLength", "getLeftElementIndex", "nextIndex", "IconView", "setTemplate", "viewBox", "_updateXMLContent", "_colorFillPaths", "svg", "querySelector", "presentationalAttributeNames", "fillColor", "querySelectorAll", "hg", "cg", "ButtonLabelView", "ug", "labelView", "_focusDelayed", "ariaLabelUid", "_setupLabelView", "iconView", "keystrokeView", "_createKeystrokeView", "_getTooltipString", "role", "tabindex", "click", "isOn", "isToggleable", "isCheckableRole", "mousedown", "mouseup", "icon", "withKeystroke", "tooltip", "FormHeaderView", "FocusCycler", "focusables", "keystrokeHandlerOptions", "focusFirst", "focusLast", "isDomFocusable", "_getDomFocusableItem", "previous", "viewIndex", "focused", "focusNext", "focusPrevious", "chainedFocusCycler", "getCurrentFocusedView", "oldCurrent", "otherFocusCycler", "focusableItem", "focusableItemCandidate", "isFocusable", "DraggableViewMixin", "_onDragBound", "_onDrag", "_onDragEndBound", "_onDragEnd", "_lastDraggingCoordinates", "_attachListeners", "_onDragStart", "_attachDragListeners", "_detachDragListeners", "_isHandleElementPressed", "MouseEvent", "touches", "isDragging", "newX", "newY", "deltaX", "deltaY", "dragHandleElement", "DialogActionsView", "_focusTracker", "_focusables", "focusCycler", "button", "onExecute", "onCreate", "_updateFocusCyclableItems", "DialogContentView", "DialogViewPosition", "toPx", "DialogView", "getCurrentDomRoot", "getViewportOffset", "wasMoved", "_getCurrentDomRoot", "_getViewportOffset", "_focusCycler", "isModal", "visibility", "_isVisible", "updatePosition", "_isTransparent", "headerView", "setupParts", "title", "hasCloseButton", "actionButtons", "closeButtonView", "_createCloseButton", "ariaLabel", "contentView", "actionsView", "setButtons", "_getViewportRect", "dialogRect", "_getDialogRect", "_moveTo", "_left", "_top", "_moveOffScreen", "domRootRect", "configuredPosition", "_getVisibleDomRootRect", "defaultOffset", "leftCoordinate", "visibleDomRootRect", "firstElementChild", "focusable", "buttonView", "Ig", "Sg", "Dialog", "_initShowHideListeners", "_initFocusToggler", "_initMultiRootIntegration", "isOpen", "_unlockBodyScroll", "_show", "onShow", "_visibleDialogPlugin", "_hide", "_onHide", "changedRoots", "dialogDefinition", "hide", "onHide", "getDomRoot", "_lockBodyScroll", "classList", "ListItemButtonView", "_checkIconHolderView", "CheckIconHolderView", "hasCheckSpace", "_hasCheck", "_watchCheckIconHolderMount", "hasCheck", "_checkIconView", "_createCheckIconView", "_watchCheckIconMount", "MenuBarMenuListItemButtonView", "withText", "LabelView", "AccessibilityHelpContentView", "helpLabel", "_createCategories", "categories", "categoryDefinition", "groupDefinition", "_createGroup", "definitionAndDescriptionElements", "keystrokeDefinition", "_createGroupRow", "dd", "normalizedKeystrokeDefinition", "keystrokeAlternativeHTMLs", "keystrokeAlternative", "keystrokeToEnvKbd", "Dg", "AccessibilityHelp", "componentFactory", "_createButton", "_toggleDialog", "_setupRootLabels", "ButtonClass", "dialog", "editingView", "addAriaLabelTextToRoot", "newAriaLabel", "segment", "show", "BodyCollection", "bodyCollectionContainer", "_bodyCollectionContainer", "attachToDom", "detachFromDom", "childElementCount", "SwitchButtonView", "toggleSwitchView", "_createToggleView", "FileDialogButtonView", "FileDialogViewMixin", "FileDialogListItemButtonView", "_fileInputView", "FileInputView", "open", "accept", "multiple", "qg", "CollapsibleView", "childViews", "_createButtonView", "hidden", "_collapsibleAriaLabelUid", "getLocalizedColorOptions", "localizedColorNames", "Black", "Grey", "White", "Red", "Orange", "Yellow", "Green", "Aquamarine", "Turquoise", "Blue", "Purple", "colorOption", "normalizeColorOptions", "normalizeSingleColorDefinition", "ColorTileView", "backgroundColor", "ColorGridView", "colorDefinitions", "columns", "viewStyleAttribute", "gridTemplateColumns", "colorTile", "selectedColor", "Qg", "ef", "cstr", "alpha", "isRGB", "parseFloat", "baseHues", "isNaN", "red", "R", "green", "G", "blue", "B", "H", "lightness", "L", "brightness", "opacity", "orange", "yellow", "purple", "nf", "sf", "convertColor", "outputFormat", "colorObject", "parseColorString", "parsedColor", "toColorSpace", "format", "hexValue", "parsedHex", "LabeledFieldView", "viewUid", "statusUid", "fieldView", "_createLabelView", "statusView", "_createStatusView", "fieldWrapperChildren", "errorText", "infoText", "InputBase", "readonly", "_updateIsEmpty", "_setDomElementValue", "select", "InputView", "inputmode", "InputTextView", "InputNumberView", "DropdownPanelView", "selectstart", "toLocaleLowerCase", "dropdownPanel", "DropdownView", "panelView", "panelPosition", "optimalPanelPosition", "_getOptimalPosition", "_panelPositions", "closeDropdown", "south", "north", "southEast", "southWest", "northEast", "northWest", "southMiddleEast", "southMiddleWest", "northMiddleEast", "northMiddleWest", "defaultPanelPositions", "buttonRect", "panelRect", "gf", "mf", "DropdownButtonView", "arrowView", "_createArrowView", "DropdownMenuButtonView", "ListItemView", "ListSeparatorView", "ListItemGroupView", "nestedList", "ListView", "ariaLabelledBy", "firstListItem", "_listItemGroupToChangeListeners", "_registerFocusableItemsGroup", "_registerFocusableListItem", "_deregisterFocusableItemsGroup", "_deregisterFocusableListItem", "groupView", "groupIndex", "registeredChildIndex", "groupItemsChangeCallback", "_getOnGroupItemsChangeCallback", "DropdownMenuListView", "DropdownMenuPanelPositioningFunctions", "eastSouth", "eastNorth", "westSouth", "westNorth", "DropdownMenuBehaviors", "menuView", "parentMenuView", "Af", "POSITION_OFF_SCREEN", "withArrow", "BalloonPanelView", "_pinWhenIsVisibleCallback", "_resizeObserver", "getDomElement", "defaultPositions", "southArrowNorth", "southArrowNorthMiddleWest", "southArrowNorthMiddleEast", "southArrowNorthWest", "southArrowNorthEast", "northArrowSouth", "northArrowSouthMiddleWest", "northArrowSouthMiddleEast", "northArrowSouthWest", "northArrowSouthEast", "viewportStickyNorth", "optimalPosition", "unpin", "_startPinning", "_stopPinning", "attachTo", "scrollTarget", "isWithinScrollTarget", "isLimiterWithinScrollTarget", "checkVisibility", "sideOffset", "arrowSideOffset", "heightOffset", "arrowHeightOffset", "stickyVerticalOffset", "northWestArrowSouthWest", "balloonRect", "getNorthTop", "northWestArrowSouthMiddleWest", "northWestArrowSouth", "northWestArrowSouthMiddleEast", "northWestArrowSouthEast", "northEastArrowSouthWest", "northEastArrowSouthMiddleWest", "northEastArrowSouth", "northEastArrowSouthMiddleEast", "northEastArrowSouthEast", "southWestArrowNorthWest", "getSouthTop", "southWestArrowNorthMiddleWest", "southWestArrowNorth", "southWestArrowNorthMiddleEast", "southWestArrowNorthEast", "southEastArrowNorthWest", "southEastArrowNorthMiddleWest", "southEastArrowNorth", "southEastArrowNorthMiddleEast", "southEastArrowNorthEast", "westArrowEast", "eastArrowWest", "boundaryRect", "generatePositions", "Ef", "Tf", "DropdownMenuNestedMenuPanelView", "DropdownMenuNestedMenuView", "bodyCollection", "_bodyCollection", "listView", "_handleParentMenuView", "_attachBehaviors", "_mountPanelOnOpen", "_removePanelFromBody", "DELEGATED_EVENTS", "closeOnParentClose", "openOnButtonClick", "openAndFocusOnEnterKeyPress", "openOnArrowRightKey", "closeOnEscKey", "closeOnArrowLeftKey", "_addPanelToBody", "pin", "ToolbarSeparatorView", "ToolbarLineBreakView", "normalizeToolbarConfig", "removeItems", "predefinedConfigOptions", "NESTED_TOOLBAR_ICONS", "alignLeft", "bold", "importExport", "plus", "threeVerticalDots", "pilcrow", "dragIndicator", "ToolbarView", "itemsView", "ItemsView", "isRtl", "shouldGroupWhenFull", "isFloating", "maxWidth", "_behavior", "DynamicGrouping", "StaticLayout", "itemsOrConfig", "_buildItemsFromConfig", "normalizedRemoveItems", "_cleanItemsConfiguration", "_createNestedToolbarDropdown", "filteredItems", "_cleanSeparatorsAndLineBreaks", "nonSeparatorPredicate", "firstCommandItemIndex", "findIndex", "lastCommandItemIndex", "dropdownView", "createDropdown", "addToolbarToDropdown", "toolbarView", "resizeObserver", "cachedPadding", "shouldUpdateGroupingOnNextResize", "viewFocusables", "viewItemsView", "viewFocusTracker", "viewLocale", "ungroupedItems", "groupedItems", "groupedItemsDropdown", "_createGroupedItemsDropdown", "changeData", "removedItem", "currentIndex", "addedItem", "_updateGrouping", "_enableGroupingOnResize", "_enableGroupingOnMaxWidthChange", "initialGroupedItemsCount", "wereItemsGrouped", "_areItemsOverflowing", "_groupLastItem", "_ungroupFirstItem", "lastChildRect", "toolbarRect", "computedStyle", "paddingProperty", "previousWidth", "contentRect", "dropdown", "tooltipPosition", "SplitButtonView", "actionButton", "actionView", "_createActionView", "ButtonClassOrInstance", "getFocusTrackerTreeElements", "buttonsOrCallback", "addToolbarToOpenDropdown", "enableActiveItemFocusOnDropdownOpen", "focusChildOnDropdownOpen", "buttons", "isCompact", "isVertical", "addListToDropdown", "itemsOrCallback", "addListToOpenDropdown", "bindViewCollectionItemsToDefinitions", "childSelectorCallback", "childToFocus", "flatMap", "listItems", "listItemButtons", "hasAnyCheckboxOnList", "listItemView", "createLabeledInputText", "labeledFieldView", "inputView", "ariaDescribedById", "createLabeledInputNumber", "inputMode", "createLabeledDropdown", "clamp", "Xf", "digits", "pow", "hexToRgba", "hsvaToHsla", "hh", "hsvaToHslString", "hsva", "hsvaToRgba", "rgbaToHex", "alphaHex", "rgbaToHsva", "equalColorObjects", "second", "tpl", "detail", "dispatchEvent", "CustomEvent", "bubbles", "hasTouched", "isTouch", "pointerMove", "pointer", "getMove", "pageX", "pageXOffset", "pageY", "pageYOffset", "Slider", "aria", "xy", "cloneNode", "toggleEvent", "dragging", "setProperty", "Hue", "update", "Saturation", "$isSame", "$color", "$hsva", "$update", "$parts", "$css", "$sliders", "ColorPicker", "observedAttributes", "newColor", "newHsva", "colorModel", "toHsva", "attachShadow", "slider", "connectedCallback", "defaultColor", "_attr", "_oldVal", "newVal", "fromAttr", "oldHsva", "fromHsva", "HexBase", "ColorPickerView", "_hexColor", "hexInputRow", "_createInputRow", "hideInput", "_debounceColorPickerEvent", "convertColorToCommonHexFormat", "picker", "customElements", "_createSlidersView", "styleSheetForFocusedColorPicker", "shadowRoot", "slidersView", "SliderView", "colorInput", "_createColorInput", "ColorPickerInputRowView", "labeledInput", "pickerColor", "inputValue", "maybeHexColor", "tryParseHexColor", "resetValidationStatus", "getParsedColor", "inputColor", "HashView", "hashLessColor", "DocumentColorCollection", "eo", "ColorGridsFragmentView", "removeButtonLabel", "documentColorsLabel", "documentColorsCount", "colorPickerLabel", "documentColors", "_removeButtonLabel", "_colorPickerLabel", "_documentColorsLabel", "removeColorButtonView", "_createRemoveColorButton", "maxCount", "_addColorToDocumentColors", "updateSelectedColors", "documentColorsGrid", "staticColorsGrid", "_createStaticColorsGrid", "_createDocumentColorsGrid", "_createColorPickerButton", "_addColorSelectorElementsToFocusTracker", "addColorPickerButton", "colorPickerButtonView", "colorGrid", "colorObj", "predefinedColor", "ColorPickerFragmentView", "colorPickerViewConfig", "_colorPickerViewConfig", "saveButtonView", "cancelButtonView", "_createActionButtons", "actionBarView", "_createActionBarView", "colorPickerView", "_addColorPickersElementsToFocusTracker", "_stopPropagationOnArrowsKeys", "_executeOnEnterPress", "_executeUponColorChange", "actionBarRow", "ColorSelectorView", "colorGridsFragmentView", "colorPickerFragmentView", "appendUI", "_appendColorGridsFragment", "_appendColorPickerFragment", "showColorPickerFragment", "_isColorPickerFragmentVisible", "_isColorGridsFragmentVisible", "showColorGridsFragment", "updateDocumentColors", "ComponentFactory", "_components", "originalName", "BALLOON_CLASS", "TooltipManager", "_currentElementWithTooltip", "_currentTooltipPosition", "_editors", "_instance", "tooltipTextView", "balloonPanelView", "attributeFilter", "_updateTooltipPosition", "_pinTooltipDebounced", "_pinTooltip", "_unpinTooltipDebounced", "_unpinTooltip", "_onKeyDown", "_onEnterOrFocus", "_onLeaveOrBlur", "_onScroll", "editorBodyViewCollection", "defaultBalloonPositions", "sw", "se", "elementWithTooltipAttribute", "getDescendantWithTooltip", "getTooltipData", "balloonElement", "isEnteringBalloon", "isLeavingBalloon", "descendantWithTooltip", "relatedDescendantWithTooltip", "targetDomElement", "cssClass", "bodyViewCollection", "getPositioningFunctions", "tooltipData", "zp", "Lp", "closest", "ckeTooltipText", "ckeTooltipPosition", "ckeTooltipClass", "PoweredBy", "_balloonView", "_lastFocusedEditableElement", "_showBalloonThrottled", "_showBalloon", "_handleEditorReady", "balloon", "token", "oldTokenCheck", "decryptedData", "atob", "splittedDecryptedData", "firstElement", "secondElement", "decryptedSecondElement", "year", "monthIndex", "day", "_updateLastFocusedEditableElement", "_hideBalloon", "_createBalloonView", "poweredByConfig", "getNormalizedConfig", "PoweredByView", "attachOptions", "focusedEditableElement", "getLowerCornerPosition", "rootRect", "horizontalOffset", "editableEditorElements", "getEditableElementsNames", "isColorInherited", "ICON_WIDTH", "ICON_HEIGHT", "href", "dragstart", "getBalloonLeft", "visibleEditableElementRect", "editableElementRect", "balloonTop", "verticalOffset", "balloonLeft", "newBalloonPositionVisibleRect", "userConfig", "AriaLiveAnnouncerPoliteness", "POLITE", "ASSERTIVE", "AriaLiveAnnouncer", "politeness", "announce", "announcement", "AriaLiveAnnouncerView", "isUnsafeHTML", "politenessRegionView", "regionViews", "AriaLiveAnnouncerRegionView", "_pruneAnnouncementsInterval", "_domConverter", "_listElement", "messageListItem", "setContentOf", "MenuBarMenuListItemView", "MenuBarMenuBehaviors", "MenuBarMenuViewPanelPositioningFunctions", "DefaultMenuBarItems", "menuId", "EditorUI", "isReady", "_editableElementsMap", "_focusableToolbarDefinitions", "_extraMenuBarElements", "_lastFocusedForeignElement", "tooltipManager", "poweredBy", "ariaLiveAnnouncer", "_readViewportOffsetFromConfig", "_bindBodyCollectionWithFocusTracker", "_handleScrollToTheSelection", "_initFocusTracking", "ckeditorInstance", "setUpKeystrokeHandler", "_editableElements", "editorUI", "menuBarView", "menuBarViewElement", "normalizedMenuBarConfig", "configObject", "addItems", "isUsingDefaultConfig", "fillFromConfig", "_saveLastFocusedForeignElement", "isFocusBorderEnabled", "legacyOffsetConfig", "candidateDefinitions", "currentFocusedToolbarDefinition", "_getCurrentFocusedToolbarDefinition", "_getFocusableCandidateToolbarDefinitions", "candidateDefinition", "_focusFocusableCandidateToolbar", "afterBlur", "focusedToolbarDef", "toolbarDef", "beforeFocus", "defA", "defB", "getToolbarDefinitionWeight", "candidateToolbarDefinition", "configuredViewportOffset", "weight", "isContextual", "EditorUIView", "EditableUIView", "lang", "_editableElement", "_hasExternalElement", "_editingView", "_updateIsFocusedClasses", "hasExternalElement", "updateAfterRender", "InlineEditableUIView", "getEditableAriaLabel", "editableName", "existingLabel", "Notification", "alert", "_showNotification", "ab", "lb", "ContextualBalloon", "_viewToStack", "_idToStack", "_view", "_rotatorView", "_fakePanelsView", "positionLimiter", "_createPanelView", "hasView", "stackId", "_numberOfStacks", "_visibleStack", "singleViewMode", "showStack", "_showView", "_singleViewMode", "visibleView", "_showNextStack", "hideView", "_getStackId", "getPositionOptions", "visibleStack", "_createRotatorView", "_createFakePanelsView", "stacks", "_showPrevStack", "RotatorView", "isSingleViewMode", "numberOfStacks", "buttonNextView", "buttonPrevView", "FakePanelsView", "balloonClassName", "showView", "_balloonPanelView", "_addPanels", "_removePanels", "deregisterChild", "numberOfPanels", "ub", "StickyPanelView", "_contentPanelPlaceholder", "isSticky", "_contentPanelRect", "contentPanelElement", "marginLeft", "checkIfShouldBeSticky", "isActive", "_unstick", "windowRect", "viewportTopOffset", "visibleLimiterTop", "limiterBottomOffset", "stickyBottomOffset", "_stickToBottomOfLimiter", "_stickToTopOfAncestors", "topOffset", "_isStickyToTheBottomOfLimiter", "_stickyTopOffset", "_stickyBottomOffset", "_marginLeft", "SearchTextQueryView", "showResetButton", "showIcon", "_viewConfig", "resetButtonView", "SearchInfoView", "primaryText", "secondaryText", "SearchResultsView", "bb", "reHasRegExpChar", "_b", "SearchTextView", "filteredView", "queryView", "_createSearchTextQueryView", "resultsView", "focusableChildren", "infoView", "_enableDefaultInfoViewBehavior", "resultsCount", "totalItemsCount", "focusableChild", "regExp", "filteringResults", "normalizeInfoText", "defaultTextConfig", "notFound", "primary", "secondary", "noSearchableItems", "AutocompleteView", "bindResultsView", "_updateResultsVisibility", "resetOnBlur", "_updateResultsViewWidthAndPosition", "_width", "optimalResultsPosition", "defaultResultsPositions", "queryMinChars", "queryLength", "fieldRect", "resultsRect", "reUnescapedHtml", "MenuBarMenuButtonView", "MenuBarMenuPanelView", "MenuBarMenuView", "_repositionPanelOnOpen", "_propagateArrowKeystrokeEvents", "openAndFocusPanelOnArrowDownKey", "toggleOnButtonClick", "Eb", "Tb", "MenuBarMenuListView", "_setItemsCheckSpace", "hasAnyToggleableItem", "listButtonView", "pickListButtonMenuViewIfPresent", "MenuBarMenuListItemFileDialogButtonView", "iconsMap", "AlignmentUI", "localizedOptionTitles", "_addButton", "_addToolbarDropdown", "_addMenuBarMenu", "buttonAttrs", "defaultIcon", "AttributeCommand", "_getValueFromFirstAllowedNode", "checkAttributeInSelection", "forceValue", "setSelectionAttribute", "getValidRanges", "BOLD", "BoldEditing", "copyOnEnter", "fontWeight", "getButtonCreator", "Fb", "BoldUI", "createButton", "ClipboardObserver", "handleInput", "dropRange", "clipboardData", "smallPaddingElements", "listElements", "viewToPlainText", "newLinePadding", "Ub", "jb", "matchData", "noCustomizer", "qb", "Kb", "Gb", "Zb", "Jb", "Yb", "hasFunc", "Xb", "Qb", "ew", "tw", "iw", "nw", "ClipboardMarkersUtils", "_markersToCopy", "getCopiedFragment", "getSelectedContent", "sourceSelectionInsertedMarkers", "_insertFakeMarkersIntoSelection", "fakeMarkersRangesInsideRange", "_removeFakeMarkersInsideElement", "getPastedDocumentElement", "pasteMarkers", "_getPasteMarkersFromRangeMap", "sourceFragmentFakeMarkers", "_insertFakeMarkersElements", "transformedElement", "removedFakeMarkers", "copyableMarker", "executor", "allowedActions", "copyPartiallySelected", "duplicateOnPaste", "_getMarkerClipboardConfig", "markerNamePrefix", "copyableMarkers", "_getCopyableMarkersFromSelection", "selectionRanges", "markersInRanges", "_isMarkerCopyable", "_getUniqueMarkerName", "_hasMarkerConfiguration", "copyMarkerConfig", "isInGraveyard", "mappedMarkers", "sortedMarkers", "fakeMarker", "fakeMarkersRanges", "_getAllFakeMarkersFromElement", "prevFakeMarker", "skipAssign", "foundFakeMarkers", "prependFakeMarkers", "appendFakeMarkers", "otherFakeMarker", "newId", "ClipboardPipeline", "_setupPasteDrop", "_setupCopyCut", "clipboardMarkersUtils", "_copySelectedFragmentWithMarkers", "contentData", "fullMatch", "spaces", "modelFragment", "resultRange", "_pasteFragmentWithMarkers", "modelDocument", "onCopyCut", "_fireOutputTransformationEvent", "ChangeBuffer", "limit", "_batch", "_size", "_isLocked", "_changeCallback", "_reset", "_selectionChangeCallback", "createBatch", "isLocked", "lock", "unlock", "ignoreLock", "InsertTextCommand", "undoStepSize", "_buffer", "textInsertions", "selectionAttributes", "TYPING_INPUT_TYPES", "TYPING_INPUT_TYPES_ANDROID", "InsertTextObserver", "typingInputTypes", "Input", "_compositionQueue", "CompositionQueue", "insertTextCommand", "modelRanges", "insertText", "selectedText", "rangeText", "commandData", "deleteSelectionContent", "isComposedElement", "flushComposedElements", "flushDebounced", "_queue", "_compositionElements", "commandLiveData", "DeleteCommand", "sequence", "_shouldEntireContentBeReplacedWithParagraph", "_replaceEntireContentWithParagraph", "_shouldReplaceFirstBlockWithParagraph", "limitElementFirstChild", "DELETE_WORD", "DELETE_SELECTION", "DELETE_BACKWARD", "DELETE_FORWARD", "DELETE_EVENT_TYPES", "deleteContentBackward", "deleteWordBackward", "deleteHardLineBackward", "deleteSoftLineBackward", "deleteContentForward", "deleteWordForward", "deleteHardLineForward", "deleteSoftLineForward", "DeleteObserver", "deleteEventSpec", "selectionToRemove", "pressedKeyCode", "beforeInputReceived", "isDeleteKeyCode", "getDeleteDirection", "shouldFireDeleteEvent", "targetRange", "Delete", "_undoOnBackspace", "deleteForwardCommand", "requestUndoOnBackspace", "Typing", "getLastTextLine", "TextWatcher", "testCallback", "_hasMatch", "_startListening", "hasMatch", "_evaluateTextBeforeSelection", "suffix", "rangeBeforeSelection", "testResult", "eventData", "TwoStepCaretMovement", "_isNextGravityRestorationSkipped", "_overrideUid", "arrowRightPressed", "arrowLeftPressed", "contentDirection", "isMovementHandled", "_handleForwardMovement", "_handleBackwardMovement", "_isGravityOverridden", "isBetweenDifferentAttributes", "_enableClickingAfterNode", "_enableInsertContentSelectionAttributesFixer", "_handleDeleteContentAfterNode", "hasAnyAttribute", "preventCaretMovement", "clearSelectionAttributes", "setSelectionAttributesFromTheNodeBefore", "isStepAfterAnyAttributeBoundary", "clicked", "isBackspace", "shouldPreserveAttributes", "restoreSelectionGravity", "observedAttribute", "isInlineObject", "isStrict", "attrBefore", "attrAfter", "TRANSFORMATIONS", "copyright", "registeredTrademark", "trademark", "oneHalf", "oneThird", "twoThirds", "oneForth", "threeQuarters", "lessThanOrEqual", "greaterThanOrEqual", "notEqual", "arrowLeft", "arrowRight", "horizontalEllipsis", "enDash", "emDash", "quotesPrimary", "buildQuotesRegExp", "quotesSecondary", "quotesPrimaryEnGb", "quotesSecondaryEnGb", "quotesPrimaryPl", "quotesSecondaryPl", "TRANSFORMATION_GROUPS", "symbols", "mathematical", "typography", "quotes", "DEFAULT_TRANSFORMATIONS", "normalizeFrom", "normalizeTo", "getTextAttributesAfterPosition", "quoteCharacter", "findAttributeRange", "findAttributeRangeBound", "lookBack", "getCopyOnEnterAttributes", "allAttributes", "EnterCommand", "enterBlock", "isSelectionEmpty", "splitBlock", "isContainedWithinOneElement", "splitPos", "ENTER_EVENT_TYPES", "isSoft", "insertLineBreak", "EnterObserver", "shiftPressed", "enterEventSpec", "Enter", "ShiftEnterCommand", "insertBreak", "anchorPos", "isInsideLimitElement", "breakLineElement", "ShiftEnter", "createEmptyElement", "HighlightStack", "_stack", "oldTop", "_insertDescriptor", "newTop", "compareDescriptors", "oldDescriptor", "newDescriptor", "_removeDescriptor", "shouldABeBeforeB", "classesToString", "n_", "WIDGET_SELECTED_CLASS_NAME", "o_", "toWidget", "setCustomProperty", "u_", "labelOrCreator", "hasSelectionHandle", "widgetElement", "selectionHandle", "setHighlightHandling", "addHighlight", "l_", "toWidgetEditable", "typeAroundFakeCaretPosition", "getTypeAroundFakeCaretPosition", "calculateResizeHostAncestorWidth", "domResizeHost", "getElementComputedWidth", "paddingLeft", "paddingRight", "domResizeHostParent", "parentWidth", "currentLevel", "checkedElement", "TYPE_AROUND_SELECTION_ATTRIBUTE", "isTypeAroundWidget", "POSSIBLE_INSERTION_POSITIONS", "RETURN_ARROW_ICON_ELEMENT", "PLUGIN_DISABLED_EDITING_ROOT_CLASS", "WidgetTypeAround", "_currentFakeCaretModelElement", "_enableTypeAroundUIInjection", "_enableInsertingParagraphsOnButtonClick", "_enableInsertingParagraphsOnEnterKeypress", "_enableInsertingParagraphsOnTypingKeystroke", "_enableTypeAroundFakeCaretActivationUsingKeyboardArrows", "_enableDeleteIntegration", "_enableInsertContentIntegration", "_enableInsertObjectIntegration", "_enableDeleteContentIntegration", "widgetModelElement", "_insertParagraphAccordingToFakeCaretPosition", "selectedModelElement", "_insertParagraph", "buttonTitles", "after", "widgetViewElement", "typeAroundWrapper", "wrapperDomElement", "buttonTemplate", "importNode", "caretTemplate", "positionToWidgetCssClass", "_listenToIfEnabled", "domEventData", "_handleArrowKeyPress", "selectedViewElement", "localizedKeyCodeDirection", "shouldStopAndPreventDefault", "_handleArrowKeyPressOnSelectedWidget", "_handleArrowKeyPressWhenSelectionNextToAWidget", "_handleArrowKeyPressWhenNonCollapsedSelection", "widgetPlugin", "modelElementNextToSelection", "_getObjectElementNextToSelection", "_setSelectionOverElement", "selectedModelNode", "buttonPosition", "widgetDomElement", "wasHandled", "selectedModelWidget", "isDeleteForward", "probe", "deepestEmptyRangeAncestor", "deepestEmptyAncestor", "documentSelection", "verticalNavigationHandler", "arrowUpPressed", "arrowDownPressed", "expandSelection", "getNearestNonInlineLimit", "lastRangePosition", "getNearestTextPosition", "firstRangePosition", "boundaryVerticalPosition", "walkerValueType", "Widget", "_previouslySelected", "_clearPreviouslySelectedWidgets", "lastMarked", "isChild", "_onMousedown", "_handleSelectionChangeOnArrowKeyPress", "_preventDefaultOnArrowKeyPress", "_handleDelete", "_selectFirstNestedEditable", "_selectAncestorWidget", "_selectBlockContent", "editableOrWidgetElement", "currentElement", "clickTargetFromPoint", "nextTextBlock", "objectElement", "isVerticalNavigation", "firstPosition", "lastPosition", "firstSelectedNode", "lastSelectedNode", "objectElementNextToSelection", "previousNode", "nodeToRemove", "widget", "WidgetToolbarRepository", "_toolbarDefinitions", "balloonToolbar", "_balloon", "_updateToolbarsVisibility", "toolbarConfig", "toolbarId", "getRelatedElement", "toolbarDefinition", "itemsConfig", "initialized", "addToolbar", "relatedElement", "_showToolbar", "_hideToolbar", "maxRelatedElementDepth", "deepestRelatedElement", "deepestToolbarDefinition", "relatedElementDepth", "_isToolbarVisible", "_isToolbarInBalloon", "repositionContextualBalloon", "getBalloonPositionData", "ResizeState", "_referenceCoordinates", "originalWidth", "_originalWidth", "originalHeight", "_originalHeight", "originalWidthPercents", "_originalWidthPercents", "aspectRatio", "_aspectRatio", "domResizeHandle", "domHandleHost", "clientRect", "activeHandlePosition", "domHandle", "resizerPositions", "getResizerHandleClass", "resizerPosition", "positionParts", "replacements", "widthStyle", "resizeHostRect", "newSize", "proposedWidth", "proposedHeight", "proposedWidthPercents", "widthPercents", "proposedHandleHostWidth", "handleHostWidth", "proposedHandleHostHeight", "handleHostHeight", "SizeView", "visible", "resizeState", "_dismiss", "unbind", "Resizer", "_viewResizerWrapper", "isSelected", "_cleanup", "_state", "viewResizerWrapper", "_appendHandles", "_appendSizeUI", "redraw", "_sizeView", "_bindToState", "_initialViewWidth", "begin", "_getHandleHost", "_getResizeHost", "_proposeNewSize", "newWidth", "domHandleHostRect", "domResizeHostRect", "commit", "onCommit", "handleHostRect", "domWrapper", "_domResizerWrapper", "widgetWrapper", "handleHost", "resizerWrapper", "currentDimensions", "newDimensions", "isSameNode", "offsetLeft", "offsetTop", "currentCoordinates", "isCentered", "enlargement", "abs", "getResizeHost", "getHandleHost", "WidgetResize", "_resizers", "_observer", "_mouseDownListener", "_mouseMoveListener", "_mouseUpListener", "_redrawSelectedResizerThrottled", "redrawSelectedResizer", "resizer", "getResizerByViewElement", "deselect", "selectedResizer", "widgetToolbarRepository", "forceDisabled", "clearForceDisabled", "containsHandle", "resizeHandle", "isResizeHandle", "_activeResizer", "_getResizerByHandle", "updateSize", "M_", "LineView", "DragDropTarget", "removeDropMarkerDelayed", "removeDropMarker", "_updateDropMarkerThrottled", "_updateDropMarker", "_reconvertMarkerThrottled", "reconvertMarker", "_dropTargetLineView", "_domEmitter", "_scrollables", "_setupDropMarker", "targetViewElement", "targetViewRanges", "blockMode", "draggedRange", "findDropTargetRange", "markerToHighlight", "markerToElement", "_createDropTargetPosition", "_updateDropTargetLine", "nodeParent", "viewElementBefore", "domElementBefore", "viewElementAfter", "domElementAfter", "viewElementParent", "domElementParent", "domScrollableRect", "_getScrollableRect", "rectBefore", "rectAfter", "rectParent", "above", "below", "parentStyle", "leftClamped", "rightClamped", "domScrollable", "overflowY", "getClosestMappedModelElement", "targetViewPosition", "targetModelPosition", "findDropTargetRangeForElement", "shouldIgnoreElement", "startIndex", "endIndex", "middleIndex", "findElementSide", "float", "targetModelElement", "DragDropBlockToolbar", "_isBlockDragging", "_handleBlockDragStart", "_handleBlockDragging", "_handleBlockDragEnd", "elementFromPoint", "DragDrop", "_clearDraggableAttributesDelayed", "_clearDraggableAttributes", "_blockMode", "_draggedRange", "_draggingUid", "_draggableElement", "_setupDragging", "_setupContentInsertionIntegration", "_setupClipboardInputIntegration", "_setupDraggableAttributeHandling", "_finalizeDragging", "_previewContainer", "dragDropTarget", "_prepareDraggedRange", "draggedSelection", "_updatePreview", "updateDropMarker", "getFinalDropRange", "getFinalDropEffect", "clipboardPipeline", "isMove", "isSuccess", "draggableElement", "findDraggableWidget", "moved", "draggableWidget", "blockRange", "getRangeIncludingFullySelectedParents", "touchesBlockEdges", "domRect", "domEditablePaddingLeft", "preview", "lastElement", "parentRange", "touchesStart", "touchesEnd", "PastePlainText", "textAttributes", "Clipboard", "SelectAllCommand", "scopeElement", "isSelectAllScope", "SELECT_ALL_KEYSTROKE", "SelectAllEditing", "SelectAllUI", "SelectAll", "BaseCommand", "_createdBatches", "clearStack", "createdBatches", "docSelection", "transformedRangeGroups", "getTransformedByOperations", "allRanges", "rangeGroup", "isRangeContainedByAnyOtherRange", "normalizeRanges", "batchToUndo", "undoingBatch", "operationsToUndo", "operationToUndo", "nextBaseVersion", "historyOperations", "getOperations", "reversedOperations", "setOperationAsUndone", "joinedRange", "UndoCommand", "batchIndex", "_undo", "_restoreSelection", "RedoCommand", "redoingBatch", "UndoEditing", "_batchRegistry", "_undoCommand", "_redoCommand", "isRedoBatch", "isUndoBatch", "addBatch", "undoneBatch", "UndoUI", "localizedUndoIcon", "localizedRedoIcon", "_addButtonsToFactory", "Icon", "Undo", "FontCommand", "updateAttribute", "FONT_SIZE", "FONT_FAMILY", "FONT_COLOR", "FONT_BACKGROUND_COLOR", "buildDefinition", "modelAttributeKey", "renderUpcastAttribute", "styleAttr", "renderDowncastElement", "FontFamilyCommand", "normalizeOptions", "getOptionDefinition", "fontDefinition", "fontNames", "firstFontName", "cssFontNames", "normalizeFontNameForCSS", "fontName", "FontFamilyEditing", "supportAllValues", "_prepareAnyValueConverters", "_prepareCompatibilityConverter", "kv", "FontFamilyUI", "_getLocalizedOptions", "accessibleLabel", "listOptions", "itemDefinitions", "commandParam", "FontFamily", "FontSizeCommand", "Tv", "attachPriority", "preset", "namedPresets", "numberValue", "tiny", "small", "big", "huge", "styleFontSize", "FontSizeEditing", "presets", "isRelative", "maxSize", "clampedSize", "Vv", "FontSizeUI", "localizedTitles", "Default", "Tiny", "Small", "Big", "Huge", "FontSize", "FontColorCommand", "FontColorEditing", "ColorUI", "componentName", "dropdownLabel", "componentConfig", "localizedColors", "hasColorPicker", "colorPicker", "dropdownContentRendered", "colorSelectorView", "_undoStepBatch", "contentRendered", "FontColorUI", "FontColor", "FontBackgroundColorCommand", "FontBackgroundColorEditing", "addStyleProcessorRules", "FontBackgroundColorUI", "FontBackgroundColor", "ParagraphCommand", "checkCanBecomeParagraph", "InsertParagraphCommand", "_findPositionToInsertParagraph", "qv", "paragraphLikeElements", "Kv", "HeadingCommand", "modelElements", "heading", "checkCanBecomeHeading", "defaultModelElement", "HeadingEditing", "_addDefaultH1Conversion", "afterInit", "enterCommand", "HeadingUI", "defaultTitle", "titles", "headingCommand", "paragraphCommand", "commandValue", "areEnabled", "whichModel", "ImageTextAlternativeCommand", "getClosestSelectedImageElement", "imageUtils", "imageElement", "createBlockImageViewElement", "createSlot", "getImgViewElementMatcher", "matchImageType", "areBothImagePluginsLoaded", "isInlineImageView", "isBlockImageView", "getPositiveMatchPattern", "determineImageTypeForInsertionAtSelection", "getSizeValueIfInPx", "widthAndHeightStylesAreBothSet", "heightStyle", "IMAGE_WIDGETS_CLASSES_MATCH_REGEXP", "ImageUtils", "isInlineImage", "isBlockImage", "imageType", "determinedImageType", "determineImageTypeForInsertion", "setImageSizes", "setImageNaturalSizeAttributes", "src", "img", "Image", "naturalWidth", "naturalHeight", "isImageWidget", "isImage", "imageView", "isImageAllowed", "insertionRange", "altText", "findViewImgElement", "figureView", "configImageInsertType", "ImageTextAlternativeEditing", "TextAlternativeFormView", "_createLabeledInputView", "hy", "getClosestSelectedImageWidget", "ImageTextAlternativeUI", "_form", "_showForm", "_createForm", "_hideForm", "_isInBalloon", "focusEditable", "ImageTextAlternative", "downcastSrcsetAttribute", "downcastImageAttribute", "ImageLoadObserver", "_fireEvents", "InsertImageCommand", "sourceDefinitions", "sourceDefinition", "insertImage", "ReplaceImageSourceCommand", "cleanupImage", "ImageEditing", "insertImageCommand", "replaceImageSourceCommand", "ImageSizeAttributes", "_registerSchema", "_registerConverters", "attachDowncastConverter", "modelAttributeName", "viewAttributeName", "setRatioForInlineImage", "isResized", "ImageTypeCommand", "modelElementName", "_modelElementName", "uploadId", "newElementRange", "ImagePlaceholder", "_setupSchema", "_setupConversion", "_setupLoadListener", "isRegistered", "imgViewElement", "getImageWidgetFromImageView", "ImageBlockEditing", "_setupClipboardIntegration", "elementToStructure", "toImageWidget", "viewImage", "modelImage", "docFragmentChildren", "blockViewImages", "inlineViewImage", "ImageInsertFormView", "integrations", "ImageInsertUI", "_integrations", "isImageSelected", "componentCreator", "_createToolbarComponent", "_createMenuBarComponent", "registerIntegration", "buttonViewCreator", "formViewCreator", "menuBarButtonViewCreator", "requiresForm", "_prepareIntegrations", "dropdownButton", "firstIntegration", "integrationViews", "imageInsertFormView", "resultView", "integration", "ImageBlock", "ImageInlineEditing", "inlineViewImages", "blockViewImage", "ImageInline", "ToggleImageCaptionCommand", "imageCaptionUtils", "ancestorCaptionElement", "getCaptionFromModelSelection", "getCaptionFromImageModelElement", "focusCaptionOnShow", "_hideImageCaption", "_showImageCaption", "imageCaptionEditing", "selectedImage", "savedCaption", "_getSavedCaption", "newCaptionElement", "captionElement", "_saveCaption", "ImageCaptionUtils", "imageModelElement", "ImageCaptionEditing", "_savedCaptionsMap", "_setupImageTypeCommandsIntegration", "_registerCaptionReconversion", "matchImageCaptionViewElement", "figcaptionElement", "createEditableElement", "imageAlt", "imageTypeInlineCommand", "imageTypeBlockCommand", "handleImageTypeChange", "oldCaptionElement", "savedOldElementCaption", "jsonObject", "caption", "reconvertItem", "ImageCaptionUI", "modelCaptionElement", "Ry", "eachFunc", "Oy", "My", "ResizeImageCommand", "ImageResizeEditing", "resizeUnit", "resizeOptions", "resizeImageCommand", "viewImg", "RESIZE_ICONS", "medium", "large", "custom", "original", "ImageResizeButtons", "_resizeUnit", "_registerImageResizeButton", "_registerImageResizeDropdown", "labelText", "_getOptionLabelValue", "isCustomImageResizeOption", "customResizeUI", "optionValueWithUnit", "getIsOnButtonCallback", "originalSizeOption", "_getResizeDropdownListItemDefinitions", "onClick", "forTooltip", "optionsWithSerializedValues", "valueWithUnits", "allDropdownValues", "getIsOnCustomButtonCallback", "dropdownValue", "RESIZED_IMAGE_CLASS", "ImageResizeHandles", "_setupResizerCreator", "widgetView", "imageModel", "domWidgetElement", "tryParseDimensionWithUnit", "dimension", "rawValue", "parsedValue", "tryCastDimensionsToUnit", "parentDimensionPx", "targetUnit", "getSelectedImageEditorNodes", "imageViewElement", "dom", "ImageCustomResizeFormView", "validators", "_validators", "resetFormStatus", "validator", "rawSize", "parsedSize", "sizeWithUnits", "ImageCustomResizeUI", "form", "currentParsedWidth", "imageNodes", "parsedResizedWidth", "initialInputValue", "toFixed", "possibleRange", "imageParentWidthPx", "minimumImageWidth", "minWidth", "lower", "upper", "ceil", "ImageStyleCommand", "_defaultStyles", "imageBlock", "imageInline", "requestedStyle", "shouldConvertImageType", "DEFAULT_OPTIONS", "inline", "alignBlockLeft", "alignCenter", "alignRight", "alignBlockRight", "DEFAULT_ICONS", "full", "center", "inlineLeft", "inlineRight", "DEFAULT_DROPDOWN_DEFINITIONS", "defaultItem", "warnInvalidStyle", "info", "ek", "normalizeStyles", "configuredStyles", "arrangement", "extendedStyle", "isBlockPluginLoaded", "isInlinePluginLoaded", "supportedElements", "missingPlugins", "getDefaultStylesConfiguration", "getDefaultDropdownDefinitions", "pluginCollection", "getStyleDefinitionByName", "ImageStyleEditing", "utils", "normalizedStyles", "_setupPostFixer", "modelToViewConverter", "newStyle", "oldStyle", "viewToModelConverter", "nonDefaultStyles", "modelImageElement", "imageStyle", "imageStyleDefinition", "ImageStyleUI", "localizedDefaultStylesTitles", "definedStyles", "translateStyles", "styleConfig", "definedDropdowns", "dropdownConfig", "_createDropdown", "defaultButton", "buttonViews", "getUIComponentName", "buttonName", "splitButtonView", "splitButtonViewArrow", "getDropdownButtonTitle", "areOn", "buttonConfig", "_executeCommand", "dropdownTitle", "buttonTitle", "createImageTypeRegExp", "regExpSafeNames", "fetchLocalImage", "reject", "imageSrc", "fetch", "resource", "blob", "mimeType", "getImageMimeType", "file", "File", "canvas", "drawImage", "toBlob", "ImageUploadUI", "_createToolbarButton", "_createMenuBarButton", "_createDropdownButton", "isOnly", "imageTypes", "imageTypesRegExp", "acceptedType", "allowMultipleFiles", "imagesToUpload", "imageInsertUI", "uploadImageCommand", "isAccessAllowed", "FileReader", "reader", "_reader", "onprogress", "loaded", "total", "onload", "onerror", "onabort", "readAsDataURL", "abort", "uk", "loaders", "_loadersMap", "_pendingAction", "_updatePendingAction", "uploaded", "fileOrPromise", "createUploadAdapter", "loader", "FileLoader", "aggregatedUploaded", "aggregatedTotal", "uploadTotal", "fileOrPromiseOrLoader", "getLoader", "pendingActions", "getMessage", "uploadedPercent", "filePromise", "uploadAdapterCreator", "_filePromiseWrapper", "_createFilePromiseWrapper", "_adapter", "read", "status", "upload", "uploadResponse", "isFulfilled", "rejecter", "ImageUploadProgress", "uploadStatusChange", "fileRepository", "viewFigure", "_startAppearEffect", "_showPlaceholder", "_hidePlaceholder", "progressBar", "completeIcon", "_removeUIElement", "_getUIElement", "imageFigure", "uniqueProperty", "UploadImageCommand", "_uploadImage", "createLoader", "ImageUploadEditing", "_uploadImageElements", "images", "notification", "showWarning", "fetchableImages", "fetchableImage", "insertedImagesIds", "isInsertedInGraveyard", "getImagesFromChangeItem", "_readAndUpload", "urls", "default", "_parseAndSetSrcsetAttributeOnImage", "imageUploadElements", "domFigure", "originalDisplay", "_ckHack", "clean", "destroyLoader", "srcsetAttribute", "srcset", "IndentEditing", "IndentUI", "localizedIndentIcon", "localizedOutdentIcon", "_defineButton", "IndentBlockCommand", "indentBehavior", "_indentBehavior", "_isIndentationChangeAllowed", "checkEnabled", "blocksToChange", "_getBlocksToChange", "currentIndent", "nextIndent", "getNextIndent", "isListItemBlock", "IndentUsingOffset", "indentAttributeValue", "currentOffset", "offsetToSet", "IndentUsingClasses", "indexStep", "DEFAULT_ELEMENTS", "ITALIC", "ItalicEditing", "Vk", "ItalicUI", "AutomaticDecorators", "_definitions", "getDispatcher", "getDispatcherForLinkedImage", "linkInImage", "Mk", "reHasUnicode", "Nk", "Fk", "Dk", "rsAstral", "rsCombo", "rsFitz", "rsNonAstral", "rsRegional", "rsSurrPair", "reOptMod", "rsOptVar", "rsSeq", "rsSymbol", "reUnicode", "Jk", "Yk", "Xk", "strSymbols", "chr", "ATTRIBUTE_WHITESPACES", "EMAIL_REG_EXP", "PROTOCOL_REG_EXP", "DEFAULT_LINK_PROTOCOLS", "LINK_KEYSTROKE", "createLinkElement", "linkElement", "ensureSafeUrl", "url", "allowedProtocols", "urlString", "protocolsList", "customRegexp", "isLinkableElement", "addLinkProtocolIfApplicable", "defaultProtocol", "protocol", "isProtocolNeeded", "linkHasProtocol", "openLink", "LinkCommand", "manualDecorators", "automaticDecorators", "restoreManualDecoratorStates", "manualDecorator", "_getDecoratorStateFromModel", "manualDecoratorIds", "truthyManualDecorators", "falsyManualDecorators", "linkText", "extractTextFromSelection", "linkRange", "_updateLinkContent", "allowedRanges", "rangesToUpdate", "_isRangeToUpdate", "decoratorName", "allowedRange", "linkHref", "rangeItems", "firstNode", "UnlinkCommand", "linkCommand", "rangesToUnlink", "ManualDecorator", "_createPattern", "DECORATOR_AUTOMATIC", "EXTERNAL_LINKS_REGEXP", "LinkEditing", "allowCreatingEmptyLinks", "addTargetToExternalLinks", "linkDecorators", "decorators", "localizedDecoratorsLabels", "decorator", "retArray", "_enableAutomaticDecorators", "_enableManualDecorators", "registerAttribute", "highlightedElements", "removeHighlight", "_enableLinkOpen", "_enableSelectionAttributesFixer", "_enableClipboardIntegration", "automaticDecoratorDefinitions", "rel", "manualDecoratorDefinitions", "decoratorDefinition", "manualDecoratorValue", "clickedElement", "linkAttributes", "newLink", "LinkFormView", "urlInputView", "_createUrlInput", "_manualDecoratorSwitches", "_createManualDecoratorSwitches", "_createFormChildren", "getDecoratorSwitchesState", "accumulator", "switchButton", "switches", "decoratorValue", "additionalButtonsView", "LinkActionsView", "linkConfig", "previewButtonView", "_createPreviewButton", "unlinkButtonView", "editButtonView", "_linkConfig", "VISUAL_SELECTION_MARKER_NAME", "LinkUI", "formView", "_createToolbarLinkButton", "_enableBalloonActivators", "_createViews", "_createActionsView", "_createFormView", "_enableUserBalloonInteractions", "unlinkCommand", "_addFormView", "_hideUI", "parsedUrl", "_closeFormView", "_showUI", "_getSelectedLinkElement", "_areActionsVisible", "_isUIVisible", "_isUIInPanel", "_addActionsView", "_areActionsInPanel", "_getBalloonPositionData", "_isFormInPanel", "_removeFormView", "_hideFakeVisualSelection", "forceVisible", "_showFakeVisualSelection", "_startUpdatingUI", "prevSelectedLink", "prevSelectionParent", "getSelectionParent", "selectedLink", "markerViewElements", "targetLink", "findLinkElementAncestor", "startLink", "endLink", "isLinkElement", "URL_REG_EXP", "AutoLink", "_enableTypingHandling", "_enableEnterHandling", "_enableShiftEnterHandling", "_enablePasteLinking", "selectedRange", "selStart", "selEnd", "updatedSelection", "_expandLinkRange", "_selectEntireLinks", "watcher", "getUrlAtTextEnd", "linkEnd", "linkStart", "_applyAutoLink", "_checkAndApplyAutoLinkOnRange", "shiftEnterCommand", "fullUrl", "_persistAutoLink", "deletePlugin", "ListWalker", "_startElement", "_referenceIndent", "_isForward", "_includeSelf", "_sameAttributes", "sameAttributes", "_sameIndent", "sameIndent", "_lowerIndent", "lowerIndent", "_higherIndent", "higherIndent", "nestedItems", "iterateSiblingListBlocks", "_getStartNode", "indent", "previousNodesByIndent", "previousNodeInList", "nodeIndent", "previousNodeIndent", "ListBlocksIterable", "listHead", "_listHead", "ListItemUid", "getAllListItemBlocks", "listItem", "getListItemBlocks", "getListItems", "backwardBlocks", "forwardBlocks", "isFirstBlockOfListItem", "listBlock", "isLastBlockOfListItem", "expandListBlocksToCompleteItems", "withNested", "allBlocks", "itemBlock", "sortBlocks", "splitListItemBefore", "mergeListItemBefore", "indentBlocks", "indentBy", "blockIndent", "removeListAttributes", "isSingleListItem", "firstItemId", "getSelectedBlockObject", "canBecomeSimpleListItem", "mergeListItemIfNotLast", "ListIndentCommand", "indentDirection", "_direction", "getSelectedListBlocks", "changedBlocks", "referenceIndent", "parentBlocks", "mergedBlocks", "mergedBlock", "previousItemBlock", "_fireAfterExecute", "siblingItem", "firstNonListBlockIndex", "ListCommand", "_listWalkerOptions", "multiLevel", "_getValue", "selectedBlockObject", "turnOff", "lastBlock", "itemBlocks", "newIndent", "additionalAttributes", "listType", "listIndent", "listItemId", "ListMergeCommand", "shouldMergeOnBlocksContentLevel", "_getMergeSubjectElements", "firstIndent", "lastIndent", "lastElementId", "nestedLastElementBlocks", "sel", "lastElementAfterDelete", "siblingNode", "isFirstBlock", "ListSplitCommand", "_getStartBlock", "ListUtils", "isListView", "isListItemView", "createListElement", "getViewElementIdForListType", "getViewElementNameForListType", "createListItemElement", "findAndAddListHeadToMap", "itemToListHead", "listItemUpcastConverter", "firstItemListType", "listItemDowncastConverter", "attributeNames", "strategies", "dataPipeline", "removeCustomMarkerElements", "strategy", "scope", "canInjectMarkerIntoElement", "createWrapperElement", "canWrapElement", "listItemIndent", "currentListItem", "listItemViewElement", "listViewElement", "setAttributeOnDowncast", "bogusParagraphCreator", "shouldUseBogusParagraph", "markersToRemove", "collectMarkersToRemove", "viewWalker", "LIST_BASE_ATTRIBUTES", "ListEditing", "_downcastStrategies", "multiBlock", "conflictPlugin", "copyOnReplace", "_setupDeleteIntegration", "_setupEnterIntegration", "_setupTabIntegration", "_setupAccessibilityIntegration", "outdent", "registerChildCommand", "_setupModelPostFixing", "getListAttributeNames", "mergeBackwardCommand", "mergeForwardCommand", "isLastBlock", "splitCommand", "modelToViewPositionMapper", "positionAfterLastMarker", "listEditing", "itemsToRefresh", "changedItems", "doesItemBlockRequiresRefresh", "collectListItemsToRefresh", "itemIndent", "doesItemWrappingRequiresRefresh", "useBogus", "isListItemElement", "isListElement", "modelAttributes", "applied", "innerItem", "seenIds", "listNodes", "maxIndent", "prevIndent", "fixBy", "refItem", "refType", "refIndent", "firstElementIndent", "indentDiff", "isListItem", "allContentChildren", "lastItem", "allChildren", "createUIComponents", "ListUI", "modelToViewUrlAttributeConverter", "registry", "figure", "mediaContentElement", "mediaViewElement", "getMediaViewElement", "createMediaFigureElement", "getSelectedMediaModelWidget", "insertMedia", "mediaElement", "MediaEmbedCommand", "selectedMedia", "MediaRegistry", "providers", "extraProviders", "removedProviders", "removeProviders", "providerDefinitions", "provider", "_getMedia", "getViewElement", "Media", "previewRenderer", "subPattern", "_getUrlMatches", "rawUrl", "_getValidUrl", "_locale", "_match", "_previewRenderer", "renderForEditingView", "renderMediaPreview", "mediaHtml", "_getPreviewHtml", "createRawElement", "_getPlaceholderHtml", "outerHTML", "MediaEmbedEditing", "viewMedia", "hasMedia", "URL_REGEXP", "AutoMediaEmbed", "_timeoutId", "_positionToInsert", "leftLivePosition", "rightLivePosition", "_embedMediaBetweenPositions", "leftPosition", "rightPosition", "mediaRegistry", "urlRange", "MediaFormView", "_urlInputViewInfoDefault", "inputField", "_urlInputViewInfoTip", "mediaURLInputValue", "MediaEmbedUI", "_createDialogButton", "dialogPlugin", "_showDialog", "_formView", "_handleSubmitForm", "BRACKET_PAIRS", "MentionCommand", "mentionData", "mention", "mentionID", "mentionText", "_addMentionAttributes", "_text", "currentAttributes", "attributesWithMention", "isFollowedByWhiteSpace", "isInsertedInBrackets", "precedingCharacter", "isPrecededByOpeningBracket", "isFollowedByBracketClosure", "MentionEditing", "_toMentionAttribute", "createViewMentionElement", "preventPartialMentionDowncast", "wasChanged", "nodeAfterInsertedTextNode", "checkAndFix", "insertedNode", "nodeAfterInserted", "isBrokenMentionNode", "baseMentionData", "viewElementOrMention", "dataMention", "MentionsView", "selectFirst", "selectNext", "selected", "selectPrevious", "indexToGet", "highlight", "_isItemVisibleInScrolledArea", "executeSelected", "DomWrapperView", "MentionListItemView", "defaultHandledKeyCodes", "defaultCommitKeyCodes", "MentionUI", "_mentionsView", "_createMentionView", "_mentionsConfigurations", "_requestFeedDebounced", "_requestFeed", "feeds", "commitKeys", "handledKeyCodes", "_hideUIAndRemoveMarker", "mentionDescription", "feed", "dropdownLimit", "isValidMentionMarker", "feedCallback", "createFeedCallback", "itemRenderer", "_setupTextWatcher", "_handleFeedResponse", "mentionsView", "markerDropdownLimit", "_renderItem", "mentionMarker", "feedText", "_lastRequested", "feedResponse", "response", "feedsWithPattern", "createRegExp", "minimumCharacters", "markerDefinition", "getLastValidMarkerInText", "splitStringFrom", "textToTest", "markerPosition", "hasMention", "matchedTextLength", "checkIfStillInCompletionMode", "mentionCommand", "feedItem", "_showOrUpdateUI", "markerMarker", "_getBalloonPanelPositionData", "renderer", "_getItemRenderer", "renderResult", "preferredPosition", "getBalloonPanelPositions", "caret_se", "caret_sw", "caret_ne", "caret_nw", "lastValidMarker", "currentMarkerLastIndex", "numberOfCharacters", "openAfterCharacters", "feedItems", "isPx", "ZA", "transformListItemLikeElementsIntoLists", "hasMultiLevelListPlugin", "itemLikeElements", "foundMargins", "getMarginLeftNormalized", "itemData", "getListItemData", "order", "encounteredLists", "itemLikeElement", "isListContinuation", "originalListId", "listStyle", "detectListStyle", "listElement", "createNewEmptyList", "parentListItems", "listItemElements", "removeBulletElement", "stackItem", "currentItem", "isList", "listLikeItem", "listStyleRegexp", "listStyleTypeRegex", "listStartIndexRegex", "legalStyleListRegex", "multiLevelNumberFormatTypeRegex", "legalStyleListMatch", "multiLevelNumberFormatMatch", "islegalStyleList", "listStyleMatch", "listStyleType", "listStyleTypeMatch", "bulletedStyle", "listMarkerElement", "textNodeOrElement", "listMarker", "listStartIndexMatch", "mapListStyleDefinition", "isLegalStyleList", "idMatch", "orderMatch", "indentMatch", "bulletMatcher", "numericValue", "replaceImagesSourceWithBase64", "rtfData", "upcastWriter", "shapesIds", "shapeElementsMatcher", "prevSiblingName", "exceptionIds", "isElementAShape", "hasElementGfxdataAttribute", "isPreviousSiblingAShapeType", "isElementIdInExceptionsArray", "imageElementsMatcher", "imgs", "shapes", "shape", "shapeIds", "containsMatchingImg", "findSrc", "imageElements", "imagesHexSources", "newSrc", "_convertHexToBase64", "regexPictureHeader", "regexPicture", "hexString", "btoa", "msWordMatch1", "msWordMatch2", "MSWordNormalizer", "htmlString", "_parsedData", "elementsToUnwrap", "itemParent", "findSibling", "isBlockViewElement", "googleDocsMatch", "GoogleDocsNormalizer", "elementsToReplace", "nextSiblingIsBlock", "googleSheetsMatch", "GoogleSheetsNormalizer", "normalizeSafariSpaceSpans", "parseHtml", "normalizedHtml", "bodyCloseTag", "htmlCloseTag", "bodyCloseIndex", "htmlCloseIndex", "htmlDocument", "htmlElement", "innerTextLength", "bodyString", "bodyView", "styleTags", "getElementsByTagName", "sheet", "cssRules", "REMOVE_FORMAT", "RemoveFormatUI", "RemoveFormatCommand", "_getFormattingItems", "_getFormattingAttributes", "itemHasRemovableFormatting", "curRange", "RemoveFormatEditing", "STRIKETHROUGH", "StrikethroughEditing", "Ax", "StrikethroughUI", "upcastStyleToAttribute", "reduceBoxSides", "shouldUpcast", "getNormalizedStyle", "reduceBoxSidesValue", "upcastBorderStyles", "defaultBorder", "stylesToConsume", "matcherPattern", "normalizedBorder", "reducedBorder", "downcastAttributeToStyle", "downcastTableAttribute", "sides", "topSideStyle", "updateNumericAttribute", "createEmptyTableCell", "tableCell", "isHeadingColumnCell", "tableUtils", "headingColumns", "column", "getCellLocation", "enableProperty", "getSelectionAffectedTable", "upcastTable", "viewTable", "rows", "headingRows", "headRows", "bodyRows", "firstTheadElement", "tableChild", "trs", "headingCols", "scanRowForHeadingColumns", "row", "ensureParagraphInTableCell", "th", "TableWalker", "_jumpedToStartRow", "_table", "_startRow", "startRow", "_endRow", "endRow", "_startColumn", "startColumn", "_endColumn", "endColumn", "_includeAllSlots", "includeAllSlots", "_skipRows", "_row", "_rowIndex", "_column", "_cellIndex", "_spannedCells", "_nextCellAtColumn", "_canJumpToStartRow", "_jumpToNonSpannedRowClosestToStartRow", "_isOverEndRow", "_isOverEndColumn", "_advanceToNextRow", "outValue", "spanData", "_getSpanned", "_shouldSkipSlot", "_formatOutValue", "cell", "colspan", "rowspan", "_recordSpans", "anchorRow", "anchorColumn", "TableSlot", "rowIsMarkedAsSkipped", "rowIsBeforeStartRow", "columnIsBeforeStartColumn", "columnIsAfterEndColumn", "rowMap", "rowToUpdate", "columnToUpdate", "_markSpannedCell", "firstRowLength", "_getRowLength", "rowIndex", "cols", "tableWalker", "cellAnchorRow", "cellAnchorColumn", "isAnchor", "cellWidth", "cellHeight", "getPositionBefore", "downcastTable", "tableElement", "figureElement", "getRows", "additionalSlots", "asWidget", "downcastCell", "tableRow", "tableSlot", "cellElementName", "convertParagraphInTableCell", "isSingleParagraphWithoutAttributes", "InsertTableCommand", "validParent", "defaultRows", "defaultColumns", "createTable", "InsertRowCommand", "isAnyCellSelected", "getSelectionAffectedTableCells", "insertAbove", "affectedTableCells", "rowIndexes", "getRowIndexes", "insertRows", "copyStructureFromAbove", "InsertColumnCommand", "columnIndexes", "getColumnIndexes", "insertColumns", "SplitCellCommand", "selectedCells", "splitCellHorizontally", "splitCellVertically", "cropTableToDimensions", "sourceTable", "cropDimensions", "croppedTable", "cropHeight", "tableMap", "sourceRow", "sourceColumn", "rowInCroppedTable", "tableCellCopy", "trimTableCellIfNeeded", "getVerticallyOverlappingCells", "overlapRow", "cells", "slotInfo", "splitHorizontally", "splitRow", "newRowspan", "newCellAttributes", "newCellRowSpan", "columnIndex", "newCell", "getHorizontallyOverlappingCells", "overlapColumn", "cellsToSplit", "splitVertically", "splitColumn", "newColspan", "newCellColSpan", "cellRow", "cellColumn", "limitRow", "limitColumn", "removeEmptyColumns", "getColumns", "columnsMap", "emptyColumns", "cellsCount", "emptyColumn", "removeColumns", "removeEmptyRows", "emptyRows", "tableRowCount", "emptyRow", "removeRows", "removeEmptyRowsColumns", "adjustLastRowIndex", "dimensions", "lastRowMap", "firstColumn", "lastColumn", "lastRow", "rowspanAdjustment", "adjustLastColumnIndex", "lastColumnMap", "firstRow", "colspanAdjustment", "MergeCellCommand", "isHorizontal", "cellToMerge", "_getMergeableCell", "getTableCellsContainingSelection", "isMergeNext", "cellToExpand", "cellToRemove", "removedTableCellRow", "spanAttribute", "cellSpan", "cellToMergeSpan", "horizontalCell", "hasHeadingColumns", "cellOnLeft", "cellOnRight", "leftCellColumn", "rightCellColumn", "leftCellSpan", "isCellOnLeftInHeadingColumn", "isCellOnRightInHeadingColumn", "isMergeWithBodyCell", "isMergeWithHeadCell", "currentCellRowSpan", "rowOfCellToMerge", "currentCellData", "mergeColumn", "cellToMergeData", "firstTableChild", "RemoveRowCommand", "firstCell", "lastRowIndex", "selectedRowIndexes", "areAllRowsSelected", "referenceCells", "removedRowIndexes", "columnIndexToFocus", "rowsToRemove", "cellToFocus", "removedRowIndex", "columnToFocus", "RemoveColumnCommand", "tableColumnCount", "lastCell", "returnValue", "removedColumnIndexes", "columnsToRemove", "SetHeaderRowCommand", "isInTable", "_isInHeading", "headingRowsToSet", "currentHeadingRows", "overlappingCells", "SetHeaderColumnCommand", "headingColumnsToSet", "getColumnGroupElement", "getTableColumnElements", "columnGroupElement", "TableUtils", "createEmptyRows", "rowsToInsert", "isCopyStructure", "copyStructureFrom", "walkerEndRow", "tableIterator", "rowColSpansMap", "lastCellRow", "isReferenceRow", "cellIndex", "columnsToInsert", "tableColumns", "createCells", "skipRow", "rowCount", "indexesObject", "cellsToMove", "cellsToTrim", "lastRowOfCell", "rowSpanToSet", "targetRowIndex", "tableRowMap", "previousCell", "cellToMove", "headingsRemoved", "removedColumnIndex", "adjacentColumn", "removedColumnWidth", "adjacentColumnWidth", "numberOfCells", "newCellsSpan", "updatedSpan", "breakSpanEvenly", "newCellsAttributes", "cellsToInsert", "splitCellColumn", "cellsToUpdate", "splitCellRow", "distanceFromLastCellSpan", "isOnSameColumn", "rowspanToSet", "sortRanges", "cellWithSelection", "getSelectedTableCells", "tableCells", "indexes", "_getFirstLastIndexesObject", "selectedTableCells", "_areCellInTheSameTableSection", "areaOfSelectedCells", "rowsIndexes", "compareRangeOrder", "allIndexesSorted", "indexA", "_areIndexesInSameSection", "headingSectionSize", "tableCellToInsert", "MergeCellsCommand", "isSelectionRectangular", "firstTableCell", "mergeWidth", "mergeHeight", "maxWidthOffset", "maxHeightOffset", "getMaxOffset", "firstCellRow", "firstCellColumn", "vT", "cellBeingMerged", "targetCell", "yT", "currentMaxOffset", "dimensionValue", "SelectRowCommand", "rangesToSelect", "SelectColumnCommand", "startLocation", "endLocation", "cellInfo", "injectTableLayoutPostFixer", "analyzedTables", "isTableAttributeEntry", "fixTableCellsRowspan", "fixTableRowsSizes", "maxRows", "rowLimit", "childrenLengths", "lengths", "rowsLengths", "tableSize", "maxColumns", "injectTableCellParagraphPostFixer", "fixTable", "fixTableRow", "fixTableCellContent", "checkTableCellChange", "textNodes", "shouldRefresh", "TableEditing", "_additionalSlots", "figureChild", "modelTable", "upcastCellSpan", "isRowChange", "expectedElementName", "cellsToCheck", "paragraphsToRefresh", "slotHandler", "InsertTableView", "_createGridCollection", "_highlightGridBoxes", "boxView", "boxes", "_createGridButton", "TableUI", "isContentLtr", "insertTableView", "bindIsOn", "_prepareDropdown", "_prepareMergeSplitButtonDropdown", "_fillDropdownWithListOptions", "mergeCommandName", "mergeCommand", "addListOption", "TableSelection", "_handleDeleteContent", "_handleInsertTextEvent", "_defineSelectionConverter", "_enablePluginDisabling", "getSelectionAsFragment", "adjustedLastRow", "adjustedLastColumn", "anchorCell", "cellsToSelect", "_getCellsToSelect", "getFocusCell", "getAnchorCell", "highlighted", "previouslyHighlighted", "lastViewCell", "tableCellToSelect", "rangeToSelect", "selectionMap", "walkerOptions", "flipVertically", "flipHorizontally", "TableClipboard", "_onCopyCut", "_onInsertContent", "tableSelection", "pastedTable", "getTableIfOnlyTableInContent", "_pasteMarkersIntoTransformedElement", "_replaceSelectedCells", "pastedDimensions", "selectedTable", "shouldExpandSelection", "expectedHeight", "expectedWidth", "tableWidth", "tableHeight", "doVerticalSplit", "doHorizontalSplit", "selectionHeight", "selectionWidth", "_replaceSelectedCellsWithPasted", "pastedWidth", "pastedHeight", "pastedTableLocationMap", "selectedTableMap", "pastedRow", "pastedColumn", "pastedCell", "cellToInsert", "newTableCell", "_replaceTableSlotCell", "areHeadingRowsIntersectingSelection", "areHeadingColumnsIntersectingSelection", "newCells", "contentRange", "rangeBefore", "rangeAfter", "limitColumns", "isAffectedBySelection", "limitRows", "TableKeyboard", "_onArrowKey", "_handleTabOnSelectedTable", "_handleTab", "bubblingEventInfo", "currentRowIndex", "currentCellIndex", "isFirstCellInRow", "isLastCellInRow", "isLastRow", "previousRow", "_handleArrowKeys", "focusCell", "_navigateFromCellInDirection", "_isSelectionAtCellEdge", "currentCellInfo", "cellToSelect", "setCellSelection", "positionToSelect", "MouseEventsObserver", "TableMouse", "_enableShiftClickSelection", "_enableMouseDragSelection", "blockSelectionChange", "_getModelTableCellFromDomEvent", "haveSameTableParent", "beganCellSelection", "newTargetCell", "viewTargetElement", "cellA", "cellB", "ColorInputView", "_createDropdownView", "_createInputTextView", "_stillTyping", "_setInputValue", "colorSelector", "_createColorSelector", "colorPreview", "blur", "mappedColor", "defaultColorValue", "removeColorButtonLabel", "colorPickerConfig", "backupColor", "normalizedInputValue", "normalizeColor", "YT", "getBorderStyleLabels", "none", "solid", "dotted", "dashed", "double", "groove", "ridge", "inset", "outset", "getLocalizedColorErrorText", "getLocalizedLengthErrorText", "colorFieldValidator", "lengthFieldValidator", "isNumberString", "lineWidthFieldValidator", "getBorderStyleDefinitions", "defaultStyle", "styleLabels", "_borderStyleValue", "fillToolbar", "icons", "nameToValue", "buttonValue", "valueToCompare", "defaultColors", "getLabeledColorInputCreator", "colorInputView", "colorConfig", "FormRowView", "_role", "_ariaLabelledBy", "TableCellPropertiesView", "borderStyle", "borderWidth", "borderColor", "padding", "horizontalAlignment", "verticalAlignment", "borderStyleDropdown", "borderWidthInput", "borderColorInput", "borderRowLabel", "_createBorderFields", "backgroundRowLabel", "backgroundInput", "_createBackgroundFields", "widthInput", "operatorLabel", "heightInput", "dimensionsLabel", "_createDimensionFields", "horizontalAlignmentToolbar", "verticalAlignmentToolbar", "alignmentLabel", "_createAlignmentFields", "paddingInput", "_createPaddingField", "defaultTableCellProperties", "colorInputCreator", "borderColors", "isBorderStyleSet", "backgroundColors", "ALIGNMENT_ICONS", "justify", "middle", "isContentRTL", "_horizontalAlignmentLabels", "_verticalAlignmentLabels", "fieldsThatShouldValidateToSave", "errorTexts", "getSelectionAffectedTableWidget", "getSelectedTableWidget", "getTableWidgetAncestor", "isTableWidget", "BALLOON_POSITIONS", "bE", "getBalloonCellPositionData", "getBalloonTablePositionData", "modelTableCell", "getTableCellAtPosition", "viewTableCell", "getSingleValue", "objectOrString", "addDefaultUnitToNumericValue", "defaultUnit", "getNormalizedDefaultProperties", "includeAlignmentProperty", "includePaddingProperty", "includeVerticalAlignmentProperty", "includeHorizontalAlignmentProperty", "isRightToLeftContent", "getNormalizedDefaultTableProperties", "getNormalizedDefaultCellProperties", "propertyToCommandMap", "TableCellPropertiesUI", "_defaultTableCellProperties", "_isReady", "isCommandEnabled", "_createPropertiesView", "borderColorsConfig", "localizedBorderColors", "backgroundColorsConfig", "localizedBackgroundColors", "_hideView", "_isViewInBalloon", "colorErrorText", "lengthErrorText", "_getPropertyChangeCallback", "_getValidatedPropertyChangeCallback", "viewField", "_fillViewFormFromCommandValues", "borderStyleCommand", "_updateView", "_isViewVisible", "setErrorTextDebounced", "TableCellPropertyCommand", "_defaultValue", "_getSingleValue", "_getValueToSet", "firstCellValue", "_getAttribute", "TableCellWidthCommand", "TableCellWidthEditing", "TableCellPaddingCommand", "TableCellHeightCommand", "TableCellBackgroundColorCommand", "TableCellVerticalAlignmentCommand", "TableCellHorizontalAlignmentCommand", "TableCellBorderStyleCommand", "TableCellBorderColorCommand", "TableCellBorderWidthCommand", "VALIGN_VALUES_REG_EXP", "ALIGN_VALUES_REG_EXP", "TableCellPropertiesEditing", "align", "valign", "TablePropertyCommand", "TableBackgroundColorCommand", "TableBorderColorCommand", "TableBorderStyleCommand", "TableBorderWidthCommand", "TableWidthCommand", "TableHeightCommand", "TableAlignmentCommand", "JE", "FLOAT_VALUES_REG_EXP", "TablePropertiesEditing", "defaultTableProperties", "enableTableToFigureProperty", "TablePropertiesView", "alignmentToolbar", "tP", "backgroundInputCreator", "_alignmentLabels", "iP", "TablePropertiesUI", "_defaultTableProperties", "propertyKey", "TutorizeMediaUploadUI", "_setUpDropdown", "directUploads", "positionDirectUploads", "box", "docElem", "clientTop", "clientLeft", "mediaFileEmbedAttributes", "TutorizeMediaFileEmbed", "_defineSchema", "_defineConverters", "editingDowncastHandler", "getElementMediaFileAttributes", "previewElement", "UNDERLINE", "UnderlineEditing", "hP", "UnderlineUI", "modelElementToPlainText", "childText", "defaultPlugins", "_setupConversionUsingClasses", "_setupConversionUsingOffset", "indentCommand", "outdentCommand", "marginProperty", "normalizers", "_isTransformedWithPasteFromOffice", "activeNormalizer", "tableContentToolbarItems", "tableToolbarItems", "include", "_enableTransformationWatchers", "normalizedTransformations", "extra", "isNotRemoved", "transformation", "definedTransformations", "transformationOrGroup", "normalizedTransformation", "replaces", "matchedRange", "replacePosition", "replaceRange", "defineProperties", "characters", "_getCharacters", "_getText", "words", "_getWords", "_outputView", "_wordsMatchRegExp", "_refreshStats", "onUpdate", "wordCountContainer", "displayWords", "displayCharacters", "txt", "ClassicEditorUI", "_toolbarConfig", "_elementReplacer", "_handleScrollToTheSelectionWithStickyPanel", "replacementElement", "editingRoot", "setEditableElement", "attachDomRoot", "_initPlaceholder", "_initToolbar", "_initMenuBar", "_initDialogPluginIntegration", "_initContextualBalloonIntegration", "detachDomRoot", "stickyPanel", "placeholderText", "contextualBalloon", "stickyPanelHeight", "newTopViewportOffset", "updateBalloonPosition", "scrollViewportOnPanelGettingSticky", "dialogView", "stickyPanelContentRect", "TutorizeClassicEditorUIView", "_voiceLabelView", "_createVoiceLabel", "shouldToolbarGroupWhenFull", "voiceLabel", "TutorizeClassicEditor", "originalSubmit", "onSubmit", "submit", "pP", "require_mediaelement_and_player", "__commonJSMin", "e", "s", "o", "u", "a", "__require", "i", "f", "l", "n", "_dereq_", "module", "exports", "global", "topLevel", "minDoc", "doccy", "win", "root", "setTimeoutFunc", "noop", "bind", "fn", "thisArg", "Promise", "doResolve", "handle", "self", "deferred", "cb", "resolve", "reject", "ret", "newValue", "then", "finale", "len", "Handler", "onFulfilled", "onRejected", "promise", "done", "value", "reason", "ex", "prom", "arr", "args", "remaining", "res", "val", "values", "err", "factory", "embed", "parent", "svg", "target", "fragment", "viewBox", "clone", "loadreadystatechange", "xhr", "cachedDocument", "item", "svg4everybody", "rawopts", "oninterval", "index", "uses", "use", "getSVGAncestor", "src", "opts", "polyfill", "srcSplit", "url", "id", "requests", "numberOfSvgUseElementsToBypass", "requestAnimationFrame", "newerIEUA", "webkitUA", "olderEdgeUA", "edgeUA", "inIframe", "node", "_typeof", "obj", "_mejs", "_mejs2", "_interopRequireDefault", "_en", "_general", "i18n", "_len", "_key", "message", "pluralParam", "str", "pluralForm", "language", "_plural", "input", "number", "form", "_pluralForms", "_window", "_window2", "_document", "_document2", "_media2", "_renderer", "_constants", "_classCallCheck", "instance", "Constructor", "MediaElement", "idOrNode", "options", "sources", "_this", "t", "error", "tagName", "processURL", "type", "_url", "blobUrl", "mediaFiles", "_sources", "nodeSource", "_type", "rendererName", "media", "newRenderer", "newRendererType", "rendererArray", "_i", "total", "rendererList", "renderOptions", "width", "height", "urlList", "event", "props", "methods", "addProperty", "name", "onGet", "onSet", "oldValue", "getFn", "setFn", "assignGettersSetters", "propName", "capName", "getSrc", "setSrc", "_src", "_type2", "_i2", "_src2", "_type3", "_media", "renderInfo", "shouldChangeRenderer", "triggerAction", "methodName", "response", "tmpResponse", "assignMethods", "_i3", "_i4", "_total", "eventName", "callback", "callbacks", "_i5", "_i6", "mediaElement", "wrapper", "mejs", "_createClass", "defineProperties", "descriptor", "protoProps", "staticProps", "Renderer", "renderer", "renderers", "renderersLength", "rendererIndicator", "rendererRanking", "b", "key", "j", "jl", "order", "_i18n", "_i18n2", "_player", "_player2", "Features", "_interopRequireWildcard", "_dom", "_generate", "newObj", "player", "fullscreenTitle", "fullscreenBtn", "isFullScreen", "fullscreenChanged", "isNative", "mode", "containerStyles", "checkFullscreen", "percentErrorMargin", "windowWidth", "screenWidth", "absDiff", "marginError", "elements", "layers", "zoomFactor", "captionText", "_total2", "controls", "op", "playTitle", "pauseTitle", "play", "playBtn", "togglePlayPause", "which", "_time", "lastKeyPressTime", "mouseIsDown", "startedPaused", "autoRewindInitial", "tooltip", "rail", "timeSlider", "newTime", "element", "handleMouseMove", "totalStyles", "offsetStyles", "transform", "cssMatrix", "percentage", "leftPos", "pos", "x", "matrix", "handleLocation", "hoverScaleX", "half", "offsetContainer", "tooltipStyles", "updateSlider", "seconds", "timeSliderText", "time", "duration", "restartPlayer", "handleMouseup", "keyCode", "seekForward", "seekBackward", "seekTime", "volume", "newVolume", "mutePlayer", "events", "endEvents", "totalEvents", "broadcast", "label", "percent", "fakeTime", "nTime", "tW", "newWidth", "handlePos", "currTime", "currentTime", "timecode", "attr", "tracksTitle", "chaptersTitle", "subtitleCount", "kind", "_kind", "inEvents", "outEvents", "trackId", "keyboard", "labels", "captions", "_total3", "_total4", "radio", "el", "_i7", "_total5", "_i8", "_total6", "tracktags", "track", "srclang", "setByKeyboard", "radios", "_i9", "_total7", "_i10", "_total8", "_i11", "_total9", "_track", "d", "lang", "targetSiblings", "button", "hasSubtitles", "sanitize", "html", "div", "scripts", "allElements", "_i12", "attributesObj", "attributes", "text", "img", "image", "visible", "_visible", "slides", "chapters", "_i13", "_total10", "listItems", "_i14", "_total11", "_i15", "_total12", "tracks", "lo", "hi", "mid", "start", "stop", "trackText", "lines", "entries", "identifier", "trackElem", "container", "styleNode", "styles", "_i16", "_total13", "style", "_temp", "_style", "muteText", "unmuteText", "volumeControlText", "mute", "volumeSlider", "anchor", "mouseIsOver", "modified", "updateVolumeSlider", "volumeTotal", "volumeCurrent", "volumeHandle", "positionVolumeHandle", "_button", "volumePercentage", "volumeStyles", "handleVolumeMove", "totalOffset", "railHeight", "newY", "railWidth", "newX", "toggleMute", "hasFocus", "rendered", "EN", "_mediaelement", "_mediaelement2", "_default", "_default2", "dom", "config", "MediaElementPlayer", "playerOptions", "domNode", "videoPlayerTitle", "offscreen", "btnSelector", "tagType", "capsTagName", "doAnimation", "_loop", "forceHide", "_loop2", "timeout", "autoplayAttr", "autoplay", "defaultControls", "pressed", "playerIndex", "p", "loadingElement", "errorContainer", "errorContent", "imgError", "poster", "parentEl", "parentStyles", "nativeWidth", "nativeHeight", "aspectRatio", "ratio", "parentHeight", "newHeight", "parentWidth", "layerChildren", "isIframe", "targetElement", "initHeight", "initWidth", "scaleX1", "scaleY1", "scaleX2", "scaleY2", "bScaleOnWidth", "finalWidth", "finalHeight", "children", "minWidth", "child", "layer", "posterDiv", "posterImg", "className", "doc", "eventList", "part", "_eventList", "_eventList2", "feature", "posterUrl", "loading", "bigPlay", "hasError", "evt", "keyAction", "userInteraction", "featureIndex", "source", "_loop3", "newTrack", "muted", "DefaultPlayer", "$", "NativeDash", "settings", "DashNativeRenderer", "originalNode", "dashPlayer", "attachNativeEvents", "_dashPlayer", "dashEvents", "assignEvents", "assignMdashEvents", "_event", "eventType", "PluginDetector", "plugin", "v", "pv", "pluginName", "mimeType", "activeX", "axDetect", "version", "description", "ax", "FlashMediaElementRenderer", "flash", "isActive", "initEvents", "stackItem", "flashVars", "isVideo", "flashHeight", "flashWidth", "specialIEContainer", "hasFlash", "FlashMediaElementVideoRenderer", "FlashMediaElementHlsVideoRenderer", "FlashMediaElementMdashVideoRenderer", "FlashMediaElementAudioRenderer", "FlashMediaElementAudioOggRenderer", "NativeFlv", "FlvNativeRenderer", "flvPlayer", "_flvOptions", "_flvConfigs", "_flvPlayer", "flvEvents", "assignFlvEvents", "data", "flvOptions", "flvConfigs", "NativeHls", "HlsNativeRenderer", "preload", "hlsPlayer", "_hlsPlayer", "hlsEvents", "recoverDecodingErrorDate", "recoverSwapAudioCodecDate", "assignHlsEvents", "now", "_message", "_message2", "HtmlMediaElement", "YouTubeApi", "youTubeId", "parts", "parameters", "paramParts", "YouTubeIframeRenderer", "youtube", "apiStack", "readyState", "youTubeApi", "paused", "ended", "youTubeIframe", "percentLoaded", "_videoId", "errorHandler", "youtubeContainer", "isAudio", "videoId", "youtubeSettings", "newEvent", "_youTubeState", "quality", "resolutions", "NAV", "UA", "IS_IPAD", "IS_IPHONE", "IS_IPOD", "IS_IOS", "IS_ANDROID", "IS_IE", "IS_EDGE", "IS_CHROME", "IS_FIREFOX", "IS_SAFARI", "IS_STOCK_ANDROID", "HAS_MSE", "SUPPORT_POINTER_EVENTS", "documentElement", "getComputedStyle", "supports", "SUPPORT_PASSIVE_EVENT", "supportsPassive", "html5Elements", "video", "SUPPORTS_NATIVE_HLS", "hasiOSFullScreen", "hasNativeFullscreen", "hasWebkitNativeFullScreen", "hasMozNativeFullScreen", "hasMsNativeFullScreen", "hasTrueNativeFullScreen", "nativeFullScreenEnabled", "fullScreenEventName", "requestFullScreen", "cancelFullScreen", "HAS_NATIVE_FULLSCREEN", "HAS_WEBKIT_NATIVE_FULLSCREEN", "HAS_MOZ_NATIVE_FULLSCREEN", "HAS_MS_NATIVE_FULLSCREEN", "HAS_IOS_FULLSCREEN", "HAS_TRUE_NATIVE_FULLSCREEN", "HAS_NATIVE_FULLSCREEN_ENABLED", "FULLSCREEN_EVENT_NAME", "loadScript", "offset", "toggleClass", "fadeOut", "fadeIn", "siblings", "ajax", "script", "rect", "scrollLeft", "scrollTop", "hasClassMethod", "addClassMethod", "removeClassMethod", "hasClass", "addClass", "removeClass", "animate", "timestamp", "progress", "opacity", "filter", "elem", "dataType", "success", "completed", "accept", "escapeHTML", "debounce", "isObjectEmpty", "splitEvents", "createEvent", "isNodeAfter", "isString", "map", "c", "func", "wait", "_arguments", "immediate", "context", "later", "callNow", "rwindow", "eventFrags", "detail", "sourceNode", "targetNode", "generateControlButton", "playerId", "ariaLabel", "title", "iconSprite", "icons", "classPrefix", "buttonClass", "ariaDescribedby", "ariaPressed", "ariaDescribedbyAttr", "ariaPressedAttr", "iconHtml", "icon", "absolutizeUrl", "formatType", "getMimeFromType", "getTypeFromFile", "getExtension", "normalizeExtension", "typeChecks", "ext", "normalizedExt", "mime", "baseUrl", "baseName", "extension", "_promisePolyfill", "_promisePolyfill2", "_svg4everybody", "_svg4everybody2", "CustomEvent", "params", "to", "nextSource", "nextKey", "searchString", "position", "matches", "lastTime", "vendors", "timeToCall", "pseudoEl", "constructor", "nodes", "isDropFrame", "secondsToTimeCode", "timeCodeToSeconds", "calculateTimeFormat", "convertSMPTEtoSeconds", "fps", "forceHours", "showFrameCount", "secondsDecimalLength", "timeFormat", "dropFrames", "timeBase", "framesPer24Hours", "framesPer10Minutes", "frameSep", "hours", "minutes", "frames", "m", "timeBaseDivision", "timeFormatFrags", "timeFormatSettings", "unique", "result", "output", "totalMinutes", "hFrames", "mFrames", "lis", "format", "firstTwoPlaces", "separatorIndex", "separator", "firstChar", "required", "hasNextValue", "SMPTE", "decimalLen", "secs", "multiplier", "require_full", "__commonJSMin", "exports", "module", "linkClickSelector", "buttonClickSelector", "inputChangeSelector", "formSubmitSelector", "formInputClickSelector", "formDisableSelector", "formEnableSelector", "fileInputSelector", "linkDisableSelector", "buttonDisableSelector", "nonce", "loadCSPNonce", "metaTag", "cspNonce", "m", "matches", "element", "selector", "EXPANDO", "getData", "key", "setData", "value", "$", "isContentEditable", "isEditable", "csrfToken", "meta", "csrfParam", "CSRFProtection", "xhr", "token", "refreshCSRFTokens", "param", "input", "AcceptHeaders", "ajax", "options", "prepareOptions", "createXHR", "response", "processResponse", "done", "type", "script", "parser", "href", "isCrossDomain", "url", "originAnchor", "urlAnchor", "preventDefault", "CustomEvent", "event", "params", "evt", "result", "fire", "obj", "name", "data", "stopEverything", "e", "delegate", "eventType", "handler", "target", "toArray", "serializeElement", "additionalParam", "inputs", "option", "formElements", "form", "el", "handleConfirmWithRails", "rails", "allowAction", "confirm", "message", "callback", "answer", "handleDisabledElement", "enableElement", "isXhrRedirect", "enableLinkElement", "enableFormElement", "enableFormElements", "disableElement", "disableLinkElement", "disableFormElement", "disableFormElements", "replacement", "originalText", "handleMethodWithRails", "link", "method", "csrfToken$1", "csrfParam$1", "formContent", "isRemote", "handleRemoteWithRails", "withCredentials", "dataType", "button", "args", "formSubmitButtonClick", "preventInsignificantClick", "insignificantMetaClick", "Rails", "handleConfirm", "handleMethod", "handleRemote", "start", "originalOptions", "adapters", "logger", "messages", "now", "secondsSince", "time", "ConnectionMonitor", "connection", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "INTERNAL", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "consumer", "data", "socketProtocols", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "object", "properties", "key", "value", "Subscription", "params", "mixin", "action", "SubscriptionGuarantor", "subscriptions", "subscription", "s", "Subscriptions", "channelName", "channel", "callbackName", "args", "command", "Consumer", "url", "createWebSocketURL", "subprotocol", "a", "createConsumer", "getConfig", "name", "element", "logger", "createConsumer", "turbo_es2017_esm_exports", "__export", "FetchEnctype", "FetchMethod", "FetchRequest", "FetchResponse", "FrameElement", "FrameLoadingStyle", "FrameRenderer", "PageRenderer", "PageSnapshot", "StreamActions", "StreamElement", "StreamSourceElement", "cache", "config", "connectStreamSource", "disconnectStreamSource", "fetchWithTurboHeaders", "fetchEnctypeFromString", "fetchMethodFromString", "isSafe", "morphBodyElements", "morphChildren", "morphElements", "morphTurboFrameElements", "sessionNavigator", "registerAdapter", "renderStreamMessage", "session", "setConfirmMethod", "setFormMode", "setProgressBarDelay", "start", "visit", "FrameLoadingStyle", "_FrameElement", "__publicField", "name", "value", "frameLoadingStyleFromString", "FrameElement", "style", "drive", "activateScriptElement", "element", "createdScriptElement", "cspNonce", "getCspNonce", "copyElementAttributes", "destinationElement", "sourceElement", "createDocumentFragment", "html", "template", "dispatch", "eventName", "target", "cancelable", "detail", "event", "cancelEvent", "nextRepaint", "nextEventLoopTick", "nextAnimationFrame", "resolve", "parseHTMLDocument", "unindent", "strings", "values", "lines", "interpolate", "match", "indent", "line", "result", "string", "i", "uuid", "_", "getAttribute", "attributeName", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "timeoutInMilliseconds", "onComplete", "getHistoryMethodForAction", "action", "isAction", "getVisitAction", "getMetaElement", "getMetaContent", "nonce", "content", "setMetaContent", "findClosestRecursively", "selector", "elementIsFocusable", "queryAutofocusableElement", "elementOrDocumentFragment", "around", "callback", "reader", "before", "after", "doesNotTargetIFrame", "findLinkFromClickTarget", "link", "linkTarget", "debounce", "fn", "delay", "timeoutId", "args", "submitter", "_submitter", "Config", "config", "__privateAdd", "__privateGet", "__privateSet", "forms", "expandURL", "locatable", "getAnchor", "url", "anchorMatch", "getAction$1", "form", "getExtension", "getLastPathComponent", "isPrefixedBy", "baseURL", "prefix", "addTrailingSlash", "locationIsVisitable", "location", "rootLocation", "getLocationForLink", "getRequestURL", "anchor", "toCacheKey", "urlsAreEqual", "left", "right", "getPathComponents", "FetchResponse", "response", "LimitedSet", "maxSize", "oldestValue", "recentRequests", "fetchWithTurboHeaders", "options", "modifiedHeaders", "requestUID", "fetchMethodFromString", "method", "FetchMethod", "fetchEnctypeFromString", "encoding", "FetchEnctype", "_resolveRequestPromise", "_FetchRequest_instances", "allowRequestToBeIntercepted_fn", "willDelegateErrorHandling_fn", "FetchRequest", "delegate", "requestBody", "enctype", "_value", "body", "buildResourceAndBody", "fetchBody", "fetchMethod", "fetchOptions", "__privateMethod", "error", "fetchResponse", "isSafe", "mimeType", "requestInterception", "resource", "searchParams", "entriesExcludingFiles", "mergeIntoURLSearchParams", "entries", "AppearanceObserver", "StreamMessage", "message", "fragment", "importStreamElements", "streamElement", "inertScriptElement", "identity", "key", "_toCacheKey", "LRUCache", "size", "entry", "index", "PREFETCH_DELAY", "_prefetchTimeout", "_maxAges", "PrefetchCache", "prefetchDelay", "request", "ttl", "cacheTtl", "maxAge", "prefetchCache", "FormSubmissionState", "FormSubmission", "_FormSubmission", "formElement", "mustRedirect", "getMethod", "getAction", "getFormAction", "buildFormData", "getEnctype", "initialized", "requesting", "confirmationMessage", "stopping", "stopped", "token", "getCookieValue", "_request", "responseSucceededWithoutRedirect", "input", "formData", "cookieName", "cookie", "formElementAction", "formAction", "Snapshot", "queryPermanentElementsAll", "id", "getPermanentElementById", "snapshot", "permanentElementMap", "currentPermanentElement", "newPermanentElement", "node", "FormSubmitObserver", "eventTarget", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "_resolveRenderPromise", "_resolveInterceptionPromise", "View", "x", "y", "renderer", "isPreview", "shouldRender", "willRender", "shouldInvalidate", "renderInterception", "reason", "direction", "FrameView", "LinkInterceptor", "_event", "LinkClickObserver", "FormLinkClickObserver", "originalEvent", "type", "turboFrame", "turboAction", "turboConfirm", "Bardo", "bardo", "permanentElement", "placeholder", "createPlaceholderForPermanentElement", "clone", "_activeElement", "Renderer", "currentSnapshot", "newSnapshot", "reject", "currentElement", "newElement", "FrameRenderer", "destinationRange", "frameElement", "sourceRange", "renderElement", "block", "readScrollLogicalPosition", "behavior", "readScrollBehavior", "activatedScriptElement", "defaultValue", "Idiomorph", "noOp", "defaults", "elt", "morph", "oldNode", "newContent", "normalizeElement", "newNode", "normalizeParent", "ctx", "createMorphContext", "morphedNodes", "saveAndRestoreFocus", "withHeadBlocking", "morphChildren", "morphOuterHTML", "oldParent", "activeElement", "activeElementId", "selectionStart", "selectionEnd", "results", "newParent", "insertionPoint", "endPoint", "newChild", "bestMatch", "findBestMatch", "removeNodesBetween", "morphNode", "newChildId", "movedChild", "moveBeforeById", "insertedNode", "createNode", "tempNode", "removeNode", "newEmptyChild", "newClonedChild", "startPoint", "softMatch", "nextSibling", "siblingSoftMatchCount", "cursor", "isSoftMatch", "isIdSetMatch", "oldSet", "newSet", "oldElt", "newElt", "moveBefore", "startInclusive", "endExclusive", "parentNode", "removeElementFromAncestorsIdMaps", "idSet", "handleHeadElement", "morphAttributes", "ignoreValueOfActiveElement", "oldAttributes", "newAttributes", "newAttribute", "ignoreAttribute", "oldAttribute", "syncInputValue", "oldElement", "newValue", "oldValue", "syncBooleanAttribute", "newLiveValue", "oldLiveValue", "ignoreUpdate", "attr", "updateType", "possibleActiveElement", "oldHead", "newHead", "promises", "newCtx", "added", "removed", "preserved", "nodesToAppend", "srcToNewHeadNodes", "newHeadChild", "currentHeadElt", "inNewContent", "isReAppended", "isPreserved", "promise", "_resolve", "removedElement", "persistentIds", "idMap", "createIdMaps", "mergedConfig", "mergeDefaults", "morphStyle", "createPantry", "createActiveElementAndParents", "finalConfig", "pantry", "activeElementAndParents", "findIdElements", "root", "populateIdMapWithTree", "current", "oldContent", "oldIdElements", "newIdElements", "createPersistentIds", "newRoot", "duplicateIds", "oldIdTagNameMap", "tagName", "generatedByIdiomorph", "parseContent", "SlicedParentNode", "dummyParent", "nodes", "nodeList", "referenceNode", "parser", "contentWithSvgsRemoved", "htmlElement", "morphElements", "callbacks", "DefaultIdiomorphCallbacks", "shouldRefreshFrameWithMorphing", "currentFrame", "newFrame", "areFramesCompatibleForRefreshing", "closestFrameReloadableWithMorphing", "_beforeNodeMorphed", "beforeNodeMorphed", "mutationType", "MorphingFrameRenderer", "_ProgressBar", "ProgressBar", "HeadSnapshot", "elementIsNoscript", "elementWithoutNonce", "outerHTML", "details", "elementType", "elementIsTracked", "matchedType", "tracked", "elementIsMetaElementWithName", "elementIsScript", "elementIsStylesheet", "PageSnapshot", "_PageSnapshot", "documentElement", "head", "headSnapshot", "clonedElement", "selectElements", "clonedSelectElements", "source", "option", "clonedPasswordInput", "clonedNoscriptElement", "_viewTransitionStarted", "_lastOperation", "ViewTransitioner", "useViewTransition", "render", "defaultOptions", "TimingMetric", "VisitState", "SystemStatusCode", "Direction", "Visit", "restorationIdentifier", "historyChanged", "referrer", "snapshotHTML", "visitCachedSnapshot", "updateHistory", "shouldCacheSnapshot", "acceptsStreamResponse", "refresh", "actionForHistory", "statusCode", "isSuccessful", "responseHTML", "_response", "redirected", "_error", "scrollPosition", "metric", "BrowserAdapter", "session", "visit", "_visit", "_formSubmission", "CacheObserver", "_FrameRedirector_instances", "shouldSubmit_fn", "shouldRedirect_fn", "findFrameElement_fn", "FrameRedirector", "_location", "frame", "meta", "History", "turbo", "restorationIndex", "state", "additionalData", "restorationData", "_prefetchedLink", "_enable", "_tryToPrefetchRequest", "_cancelRequestIfObsolete", "_cancelPrefetchRequest", "_tryToUsePrefetchedRequest", "_LinkPrefetchObserver_instances", "cacheTtl_get", "isPrefetchable_fn", "LinkPrefetchObserver", "fetchRequest", "cached", "turboFrameTarget", "unfetchableLink", "linkToTheSamePage", "linkOptsOut", "nonSafeLink", "eventPrevented", "turboPrefetchParent", "turboMethod", "isUJS", "_Navigator_instances", "getActionForFormSubmission_fn", "getDefaultAction_fn", "Navigator", "formSubmission", "visitOptions", "PageStage", "PageObserver", "readyState", "ScrollObserver", "position", "StreamMessageRenderer", "getPermanentElementMapForFragment", "withAutofocusFromFragment", "withPreservedFocus", "permanentElementsInDocument", "permanentElementInDocument", "elementInStream", "generatedID", "turboStreams", "elementWithAutofocus", "firstAutofocusableElementInStreams", "willAutofocusId", "elementToAutofocus", "activeElementBeforeRender", "activeElementAfterRender", "restoreFocusTo", "elementToFocus", "nodeListOfStreamElements", "_started", "StreamObserver", "fetchResponseFromEvent", "fetchResponseIsStream", "ErrorRenderer", "replaceableElement", "_PageRenderer_instances", "setLanguage_fn", "PageRenderer", "mergedHeadElements", "newStylesheetElements", "loadingElements", "newHeadElements", "elementList", "noscriptElement", "dir", "lang", "MorphingPageRenderer", "SnapshotCache", "PageView", "rendererClass", "cachedSnapshot", "_preloadAll", "Preloader", "snapshotCache", "_Cache_instances", "setCacheControl_fn", "Cache", "_pageRefreshDebouncePeriod", "Session", "adapter", "requestId", "scroll", "isRecentRequest", "isCurrentUrl", "isUnsafe", "isStream", "frameTarget", "extendURLWithDeprecatedProperties", "defaultPrevented", "_snapshot", "_isPreview", "renderMethod", "ev", "newBody", "timing", "submitterIsNavigatable", "container", "withinFrame", "deprecatedLocationPropertyDescriptors", "cache", "sessionNavigator", "start", "registerAdapter", "connectStreamSource", "disconnectStreamSource", "renderStreamMessage", "setProgressBarDelay", "setConfirmMethod", "confirmMethod", "setFormMode", "mode", "morphBodyElements", "currentBody", "morphTurboFrameElements", "Turbo", "TurboFrameMissingError", "_currentFetchRequest", "_resolveVisitPromise", "_connected", "_hasBeenLoaded", "_ignoredAttributes", "_shouldMorphFrame", "_FrameController_instances", "loadSourceURL_fn", "loadFrameResponse_fn", "visit_fn", "navigateFrame_fn", "handleUnvisitableFrameResponse_fn", "willHandleFrameMissingFromResponse_fn", "handleFrameMissingFromResponse_fn", "throwFrameMissingError_fn", "visitResponse_fn", "formActionIsVisitable_fn", "shouldInterceptNavigation_fn", "isIgnoringChangesTo_fn", "ignoringChangesToAttribute_fn", "withCurrentNavigationElement_fn", "getFrameElementById_fn", "FrameController", "_fetchResponse", "src", "document", "_renderMethod", "_newElement", "pageSnapshot", "activateElement", "sourceURL", "newFrameElement", "wrapped", "currentURL", "StreamActions", "e", "targetElement", "_StreamElement_instances", "raise_fn", "_StreamElement", "c", "existingChildren", "newChildrenIds", "actionFunction", "StreamElement", "StreamSourceElement", "scriptElement", "consumer", "getConsumer", "setConsumer", "createConsumer", "newConsumer", "subscribeTo", "channel", "mixin", "subscriptions", "walk", "obj", "acc", "key", "camel", "m", "x", "TurboCableStreamSourceElement", "connectStreamSource", "subscribeTo", "disconnectStreamSource", "data", "event", "channel", "signed_stream_name", "walk", "__publicField", "encodeMethodIntoRequestBody", "event", "form", "fetchOptions", "submitter", "body", "isBodyInit", "method", "determineFetchMethod", "formMethod", "determineFormMethod", "overrideMethod", "turbo_es2017_esm_exports", "encodeMethodIntoRequestBody", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "isSomething", "object", "hasProperty", "property", "allModifiers", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filters", "standardFilter", "params", "pattern", "name", "match", "typecast", "meta", "ctrl", "alt", "shift", "modifier", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "actionEvent", "method", "actionDescriptorFilters", "controller", "passes", "filter", "target", "currentTarget", "identifier", "ElementObserver", "delegate", "mutations", "callback", "mutation", "attributeName", "nodes", "node", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "selectors", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "hasOutlet", "hasOutletController", "_element", "selectorObserver", "attributeObserver", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "_Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "getControllerAndEnsureConnectedScope", "outletController", "camelizedName", "outletElement", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "application", "Application", "import_dot", "import_debounce", "assignment_controller_default", "Controller", "event", "value", "filterTypeSelectedValue", "data_object", "selectedValue", "filterInputValue", "_event", "tableRow", "objectId", "objectType", "dataLength", "numberOfPages", "isInAddedDeltaData", "isInRemoveDeltaData", "oldDataObject", "paginationId", "pagination", "atPage", "currentPage", "selectedElement", "selectedObject", "typeAheadSearchInput", "searchResult", "addedObjects", "resolve", "flashFirstRow", "tableRowTemplate", "doT", "startItem", "endItem", "object", "emptyTableRow", "elementsListTableBody", "rangeStart", "rangeEnd", "html", "i", "data", "objectIdToRemove", "objectTypeToRemove", "objectIdToSearch", "objectTypeToSearch", "array", "newArray", "message", "__publicField", "AsyncPickMarkup", "options", "container", "pos", "offset", "getOffsetFromBoundingBox", "top", "right", "selectOffsetTop", "selectOffsetBot", "wrapper", "button", "buttonClass", "buttonDisabledClass", "buttonIcon", "buttonIconClass", "popup", "self", "searchInputClass", "divider", "selected", "buildUl", "selectedValues", "value", "li", "buildLi", "newEntries", "lowerPage", "scrollTopOffset", "pageUl", "scrollableOffset", "upperPage", "ul", "element", "text", "option", "optionData", "page", "blankOptions", "setLiSelected", "prev", "first", "next", "entry", "entryOffsetTop", "shouldScrollDown", "shouldScrollUp", "match", "count", "joinSelectedTexts", "additionalClasses", "listClass", "disabled", "subtext", "imgAttributes", "textSpan", "subtextDom", "imageTag", "attr", "addCheck", "checkedIconClasses", "check", "checkedIconClass", "box", "docElem", "de_default", "en_default", "es_default", "fr_default", "AsyncPick", "e", "onDomRemove", "blank", "inputValue", "clickedButton", "percentage", "getScrollPercent", "url", "request", "xhr", "responseSuccess", "parsedJson", "getObjectKey", "json", "scrollTop", "callback", "newValue", "event", "newLi", "removedLi", "msg", "someObject", "params", "objectToUrlParam", "query", "object", "key", "method", "handler", "context", "onDetachCallback", "observer", "isDetached", "el", "async_pick_controller_default", "Controller", "options", "key", "elementId", "i", "__publicField", "lib_exports", "__export", "afterMain", "afterRead", "afterWrite", "applyStyles_default", "arrow_default", "auto", "basePlacements", "beforeMain", "beforeRead", "beforeWrite", "bottom", "clippingParents", "computeStyles_default", "createPopper", "detectOverflow", "end", "eventListeners_default", "flip_default", "hide_default", "left", "main", "modifierPhases", "offset_default", "placements", "popper", "popperGenerator", "popperOffsets_default", "preventOverflow_default", "read", "reference", "right", "start", "top", "variationPlacements", "viewport", "write", "top", "bottom", "right", "left", "auto", "basePlacements", "start", "end", "clippingParents", "viewport", "popper", "reference", "variationPlacements", "acc", "placement", "placements", "beforeRead", "read", "afterRead", "beforeMain", "main", "afterMain", "beforeWrite", "write", "afterWrite", "modifierPhases", "getNodeName", "element", "getWindow", "node", "ownerDocument", "isElement", "node", "OwnElement", "getWindow", "isHTMLElement", "isShadowRoot", "applyStyles", "_ref", "state", "name", "style", "attributes", "element", "isHTMLElement", "getNodeName", "value", "effect", "_ref2", "initialStyles", "styleProperties", "property", "attribute", "applyStyles_default", "getBasePlacement", "placement", "max", "min", "round", "getUAString", "uaData", "item", "isLayoutViewport", "getUAString", "getBoundingClientRect", "element", "includeScale", "isFixedStrategy", "clientRect", "scaleX", "scaleY", "isHTMLElement", "round", "_ref", "isElement", "getWindow", "visualViewport", "addVisualOffsets", "isLayoutViewport", "x", "y", "width", "height", "getLayoutRect", "element", "clientRect", "getBoundingClientRect", "width", "height", "contains", "parent", "child", "rootNode", "isShadowRoot", "next", "getComputedStyle", "element", "getWindow", "isTableElement", "element", "getNodeName", "getDocumentElement", "element", "isElement", "getParentNode", "element", "getNodeName", "isShadowRoot", "getDocumentElement", "getTrueOffsetParent", "element", "isHTMLElement", "getComputedStyle", "getContainingBlock", "isFirefox", "getUAString", "isIE", "elementCss", "currentNode", "getParentNode", "isShadowRoot", "getNodeName", "css", "getOffsetParent", "window", "getWindow", "offsetParent", "isTableElement", "getMainAxisFromPlacement", "placement", "within", "min", "value", "max", "withinMaxClamp", "v", "getFreshSideObject", "mergePaddingObject", "paddingObject", "getFreshSideObject", "expandToHashMap", "value", "keys", "hashMap", "key", "toPaddingObject", "padding", "state", "mergePaddingObject", "expandToHashMap", "basePlacements", "arrow", "_ref", "_state$modifiersData$", "name", "options", "arrowElement", "popperOffsets", "basePlacement", "getBasePlacement", "axis", "getMainAxisFromPlacement", "isVertical", "left", "right", "len", "paddingObject", "arrowRect", "getLayoutRect", "minProp", "top", "maxProp", "bottom", "endDiff", "startDiff", "arrowOffsetParent", "getOffsetParent", "clientSize", "centerToReference", "min", "max", "center", "offset", "within", "axisProp", "effect", "_ref2", "_options$element", "contains", "arrow_default", "getVariation", "placement", "unsetSides", "roundOffsetsByDPR", "_ref", "win", "x", "y", "dpr", "round", "mapToStyles", "_ref2", "_Object$assign2", "popper", "popperRect", "placement", "variation", "offsets", "position", "gpuAcceleration", "adaptive", "roundOffsets", "isFixed", "_offsets$x", "_offsets$y", "_ref3", "hasX", "hasY", "sideX", "left", "sideY", "top", "offsetParent", "getOffsetParent", "heightProp", "widthProp", "getWindow", "getDocumentElement", "getComputedStyle", "right", "end", "bottom", "offsetY", "offsetX", "commonStyles", "_ref4", "_Object$assign", "computeStyles", "_ref5", "state", "options", "_options$gpuAccelerat", "_options$adaptive", "_options$roundOffsets", "getBasePlacement", "getVariation", "computeStyles_default", "passive", "effect", "_ref", "state", "instance", "options", "_options$scroll", "scroll", "_options$resize", "resize", "window", "getWindow", "scrollParents", "scrollParent", "eventListeners_default", "hash", "getOppositePlacement", "placement", "matched", "hash", "getOppositeVariationPlacement", "placement", "matched", "getWindowScroll", "node", "win", "getWindow", "scrollLeft", "scrollTop", "getWindowScrollBarX", "element", "getBoundingClientRect", "getDocumentElement", "getWindowScroll", "getViewportRect", "element", "strategy", "win", "getWindow", "html", "getDocumentElement", "visualViewport", "width", "height", "x", "y", "layoutViewport", "isLayoutViewport", "getWindowScrollBarX", "getDocumentRect", "element", "_element$ownerDocumen", "html", "getDocumentElement", "winScroll", "getWindowScroll", "body", "width", "max", "height", "x", "getWindowScrollBarX", "y", "getComputedStyle", "isScrollParent", "element", "_getComputedStyle", "getComputedStyle", "overflow", "overflowX", "overflowY", "getScrollParent", "node", "getNodeName", "isHTMLElement", "isScrollParent", "getParentNode", "listScrollParents", "element", "list", "_element$ownerDocumen", "scrollParent", "getScrollParent", "isBody", "win", "getWindow", "target", "isScrollParent", "updatedList", "getParentNode", "rectToClientRect", "rect", "getInnerBoundingClientRect", "element", "strategy", "rect", "getBoundingClientRect", "getClientRectFromMixedType", "clippingParent", "viewport", "rectToClientRect", "getViewportRect", "isElement", "getDocumentRect", "getDocumentElement", "getClippingParents", "clippingParents", "listScrollParents", "getParentNode", "canEscapeClipping", "getComputedStyle", "clipperElement", "isHTMLElement", "getOffsetParent", "contains", "getNodeName", "getClippingRect", "boundary", "rootBoundary", "mainClippingParents", "firstClippingParent", "clippingRect", "accRect", "max", "min", "computeOffsets", "_ref", "reference", "element", "placement", "basePlacement", "getBasePlacement", "variation", "getVariation", "commonX", "commonY", "offsets", "top", "bottom", "right", "left", "mainAxis", "getMainAxisFromPlacement", "len", "start", "end", "detectOverflow", "state", "options", "_options", "_options$placement", "placement", "_options$strategy", "strategy", "_options$boundary", "boundary", "clippingParents", "_options$rootBoundary", "rootBoundary", "viewport", "_options$elementConte", "elementContext", "popper", "_options$altBoundary", "altBoundary", "_options$padding", "padding", "paddingObject", "mergePaddingObject", "expandToHashMap", "basePlacements", "altContext", "reference", "popperRect", "element", "clippingClientRect", "getClippingRect", "isElement", "getDocumentElement", "referenceClientRect", "getBoundingClientRect", "popperOffsets", "computeOffsets", "popperClientRect", "rectToClientRect", "elementClientRect", "overflowOffsets", "offsetData", "offset", "key", "multiply", "right", "bottom", "axis", "top", "computeAutoPlacement", "state", "options", "_options", "placement", "boundary", "rootBoundary", "padding", "flipVariations", "_options$allowedAutoP", "allowedAutoPlacements", "placements", "variation", "getVariation", "variationPlacements", "basePlacements", "allowedPlacements", "overflows", "acc", "detectOverflow", "getBasePlacement", "a", "b", "getExpandedFallbackPlacements", "placement", "getBasePlacement", "auto", "oppositePlacement", "getOppositePlacement", "getOppositeVariationPlacement", "flip", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "specifiedFallbackPlacements", "padding", "boundary", "rootBoundary", "altBoundary", "_options$flipVariatio", "flipVariations", "allowedAutoPlacements", "preferredPlacement", "basePlacement", "isBasePlacement", "fallbackPlacements", "placements", "acc", "computeAutoPlacement", "referenceRect", "popperRect", "checksMap", "makeFallbackChecks", "firstFittingPlacement", "i", "_basePlacement", "isStartVariation", "getVariation", "start", "isVertical", "top", "bottom", "len", "overflow", "detectOverflow", "mainVariationSide", "right", "left", "altVariationSide", "checks", "check", "numberOfChecks", "_loop", "_i", "fittingPlacement", "_ret", "flip_default", "getSideOffsets", "overflow", "rect", "preventedOffsets", "isAnySideFullyClipped", "top", "right", "bottom", "left", "side", "hide", "_ref", "state", "name", "referenceRect", "popperRect", "referenceOverflow", "detectOverflow", "popperAltOverflow", "referenceClippingOffsets", "popperEscapeOffsets", "isReferenceHidden", "hasPopperEscaped", "hide_default", "distanceAndSkiddingToXY", "placement", "rects", "offset", "basePlacement", "getBasePlacement", "invertDistance", "left", "top", "_ref", "skidding", "distance", "right", "_ref2", "state", "options", "name", "_options$offset", "data", "placements", "acc", "_data$state$placement", "x", "y", "offset_default", "popperOffsets", "_ref", "state", "name", "computeOffsets", "popperOffsets_default", "getAltAxis", "axis", "preventOverflow", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "boundary", "rootBoundary", "altBoundary", "padding", "_options$tether", "tether", "_options$tetherOffset", "tetherOffset", "overflow", "detectOverflow", "basePlacement", "getBasePlacement", "variation", "getVariation", "isBasePlacement", "mainAxis", "getMainAxisFromPlacement", "altAxis", "getAltAxis", "popperOffsets", "referenceRect", "popperRect", "tetherOffsetValue", "normalizedTetherOffsetValue", "offsetModifierState", "data", "_offsetModifierState$", "mainSide", "top", "left", "altSide", "bottom", "right", "len", "offset", "min", "max", "additive", "minLen", "start", "maxLen", "arrowElement", "arrowRect", "getLayoutRect", "arrowPaddingObject", "getFreshSideObject", "arrowPaddingMin", "arrowPaddingMax", "arrowLen", "within", "minOffset", "maxOffset", "arrowOffsetParent", "getOffsetParent", "clientOffset", "offsetModifierValue", "tetherMin", "tetherMax", "preventedOffset", "_offsetModifierState$2", "_mainSide", "_altSide", "_offset", "_len", "_min", "_max", "isOriginSide", "_offsetModifierValue", "_tetherMin", "_tetherMax", "_preventedOffset", "withinMaxClamp", "preventOverflow_default", "getHTMLElementScroll", "element", "getNodeScroll", "node", "getWindow", "isHTMLElement", "getWindowScroll", "getHTMLElementScroll", "isElementScaled", "element", "rect", "scaleX", "round", "scaleY", "getCompositeRect", "elementOrVirtualElement", "offsetParent", "isFixed", "isOffsetParentAnElement", "isHTMLElement", "offsetParentIsScaled", "documentElement", "getDocumentElement", "getBoundingClientRect", "scroll", "offsets", "getNodeName", "isScrollParent", "getNodeScroll", "getWindowScrollBarX", "order", "modifiers", "map", "visited", "result", "modifier", "sort", "requires", "dep", "depModifier", "orderModifiers", "orderedModifiers", "modifierPhases", "acc", "phase", "debounce", "fn", "pending", "resolve", "mergeByName", "modifiers", "merged", "current", "existing", "key", "DEFAULT_OPTIONS", "areValidElements", "_len", "args", "_key", "element", "popperGenerator", "generatorOptions", "_generatorOptions", "_generatorOptions$def", "defaultModifiers", "_generatorOptions$def2", "defaultOptions", "reference", "popper", "options", "state", "effectCleanupFns", "isDestroyed", "instance", "setOptionsAction", "cleanupModifierEffects", "isElement", "listScrollParents", "orderedModifiers", "orderModifiers", "mergeByName", "m", "runModifierEffects", "_state$elements", "getCompositeRect", "getOffsetParent", "getLayoutRect", "modifier", "index", "_state$orderedModifie", "fn", "_state$orderedModifie2", "_options", "name", "debounce", "resolve", "_ref", "_ref$options", "effect", "cleanupFn", "noopFn", "createPopper", "defaultModifiers", "eventListeners_default", "popperOffsets_default", "computeStyles_default", "applyStyles_default", "createPopper", "popperGenerator", "defaultModifiers", "eventListeners_default", "popperOffsets_default", "computeStyles_default", "applyStyles_default", "offset_default", "flip_default", "preventOverflow_default", "arrow_default", "hide_default", "createPopper", "popperGenerator", "elementMap", "Map", "Data", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "MAX_UID", "MILLISECONDS_MULTIPLIER", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "document", "getElementById", "getTransitionDurationFromElement", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "uid", "getElementEvents", "bootstrapHandler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "domElements", "querySelectorAll", "domElement", "findHandler", "events", "callable", "delegationSelector", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "addHandler", "relatedTarget", "handlers", "previousFunction", "removeHandler", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "elementEvent", "slice", "keyHandlers", "trigger", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "obj", "meta", "value", "defineProperty", "configurable", "normalizeData", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "chr", "Manipulator", "setDataAttribute", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "dataset", "filter", "pureKey", "charAt", "getDataAttribute", "Config", "Default", "DefaultType", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "jsonConfig", "constructor", "configTypes", "property", "expectedTypes", "valueType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "_element", "_config", "DATA_KEY", "dispose", "EVENT_KEY", "propertyName", "getOwnPropertyNames", "_queueCallback", "isAnimated", "getInstance", "getOrCreateInstance", "eventName", "getSelector", "hrefAttribute", "trim", "map", "sel", "join", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "el", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "tagName", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "close", "_destroyElement", "each", "data", "undefined", "DATA_API_KEY", "CLASS_NAME_ACTIVE", "SELECTOR_DATA_TOGGLE", "EVENT_CLICK_DATA_API", "Button", "toggle", "button", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "POINTER_TYPE_TOUCH", "POINTER_TYPE_PEN", "CLASS_NAME_POINTER_EVENT", "SWIPE_THRESHOLD", "endCallback", "leftCallback", "rightCallback", "Swipe", "isSupported", "_deltaX", "_supportPointerEvents", "PointerEvent", "_initEvents", "_start", "touches", "clientX", "_eventIsPointerPenTouch", "_end", "_handleSwipe", "_move", "absDeltaX", "abs", "direction", "add", "pointerType", "navigator", "maxTouchPoints", "ARROW_LEFT_KEY", "ARROW_RIGHT_KEY", "TOUCHEVENT_COMPAT_WAIT", "ORDER_NEXT", "ORDER_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_DRAG_START", "EVENT_LOAD_DATA_API", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_END", "CLASS_NAME_START", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "SELECTOR_ACTIVE", "SELECTOR_ITEM", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "KEY_TO_DIRECTION", "interval", "keyboard", "pause", "ride", "touch", "wrap", "Carousel", "_interval", "_activeElement", "_isSliding", "touchTimeout", "_swipeHelper", "_indicatorsElement", "_addEventListeners", "cycle", "_slide", "nextWhenVisible", "hidden", "_clearInterval", "_updateInterval", "setInterval", "_maybeEnableCycle", "to", "items", "_getItems", "activeIndex", "_getItemIndex", "_getActive", "order", "defaultInterval", "_keydown", "_addTouchEventListeners", "img", "swipeConfig", "_directionToOrder", "endCallBack", "clearTimeout", "_setActiveIndicatorElement", "activeIndicator", "newActiveIndicator", "elementInterval", "parseInt", "isNext", "nextElement", "nextElementIndex", "triggerEvent", "_orderToDirection", "isCycling", "directionalClassName", "orderClassName", "completeCallBack", "_isAnimated", "clearInterval", "carousel", "slideIndex", "carousels", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "parent", "Collapse", "_isTransitioning", "_triggerArray", "toggleList", "elem", "filterElement", "foundElement", "_initializeChildren", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "activeInstance", "dimension", "_getDimension", "style", "complete", "scrollSize", "getBoundingClientRect", "selected", "triggerArray", "isOpen", "ESCAPE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "RIGHT_MOUSE_BUTTON", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPEND", "CLASS_NAME_DROPSTART", "CLASS_NAME_DROPUP_CENTER", "CLASS_NAME_DROPDOWN_CENTER", "SELECTOR_DATA_TOGGLE_SHOWN", "SELECTOR_MENU", "SELECTOR_NAVBAR", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "PLACEMENT_TOPCENTER", "PLACEMENT_BOTTOMCENTER", "autoClose", "boundary", "display", "offset", "popperConfig", "reference", "Dropdown", "_popper", "_parent", "_menu", "_inNavbar", "_detectNavbar", "showEvent", "_createPopper", "focus", "_completeHide", "destroy", "update", "hideEvent", "Popper", "referenceElement", "_getPopperConfig", "createPopper", "_getPlacement", "parentDropdown", "isEnd", "_getOffset", "popperData", "defaultBsPopperConfig", "placement", "modifiers", "options", "enabled", "_selectMenuItem", "clearMenus", "openToggles", "context", "composedPath", "isMenuTarget", "dataApiKeydownHandler", "isInput", "isEscapeEvent", "isUpOrDownEvent", "getToggleButton", "stopPropagation", "EVENT_MOUSEDOWN", "className", "clickCallback", "rootElement", "Backdrop", "_isAppended", "_append", "_getElement", "_emulateAnimation", "backdrop", "createElement", "append", "EVENT_FOCUSIN", "EVENT_KEYDOWN_TAB", "TAB_NAV_FORWARD", "TAB_NAV_BACKWARD", "autofocus", "trapElement", "FocusTrap", "_isActive", "_lastTabNavDirection", "activate", "_handleFocusin", "_handleKeydown", "deactivate", "elements", "shiftKey", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "PROPERTY_PADDING", "PROPERTY_MARGIN", "ScrollBarHelper", "getWidth", "documentWidth", "clientWidth", "innerWidth", "width", "_disableOverFlow", "_setElementAttributes", "calculatedValue", "reset", "_resetElementAttributes", "isOverflowing", "_saveInitialAttribute", "overflow", "styleProperty", "scrollbarWidth", "manipulationCallBack", "setProperty", "_applyManipulationCallback", "actualValue", "removeProperty", "callBack", "EVENT_HIDE_PREVENTED", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "EVENT_KEYDOWN_DISMISS", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "OPEN_SELECTOR", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "Modal", "_dialog", "_backdrop", "_initializeBackDrop", "_focustrap", "_initializeFocusTrap", "_scrollBar", "_adjustDialog", "_showElement", "_hideModal", "handleUpdate", "scrollTop", "modalBody", "transitionComplete", "_triggerBackdropTransition", "event2", "_resetAdjustments", "isModalOverflowing", "scrollHeight", "clientHeight", "initialOverflowY", "overflowY", "isBodyOverflowing", "paddingLeft", "paddingRight", "alreadyOpen", "CLASS_NAME_SHOWING", "CLASS_NAME_HIDING", "CLASS_NAME_BACKDROP", "scroll", "Offcanvas", "blur", "completeCallback", "position", "ARIA_ATTRIBUTE_PATTERN", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "dd", "div", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "nodeValue", "attributeRegex", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "createdDocument", "DOMParser", "parseFromString", "elementName", "attributeList", "allowedAttributes", "innerHTML", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultContentType", "entry", "TemplateFactory", "getContent", "_resolvePossibleFunction", "hasContent", "changeContent", "_checkContent", "toHtml", "templateWrapper", "_maybeSanitize", "text", "_setContent", "arg", "templateElement", "_putElementInTemplate", "textContent", "DISALLOWED_ATTRIBUTES", "CLASS_NAME_MODAL", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSOUT", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "container", "customClass", "delay", "fallbackPlacements", "title", "Tooltip", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_templateFactory", "_newContent", "tip", "_setListeners", "_fixTitle", "enable", "disable", "toggleEnabled", "_leave", "_enter", "_hideModalHandler", "_disposePopper", "_isWithContent", "isInTheDom", "ownerDocument", "_getTipElement", "_isWithActiveTrigger", "_getTitle", "_createTipElement", "_getContentForTemplate", "_getTemplateFactory", "tipId", "setContent", "_initializeOnDelegatedTarget", "_getDelegateConfig", "attachment", "phase", "state", "triggers", "eventIn", "eventOut", "_setTimeout", "timeout", "dataAttributes", "dataAttribute", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "EVENT_ACTIVATE", "CLASS_NAME_DROPDOWN_ITEM", "SELECTOR_DATA_SPY", "SELECTOR_TARGET_LINKS", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_LINK_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_TOGGLE", "rootMargin", "smoothScroll", "threshold", "ScrollSpy", "_targetLinks", "_observableSections", "_rootElement", "_activeTarget", "_observer", "_previousScrollData", "visibleEntryTop", "parentScrollTop", "refresh", "_initializeTargetsAndObservables", "_maybeEnableSmoothScroll", "disconnect", "_getNewObserver", "section", "observe", "observableSection", "hash", "height", "offsetTop", "scrollTo", "top", "behavior", "IntersectionObserver", "_observerCallback", "targetElement", "_process", "userScrollsDown", "isIntersecting", "_clearActiveClass", "entryIsLowerThanPrevious", "targetLinks", "anchor", "decodeURI", "_activateParents", "listGroup", "item", "activeNodes", "node", "spy", "HOME_KEY", "END_KEY", "CLASS_DROPDOWN", "SELECTOR_DROPDOWN_MENU", "NOT_SELECTOR_DROPDOWN_TOGGLE", "SELECTOR_TAB_PANEL", "SELECTOR_OUTER", "SELECTOR_INNER", "SELECTOR_INNER_ELEM", "SELECTOR_DATA_TOGGLE_ACTIVE", "Tab", "_setInitialAttributes", "_getChildren", "innerElem", "_elemIsActive", "active", "_getActiveElem", "_deactivate", "_activate", "relatedElem", "_toggleDropDown", "nextActiveElement", "preventScroll", "_setAttributeIfNotExists", "_setInitialAttributesOnChild", "_getInnerElement", "isActive", "outerElem", "_getOuterElement", "_setInitialAttributesOnTargetPanel", "open", "EVENT_MOUSEOVER", "EVENT_MOUSEOUT", "CLASS_NAME_HIDE", "autohide", "Toast", "_hasMouseInteraction", "_hasKeyboardInteraction", "_clearTimeout", "_maybeScheduleHide", "isShown", "_onInteraction", "isInteracting", "auto_redirect_controller_default", "Controller", "Modal", "autoSaveFlags", "flag", "submitButtons", "button", "radioBsTargetId", "form", "bsTargetId", "el", "__publicField", "import_debounce", "autosave_controller_default", "Controller", "noop", "uid", "id", "isNullOrUndef", "value", "isArray", "type", "isObject", "isNumberFinite", "finiteOrDefault", "defaultValue", "valueOrDefault", "toPercentage", "dimension", "toDimension", "callback", "fn", "args", "thisArg", "each", "loopable", "reverse", "i", "len", "keys", "_elementsEqual", "a0", "a1", "ilen", "v0", "v1", "clone$1", "source", "target", "klen", "k", "isValidKey", "key", "_merger", "options", "tval", "sval", "merge", "sources", "merger", "mergeIf", "_mergerIf", "keyResolvers", "v", "o", "resolveObjectKey", "obj", "key", "_getKeyResolver", "keys", "_splitKey", "k", "parts", "tmp", "part", "_capitalize", "str", "defined", "value", "isFunction", "setsEqual", "a", "b", "item", "_isClickEvent", "e", "PI", "TAU", "PITAU", "INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "niceNum", "range", "roundedRange", "almostEquals", "niceRange", "fraction", "_factorize", "result", "sqrt", "i", "isNumber", "n", "x", "y", "epsilon", "almostWhole", "rounded", "_setMinAndMaxByKey", "array", "target", "property", "ilen", "toRadians", "degrees", "toDegrees", "radians", "_decimalPlaces", "isNumberFinite", "p", "getAngleFromPoint", "centrePoint", "anglePoint", "distanceFromXCenter", "distanceFromYCenter", "radialDistanceFromCenter", "angle", "distanceBetweenPoints", "pt1", "pt2", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "end", "sameAngleIsFullCircle", "s", "angleToStart", "angleToEnd", "startToAngle", "endToAngle", "_limitValue", "min", "max", "_int16Range", "_isBetween", "_lookup", "table", "cmp", "index", "hi", "lo", "mid", "_lookupByKey", "last", "_rlookupByKey", "_filterBetween", "values", "arrayEvents", "listenArrayEvents", "listener", "method", "base", "args", "res", "object", "unlistenArrayEvents", "stub", "listeners", "_arrayUnique", "items", "set", "requestAnimFrame", "callback", "throttled", "fn", "thisArg", "updateFn", "updateArgs", "args", "ticking", "rest", "debounce", "delay", "timeout", "_toLeftRightCenter", "align", "_alignStartEnd", "start", "end", "_textX", "left", "right", "rtl", "_getStartAndCountOfVisiblePoints", "meta", "points", "animationsDisabled", "pointCount", "count", "iScale", "_parsed", "axis", "min", "max", "minDefined", "maxDefined", "_limitValue", "_lookupByKey", "_scaleRangesChanged", "xScale", "yScale", "_scaleRanges", "newRanges", "changed", "atEdge", "t", "elasticIn", "s", "p", "TAU", "elasticOut", "effects", "HALF_PI", "PI", "round", "v", "lim", "l", "h", "p2b", "n2b", "b2n", "n2p", "map$1", "hex", "h1", "b", "h2", "eq", "isShort", "hexParse", "str", "len", "ret", "alpha", "a", "f", "hexString", "HUE_RE", "hsl2rgbn", "n", "k", "hsv2rgbn", "hwb2rgbn", "w", "rgb", "i", "hueValue", "r", "g", "d", "rgb2hsl", "calln", "c", "hsl2rgb", "hwb2rgb", "hsv2rgb", "hue", "hueParse", "m", "p1", "p2", "rotate", "deg", "hslString", "map", "names$1", "unpack", "unpacked", "keys", "tkeys", "j", "ok", "nk", "names", "nameParse", "RGB_RE", "rgbParse", "rgbString", "to", "from", "interpolate", "rgb1", "rgb2", "modHSL", "ratio", "tmp", "clone", "proto", "fromObject", "input", "functionParse", "Color", "_Color", "type", "obj", "color", "weight", "c1", "c2", "w2", "w1", "val", "index_esm", "isPatternOrGradient", "value", "getHoverColor", "overrides", "descriptors", "getScope$1", "node", "key", "set", "root", "scope", "values", "merge", "Defaults", "_descriptors", "context", "ctx", "options", "name", "targetScope", "targetName", "scopeObject", "targetScopeObject", "privateName", "local", "target", "isObject", "valueOrDefault", "defaults", "toFontString", "font", "isNullOrUndef", "_measureText", "data", "gc", "longest", "string", "textWidth", "_longestText", "arrayOfThings", "cache", "ilen", "jlen", "thing", "nestedThing", "isArray", "gcLen", "_alignPixel", "chart", "pixel", "width", "devicePixelRatio", "halfWidth", "clearCanvas", "canvas", "drawPoint", "x", "y", "drawPointLegend", "xOffset", "yOffset", "size", "cornerRadius", "style", "rotation", "radius", "rad", "RAD_PER_DEG", "TWO_THIRDS_PI", "QUARTER_PI", "_isPointInArea", "point", "area", "margin", "clipArea", "unclipArea", "_steppedLineTo", "previous", "flip", "mode", "midpoint", "_bezierCurveTo", "renderText", "text", "opts", "lines", "stroke", "line", "setRenderOpts", "decorateText", "metrics", "top", "bottom", "yDecoration", "addRoundedRectPath", "rect", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "matches", "numberOrZero", "_readValueToProps", "props", "objProps", "read", "prop", "toTRBL", "toTRBLCorners", "toPadding", "toFont", "fallback", "resolve", "inputs", "index", "info", "cacheable", "_addGrace", "minmax", "grace", "beginAtZero", "change", "toDimension", "keepZero", "add", "createContext", "parentContext", "_createResolver", "scopes", "prefixes", "rootScopes", "getTarget", "defined", "_resolve", "_cached", "_resolveWithPrefixes", "getKeysFromAllScopes", "storage", "_attachContext", "proxy", "subProxy", "descriptorDefaults", "receiver", "_resolveWithContext", "_scriptable", "_indexable", "_allKeys", "isFunction", "readKey", "prefix", "_capitalize", "needsSubResolver", "_proxy", "_context", "_subProxy", "_resolveScriptable", "_resolveArray", "_stack", "createSubResolver", "isIndexable", "arr", "item", "resolver", "resolveFallback", "getScope", "parent", "resolveObjectKey", "addScopes", "parentScopes", "parentFallback", "allScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "_parseObjectDataRadialScale", "parsed", "EPSILON", "getPoint", "getValueAxis", "indexAxis", "splineCurve", "firstPoint", "middlePoint", "afterPoint", "current", "next", "d01", "distanceBetweenPoints", "d12", "s01", "s12", "fa", "fb", "monotoneAdjust", "deltaK", "mK", "pointsLen", "alphaK", "betaK", "tauK", "squaredMagnitude", "pointCurrent", "pointAfter", "almostEquals", "monotoneCompute", "valueAxis", "delta", "pointBefore", "iPixel", "vPixel", "splineCurveMonotone", "slopeDelta", "sign", "capControlPoint", "pt", "capBezierPoints", "inArea", "inAreaPrev", "inAreaNext", "_updateBezierControlPoints", "loop", "controlPoints", "prev", "_isDomSupported", "_getParentNode", "domNode", "parseMaxStyle", "styleValue", "parentProperty", "valueInPixels", "getComputedStyle", "element", "getStyle", "el", "property", "positions", "getPositionedStyle", "styles", "suffix", "result", "pos", "useOffsetPos", "getCanvasPosition", "e", "touches", "source", "offsetX", "offsetY", "box", "getRelativePosition", "evt", "currentDevicePixelRatio", "borderBox", "paddings", "borders", "height", "getContainerSize", "maxWidth", "maxHeight", "container", "containerStyle", "containerBorder", "containerPadding", "INFINITY", "round1", "getMaximumSize", "bbWidth", "bbHeight", "aspectRatio", "margins", "containerSize", "retinaScale", "forceRatio", "forceStyle", "pixelRatio", "deviceHeight", "deviceWidth", "supportsEventListenerOptions", "passiveSupported", "readUsedSize", "_pointInLine", "_steppedInterpolation", "_bezierInterpolation", "cp1", "cp2", "intlCache", "getNumberFormat", "locale", "cacheKey", "formatter", "formatNumber", "num", "getRightToLeftAdapter", "rectX", "itemWidth", "getLeftToRightAdapter", "_itemWidth", "getRtlAdapter", "overrideTextDirection", "direction", "original", "restoreTextDirection", "propertyFn", "_angleBetween", "_angleDiff", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "segment", "bounds", "startBound", "endBound", "between", "normalize", "_boundSegment", "compare", "inside", "subStart", "prevValue", "startIsBefore", "endIsBefore", "shouldStart", "shouldStop", "_boundSegments", "segments", "sub", "findStartAndEnd", "spanGaps", "solidSegments", "last", "cur", "_computeSegments", "segmentOptions", "splitByStyles", "completeLoop", "doSplitByStyles", "chartContext", "baseStyle", "readStyle", "datasetIndex", "prevStyle", "addStyle", "st", "dir", "styleChanged", "Animator", "chart", "anims", "date", "type", "callbacks", "numSteps", "fn", "requestAnimFrame", "remaining", "items", "i", "draw", "item", "charts", "event", "cb", "acc", "cur", "animator", "transparent", "interpolators", "from", "to", "factor", "c0", "color", "c1", "Animation", "cfg", "target", "prop", "currentValue", "resolve", "effects", "elapsed", "remain", "duration", "loop", "promises", "res", "rej", "resolved", "method", "numbers", "colors", "defaults", "animationOptions", "name", "v", "Animations", "config", "isObject", "animatedProps", "key", "option", "isArray", "values", "newOptions", "options", "resolveTargetOptions", "animations", "awaitAll", "running", "props", "value", "animation", "properties", "keys", "anim", "scaleClip", "scale", "allowedOverflow", "opts", "reverse", "min", "max", "defaultClip", "xScale", "yScale", "x", "y", "toClip", "r", "b", "getSortedDatasetIndices", "filterVisible", "metasets", "ilen", "applyStack", "stack", "dsIndex", "singleMode", "datasetIndex", "otherValue", "isNumberFinite", "sign", "convertObjectDataToArray", "data", "adata", "isStacked", "meta", "stacked", "getStackKey", "indexScale", "valueScale", "getUserBounds", "minDefined", "maxDefined", "getOrCreateStack", "stacks", "stackKey", "indexValue", "subStack", "getLastIndexInStack", "vScale", "positive", "updateStacks", "controller", "parsed", "iScale", "iAxis", "vAxis", "index", "itemStacks", "getFirstScaleId", "axis", "scales", "createDatasetContext", "parent", "createContext", "createDataContext", "element", "clearStacks", "isDirectUpdateMode", "mode", "cloneIfNotShared", "cached", "shared", "createStack", "canStack", "DatasetController", "dataset", "chooseId", "xid", "valueOrDefault", "yid", "rid", "indexAxis", "iid", "vid", "scaleID", "unlistenArrayEvents", "_data", "listenArrayEvents", "resetNewElements", "stackChanged", "oldStacked", "scopeKeys", "scopes", "start", "count", "_stacked", "sorted", "prev", "isNotInOrderComparedToPrev", "labels", "singleScale", "xAxisKey", "yAxisKey", "resolveObjectKey", "range", "parsedValue", "_parsed", "otherScale", "otherMin", "otherMax", "_skip", "ctx", "elements", "area", "active", "drawActiveElementsOnTop", "context", "elementType", "cache", "cacheKey", "sharing", "defined", "prefixes", "names", "transition", "sharedOptions", "firstOpts", "previouslySharedOptions", "includeOptions", "arg1", "arg2", "numMeta", "numData", "end", "move", "arr", "removed", "args", "newCount", "getAllScaleValues", "visibleMetas", "_arrayUnique", "a", "computeMinSampleSize", "curr", "updateMinAndPrev", "computeFitCategoryTraits", "ruler", "stackCount", "thickness", "size", "ratio", "isNullOrUndef", "computeFlexCategoryTraits", "pixels", "next", "percent", "parseFloatBar", "entry", "startValue", "endValue", "barStart", "barEnd", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "custom", "barSign", "actualBase", "borderProps", "top", "bottom", "setBorderSkipped", "edge", "parseEdge", "swap", "startEnd", "orig", "v1", "v2", "setInflateAmount", "inflateAmount", "BarController", "iAxisKey", "vAxisKey", "obj", "bars", "reset", "base", "horizontal", "vpixels", "ipixels", "last", "dataIndex", "skipNull", "val", "barThickness", "baseValue", "minBarLength", "floating", "length", "head", "startPixel", "endPixel", "halfGrid", "maxBarThickness", "center", "stackIndex", "rects", "BubbleController", "points", "point", "iPixel", "vPixel", "radius", "getRatioAndOffset", "rotation", "circumference", "cutout", "ratioX", "ratioY", "offsetX", "offsetY", "TAU", "startAngle", "endAngle", "startX", "startY", "endX", "endY", "calcMax", "angle", "_angleBetween", "calcMin", "maxX", "maxY", "HALF_PI", "minX", "PI", "minY", "DoughnutController", "getter", "toRadians", "chartArea", "arcs", "spacing", "maxSize", "toPercentage", "chartWeight", "maxWidth", "maxHeight", "maxRadius", "outerRadius", "toDimension", "innerRadius", "radiusLength", "animationOpts", "centerX", "centerY", "animateScale", "arc", "metaData", "total", "formatNumber", "ringWeightOffset", "pointStyle", "label", "style", "e", "legendItem", "legend", "tooltipItem", "dataLabel", "LineController", "line", "_dataset", "animationsDisabled", "_getStartAndCountOfVisiblePoints", "_scaleRangesChanged", "spanGaps", "segment", "maxGapLength", "isNumber", "directUpdate", "prevParsed", "nullData", "border", "firstPoint", "lastPoint", "PolarAreaController", "_parseObjectDataRadialScale", "minSize", "datasetStartAngle", "defaultAngle", "PieController", "RadarController", "pointPosition", "Element", "useFinalPosition", "final", "ret", "formatters", "tickValue", "ticks", "locale", "notation", "delta", "maxTick", "calculateDelta", "logDelta", "log10", "numDecimal", "Ticks", "_ctx", "autoSkip", "tickOpts", "ticksLimit", "determineMaxTicks", "majorIndices", "getMajorIndices", "numMajorIndices", "first", "newTicks", "skipMajors", "calculateSpacing", "avgMajorSpacing", "skip", "offset", "tickLength", "maxScale", "maxChart", "evenMajorSpacing", "getEvenSpacing", "factors", "_factorize", "result", "majorStart", "majorEnd", "len", "diff", "reverseAlign", "align", "offsetFromEdge", "sample", "numItems", "increment", "getPixelForGridLine", "offsetGridLines", "validIndex", "epsilon", "lineValue", "garbageCollect", "caches", "each", "gc", "gcLen", "getTickMarkLength", "getTitleHeight", "fallback", "font", "toFont", "padding", "toPadding", "createScaleContext", "createTickContext", "tick", "titleAlign", "position", "_toLeftRightCenter", "titleArgs", "left", "right", "titleX", "titleY", "height", "width", "_alignStartEnd", "positionAxisID", "Scale", "_Scale", "raw", "_userMin", "_userMax", "_suggestedMin", "_suggestedMax", "finiteOrDefault", "metas", "callback", "margins", "beginAtZero", "grace", "sampleSize", "_addGrace", "samplingEnabled", "reversePixels", "numTicks", "minRotation", "maxRotation", "labelRotation", "tickWidth", "maxLabelDiagonal", "labelSizes", "maxLabelWidth", "maxLabelHeight", "_limitValue", "toDegrees", "titleOpts", "gridOpts", "display", "isHorizontal", "titleHeight", "widest", "highest", "tickPadding", "angleRadians", "cos", "sin", "labelHeight", "labelWidth", "isRotated", "labelsBelowTicks", "offsetLeft", "offsetRight", "paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "widths", "heights", "widestLabelSize", "highestLabelSize", "j", "jlen", "tickFont", "fontString", "lineHeight", "nestedLabel", "_measureText", "valueAt", "idx", "pixel", "decimal", "_int16Range", "_alignPixel", "optionTicks", "rot", "w", "h", "grid", "ticksLength", "tl", "borderOpts", "axisWidth", "axisHalfWidth", "alignBorderValue", "borderValue", "alignedLineValue", "tx1", "ty1", "tx2", "ty2", "x1", "y1", "x2", "y2", "limit", "step", "optsAtIndex", "lineWidth", "lineColor", "borderDash", "borderDashOffset", "tickColor", "tickBorderDash", "tickBorderDashOffset", "crossAlign", "mirror", "tickAndPadding", "hTickAndPadding", "textAlign", "lineCount", "textOffset", "textBaseline", "halfCount", "strokeColor", "strokeWidth", "tickTextAlign", "backdrop", "labelPadding", "backgroundColor", "t", "drawLine", "p1", "p2", "lastLineWidth", "clipArea", "renderText", "unclipArea", "title", "tz", "gz", "axisID", "fontSize", "TypedRegistry", "scope", "override", "proto", "parentScope", "isIChartComponent", "id", "registerDefaults", "overrides", "itemDefaults", "merge", "routeDefaults", "routes", "property", "propertyParts", "sourceName", "sourceScope", "parts", "targetName", "targetScope", "Registry", "typedRegistry", "arg", "reg", "itemReg", "registry", "component", "camelMethod", "_capitalize", "ScatterController", "showLine", "controllers", "abstract", "DateAdapter", "chartOptions", "format", "timestamp", "amount", "unit", "weekday", "members", "adapters", "binarySearch", "metaset", "intersect", "_sorted", "lookupMethod", "_rlookupByKey", "_lookupByKey", "el", "evaluateInteractionItems", "handler", "lo", "hi", "getDistanceMetricForAxis", "useX", "useY", "pt1", "pt2", "deltaX", "deltaY", "getIntersectItems", "includeInvisible", "_isPointInArea", "getNearestRadialItems", "evaluationFunc", "getAngleFromPoint", "getNearestCartesianItems", "distanceMetric", "minDistance", "inRange", "distance", "getNearestItems", "getAxisItems", "rangeMethod", "intersectsItem", "Interaction", "getRelativePosition", "STATIC_POSITIONS", "filterByPosition", "array", "filterDynamicPositionByAxis", "sortByWeight", "v0", "wrapBoxes", "boxes", "layoutBoxes", "box", "pos", "stackWeight", "buildStacks", "layouts", "wrap", "_stack", "setLayoutDims", "params", "vBoxMaxWidth", "hBoxMaxHeight", "layout", "fullSize", "buildLayoutBoxes", "centerHorizontal", "centerVertical", "getCombinedMax", "maxPadding", "updateMaxPadding", "boxPadding", "updateDims", "newWidth", "newHeight", "widthChanged", "heightChanged", "handleMaxPadding", "updatePos", "change", "getMargins", "marginForPositions", "positions", "margin", "fitBoxes", "refitBoxes", "refit", "changed", "same", "other", "setBoxDims", "placeBoxes", "userPadding", "weight", "layoutItem", "minPadding", "availableWidth", "availableHeight", "verticalBoxes", "horizontalBoxes", "visibleVerticalBoxCount", "BasePlatform", "canvas", "aspectRatio", "listener", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "isNullOrEmpty", "initCanvas", "renderHeight", "renderWidth", "displayWidth", "readUsedSize", "displayHeight", "eventListenerOptions", "supportsEventListenerOptions", "addListener", "node", "removeListener", "fromNativeEvent", "nodeListContains", "nodeList", "createAttachObserver", "observer", "entries", "trigger", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "dpr", "resize", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "container", "_getParentNode", "throttled", "releaseObserver", "createProxyAndListen", "proxy", "DomPlatform", "initial", "proxies", "getMaximumSize", "_detectPlatform", "_isDomSupported", "PluginService", "hook", "filter", "descriptors", "descriptor", "plugin", "all", "plugins", "allPlugins", "createDescriptors", "previousDescriptors", "localIds", "local", "getOpts", "pluginOpts", "getIndexAxis", "datasetDefaults", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "axisFromPosition", "determineAxis", "scaleOptions", "mergeScaleConfig", "chartDefaults", "configScales", "chartIndexAxis", "firstIDs", "scaleConf", "defaultId", "defaultScaleOptions", "mergeIf", "defaultID", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "cachedKeys", "generate", "addIfFound", "set", "Config", "datasetType", "mainScope", "resetCache", "_scopeCache", "keyLists", "resolver", "subPrefixes", "getResolver", "needContext", "isFunction", "subResolver", "_attachContext", "descriptorDefaults", "resolverCache", "_createResolver", "hasFunction", "isScriptable", "isIndexable", "_descriptors", "scriptable", "indexable", "version", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "l1", "l2", "onAnimationsComplete", "onAnimationProgress", "getCanvas", "instances", "getChart", "c", "moveNumericKeys", "intKey", "determineLastEvent", "lastEvent", "inChartArea", "isClick", "Chart", "userConfig", "initialCanvas", "existingChart", "uid", "debounce", "maintainAspectRatio", "_aspectRatio", "retinaScale", "clearCanvas", "newSize", "newRatio", "scalesOptions", "axisOptions", "scaleOpts", "updated", "isRadial", "scaleType", "scaleClass", "hasUpdated", "datasets", "newControllers", "ControllerClass", "datasetElementType", "dataElementType", "animsDisabled", "_active", "_lastEvent", "existingEvents", "newEvents", "setsEqual", "_hiddenIndices", "changes", "_dataChanges", "datasetCount", "makeSet", "changeSet", "noArea", "layers", "clip", "useClip", "visible", "listeners", "platform", "_add", "_remove", "detached", "attached", "enabled", "prefix", "activeElements", "lastActive", "_elementsEqual", "replay", "hoverOptions", "deactivated", "activated", "eventFilter", "_isClickEvent", "invalidatePlugins", "enumerable", "clipArc", "pixelMargin", "angleMargin", "toRadiusCorners", "_readValueToProps", "parseBorderRadius$1", "angleDelta", "o", "halfThickness", "innerLimit", "computeOuterLimit", "outerArcLimit", "rThetaToXY", "theta", "pathArc", "circular", "innerR", "spacingOffset", "alpha", "noSpacingInnerRadius", "noSpacingOuterRadius", "avNogSpacingRadius", "adjustedAngle", "beta", "angleOffset", "outerStart", "outerEnd", "innerStart", "innerEnd", "outerStartAdjustedRadius", "outerEndAdjustedRadius", "outerStartAdjustedAngle", "outerEndAdjustedAngle", "innerStartAdjustedRadius", "innerEndAdjustedRadius", "innerStartAdjustedAngle", "innerEndAdjustedAngle", "pCenter", "p4", "p8", "outerStartX", "outerStartY", "outerEndX", "outerEndY", "drawArc", "fullCircles", "drawFullCircleBorders", "inner", "drawBorder", "borderWidth", "borderJoinStyle", "ArcElement", "chartX", "chartY", "rAdjust", "betweenAngles", "withinRadius", "_isBetween", "halfAngle", "halfRadius", "radiusOffset", "setStyle", "lineTo", "previous", "getLineMethod", "_steppedLineTo", "_bezierCurveTo", "pathVars", "paramsStart", "paramsEnd", "segmentStart", "segmentEnd", "outside", "pathSegment", "lineMethod", "fastPathSegment", "avgX", "countX", "prevX", "lastY", "pointIndex", "drawX", "truncX", "_getSegmentMethod", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "path", "strokePathDirect", "segments", "segmentMethod", "usePath2D", "LineElement", "_updateBezierControlPoints", "_computeSegments", "_boundSegments", "_interpolate", "interpolated", "inRange$1", "PointElement", "mouseX", "mouseY", "drawPoint", "getBarBounds", "bar", "half", "skipOrLimit", "parseBorderWidth", "maxW", "maxH", "toTRBL", "parseBorderRadius", "enableBorderRadius", "toTRBLCorners", "maxR", "enableBorder", "boundingRects", "bounds", "skipX", "skipY", "hasRadius", "addNormalRectPath", "rect", "inflateRect", "refRect", "BarElement", "borderColor", "outer", "addRectPath", "addRoundedRectPath", "lttbDecimation", "samples", "decimated", "bucketWidth", "sampledIndex", "endIndex", "maxAreaPoint", "maxArea", "nextA", "avgY", "avgRangeStart", "avgRangeEnd", "avgRangeLength", "rangeOffs", "rangeTo", "pointAx", "pointAy", "minMaxDecimation", "minIndex", "maxIndex", "startIndex", "xMin", "dx", "lastIndex", "intermediateIndex1", "intermediateIndex2", "cleanDecimatedDataset", "cleanDecimatedData", "getStartAndCountOfVisiblePointsSimplified", "pointCount", "plugin_decimation", "xAxis", "threshold", "d", "_segments", "tpoints", "_findSegmentEnd", "_getBounds", "targetSegments", "tgt", "subBounds", "fillSources", "_boundSegment", "fillSource", "_getEdge", "_normalizeAngle", "_pointsFromSegments", "boundary", "linePoints", "_createBoundaryLine", "_loop", "_shouldApplyFill", "source", "_resolveTarget", "sources", "propagate", "fill", "visited", "_decodeFill", "parseFillOption", "decodeTargetIndex", "firstCh", "_getTargetPixel", "_getTargetValue", "fillOption", "_buildStackLine", "sourcePoints", "linesBelow", "getLinesBelow", "addPointsBelow", "below", "sourcePoint", "postponed", "findPoint", "pointValue", "firstValue", "lastValue", "simpleArc", "_getTarget", "getLineByIndex", "computeBoundary", "computeCircularBoundary", "computeLinearBoundary", "_drawfill", "lineOpts", "above", "doFill", "clipVertical", "clipY", "lineLoop", "src", "notShape", "clipBounds", "interpolatedLineTo", "targetLoop", "interpolatedPoint", "_args", "getBoxSize", "labelOpts", "boxHeight", "boxWidth", "itemsEqual", "Legend", "legendItems", "labelFont", "itemHeight", "hitboxes", "lineWidths", "totalHeight", "row", "itemWidth", "columnSizes", "heightLimit", "totalWidth", "currentColWidth", "currentColHeight", "col", "rtl", "rtlHelper", "getRtlAdapter", "hitbox", "defaultColor", "fontColor", "halfFontSize", "cursor", "drawLegendBox", "drawOptions", "drawPointLegend", "yBoxTop", "xBoxLeft", "borderRadius", "fillText", "overrideTextDirection", "textWidth", "realX", "_textX", "restoreTextDirection", "titleFont", "titlePadding", "topPaddingPlusHalfFontSize", "hitBox", "lh", "isListened", "hoveredItem", "sameItem", "plugin_legend", "ci", "usePointStyle", "Title", "textSize", "fontOpts", "createTitle", "plugin_title", "titleBlock", "map", "plugin_subtitle", "positioners", "eventPosition", "nearestElement", "distanceBetweenPoints", "tp", "pushOrConcat", "toPush", "splitNewlines", "str", "createTooltipItem", "getTooltipSize", "tooltip", "body", "footer", "bodyFont", "footerFont", "titleLineCount", "footerLineCount", "bodyLineItemCount", "combinedBodyLength", "bodyItem", "bodyLineHeight", "widthPadding", "maxLineWidth", "determineYAlign", "doesNotFitWithAlign", "xAlign", "caret", "determineXAlign", "yAlign", "chartWidth", "determineAlignment", "alignX", "alignY", "paddingAndSize", "getBackgroundPoint", "alignment", "caretSize", "caretPadding", "cornerRadius", "topLeft", "topRight", "bottomLeft", "bottomRight", "getAlignedX", "getBeforeAfterBodyLines", "createTooltipContext", "tooltipItems", "overrideCallbacks", "Tooltip", "beforeTitle", "afterTitle", "lines", "bodyItems", "scoped", "beforeFooter", "afterFooter", "labelColors", "labelPointStyles", "labelTextColors", "positionAndSize", "backgroundPoint", "tooltipPoint", "caretPosition", "ptX", "ptY", "x3", "y3", "pt", "titleSpacing", "labelPointStyle", "colorX", "rtlColorX", "yOffSet", "colorY", "outerX", "innerX", "bodySpacing", "bodyAlign", "displayColors", "xLinePadding", "fillLineOfText", "bodyAlignForCalculation", "textColor", "tooltipSize", "animX", "animY", "opacity", "hasTooltipContent", "positionChanged", "caretX", "caretY", "plugin_tooltip", "noop", "labelCount", "addIfString", "addedLabels", "findOrAddLabel", "CategoryScale", "added", "generateTicks$1", "generationOptions", "dataRange", "precision", "maxTicks", "maxDigits", "includeBounds", "maxSpaces", "rmin", "rmax", "countDefined", "minSpacing", "niceNum", "niceMin", "niceMax", "numSpaces", "almostWhole", "almostEquals", "decimalPlaces", "_decimalPlaces", "relativeLabelSize", "rad", "LinearScaleBase", "setMin", "setMax", "minSign", "maxSign", "maxTicksLimit", "stepSize", "numericGeneratorOptions", "_setMinAndMaxByKey", "LinearScale", "isMajor", "tickVal", "generateTicks", "endExp", "endSignificand", "exp", "significand", "lastTick", "LogarithmicScale", "m", "getTickBackdropHeight", "measureLabelSize", "_longestText", "determineLimits", "fitWithPointLabels", "limits", "valueCount", "pointLabelOpts", "additionalAngle", "plFont", "hLimits", "vLimits", "updateLimits", "buildPointLabelItems", "extra", "outerDistance", "pointLabelPosition", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "drawPointLabels", "pointLabels", "backdropColor", "backdropLeft", "backdropTop", "backdropWidth", "backdropHeight", "pathRadiusLine", "drawRadiusLine", "gridLineOpts", "createPointLabelContext", "RadialLinearScale", "leftMovement", "rightMovement", "topMovement", "bottomMovement", "angleMultiplier", "scalingFactor", "scaledDistance", "pointLabel", "distanceFromCenter", "angleLines", "INTERVALS", "UNITS", "sorter", "parse", "input", "adapter", "parser", "round", "isoWeekday", "determineUnitForAutoTicks", "minUnit", "capacity", "interval", "determineUnitForFormatting", "determineMajorUnit", "addTick", "time", "timestamps", "_lookup", "setMajorTicks", "majorUnit", "major", "ticksFromTimestamps", "TimeScale", "_applyBounds", "timeOpts", "_filterBetween", "minor", "hasWeekday", "formats", "minorFormat", "majorFormat", "formatter", "offsets", "ticksOpts", "tickLabelWidth", "cosRotation", "sinRotation", "tickFontSize", "exampleTime", "displayFormats", "exampleLabel", "interpolate", "table", "prevSource", "nextSource", "prevTarget", "nextTarget", "span", "TimeSeriesScale", "registerables", "Chart", "registerables", "auto_default", "__defProp", "__getOwnPropSymbols", "__hasOwnProp", "__propIsEnum", "__defNormalProp", "obj", "key", "value", "__spreadValues", "a", "b", "prop", "src_default", "Controller", "element", "auto_default", "chartjs_controller_default", "src_default", "c", "Controller", "e", "t", "h", "checkbox_select_all_controller_default", "h", "checkbox_to_form_controller_default", "Controller", "checkbox", "element", "event", "currentCheckboxValue", "existingCheckbox", "newHiddenField", "__publicField", "clipboard_controller_default", "Controller", "__publicField", "collapse_all_controller_default", "Controller", "_event", "element", "__publicField", "collapse_controller_default", "Controller", "Collapse", "countdown_controller_default", "Controller", "date", "difference", "parts", "form", "__publicField", "import_debounce", "datatable_controller_default", "Controller", "_event", "event", "sortParam", "perPageParam", "original_form_data", "current_form_data", "searchParamsString", "tbody", "asObject", "formData", "data", "key", "pair", "urlSearchParams", "entry", "name", "value", "input", "option", "_index", "inputValue", "checkbox", "activeRadio", "message", "status", "_xhr", "__publicField", "init_lib", "init_lib", "_uppy", "_events", "EventManager", "uppy", "__privateAdd", "__privateSet", "event", "fn", "__privateGet", "fileID", "cb", "file", "isPaused", "eventHandler", "args", "NetworkError", "error", "xhr", "__publicField", "NetworkError_default", "_aliveTimer", "_isDone", "_onTimedOut", "_timeout", "ProgressTimeout", "timeout", "timeoutHandler", "__privateAdd", "__privateSet", "__privateGet", "ProgressTimeout_default", "noop", "fetcher", "url", "options", "body", "headers", "method", "onBeforeRequest", "onUploadProgress", "shouldRetry", "onAfterResponse", "onTimeout", "responseType", "retries", "signal", "timeout", "withCredentials", "delay", "attempt", "timer", "ProgressTimeout_default", "requestWithRetry", "retryCount", "resolve", "reject", "xhr", "onError", "error", "err", "NetworkError_default", "event", "key", "filterNonFailedFiles", "files", "hasError", "file", "filterFilesToEmitUploadStarted", "getAllowedMetaFields", "fields", "meta", "isNetworkError", "xhr", "isNetworkError_default", "createCancelError", "cause", "abortOn", "signal", "abortPromise", "removeAbortListener", "_activeRequests", "_queuedHandlers", "_paused", "_pauseTimer", "_downLimit", "_upperLimit", "_rateLimitingTimer", "_RateLimitedQueue_instances", "call_fn", "queueNext_fn", "next_fn", "queue_fn", "dequeue_fn", "_resume", "_increaseLimit", "RateLimitedQueue", "limit", "__privateAdd", "__publicField", "__privateGet", "__privateSet", "i", "__privateMethod", "fn", "queueOptions", "args", "queuedRequest", "outerPromise", "resolve", "reject", "cancelError", "innerPromise", "err", "result", "duration", "done", "cancelActive", "next", "handler", "options", "index", "other", "internalRateLimitedQueue", "package_default", "locale_default", "buildResponseError", "xhr", "err", "error", "isNetworkError_default", "NetworkError_default", "setTypeInBlob", "file", "defaultOptions", "_getFetcher", "_XHRUpload_instances", "uploadLocalFile_fn", "uploadBundle_fn", "getCompanionClientArgs_fn", "uploadFiles_fn", "_handleUpload", "XHRUpload", "BasePlugin", "uppy", "opts", "__privateAdd", "__publicField", "fileIDs", "internalRateLimitedQueue", "files", "filesFiltered", "filterNonFailedFiles", "filesToEmit", "filterFilesToEmitUploadStarted", "__privateMethod", "locale_default", "RateLimitedQueue", "__privateSet", "url", "options", "res", "fetcher", "retryCount", "timeout", "seconds", "event", "id", "body", "cause", "uploadURL", "request", "overrides", "headers", "formData", "meta", "getAllowedMetaFields", "item", "value", "subItem", "formPost", "dataWithUpdatedType", "capabilities", "__privateGet", "events", "EventManager", "controller", "uppyFetch", "fetch", "endpoint", "optsFromState", "abort", "allowedMetaFields", "name", "getQueue", "removedHandler", "removedFile", "uploadPromise", "package_default", "init_lib", "emaFilter", "newValue", "previousSmoothedValue", "halfLife", "dt", "init_getTextDirection", "init_preact_module", "package_default", "locale_default", "StatusBarStates_default", "vnodeId", "createVNode", "type", "props", "key", "isStaticChildren", "__source", "__self", "ref", "i", "normalizedProps", "vnode", "__k", "__", "__b", "__e", "__c", "constructor", "__v", "vnodeId", "__i", "__u", "defaultProps", "options", "import_classnames", "init_preact_module", "import_prettier_bytes", "secondsToTime", "rawSeconds", "hours", "minutes", "seconds", "prettyETA", "seconds", "time", "secondsToTime", "hoursStr", "minutesStr", "secondsStr", "import_classnames", "init_preact_module", "DOT", "renderDot", "UploadBtn", "props", "newFiles", "isUploadStarted", "recoveredState", "i18n", "uploadState", "isSomeGhost", "startUpload", "uploadBtnClassNames", "classNames", "StatusBarStates_default", "uploadBtnText", "u", "RetryBtn", "uppy", "CancelBtn", "PauseResumeButton", "isAllPaused", "isAllComplete", "resumableUploads", "title", "togglePauseResume", "DoneBtn", "doneButtonHandler", "LoadingSpinner", "ProgressBarProcessing", "progress", "value", "mode", "message", "ProgressDetails", "numUploads", "complete", "totalUploadedSize", "totalSize", "totalETA", "ifShowFilesUploadedOfTotal", "totalUploadedSizeStr", "prettierBytes", "prettyETA", "FileUploadCount", "UploadNewlyAddedFiles", "ProgressBarUploading", "supportsUploadProgress", "totalProgress", "showProgressDetails", "showUploadNewlyAddedFiles", "renderProgressDetails", "ProgressBarComplete", "ProgressBarError", "error", "displayErrorAlert", "errorMessage", "calculateProcessingProgress", "files", "values", "mode", "message", "progress", "preprocess", "postprocess", "value", "total", "progressValue", "STATE_ERROR", "STATE_WAITING", "STATE_PREPROCESSING", "STATE_UPLOADING", "STATE_POSTPROCESSING", "STATE_COMPLETE", "StatusBarStates_default", "StatusBarUI", "newFiles", "allowNewUpload", "isUploadInProgress", "isAllPaused", "resumableUploads", "error", "hideUploadButton", "hidePauseResumeButton", "hideCancelButton", "hideRetryButton", "recoveredState", "uploadState", "totalProgress", "files", "supportsUploadProgress", "hideAfterFinish", "isSomeGhost", "doneButtonHandler", "isUploadStarted", "i18n", "startUpload", "uppy", "isAllComplete", "showProgressDetails", "numUploads", "complete", "totalSize", "totalETA", "totalUploadedSize", "getProgressValue", "progress", "calculateProcessingProgress", "getIsIndeterminate", "mode", "progressValue", "width", "showUploadBtn", "showCancelBtn", "showPauseResumeBtn", "showRetryBtn", "showDoneBtn", "progressClassNames", "classNames", "statusBarClassNames", "progressBarStateEl", "u", "ProgressBarProcessing", "ProgressBarComplete", "ProgressBarError", "ProgressBarUploading", "UploadBtn", "RetryBtn", "PauseResumeButton", "CancelBtn", "DoneBtn", "speedFilterHalfLife", "ETAFilterHalfLife", "getUploadingState", "error", "isAllComplete", "recoveredState", "files", "StatusBarStates_default", "state", "fileIDs", "i", "progress", "defaultOptions", "_lastUpdateTime", "_previousUploadedBytes", "_previousSpeed", "_previousETA", "_StatusBar_instances", "computeSmoothETA_fn", "_onUploadStart", "StatusBar", "UIPlugin_default", "uppy", "opts", "__privateAdd", "__publicField", "__privateSet", "pv", "locale_default", "capabilities", "allowNewUpload", "totalProgress", "newFiles", "startedFiles", "completeFiles", "isUploadStarted", "isAllPaused", "isUploadInProgress", "isSomeGhost", "newFilesOrRecovered", "resumableUploads", "supportsUploadProgress", "totalSize", "totalUploadedSize", "f", "file", "totalETA", "__privateMethod", "StatusBarUI", "element", "getTextDirection_default", "target", "__privateGet", "totalBytes", "remaining", "dt", "uploadedBytesSinceLastTick", "currentSpeed", "filteredSpeed", "emaFilter", "instantETA", "updatedPreviousETA", "filteredETA", "package_default", "import_tut_drag_drop", "de_DE", "count", "de_DE_default", "en_US", "count", "en_US_default", "es_ES", "count", "es_ES_default", "fr_FR", "count", "fr_FR_default", "toast", "message", "type", "options", "flashContainer", "accessibility", "prefixes", "displayMessage", "id", "direct_upload_controller_default", "Controller", "__publicField", "file", "response", "toast", "mediaFileId", "existingMediaFileIds", "uniqMediaFileIDs", "error", "result", "firstSuccessfulFileName", "_files", "currentFile", "files", "maxFileSize", "maxNumberOfFiles", "allowedFileTypes", "type", "locale", "de_DE_default", "en_US_default", "es_ES_default", "fr_FR_default", "options", "Uppy_default", "TutDragDrop", "XHRUpload", "StatusBar", "event", "element", "listElement", "form", "searchFormText", "searchFormSearchInput", "mediaFileData", "display_with_button_controller_default", "Controller", "cardBody", "dom", "__publicField", "display_with_radio_button_controller_default", "Controller", "event", "__publicField", "_defineProperty", "e", "r", "t", "_toPropertyKey", "_extends", "n", "ownKeys", "e", "r", "t", "o", "_objectSpread2", "_defineProperty", "_objectWithoutProperties", "i", "_objectWithoutPropertiesLoose", "n", "_toPrimitive", "t", "r", "e", "i", "_toPropertyKey", "_typeof", "o", "version", "userAgent", "pattern", "IE11OrLess", "Edge", "FireFox", "Safari", "IOS", "ChromeForAndroid", "captureMode", "on", "el", "event", "fn", "off", "matches", "selector", "getParentOrHost", "closest", "ctx", "includeCTX", "R_SPACE", "toggleClass", "name", "state", "className", "css", "prop", "val", "style", "matrix", "selfOnly", "appliedTransforms", "transform", "matrixFn", "find", "tagName", "iterator", "list", "i", "n", "getWindowScrollingElement", "scrollingElement", "getRect", "relativeToContainingBlock", "relativeToNonStaticParent", "undoScale", "container", "elRect", "top", "left", "bottom", "right", "height", "width", "containerRect", "elMatrix", "scaleX", "scaleY", "isScrolledPast", "elSide", "parentSide", "parent", "getParentAutoScrollElement", "elSideVal", "parentSideVal", "visible", "getChild", "childNum", "options", "includeDragEl", "currentChild", "children", "Sortable", "lastChild", "last", "index", "getRelativeScrollOffset", "offsetLeft", "offsetTop", "winScroller", "indexOfObject", "arr", "obj", "key", "includeSelf", "elem", "gotSelf", "elemCSS", "extend", "dst", "src", "isRectEqual", "rect1", "rect2", "_throttleTimeout", "throttle", "callback", "ms", "args", "_this", "cancelThrottle", "scrollBy", "x", "y", "clone", "Polymer", "$", "getChildContainingRectFromElement", "container", "options", "ghostEl", "rect", "child", "_rect$left", "_rect$top", "_rect$right", "_rect$bottom", "closest", "childRect", "getRect", "expando", "AnimationStateManager", "animationStates", "animationCallbackId", "children", "css", "Sortable", "fromRect", "_objectSpread2", "childMatrix", "matrix", "state", "target", "indexOfObject", "callback", "_this", "animating", "animationTime", "time", "toRect", "prevFromRect", "prevToRect", "animatingRect", "targetMatrix", "isRectEqual", "calculateRealTime", "currentRect", "duration", "elMatrix", "scaleX", "scaleY", "translateX", "translateY", "repaint", "plugins", "defaults", "PluginManager", "plugin", "option", "p", "eventName", "sortable", "evt", "eventNameGlobal", "el", "pluginName", "initialized", "_extends", "modified", "name", "eventProperties", "value", "modifiedValue", "dispatchEvent", "_ref", "rootEl", "targetEl", "cloneEl", "toEl", "fromEl", "oldIndex", "newIndex", "oldDraggableIndex", "newDraggableIndex", "originalEvent", "putSortable", "extraEventProperties", "onName", "IE11OrLess", "Edge", "allEventProperties", "_excluded", "pluginEvent", "data", "_objectWithoutProperties", "dragEl", "parentEl", "nextEl", "lastDownEl", "cloneHidden", "moved", "_hideGhostForTarget", "_unhideGhostForTarget", "_dispatchEvent", "info", "activeGroup", "awaitingDragStarted", "ignoreNextClick", "sortables", "tapEvt", "touchEvt", "lastDx", "lastDy", "tapDistanceLeft", "tapDistanceTop", "lastTarget", "lastDirection", "pastFirstInvertThresh", "isCircumstantialInvert", "targetMoveDistance", "ghostRelativeParent", "ghostRelativeParentInitialScroll", "_silent", "savedInputChecked", "documentExists", "PositionGhostAbsolutely", "IOS", "CSSFloatProperty", "supportDraggable", "ChromeForAndroid", "supportCssPointerEvents", "_detectDirection", "elCSS", "elWidth", "child1", "getChild", "child2", "firstChildCSS", "secondChildCSS", "firstChildWidth", "secondChildWidth", "touchingSideChild2", "_dragElInRowColumn", "dragRect", "targetRect", "vertical", "dragElS1Opp", "dragElS2Opp", "dragElOppLength", "targetS1Opp", "targetS2Opp", "targetOppLength", "_detectNearestEmptySortable", "x", "y", "ret", "threshold", "lastChild", "insideHorizontally", "insideVertically", "_prepareGroup", "toFn", "pull", "to", "from", "sameGroup", "otherGroup", "group", "originalGroup", "_typeof", "nearestEmptyInsertDetectEvent", "nearest", "event", "i", "_checkOutsideTargetEl", "dataTransfer", "Safari", "fn", "on", "preventOnFilter", "type", "touch", "originalTarget", "filter", "_saveInputCheckedState", "index", "criteria", "ownerDocument", "dragStartFn", "FireFox", "toggleClass", "find", "_disableDraggable", "e", "off", "_nextTick", "fallback", "parent", "inserted", "getParentOrHost", "fallbackTolerance", "fallbackOffset", "ghostMatrix", "relativeScrollOffset", "getRelativeScrollOffset", "dx", "dy", "cssMatrix", "getWindowScrollingElement", "clone", "revert", "activeSortable", "isOwner", "canSort", "fromSortable", "completedFired", "dragOverEvent", "extra", "completed", "after", "_onMove", "changed", "capture", "insertion", "elLastChild", "_ghostIsLast", "_ghostIsFirst", "firstChild", "direction", "targetBeforeFirstSwap", "differentLevel", "differentRowCol", "side1", "scrolledPastTop", "isScrolledPast", "scrollBefore", "_getSwapDirection", "sibling", "dragIndex", "nextSibling", "moveVector", "_unsilent", "scrollBy", "_cancelNextTick", "checkEl", "_globalDragOver", "order", "n", "_generateId", "useAnimation", "items", "id", "store", "selector", "willInsertAfter", "onMoveFn", "retVal", "firstElRect", "childContainingRect", "spacer", "lastElRect", "swapThreshold", "invertedSwapThreshold", "invertSwap", "isLastTarget", "mouseOnAxis", "targetLength", "targetS1", "targetS2", "invert", "_getInsertDirection", "str", "sum", "root", "inputs", "idx", "extend", "throttle", "element", "_len", "_key", "version", "autoScrolls", "scrollEl", "scrollRootEl", "scrolling", "lastAutoScrollX", "lastAutoScrollY", "touchEvt$1", "pointerElemChangedInterval", "AutoScrollPlugin", "AutoScroll", "_ref2", "clearPointerElemChangedInterval", "clearAutoScrolls", "cancelThrottle", "elem", "autoScroll", "ogElemScroller", "getParentAutoScrollElement", "newElem", "isFallback", "sens", "speed", "winScroller", "scrollThisInstance", "scrollCustomFn", "layersOut", "currentParent", "top", "bottom", "left", "right", "width", "height", "canScrollX", "canScrollY", "scrollWidth", "scrollHeight", "scrollPosX", "scrollPosY", "vx", "vy", "scrollOffsetY", "scrollOffsetX", "drop", "dispatchSortableEvent", "hideGhostForTarget", "unhideGhostForTarget", "toSortable", "Revert", "_ref3", "Remove", "_ref4", "parentSortable", "Sortable", "AutoScrollPlugin", "Remove", "Revert", "sortable_esm_default", "drag_drop_controller_default", "Controller", "element", "sortable_esm_default", "event", "draggedElement", "url", "data", "target", "position", "_response", "_statusText", "_xhr", "el", "oldIndex", "nextSibling", "__publicField", "dropdown_controller_default", "Controller", "Dropdown", "defaultBsPopperConfig", "import_ckeditor5", "e", "n", "e", "a", "e", "handleUnauthorized", "response", "json", "toast", "text", "TutorizeUploadAdapter", "loader", "url", "file", "data", "response", "handleUnauthorized", "json", "toast", "TutorizeUploadAdapterPlugin", "editor", "import_debounce", "MentionCustomization", "editor", "viewItem", "modelAttributeValue", "writer", "mentionItemRenderer", "item", "itemElement", "nameElement", "typeElement", "editor_controller_default", "Controller", "editor", "backgroundImageUrl", "opacity", "writer", "editorDocumentRoot", "main", "height", "maxHeight", "wordCountPlugin", "editor_wrapper", "e", "_event", "dataLength", "event", "name", "validationInput", "file", "mediaFileEmbed", "element", "directUploads", "buildDirectUploadsElement", "mediaFileEmbedEditingDowncast", "query", "url", "r", "json", "mentionItemRenderer", "plugins", "tutorizeUpload", "TutorizeUploadAdapterPlugin", "MentionCustomization", "removePlugins", "items", "__publicField", "opts", "directUploadsWrapper", "fileInputWrapper", "mediaFileIdInput", "statusBar", "modelElement", "raw", "label", "children", "sources", "src", "video", "data", "obj", "div", "import_mediaelement", "exports", "exports", "exports", "e", "s", "o", "u", "a", "__require", "i", "f", "l", "n", "_dereq_", "module", "exports", "VimeoApi", "settings", "player", "url", "parts", "playerLinkMatch", "vimeoLinkMatch", "privateVimeoLinkMatch", "vimeoIframeRenderer", "type", "mediaElement", "options", "mediaFiles", "apiStack", "vimeo", "readyState", "paused", "volume", "oldVolume", "currentTime", "bufferedTime", "ended", "duration", "vimeoPlayer", "errorHandler", "error", "props", "assignGettersSetters", "propName", "capName", "value", "_url", "_url2", "videoId", "event", "total", "methods", "assignMethods", "methodName", "_i", "_total", "_vimeoPlayer", "_i2", "_total2", "stackItem", "vimeoIframe", "events", "assignEvents", "_i3", "_total3", "loadProgress", "initEvent", "playingEvent", "seconds", "_i4", "_total4", "height", "width", "vimeoContainer", "standardUrl", "queryArgs", "args", "editor_media_file_embed_controller_default", "Controller", "e", "oembed", "json", "obj", "video", "src", "source", "wrapper", "__publicField", "element_statistics_controller_default", "Controller", "tab", "event", "elementType", "activeTabPane", "activeTab", "informationsFrame", "tableFrame", "form", "__publicField", "DomParserSupport", "parser", "text", "documentFragment", "doc", "children", "element", "_index", "dom_parser_support_default", "SupportChecker", "support_checker_default", "LoadScripts", "domElement", "content", "script", "load_scripts_default", "fetch_html_controller_default", "Controller", "_event", "support_checker_default", "response", "handleUnauthorized", "text", "dom_parser_support_default", "load_scripts_default", "error", "entries", "observer", "entry", "message", "__publicField", "import_debounce", "filterable_controller_default", "Controller", "template", "event", "inputValue", "element", "__publicField", "form_leave_controller_default", "Controller", "value", "type", "event", "heartbeat_controller_default", "Controller", "error", "infinite_scroll_controller_default", "Controller", "entries", "observer", "entry", "response", "json", "error", "__publicField", "leave_page_controller_default", "Controller", "event", "_event", "showAlert", "lock_timeout_controller_default", "Controller", "newValue", "oldValue", "modalElement", "modal", "Modal", "err", "lockTimeInMilliseconds", "modalBackdrop", "modalClone", "button", "extendEditLink", "event", "autoSaveFlags", "flag", "submitButtons", "radioBsTargetId", "form", "bsTargetId", "el", "__publicField", "import_mediaelement", "media_element_controller_default", "Controller", "element", "_index", "startVolume", "source", "toggleProgressCheckBox", "__publicField", "modal_controller_default", "Controller", "_event", "Modal", "support_checker_default", "event", "data", "status", "xhr", "entries", "_observer", "entry", "message", "modal_link_controller_default", "Controller", "event", "url", "response", "handleUnauthorized", "text", "dom_parser_support_default", "Modal", "load_scripts_default", "error", "_event", "focusElement", "modalDialog", "__publicField", "nav_tabs_scrollable_controller_default", "Controller", "_event", "content", "container", "containerMetrics", "containerMetricsRight", "containerMetricsLeft", "contentMetrics", "contentMetricsRight", "contentMetricsLeft", "currentItem", "__publicField", "r", "Controller", "e", "a", "nested_form_controller_default", "r", "event", "no_paste_controller_default", "Controller", "e", "notification_controller_default", "Controller", "response", "json", "error", "responseJson", "target", "_", "targets", "__publicField", "password_show_toggle_controller_default", "Controller", "_event", "user_password_input", "import_ckeditor5", "pdf_summary_confirmation_controller_default", "Controller", "generateButton", "collapseElement", "submitButton", "acceptButton", "contentSubmitButton", "summaryAccordionButton", "event", "summary", "generatedTextArea", "editorContainer", "textarea", "__publicField", "popover_controller_default", "Controller", "Popover", "_event", "response", "text", "error", "__publicField", "radio_check_controller_default", "Controller", "event", "currentRadio", "element", "__publicField", "uniqueIdCounter", "isCssEmbeddedFor", "arr", "item", "forEach", "callback", "scope", "i", "extend", "objects", "hasProp", "child", "parent", "args", "key", "c1", "p1", "debounce", "func", "wait", "immediate", "timeout", "callNow", "later", "uniqueId", "setBoxHeights", "element", "expandedHeight", "cssMaxHeight", "defaultHeight", "createElementFromString", "htmlString", "div", "embedCSS", "selector", "options", "styles", "d", "u", "css", "buildToggle", "link", "clickHandler", "event", "text", "toggleLink", "isEnvironmentSupported", "resizeBoxes", "elements", "expanded", "defaults", "Readmore", "heightMargin", "toggleElement", "el", "trigger", "newHeight", "transitionendHandler", "transitionEvent", "readmore_es6_default", "readmore_controller_default", "Controller", "support_checker_default", "entries", "observer", "entry", "readmore_es6_default", "__publicField", "resize_controller_default", "Controller", "event", "currentHeight", "newHeight", "params", "formData", "key", "value", "__publicField", "resource_lock_channel_controller_default", "Controller", "data", "receivedType", "resourceId", "selector", "htmlElement", "lockHtml", "lockIconContainer", "parentElement", "target", "isThisUser", "__publicField", "sidebar_toggle_controller_default", "Controller", "support_checker_default", "toggleElement", "_event", "submit_on_enter_controller_default", "Controller", "event", "submit_other_form_controller_default", "Controller", "dom", "fieldFileIDElement", "fileNameElement", "__publicField", "sum_point_controller_default", "Controller", "_target", "sum", "element", "_index", "__publicField", "SyncPickMarkup", "options", "container", "pos", "offset", "getOffsetFromBoundingBox", "top", "right", "selectOffsetTop", "selectOffsetBot", "wrapper", "button", "buttonClass", "buttonDisabledClass", "buttonIcon", "buttonIconClass", "popup", "self", "searchInputClass", "buttongroup", "buttonGroupClass", "dropdownValues", "selectedValues", "valuesOrder", "optGroupLabel", "index", "arr", "label", "pageUl", "buildUl", "order", "hr", "li", "buildLi", "ul", "value", "element", "option", "setLiSelected", "allLis", "hoveredIndex", "first", "entry", "entryOffsetTop", "shouldScrollDown", "shouldScrollUp", "match", "count", "joinSelectedTexts", "selected", "key", "additionalClasses", "listClass", "text", "subtext", "imgAttributes", "textSpan", "subtextDom", "imageTag", "attr", "addCheck", "checkedIconClasses", "check", "checkedIconClass", "box", "docElem", "en_default", "de_default", "es_default", "fr_default", "SyncPick", "e", "onDomRemove", "optgrouplabel", "newValue", "inputValue", "lowerInputValue", "filteredValues", "optionData", "clickedButton", "keysOfSelectedValues", "event", "msg", "someObject", "onDetachCallback", "observer", "isDetached", "el", "sync_pick_controller_default", "Controller", "options", "key", "elementId", "i", "__publicField", "ZERO_WIDTH_UNICODE_CHAR", "e", "t", "i", "n", "logger", "isEnabled", "window", "TAGIFY_DEBUG", "log", "_len", "arguments", "length", "args", "Array", "_key", "console", "this", "_to_consumable_array", "warn", "sameStr", "s1", "s2", "caseSensitive", "trim", "toLowerCase", "removeCollectionProp", "collection", "unwantedProps", "isArray", "map", "v", "omit", "obj", "props", "p", "newObj", "indexOf", "parseHTML", "s", "DOMParser", "parseFromString", "body", "firstElementChild", "getfirstTextNode", "elm", "action", "nodeType", "escapeHTML", "replace", "isObject", "type", "Object", "prototype", "toString", "call", "split", "slice", "extend", "o", "o1", "o2", "copy", "a", "b", "key", "hasOwnProperty", "assign", "concatWithoutDups", "newArr", "existingObj", "_iteratorNormalCompletion", "_didIteratorError", "_iteratorError", "undefined", "_step", "_iterator", "Symbol", "iterator", "arr", "value", "_iteratorNormalCompletion1", "_didIteratorError1", "_iteratorError1", "_step1", "_iterator1", "item", "push", "includes", "err", "return", "unaccent", "String", "normalize", "isChromeAndroidBrowser", "test", "navigator", "userAgent", "getUID", "c", "crypto", "getRandomValues", "Uint8Array", "isNodeTag", "node", "belongs", "isNodeBelongsToThisTagifyInstance", "isTag", "classList", "contains", "settings", "classNames", "tag", "isWithinNodeTag", "closest", "tagSelector", "namespaceSelector", "DOM", "scope", "injectAtCaret", "content", "range", "selection", "getSelection", "getRangeAt", "document", "createTextNode", "deleteContents", "insertNode", "getSetTagData", "tagElm", "data", "override", "__tagifyTagData", "placeCaretAfterNode", "parentNode", "nextSibling", "sel", "rangeCount", "setStartAfter", "collapse", "removeAllRanges", "addRange", "fixCaretBetweenTags", "tags", "TagifyHasFocuse", "forEach", "previousSibling", "textNode", "before", "DEFAULTS", "delimiters", "pattern", "tagTextProp", "maxTags", "Infinity", "callbacks", "addTagOnBlur", "addTagOn", "onChangeAfterBlur", "duplicates", "whitelist", "blacklist", "enforceWhitelist", "userInput", "focusable", "focusInputOnRemove", "keepInvalidTags", "createInvalidTags", "mixTagsAllowedAfter", "mixTagsInterpolator", "backspace", "skipInvalid", "pasteAsTags", "editTags", "clicks", "keepInvalid", "transformTag", "a11y", "focusableTags", "inputAriaLabel", "mixMode", "insertAfterTag", "autoComplete", "enabled", "rightKey", "tabKey", "namespace", "selectMode", "input", "focus", "tagNoAnimation", "tagInvalid", "tagNotAllowed", "scopeLoading", "hasMaxTags", "hasNoTags", "empty", "inputInvalid", "dropdown", "dropdownWrapper", "dropdownHeader", "dropdownFooter", "dropdownItem", "dropdownItemActive", "dropdownItemHidden", "dropdownItemSelected", "dropdownInital", "tagText", "tagX", "tagLoading", "tagEditing", "tagFlash", "tagHide", "classname", "maxItems", "searchKeys", "fuzzySearch", "accentedSearch", "includeSelectedTags", "highlightFirst", "closeOnSelect", "clearOnSelect", "position", "appendTarget", "hooks", "beforeRemoveTag", "Promise", "resolve", "beforePaste", "suggestionClick", "beforeKeyDown", "initDropdown", "_dropdown", "bind", "refs", "__tagify", "C", "_", "_object_spread_props", "suggestionsMethods", "events", "binding", "bindUnbind", "_CB", "_CBR", "listeners", "onKeyDown", "onMouseOver", "onMouseLeave", "onClick", "onScroll", "state", "hasFocus", "composing", "_s", "selectedElm", "querySelector", "dropdownItemActiveSelector", "selectedElmData", "getSuggestionDataByNode", "isMixMode", "mode", "isSelectMode", "tagify", "then", "result", "preventDefault", "dropdownItems", "_this", "getAllSuggestionsRefs", "actionUp", "getNextOrPrevOption", "matches", "dropdownItemSelector", "highlightOption", "itemsPerPage", "Math", "floor", "clientHeight", "offsetHeight", "isPageUp", "currentIndex", "targetIndex", "max", "min", "hide", "actions", "ArrowLeft", "shouldAutocompleteOnKey", "editing", "getMappedValue", "autoCompleteData", "autocomplete", "set", "selectOption", "setTimeout", "tagData", "suggestionElm", "nextOrPrevOption", "nextOrPrevOptionValue", "getAttribute", "getSuggestionNodeByValue", "addTags", "inputText", "catch", "raw", "charCodeAt", "removeTags", "editTag", "ddItem", "target", "button", "pos", "scrollTop", "scrollHeight", "trigger", "percentage", "round", "refilter", "query", "suggestedListItems", "filterListItems", "fill", "find", "selected", "next", "selectedIdx", "findIndex", "adjustScroll", "itemData", "className", "ddItemElm", "remove", "removeAttribute", "ddItemData", "suggest", "add", "setAttribute", "offsetTop", "event", "onSelect", "isNoMatch", "normalizedTagData", "normalizeTags", "onEditTagDone", "__isValid", "toggleFocusClass", "addEventListener", "fillHeaderFooter", "once", "selectAll", "onlyRendered", "tagsToAdd", "suggestions", "options", "whitelistItem", "valueIsInWhitelist", "searchBy", "isDuplicate", "niddle", "l", "startsWithMatch", "exactMatch", "_searchKeys", "keys", "some", "k", "_sd", "exact", "reduce", "values", "every", "q", "isTagDuplicate", "exactMatchesList", "sortby", "list", "unshift", "d", "suggestionsCount", "hasCustomSort", "filter", "_this1", "filteredList", "concat", "mapValueTo", "createListHTML", "sugegstionsList", "suggestion", "idx", "mappedValue", "templates", "apply", "join", "parseTemplate", "getHeaderRef", "getFooterRef", "querySelectorAll", "show", "firstListItem", "firstListItemValue", "noMatchListItem", "allowNewTags", "noWhitelist", "isManual", "dropdownItemNoMatch", "isLoading", "readonly", "clearTimeout", "dropdownHide__bindEventsTimeout", "visible", "setStateSelection", "render", "overrideManual", "_this_DOM", "removeEventListener", "removeChild", "flaggedTags", "baseOffset", "toggle", "getAppendTarget", "height", "clone", "ddHeight", "cloneNode", "style", "cssText", "appendChild", "HTMLContent", "dropdownContent", "innerHTML", "newHeaderElem", "newFooterElem", "headerRef", "footerRef", "replaceChild", "rect", "top", "bottom", "left", "width", "ancestorsOffsets", "isPlacedAbove", "hasSpaceOnRight", "cssTop", "cssLeft", "ddElm", "isRTL", "RTL", "isDefaultAppendTarget", "isSelfAppended", "appendTargetScrollTop", "pageYOffset", "root", "fullscreenElement", "webkitFullscreenElement", "documentElement", "viewportHeight", "viewportWidth", "clientWidth", "innerWidth", "positionTo", "ddTarget", "r2", "r", "startContainer", "offset", "startOffset", "createRange", "setStart", "setEnd", "getBoundingClientRect", "right", "getCaretGlobalPosition", "offsetLeft", "accumulatedAncestorsScrollTop", "ceil", "placeAbove", "pageXOffset", "STORE_KEY", "TEXTS", "exceed", "duplicate", "notAllowed", "wrapper", "disabled", "required", "placeholder", "param", "title", "class", "getAttributes", "_t", "hasMore", "V", "R", "F", "H", "B", "W", "U", "customBinding", "customEventsList", "name", "on", "mainEvents", "eventName", "main", "bindGlobal", "isJQueryPlugin", "jQuery", "originalInput", "removeAllTags", "keydown", "onKeydown", "click", "onClickScope", "dblclick", "onDoubleClickScope", "paste", "onPaste", "drop", "onDrop", "compositionstart", "onCompositionStart", "compositionend", "onCompositionEnd", "inputMutationObserver", "MutationObserver", "onInputDOMChange", "disconnect", "observe", "childList", "bindOriginaInputListener", "delay", "DELAY", "clearInterval", "originalInputValueObserverInterval", "setInterval", "observeOriginalInputValue", "unbind", "global", "isIE", "cb", "onWindowKeyDown", "onFocusBlur", "onClickAnywhere", "useCapture", "unbindGlobal", "_this_value_", "_this_value", "nodeTag", "relatedTarget", "targetIsTagNode", "isTargetXBtn", "isFocused", "lostFocus", "Date", "text", "textContent", "currentDisplayValue", "ddEnabled", "eventData", "isTargetSelectOption", "isTargetAddNewBtn", "addNew", "postUpdate", "triggerChangeEvent", "dropdownCanBeShown", "tagTextSelector", "setRangeAtStartEnd", "loading", "firstTagNode", "getTagElms", "nextTag", "focusedElm", "activeElement", "isBelong", "isInputNode", "isReadyOnlyTag", "hasAttribute", "isDropdownVisible", "nextElementSibling", "targetIsRemoveBtn", "deleteKeyTagDetected", "anchorOffset", "anchorNode", "prevAnchorSibling", "isCaretAfterTag", "el", "createElement", "enc", "innerText", "lastTagElems", "tagBeforeCaret", "tagElmToBeDeleted", "firstTextNodeBeforeTag", "isZWS", "nodeValue", "previousElementSibling", "_instanceof", "Element", "nodeName", "collapseToEnd", "isManualDropdown", "blur", "inputSuggestion", "thingToAdd", "onInput", "onMixTagsInput", "showSuggestions", "inputElm", "validation", "validateTag", "toggleScopeValidation", "isValid", "search", "rangeText", "match", "matchedPatternCount", "matchFlaggedTag", "matchDelimiters", "lastTagsCount", "tagsElems", "fragment", "createDocumentFragment", "remainingTagsValues", "inputType", "createTagElem", "childNodes", "lastChild", "update", "withoutChangeEvent", "cloneRange", "focusNode", "endOffset", "lastIndexOf", "prefix", "onInputIE", "destroy", "tagifyValue", "loadOriginalValues", "closestTagifyDropdownElem", "dropdownSelector", "timeDiffFocus", "index", "getNodeIndex", "fixFirefoxLastTagNoCaret", "clipboardData", "pastedText", "getData", "interpolatedText", "convertPastedTextToMixTags", "parseMixTags", "skipDOM", "tagsData", "__tagifyTagsData", "addedTags", "onEditTagInput", "editableElm", "_obj", "tagElmIdx", "textValue", "dataForChangedProp", "_define_property", "__tagId", "editTagChangeDetected", "originalIsValid", "newValue", "onEditTagPaste", "newNode", "onEditTagClick", "onEditTagFocus", "onEditTagBlur", "isRelatedTargetNodeTag", "newTagData", "originalData", "__originalData", "hasChanged", "_obj1", "message", "onEditTagkeydown", "__originalHTML", "EDITED_TAG_BLUR_DELAY", "isEditingTag", "editable", "m", "lastInputChild", "record", "addedNodes", "addedNode", "outerHTML", "replaceWith", "newlineText", "nextNode", "anythingAfterNode", "removedNodes", "removedNode", "z", "X", "J", "G", "$", "Q", "Tagify", "mockInstance", "Proxy", "get", "id", "instance", "callbacksPerType", "addRemove", "op", "ev", "removeAllCustomListeners", "entries", "cbArr", "off", "opts", "cloneData", "triggerHandler", "cloneEvent", "prop", "HTMLElement", "CustomEvent", "detail", "dispatchEvent", "isFirefox", "documentMode", "getPersistedData", "localStorage", "persistedData", "customKey", "getItem", "JSON", "parse", "setPersistedData", "setItem", "stringify", "Event", "clearPersistedData", "base", "removeItem", "applySettings", "build", "getCSSVars", "autofocus", "helpers", "dataProps", "template", "setContentEditable", "generateClassSelectors", "currentName", "defineProperty", "mergedDefaults", "attrVal", "RegExp", "_delimiters", "_object_spread", "texts", "persistedWhitelist", "attrs", "getCustomAttributes", "propName", "output", "compStyle", "getComputedStyle", "CSSVars", "tagHideTransition", "unit", "pop", "getPropertyValue", "labelWrapper", "integrated", "originalInput_tabIndex", "tabIndex", "inputSelector", "insertBefore", "_this_DOM_scope_parentNode", "_this_listeners_main", "_this_listeners", "blockChangeEvent", "persistedOriginalValue", "tagName", "insertAdjacentHTML", "lastOriginalValueReported", "clonedEvent", "toggleClass", "force", "setPlaceholder", "str", "changed", "bubbles", "simulated", "_valueTracker", "setValue", "random", "start", "getTagTextNode", "setTagTextNode", "HTML", "getLastTag", "tagIdx", "skipValidation", "editTagToggleValidity", "removeTagsFromValue", "previousData", "replaceTag", "reCheckInvalidTags", "getInvalidTagAttrs", "newTagElm", "updateValueByDOMTags", "clsNames", "skipNodesWithClassNames", "cls", "injectedNode", "_this_state_selection", "insertedNodes", "appendMixTags", "caretTarget", "updateDOM", "hideDropdown", "validate", "source", "charAt", "suggestedText", "suggestionStart", "substr", "suggestionTrimmed", "substring", "dataSuggest", "replaceTextWithNode", "getTagIdx", "classess", "_sc", "tagNodes", "tagId", "dupsCount", "done", "getTagIndexByValue", "indices", "isCaseSensitive", "getTagElmByValue", "flashTag", "isTagBlacklisted", "x", "isTagWhitelisted", "getWhitelistItem", "_wi", "_wiv", "setReadonly", "attrribute", "contentEditable", "setDisabled", "isDisabled", "tagsItems", "_this_settings", "whitelistMatches", "whitelistWithProps", "isCollection", "mapStringToCollection", "acc", "trimmed", "itemCopy", "whitelistMatchesValues", "filteredItem", "matchObj", "tagsDataSet", "textProp", "preInterpolated", "maxTagsReached", "Error", "prefixPatterns", "prefixWhitelistMap", "normalizedPrefix", "originalItem", "searchValue", "sort", "patternRegex", "replacements", "exec", "startIndex", "afterPrefixIndex", "textAfterPrefix", "whitelistItems", "matchedItem", "matchedLength", "itemLength", "charAfterMatch", "replacement", "end", "lastIndex", "reverse", "newWrapperNode", "strToReplace", "nodeToReplace", "nodeAtCaret", "firstSplitOffset", "splitText", "prepareNewTagNode", "aggregatedInvalidInput", "tagElmParams", "__preInvalidData", "postProcessNewTagNode", "selectTag", "lastTagElm", "appendTag", "addEmptyTag", "initialData", "clearInput", "tagElems", "frag", "addMixTags", "newTagNode", "prefixedTextToTag", "children", "savedRange", "hasSavedSelection", "tagsPayload", "_this_state_tag", "newTag", "createdFromDelimiters", "insertBeforeNode", "extraData", "templateData", "textnode", "iter", "createNodeIterator", "NodeFilter", "SHOW_TEXT", "tagValidation", "tagElms", "silent", "tranDuration", "tagsToRemove", "elms", "__removed", "removeNode", "parseFloat", "clientTop", "reason", "removeTagsFromDOM", "splice", "updateCallback", "hasValue", "setOriginalInputValue", "debouncedUpdateTimeout", "inputValue", "getInputValue", "getCleanValue", "getMixedTagsAsString", "originalInputValueFormat", "that", "_interpolator", "iterateChildren", "rootNode", "removeTag", "tag_input_controller_default", "Controller", "dropdownFooterText", "Y", "values", "item", "suggestions", "additionalSuggestions", "__publicField", "toast_controller_default", "Controller", "Toast", "toggle_controller_default", "Controller", "selectedValue", "element", "event", "el", "__publicField", "toggle_radio_group_controller_default", "Controller", "label", "group", "btn", "__publicField", "tutorial_series_course_controller_default", "Controller", "__publicField", "tutorial_time_settings_controller_default", "Controller", "panel", "Collapse", "event", "nextValue", "radio", "selectedPanel", "selectedValue", "isSelected", "value", "open", "__publicField", "optionSelector", "activeSelector", "_Autocomplete", "Controller", "__publicField", "event", "handler", "item", "selected", "query", "url", "html", "error", "response", "debounce", "next", "options", "index", "sibling", "def", "target", "previouslySelected", "textValue", "value", "prefix", "el", "params", "Autocomplete", "fn", "delay", "timeoutId", "args", "typeahead_controller_default", "Autocomplete", "_event", "html", "__publicField", "import_debounce", "validation_controller_default", "Controller", "event", "input", "validator", "_index", "otherInputs", "indexOfTarget", "bool", "message", "otherField", "fieldStates", "selectors", "selector", "checker", "arr", "element", "inputValid", "ajaxData", "response", "inputs", "maxFileSize", "file", "values", "index", "__publicField", "application", "assignment_controller_default", "async_pick_controller_default", "auto_redirect_controller_default", "autosave_controller_default", "chartjs_controller_default", "checkbox_select_all_controller_default", "checkbox_to_form_controller_default", "clipboard_controller_default", "collapse_all_controller_default", "collapse_controller_default", "countdown_controller_default", "datatable_controller_default", "direct_upload_controller_default", "display_with_button_controller_default", "display_with_radio_button_controller_default", "drag_drop_controller_default", "dropdown_controller_default", "editor_controller_default", "editor_media_file_embed_controller_default", "element_statistics_controller_default", "fetch_html_controller_default", "filterable_controller_default", "form_leave_controller_default", "heartbeat_controller_default", "infinite_scroll_controller_default", "leave_page_controller_default", "lock_timeout_controller_default", "media_element_controller_default", "modal_controller_default", "modal_link_controller_default", "nav_tabs_scrollable_controller_default", "nested_form_controller_default", "no_paste_controller_default", "notification_controller_default", "password_show_toggle_controller_default", "pdf_summary_confirmation_controller_default", "popover_controller_default", "radio_check_controller_default", "readmore_controller_default", "resize_controller_default", "resource_lock_channel_controller_default", "sidebar_toggle_controller_default", "submit_on_enter_controller_default", "submit_other_form_controller_default", "sum_point_controller_default", "sync_pick_controller_default", "tag_input_controller_default", "toast_controller_default", "toggle_controller_default", "toggle_radio_group_controller_default", "tutorial_series_course_controller_default", "tutorial_time_settings_controller_default", "typeahead_controller_default", "validation_controller_default", "_defineProperty", "e", "r", "t", "_toPropertyKey", "ownKeys", "e", "r", "t", "o", "_objectSpread2", "_defineProperty", "_toPrimitive", "t", "r", "e", "i", "_toPropertyKey", "noop", "_WINDOW", "_DOCUMENT", "_MUTATION_OBSERVER", "_PERFORMANCE", "userAgent", "WINDOW", "DOCUMENT", "MUTATION_OBSERVER", "PERFORMANCE", "IS_BROWSER", "IS_DOM", "IS_IE", "p", "g", "S", "A", "P", "s", "t", "r", "o", "L", "G", "lt", "pt", "xt", "Ft", "St", "At", "Ct", "Lt", "Wt", "Et", "t$1", "r$1", "bt$1", "Yt", "ua", "I$1", "ga", "x", "Ia", "m$1", "c$1", "F$1", "ma", "a", "wa", "NAMESPACE_IDENTIFIER", "UNITS_IN_GRID", "DEFAULT_CSS_PREFIX", "DEFAULT_REPLACEMENT_CLASS", "DATA_FA_I2SVG", "DATA_FA_PSEUDO_ELEMENT", "DATA_FA_PSEUDO_ELEMENT_PENDING", "DATA_PREFIX", "DATA_ICON", "HTML_CLASS_I2SVG_BASE_CLASS", "MUTATION_APPROACH_ASYNC", "TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS", "PRODUCTION", "familyProxy", "obj", "target", "prop", "_PREFIX_TO_STYLE", "_objectSpread2", "PREFIX_TO_STYLE", "_STYLE_TO_PREFIX", "STYLE_TO_PREFIX", "_PREFIX_TO_LONG_STYLE", "PREFIX_TO_LONG_STYLE", "_LONG_STYLE_TO_PREFIX", "LONG_STYLE_TO_PREFIX", "ICON_SELECTION_SYNTAX_PATTERN", "LAYERS_TEXT_CLASSNAME", "FONT_FAMILY_PATTERN", "_FONT_WEIGHT_TO_PREFIX", "FONT_WEIGHT_TO_PREFIX", "ATTRIBUTES_WATCHED_FOR_MUTATION", "DUOTONE_CLASSES", "RESERVED_CLASSES", "initial", "getAttrConfig", "attr", "element", "coerce", "val", "_ref", "key", "_default", "_config", "config", "_onChangeCb", "cb", "onChange", "d$2", "meaninglessTransform", "insertCss", "css", "style", "headChildren", "beforeChild", "i", "child", "tagName", "idPool", "nextUniqueId", "size", "id", "toArray", "array", "classArray", "node", "htmlEscape", "str", "joinAttributes", "attributes", "acc", "attributeName", "joinStyles", "styles", "styleName", "transformIsMeaningful", "transform", "transformForSvg", "containerWidth", "iconWidth", "outer", "innerTranslate", "innerScale", "innerRotate", "inner", "path", "transformForCss", "_ref2", "width", "height", "startCentered", "baseStyles", "dcp", "drc", "fp", "rc", "dPatt", "customPropPatt", "rPatt", "_cssInserted", "ensureCss", "InjectCSS", "w", "namespace", "functions", "listener", "loaded", "fn", "domready", "toHtml", "abstractNodes", "tag", "children", "iconFromMapping", "mapping", "prefix", "iconName", "bindInternal4", "func", "thisContext", "b", "c", "d", "reduce", "subject", "initialValue", "keys", "length", "iterator", "result", "ucs2decode", "string", "output", "counter", "value", "extra", "toHex", "unicode", "decoded", "codePointAt", "index", "first", "second", "normalizeIcons", "icons", "icon", "defineIcons", "params", "skipHooks", "normalized", "styles", "shims", "namespace", "FAMILY_NAMES", "PREFIX_TO_LONG_STYLE", "PREFIXES_FOR_FAMILY", "acc", "familyId", "_defaultUsablePrefix", "_byUnicode", "_byLigature", "_byOldName", "_byOldUnicode", "_byAlias", "isReserved", "name", "RESERVED_CLASSES", "getIconName", "cssPrefix", "cls", "parts", "prefix", "iconName", "build", "lookup", "reducer", "reduce", "o$$1", "style", "icon", "a$$1", "alias", "aliases", "hasRegular", "config", "shimLookups", "shim", "maybeNameMaybeUnicode", "getCanonicalPrefix", "onChange", "c$$1", "byUnicode", "unicode", "byLigature", "ligature", "byAlias", "byOldName", "byOldUnicode", "oldUnicode", "newUnicode", "getDefaultUsablePrefix", "emptyCanonicalIcon", "getFamilyId", "values", "family", "s", "famProps", "L", "v$$1", "styleOrPrefix", "params", "PREFIX_TO_STYLE", "t", "STYLE_TO_PREFIX", "defined", "moveNonFaClassesToRest", "classNames", "rest", "result", "sortedUniqueValues", "arr", "value", "index", "getCanonicalIcon", "skipLookups", "givenPrefix", "faCombinedClasses", "Ia", "bt$1", "faStyleOrFamilyClasses", "nonStyleOrFamilyClasses", "faStyles", "P", "styleFromValues", "canonical", "_objectSpread2", "getDefaultCanonicalPrefix", "applyShimAndAlias", "aliasIconName", "newCanonicalFamilies", "newCanonicalStyles", "ga", "key", "prefixOptions", "config$$1", "isDuotoneFamily", "valuesHasDuotone", "defaultFamilyIsDuotone", "canonicalPrefixIsDuotone", "defaultPrefix", "pt", "Library", "_len", "definitions", "_key", "additions", "defineIcons", "longPrefix", "definition", "normalized", "_plugins", "_hooks", "providers", "defaultProviderKeys", "registerPlugins", "nextPlugins", "_ref", "obj", "k", "plugin", "mixout", "tk", "sk", "hooks", "hook", "chainHooks", "accumulator", "args", "hookFn", "callHooks", "_len2", "_key2", "callProvided", "findIconDefinition", "iconLookup", "iconFromMapping", "library", "noAuto", "dom", "IS_DOM", "autoReplaceSvgRoot", "domready", "autoReplace", "parse", "ICON_SELECTION_SYNTAX_PATTERN", "canonicalIcon", "api", "toHtml", "DOCUMENT", "domVariants", "val", "abstractCreator", "a", "container", "asIcon", "children", "main", "mask", "attributes", "transform", "transformIsMeaningful", "width", "height", "offset", "joinStyles", "asSymbol", "symbol", "id", "makeInlineSvgAbstract", "title", "maskId", "titleId", "extra", "watchable", "isUploadedIcon", "Lt", "attrClass", "content", "uploadedIconWidthStyle", "DATA_FA_I2SVG", "nextUniqueId", "makeLayersTextAbstract", "transformForCss", "styleString", "makeLayersCounterAbstract", "styles$1", "asFoundIcon", "vectorData", "element", "DUOTONE_CLASSES", "missingIconResolutionMixin", "maybeNotifyMissing", "PRODUCTION", "findIcon", "resolve", "reject", "noop$1", "p$2", "PERFORMANCE", "preamble", "begin", "end", "perf", "noop$2", "isWatched", "node", "hasPrefixAndIcon", "DATA_PREFIX", "DATA_ICON", "hasBeenReplaced", "getMutator", "mutators", "createElementNS", "tag", "createElement", "convertSVG", "abstractObj", "ceFn", "child", "nodeAsComment", "comment", "mutation", "abstract", "classArray", "forSvg", "splitClasses", "newInnerHTML", "performOperationSync", "op", "perform", "mutations", "callback", "callbackFunction", "frame", "MUTATION_APPROACH_ASYNC", "WINDOW", "mutator", "mark", "disabled", "disableObservation", "enableObservation", "mo", "observe", "options", "MUTATION_OBSERVER", "treeCallback", "nodeCallback", "pseudoElementsCallback", "observeMutationsRoot", "objects", "toArray", "mutationRecord", "ATTRIBUTES_WATCHED_FOR_MUTATION", "disconnect", "styleParser", "prop", "classParser", "existingPrefix", "existingIconName", "innerText", "toHex", "attributesParser", "extraAttributes", "attr", "blankMeta", "meaninglessTransform", "parseMeta", "parser", "extraClasses", "pluginMeta", "extraStyles", "styles$2", "generateMutation", "nodeMeta", "LAYERS_TEXT_CLASSNAME", "getKnownPrefixes", "Ft", "onTree", "root", "htmlClassList", "hclAdd", "suffix", "HTML_CLASS_I2SVG_BASE_CLASS", "hclRemove", "prefixes", "prefixesDomQuery", "p$$1", "candidates", "e$$1", "resolvedMutations", "onNode", "resolveIcons", "next", "maybeIconDefinition", "iconDefinition", "render", "classes", "ReplaceElements", "providers$$1", "_ref2", "nextChild", "Layers", "assembler", "LayersCounter", "LayersText", "IS_IE", "computedFontSize", "boundingClientRect", "CLEAN_CONTENT_PATTERN", "SECONDARY_UNICODE_RANGE", "_FONT_FAMILY_WEIGHT_TO_PREFIX", "lt", "wa", "Yt", "FONT_FAMILY_WEIGHT_TO_PREFIX", "FONT_FAMILY_WEIGHT_FALLBACK", "fontFamily", "weights", "hexValueFromContent", "cleaned", "codePoint", "codePointAt", "isPrependTen", "isDoubled", "getPrefix", "fontWeight", "fontFamilySanitized", "fontWeightInteger", "fontWeightSanitized", "replaceForPosition", "position", "pendingAttribute", "DATA_FA_PSEUDO_ELEMENT_PENDING", "alreadyProcessedPseudoElement", "DATA_FA_PSEUDO_ELEMENT", "fontFamilyMatch", "FONT_FAMILY_PATTERN", "hexValue", "isSecondary", "isV4", "iconIdentifier", "iconName4", "meta", "replace", "processable", "TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS", "searchPseudoElements", "operations", "PseudoElements", "_unwatched", "MutationObserver$1", "parseTransformString", "transformString", "n", "first", "PowerTransforms", "containerWidth", "iconWidth", "outer", "innerTranslate", "innerScale", "innerRotate", "inner", "path", "ALL_SPACE", "fillBlack", "force", "deGroup", "Masks", "maskData", "i", "explicitMaskId", "mainWidth", "mainPath", "maskWidth", "maskPath", "trans", "transformForSvg", "maskRect", "maskInnerGroupChildrenMixin", "maskInnerGroup", "maskOuterGroup", "clipId", "maskTag", "defs", "MissingIconIndicator", "reduceMotion", "gChildren", "FILL", "ANIMATION_BASE", "OPACITY_ANIMATE", "dot", "SvgSymbols", "symbolData", "plugins", "InjectCSS", "noAuto$1", "config$1", "library$1", "dom$1", "parse$1", "findIconDefinition$1", "toHtml$1", "layer", "text", "counter", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", "fa6", "fa7", "fa8", "fa9", "faFillDrip", "faArrowsToCircle", "faCircleChevronRight", "faChevronCircleRight", "faAt", "faTrashCan", "faTrashAlt", "faTextHeight", "faUserXmark", "faUserTimes", "faStethoscope", "faMessage", "faCommentAlt", "faInfo", "faDownLeftAndUpRightToCenter", "faCompressAlt", "faExplosion", "faFileLines", "faFileAlt", "faFileText", "faWaveSquare", "faRing", "faBuildingUn", "faDiceThree", "faCalendarDays", "faCalendarAlt", "faAnchorCircleCheck", "faBuildingCircleArrowRight", "faVolleyball", "faVolleyballBall", "faArrowsUpToLine", "faSortDown", "faSortDesc", "faCircleMinus", "faMinusCircle", "faDoorOpen", "faRightFromBracket", "faSignOutAlt", "faAtom", "faSoap", "faIcons", "faHeartMusicCameraBolt", "faMicrophoneLinesSlash", "faMicrophoneAltSlash", "faBridgeCircleCheck", "faPumpMedical", "faFingerprint", "faHandPointRight", "faMagnifyingGlassLocation", "faSearchLocation", "faForwardStep", "faStepForward", "faFaceSmileBeam", "faSmileBeam", "faFlagCheckered", "faFootball", "faFootballBall", "faSchoolCircleExclamation", "faCrop", "faAnglesDown", "faAngleDoubleDown", "faUsersRectangle", "faPeopleRoof", "faPeopleLine", "faBeerMugEmpty", "faBeer", "faDiagramPredecessor", "faArrowUpLong", "faLongArrowUp", "faFireFlameSimple", "faBurn", "faPerson", "faMale", "faLaptop", "faFileCsv", "faMenorah", "faTruckPlane", "faRecordVinyl", "faFaceGrinStars", "faGrinStars", "faBong", "faSpaghettiMonsterFlying", "faPastafarianism", "faArrowDownUpAcrossLine", "faSpoon", "faUtensilSpoon", "faJarWheat", "faEnvelopesBulk", "faMailBulk", "faFileCircleExclamation", "faCircleH", "faHospitalSymbol", "faPager", "faAddressBook", "faContactBook", "faStrikethrough", "faK", "faLandmarkFlag", "faPencil", "faPencilAlt", "faBackward", "faCaretRight", "faComments", "faPaste", "faFileClipboard", "faCodePullRequest", "faClipboardList", "faTruckRampBox", "faTruckLoading", "faUserCheck", "faVialVirus", "faSheetPlastic", "faBlog", "faUserNinja", "faPersonArrowUpFromLine", "faScrollTorah", "faTorah", "faBroomBall", "faQuidditch", "faQuidditchBroomBall", "faToggleOff", "faBoxArchive", "faArchive", "faPersonDrowning", "faArrowDown91", "faSortNumericDesc", "faSortNumericDownAlt", "faFaceGrinTongueSquint", "faGrinTongueSquint", "faSprayCan", "faTruckMonster", "faW", "faEarthAfrica", "faGlobeAfrica", "faRainbow", "faCircleNotch", "faTabletScreenButton", "faTabletAlt", "faPaw", "faCloud", "faTrowelBricks", "faFaceFlushed", "faFlushed", "faHospitalUser", "faTentArrowLeftRight", "faGavel", "faLegal", "faBinoculars", "faMicrophoneSlash", "faBoxTissue", "faMotorcycle", "faBellConcierge", "faConciergeBell", "faPenRuler", "faPencilRuler", "faPeopleArrows", "faPeopleArrowsLeftRight", "faMarsAndVenusBurst", "faSquareCaretRight", "faCaretSquareRight", "faScissors", "faCut", "faSunPlantWilt", "faToiletsPortable", "faHockeyPuck", "faTable", "faMagnifyingGlassArrowRight", "faTachographDigital", "faDigitalTachograph", "faUsersSlash", "faClover", "faReply", "faMailReply", "faStarAndCrescent", "faHouseFire", "faSquareMinus", "faMinusSquare", "faHelicopter", "faCompass", "faSquareCaretDown", "faCaretSquareDown", "faFileCircleQuestion", "faLaptopCode", "faSwatchbook", "faPrescriptionBottle", "faBars", "faNavicon", "faPeopleGroup", "faHourglassEnd", "faHourglass3", "faHeartCrack", "faHeartBroken", "faSquareUpRight", "faExternalLinkSquareAlt", "faFaceKissBeam", "faKissBeam", "faFilm", "faRulerHorizontal", "faPeopleRobbery", "faLightbulb", "faCaretLeft", "faCircleExclamation", "faExclamationCircle", "faSchoolCircleXmark", "faArrowRightFromBracket", "faSignOut", "faCircleChevronDown", "faChevronCircleDown", "faUnlockKeyhole", "faUnlockAlt", "faCloudShowersHeavy", "faHeadphonesSimple", "faHeadphonesAlt", "faSitemap", "faCircleDollarToSlot", "faDonate", "faMemory", "faRoadSpikes", "faFireBurner", "faFlag", "faHanukiah", "faFeather", "faVolumeLow", "faVolumeDown", "faCommentSlash", "faCloudSunRain", "faCompress", "faWheatAwn", "faWheatAlt", "faAnkh", "faHandsHoldingChild", "faAsterisk", "faSquareCheck", "faCheckSquare", "faPesetaSign", "faHeading", "faHeader", "faGhost", "faList", "faListSquares", "faSquarePhoneFlip", "faPhoneSquareAlt", "faCartPlus", "faGamepad", "faCircleDot", "faDotCircle", "faFaceDizzy", "faDizzy", "faEgg", "faHouseMedicalCircleXmark", "faCampground", "faFolderPlus", "faFutbol", "faFutbolBall", "faSoccerBall", "faPaintbrush", "faPaintBrush", "faLock", "faGasPump", "faHotTubPerson", "faHotTub", "faMapLocation", "faMapMarked", "faHouseFloodWater", "faTree", "faBridgeLock", "faSackDollar", "faPenToSquare", "faEdit", "faCarSide", "faShareNodes", "faShareAlt", "faHeartCircleMinus", "faHourglassHalf", "faHourglass2", "faMicroscope", "faSink", "faBagShopping", "faShoppingBag", "faArrowDownZA", "faSortAlphaDesc", "faSortAlphaDownAlt", "faMitten", "faPersonRays", "faUsers", "faEyeSlash", "faFlaskVial", "faHand", "faHandPaper", "faOm", "faWorm", "faHouseCircleXmark", "faPlug", "faChevronUp", "faHandSpock", "faStopwatch", "faFaceKiss", "faKiss", "faBridgeCircleXmark", "faFaceGrinTongue", "faGrinTongue", "faChessBishop", "faFaceGrinWink", "faGrinWink", "faEarDeaf", "faDeaf", "faDeafness", "faHardOfHearing", "faRoadCircleCheck", "faDiceFive", "faSquareRss", "faRssSquare", "faLandMineOn", "faICursor", "faStamp", "faStairs", "faI", "faHryvniaSign", "faHryvnia", "faPills", "faFaceGrinWide", "faGrinAlt", "faTooth", "faV", "faBangladeshiTakaSign", "faBicycle", "faStaffSnake", "faRodAsclepius", "faRodSnake", "faStaffAesculapius", "faHeadSideCoughSlash", "faTruckMedical", "faAmbulance", "faWheatAwnCircleExclamation", "faSnowman", "faMortarPestle", "faRoadBarrier", "faSchool", "faIgloo", "faJoint", "faAngleRight", "faHorse", "faQ", "faG", "faNotesMedical", "faTemperatureHalf", "faTemperature2", "faThermometer2", "faThermometerHalf", "faDongSign", "faCapsules", "faPooStorm", "faPooBolt", "faFaceFrownOpen", "faFrownOpen", "faHandPointUp", "faMoneyBill", "faBookmark", "faAlignJustify", "faUmbrellaBeach", "faHelmetUn", "faBullseye", "faBacon", "faHandPointDown", "faArrowUpFromBracket", "faFolder", "faFolderBlank", "faFileWaveform", "faFileMedicalAlt", "faRadiation", "faChartSimple", "faMarsStroke", "faVial", "faGauge", "faDashboard", "faGaugeMed", "faTachometerAltAverage", "faWandMagicSparkles", "faMagicWandSparkles", "faE", "faPenClip", "faPenAlt", "faBridgeCircleExclamation", "faUser", "faSchoolCircleCheck", "faDumpster", "faVanShuttle", "faShuttleVan", "faBuildingUser", "faSquareCaretLeft", "faCaretSquareLeft", "faHighlighter", "faKey", "faBullhorn", "faGlobe", "faSynagogue", "faPersonHalfDress", "faRoadBridge", "faLocationArrow", "faC", "faTabletButton", "faBuildingLock", "faPizzaSlice", "faMoneyBillWave", "faChartArea", "faAreaChart", "faHouseFlag", "faPersonCircleMinus", "faBan", "faCancel", "faCameraRotate", "faSprayCanSparkles", "faAirFreshener", "faStar", "faRepeat", "faCross", "faBox", "faVenusMars", "faArrowPointer", "faMousePointer", "faMaximize", "faExpandArrowsAlt", "faChargingStation", "faShapes", "faTriangleCircleSquare", "faShuffle", "faRandom", "faPersonRunning", "faRunning", "faMobileRetro", "faGripLinesVertical", "faSpider", "faHandsBound", "faFileInvoiceDollar", "faPlaneCircleExclamation", "faXRay", "faSpellCheck", "faSlash", "faComputerMouse", "faMouse", "faArrowRightToBracket", "faSignIn", "faShopSlash", "faStoreAltSlash", "faServer", "faVirusCovidSlash", "faShopLock", "faHourglassStart", "faHourglass1", "faBlenderPhone", "faBuildingWheat", "faPersonBreastfeeding", "faRightToBracket", "faSignInAlt", "faVenus", "faPassport", "faThumbtackSlash", "faThumbTackSlash", "faHeartPulse", "faHeartbeat", "faPeopleCarryBox", "faPeopleCarry", "faTemperatureHigh", "faMicrochip", "faCrown", "faWeightHanging", "faXmarksLines", "faFilePrescription", "faWeightScale", "faWeight", "faUserGroup", "faUserFriends", "faArrowUpAZ", "faSortAlphaUp", "faChessKnight", "faFaceLaughSquint", "faLaughSquint", "faWheelchair", "faCircleArrowUp", "faArrowCircleUp", "faToggleOn", "faPersonWalking", "faWalking", "faL", "faFire", "faBedPulse", "faProcedures", "faShuttleSpace", "faSpaceShuttle", "faFaceLaugh", "faLaugh", "faFolderOpen", "faHeartCirclePlus", "faCodeFork", "faCity", "faMicrophoneLines", "faMicrophoneAlt", "faPepperHot", "faUnlock", "faColonSign", "faHeadset", "faStoreSlash", "faRoadCircleXmark", "faUserMinus", "faMarsStrokeUp", "faMarsStrokeV", "faChampagneGlasses", "faGlassCheers", "faClipboard", "faHouseCircleExclamation", "faFileArrowUp", "faFileUpload", "faWifi", "faWifi3", "faWifiStrong", "faBath", "faBathtub", "faUnderline", "faUserPen", "faUserEdit", "faSignature", "faStroopwafel", "faBold", "faAnchorLock", "faBuildingNgo", "faManatSign", "faNotEqual", "faBorderTopLeft", "faBorderStyle", "faMapLocationDot", "faMapMarkedAlt", "faJedi", "faSquarePollVertical", "faPoll", "faMugHot", "faCarBattery", "faBatteryCar", "faGift", "faDiceTwo", "faChessQueen", "faGlasses", "faChessBoard", "faBuildingCircleCheck", "faPersonChalkboard", "faMarsStrokeRight", "faMarsStrokeH", "faHandBackFist", "faHandRock", "faSquareCaretUp", "faCaretSquareUp", "faCloudShowersWater", "faChartBar", "faBarChart", "faHandsBubbles", "faHandsWash", "faLessThanEqual", "faTrain", "faEyeLowVision", "faLowVision", "faCrow", "faSailboat", "faWindowRestore", "faSquarePlus", "faPlusSquare", "faToriiGate", "faFrog", "faBucket", "faImage", "faMicrophone", "faCow", "faCaretUp", "faScrewdriver", "faFolderClosed", "faHouseTsunami", "faSquareNfi", "faArrowUpFromGroundWater", "faMartiniGlass", "faGlassMartiniAlt", "faSquareBinary", "faRotateLeft", "faRotateBack", "faRotateBackward", "faUndoAlt", "faTableColumns", "faColumns", "faLemon", "faHeadSideMask", "faHandshake", "faGem", "faDolly", "faDollyBox", "faSmoking", "faMinimize", "faCompressArrowsAlt", "faMonument", "faSnowplow", "faAnglesRight", "faAngleDoubleRight", "faCannabis", "faCirclePlay", "faPlayCircle", "faTablets", "faEthernet", "faEuroSign", "faEur", "faEuro", "faChair", "faCircleCheck", "faCheckCircle", "faCircleStop", "faStopCircle", "faCompassDrafting", "faDraftingCompass", "faPlateWheat", "faIcicles", "faPersonShelter", "faNeuter", "faIdBadge", "faMarker", "faFaceLaughBeam", "faLaughBeam", "faHelicopterSymbol", "faUniversalAccess", "faCircleChevronUp", "faChevronCircleUp", "faLariSign", "faVolcano", "faPersonWalkingDashedLineArrowRight", "faSterlingSign", "faGbp", "faPoundSign", "faViruses", "faSquarePersonConfined", "faUserTie", "faArrowDownLong", "faLongArrowDown", "faTentArrowDownToLine", "faCertificate", "faReplyAll", "faMailReplyAll", "faSuitcase", "faPersonSkating", "faSkating", "faFilterCircleDollar", "faFunnelDollar", "faCameraRetro", "faCircleArrowDown", "faArrowCircleDown", "faFileImport", "faArrowRightToFile", "faSquareArrowUpRight", "faExternalLinkSquare", "faBoxOpen", "faScroll", "faSpa", "faLocationPinLock", "faPause", "faHillAvalanche", "faTemperatureEmpty", "faTemperature0", "faThermometer0", "faThermometerEmpty", "faBomb", "faRegistered", "faAddressCard", "faContactCard", "faVcard", "faScaleUnbalancedFlip", "faBalanceScaleRight", "faSubscript", "faDiamondTurnRight", "faDirections", "faBurst", "faHouseLaptop", "faLaptopHouse", "faFaceTired", "faTired", "faMoneyBills", "faSmog", "faCrutch", "faFontAwesome", "faFontAwesomeFlag", "faFontAwesomeLogoFull", "faCloudArrowUp", "faCloudUpload", "faCloudUploadAlt", "faPalette", "faArrowsTurnRight", "faVest", "faFerry", "faArrowsDownToPeople", "faSeedling", "faSprout", "faLeftRight", "faArrowsAltH", "faBoxesPacking", "faCircleArrowLeft", "faArrowCircleLeft", "faGroupArrowsRotate", "faBowlFood", "faCandyCane", "faArrowDownWideShort", "faSortAmountAsc", "faSortAmountDown", "faCloudBolt", "faThunderstorm", "faTextSlash", "faRemoveFormat", "faFaceSmileWink", "faSmileWink", "faFileWord", "faFilePowerpoint", "faArrowsLeftRight", "faArrowsH", "faHouseLock", "faCloudArrowDown", "faCloudDownload", "faCloudDownloadAlt", "faChildren", "faChalkboard", "faBlackboard", "faUserLargeSlash", "faUserAltSlash", "faEnvelopeOpen", "faHandshakeSimpleSlash", "faHandshakeAltSlash", "faMattressPillow", "faGuaraniSign", "faArrowsRotate", "faRefresh", "faSync", "faFireExtinguisher", "faCruzeiroSign", "faGreaterThanEqual", "faShieldHalved", "faShieldAlt", "faBookAtlas", "faAtlas", "faVirus", "faEnvelopeCircleCheck", "faLayerGroup", "faArrowsToDot", "faArchway", "faHeartCircleCheck", "faHouseChimneyCrack", "faHouseDamage", "faFileZipper", "faFileArchive", "faSquare", "faMartiniGlassEmpty", "faGlassMartini", "faCouch", "faCediSign", "faItalic", "faTableCellsColumnLock", "faChurch", "faCommentsDollar", "faDemocrat", "faZ", "faPersonSkiing", "faSkiing", "faRoadLock", "faA", "faTemperatureArrowDown", "faTemperatureDown", "faFeatherPointed", "faFeatherAlt", "faP", "faSnowflake", "faNewspaper", "faRectangleAd", "faAd", "faCircleArrowRight", "faArrowCircleRight", "faFilterCircleXmark", "faLocust", "faSort", "faUnsorted", "faListOl", "faList12", "faListNumeric", "faPersonDressBurst", "faMoneyCheckDollar", "faMoneyCheckAlt", "faVectorSquare", "faBreadSlice", "faLanguage", "faFaceKissWinkHeart", "faKissWinkHeart", "faFilter", "faQuestion", "faFileSignature", "faUpDownLeftRight", "faArrowsAlt", "faHouseChimneyUser", "faHandHoldingHeart", "faPuzzlePiece", "faMoneyCheck", "faStarHalfStroke", "faStarHalfAlt", "faCode", "faWhiskeyGlass", "faGlassWhiskey", "faBuildingCircleExclamation", "faMagnifyingGlassChart", "faArrowUpRightFromSquare", "faExternalLink", "faCubesStacked", "faWonSign", "faKrw", "faWon", "faVirusCovid", "faAustralSign", "faF", "faLeaf", "faRoad", "faTaxi", "faCab", "faPersonCirclePlus", "faChartPie", "faPieChart", "faBoltLightning", "faSackXmark", "faFileExcel", "faFileContract", "faFishFins", "faBuildingFlag", "faFaceGrinBeam", "faGrinBeam", "faObjectUngroup", "faPoop", "faLocationPin", "faMapMarker", "faKaaba", "faToiletPaper", "faHelmetSafety", "faHardHat", "faHatHard", "faEject", "faCircleRight", "faArrowAltCircleRight", "faPlaneCircleCheck", "faFaceRollingEyes", "faMehRollingEyes", "faObjectGroup", "faChartLine", "faLineChart", "faMaskVentilator", "faArrowRight", "faSignsPost", "faMapSigns", "faCashRegister", "faPersonCircleQuestion", "faH", "faTarp", "faScrewdriverWrench", "faTools", "faArrowsToEye", "faPlugCircleBolt", "faHeart", "faMarsAndVenus", "faHouseUser", "faHomeUser", "faDumpsterFire", "faHouseCrack", "faMartiniGlassCitrus", "faCocktail", "faFaceSurprise", "faSurprise", "faBottleWater", "faCirclePause", "faPauseCircle", "faToiletPaperSlash", "faAppleWhole", "faAppleAlt", "faKitchenSet", "faR", "faTemperatureQuarter", "faTemperature1", "faThermometer1", "faThermometerQuarter", "faCube", "faBitcoinSign", "faShieldDog", "faSolarPanel", "faLockOpen", "faElevator", "faMoneyBillTransfer", "faMoneyBillTrendUp", "faHouseFloodWaterCircleArrowRight", "faSquarePollHorizontal", "faPollH", "faCircle", "faBackwardFast", "faFastBackward", "faRecycle", "faUserAstronaut", "faPlaneSlash", "faTrademark", "faBasketball", "faBasketballBall", "faSatelliteDish", "faCircleUp", "faArrowAltCircleUp", "faMobileScreenButton", "faMobileAlt", "faVolumeHigh", "faVolumeUp", "faUsersRays", "faWallet", "faClipboardCheck", "faFileAudio", "faBurger", "faHamburger", "faWrench", "faBugs", "faRupeeSign", "faRupee", "faFileImage", "faCircleQuestion", "faQuestionCircle", "faPlaneDeparture", "faHandshakeSlash", "faBookBookmark", "faCodeBranch", "faHatCowboy", "faBridge", "faPhoneFlip", "faPhoneAlt", "faTruckFront", "faCat", "faAnchorCircleExclamation", "faTruckField", "faRoute", "faClipboardQuestion", "faPanorama", "faCommentMedical", "faTeethOpen", "faFileCircleMinus", "faTags", "faWineGlass", "faForwardFast", "faFastForward", "faFaceMehBlank", "faMehBlank", "faSquareParking", "faParking", "faHouseSignal", "faBarsProgress", "faTasksAlt", "faFaucetDrip", "faCartFlatbed", "faDollyFlatbed", "faBanSmoking", "faSmokingBan", "faTerminal", "faMobileButton", "faHouseMedicalFlag", "faBasketShopping", "faShoppingBasket", "faTape", "faBusSimple", "faBusAlt", "faEye", "faFaceSadCry", "faSadCry", "faAudioDescription", "faPersonMilitaryToPerson", "faFileShield", "faUserSlash", "faPen", "faTowerObservation", "faFileCode", "faSignal", "faSignal5", "faSignalPerfect", "faBus", "faHeartCircleXmark", "faHouseChimney", "faHomeLg", "faWindowMaximize", "faFaceFrown", "faFrown", "faPrescription", "faShop", "faStoreAlt", "faFloppyDisk", "faSave", "faVihara", "faScaleUnbalanced", "faBalanceScaleLeft", "faSortUp", "faSortAsc", "faCommentDots", "faCommenting", "faPlantWilt", "faDiamond", "faFaceGrinSquint", "faGrinSquint", "faHandHoldingDollar", "faHandHoldingUsd", "faChartDiagram", "faBacterium", "faHandPointer", "faDrumSteelpan", "faHandScissors", "faHandsPraying", "faPrayingHands", "faArrowRotateRight", "faArrowRightRotate", "faArrowRotateForward", "faRedo", "faWebAwesome", "faBiohazard", "faLocationCrosshairs", "faLocation", "faMarsDouble", "faChildDress", "faUsersBetweenLines", "faLungsVirus", "faFaceGrinTears", "faGrinTears", "faPhone", "faCalendarXmark", "faCalendarTimes", "faChildReaching", "faHeadSideVirus", "faUserGear", "faUserCog", "faArrowUp19", "faSortNumericUp", "faDoorClosed", "faShieldVirus", "faDiceSix", "faMosquitoNet", "faFileFragment", "faBridgeWater", "faPersonBooth", "faTextWidth", "faHatWizard", "faPenFancy", "faPersonDigging", "faDigging", "faTrash", "faGaugeSimple", "faGaugeSimpleMed", "faTachometerAverage", "faBookMedical", "faPoo", "faQuoteRight", "faQuoteRightAlt", "faShirt", "faTShirt", "faTshirt", "faCubes", "faDivide", "faTengeSign", "faTenge", "faHeadphones", "faHandsHolding", "faHandsClapping", "faRepublican", "faArrowLeft", "faPersonCircleXmark", "faRuler", "faAlignLeft", "faDiceD6", "faRestroom", "faJ", "faUsersViewfinder", "faFileVideo", "faUpRightFromSquare", "faExternalLinkAlt", "faTableCells", "faTh", "faFilePdf", "faBookBible", "faBible", "faO", "faSuitcaseMedical", "faMedkit", "faUserSecret", "faOtter", "faPersonDress", "faFemale", "faCommentDollar", "faBusinessTime", "faBriefcaseClock", "faTableCellsLarge", "faThLarge", "faBookTanakh", "faTanakh", "faPhoneVolume", "faVolumeControlPhone", "faHatCowboySide", "faClipboardUser", "faChild", "faLiraSign", "faSatellite", "faPlaneLock", "faTag", "faComment", "faCakeCandles", "faBirthdayCake", "faCake", "faEnvelope", "faAnglesUp", "faAngleDoubleUp", "faPaperclip", "faArrowRightToCity", "faRibbon", "faLungs", "faArrowUp91", "faSortNumericUpAlt", "faLitecoinSign", "faBorderNone", "faCircleNodes", "faParachuteBox", "faIndent", "faTruckFieldUn", "faHourglass", "faHourglassEmpty", "faMountain", "faUserDoctor", "faUserMd", "faCircleInfo", "faInfoCircle", "faCloudMeatball", "faCamera", "faCameraAlt", "faSquareVirus", "faMeteor", "faCarOn", "faSleigh", "faArrowDown19", "faSortNumericAsc", "faSortNumericDown", "faHandHoldingDroplet", "faHandHoldingWater", "faWater", "faCalendarCheck", "faBraille", "faPrescriptionBottleMedical", "faPrescriptionBottleAlt", "faLandmark", "faTruck", "faCrosshairs", "faPersonCane", "faTent", "faVestPatches", "faCheckDouble", "faArrowDownAZ", "faSortAlphaAsc", "faSortAlphaDown", "faMoneyBillWheat", "faCookie", "faArrowRotateLeft", "faArrowLeftRotate", "faArrowRotateBack", "faArrowRotateBackward", "faUndo", "faHardDrive", "faHdd", "faFaceGrinSquintTears", "faGrinSquintTears", "faDumbbell", "faRectangleList", "faListAlt", "faTarpDroplet", "faHouseMedicalCircleCheck", "faPersonSkiingNordic", "faSkiingNordic", "faCalendarPlus", "faPlaneArrival", "faCircleLeft", "faArrowAltCircleLeft", "faTrainSubway", "faSubway", "faChartGantt", "faIndianRupeeSign", "faIndianRupee", "faInr", "faCropSimple", "faCropAlt", "faMoneyBill1", "faMoneyBillAlt", "faLeftLong", "faLongArrowAltLeft", "faDna", "faVirusSlash", "faMinus", "faSubtract", "faChess", "faArrowLeftLong", "faLongArrowLeft", "faPlugCircleCheck", "faStreetView", "faFrancSign", "faVolumeOff", "faHandsAslInterpreting", "faAmericanSignLanguageInterpreting", "faAslInterpreting", "faHandsAmericanSignLanguageInterpreting", "faGear", "faCog", "faDropletSlash", "faTintSlash", "faMosque", "faMosquito", "faStarOfDavid", "faPersonMilitaryRifle", "faCartShopping", "faShoppingCart", "faVials", "faPlugCirclePlus", "faPlaceOfWorship", "faGripVertical", "faHexagonNodes", "faArrowTurnUp", "faLevelUp", "faU", "faSquareRootVariable", "faSquareRootAlt", "faClock", "faClockFour", "faBackwardStep", "faStepBackward", "faPallet", "faFaucet", "faBaseballBatBall", "faS", "faTimeline", "faKeyboard", "faCaretDown", "faHouseChimneyMedical", "faClinicMedical", "faTemperatureThreeQuarters", "faTemperature3", "faThermometer3", "faThermometerThreeQuarters", "faMobileScreen", "faMobileAndroidAlt", "faPlaneUp", "faPiggyBank", "faBatteryHalf", "faBattery3", "faMountainCity", "faCoins", "faKhanda", "faSliders", "faSlidersH", "faFolderTree", "faNetworkWired", "faMapPin", "faHamsa", "faCentSign", "faFlask", "faPersonPregnant", "faWandSparkles", "faEllipsisVertical", "faEllipsisV", "faTicket", "faPowerOff", "faRightLong", "faLongArrowAltRight", "faFlagUsa", "faLaptopFile", "faTty", "faTeletype", "faDiagramNext", "faPersonRifle", "faHouseMedicalCircleExclamation", "faClosedCaptioning", "faPersonHiking", "faHiking", "faVenusDouble", "faImages", "faCalculator", "faPeoplePulling", "faN", "faCableCar", "faTram", "faCloudRain", "faBuildingCircleXmark", "faShip", "faArrowsDownToLine", "faDownload", "faFaceGrin", "faGrin", "faDeleteLeft", "faBackspace", "faEyeDropper", "faEyeDropperEmpty", "faEyedropper", "faFileCircleCheck", "faForward", "faMobile", "faMobileAndroid", "faMobilePhone", "faFaceMeh", "faMeh", "faAlignCenter", "faBookSkull", "faBookDead", "faIdCard", "faDriversLicense", "faOutdent", "faDedent", "faHeartCircleExclamation", "faHouse", "faHome", "faHomeAlt", "faHomeLgAlt", "faCalendarWeek", "faLaptopMedical", "faB", "faFileMedical", "faDiceOne", "faKiwiBird", "faArrowRightArrowLeft", "faExchange", "faRotateRight", "faRedoAlt", "faRotateForward", "faUtensils", "faCutlery", "faArrowUpWideShort", "faSortAmountUp", "faMillSign", "faBowlRice", "faSkull", "faTowerBroadcast", "faBroadcastTower", "faTruckPickup", "faUpLong", "faLongArrowAltUp", "faStop", "faCodeMerge", "faUpload", "faHurricane", "faMound", "faToiletPortable", "faCompactDisc", "faFileArrowDown", "faFileDownload", "faCaravan", "faShieldCat", "faBolt", "faZap", "faGlassWater", "faOilWell", "faVault", "faMars", "faToilet", "faPlaneCircleXmark", "faYenSign", "faCny", "faJpy", "faRmb", "faYen", "faRubleSign", "faRouble", "faRub", "faRuble", "faSun", "faGuitar", "faFaceLaughWink", "faLaughWink", "faHorseHead", "faBoreHole", "faIndustry", "faCircleDown", "faArrowAltCircleDown", "faArrowsTurnToDots", "faFlorinSign", "faArrowDownShortWide", "faSortAmountDesc", "faSortAmountDownAlt", "faLessThan", "faAngleDown", "faCarTunnel", "faHeadSideCough", "faGripLines", "faThumbsDown", "faUserLock", "faArrowRightLong", "faLongArrowRight", "faAnchorCircleXmark", "faEllipsis", "faEllipsisH", "faChessPawn", "faKitMedical", "faFirstAid", "faPersonThroughWindow", "faToolbox", "faHandsHoldingCircle", "faBug", "faCreditCard", "faCreditCardAlt", "faCar", "faAutomobile", "faHandHoldingHand", "faBookOpenReader", "faBookReader", "faMountainSun", "faArrowsLeftRightToLine", "faDiceD20", "faTruckDroplet", "faFileCircleXmark", "faTemperatureArrowUp", "faTemperatureUp", "faMedal", "faBed", "faSquareH", "faHSquare", "faPodcast", "faTemperatureFull", "faTemperature4", "faThermometer4", "faThermometerFull", "faBell", "faSuperscript", "faPlugCircleXmark", "faStarOfLife", "faPhoneSlash", "faPaintRoller", "faHandshakeAngle", "faHandsHelping", "faLocationDot", "faMapMarkerAlt", "faFile", "faGreaterThan", "faPersonSwimming", "faSwimmer", "faArrowDown", "faDroplet", "faTint", "faEraser", "faEarthAmericas", "faEarth", "faEarthAmerica", "faGlobeAmericas", "faPersonBurst", "faDove", "faBatteryEmpty", "faBattery0", "faSocks", "faInbox", "faSection", "faGaugeHigh", "faTachometerAlt", "faTachometerAltFast", "faEnvelopeOpenText", "faHospital", "faHospitalAlt", "faHospitalWide", "faWineBottle", "faChessRook", "faBarsStaggered", "faReorder", "faStream", "faDharmachakra", "faHotdog", "faPersonWalkingWithCane", "faBlind", "faDrum", "faIceCream", "faHeartCircleBolt", "faFax", "faParagraph", "faCheckToSlot", "faVoteYea", "faStarHalf", "faBoxesStacked", "faBoxes", "faBoxesAlt", "faLink", "faChain", "faEarListen", "faAssistiveListeningSystems", "faTreeCity", "faPlay", "faFont", "faTableCellsRowLock", "faRupiahSign", "faMagnifyingGlass", "faSearch", "faTableTennisPaddleBall", "faPingPongPaddleBall", "faTableTennis", "faPersonDotsFromLine", "faDiagnoses", "faTrashCanArrowUp", "faTrashRestoreAlt", "faNairaSign", "faCartArrowDown", "faWalkieTalkie", "faFilePen", "faFileEdit", "faReceipt", "faSquarePen", "faPenSquare", "faPencilSquare", "faSuitcaseRolling", "faPersonCircleExclamation", "faChevronDown", "faBatteryFull", "faBattery", "faBattery5", "faSkullCrossbones", "faCodeCompare", "faListUl", "faListDots", "faSchoolLock", "faTowerCell", "faDownLong", "faLongArrowAltDown", "faRankingStar", "faChessKing", "faPersonHarassing", "faBrazilianRealSign", "faLandmarkDome", "faLandmarkAlt", "faArrowUp", "faTv", "faTelevision", "faTvAlt", "faShrimp", "faListCheck", "faTasks", "faJugDetergent", "faCircleUser", "faUserCircle", "faUserShield", "faWind", "faCarBurst", "faCarCrash", "faY", "faPersonSnowboarding", "faSnowboarding", "faTruckFast", "faShippingFast", "faFish", "faUserGraduate", "faCircleHalfStroke", "faAdjust", "faClapperboard", "faCircleRadiation", "faRadiationAlt", "faBaseball", "faBaseballBall", "faJetFighterUp", "faDiagramProject", "faProjectDiagram", "faCopy", "faVolumeXmark", "faVolumeMute", "faVolumeTimes", "faHandSparkles", "faGrip", "faGripHorizontal", "faShareFromSquare", "faShareSquare", "faChildCombatant", "faChildRifle", "faGun", "faSquarePhone", "faPhoneSquare", "faPlus", "faAdd", "faExpand", "faComputer", "faXmark", "faClose", "faMultiply", "faRemove", "faTimes", "faArrowsUpDownLeftRight", "faArrows", "faChalkboardUser", "faChalkboardTeacher", "faPesoSign", "faBuildingShield", "faBaby", "faUsersLine", "faQuoteLeft", "faQuoteLeftAlt", "faTractor", "faTrashArrowUp", "faTrashRestore", "faArrowDownUpLock", "faLinesLeaning", "faRulerCombined", "faCopyright", "faEquals", "faBlender", "faTeeth", "faShekelSign", "faIls", "faShekel", "faSheqel", "faSheqelSign", "faMap", "faRocket", "faPhotoFilm", "faPhotoVideo", "faFolderMinus", "faHexagonNodesBolt", "faStore", "faArrowTrendUp", "faPlugCircleMinus", "faSignHanging", "faSign", "faBezierCurve", "faBellSlash", "faTablet", "faTabletAndroid", "faSchoolFlag", "faFill", "faAngleUp", "faDrumstickBite", "faHollyBerry", "faChevronLeft", "faBacteria", "faHandLizard", "faNotdef", "faDisease", "faBriefcaseMedical", "faGenderless", "faChevronRight", "faRetweet", "faCarRear", "faCarAlt", "faPumpSoap", "faVideoSlash", "faBatteryQuarter", "faBattery2", "faRadio", "faBabyCarriage", "faCarriageBaby", "faTrafficLight", "faThermometer", "faVrCardboard", "faHandMiddleFinger", "faPercent", "faPercentage", "faTruckMoving", "faGlassWaterDroplet", "faDisplay", "faFaceSmile", "faSmile", "faThumbtack", "faThumbTack", "faTrophy", "faPersonPraying", "faPray", "faHammer", "faHandPeace", "faRotate", "faSyncAlt", "faSpinner", "faRobot", "faPeace", "faGears", "faCogs", "faWarehouse", "faArrowUpRightDots", "faSplotch", "faFaceGrinHearts", "faGrinHearts", "faDiceFour", "faSimCard", "faTransgender", "faTransgenderAlt", "faMercury", "faArrowTurnDown", "faLevelDown", "faPersonFallingBurst", "faAward", "faTicketSimple", "faTicketAlt", "faBuilding", "faAnglesLeft", "faAngleDoubleLeft", "faQrcode", "faClockRotateLeft", "faHistory", "faFaceGrinBeamSweat", "faGrinBeamSweat", "faFileExport", "faArrowRightFromFile", "faShield", "faShieldBlank", "faArrowUpShortWide", "faSortAmountUpAlt", "faCommentNodes", "faHouseMedical", "faGolfBallTee", "faGolfBall", "faCircleChevronLeft", "faChevronCircleLeft", "faHouseChimneyWindow", "faPenNib", "faTentArrowTurnLeft", "faTents", "faWandMagic", "faMagic", "faDog", "faCarrot", "faMoon", "faWineGlassEmpty", "faWineGlassAlt", "faCheese", "faYinYang", "faMusic", "faCodeCommit", "faTemperatureLow", "faPersonBiking", "faBiking", "faBroom", "faShieldHeart", "faGopuram", "faEarthOceania", "faGlobeOceania", "faSquareXmark", "faTimesSquare", "faXmarkSquare", "faHashtag", "faUpRightAndDownLeftFromCenter", "faExpandAlt", "faOilCan", "faT", "faHippo", "faChartColumn", "faInfinity", "faVialCircleCheck", "faPersonArrowDownToLine", "faVoicemail", "faFan", "faPersonWalkingLuggage", "faUpDown", "faArrowsAltV", "faCloudMoonRain", "faCalendar", "faTrailer", "faBahai", "faHaykal", "faSdCard", "faDragon", "faShoePrints", "faCirclePlus", "faPlusCircle", "faFaceGrinTongueWink", "faGrinTongueWink", "faHandHolding", "faPlugCircleExclamation", "faLinkSlash", "faChainBroken", "faChainSlash", "faUnlink", "faClone", "faPersonWalkingArrowLoopLeft", "faArrowUpZA", "faSortAlphaUpAlt", "faFireFlameCurved", "faFireAlt", "faTornado", "faFileCirclePlus", "faBookQuran", "faQuran", "faAnchor", "faBorderAll", "faFaceAngry", "faAngry", "faCookieBite", "faArrowTrendDown", "faRss", "faFeed", "faDrawPolygon", "faScaleBalanced", "faBalanceScale", "faGaugeSimpleHigh", "faTachometer", "faTachometerFast", "faShower", "faDesktop", "faDesktopAlt", "faM", "faTableList", "faThList", "faCommentSms", "faSms", "faBook", "faUserPlus", "faCheck", "faBatteryThreeQuarters", "faBattery4", "faHouseCircleCheck", "faAngleLeft", "faDiagramSuccessor", "faTruckArrowRight", "faArrowsSplitUpAndLeft", "faHandFist", "faFistRaised", "faCloudMoon", "faBriefcase", "faPersonFalling", "faImagePortrait", "faPortrait", "faUserTag", "faRug", "faEarthEurope", "faGlobeEurope", "faCartFlatbedSuitcase", "faLuggageCart", "faRectangleXmark", "faRectangleTimes", "faTimesRectangle", "faWindowClose", "faBahtSign", "faBookOpen", "faBookJournalWhills", "faJournalWhills", "faHandcuffs", "faTriangleExclamation", "faExclamationTriangle", "faWarning", "faDatabase", "faShare", "faMailForward", "faBottleDroplet", "faMaskFace", "faHillRockslide", "faRightLeft", "faExchangeAlt", "faPaperPlane", "faRoadCircleExclamation", "faDungeon", "faAlignRight", "faMoneyBill1Wave", "faMoneyBillWaveAlt", "faLifeRing", "faHands", "faSignLanguage", "faSigning", "faCalendarDay", "faWaterLadder", "faLadderWater", "faSwimmingPool", "faArrowsUpDown", "faArrowsV", "faFaceGrimace", "faGrimace", "faWheelchairMove", "faWheelchairAlt", "faTurnDown", "faLevelDownAlt", "faPersonWalkingArrowRight", "faSquareEnvelope", "faEnvelopeSquare", "faDice", "faBowlingBall", "faBrain", "faBandage", "faBandAid", "faCalendarMinus", "faCircleXmark", "faTimesCircle", "faXmarkCircle", "faGifts", "faHotel", "faEarthAsia", "faGlobeAsia", "faIdCardClip", "faIdCardAlt", "faMagnifyingGlassPlus", "faSearchPlus", "faThumbsUp", "faUserClock", "faHandDots", "faAllergies", "faFileInvoice", "faWindowMinimize", "faMugSaucer", "faCoffee", "faBrush", "faFileHalfDashed", "faMask", "faMagnifyingGlassMinus", "faSearchMinus", "faRulerVertical", "faUserLarge", "faUserAlt", "faTrainTram", "faUserNurse", "faSyringe", "faCloudSun", "faStopwatch20", "faSquareFull", "faMagnet", "faJar", "faNoteSticky", "faStickyNote", "faBugSlash", "faArrowUpFromWaterPump", "faBone", "faTableCellsRowUnlock", "faUserInjured", "faFaceSadTear", "faSadTear", "faPlane", "faTentArrowsDown", "faExclamation", "faArrowsSpin", "faPrint", "faTurkishLiraSign", "faTry", "faTurkishLira", "faDollarSign", "faDollar", "faUsd", "faX", "faMagnifyingGlassDollar", "faSearchDollar", "faUsersGear", "faUsersCog", "faPersonMilitaryPointing", "faBuildingColumns", "faBank", "faInstitution", "faMuseum", "faUniversity", "faUmbrella", "faTrowel", "faD", "faStapler", "faMasksTheater", "faTheaterMasks", "faKipSign", "faHandPointLeft", "faHandshakeSimple", "faHandshakeAlt", "faJetFighter", "faFighterJet", "faSquareShareNodes", "faShareAltSquare", "faBarcode", "faPlusMinus", "faVideo", "faVideoCamera", "faGraduationCap", "faMortarBoard", "faHandHoldingMedical", "faPersonCircleCheck", "faTurnUp", "faLevelUpAlt", "icons", "faTrashCan", "faTrashAlt", "faMessage", "faCommentAlt", "faFileLines", "faFileAlt", "faFileText", "faCalendarDays", "faCalendarAlt", "faHandPointRight", "faFaceSmileBeam", "faSmileBeam", "faFaceGrinStars", "faGrinStars", "faAddressBook", "faContactBook", "faComments", "faPaste", "faFileClipboard", "faFaceGrinTongueSquint", "faGrinTongueSquint", "faFaceFlushed", "faFlushed", "faSquareCaretRight", "faCaretSquareRight", "faSquareMinus", "faMinusSquare", "faCompass", "faSquareCaretDown", "faCaretSquareDown", "faFaceKissBeam", "faKissBeam", "faLightbulb", "faFlag", "faSquareCheck", "faCheckSquare", "faCircleDot", "faDotCircle", "faFaceDizzy", "faDizzy", "faFutbol", "faFutbolBall", "faSoccerBall", "faPenToSquare", "faEdit", "faHourglassHalf", "faHourglass2", "faEyeSlash", "faHand", "faHandPaper", "faHandSpock", "faFaceKiss", "faKiss", "faFaceGrinTongue", "faGrinTongue", "faChessBishop", "faFaceGrinWink", "faGrinWink", "faFaceGrinWide", "faGrinAlt", "faFaceFrownOpen", "faFrownOpen", "faHandPointUp", "faBookmark", "faHandPointDown", "faFolder", "faFolderBlank", "faUser", "faSquareCaretLeft", "faCaretSquareLeft", "faStar", "faChessKnight", "faFaceLaughSquint", "faLaughSquint", "faFaceLaugh", "faLaugh", "faFolderOpen", "faClipboard", "faChessQueen", "faHandBackFist", "faHandRock", "faSquareCaretUp", "faCaretSquareUp", "faChartBar", "faBarChart", "faWindowRestore", "faSquarePlus", "faPlusSquare", "faImage", "faFolderClosed", "faLemon", "faHandshake", "faGem", "faCirclePlay", "faPlayCircle", "faCircleCheck", "faCheckCircle", "faCircleStop", "faStopCircle", "faIdBadge", "faFaceLaughBeam", "faLaughBeam", "faRegistered", "faAddressCard", "faContactCard", "faVcard", "faFaceTired", "faTired", "faFontAwesome", "faFontAwesomeFlag", "faFontAwesomeLogoFull", "faFaceSmileWink", "faSmileWink", "faFileWord", "faFilePowerpoint", "faEnvelopeOpen", "faFileZipper", "faFileArchive", "faSquare", "faSnowflake", "faNewspaper", "faFaceKissWinkHeart", "faKissWinkHeart", "faStarHalfStroke", "faStarHalfAlt", "faFileExcel", "faFaceGrinBeam", "faGrinBeam", "faObjectUngroup", "faCircleRight", "faArrowAltCircleRight", "faFaceRollingEyes", "faMehRollingEyes", "faObjectGroup", "faHeart", "faFaceSurprise", "faSurprise", "faCirclePause", "faPauseCircle", "faCircle", "faCircleUp", "faArrowAltCircleUp", "faFileAudio", "faFileImage", "faCircleQuestion", "faQuestionCircle", "faFaceMehBlank", "faMehBlank", "faEye", "faFaceSadCry", "faSadCry", "faFileCode", "faWindowMaximize", "faFaceFrown", "faFrown", "faFloppyDisk", "faSave", "faCommentDots", "faCommenting", "faFaceGrinSquint", "faGrinSquint", "faHandPointer", "faHandScissors", "faFaceGrinTears", "faGrinTears", "faCalendarXmark", "faCalendarTimes", "faFileVideo", "faFilePdf", "faComment", "faEnvelope", "faHourglass", "faHourglassEmpty", "faCalendarCheck", "faHardDrive", "faHdd", "faFaceGrinSquintTears", "faGrinSquintTears", "faRectangleList", "faListAlt", "faCalendarPlus", "faCircleLeft", "faArrowAltCircleLeft", "faMoneyBill1", "faMoneyBillAlt", "faClock", "faClockFour", "faKeyboard", "faClosedCaptioning", "faImages", "faFaceGrin", "faGrin", "faFaceMeh", "faMeh", "faIdCard", "faDriversLicense", "faSun", "faFaceLaughWink", "faLaughWink", "faCircleDown", "faArrowAltCircleDown", "faThumbsDown", "faChessPawn", "faCreditCard", "faCreditCardAlt", "faBell", "faFile", "faHospital", "faHospitalAlt", "faHospitalWide", "faChessRook", "faStarHalf", "faChessKing", "faCircleUser", "faUserCircle", "faCopy", "faShareFromSquare", "faShareSquare", "faCopyright", "faMap", "faBellSlash", "faHandLizard", "faFaceSmile", "faSmile", "faHandPeace", "faFaceGrinHearts", "faGrinHearts", "faBuilding", "faFaceGrinBeamSweat", "faGrinBeamSweat", "faMoon", "faCalendar", "faFaceGrinTongueWink", "faGrinTongueWink", "faClone", "faFaceAngry", "faAngry", "faRectangleXmark", "faRectangleTimes", "faTimesRectangle", "faWindowClose", "faPaperPlane", "faLifeRing", "faFaceGrimace", "faGrimace", "faCalendarMinus", "faCircleXmark", "faTimesCircle", "faXmarkCircle", "faThumbsUp", "faWindowMinimize", "faSquareFull", "faNoteSticky", "faStickyNote", "faFaceSadTear", "faSadTear", "faHandPointLeft", "icons", "faMonero", "faHooli", "faYelp", "faCcVisa", "faLastfm", "faShopware", "faCreativeCommonsNc", "faAws", "faRedhat", "faYoast", "faCloudflare", "faUps", "faPixiv", "faWpexplorer", "faDyalog", "faBity", "faStackpath", "faBuysellads", "faFirstOrder", "faModx", "faGuilded", "faVnv", "faSquareJs", "faJsSquare", "faMicrosoft", "faQq", "faOrcid", "faJava", "faInvision", "faCreativeCommonsPdAlt", "faCentercode", "faGlideG", "faDrupal", "faJxl", "faDartLang", "faHireAHelper", "faCreativeCommonsBy", "faUnity", "faWhmcs", "faRocketchat", "faVk", "faUntappd", "faMailchimp", "faCss3Alt", "faSquareReddit", "faRedditSquare", "faVimeoV", "faContao", "faSquareFontAwesome", "faDeskpro", "faBrave", "faSistrix", "faSquareInstagram", "faInstagramSquare", "faBattleNet", "faTheRedYeti", "faSquareHackerNews", "faHackerNewsSquare", "faEdge", "faThreads", "faNapster", "faSquareSnapchat", "faSnapchatSquare", "faGooglePlusG", "faArtstation", "faMarkdown", "faSourcetree", "faGooglePlus", "faDiaspora", "faFoursquare", "faStackOverflow", "faGithubAlt", "faPhoenixSquadron", "faPagelines", "faAlgolia", "faRedRiver", "faCreativeCommonsSa", "faSafari", "faGoogle", "faSquareFontAwesomeStroke", "faFontAwesomeAlt", "faAtlassian", "faLinkedinIn", "faDigitalOcean", "faNimblr", "faChromecast", "faEvernote", "faHackerNews", "faCreativeCommonsSampling", "faAdversal", "faCreativeCommons", "faWatchmanMonitoring", "faFonticons", "faWeixin", "faShirtsinbulk", "faCodepen", "faGitAlt", "faLyft", "faRev", "faWindows", "faWizardsOfTheCoast", "faSquareViadeo", "faViadeoSquare", "faMeetup", "faCentos", "faAdn", "faCloudsmith", "faOpensuse", "faPiedPiperAlt", "faSquareDribbble", "faDribbbleSquare", "faCodiepie", "faNode", "faMix", "faSteam", "faCcApplePay", "faScribd", "faDebian", "faOpenid", "faInstalod", "faFilesPinwheel", "faExpeditedssl", "faSellcast", "faSquareTwitter", "faTwitterSquare", "faRProject", "faDelicious", "faFreebsd", "faVuejs", "faAccusoft", "faIoxhost", "faFonticonsFi", "faAppStore", "faCcMastercard", "faItunesNote", "faGolang", "faKickstarter", "faSquareKickstarter", "faGrav", "faWeibo", "faUncharted", "faFirstdraft", "faSquareYoutube", "faYoutubeSquare", "faWikipediaW", "faWpressr", "faRendact", "faAngellist", "faGalacticRepublic", "faNfcDirectional", "faSkype", "faJoget", "faFedora", "faStripeS", "faMeta", "faLaravel", "faHotjar", "faBluetoothB", "faSquareLetterboxd", "faStickerMule", "faCreativeCommonsZero", "faHips", "faCss", "faBehance", "faReddit", "faDiscord", "faChrome", "faAppStoreIos", "faCcDiscover", "faWpbeginner", "faConfluence", "faShoelace", "faMdb", "faDochub", "faAccessibleIcon", "faEbay", "faAmazon", "faUnsplash", "faYarn", "faSquareSteam", "faSteamSquare", "fa500px", "faSquareVimeo", "faVimeoSquare", "faAsymmetrik", "faFontAwesome", "faFontAwesomeFlag", "faFontAwesomeLogoFull", "faGratipay", "faApple", "faHive", "faGitkraken", "faKeybase", "faApplePay", "faPadlet", "faAmazonPay", "faSquareGithub", "faGithubSquare", "faStumbleupon", "faFedex", "faPhoenixFramework", "faShopify", "faNeos", "faSquareThreads", "faHackerrank", "faResearchgate", "faSwift", "faAngular", "faSpeakap", "faAngrycreative", "faYCombinator", "faEmpire", "faEnvira", "faGoogleScholar", "faSquareGitlab", "faGitlabSquare", "faStudiovinari", "faPiedPiper", "faWordpress", "faProductHunt", "faFirefox", "faLinode", "faGoodreads", "faSquareOdnoklassniki", "faOdnoklassnikiSquare", "faJsfiddle", "faSith", "faThemeisle", "faPage4", "faHashnode", "faReact", "faCcPaypal", "faSquarespace", "faCcStripe", "faCreativeCommonsShare", "faBitcoin", "faKeycdn", "faOpera", "faItchIo", "faUmbraco", "faGalacticSenate", "faUbuntu", "faDraft2digital", "faStripe", "faHouzz", "faGg", "faDhl", "faSquarePinterest", "faPinterestSquare", "faXing", "faBlackberry", "faCreativeCommonsPd", "faPlaystation", "faQuinscape", "faLess", "faBloggerB", "faOpencart", "faVine", "faSignalMessenger", "faPaypal", "faGitlab", "faTypo3", "faRedditAlien", "faYahoo", "faDailymotion", "faAffiliatetheme", "faPiedPiperPp", "faBootstrap", "faOdnoklassniki", "faNfcSymbol", "faMintbit", "faEthereum", "faSpeakerDeck", "faCreativeCommonsNcEu", "faPatreon", "faAvianex", "faEllo", "faGofore", "faBimobject", "faBraveReverse", "faFacebookF", "faSquareGooglePlus", "faGooglePlusSquare", "faWebAwesome", "faMandalorian", "faFirstOrderAlt", "faOsi", "faGoogleWallet", "faDAndDBeyond", "faPeriscope", "faFulcrum", "faCloudscale", "faForumbee", "faMizuni", "faSchlix", "faSquareXing", "faXingSquare", "faBandcamp", "faWpforms", "faCloudversify", "faUsps", "faMegaport", "faMagento", "faSpotify", "faOptinMonster", "faFly", "faSquareBluesky", "faAviato", "faItunes", "faCuttlefish", "faBlogger", "faFlickr", "faViber", "faSoundcloud", "faDigg", "faTencentWeibo", "faLetterboxd", "faSymfony", "faMaxcdn", "faEtsy", "faFacebookMessenger", "faAudible", "faThinkPeaks", "faBilibili", "faErlang", "faXTwitter", "faCottonBureau", "faDashcube", "fa42Group", "faInnosoft", "faStackExchange", "faElementor", "faSquarePiedPiper", "faPiedPiperSquare", "faCreativeCommonsNd", "faPalfed", "faSuperpowers", "faResolving", "faXbox", "faSquareWebAwesomeStroke", "faSearchengin", "faTiktok", "faSquareFacebook", "faFacebookSquare", "faRenren", "faLinux", "faGlide", "faLinkedin", "faHubspot", "faDeploydog", "faTwitch", "faFlutter", "faRavelry", "faMixer", "faSquareLastfm", "faLastfmSquare", "faVimeo", "faMendeley", "faUniregistry", "faFigma", "faCreativeCommonsRemix", "faCcAmazonPay", "faDropbox", "faInstagram", "faCmplid", "faUpwork", "faFacebook", "faGripfire", "faJediOrder", "faUikit", "faFortAwesomeAlt", "faPhabricator", "faUssunnah", "faEarlybirds", "faTradeFederation", "faAutoprefixer", "faWhatsapp", "faSquareUpwork", "faSlideshare", "faGooglePlay", "faViadeo", "faLine", "faGoogleDrive", "faServicestack", "faSimplybuilt", "faBitbucket", "faImdb", "faDeezer", "faRaspberryPi", "faJira", "faDocker", "faScreenpal", "faBluetooth", "faGitter", "faDAndD", "faMicroblog", "faCcDinersClub", "faGgCircle", "faPiedPiperHat", "faKickstarterK", "faYandex", "faReadme", "faHtml5", "faSellsy", "faSquareWebAwesome", "faSass", "faWirsindhandwerk", "faWsh", "faBuromobelexperte", "faSalesforce", "faOctopusDeploy", "faMedapps", "faNs8", "faPinterestP", "faApper", "faFortAwesome", "faWaze", "faBluesky", "faCcJcb", "faSnapchat", "faSnapchatGhost", "faFantasyFlightGames", "faRust", "faWix", "faSquareBehance", "faBehanceSquare", "faSupple", "faWebflow", "faRebel", "faCss3", "faStaylinked", "faKaggle", "faSpaceAwesome", "faDeviantart", "faCpanel", "faGoodreadsG", "faSquareGit", "faGitSquare", "faSquareTumblr", "faTumblrSquare", "faTrello", "faCreativeCommonsNcJp", "faGetPocket", "faPerbyte", "faGrunt", "faWeebly", "faConnectdevelop", "faLeanpub", "faBlackTie", "faThemeco", "faPython", "faAndroid", "faBots", "faFreeCodeCamp", "faHornbill", "faJs", "faIdeal", "faGit", "faDev", "faSketch", "faYandexInternational", "faCcAmex", "faUber", "faGithub", "faPhp", "faAlipay", "faYoutube", "faSkyatlas", "faFirefoxBrowser", "faReplyd", "faSuse", "faJenkins", "faTwitter", "faRockrms", "faPinterest", "faBuffer", "faNpm", "faYammer", "faBtc", "faDribbble", "faStumbleuponCircle", "faInternetExplorer", "faStubber", "faTelegram", "faTelegramPlane", "faOldRepublic", "faOdysee", "faSquareWhatsapp", "faWhatsappSquare", "faNodeJs", "faEdgeLegacy", "faSlack", "faSlackHash", "faMedrt", "faUsb", "faTumblr", "faVaadin", "faQuora", "faSquareXTwitter", "faReacteurope", "faMedium", "faMediumM", "faAmilia", "faMixcloud", "faFlipboard", "faViacoin", "faCriticalRole", "faSitrox", "faDiscourse", "faJoomla", "faMastodon", "faAirbnb", "faWolfPackBattalion", "faBuyNLarge", "faGulp", "faCreativeCommonsSamplingPlus", "faStrava", "faEmber", "faCanadianMapleLeaf", "faTeamspeak", "faPushed", "faWordpressSimple", "faNutritionix", "faWodu", "faGooglePay", "faIntercom", "faZhihu", "faKorvue", "faPix", "faSteamSymbol", "icons", "_event", "library$1", "icons", "dom$1", "iframeId", "iframe", "Rails", "turbo_es2017_esm_exports", "_event"]
}
